2,4 GHz 10-kanálový diaľkový ovládač

Vyskúšajte Náš Nástroj Na Odstránenie Problémov





V tomto príspevku zostrojíme 10-kanálový prepínač diaľkového ovládania založený na pásme ISM (priemyselný, vedecký a lekársky).

Úvod

The Pásmo ISM je prevádzkovaný na frekvencii 2,4 GHz, ktorú je možné používať bez licencií s primeraným výstupným výkonom.



Navrhovaným projektom je bezdrôtový prepínač ON / OFF na všeobecné použitie, ktorý je možné použiť na zapnutie / vypnutie svetiel, ventilátorov a domácich spotrebičov pre domácu automatizáciu, ak sú dostatočne dôveryhodní na to, aby priniesli zmeny hardvéru alebo softvéru do tohto projektu.

Projekt je rozdelený na dve časti: diaľkový ovládač a prijímač.



Diaľkový ovládač:

Diaľkový ovládač sa skladá z 10 tlačidiel na ovládanie 10 jednotlivých relé na prijímači. Diaľkový ovládač je napájaný 9V batériou, vďaka ktorej je prenosný.

Srdcom projektu je modul 2,4 GHz transceivera NRF24L01, ktorý umožňuje komunikáciu medzi dvoma Arduinos.

Diaľkový ovládač má LED s potvrdením.

Potvrdzovacia LED dióda sa na chvíľu rozsvieti zakaždým, keď stlačíte tlačidlo na diaľkovom ovládaní, a to iba v prípade, že prijímač prijíma vysielaný signál a potom prijímač vyšle spätný signál späť do diaľkového ovládača, aby sa LED spustila.

Tento proces zabezpečí, aby sa príkaz ON / OFF diaľkového ovládača dosiahol na miesto určenia pomocou vizuálneho potvrdenia.

V obvode diaľkového ovládača je prepínač ON / OFF, ktorý zabraňuje nadmernej strate energie pri voľnobežných otáčkach.

Na výrobu diaľkového ovládača sa odporúča Arduino Nano alebo Arduino Pro-mini, pretože je v menšom prevedení, vďaka ktorému je prenosný.

Schéma zapojenia:

2,4-kanálový 10-kanálový vysielač diaľkového ovládania

Vyššie je uvedená úplná schéma zapojenia diaľkového ovládača. Schéma zapojenia pinov pre NRF24L01 je tiež uvedená v tej istej schéme.

Po dokončení diaľkový ovládač vypnite.

Stiahnite si súbor z knižnice tu: github.com/nRF24/RF24.git

Program pre diaľkové ovládanie:

