Beheer 'n WS-gloeilamp met enige infrarooi-afstandbeheer deur 'n Arduino en relais te gebruik
In hierdie tutoriaal gaan ons leer hoe om 'n infrarooi afstandbeheer te gebruik om 'n WS-gloeilamp te bedryf deur middel van 'n Arduino en 'n relêmodule. Hierdie projek behels die dekodering van die seine van die afstandbeheer en die gebruik daarvan om die relê te beheer, wat op sy beurt die WS-gloeilamp aan- en afskakel. Teen die einde van hierdie tutoriaal sal jy enige infrarooi afstandbeheer kan gebruik om jou ligtoebehore te beheer.
Ons gaan 'n infrarooi ontvanger gebruik om die seine van die afstandbeheer vas te vang, en die Arduino sal hierdie seine interpreteer om spesifieke aksies uit te voer. Die verskafde kode sal jou toelaat om die tipe afstandbeheer (swart of wit) te kies en of jy 'n PCB- of kaalmodule vir die ontvanger gebruik. Maak seker dat jy die gepaardgaande video kyk vir bykomende besonderhede en verduidelikings (in video by 0:00).
Hardeware Verduidelik
Vir hierdie projek sluit die hoofkomponente die Arduino-bord, 'n infrarooi ontvangermodule en 'n relêmodule in. Die infrarooi ontvanger is verantwoordelik om die seine van die afstandbeheer vas te vang en dit na die Arduino te stuur. Die relêmodule dien as 'n skakelaar om die WS-gloeilamp te beheer, wat dit toelaat om aan en af te skakel op grond van die ontvangde seine.
Die infrarooi ontvanger werk tipies teen 'n frekwensie van 38 kHz en kan seine opspoor vanaf 'n afstand van ongeveer 10 tot 15 meter. Sodra die Arduino die sein ontvang, dekodeer dit dit en gebruik die relê om die krag na die gloeilamp te beheer.
Bedradingsinstruksies

