Controlling your light switch using a remote control from the comfort of your bed sounds good and convenient, such wireless communication system is one of the comforts you can create for yourself using arduino.
- In this tutorial you will learn how to make a remote control lamp holder.
Components needed for the prototype design of Arduino remote control light switch include:
- One Arduino Nano board
- Car MP3 SE-020401 Infrared (IR) remote control
- AA3P TK19 Infrared receiver
- 5 volts Relay
- Adjustable 12 volts AC-DC power supply
- One bread board
- Bunch of jumper wires
- Lamp holder
- One 100Ω 1/2W resistor
- One IN4001 diode
Most electronic devices at home and offices use remote control; televisions, air conditioner, stereo player, DVD, etc. most buttons on these remote control devices are not often used. Instead of having these buttons useless, you can program them to work with arduino and enjoy more convenience with them. However, to make your design unique, you can use a new remote controller altogether. A typical less expensive, easy-to-get and programmable remote control you can use is the one shown in figures 2 and 3 below.
The three main components for Arduino Remote Control Light Switch
The three main components to make arduino remote control light switch are the arduino microcontroller board, the IR transmitter (remote control) and the IR receiver sensor.
Arduino Microcontroller Board:
We have already discussed how to use an arduino board in the previous tutorial; you may want to go through that tutorial first.
Infrared (IR) Remote Control [Transmitter]:
Infrared (IR) remote control is a remote control that sends out infrared light from an IR LED. Infrared is one of the frequencies or wavelengths found in the electromagnetic spectrum with a wavelength longer than that of the visible light (700nm-1mm), hence we cannot see most infrared radiations with our eyes’ lenses, but, a smart phone camera’s lens can view it. So, put your remote control under a smart phone camera and press a button, you will see the remote control LED blinking (at a frequency of 38,000 Hz or 38 KHz per second). Information can be encoded into this wave at this frequency to make it unique and different from other IR waves in the environment, this process is called modulation, the information can then be sent to a receiver sensor which receives and demodulates the information for interpretation and usage with the help of a micro-controller.
Infrared Receiver Sensor [Receiver]:
This sensor receives the information encoded in the infrared light from the remote control and demodulates the wave to extract the encoded information. The information is subsequently sent to a microcontroller for processing, in this case, the arduino board contains the microcontroller which is an ATmega 32p-pu integrated circuit. For this project, we will use an AA3P TK19 IR sensor receiver shown below.
To use an IR remote control to program a circuit, you need to first extract some information from the remote control, which you can use to program the circuit. To extract the information encoding hexadecimal files of an IR remote control, you need to do some tinkering using arduino and an IR receiver like the AA3Ptk19 shown above. Connect the circuit as shown below:
After you have connected the circuit, connect the arduino board to a PC that has arduino IDE. Follow the steps below to program the circuit. You have to first download the IRremote library by Ken Shirriff.
- Open the arduino IDE
- Go to Sketch → Include library → Manage libraries
- Type and search for IRremote , install the IRremote by Ken Shirriff
- After installing the library, close the download page
- Go to File → Example → IRremote → IRrecvDemo
You will see a sketch like the one shown below
Upload the sketch and open the serial monitor console window to view the extracted codes. Follow the procedure:
Go to: Tools → Serial Monitor or use the shortcut (Ctrl+Shift+M)
Aim the remote control at the AA3P TK19 IR receiver sensor, press the buttons and you will see that any button you pressed has associated with it a code that is displayed on the serial monitor console window. You can copy the codes associated with each button. For the remote we are using, here are the button codes:
Having extracted the codes, it’s time to use the codes to program our circuit.
Firstly, connect the circuit as shown below. I tactically combined Fritzing and some windows Image editor to get the pictorial image.
Circuit Connection Explanation of Arduino Remote Control Light Switch
- Connect the 5v pin of the arduino to the middle lead of the IR receiver
- Connect one end lead of the IR receiver (the one nearest to the middle lead) to the ground pin of the arduino
- Connect pin 7 of the arduino to the far end lead of the receiver
- Connect the collector lead of the transistor to the anode lead of the diode and one lead of the power supply leads of the relay.
- Connect the base lead of the transistor to one lead of the 100Ω resistor
- Connect the emitter lead of the transistor to the ground pin of the arduino and the ground point of the AC-to DC power supply
- Connect the second lead of the resistor to pin 10 of the arduino
- Connect the cathode lead of the diode to the other power supply lead of the relay and the ADJ 12 volts point of the power supply.
- Connect the common lead of the relay to the AC supply point of the AC-DC power supply.
- Connect the normally open lead of the relay to one lead of the lamp holder.
- Connect the other lead of the lamp holder to the other AC point of the AC-DC power supply.
After making the connections, connect your arduino board to the PC, check for COM port connection.
int RECV_PIN = 7; //set (declare) the pin of the arduino that will receive the demodulated IR signal
const int light_switch = 10; //declare a variable to take up light_switch (the arduino pin that gives output signal for light switching)
boolean last_state_of_light_switch; //declare a boolean data type to keep track of the state of light_switch
IRrecv irrecv(RECV_PIN); //create an object (code) in the arduino that will receive the signal from the pin declared above
decode_results results; //create an object (code) in the arduino that will decode the signal that has been received above
void setup() //the code within this function runs once when the arduino comes ON
irrecv.enableIRIn(); //Trigger the Receiver object above(code for receiving signal from the IR receiver device) to start receiving
pinMode(light_switch, OUTPUT); //Declaring light_switch as output
last_state_of_light_switch=LOW; //initialising last state of light_switch as LOW
void loop() //the codes withing this function runs continuously when the arduino comes ON
if(irrecv.decode(&results)) //Check if a signal has been received, if yes, then decode the results
switch(results.value) //switch over to working with the “result” that will be received and decoded
case 0XFF30CF: //for the signal that has the file code 0xFF87F execute the codes below and stop at break
if(last_state_of_light_switch == LOW) //equate LOW to the last_state_of_light_switch if the condition is true
digitalWrite(light_switch, HIGH); // prompt the light_switch to output a HIGH voltage(5v)
delay(10); // delay for 50 milliseconds ( i.e, no other codes below will be executed until 50 milliseconds passes
last_state_of_light_switch=HIGH; //initiate last_state_of_light_switch to be HIGH
else //otherwise (i.e, if the condition executed above is not in line with the if command
digitalWrite(light_switch,LOW); //prompt the light_switch to output a LOW voltage(0v)
delay(10); //delay for 50 milliseconds (i.e, no other codes below will be executed until 50 milliseconds passes
last_state_of_light_switch= LOW; //initiate the last_state_of_light_switch to be LOW
break; //end of the case situation above
irrecv.resume(); //Initiate the IR receiving pin to start receiving again
Download Code here, or copy and paste the code above in your Arduino IDE. Your sketch should look like this for Arduino IDE:
If you are using Fritzing code editor, your code should look like the image below:
I explained each code line of the sketch after the double solidus character or forward slash. In arduino programming, anything written after the double slash in same line has no impact on the program. It is used to make comment on each line of the sketch as I did in this sketch.
Circuit explanation of Arduino Remote Control Light Switch
If you upload the sketch (arduino source code is called sketch) above to the arduino, connect an Alternating current (ac) light bulb to the lamp holder then press the button marked 1 on the remote control, the light bulb will come ON, and when you press the button again, the light bulb will go OFF. Now, if you watch closely, you will discover that we used the hex file data of the remote button marked 1 to write the program. Check figure 7 and line 19 of the arduino IDE sketch screen shot in figure 9 to confirm this. We used the information from the remote to write the sketch. You can use any of the hex file data to write the sketch.
How the circuit is implemented
When you press the button marked 1 the first time, after powering the arduino board, the IR remote control sends out a data modulated signal to the environment, the IR receiver sensor receives the signal, demodulates it, then sends the demodulated information to pin 7 of the arduino microcontroller board, the microcontroller processes the information and prompts pin 10 of the arduino board to output 5volts DC signal, this 5volts is sent to the base of the TIP122 power transistor via the 100Ω current limiting resistor. When the transistor is driven to its saturation point, DC voltage moves from the AC-DC power supply through the relay, enters the transistor’s collector and flows down to its emitter and from the emitter to ground. As current passes through the relay, it is energized to switch. As the relay switches with a click sound, it closes its normally open switch, thereby creating a conducting part for 220volts current to flow from the power supply to one lead of the lamp holder, and then switches ON the light bulb which is connected to the lamp holder, then, it flows to the other lead of the lamp holder and through that part returns to the other 220volts supply point of the power supply. In this process, we have switched ON the light bulb using the remote control.
To turn OFF the light bulb, we press the button marked 1 again, when we do that, the same first three actions taking in the first case will be repeated, however, the microcontroller senses that the button has been pressed the second time, it prompts pin 10 of the arduino to output 0volts, and when this happens, the transistor will switch over to cut-off mode, the relay will be de-energised with its contacts returning to normally closed, and when this happens no 220v current will flow from the power supply to the light bulb and the bulb will go OFF.
The function of the diode is to gradually damp the excess inductive voltage that is generated in the relay coil when it is de-energised.
- With arduino we can design a remote control light switch using IR transmitter and receiver.
- The remote transmits modulated data
- The receiver receives and demodulates the data and sends result to the microcontroller
- The microcontroller switches a transistor through which a relay is energised or de-energised
- The energised or de-energised relay switches ON or OFF the light bulb via 220v ac power supply.