//-----Program Developed by R.Girish----//
#include
#include
RF24 radio(9,10)
const byte address[][6] = {'00001', '00002'}
const int ip1 = 2
const int ip2 = 3
const int ip3 = 4
const int ip4 = 5
const int ip5 = 6
const int ip6 = 7
const int ip7 = 8
const int ip8 = A0
const int ip9 = A1
const int ip10 = A2
const int buzzer = A3
char buzzchar[32] = ''
const char constbuzzer[32] = 'buzz'
const char button1[32] = 'activate_1'
const char button2[32] = 'activate_2'
const char button3[32] = 'activate_3'
const char button4[32] = 'activate_4'
const char button5[32] = 'activate_5'
const char button6[32] = 'activate_6'
const char button7[32] = 'activate_7'
const char button8[32] = 'activate_8'
const char button9[32] = 'activate_9'
const char button10[32] = 'activate_10'
void setup()
{
pinMode(ip1, INPUT)
pinMode(ip2, INPUT)
pinMode(ip3, INPUT)
pinMode(ip4, INPUT)
pinMode(ip5, INPUT)
pinMode(ip6, INPUT)
pinMode(ip7, INPUT)
pinMode(ip8, INPUT)
pinMode(ip9, INPUT)
pinMode(ip10, INPUT)
pinMode(buzzer, OUTPUT)
digitalWrite(ip1, HIGH)
digitalWrite(ip2, HIGH)
digitalWrite(ip3, HIGH)
digitalWrite(ip4, HIGH)
digitalWrite(ip5, HIGH)
digitalWrite(ip6, HIGH)
digitalWrite(ip7, HIGH)
digitalWrite(ip8, HIGH)
digitalWrite(ip9, HIGH)
digitalWrite(ip10, HIGH)
radio.begin()
radio.openWritingPipe(address[1])
radio.openReadingPipe(1, address[0])
radio.setChannel(100)
radio.setDataRate(RF24_250KBPS)
radio.setPALevel(RF24_PA_MAX)
radio.stopListening()
}
void loop()
{
if(digitalRead(ip1) == LOW)
{
radio.write(&button1, sizeof(button1))
radio.startListening()
while(!radio.available())
radio.read(&buzzchar, sizeof(buzzchar))
if(strcmp(buzzchar,constbuzzer) == 0)
{
digitalWrite(buzzer, HIGH)
delay(500)
digitalWrite(buzzer,LOW)
}
radio.stopListening()
}
if(digitalRead(ip2) == LOW)
{
radio.write(&button2, sizeof(button2))
radio.startListening()
while(!radio.available())
radio.read(&buzzchar, sizeof(buzzchar))
if(strcmp(buzzchar,constbuzzer) == 0)
{
digitalWrite(buzzer, HIGH)
delay(500)
digitalWrite(buzzer,LOW)
}
radio.stopListening()
}
if(digitalRead(ip3) == LOW)
{
radio.write(&button3, sizeof(button3))
radio.startListening()
while(!radio.available())
radio.read(&buzzchar, sizeof(buzzchar))
if(strcmp(buzzchar,constbuzzer) == 0)
{
digitalWrite(buzzer, HIGH)
delay(500)
digitalWrite(buzzer,LOW)
}
radio.stopListening()
}
if(digitalRead(ip4) == LOW)
{
radio.write(&button4, sizeof(button4))
radio.startListening()
while(!radio.available())
radio.read(&buzzchar, sizeof(buzzchar))
if(strcmp(buzzchar,constbuzzer) == 0)
{
digitalWrite(buzzer, HIGH)
delay(500)
digitalWrite(buzzer,LOW)
}
radio.stopListening()
}
if(digitalRead(ip5) == LOW)
{
radio.write(&button5, sizeof(button5))
radio.startListening()
while(!radio.available())
radio.read(&buzzchar, sizeof(buzzchar))
if(strcmp(buzzchar,constbuzzer) == 0)
{
digitalWrite(buzzer, HIGH)
delay(500)
digitalWrite(buzzer,LOW)
}
radio.stopListening()
}
if(digitalRead(ip6) == LOW)
{
radio.write(&button6, sizeof(button6))
radio.startListening()
while(!radio.available())
radio.read(&buzzchar, sizeof(buzzchar))
if(strcmp(buzzchar,constbuzzer) == 0)
{
digitalWrite(buzzer, HIGH)
delay(500)
digitalWrite(buzzer,LOW)
}
radio.stopListening()
}
if(digitalRead(ip7) == LOW)
{
radio.write(&button7, sizeof(button7))
radio.startListening()
while(!radio.available())
radio.read(&buzzchar, sizeof(buzzchar))
if(strcmp(buzzchar,constbuzzer) == 0)
{
digitalWrite(buzzer, HIGH)
delay(500)
digitalWrite(buzzer,LOW)
}
radio.stopListening()
}
if(digitalRead(ip8) == LOW)
{
radio.write(&button8, sizeof(button8))
radio.startListening()
while(!radio.available())
radio.read(&buzzchar, sizeof(buzzchar))
if(strcmp(buzzchar,constbuzzer) == 0)
{
digitalWrite(buzzer, HIGH)
delay(500)
digitalWrite(buzzer,LOW)
}
radio.stopListening()
}
if(digitalRead(ip9) == LOW)
{
radio.write(&button9, sizeof(button9))
radio.startListening()
while(!radio.available())
radio.read(&buzzchar, sizeof(buzzchar))
if(strcmp(buzzchar,constbuzzer) == 0)
{
digitalWrite(buzzer, HIGH)
delay(500)
digitalWrite(buzzer,LOW)
}
radio.stopListening()
}
if(digitalRead(ip10) == LOW)
{
radio.write(&button10, sizeof(button10))
radio.startListening()
while(!radio.available())
radio.read(&buzzchar, sizeof(buzzchar))
if(strcmp(buzzchar,constbuzzer) == 0)
{
digitalWrite(buzzer, HIGH)
delay(500)
digitalWrite(buzzer,LOW)
}
radio.stopListening()
}
}
//-----Program Developed by R.Girish----//

