Program Your Arduino Via IR Using The Arduino IDE

Here’s a way to program an Arduino wirelessly while still using the stock IDE. It uses an alternative bootloader called SuperDuplex along with an IR receiver like the ones used for TV remotes.

As you can see, this does take two parts. There is the target device which has the IR receiver, as well as the transmitting unit which connects to the computer via USB. You can see a demonstration of the programming process after the break. It might be a bit slow, but nothing outrageous.

With hobby electronics we always thing that “what does it do?/what is it for?” is the wrong question. But in this case we there’s a very apparent use for it. If you’ve built a gadget for use in a harsh environment and want to keep the number of openings in the enclosure to a minimum (like for an underwater ROV) this is perfect. Just make sure there’s a window for the IR receiver and you’ll be able to program as much as you want. Of course it still looks like you need a method to manually reset the target chip, but you’ll think of something.

13 thoughts on “Program Your Arduino Via IR Using The Arduino IDE

  1. There is a bluetooth version, and although I think it is a neat hack, ‘wireless’ ovet BT serial modulds has been done, but I plan to try shortly on my setup

  2. Another thing this would be nice for is any situation where you need to connect the Arduino to a PC without a risk of high power surge in either direction. Such situations include using the Arduino to control motor power supplies where you don’t want to risk frying your PC (ex. home built CNC) and using the Arduino to run sensor you’re strapping to you body (temp, EEG, ECG, etc.) where you don’t want to risk a sudden surge (ex. nearby lightning strike)from the PC crossing over to the person wired up to the Arduino.

    1. I would second the reed magnet option. I had to do this once on a project that required 100% waterproofing and dust ingress. I essentially sealed the entire thing up with silicone potting and the reset button was just a depression where you put a magnet for 30 seconds. Simple, worked underwater, and best of all–cheap.

  3. You can reset by software, but it would be difficult to implement with the hardware USB transceiver.

    Ideally, a Mega8u or some other USB enabled MCU would watch for the reset/start signal from the Arduino IDE and send a reset command.

    The Arduino would be listening for this command and when heard, would jump to the bootloader at 0x3C00…

    From poking around in the source, I see is how the Kilobot loads: http://www.eecs.harvard.edu/ssr/projects/progSA/kilobot.html

    Depending on project requirements, I may add the software reset.

    Thanks!

  4. I have heard or a way to upload using a blinking window on the computer and a light dependent resistor. Would love to see this for the arduino. Its cheep and easy, only problem I see is that it has no feedback and would need a lot of error checking…

  5. Why not just have a seperate circuit that can read from the same infrared light and only trigger the reset when a certain frequency is detected? Then you can send that frequency when you need that reset. When I say frequency of course I mean like flash the infrared led 30 times a second or something that would be too slow to register with the main circuit but fast enough to avoid interference.

    Could this also be modified to be magneticaly coupled like those wireless cell phone chargers? All you would need is a few transistors to up the voltage like a level shifter, then a couple small coils each way. Getting more creative you could make a dual tap coil and use some diodes to direct the signal, then you would have just one coil. It would be half wave ac anyway.

  6. For remote reset, if the controller can initiate a reset pulse (one pin dedicated strictly to the ‘Reset’), you could easily use a transistor. If it’s base is pulled to ground, it has an extremely low current leak, registers as almost open circuit. A pulse across a diode and RC network could hold the base high plenty long enough to initiate the reset.

  7. Is there a new link to a site of this very awesome guy? I have a project in which this is the perfect solution, and I’ve yet to find a source for this… A link would be much appreciated.

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.