In this document I will explain the process on creating a Parallax Propeller controlled IR remote controller. This Instructable will explain one of several different ways this could be achieved The device will be connected to a PC via the USB to serial connection.
The controller then can be controlled via an application on the PC that can connect and send information via serial connection. This instructable will also describe how the board can be controlled by a speech recognition application that is located on an Android phone.
I am writing this Instructable in such a way to keep the complexity down, so beginners can easily understand and follow the process. This project can be expanded in several ways that will make the project more feasible to be used in everyday life. One possibly way is to replace the serial connection with a bluetooth module or a network interface card. This will remove the need to a PC, which in turn reduces the power requirements for the project.
A self made board using the Parallax Propeller chip.
If you want to build the board from individual parts, you can download the propeller software and follow the Propeller Education Kid Lasts-Fundamentals v1.2pdf on building the board.
This Instrucatble is not meant to do in depth of how Infrared works, nor any of the protocols that are used, such as SIRC. This document is not a in depth programming Instructable as well.
The IR Receiver will allow us to read the IR codes. Once we have read and stored the codes we can transmit them at a later time.
We want to use an infrared receiver that looks for only a certain frequency and filters out the rest, such as RadioShack Catalog #: 276-640. This particular Infrared receiver filters out any frequency that is not 38khz. This allows the micro controller to only worry about the time that the signal is on or off.
We could use an phototransistor, that can sense the presence of IR light, but we would need a circuit that can filter any frequency out that we are not looking for.
When an Infrared remote transmits a code the Infrared LED is turning on and off at a quick pace. For example the common frequency is 38khz, which results in the LED turning of and off at a 26 microsecond cycle time.
The following circuit will be connected to pin 0 on the Propeller board.
The infrared LED is the device that we will use to transmit the IR codes. When replaying the code the output pin will modulate the signal at 38kHz or a 26 microsecond cycle time for the signal to transmit, with the correct on and off times for the code.
The circuit in the image will be attached to P1. The resistor may change depending on the LED IR that you have. Verify the specs and ensure that the resistor is big enough for your application.
In this circuit you can remove the transistor(Q1) from the circuit. I am running the LED at 5 volts and the pin on the Propeller is 3.3 volts. I like to create a boundary between those two different voltages even tho you could use an resistor to protect the pin on the propeller.
The IR code we will be using will be a modified version of magic IR that can be found on obex.parallax.com object number 663 or url: http://obex.parallax.com/objects/663/.
The downloaded zip file contains three spin files: Synth.spin, magicir_010.spin and magic_ir_demo.spin.
Synth.spin contains the code to allow the Propeller to perform 38kHz cycles on Pin 1.
magicir_010.spin contains the code to read and transmit the IR code.
magicir_demo.spin contains code to showcase how the library works.
We will be taking magicir_010.spin and adding two functions to it that will allow us to read and transmit IR codes.
Step 4: Modifying Spin to Receive and Transmit on Demand.
We will be modifying the magic_ir_demo.spin file in this step. First we will add code that will allow us to read the code, then code will be added that will allow us to replay the code.
Once a code has been received the code will print out information on the serial terminal that you will want to copy and paste into your code.
It will have several lines of em[number] := %number. You will want to copy all the lines including the length line. It will look similar to picture #2.
Once you have this code create a new pub replicating the button name and paste it into the pub. Add "magicir.playcode(1,@em,@ length)" after the length line to transmit the code.
As you can see in pictures 3 and 4, there is an example of the button press number 1.
When we want to play a code, we will want to call a pub that puts the code in the correct parameters and calls magicir.playcode. An example is in picture 3 and 4.
In the main pub we start the serial terminal and reads information coming in from the serial terminal. Once a character has been received, the if loop will analyze the character and play the correct code. In picture 5 we have numbers 0 - 9 that we can control.
The codes are from a Comcast Silver Remote in the code from my Github.
The C# application is what we will be hosting on the computer that the Propeller board is connected to. The application has the capabilities for manual input or listen for a UDP connection.
If you are wanting to use the number pad instead of an Android device, this is a brief overview of how it works. When a button is pressed will open the serial port, if it is not open already Then it will send the number that was pressed to the serial device. This all happens within a few milliseconds.
When the listen button is pressed, a new thread is started and listens for UDP connections on port 11000. When data has been received it will analyze the data and make any modifications to it as needed. Once any modifications has been made it will send it to the Propeller board.
Since this is not directly a programming Instructable for Android, I am going to briefly describe what the application does, how it does it and show some code. If there is a high demand for a full length tutorial on creating the application from the beginning then I will create one.
The application uses the TextToSpeech and recognizerIntent to recognize and play voice.
There is an multidimensional array at the top of MainActivity.java that is called Channels. This array is what allows you to tell the application what channel to change to. For example, you wanted to change the channel to CNN, you would say "Change channel to CNN" which would convert CNN to the appropriate channel and will send it to the UDP application.
OnCreate sets up the TextToSpeech interface and assigns txt_ip and txt_port to the appropriate viewable controls.
startVoiceRecognitionActivity starts the RecognizerIntent intent and asks for a result. When the activity is done it will return to the application calling the function onActivityResult.
OnActivityResult gets ran when an intent passes control back with a result of a request. The code then looks to see what request it was and process the appropriate block of code.
Step 7: Finished Product -- Well Sort Of.
Now that you have a working prototype of an Android Controlled IR remote. I encourage you to expand your knowledge by adding features to this prototype.
Remove the required computer and add a NIC card or Bluetooth module.
Add a function that allows you to access codes dynamically, instead of statically.
Add an SD Card to be able to add more codes dynamically.
Add a timing function to repeat codes at a regular basis.
There are many things that this prototype can be transformed into. I made this very very basic Instructable to give you an idea on how to make an IR remote using a Propeller chip.
This was my first Instructable, hope it wasn't that terrible.
Best example of using magicir propeller object I've seen. Helped a lot with the universal remote control feature of my robot.