There’s still a number of BrushBotComm boards that people want to build up, and at Saturday’s meeting we decided to try for a somewhat impromptu board build at this Monday’s (1/10) group project meeting. I realize this is short notice, but at the meeting enough people expressed interest to make it worthwhile. We can have another small build session later for those who can’t make it.
Scott’s bringing the hot-plate reflow system and I’m bringing the parts. You bring whatever parts you might have already gotten from me, some magnifying device if needed, a soldering iron (if you have one) and some cash if you haven’t paid for parts yet.
We’ll be at the bRainSilo:
See you there!
Pete, Tim, Scott and myself will be there. Will you? Bring your Brush Bot on down and let’s get them talking!
Last time Scott and I got four or five BrushBots running around in an arena with comm boards attached — one configured as a transmitter and the others as receivers. We only had simple RX and TX code running, but the receivers were picking up messages quite frequently; much better than we were expecting, actually.
But just five bots isn’t too exciting. It’s time to get a bigger swarm together and develop better message passing code! Bring your brushbots, bring your comm boards and let’s swarm!
While Scott and I hearded bots around, Tim got his steering control of the brushbots (a homemade toothbrush-head based bot in his case) working. The really cool thing is that he’s only using a single vibrating motor, yet still getting steerability! Come on Tim… Hurry up and upload the details on how you’re doing this!
Hope to see you all tonight,
Yes, there is another PARTS Project meeting tonight!
Time: Monday 4/5, 7:00pm
Location: bRainSilo: http://brainsilo.org/wiki/Location
We will be continuing with the BrushBotComm boards — soldering on the final components, including the missing IR LED resistors and the IR
LED’s themselves; making programming cables; and learning how to load code onto them.
As I mentioned in this blog entry the ArdunioISP should work well for a programmer, and hopefully as a serial link for debugging. So, if you have a spare Arduino that you can use for a programmer, bring it. Or, I have a handful of cosmetically defective (but fully functional) Teensy2.0’s available for really cheap.
*BrushBotComm boards and extra parts you’ve received.
*Soldering iron — if you have a decent one with a fine tip. This is especially important this meeting as we have a fair amount of hand soldering to do.
*Desk lamp if you can — we didn’t really have enough light last time
*Vision enhancement devices — I’ll bring my stereo-microscope and what magnifiers I have, but I think we could have used more last time
*Money for Arduinos if you need one for programming.
*Laptop if you have one to use for programming.
I’ve been doing some experiments with the IR transmitters and receivers used on the comm board. One outstanding question is what the value of the series resistors (R1 and R2) for the transmitter should be. We want the message passing distance to be fairly short in order to keep the communications mainly between pairs of bots. But the IR power should still be sufficient to give reliable communications. Another question is whether or not the voltage from the batteries we are using will be sufficient for the IR receiver.
I made up the following test setup: For the receiver side, I took one of the IR receivers that we are using on the comma boards and mounted it in a solderless breadboard to make it easy to try resistor values. I also hooked up a variable power supply and used an ATMega328 LillyPad Arduino to drive the IR LED. The LillyPad was the only thing I had handy which would run at 8MHz and low voltage. The power supply was set to 2.75VDC which is pretty much as low as you can go with a 328 running at 8MHz and is around the voltage that the batteries can put out. I used a test program from the IRremote library (http://www.arcfn.com/2009/08/multi-protocol-infrared-remote-library.html) to repeatedly send out 0XD10 which is the Sony code for the ENTER key.
On the receiver side, I used a comm board hooked up to a variable power supply to test how the receiver coped with different voltages. Monty had written a test program for the receiver side which recognizes Sony ENTER and blinks the LEDs in a particular pattern (although the key codes in irrx.h need to all be decremented by one to be correct). With this program it is possible to move the comm board around and watch the LEDs to see where successful IR transmission occurs.
As a baseline test, I put in a 100 ohm resister into the IR transmitter circuit which gives about 20ma drive to the IR LED. Using 5VDC for the receiver, the IR transmission works successfully at quite a long distance (probably across a room).
However, lowering the receiver voltage to 2.85VDC or below results in a failure of the IR receiver to work. It still registers that an IR transmission is occurring but is unable to recognize the code. Since the batteries put out more like 2.72VDC, this is a big problem. After discussing it with Monty, we decided to short out R5, the resistor on the Vcc line into the IR receiver to try to get as much voltage into the receiver as possible. Fortunately, this seems to work and allows the receiver to work down to 2.53VDC. So I then hooked up the battery board to the comm board and (with R5 shorted) the receiver works. The rest of the result below are all done with battery power for the receiver.
I then examined how changing the transmittter series resistor affected the range:
1K ohm 18 inches
4.7K ohm 5 inches
10K ohm 2.5 inches
These distances are for on-axis communications. I’ll do some more experiments to see how the off-axis accuracy breaks down and update the table.
As I mentioned in my last post, I think ISP programming of the BrushBot Comm boards is the way to go. What’s more, it should be possible to get double-duty out of an ArudinoISP based programmer and use it as a serial link for debugging. This requires hacking the ArduinoISP sketch and setting up some sort of serial comm between the BrushBot Comm board and the ArduinoISP.
Since the tiny44 doesn’t have a UART, we could either use the SoftwareSerial library to big-bang serial on any pin, or we could make use of the SPI hardware support provided by the tiny44’s USI module. The former is prone to timing problems, but is probably easier to setup. The latter makes sense because the necessary SPI comm pins are the same as that used for ISP programming, and thus are already cabled, and the hardware comm support should reduce the flash and resource usage in the tiny44. I’ve started down the SPI route and am adding USI SPI support to the BrushBot core that would more or less replicate the functionality of the HardwareSerial code found in the Arduino core. This will allow “print” statements to work over SPI.
In order to do both the ISP programming and debug comm with a single device, we’ll need to use an Arduino rather than Atmel’s AVRISP. I picked up a handful of cosmetically defective but fully functional Teensy 2.0‘s at Monday’s DorkBot at a very reduced price that will fit the bill. If you need an Arduino to use for programming, then see me at Saturday or Monday’s meeting and get one for what I paid for it.
Good news! The latest version of Arudino (0018) makes it relatively easy to target the tiny44 we’re using on the BrushBotComm boards. I’ll get the necessary files up tomorrow. This update won’t include a bootloader though. Given the limited program space of the tiny44, we’d be better off using ISP programming anyways, and obtaining a cheap ISP programmer just got a bit easier with the ArduinoISP example sketch include in Arduino 0018!
Also, if you have the smaller BrushBotComm board (w/o the transistors), hold off on installing the 5-pin programming header if it’s not too late already. It turns out that a 6-pin header can be easily installed with the tail of the extra pin bent over such that it can be soldered to the V+ pin on either the switch or D5. This will allow the small board to match the pinout of the big board, and allow either board to be powered by the programmer. I’ll trade your 5-pin connectors for 6-pin connector the next time we meet.
Arduino support code and instructions added here: brushbotcomm-board-software