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