Short for: Self Propelled Acer Netbook Robot
Status: Glorified RC car. First video posted.
Back story: I bought a bunch of robot stuff off ebay, this being one of the robots. The netbook battery was pretty flat so first thing I did was try to charge it up. It's now over 11v (started near 8v). I've yet to identify the netbook and haven't disassembled the robot far enough to read any identifying markings on the motherboard. Housed in a project box at the top of the robot was a DFRobot Arduino Mega clone (DFrduino?) with a Dagu 4-Channel Motor Controller. The wiring had been gutted and there are holes drilled in the project box to mount switches and servos. Two solder-free breadboards are stuck to the project box, perhaps for prototying sensor circuits. The chassis has four 12v gear motors driving some chunky wheels. I'm not certain but I think the chassis itself may be Lynxmotion in origin as there are mounting holes on each face which match the arrangement used on the Lynxmotion biped robot (which also came with this robot junk collection).
Planning: Intend to get the netbook up and running, see what software it has and install Arduino IDE and Processing if not already there. Will then wire up the 4-Channel motor controller to the Mega and link it to the netbook by USB. First step will be remote control, using the APC220 wireless serial link and a second arduino. If all goes well I'll start looking at adding sensors to the robot.
Update 08/12/12: When I got home the charging light was green. Battery voltage is now 12.36v (though charger is 19v). Three Li-ion cells (I'll track down some info on the cells and see if this is properly charged or not). I got the camera set up (wanting to video the first boot) and tried booting. Green (power) light and some noise, the LCD flashes up with an Acer logo and bios hotkey info but only for a brief moment and then the netbook was off again. Further investigation required, happy that I know the LCD is working but can't say for certain what else is/isn't working.
Update 09/12/12: Later last night I disassembled the top of the robot to see why the netbook wasn't booting. I reseated the memory and the hard drive, neither seemed to be the source of the issue. The battery connection was disconnected and reconnected a few times, so either that was halting the boot or something else magically revived itself as the netbook sprung to life. It turns out I have an Acer Aspire One, 1.6GHz Atom N270 with 1Gb RAM, 160Gb HD running Windows XP. Preloaded on the netbook was Arduino IDE, Python, Lynxmotion sequencer and a few other robot-related pieces of software. A software package to facilitate desktop sharing/remote connection was installed, which would explain the lack of keyboard, though for now I'm just using a wireless keyboard and mouse. With the netbook up and running (just need to connect the wifi card) I'm eager to get the motors wired up to the motor controller and get SPANR moving.
Update 09/12/12 (PM): Quick update to say I had the Arduino communicating with the motor controller (and feeding back info about current draw) for one motor. Tomorrow I should have all four running (resisting the urge to stay up all night tinkering). I'm getting a lot of fun out of programming the robot using the netbook, in fact I'm writing this update on the robot while I'm sitting on the floor and SPANR is propped up on the coffee table =D.
Update 10/12/12: In attempting to skip a step I've blown a fuse in my head regarding the serial communications protocol between the netbook and the arduino. That's not to say it isn't working, I've got 4 bytes of data on the current draw (one byte for each channel) constantly flying back from the arduino to the netbook. Going in the other direction I tried to modify some code I had thrown together a while back and I can't figure out why it isn't telling the arduino to set the motor speeds correctly. Not to worry though, I'll get there and I did get all four motor up to 100% speed albeit on 7.2v instead of 12v (big battery is now on charge). I've got a GUI (screenshot below) in processing which displays a few buttons (forward/back/right/left/stop), gauges to show the set speed of each motor and ammeters which display the current draw (the scale ticks are still a bit off though).
(these aren't actual readouts from the robot, just values I was using to check visuals, range, numbering etc.)
Update 14/12/12: Got a little distracted with the interface coding as I attempted to use controlP5 then discovering it requires Processing 2.0b3 or above. This would be fine but Firmata wasn't playing ball (I was happily using Processing 1.5.1 with Firmata). Thankfully I found this fork of Firmata which fixes the issue and I have my sketch working in 2.0b3 with controlP5 and Firmata. After all that I decided I preferred the look of my own interface elements and will continue developing them myself. I reckon I'll still find some use for the controlP5 and I'll be scouring it's source code for some handy tips to improve the look and feel of my interface.
I had the robot down at my local fab-lab, MAKLab, and as the gallery space next door was not in use I took SPANR for a spin. I had him driving back and forth on my carpeted floor at home but wasn't getting much turning out of him. On the polished concrete he fared a little better and I used the opportunity to tinker with some different motor power distribution to see which provided faster or tighter turns. I took some video footage as I tinkered and will edit it shortly and post it here.
Update 23/12/12: Been working on other things. The footage I shot while taking SPANR for a spin around MAKLab is now edited and the video is above.
Update 02/01/13: I have been battling with Firmata trying to implement a Devantech SRF04 ultrasonic rangefinder. I have tried modifying StandardFirmata so that the ultrasonic rangefinder is polled by the Arduino and the data is returned to the netbook/Processing whenever Analog pin 15 is read. I've proven my rangefinder subroutine in a seperate sketch (it was spitting back ranges via serial without any problems) but I keep hitting a brick wall with Firmata. On the processing side I've stripped back to the bare minimum and calling analogRead(15) every 3 seconds (taking it nice and slow to begin with, will speed up the calls when autonomously roaming). While I've been working on this I've also been unsuccessfully trying to set the position of a servo (and again this works in a simpler sketch but not within StandardFirmata). As much as I'm struggling with Firmata I really don't want to go back down the route of implementing my own serial data protocol. In other news I shortened the USB lead for the Arduino and extended the USB lead for the hub, already looks a lot tidier, more cable management required though.