Menu
I wanted get an IR remote input to Raspberry Pi. I manged to get LIRC installed and tested. Everything was ok, except the very last step. When I wanted pass the IR remote Key value to Python program it doesn't pass it correctly.
It passes null value for anykey. I couldn't figure out what is wrong. I gave up and then I try to write a python code to capture IR remote without using LIRC. After some reading about how IR remote communicate the info revealed that uses UART serial communication. I used IR remote DIY Kit HX1838. The IR sensor decodes the IR waves and passes the data serially. What I did was to read the data value coming out of IR sensor serially.
This is a crude but a simple way of reading IR remote for simple applications that can be used in Raspberry Pi. Preparing Raspberry Pi for UART serial communication. Need to remove ttyAMA0 entries in cmdline.txt. First make a backup of the file containing kernel parameters cmdline.txt as cmdlinebp.txt sudo cp /boot/cmdline.txt /boot/cmdlinebp.txt. Edit the file cmdline.txt by removing the parameters containing ‘ttyAMA0‘.
‘console=ttyAMA0,115200′ and ‘kgdboc=ttyAMA0,115200′. Sudo nano /boot/cmdline.txt The remaining file looks like, dwcotg.lpmenable=0 console=tty1 root=/dev/mmcblk0p6 rootfstype=ext4 elevator=deadline rootwait Then save and close the editor. Save the file, Ctrl + O. Close the editor, Ctrl + X 2. Update the inittab file to mask the ttyAMA0 sudo nano /etc/inittab Comment out the line ‘X:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100′ #X:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100 Then save and close the editor.
Save the file, Ctrl + O. Close the editor, Ctrl + X. Installing pySerial. To get the serial (UART) communication working need to install the Serial module. Sudo apt-get install python-serial Once this is installed Python code can use it by doing import serial.
Next, need to wire GPIO 14 (TX) and GPIO 15 (RX). Since my aim is to receive the IR signals I wired only GPIO 15 (RX). The IR sensor require 5V & GND connection.
Then output signal of IR sensor connected to GPIO 15. The Python code to read the IR signal found out to be very very simple. Import serial ser = serial.Serial ('/dev/ttyAMA0') ser.baudrate = 2400 for i in range (0,15): # usually IR signal for a key is about 12-16 bytes data = ser.read(1) # read 1 byte at a time print ord(data) # the data read in character, ord will convert to ASCII value Now this code will read IR signal 1 byte at a time and prints out the value. I tried the baud rates by trial and error and settled down for 2400 BPS. Though serial communication support upto 115KBPS it is interesting why IR using a lower speed.
Spectrum Serial Receiver
My guess is it would be more reliable to use lower speed, since less possibility IR signal loose 1 or 2 bits over the air. Decode IR remote keys Now the next step is to decode the key values. I used a standard Samsung TV IR remote for this effort. First important point is to figure out how many bytes of data for each key. It may vary 12-16 bytes.
(the ones I tried). Usually byte length is same for all keys. Those bytes have header bytes, data bytes (to identify key) and tail bytes. The header bytes will have a signature for the model of the IR remote. I used an excel sheet to collect the key data values following Antzy Carmasaic page Deep diving into the captured key values, it shows byte 0-5 consists of header, repeated for all keys. Byte 6 to 11 data values represent the Key value.
There could be some tail values. Byte 12 is tail for the samsung remote. Mapping keys The exact way for this remote is to store bytes 6-11 in an array and compare it with a new incoming key. Instead, I did a simple algorithm as follows.
Keyidentity = byte6+2.byte7+3.byte8+4.byte9+5.byte10+6.byte11 It gives almost a unique value for every key. You can figure out a better algorithm than this. I extended the Python code to capture Samsung remote key information. Once I calculated mapped key value then I stored it the python program itself.
File is attached. Name - irserial3samsung.py. Samsung remote sends 2 sets of data. So I capture 24 bytes in order to flush the Raspberry Pi serial data capture buffer. But I use only 1st set to decode. When you run this code it correctly identifies the keys pressed. You can decode the rest of the keys in the remote by looking at value 'keyidentity' that the program prints out.
Then append the program to include them. Conclusion This is a very simple and effective way to use a remote control with Raspberry Pi with Python. You need to figure how many total bytes for a key, how long the header bytes, data bytes and tail bytes. Since you would know from A to Z of this process you can easily modify it to suit your application.
Since these are small python codes it is very easy to debug if you hit any problem. Attachments.
This instructable intends to show you how to create a small & simple infrared (IR) receiver for your computer. The configuration of the software is beyond the scope of this instructable, but I use this receiver with LIRC (Linux Infrared Remote Control) in Linux. You can read more about LIRC and see the circuit diagram I used to build this at Note that -I did not design this circuit- and I wasn't the first to put the circuit into a D-sub connector. But I was the first to post an instructable on it, so hopefully someone will benefit from this: ) My total cost was about $1.50 because I had to purchase an IR receiver, but everything else I had lying around because I'm a computer guy/electronics geek. Amiga workbench 3 1 adf stock. Here are the parts I used, all of them were cannibalized from old projects or scavenged from the engineering lab except the IR receiver that I ordered from Mouser. Parts List: Vishay TSOP1138 IR Receiver 50v 4.7uF capacitor 4001 Diode 4.7K resistor 7805 voltage regulator (5 volts) Parts Discussion TSOP1138 IR Receiver: Most people use the Vishay TSOP 1738, but Mouser was out of those when I ordered and the 1138 is comparable.
And it worked, so who cares: ) 4.7uF capacitor: I used an axial 50v barrel (electrolytic) capacitor because I had one available and didn't want to spend 75 cents at Radio Shack. But, if you've got a 4.7uF ceramic disc capacitor, it would be a lot easier to fit inside the D-sub housing we're going to use. Also, since I used a 50v capacitor and we're only pushing 5v, it's going to have a pretty long rise time but it shouldn't affect the performance of our device too much. 7805 voltage regulator: I used a big one made by Motorola in the first one of these receivers I made and I had to clip the pins very short and clip and grind the top pole in order to get it to fit in the D-sub (see pictures of completed project). However, when I was digging around for pieces today, I came across a surface mount 7805 that I got from Texas Instruments as a sample years ago. It's tiny and perfect for this project. I'll definitely use it the next time I build one of these as it will cut the footprint of the circuit down tremendously.
Both the large and small 7805's are labeled in the electronics closeup picture. Once again note that I did not create this circuit diagram. It was made by Trimbitas Sori and can be found The only part of this diagram that may require a little explanation is the pins on the serial connector: RS-232 Pinout: 1 = DCD (Carrier Detect) 2 = RXD (Receive Data) 3 = TXD (Transmit Data) 4 = DTR (Data Terminal Ready) 5 = GND (Ground) 6 = DSR (Data Set Ready) 7 = RTS (Request To Send) 8 = CTS (Clear To Send) 9 = RI (Ring Indicator) As you can see from the circuit diagram, we're only using DCD (pin 1), RTS (pin 7), and GND (pin 5). I've included a second image on this page that shows the pin numbers and labels graphically, but all the 9pin D-subs I've ever worked with have been labeled (however microscopically).
Note that this image came from, strangely enough. Just ignore the 'not used' notes because we're totally going to use the DCD pin for our purposes: ) It's pretty hard to give you step by step directions on this part because our goal is to make the thing as small as possible in order to fit it in the D-sub connector. I'll give you a few pointers but it's going to be up to you to figure out how to make it fit. Pointers: 1) Before you try to make this really small and fit into a tight space, try building the circuit on a breadboard to make sure you can do it (and have all working parts). It will make you extremely angry if you spend an hour cramming/soldering pieces into a D-sub then it doesn't work because you have a dead receiver. 2) Cut the pins on the components down very short. However, remember that you can only make them shorter so don't cut off too much until you're sure of the size you need and that you can still solder to it.
OK, I lied a little bit, if you do hack off too much of a pin, you can always solder an extension pin onto it or a small piece of wire that you can run wherever you need (don't be embarrassed, we've all done it: ). 3) Don't use wire to connect the pieces unless absolutely required. Just solder the components directly to each other. I think I ended up using three pieces of wire to make connections because it was impossible to bend the components the way I needed them to fit.
4) Lastly, just solder on one component at a time, then check to make sure you can still fit everything in the D-sub. If the circuit diagram below doesn't quite make sense to you, I'm going to try to walk you through the assembly in the next step. Some people learn better by having things laid out in text and since we're not using wires I had a little trouble visualizing how everything should be hooked up directly.
First of all, I'm going to try to avoid telling you to solder pin1 to pin2, and give you more english directions. The problem with this is that english is ambiguous, just ask any computer scientist: ) The only component I will refer to by pins is the 9-pin serial connector because I gave you a pretty diagram in the last step so everyone should be able to figure that out. So, in order to try to make the english explanation less ambiguous I'm going to set out a few rules. 1) I will say that a component is 'on its back' which will mean the following: a) The IR receiver is 'on its back' when the rounded receiver side is up and the flat side is down.
B) The voltage regulator is 'on its back' when the totally flat side is down and the two level side with printed letters is up. Here we go: 1) Solder the dark side of the diode to pin7 (RTS) on the serial connector, that is the stripe indicating direction will be on the opposite side of the diode from the serial connector. 2) Solder the striped end of the diode to the center pin of the 7805 voltage regulator 3) Solder pin 1 on the serial connector to the resistor. 4) Solder the other end of the resistor to the left-hand pin on the 7805 voltage regulator assuming the voltage regulator is -on its back- 5) Solder pin 1 on the serial connector (where we just connected the resistor) to the right-hand pin on the TSOP1138 IR receiver, assuming the receiver is -on its back.- 6) Solder pin 5 on the serial connector to the negative side of the capacitor 7) Solder the positive side of the capacitor to the center pin of the TSOP1138. 8) Solder pin 5 on the serial connector (where we just connected the negative side of the capacitor) to the left-hand pin of the TSOP1138 (assuming its on its back) 9) Solder the center pin of the TSOP1138 (where we just connected the capacitor) to the right-hand pin of the 7805 voltage regulator, assuming the voltage regulator is -on its back- Keep in mind that several points will have multiple connections.
For example, the center pin of the TSOP1138 connects to the positive side of the capacitor as well as the right-hand pin of the 7805 voltage regulator, assuming the voltage regulator is -on its back- Okay. So that's really, really nasty and I would never figure how to build a circuit like that. But perhaps it will help someone who doesn't read circuit diagrams very well. Now, if you took my advice, you've been stopping between every solder point and fitting the circuit into the D-sub to make sure it works. If you didn't take my advice. Well, good luck. Assuming you've been test fitting the circuit every step, this should be really easy.
Just drop the circuit in and make sure no connections short to each other. Downloads. If you have overlapping contact surfaces, just cut a small piece of electrical tape and squeeze it in there to insulate them. You could also use liquid electrical tape and coat everything inside.
But that stuff is really messy and a royal pain if you ever have to work on this again so I'd recommend against it. The last thing? The last thing you should have to do with the D-sub is dremel out a rectangular area where the IR receiver can stick out the top.
You'll also have to dremel a notch for the rounded receiver area. This doesn't take too long, but try to be fairly precise. If you can keep the area tight enough then the serial connector and pressure on the IR receiver from the D-sub casing will keep everything safe and snug. Test him (or her) out. Once everything is insulated, plug the little guy in and test him out.
You'll probably want to do this before completely closing up the D-sub just in case you screwed something up: ) If it doesn't work, compare your circuit closely to the circuit diagram and retrace/recheck all of your connections. Any remote that transmits an IR signal at a receivable frequency should work. I used a 38kHz IR receiver and that's pretty standard (as is 36kHz). Personally, I've used this receiver with an RCA Universal Remote (model RCR815) the most and it works great. Vba increment a variable. I've also tested it with the remote that came with my Logitech PC speakers (5.1 with 10' sub.
I forget the model number), my old Sanyo DVD player remote, and a few other remotes from various devices in my home. They've all worked (in that the receiver picked up a signal) but I didn't bother to map the output from the remote to an action in LIRC on all of them. I just wanted to see if they'd pick up. The RCR815 is the one that I've used the most and is the only remote that actually gets used in my house. Remember that you'll have to configure your receiver software to make it actually 'do stuff' but that the receiver will pick up the signal from a ton of different remotes/input devices. I'm just going to copy/paste this reply from further down because I'm lazy: ) - There are USB alternatives, but they're a little more complicated because you have to interface with the USB controller. Which is trickier than the serial controller.
Because of that, you'll have to have some type of IC or MC to do the communication between the IR receiver and the USB bus. And, with the added hardware, your cost will raise a bit. Of course, I built my serial receiver for about $1.50. So 'rising cost' may come up to $5, probably less than $10. Depend on the IC/MC you use. Check out these projects for more info, and for a schematics/plans: USBTiny: USB-IR-Boy: I'm sure there's probably a few more projects out there, but these are the two I hear about the most often.
More Comments Post Comment.