Týmto je okruh diaľkového ovládača ukončený.

Prijímač:

Obvod prijímača sa skladá z Arduina, ktoré si môžete zvoliť, výstupného stupňa tvorí 10 rezistorov obmedzujúcich prúd 330 ohmov, 10 tranzistorov a 10 relé.

Na každom z 10 výstupných pinov Arduina je pripojených 10 relé cez rezistor a tranzistor.

Uistite sa, že je váš napájací zdroj schopný poskytnúť prúd najmenej 1 A, ktorý je potrebný na okamžité fungovanie viacerých relé.

Modul transceivera 2,4 GHz NRF24L01 poskytuje komunikáciu medzi diaľkovým ovládačom.

Schéma zapojenia:



2,4-kanálový 10-kanálový prijímač diaľkového ovládania

Ak ste zmätení so schémou zapojenia medzi Arduino a modulom NRF24L01, pozrite sa na tabuľku vedľa schémy, je to rovnaké aj pre obvod diaľkového ovládača.

Postupnosť výstupu a výstupné kolíky sú nasledujúce:

Arduino PIN - výstupná postupnosť

PIN 2 - VÝSTUP 1
PIN 3 - VÝSTUP 2
PIN 4 - VÝSTUP 3
PIN 5 - VÝSTUP 4
PIN 6 - VÝSTUP 5
PIN 7 - VÝSTUP 6
PIN 8 - VÝSTUP 7
PIN A0 - VÝSTUP 8
PIN A1 - VÝSTUP 9
PIN A2 - VÝSTUP 10

Výstupná fáza:

Pripojenie relé 10-kanálového 10-kanálového diaľkového ovládania

Pre jednoduchosť diagramu je na výstupe iba dva výstupné stupne. Ak používate všetkých 10 kanálov, musíte ich rozšíriť na desať.

Program pre prijímač:

//-----Program Developed by R.Girish----//
#include
#include
RF24 radio(9,10)
const byte address[][6] = {'00001', '00002'}
const int op1 = 2
const int op2 = 3
const int op3 = 4
const int op4 = 5
const int op5 = 6
const int op6 = 7
const int op7 = 8
const int op8 = A0
const int op9 = A1
const int op10 = A2
const char buzzer[32] = 'buzz'
char buttonstate[32] = ''
const char button1[32] = 'activate_1'
const char button2[32] = 'activate_2'
const char button3[32] = 'activate_3'
const char button4[32] = 'activate_4'
const char button5[32] = 'activate_5'
const char button6[32] = 'activate_6'
const char button7[32] = 'activate_7'
const char button8[32] = 'activate_8'
const char button9[32] = 'activate_9'
const char button10[32] = 'activate_10'
boolean status1 = false
boolean status2 = false
boolean status3 = false
boolean status4 = false
boolean status5 = false
boolean status6 = false
boolean status7 = false
boolean status8 = false
boolean status9 = false
boolean status10 = false
void setup()
{
Serial.begin(9600)
pinMode(op1, OUTPUT)
pinMode(op2, OUTPUT)
pinMode(op3, OUTPUT)
pinMode(op4, OUTPUT)
pinMode(op5, OUTPUT)
pinMode(op6, OUTPUT)
pinMode(op7, OUTPUT)
pinMode(op8, OUTPUT)
pinMode(op9, OUTPUT)
pinMode(op10, OUTPUT)
radio.begin()
radio.openReadingPipe(1, address[1])
radio.openWritingPipe(address[0])
radio.setChannel(100)
radio.setDataRate(RF24_250KBPS)
radio.setPALevel(RF24_PA_MAX)
radio.startListening()
}
void loop()
{
while(!radio.available())
radio.read(&buttonstate, sizeof(buttonstate))
Serial.println(buttonstate)
if((strcmp(buttonstate,button1) == 0) && status1 == false)
{
digitalWrite(op1, HIGH)
status1 = true
radio.stopListening()
for(int i = 0 i <10 i++)
{
radio.write(&buzzer, sizeof(buzzer))
delay(10)
}
radio.startListening()
}
else if((strcmp(buttonstate,button1) == 0) && status1 == true)
{
digitalWrite(op1, LOW)
status1 = false
radio.stopListening()
for(int i = 0 i <10 i++)
{
radio.write(&buzzer, sizeof(buzzer))
delay(10)
}
radio.startListening()
}
else if((strcmp(buttonstate,button2) == 0) && status2 == false)
{
digitalWrite(op2, HIGH)
status2 = true
radio.stopListening()
for(int i = 0 i <10 i++)
{
radio.write(&buzzer, sizeof(buzzer))
delay(10)
}
radio.startListening()
}
else if((strcmp(buttonstate,button2) == 0) && status2 == true)
{
digitalWrite(op2, LOW)
status2 = false
radio.stopListening()
for(int i = 0 i <10 i++)
{
radio.write(&buzzer, sizeof(buzzer))
delay(10)
}
radio.startListening()
}
else if((strcmp(buttonstate,button3) == 0) && status3 == false)
{
digitalWrite(op3, HIGH)
status3 = true
radio.stopListening()
for(int i = 0 i <10 i++)
{
radio.write(&buzzer, sizeof(buzzer))
delay(10)
}
radio.startListening()
}
else if((strcmp(buttonstate,button3) == 0) && status3 == true)
{
digitalWrite(op3, LOW)
status3 = false
radio.stopListening()
for(int i = 0 i <10 i++)
{
radio.write(&buzzer, sizeof(buzzer))
delay(10)
}
radio.startListening()
}
else if((strcmp(buttonstate,button4) == 0) && status4 == false)
{
digitalWrite(op4, HIGH)
status4 = true
radio.stopListening()
for(int i = 0 i <10 i++)
{
radio.write(&buzzer, sizeof(buzzer))
delay(10)
}
radio.startListening()
}
else if((strcmp(buttonstate,button4) == 0) && status4 == true)
{
digitalWrite(op4, LOW)
status4 = false
radio.stopListening()
for(int i = 0 i <10 i++)
{
radio.write(&buzzer, sizeof(buzzer))
delay(10)
}
radio.startListening()
}
else if((strcmp(buttonstate,button5) == 0) && status5 == false)
{
digitalWrite(op5, HIGH)
status5 = true
radio.stopListening()
for(int i = 0 i <10 i++)
{
radio.write(&buzzer, sizeof(buzzer))
delay(10)
}
radio.startListening()
}
else if((strcmp(buttonstate,button5) == 0) && status5 == true)
{
digitalWrite(op5, LOW)
status5 = false
radio.stopListening()
for(int i = 0 i <10 i++)
{
radio.write(&buzzer, sizeof(buzzer))
delay(10)
}
radio.startListening()
}
else if((strcmp(buttonstate,button6) == 0) && status6 == false)
{
digitalWrite(op6, HIGH)
status6 = true
radio.stopListening()
for(int i = 0 i <10 i++)
{
radio.write(&buzzer, sizeof(buzzer))
delay(10)
}
radio.startListening()
}
else if((strcmp(buttonstate,button6) == 0) && status6 == true)
{
digitalWrite(op6, LOW)
status6 = false
radio.stopListening()
for(int i = 0 i <10 i++)
{
radio.write(&buzzer, sizeof(buzzer))
delay(10)
}
radio.startListening()
}
else if((strcmp(buttonstate,button7) == 0) && status7 == false)
{
digitalWrite(op7, HIGH)
status7 = true
radio.stopListening()
for(int i = 0 i <10 i++)
{
radio.write(&buzzer, sizeof(buzzer))
delay(10)
}
radio.startListening()
}
else if((strcmp(buttonstate,button7) == 0) && status7 == true)
{
digitalWrite(op7, LOW)
status7 = false
radio.stopListening()
for(int i = 0 i <10 i++)
{
radio.write(&buzzer, sizeof(buzzer))
delay(10)
}
radio.startListening()
}
else if((strcmp(buttonstate,button8) == 0) && status8 == false)
{
digitalWrite(op8, HIGH)
status8 = true
radio.stopListening()
for(int i = 0 i <10 i++)
{
radio.write(&buzzer, sizeof(buzzer))
delay(10)
}
radio.startListening()
}
else if((strcmp(buttonstate,button8) == 0) && status8 == true)
{
digitalWrite(op8, LOW)
status8 = false
radio.stopListening()
for(int i = 0 i <10 i++)
{
radio.write(&buzzer, sizeof(buzzer))
delay(10)
}
radio.startListening()
}
else if((strcmp(buttonstate,button9) == 0) && status9 == false)
{
digitalWrite(op9, HIGH)
status9 = true
radio.stopListening()
for(int i = 0 i <10 i++)
{
radio.write(&buzzer, sizeof(buzzer))
delay(10)
}
radio.startListening()
}
else if((strcmp(buttonstate,button9) == 0) && status9 == true)
{
digitalWrite(op9, LOW)
status9 = false
radio.stopListening()
for(int i = 0 i <10 i++)
{
radio.write(&buzzer, sizeof(buzzer))
delay(10)
}
radio.startListening()
}
else if((strcmp(buttonstate,button10) == 0) && status10 == false)
{
digitalWrite(op10, HIGH)
status10 = true
radio.stopListening()
for(int i = 0 i <10 i++)
{
radio.write(&buzzer, sizeof(buzzer))
delay(10)
}
radio.startListening()
}
else if((strcmp(buttonstate,button10) == 0) && status10 == true)
{
digitalWrite(op10, LOW)
status10 = false
radio.stopListening()
for(int i = 0 i <10 i++)
{
radio.write(&buzzer, sizeof(buzzer))
delay(10)
}
radio.startListening()
}
}
//-----Program Developed by R.Girish----//

To prijímač uzatvára.

Má teoretický dosah 100 metrov, prakticky môže pracovať okolo 30 metrov a viac, môže sa líšiť v závislosti od pevných prekážok medzi diaľkovým ovládačom a prijímačom.

Ako prevádzkovať tento projekt:

• Najprv zapnite prijímač a až potom diaľkové ovládanie.

• Postupne stlačte ľubovoľné tlačidlo na diaľkovom ovládaní.

• Ak stlačíte prvé tlačidlo, spustí sa zodpovedajúci výstup, tj. Výstup 1 sa zapne. Ak opäť stlačíte to isté tlačidlo na diaľkovom ovládaní, vypne sa výstup 1 na prijímači.

• Platí pre všetky tlačidlá a 10 výstupov.

• Po použití vypnite diaľkový ovládač.

Ak máte ďalšie otázky týkajúce sa vyššie diskutovaného prepínača diaľkového ovládania 2,4 GHz s 10 kanálmi, vyjadrte ich v sekcii komentárov.




Dvojica: Obvod generátora signálu Arduino PWM Ďalej: Ako spustiť servomotor pomocou IC 555