Editor Version ×
Standard

1.Easy to use and quick to get started

2.The process supports design scales of 300 devices or 1000 pads

3.Supports simple circuit simulation

4.For students, teachers, creators

Profession

1.Brand new interactions and interfaces

2.Smooth support for design sizes of over 30,000 devices or 100,000 pads

3.More rigorous design constraints, more standardized processes

4.For enterprises, more professional users

Std edition RF Remote

Profile:A simple IR to RF remote.

License:

Published Time: 2021-03-02 02:26:25
  • 455
  • 0
  • 0
Description

The circuit has a very simply working principle. The remote has 29 push buttons acting as buttons for different functions like volume etc. There are three HEF4021 8-bit shift registers on board wired in series configuration - all pin 9 and 10 of shift registers connected to pin D8 and D7 of arduino and pin 3 of first shift register to D9 respectively. Each button is connected to one of the available inputs of shift registers (Pin 1, 4-7 and 13-15) which gives a total of 8X3 = 24 inputs and 5 more by directly using Analog IO of arduino, so 29 in total. Each input of shift register is pulled to ground by a 1K resistor to stabilize the readings. And a simple generic 433Mhz rf transmitter is connected to arduino. After programming the arduino when all buttons are idle it reads 000000000000000000000000 as all the shift register pins are grounded. We can simply create a loop that checks what the output is and send rf commands accordingly. For example when button 3 is pressed it reads - 001000000000000000000000 and so on. The advantage is that we can program any button to perform any function. Once a sequence is recognized, we can simply send a rf signal to the receiver.

The receiver arduino circuit simply takes the signal, reads it and plays a specific hex code using IR led connected to it. The sequences and IR hex code are already pre programmed in the arduino. The IR Hex codes for your remote and TV can be found on manufacturer's website or you can make a simple IR receiver Arduino circuit on breadboard to read them directly from your remote by pressing buttons. Here's a nice tutorial - https://www.instructables.com/Arduino-IR-Remote-Control/

So the remote analyses your button presses, takes them and sends a specific RF signal, which the receiver on recognizing it as a valid command plays a specific Hex IR code on an attached IR led to finally control any appliance that works on an IR remote. The IR led of receiver arduino circuit can be directly taped onto the appliance's IR receiver, thus converting an optical based communication medium that can be blocked by just a sheet of paper to RF based systems that works across the house.

Arduino code for Transmitter -


