Introduction: The Ultimate Universal IoT Solution for IR Remotes
Last year, I published an Instructable which was aimed to replace all IR Remotes with a new device - only the device could hold 4 codes and only accessible through iOS devices.
In case you missed the last project:
As a part of daily activities, everybody encounters a lot of different IR remotes, but it gets frustrating when you need multiple remotes for changing the input then controlling the new device displayed on the TV or the device is off to the side and you need to point in some weird direction so that the device actually receives the signal.
In an effort to help solve this problem, I wanted to create a device which can control multiple devices, such as the ones in entertainment systems, and can be easily controlled through phones and laptops.
The main limitations with the last version were that it could only hold a limited number of IR codes (4) at a time, was only controllable through iPhones, and had a limited range it could be controlled from.
This year, I completely reworked the device and can now:
- Hold up to 145+ IR Codes (In its default configuration and can easily be expanded)
- Edited with no external device
- Be modified and Controlled through any device connected to the internet
- Download IR codes from an online database that everybody contributes to - for if you lose your actual remote
- Change the text on Buttons
- Add icons on buttons
The new project uses an Intel Edison + an Arduino Pro to make the device easily expandable.
If you like this Instructable don't forget to vote for it!
Step 1: How It Works
There are two different major parts of the project - The Arduino and the Intel Edison.
The Intel Edison runs a NodeJS script executed every time on startup. On starting the script, it downloads the data from a collective Firebase Database. It has an page which can be accessed by any browser.The Edison uses socket.io to receive input from user. It then does what the user requests it to do - play, record, or change an IR code.
The Firebase Database gets the code and protocol from everybody's recorded IR codes. Periodically, I will go to the database and transfer the codes which aren't spam into the part that the program downloads. The Firebase Database has a function which already removes some spam entries.
The Arduino just receives IR codes from the Intel Edison and sends them out when requested to. If it gets the command to record a code, it waits for the next IR signal and sends that to the Intel Edison.
Step 2: Materials
The number of some of the materials will depend on how many devices you are controlling, but here is a basic list:
- 1 - Intel Edison + Mini breakout
- 1 - Arduino Pro Mini - 5V
- 1 - Perfboard
- 1 - 100 ohm resistor
- 1 - 38 kHz IR Receiver
- 1 - 1.8v to 5v logic level translator
- ? - 100 ohm resistor
- ? - IR LED
- Male Header Pins
- 9V battery connector
For the materials with the "?" you need to get 1 per place the IR signals needs to get emitted. For example, for controlling a DVR and TV you would need 2.
You will also need a way to program the Arduino Pro Mini (More on that in later steps).
Step 3: Software
In order to upload the necessary code to the project, you have to download some software first.
For first time Intel Edison users:
The Intel Edison may or may not come flashed with Linux. It should already be flashed with it but if not, download Flash Tool Lite. This tool flashes the Edison.
If you are using an Atmel programmer such as the AVR ISP MKII, is it important that you make sure you have the LibUSB drivers installed. This shouldn't be a problem unless you installed Atmel Studio in the past. In case you have, you can Reinstall the drivers.
Step 4: Solder Your Intel Edison Mini Breakout
In order to have connections to the Edison, you have to first add header pins so the bottom of the board. In the picture from Sparkfun, you can see the four rows where the pins should be soldered. Solder male header pins there.
Make sure that when you mount the Intel Edison on the board there isn't any solder touching the bottom of the computing module.
Step 5: Setup Your Intel Edison
The following steps are for Windows:
1. Start off by mounting the Intel Edison Compute Module on the board. Plug in two USB cables into the side of the Edison.
2. Wait for a minute then open Device Manager (Search through the Start Menu).
3. Look for "Ports (COM & LPT)"
4. Take note of what you see.
5. Open your Serial Terminal Program
6. Open a serial port with the COM port you see at BAUD rate 115200 (There will be at least 2 ports - try them both).
7.Type in "root" and the software should then print out a command line, If not, try a different serial port.
8. Type in:
9. Follow the wizard to set up the Intel Edison and wifi.
For Macs, all the steps are the same except for 2 and 3. To find you serial ports, follow this.
If you tried all your Serial Ports or don't see any:
- Make sure 2 LEDs are lit on your board
- Check your connections
- Try flashing you board
Step 6: Upload the Code to the Intel Edison
This part requires the Intel XDK installed.
- Start off by creating a blank IoT project in the XDK
- Plug in your Edison to power it on
- Go the bottom of the window and connect your Intel Edison - You will probably need to type in is IP address you saw while setting it up and its password of you added one
- At the bottom of the window, open the SSH tab and type in the IP address and then the username and password
- Type in:
npm i express socket.io firebase serialport compression
6. Wait for the Edison to be downloading the npm packages
7. Download the Code uploaded to this step and extract it.
8. Delete main.js from you XDK Project
9. Copy the public folder, data.json and main.js files into the XDK Project
10. Upload it to the Edison with the Download button at the bottom and then click start
Make sure that when you go to
http://[Edison's IP Address]:8080
You see a page like the last image above. If not, make sure you ran the project.
Step 7: Program the Arduino Pro Mini
First solder header pins onto the Arduino. Do not solder them to the row on the side; only on the two long rows.
There are many ways to upload the code onto the Arduino Pro Mini. The easiest way to to use a FTDI Cable and connect them to the pins on the side of the Arduino Pro. Another option is to use a Atmel Programmer - the AVRISP mkII.
To use a FTDI just upload the code to the Arduino like how you would normally though the IDE (Select Com Port then select the board then click Upload).
To use an AVRISP mkII, go to the Arduino IDE then go to file -> upload using programmer. If you get an error, look at the note in Step 2.
If you do not have either of these but have another Arduino, follow this Instructable.
Step 8: Test Out Everything on a Breadboard
Before soldering everything together, it is a good idea to test everything out on a breadboard.
For the IR LED and receiver circuit, follow the schematic above.
I uploaded a picture of the mini breakout's pinout because each pin is not individually labeled. Follow the following connections (In addition to the schematic above):
Arduino GND -> TXB0108 GND -> Edison GND Arduino Vcc -> TXB0108 VCCB<br>Arduino TX -> TXB0108 B1 Arduino RX -> TXB0108 B2 Edison V_V1P80 -> TXB0108 VCCA Edison UART-1-RX -> TXB0108 B1 Edison UART-1-TX -> TXB0108 B2
Once everything works and powers on, its time to move it to a more permanent solution.
Step 9: Create the Perfboard
This part is pretty much up to you. You could leave it in a breadboard but that may fall apart and isn't really sturdy.
I took a standard Perfboard and transferred all connections to it. I left the Intel Edison connected to the board with removable wires so it could be reused for projects later on. Do not solder the IR LED to the board.
For the LED, put 2 male header pins soldered on the the board. The first one is 100 ohm resistor connecting it to ground, and the other pin connected to pin 3. (I have 3 header pins for the LED but the middle one isn't connected to anything).
Put two header pins between GND and RAW in the Arduino Pro so you can connect a battery later on.
I added a ICSP header on the board too so that I can easily reprogram it later on.
Make sure your joints are sturdy and nothing is loose. Also make sure there are no bridges unless you need there to be.
Step 10: Create the Battery Wire
Use a simple 9V batter connector and solder 2 ground wires coming out of it and 2 Vcc wires. Then group them into two groups. Electrical tape or shrink tube around the connections to they do not short circuit.
Step 11: Set Up the LED Emitters
This is where you have to customize the device to your needs. Start off by counting how many places you need the IR light emitted. Think about it like a normal LED- if you put an LED in a place, how many devices will it reach? Get as many IR LEDs as you need so the signal reaches all your devices.
Solder wires onto the end and cover them with electrical tape or heat shrink tubing. I used heat shrink because it has to be sturdy due to the fact I may move this part around a lot.
To connect all of your LEDs together, solder the (+) side together on all of the wires and connect them to the (+) side of the Perfboard you made. Then, on each wire you need a 100ohm resistor soldered onto it. Then connect the other side of the resistor to the GND pin of the LED headers on the Perfboard.
You need 1 resistor for each LED because diodes cannot be connected in parallel without having uneven current going through them so chances are only one LED will emit IR light and then burn out.
Step 12: Creating a Box
Everything about your box is up to you. Here are a few important notes though:
- Make sure there is a hole on the side in front of the IR receiver so it can receive IR signals
- Drill out holes in the box so you can have wires going though the box
Step 13: Use the Device
Plug in the power wires to the Intel Edison's J21 Header Pin (its labeled on top) and the two soldered on the Perfboard. Then, plug in the Battery.
After the Intel Edison has powered on, go to it's IP address in your browser with the port 8080.
The default remote configuration in Device 1 is DVR. No IR codes are recorded; the buttons re just there to demonstrate its icon ability. Open the menu on the side and click "Edit Devices". From there click on the button you want to edit and follow the menu's instructions. To edit the name click the top right and you can change the device's name there.
When recording codes please make sure you enter the correct device information! This helps other users so they can easily find codes already recorded which are stored on the database.
How to use icons: In order to make the remote more visually appealing, I added the possibility to add icons to the buttons. It searches the Google Material Icons database and if it finds one and the check mark to find an icon is checked, then it displays the icon instead. Most icons are fairly straightforward (For the fast forward icon, just type in fast forward). Others are not. To find the one you want, Search the Google database for the icon you want and type that name in the "Text to be Displayed". If the program cannot find an icon with the name you typed in, it will display what you typed in as normal text.
Note: Sometimes with some IR receivers, they are off a little and as a result the Edison stores the code as a RAW code. This increases the delay between you pressing the button and the IR code being emitted. It helps to point the remote at the receiver, then press the button you want to record. Then hit "record" and then press the button on the remote again.
Buttons which have no text will not be displayed once you exit edit mode.
- Make sure the Edison and Arduino are powered on
- Re-upload the Edison code
- Re-upload the Arduino code
- Check all your connections - Even if they look right, use a multi meter to make sure nothing is shorted and they are properly connected
- Connections which are even a little loose will result in the Edison not being able to communicate with the Arduino
In case a code which is on the database does not work comment below and I will delete it
Step 14: Using the Online Application As an App
The device can be controlled from any browser on any device. If you don't want to keep typing in the IP address on computers, just bookmark the page.
For smartphones, and tablets, however, you can go to the page in the default browser and "add it to home screen". This option is available in both Android and iOS. For iOS, go to Safari and open the controller page. Then go to the share icon at the bottom and click add to home screen. You can do the same for Android though going to the three dot menu at the top right and do the same thing.
This makes the page act like an app and normally runs faster.