Begin met bedrading deur die infrarooi ontvangermodule aan die Arduino te koppel. Die VCC-pen van die ontvanger koppel aan die 5V-pen op die Arduino, en die grondpen koppel aan 'n GND-pen. Die seinpen van die infrarooi ontvanger moet aan digitale pen 11 op die Arduino gekoppel word.
Volgende, koppel die relêmodule. Die beheerpen van die relê moet aan digitale pen 2 op die Arduino bedraad word. Koppel ook die relê se VCC- en GND-penne aan die Arduino se 5V en GND, onderskeidelik. Laastens, bedraad die WS-gloeilamp aan die relê volgens die relê se spesifikasies om veilige werking te verseker.
Kode Voorbeelde & Deurloop
In die opstellingsfase van die program initialiseer ons die serieë kommunikasie en stel die relêpen op. Die identifiseerder RECV_PIN is gestel op 11, wat is waar die infrarooi ontvanger se seinpen gekoppel is. Dit stel ons in staat om data van die afstandbeheer te ontvang.
void setup() {
Serial.begin(9600);
irrecv.enableIRIn(); // Begin die ontvanger
pinMode(RELAY_PIN, OUTPUT); // definieer 'n pen vir relê as OUTPUT
digitalWrite(RELAY_PIN, HIGH); // stel relê na AF aan die begin
}
In die lusfunksie kontroleer ons voortdurend vir inkomende seine van die afstandbeheer. Wanneer 'n sein opgespoor word, word die waarde gedekodeer, en die ooreenstemmende aksie word geneem op grond van die sleutel wat gedruk is.
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX); // Druk die ontvangde waarde
robojaxValidateCode(results.value); // Valideer die kode
irrecv.resume(); // Ontvang die volgende waarde
}
delay(100);
}
Die robojaxValidateCode-funksie kontroleer die ontvangde kode teen bekende waardes vir die afstandbeheer. Afhangende van watter sleutel gedruk is, sal dit die ooreenstemmende aksie uitvoer deur die relê te gebruik.
void robojaxValidateCode(int cd) {
if (type == 'W' && !PCB) {
// Kontroleer Wit afstandbeheer kodes
for (int i = 0; i < sizeof(whiteRemote) / sizeof(int); i++) {
if (whiteRemote[i] == cd) {
Serial.print("Sleutel gedruk: ");
Serial.println(whiteRemoteKey[i]);
relayAction(whiteRemoteKey[i]); // Neem aksie
}
}
}
}
In hierdie funksie kontroleer die kode of die gedrukte sleutel ooreenstem met die gedefinieerde skikkingswaardes. As 'n ooreenstemming gevind word, roep dit die relayAction-funksie aan om die relê aan of af te skakel, afhangende van die sleutel wat gedruk is.
Demonstrasie / Wat om te VerwAg
Na die voltooiing van die bedrading en die oplaai van die kode, kan jy jou infrarooi afstandbeheer gebruik om die WS-gloeilamp te beheer. Druk die aangewese sleutels op die afstandbeheer, en die relê moet die gloeilamp dienooreenkomstig aktiveer of deaktiveer. Maak seker dat jy elke sleutel toets om sy reaksie te sien (in video by 5:00).
Video Tydstempels
- 00:00 Begin
- 00:49 Inleiding
- 02:00 Bedrading en verbinding
- 05:27 Arduino-kode verduidelik
- 09:51 Demonstrasie van die beheer van WS-gloeilamp met verskillende afstandbeheer
- 13:13 Gebruik jou TV-afstandbeheer om WS-gloeilamp te beheer
/*
* Original library from - http://arcfn.com
*
* This Arduino code decodes any remote code and then you can control an AC load using a relay
* sold on eBay for Arduino.
* You have to select the type of your remote as Black or White in the code below
* and also select your receiver 1838 as either a PCB or bare module. See video for details
*
* You have to watch this video: https://youtu.be/muAkBQb24NI
* before proceeding with this code.
*
* Modified/Written by Ahmad Shamshiri
* on July 31, 2018 at 20:33 in Ajax, Ontario, Canada
* for Robojax.com
* Watch video instructions for this code: https://youtu.be/j5kb0WBpD30
* Get other Arduino codes from Robojax.com
*
*/
#include <IRremote.h>
int RECV_PIN = 11;
const char type ='W';// W for white, B for black. Must keep single quotes like 'B' or 'W'
const boolean PCB = 1;// if receiver is PCB set to 1, if not set to 0. See video for details
boolean displayCode = true;// to display remote code. if not, set to false
//***** Relay settings begins
const int RELAY_PIN = 2;//
const String ON="3";// turn relay ON with + key on remote
const String OFF="1";// turn relay OFF with - key on remote
//**** Relay settings ends
IRrecv irrecv(RECV_PIN);
// this is array holding codes for White Remote when used with PCB version of receiver
unsigned int whiteRemotePCB[] ={
0xE318261B, // CH-
0x511DBB, // CH
0xEE886D7F, // CH+
0x52A3D41F, // |<<
0xD7E84B1B, // >>|
0x20FE4DBB, // >||
0xF076C13B, // -
0xA3C8EDDB, // +
0x12CEA6E6, // EQ
0xC101E57B, // 0
0x97483BFB, // 100+
0xF0C41643, // 200+
0x9716BE3F, // 1
0x3D9AE3F7, // 2
0x6182021B, // 3
0x8C22657B, // 4
0x488F3CBB, // 5
0x449E79F, // 6
0x32C6FDF7, // 7
0x1BC0157B, // 8
0x3EC3FC1B // 9
};
// this is array holding codes for White Remote when used with non-PCB version of receiver
unsigned int whiteRemote[] ={
0xFFA25D, // CH-
0xFF629D, // CH
0xFFE21D, // CH+
0xFF22DD, // |<<
0xFF02FD, // >>|
0xFFC23D, // >||
0xFFE01F, // -
0xFFA857, // +
0xFF906F, // EQ
0xFF6897, // 0
0xFF9867, // 100+
0xFFB04F, // 200+
0xFF30CF, // 1
0xFF18E7, // 2
0xFF7A85, // 3
0xFF10EF, // 4
0xFF38C7, // 5
0xFF5AA5, // 6
0xFF42BD, // 7
0xFF4AB5, // 8
0xFF52AD // 9
};
// key lables of white remote
String whiteRemoteKey[] ={
"CH-",
"CH",
"CH+",
"|<<",
">>|",
">||",
"-",
"+",
"EQ",
"0",
"100+",
"200+",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9"
};
// this is array holding codes for Black Remote when used with non-PCB version of receiver
unsigned int blackRemote[] ={
0xFF629D, // ^
0xFF22DD, // <
0xFF02FD, // OK
0xFFC23D, // >
0xFFA857, // v
0xFF6897, // 1
0xFF9867, // 2
0xF0C41643, // 3
0xFF30CF, // 4
0xFF18E7, // 5
0xFF7A85, // 6
0xFF10EF, // 7
0xFF38C7, // 8
0xFF5AA5, // 9
0xFF42BD, // *
0xFF4AB5, // 0
0xFF52AD // #
};
// this is array holding codes for Black Remote when used with PCB version of receiver
unsigned int blackRemotePCB[] ={
0x511DBB, // ^
0x52A3D41F, // <
0xD7E84B1B, // OK
0x20FE4DBB, // >
0xA3C8EDDB, // v
0xC101E57B, // 1
0x97483BFB, // 2
0xF0C41643, // 3
0x9716BE3F, // 4
0x3D9AE3F7, // 5
0x6182021B, // 6
0x8C22657B, // 7
0x488F3CBB, // 8
0x449E79F, // 9
0x32C6FDF7, // *
0x1BC0157B, // 0
0x3EC3FC1B // #
};
// Black remote key names
String blackRemoteKey[] ={
"^",
"<",
"OK",
">",
"v",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"*",
"0",
"#"
};
decode_results results;
void setup()
{
Serial.begin(9600);
// In case the interrupt driver crashes on setup, give a clue
// to the user what's going on.
Serial.println("Robojax IR Decode");
Serial.println("Control Relay with Remote");
irrecv.enableIRIn(); // Start the receiver
pinMode(RELAY_PIN,OUTPUT);// define a pin for relay as OUTPUT
digitalWrite(RELAY_PIN, HIGH);// set relay to OFF at the begining
}
void loop() {
if (irrecv.decode(&results)) {
if(displayCode)Serial.println(results.value, HEX);
robojaxValidateCode(results.value);// used the "robojaxValidateCode" bellow
irrecv.resume(); // Receive the next value
}
delay(100);
}
/*
* function: robojaxValidateCode
* validates the remote code and prints the correct key name
* cd is code passed from the loop
* Written by A. S. for Robojax
*/
void robojaxValidateCode(int cd)
{
// Robojax IR Remote decoder
int found=0;
if(type =='W' && !PCB)
{
// Robojax IR White Remote decoder
// if type is set to 'W' (white remote) and PCB=0 then check White remote code
for(int i=0; i< sizeof(whiteRemote)/sizeof(int); i++)
{
if(whiteRemote[i] ==cd)
{
Serial.print("Key pressed:");
Serial.println(whiteRemoteKey[i]);
relayAction(whiteRemoteKey[i]);// take action
found=1;
}// if matched
}// for
}else if(type =='W' && PCB){
// Robojax IR White Remote decoder
// if type is set to 'W' (white remote) and PCB=1 then check White remote code
for(int i=0; i< sizeof(whiteRemotePCB)/sizeof(int); i++)
{
if(whiteRemotePCB[i] ==cd)
{
Serial.print("Key pressed:");
Serial.println(whiteRemoteKey[i]);
relayAction(whiteRemoteKey[i]);// take action
found=1;
}// if matched
}// for
}else if(type =='B' && PCB){
// Robojax IR Black Remote decoder
// if type is set to 'B' (black remote) and PCB=1 then check Black remote code
for(int i=0; i< sizeof(blackRemotePCB)/sizeof(int); i++)
{
// Robojax IR black Remote decoder
if(blackRemotePCB[i] ==cd)
{
Serial.print("Key pressed:");
Serial.println(blackRemoteKey[i]);
relayAction(blackRemoteKey[i]);// take action
found=1;
}// if matched
}// for
}else{
// if type is set to 'B' (black remote) and PCB =0 then check Black remote code
for(int i=0; i< sizeof(blackRemote)/sizeof(int); i++)
{
// Robojax IR black Remote decoder
if(blackRemote[i] ==cd)
{
Serial.print("Key pressed:");
Serial.println(blackRemoteKey[i]);
relayAction(blackRemoteKey[i]);// take action
found=1;
}// if matched
}// for
}// else
if(!found){
if(cd !=0xFFFFFFFF)
{
Serial.println("Key unknown");
}
}// found
}// robojaxValidateCode end
/*
*
* relayAction()
* receives string "value" as input and based on the settings,
* turns relay pin HIGH or LOW
*/
void relayAction(String value)
{
// Robojax IR Relay control
if(value == ON)
{
digitalWrite(RELAY_PIN, LOW);// Turn relay ON
Serial.println("Relay Turned ON");
}
if(value == OFF)
{
digitalWrite(RELAY_PIN, HIGH);// Turn relay OFF
Serial.println("Relay Turned OFF");
}
}//relayAction end
Goedere wat jy dalk nodig het
-
Amazon
-
eBay
Hulpbronne en verwysings
Geen hulpbronne nog.
Lêers📁
Fritzing-lêer
-
VS1838B Infrared receiver
VS1838B_part.fzpz