#include <RH_ASK.h>
#include <SPI.h>
int lP = 8,dP = 9,cP = 7;byte sV = 72,sV2=159,sV3=205;String ttv="";
RH_ASK rf_driver;
void setup() {
Serial.begin(9600);
pinMode(lP, OUTPUT);
pinMode(cP, OUTPUT);
pinMode(dP, INPUT);
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
pinMode(6, INPUT);
rf_driver.init();
}
void loop() {
digitalWrite(lP,1);
delayMicroseconds(20);
digitalWrite(lP,0);
sV = shiftIn(dP, cP);sV2= shiftIn(dP, cP);sV3= shiftIn(dP, cP);
//Serial.print(ttv);Serial.println(); 
if (ttv=="000000000000000000100000"){
const char *m19 = "off";
rf_driver.send((uint8_t *)m19, strlen(m19));
rf_driver.waitPacketSent();
delay(120);
}
if (digitalRead(3)==1){
const char *m0a = "mut";
rf_driver.send((uint8_t *)m0a, strlen(m0a));
rf_driver.waitPacketSent();
delay(120);
}
if (ttv=="000001000000000000000000"){
const char *m06 = "ch0";
rf_driver.send((uint8_t *)m06, strlen(m06));
rf_driver.waitPacketSent();
delay(120);
}
if (ttv=="000000000000000000000010"){
const char *m23 = "ch1";
rf_driver.send((uint8_t *)m23, strlen(m23));
rf_driver.waitPacketSent();
delay(120);
}
if (ttv=="000000000000001000000000"){
const char *m15 = "ch2";
rf_driver.send((uint8_t *)m15, strlen(m15));
rf_driver.waitPacketSent();
delay(120);
}
if (ttv=="000000000000000100000000"){
const char *m16 = "ch3";
rf_driver.send((uint8_t *)m16, strlen(m16));
rf_driver.waitPacketSent();
delay(120);
}
if (ttv=="000000000010000000000000"){
const char *m11 = "ch4";
rf_driver.send((uint8_t *)m11, strlen(m11));
rf_driver.waitPacketSent();
delay(120);
}
if (ttv=="000100000000000000000000"){
const char *m04 = "ch5";
rf_driver.send((uint8_t *)m04, strlen(m04));
rf_driver.waitPacketSent();
delay(120);
}
if (digitalRead(6)==1){
const char *m00 = "ch6";
rf_driver.send((uint8_t *)m00, strlen(m00));
rf_driver.waitPacketSent();
delay(120);
}
if (ttv=="000000000000000000010000"){
const char *m20 = "ch7";
rf_driver.send((uint8_t *)m20, strlen(m20));
rf_driver.waitPacketSent();
delay(120);
}
if (ttv=="000000000000100000000000"){
const char *m13 = "ch8";
rf_driver.send((uint8_t *)m13, strlen(m13));
rf_driver.waitPacketSent();
delay(120);
}
if (digitalRead(5)==1){
const char *m0b = "ch9";
rf_driver.send((uint8_t *)m0b, strlen(m0b));
rf_driver.waitPacketSent();
delay(120);
}
if (digitalRead(4)==1){
const char *m0a = "lst";
rf_driver.send((uint8_t *)m0a, strlen(m0a));
rf_driver.waitPacketSent();
delay(120);
}
if (ttv=="000000000100000000000000"){
const char *m10 = "ext";
rf_driver.send((uint8_t *)m10, strlen(m10));
rf_driver.waitPacketSent();
delay(120);
}
if (ttv=="000000000000010000000000"){
const char *m14 = "chp";
rf_driver.send((uint8_t *)m14, strlen(m14));
rf_driver.waitPacketSent();
delay(120);
}
if (ttv=="000000100000000000000000"){
const char *m07 = "chm";
rf_driver.send((uint8_t *)m07, strlen(m07));
rf_driver.waitPacketSent();
delay(120);
}
if (ttv=="001000000000000000000000"){
const char *m03 = "vlp";
rf_driver.send((uint8_t *)m03, strlen(m03));
rf_driver.waitPacketSent();
delay(120);
}
if (ttv=="000000000001000000000000"){
const char *m12 = "vlm";
rf_driver.send((uint8_t *)m12, strlen(m12));
rf_driver.waitPacketSent();
delay(120);
}
if (ttv=="000000000000000001000000"){
const char *m18 = "gde";
rf_driver.send((uint8_t *)m18, strlen(m18));
rf_driver.waitPacketSent();
delay(120);
}
if (ttv=="000000000000000000000100"){
const char *m22 = "mnu";
rf_driver.send((uint8_t *)m22, strlen(m22));
rf_driver.waitPacketSent();
delay(120);
}
if (ttv=="000000000000000000001000"){
const char *m21 = "ook";
rf_driver.send((uint8_t *)m21, strlen(m21));
rf_driver.waitPacketSent();
delay(120);
}
if (ttv=="000000000000000000000001"){
const char *m24 = "upp";
rf_driver.send((uint8_t *)m24, strlen(m24));
rf_driver.waitPacketSent();
delay(120);
}
if (ttv=="000010000000000000000000"){
const char *m05 = "don";
rf_driver.send((uint8_t *)m05, strlen(m05));
rf_driver.waitPacketSent();
delay(120);
}
if (ttv=="000000001000000000000000"){
const char *m09 = "rit";
rf_driver.send((uint8_t *)m09, strlen(m09));
rf_driver.waitPacketSent();
delay(120);
}
if (ttv=="010000000000000000000000"){
const char *m02 = "lft";
rf_driver.send((uint8_t *)m02, strlen(m02));
rf_driver.waitPacketSent();
delay(120);
}
if (ttv=="100000000000000000000000"){
const char *m01 = "opt";
rf_driver.send((uint8_t *)m01, strlen(m01));
rf_driver.waitPacketSent();
delay(120);
}
if (ttv=="000000000000000010000000"){
const char *m17 = "inf";
rf_driver.send((uint8_t *)m17, strlen(m17));
rf_driver.waitPacketSent();
delay(120);
}
if (ttv=="000000010000000000000000"){
const char *m08 = "vlz";
rf_driver.send((uint8_t *)m08, strlen(m08));
rf_driver.waitPacketSent();
delay(120);
}
ttv="";
delay(20);
}
byte shiftIn(int mDp, int mCp) {
int i,pS,tp=0;
byte mDi = 0;
pinMode(mCp, OUTPUT);
pinMode(mDp, INPUT);
for (i=7; i>=0; i--){
digitalWrite(mCp, 0);
delayMicroseconds(0.2);
tp = digitalRead(mDp);
if (tp) {
pS = 1;
mDi = mDi | (1 << i);
}else{ pS = 0;}
ttv += pS;
digitalWrite(mCp, 1);
}
return mDi;
}

