Fletch's Fab Academy 2014 Blog
15. Interface and Application Programming
This weeks task was, "write an application that interfaces with an
input &/or output device". For my final project I'm
planning on a group / swarm of mini robots that can be used to
investigate group or co-operative behaviours. The PC control
application for this needs to be able to do the following:
- Communicate with all of the robots.
- Start / Stop all robot activity.
- Tell the robots what 'rules' to use.
- Add / remove robots from groups.
- Ask robots to 'blink' to identify themselves.
- Show per robot status info (battery level, sensor inputs etc.)
I'm confident with a few programming languages, but I've never used
'Processing' as a language. So for this weeks task I decided
to investigate Processing by using it for a simple UI to control the
movement of a single robot. I also used this week as a
opportunity to investigate the robot hardware side of my final
project slightly more.
15.01 The Hardware
After investigation from last week I've decided to use micro servo's
modified for 360 degree rotation to drive the wheels of my
robots. So I modified two servos (see link here for details of the modification)
and built a simple two wheeled robot to test with. The robot
is a simple PCB with two H-Bridge motor drivers for the modified
servos, LED's to show the motor states and 5v serial interface for
communications with the PC.
The wheels are actually gears that I laser cut for last weeks
mechanics tests. I simply expanded the hole in the center with
an 8mm drill to make a nice press fit over the servo spindle.
The H-Bridge is the ZXMHC3A01T8
from the old Fab Lab inventory. I've created an Eagle part for
this that would be nice to share, but there isn't currently an
agreed method to do this.
Eagle design files here sch,
brd.
15.02 The Application UI
I designed a very simple UI to control the robot. I used the ControlP5
library for processing to implement simple controls for me.
These controls a visually a bit rectangular and basic compared to
those available in other widget sets, but they are functional.
In the UI above you can use the mouse to drag the cross hair around
and control the direction of the robot.
- There is a central dead zone covering about 20% in which the
robot stops.
- If the user stops dragging then the cross hairs drift back to
the vertical center (ie. the robot will stop turning, but
continue on it's forwards / backwrds movement).
- The stop button can be used to stop all movement.
I would like to add some sensors and display the sensor states on
the robot image, but this would require another board revision and
I'm out of time.
Processing UI code here.
AVR code is here.
15.03 Do it in another Language
I'd like to re-implement this in python using wxWidgets. Also
in OpenFrameworks
TBC.
15.04 Other Conclusions
I'd like to add simple position sensing to the wheels on my robot.
I'd like to add motor speed control so that the robot can make a
larger variety of turns.
Don't underestimate the time required to make your UI nice.
ToDo:
Re-implement in Python and wxWidgets to improve my understanding of
wxWidgets
Add robot reporting actual motor states.
Add sensors that the robot can report.