Διακόπτης τηλεχειριστηρίου 2,4 GHz 10 καναλιών

Δοκιμάστε Το Όργανο Μας Για Την Εξάλειψη Των Προβλημάτων





Σε αυτήν την ανάρτηση πρόκειται να κατασκευάσουμε έναν διακόπτη τηλεχειριστηρίου 10 καναλιών με βάση τη ζώνη ISM (βιομηχανική, επιστημονική και ιατρική).

Εισαγωγή

ο Μπάντα ISM λειτουργεί στα 2,4 GHz, τα οποία μπορούν να χρησιμοποιηθούν χωρίς άδεια με εύλογη ισχύ εξόδου.



Το προτεινόμενο έργο είναι ο γενικός σκοπός ασύρματος διακόπτης ON / OFF, ο οποίος μπορεί να χρησιμοποιηθεί για την ενεργοποίηση / απενεργοποίηση των φώτων, των ανεμιστήρων, των οικιακών συσκευών στον οικιακό αυτοματισμό εάν είναι αρκετά σίγουροι για να φέρουν αλλαγές υλικού ή λογισμικού σε αυτό το έργο.

Το έργο χωρίζεται σε δύο μέρη: το τηλεχειριστήριο και το δέκτη.



Το τηλεχειριστήριο:

Το τηλεχειριστήριο αποτελείται από 10 μπουτόν για τον έλεγχο 10 μεμονωμένων ρελέ στο δέκτη. Το τηλεχειριστήριο λειτουργεί με μπαταρία 9V που το καθιστά φορητό.

Η καρδιά του έργου είναι η μονάδα πομποδέκτη 2,4 GHz NRF24L01 που καθιστά δυνατή την επικοινωνία μεταξύ δύο Arduinos.

Το Remote διαθέτει LED αναγνώρισης.

Το LED επιβεβαίωσης ανάβει στιγμιαία κάθε φορά που πατάμε ένα κουμπί στο τηλεχειριστήριο και μόνο εάν το μεταδιδόμενο σήμα λαμβάνεται από τον δέκτη και στη συνέχεια ο δέκτης στέλνει ένα σήμα ανάδρασης στο τηλεχειριστήριο για να ενεργοποιήσει το LED.

Αυτή η διαδικασία θα διασφαλίσει ότι η εντολή ON / OFF του τηλεχειριστηρίου θα φτάσει στον προορισμό της με οπτική επιβεβαίωση.

Ένας διακόπτης ON / OFF παρέχεται στο κύκλωμα του τηλεχειριστηρίου για αποφυγή υπερβολικής απώλειας ενέργειας ενώ βρίσκεται σε αδράνεια.

Το Arduino Nano ή το Arduino Pro-mini συνιστάται για την κατασκευή του τηλεχειριστηρίου καθώς είναι σε μικρότερη μορφή που καθιστά φορητή.

Διάγραμμα κυκλώματος:

Πομπός τηλεχειριστηρίου 2,4 GHz 10 καναλιών

Τα παραπάνω είναι το πλήρες διάγραμμα κυκλώματος για το τηλεχειριστήριο. Το διάγραμμα σύνδεσης ακίδων για NRF24L01 δίνεται επίσης στο ίδιο σχήμα.

Απενεργοποιήστε το τηλεχειριστήριο όταν τελειώσετε.

Κάντε λήψη του αρχείου βιβλιοθήκης εδώ: github.com/nRF24/RF24.git

Πρόγραμμα για απομακρυσμένο:

//-----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----//

Αυτό ολοκληρώνει το κύκλωμα του τηλεχειριστηρίου.

Ο λαβων:

Το κύκλωμα δέκτη αποτελείται από Arduino που μπορεί να είναι της επιλογής σας, 10 αντίσταση περιορισμού ρεύματος 330 ohm, 10 τρανζίστορ και 10 ρελέ σχηματίζουν το στάδιο εξόδου.

Σε κάθε μία από τις 10 ακίδες εξόδου του Arduino συνδέεται με 10 ρελέ μέσω αντίστασης και τρανζίστορ.

Βεβαιωθείτε ότι το τροφοδοτικό σας είναι ικανό να παρέχει τουλάχιστον 1Α ρεύματος που είναι απαραίτητο για τη λειτουργία πολλαπλών ρελέ τη στιγμή.

Μια μονάδα πομποδέκτη 2,4 GHz NRF24L01 παρέχει επικοινωνία μεταξύ τηλεχειριστηρίου.

Διάγραμμα κυκλώματος:



Δέκτης τηλεχειριστηρίου 2,4 GHz 10 καναλιών

Εάν έχετε μπερδευτεί με το διάγραμμα καλωδίωσης μεταξύ της μονάδας Arduino και NRF24L01, απλώς ρίξτε μια ματιά στον πίνακα δίπλα στο σχηματικό, είναι ίδιο και για το κύκλωμα τηλεχειριστηρίου.

Η ακολουθία εξόδου και οι ακίδες εξόδου έχουν ως εξής:

Arduino PIN - Ακολουθία εξόδου

PIN 2 - ΕΞΟΔΟΣ 1
PIN 3 - ΕΞΟΔΟΣ 2
PIN 4 - ΕΞΟΔΟΣ 3
PIN 5 - ΕΞΟΔΟΣ 4
PIN 6 - ΕΞΟΔΟΣ 5
PIN 7 - ΕΞΟΔΟΣ 6
PIN 8 - ΕΞΟΔΟΣ 7
PIN A0 - ΕΞΟΔΟΣ 8
PIN A1 - ΕΞΟΔΟΣ 9
PIN A2 - ΑΠΟΤΕΛΕΣΜΑ 10

Στάδιο εξόδου:

Συνδέσεις ρελέ τηλεχειριστηρίου 2,4 GHz 10 καναλιών

Η έξοδος απλώς παρουσιάζεται με δύο στάδια εξόδου για απλότητα του διαγράμματος. Πρέπει να το επεκτείνετε σε δέκα, εάν χρησιμοποιείτε και τα 10 κανάλια.

Πρόγραμμα για δέκτη:

//-----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----//

Αυτό ολοκληρώνει τον Παραλήπτη.

Έχει θεωρητικό εύρος 100 μέτρων πρακτικά, μπορεί να λειτουργεί περίπου 30 μέτρα και πάνω, μπορεί να διαφέρει ανάλογα με τα στερεά εμπόδια μεταξύ τηλεχειριστηρίου και δέκτη.

Τρόπος λειτουργίας αυτού του έργου:

• Ενεργοποιήστε πρώτα το δέκτη και μετά απομακρυσμένο.

• Πατήστε οποιοδήποτε από τα κουμπιά στο τηλεχειριστήριο κάθε φορά.

• Εάν πατήσετε το πρώτο κουμπί ενεργοποιείται η αντίστοιχη έξοδος, δηλαδή η έξοδος 1 ενεργοποιείται. Εάν πατήσετε ξανά το ίδιο κουμπί στο τηλεχειριστήριο, θα απενεργοποιήσει την έξοδο 1 στον δέκτη.

• Ισχύει για όλα τα κουμπιά και τις 10 εξόδους.

• Απενεργοποιήστε το τηλεχειριστήριο μετά τη χρήση.

Εάν έχετε περαιτέρω απορίες σχετικά με τον παραπάνω διακόπτη τηλεχειριστηρίου 2,4 GHz 10 καναλιών, παρακαλούμε να τις εκφράσετε στην ενότητα σχολίων.




Προηγούμενο: Arduino PWM Signal Generator Circuit Επόμενο: Πώς να εκτελέσετε έναν σερβοκινητήρα χρησιμοποιώντας το IC 555