I’m working on content for next semester at the moment. One of the modules that I deliver is a second year course called 08249 Electronics and Interfacing. In this module we get to fiddle around with robots and stuff. Last year we created a controller and a slave robot. To send commands between the two devices we were using wires link the two together.
Next time I want to use infrared instead. This has proved quite an interesting challenge. Infrared is “light you can’t see”. The wavelengths of infrared signals are outside the range of the human eye, although some cameras can see them (as you can see above), where the LED appears to be lit but to the human eye it is off. I’ve actually taken pictures in the dark using an infrared sensitive camera (most mobile phone cameras pick up IR) and “painting” with a TV remote control…
However, f you want to use infrared signals to transfer data you can’t just shine an infrared light at a receiver. This is because sunlight contains lots of infrared. The receiver would not be able to distinguish the remote data from sunshine. So remote controls use modulation to make their signal stand out from the background. Modulate means change up and down. Rather than shining continuously a TV remote flashes the control signal on and off 38.000 times a second. The receiver detects signals which are changing at that rate and ignores any others, so that it can filter out background noise. This is a bit like a sailor who can tell a flashing lighthouse lamp from the light of the moon.
If you buy an infrared receiver device it will have this demodulation behaviour built in to the hardware, which is very useful. Unfortunately you don’t get this when you buy a transmitter. An infrared LED (a light that shines with infrared light) just works as a continuous light source, and so you can’t use it directly. Fortunately the .NET Micro Framework has a number of tricks that you can use to make a modulation signal. So I connected an infrared e-block to a GHI FEZ device and got started. And I found it doesn’t seem to work very well.
The reason (as I found by using my phone camera) is that the infrared led doesn’t shine very brightly. When I took a look at the circuit I found that the IR led is connected directly to the output from the microcontroller. The microcontroller can’t produce much power, and so the light was very dim. This is the same as what would happen if you connected a big speaker to the headphone output of your phone. Because the headphone output can’t deliver much power, the sound produced would not be very loud. They’ve probably designed the circuit this way so that it is fine for short range communications, but can’t produce signals that could travel a long way and affect other devices.
I don’t care about that, I just want more power. So I took a look at the visible LED e-block. This has a transistor to amplify the signal from the FEZ controller and provide more power. I decided that it would be worth swapping the visible LED for an infrared one. So I did this. Actually this part is quite funny. I very carefully took the LEDs off the two E Blocks using a solder sucker and lots of patience, and then, equally carefully, I soldered the infrared led back onto its original board. Idiot. Fortunately I managed to unsolder it again and, as you can see above, it does work and I can send an infrared signal a reasonable distance (although I’d like to send it further).
Next step is to create some kind of message protocol to send commands to a robot. Infrared commands are not very reliable (that’s why your TV remote repeats them continuously when you hold the button down) but I reckon we should be able to send enough to tell the robot what to do. Great fun.
Ha. Sorted. I can now send pulses of different lengths to the robot and make it move and stop. Later we can start using pulse position modulation and maybe even serial data.