This project aims at hacking a remote controlled car by replacing the tx/rx and navigation systems. This project implements the car side.

Dependencies:   mbed-rtos mbed ssWi

This project consists of a remote controller which pilots a car holding a video camera onboard. It is divided in two main parts:

  • user side: the microcontroller reads the user input from the joystick (four potentiometers), elaborates them and then sends those commands through the wireless connection (using a XBee module);
  • car side: the microcontroller receives the sent commands (using a XBee module), elaborates them and adjusts the main engine, the steering servomotor and the two servos which move the X-Y axis of the onboard video camera.

Here are a image of the hardware and a video I recorderd and edited. http://www.mario-bambagini.it/web/sections/software/car.jpg

Concerning the part related to the user side, the project is the following.

Import programrover_pc

This project aims at hacking a remote controlled car by replacing the tx/rx and navigation systems. This project implements the pc side.

The communication protocol I exploited to make the two parts communicate each other is ssWi.

Import libraryssWi

A simple wireless protocol to let my examples communicate each other. ssWi stands for Shared Slotted Wireless protocol

Revision:
0:97d3a2b0ff58
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/carDrivers/Servo/servo.cpp	Tue Mar 12 07:35:28 2013 +0000
@@ -0,0 +1,27 @@
+#include "servo.hpp"
+
+
+Servo::Servo (PinName pwm, float min, float max, float center): _pwm(pwm)
+{
+    _pwm.period(0.02);
+    _min = min;
+    _max = max;
+    _center = center;
+    *this = 0.5;
+}
+
+Servo &Servo::operator= (float angle)
+{
+    if (angle>1.0)
+        angle = 1.0;
+    else
+        if (angle<-1.0)
+            angle = -1.0;
+    _pwm.pulsewidth(_center+((_max-_min)*(angle/2.0)));
+    return *this;
+}
+
+Servo::operator float()
+{
+    return _pwm.read();
+}