RaspiDuinoRover - (Yet another) iPhone driven moving Raspberry Pi and Arduino rover
RaspiDuinoRover is a project about making a rover with a Raspberry Pi (and its camera module) and an Arduino Uno, and controlling it with an iPhone. (or iPad, or iPod Touch).
RaspiDuinoRover is made of three main parts:
A Raspberry Pi which receives commands from a remote device through a TCP connection, and sends these commands to an Arduino Uno through an I2C connection. The same TCP channel is used to send back the remote data grabbed from the Arduino Uno about pan and tilt servo positions, camera lighting status and motors current usage. The Raspberry Pi also provides an MJPEG video stream from its camera module.
An Arduino Uno which receives commands from the Raspberry Pi though an I2C connection, and accordingly drives rover motors (with the help of an Arduino Motor Shield) and positions pan and tilt servos. It regularly gets infos about pan and tilt servo positions, camera lighting status and motors current usage, and sends it back to the Raspberry Pi when asked for.
An iOS device which serves as a remote control for the rover. It connects to the Raspberry Pi through a TCP connection, and displays its MJPEG video stream.
Wiring diagram (click to zoom)
The base of the rover is made of a Dagu Rover 5 Tracked Chassis. The Raspberry Pi camera module is mounted on a pan/tilt support with servos, and a lighting feature based on three white LED is added to allow the use of the camera in the dark. It should be possible to replace camera module by a NoIR camera module and white LED with IR LED if you want / need a discreet illumination.
Servo motors, Raspberry Pi, Arduino Uno and camera lighting are powered by a common 5V power line. This 5V power may come from a wall power supply (at least 2A), while the chassis motors have their own power source. It may be possible to make a common power supply for all items, including chassis motors, but this page won't cover this topic.
RaspiDuinoRover needs the following items to be built:
A Raspberry Pi.
A Raspberry Pi camera module.
An Arduno Uno R3.
An Arduino Motor Shield R3.
Some items listed into “bill_of_materials.ods” file.
You may want to install a fresher version of raspimjpeg even if a working binary is provided (into “./RaspberryPi/bin/” folder).
Then update “./RaspberryPi/config.py” file to fit your needs.
When you're done, just launch RaspiDuinoRover with “./RaspberryPi/raspiduinorover.sh start” as root user. When you want / need to stop it, just execute “./RaspberryPi/raspiduinorover.sh stop” as root user.
The start script will start RaspiDuinoRover server.
Streaming will be started when a user connects to the server (have a look to “./RaspberryPi/bin/stream.sh” script) and will be stopped when the last user disconnects.
How to use RaspiDuinoRemote (iPhone)
Just open XCode project then build and install RaspiDuinoRemote on your iDevice. If you don't have an Apple iOS Developper account, you may use RaspiDuinoRemote within iOS Simulator.
When application is started, enter hostname (or IP adress) of your Raspberry Pi, the server port (default value is 8000, unless changed into “config.py” file) and MJPEG stream URL (if you use MJPEG Streamer, it should be “http://<raspberrypi_ip>:8080/?action=stream”. Then tap “Connect” button.
All sources and schemas for the project are available on GitHub.