Arduino Code for receiver -


#include <RH_ASK.h>
#include <SPI.h>
#include <IRremote.h>
RH_ASK driver;
IRsend irsend;
String r;
void setup() {
Serial.begin(9600);
driver.init();
}
void loop() {
uint8_t buf[3];
uint8_t buflen = sizeof(buf);
if (driver.recv(buf, &buflen)){
r = ((char*)buf);
Serial.print(r);Serial.println();
if (r=="off"){
irsend.sendNEC(0x80BF3BC4,32);
} 
if (r=="ch1"){
irsend.sendNEC(0x80BF49B6,32);
}
if (r=="ch2"){
irsend.sendNEC(0x80BFC936,32);
}
if (r=="ch3"){
irsend.sendNEC(0x80BF33CC,32);
}
if (r=="ch4"){
irsend.sendNEC(0x80BF718E,32);
}
if (r=="ch5"){
irsend.sendNEC(0x80BFF10E,32);
}
if (r=="ch6"){
irsend.sendNEC(0x80BF13EC,32);
}
if (r=="ch7"){
irsend.sendNEC(0x80BF51AE,32);
}
if (r=="ch8"){
irsend.sendNEC(0x80BFD12E,32);
}
if (r=="ch9"){
irsend.sendNEC(0x80BF23DC,32);
}
if (r=="ch0"){
irsend.sendNEC(0x80BFE11E,32);
}
if (r=="vlp"){
irsend.sendNEC(0x80BF01FE,32);
}
if (r=="vlm"){
irsend.sendNEC(0x80BF817E,32);
}
if (r=="chp"){
irsend.sendNEC(0x80BFA15E,32);
}
if (r=="chm"){
irsend.sendNEC(0x80BF619E,32);
}
if (r=="lst"){
irsend.sendNEC(0x80BF41BE,32);
}
if (r=="gde"){
irsend.sendNEC(0x80BF5BA4,32);
}
if (r=="mnu"){
irsend.sendNEC(0x80BF19E6,32);
}
if (r=="ext"){
irsend.sendNEC(0x80BFA35C,32);
}
if (r=="mut"){
irsend.sendNEC(0x80BF39C6,32);
}
if (r=="ook"){
irsend.sendNEC(0x80BF738C,32);
}
if (r=="upp"){
irsend.sendNEC(0x80BF53AC,32);
}
if (r=="don"){
irsend.sendNEC(0x80BF4BB4,32);
}
if (r=="lft"){
irsend.sendNEC(0x80BF9966,32);
}
if (r=="rit"){
irsend.sendNEC(0x80BF837C,32);
}}
r="";
delay(10);
}

5705CF708FFA4C8DB50F1DEDCC89B355.jpg

design drawing
schematic diagram
1 /
PCB
1 /
Empty
ID Name Designator Footprint Quantity
1 ARDUINO_NANO U4 ARDUINO_NANO 1
2 HEF4021BP U1,U2,U3 DIP16 3
3 1k R1,R3,R4,R5,R6,R7,R8,R9,R10,R11,R12,R13,R14,R15,R16,R17,R18,R19,R21,R22,R23,R24,R25,R26 AXIAL-0.3 24
4 TS-1109 K1,K2,K3,K4,K5,K6,K7,K8,K9,K10,K11,K12,K13,K14,K15,K16,K17,K18,K19,K20,K21,K22,K23,K24,K25,K26,K27,K28,K29 SW4-6.0X6.0X5.0MM 29
5 TRANSMISSOR433MHZ U5 PCB_TRANSMISSOR433MHZ 1
6 Battery Connector U6 BATTERY CONNECTOR 1

Unfold

Project Attachments
Empty
Project Members
Add to album ×

Loading...

reminder ×

Do you need to add this project to the album?

服务时间

周一至周五 9:00~18:00
  • 0755 - 2382 4495
  • 153 6159 2675

服务时间

周一至周五 9:00~18:00
  • 立创EDA微信号

    easyeda

  • QQ交流群

    664186054

  • 立创EDA公众号

    lceda-cn