Herhangi bir kızılötesi uzaktan kumanda ile bir Arduino ve röle kullanarak bir AC ampulü kontrol edin
Bu eğitimde, bir Arduino ve bir röle modülü aracılığıyla bir AC ampulü çalıştırmak için kızılötesi uzaktan kumandanın nasıl kullanılacağını öğreneceğiz. Bu proje, uzaktan kumandadan gelen sinyallerin kodunu çözmeyi ve bunları röleyi kontrol etmek için kullanmayı içerir; bu da AC ampulü açıp kapatacaktır. Bu eğitimin sonunda, herhangi bir kızılötesi uzaktan kumandayı kullanarak ışık armatürünüzü kontrol edebileceksiniz.
Uzaktan kumandadan gelen sinyalleri yakalamak için bir kızılötesi alıcı kullanacağız ve Arduino bu sinyalleri belirli eylemleri gerçekleştirmek için yorumlayacaktır. Sağlanan kod, uzaktan kumandanın türünü (siyah veya beyaz) ve alıcı için PCB mi yoksa çıplak modül mü kullandığınızı seçmenize olanak tanır. Ek ayrıntılar ve açıklamalar için ilişkili videoyu izlediğinizden emin olun (videoda 0:00).
Donanım Açıklaması
Bu proje için ana bileşenler Arduino kartı, bir kızılötesi alıcı modülü ve bir röle modülüdür. Kızılötesi alıcı, uzaktan kumandadan gelen sinyalleri yakalamaktan ve bunları Arduino'ya göndermekten sorumludur. Röle modülü, AC ampulü kontrol etmek için bir anahtar görevi görür ve alınan sinyallere göre açılıp kapanmasını sağlar.
Kızılötesi alıcı tipik olarak 38 kHz frekansında çalışır ve yaklaşık 10 ila 15 metre mesafeden sinyalleri algılayabilir. Arduino sinyali aldığında, onu çözer ve ampulün gücünü kontrol etmek için röleyi kullanır.
Bağlantı Talimatları

Kablolamaya kızılötesi alıcı modülünü Arduino'ya bağlayarak başlayın. Alıcının VCC pini Arduino'daki 5V pinine bağlanır ve toprak pini bir GND pinine bağlanır. Kızılötesi alıcıdan gelen sinyal pini Arduino'daki dijital pin 11'e bağlanmalıdır.
Ardından, röle modülünü bağlayın. Rölenin kontrol pini Arduino'daki dijital pin 2'ye bağlanmalıdır. Ayrıca, rölenin VCC ve GND pinlerini sırasıyla Arduino'nun 5V ve GND pinlerine bağlayın. Son olarak, güvenli çalışmayı sağlamak için AC ampulü rölenin özelliklerine göre röleye bağlayın.
Kod Örnekleri ve Açıklaması
Programın kurulum aşamasında, seri iletişimi başlatır ve röle pinini ayarlarız. RECV_PIN tanımlayıcısı, kızılötesi alıcının sinyal pininin bağlı olduğu 11 olarak ayarlanır. Bu, uzaktan kumandadan veri almamızı sağlar.
void setup() {
Serial.begin(9600);
irrecv.enableIRIn(); // Alıcıyı başlat
pinMode(RELAY_PIN, OUTPUT); // röle için bir pini ÇIKIŞ olarak tanımla
digitalWrite(RELAY_PIN, HIGH); // başlangıçta röleyi KAPALI olarak ayarla
}
Döngü fonksiyonunda, uzaktan kumandadan gelen sinyalleri sürekli kontrol ederiz. Bir sinyal algılandığında, değer çözülür ve basılan tuşa göre ilgili eylem gerçekleştirilir.
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX); // Alınan değeri yazdır
robojaxValidateCode(results.value); // Kodu doğrula
irrecv.resume(); // Sonraki değeri al
}
delay(100);
}
robojaxValidateCode fonksiyonu, alınan kodu uzaktan kumandanın bilinen değerleriyle karşılaştırır. Hangi tuşa basıldığına bağlı olarak, röleyi kullanarak ilgili eylemi gerçekleştirir.
void robojaxValidateCode(int cd) {
if (type == 'W' && !PCB) {
// Beyaz uzaktan kumanda kodlarını kontrol et
for (int i = 0; i < sizeof(whiteRemote) / sizeof(int); i++) {
if (whiteRemote[i] == cd) {
Serial.print("Basılan tuş: ");
Serial.println(whiteRemoteKey[i]);
relayAction(whiteRemoteKey[i]); // Eylemi gerçekleştir
}
}
}
}
Bu fonksiyonda, kod basılan tuşun tanımlanan dizi değerlerine karşılık gelip gelmediğini kontrol eder. Bir eşleşme bulunursa, basılan tuşa bağlı olarak röleyi açmak veya kapatmak için relayAction fonksiyonunu çağırır.
Gösterim / Beklentiler
Kablolamayı tamamladıktan ve kodu yükledikten sonra, AC ampulü kontrol etmek için kızılötesi uzaktan kumandanızı kullanabilirsiniz. Uzaktan kumandada belirlenen tuşlara basın ve röle ampulü buna göre etkinleştirip devre dışı bırakmalıdır. Her tuşun tepkisini görmek için test ettiğinizden emin olun (videoda 5:00).
Video Zaman Damgaları
- 00:00 Başlangıç
- 00:49 Giriş
- 02:00 Kablolama ve bağlantı
- 05:27 Arduino kodu açıklaması
- 09:51 Farklı uzaktan kumanda ile AC ampulü kontrol etme gösterimi
- 13:13 TV uzaktan kumandanızı kullanarak AC ampulü kontrol etme
/*
* 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
İhtiyacın olabileceğini düşünüyor
-
Amazon
-
eBay
Kaynaklar ve referanslar
Henüz kaynak yok.
Dosyalar📁
Fritzing Dosyası
-
VS1838B Infrared receiver
VS1838B_part.fzpz