Wireless Wireless Servo Motor Control Χρησιμοποιώντας σύνδεση επικοινωνίας 2,4 GHz

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





Σε αυτήν την ανάρτηση πρόκειται να κατασκευάσουμε ένα ασύρματο κύκλωμα σερβο κινητήρα που μπορεί να ελέγχει ασύρματα 6 σερβο κινητήρες σε σύνδεση επικοινωνίας 2,4 GHz.



Εισαγωγή

Το έργο χωρίζεται σε δύο μέρη: έναν πομπό με 6 ποτενσιόμετρα και ένα κύκλωμα δέκτη με 6 σερβο κινητήρες .

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



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

Η καρδιά του κυκλώματος είναι η μονάδα NRF24L01 που είναι ένας πομποδέκτης που λειτουργεί στη ζώνη ISM (Βιομηχανική, Επιστημονική και Ιατρική ζώνη) είναι η ίδια ζώνη συχνοτήτων με την οποία λειτουργεί το WI-FI σας.

Απεικόνιση των ενοτήτων NRF24L01:

Έχει 125 κανάλια, έχει μέγιστο ρυθμό δεδομένων 2MBps και θεωρητικό μέγιστο εύρος 100 μέτρων. Θα χρειαστείτε δύο τέτοιες ενότητες για να δημιουργήσετε έναν σύνδεσμο επικοινωνίας.

Διαμόρφωση καρφιτσών:

Λειτουργεί με πρωτόκολλο επικοινωνίας SPI. Πρέπει να συνδέσετε 7 από τις 8 ακίδες στο Arduino για να λειτουργήσει αυτή η μονάδα.

Λειτουργεί σε 3,3 V και 5V σκοτώνει τη μονάδα, οπότε πρέπει να προσέχετε κατά την τροφοδοσία. Ευτυχώς διαθέτουμε ρυθμιστή τάσης 3.3V στο Arduino και πρέπει να τροφοδοτείται μόνο από την υποδοχή 3.3V του Arduino.

Τώρα ας προχωρήσουμε στο κύκλωμα πομπού.

Κύκλωμα πομπού:

Το κύκλωμα αποτελείται από 6 ποτενσιόμετρο με τιμή 10K ohm. Ο μεσαίος ακροδέκτης των 6 ποτενσιόμετρων συνδέεται με αναλογικούς ακροδέκτες εισόδου Α0 έως Α5.

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

Αυτό το κύκλωμα μπορεί να τροφοδοτείται από μπαταρία USB ή 9V μέσω βύσματος DC.

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

Πρόγραμμα για πομπό:

//----------------------Program Developed by R.Girish------------------------//
#include
#include
#include
RF24 radio(9,10)
const byte address[6] = '00001'
#define pot1 A0
#define pot2 A1
#define pot3 A2
#define pot4 A3
#define pot5 A4
#define pot6 A5
const int threshold = 20
int potValue1 = 0
int potValue2 = 0
int potValue3 = 0
int potValue4 = 0
int potValue5 = 0
int potValue6 = 0
int angleValue1 = 0
int angleValue2 = 0
int angleValue3 = 0
int angleValue4 = 0
int angleValue5 = 0
int angleValue6 = 0
int check1 = 0
int check2 = 0
int check3 = 0
int check4 = 0
int check5 = 0
int check6 = 0
const char var1[32] = 'Servo1'
const char var2[32] = 'Servo2'
const char var3[32] = 'Servo3'
const char var4[32] = 'Servo4'
const char var5[32] = 'Servo5'
const char var6[32] = 'Servo6'
void setup()
{
Serial.begin(9600)
radio.begin()
radio.openWritingPipe(address)
radio.setChannel(100)
radio.setDataRate(RF24_250KBPS)
radio.setPALevel(RF24_PA_MAX)
radio.stopListening()
}
void loop()
{
potValue1 = analogRead(pot1)
if(potValue1 > check1 + threshold || potValue1 {
radio.write(&var1, sizeof(var1))
angleValue1 = map(potValue1, 0, 1023, 0, 180)
radio.write(&angleValue1, sizeof(angleValue1))
check1 = potValue1
Serial.println('INPUT:1')
Serial.print('Angle:')
Serial.println(angleValue1)
Serial.print('Voltage Level:')
Serial.println(potValue1)
Serial.println('----------------------------------')
}
potValue2 = analogRead(pot2)
if(potValue2 > check2 + threshold || potValue2 {
radio.write(&var2, sizeof(var2))
angleValue2 = map(potValue2, 0, 1023, 0, 180)
radio.write(&angleValue2, sizeof(angleValue2))
check2 = potValue2
Serial.println('INPUT:2')
Serial.print('Angle:')
Serial.println(angleValue2)
Serial.print('Voltage Level:')
Serial.println(potValue2)
Serial.println('----------------------------------')
}
potValue3 = analogRead(pot3)
if(potValue3 > check3 + threshold || potValue3 {
radio.write(&var3, sizeof(var3))
angleValue3 = map(potValue3, 0, 1023, 0, 180)
radio.write(&angleValue3, sizeof(angleValue3))
check3 = potValue3
Serial.println('INPUT:3')
Serial.print('Angle:')
Serial.println(angleValue3)
Serial.print('Voltage Level:')
Serial.println(potValue3)
Serial.println('----------------------------------')
}
potValue4 = analogRead(pot4)
if(potValue4 > check4 + threshold || potValue4 {
radio.write(&var4, sizeof(var4))
angleValue4 = map(potValue4, 0, 1023, 0, 180)
radio.write(&angleValue4, sizeof(angleValue4))
check4 = potValue4
Serial.println('INPUT:4')
Serial.print('Angle:')
Serial.println(angleValue4)
Serial.print('Voltage Level:')
Serial.println(potValue4)
Serial.println('----------------------------------')
}
potValue5 = analogRead(pot5)
if(potValue5 > check5 + threshold || potValue5 {
radio.write(&var5, sizeof(var5))
angleValue5 = map(potValue5, 0, 1023, 0, 180)
radio.write(&angleValue5, sizeof(angleValue5))
check5 = potValue5
Serial.println('INPUT:5')
Serial.print('Angle:')
Serial.println(angleValue5)
Serial.print('Voltage Level:')
Serial.println(potValue5)
Serial.println('----------------------------------')
}
potValue6 = analogRead(pot6)
if(potValue6 > check6 + threshold || potValue6 {
radio.write(&var6, sizeof(var6))
angleValue6 = map(potValue6, 0, 1023, 0, 180)
radio.write(&angleValue6, sizeof(angleValue6))
check6 = potValue6
Serial.println('INPUT:6')
Serial.print('Angle:')
Serial.println(angleValue6)
Serial.print('Voltage Level:')
Serial.println(potValue6)
Serial.println('----------------------------------')
}
}
//----------------------Program Developed by R.Girish------------------------//

Αυτό ολοκληρώνει τον πομπό.

Ο λαβων:

Το κύκλωμα δέκτη αποτελείται από 6 σερβο κινητήρες, έναν Arduino και δύο ξεχωριστές τροφοδοτικές.

ο Οι σερβοκινητήρες χρειάζονται υψηλότερο ρεύμα για να λειτουργήσουν, οπότε δεν πρέπει να τροφοδοτείται από το arduino . Γι 'αυτό χρειαζόμαστε δύο ξεχωριστές πηγές ενέργειας.

Παρακαλώ εφαρμόστε τάση στο servo κατάλληλα για micro servo motors 4.8V είναι αρκετό, εάν θέλετε να τροφοδοτήσετε bulkier servo motors, εφαρμόστε τάση που ταιριάζει με την βαθμολογία του servo.

Μην ξεχνάτε ότι ο σερβο κινητήρας καταναλώνει κάποια ισχύ ακόμα και όταν δεν υπάρχει στιγμή, αυτό συμβαίνει επειδή ο βραχίονας του σερβο κινητήρα καταπολεμά πάντα κάθε αλλαγή από τη θέση που σχολίασε.

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

//----------------------Program Developed by R.Girish------------------------//
#include
#include
#include
#include
RF24 radio(9,10)
const byte address[6] = '00001'
Servo servo1
Servo servo2
Servo servo3
Servo servo4
Servo servo5
Servo servo6
int angle1 = 0
int angle2 = 0
int angle3 = 0
int angle4 = 0
int angle5 = 0
int angle6 = 0
char input[32] = ''
const char var1[32] = 'Servo1'
const char var2[32] = 'Servo2'
const char var3[32] = 'Servo3'
const char var4[32] = 'Servo4'
const char var5[32] = 'Servo5'
const char var6[32] = 'Servo6'
void setup()
{
Serial.begin(9600)
servo1.attach(2)
servo2.attach(3)
servo3.attach(4)
servo4.attach(5)
servo5.attach(6)
servo6.attach(7)
radio.begin()
radio.openReadingPipe(0, address)
radio.setChannel(100)
radio.setDataRate(RF24_250KBPS)
radio.setPALevel(RF24_PA_MAX)
radio.startListening()
}
void loop()
{
delay(5)
while(!radio.available())
radio.read(&input, sizeof(input))
if((strcmp(input,var1) == 0))
{
while(!radio.available())
radio.read(&angle1, sizeof(angle1))
servo1.write(angle1)
Serial.println(input)
Serial.print('Angle:')
Serial.println(angle1)
Serial.println('--------------------------------')
}
else if((strcmp(input,var2) == 0))
{
while(!radio.available())
radio.read(&angle2, sizeof(angle2))
servo2.write(angle2)
Serial.println(input)
Serial.print('Angle:')
Serial.println(angle2)
Serial.println('--------------------------------')
}
else if((strcmp(input,var3) == 0))
{
while(!radio.available())
radio.read(&angle3, sizeof(angle3))
servo3.write(angle3)
Serial.println(input)
Serial.print('Angle:')
Serial.println(angle3)
Serial.println('--------------------------------')
}
else if((strcmp(input,var4) == 0))
{
while(!radio.available())
radio.read(&angle4, sizeof(angle4))
servo4.write(angle4)
Serial.println(input)
Serial.print('Angle:')
Serial.println(angle4)
Serial.println('--------------------------------')
}
else if((strcmp(input,var5) == 0))
{
while(!radio.available())
radio.read(&angle5, sizeof(angle5))
servo5.write(angle5)
Serial.println(input)
Serial.print('Angle:')
Serial.println(angle5)
Serial.println('--------------------------------')
}
else if((strcmp(input,var6) == 0))
{
while(!radio.available())
radio.read(&angle6, sizeof(angle6))
servo6.write(angle6)
Serial.println(input)
Serial.print('Angle:')
Serial.println(angle6)
Serial.println('--------------------------------')
}
}
//----------------------Program Developed by R.Girish------------------------//

Αυτό ολοκληρώνει τον δέκτη.

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

• Τροφοδοτήστε και τα δύο κύκλωμα.
• Τώρα περιστρέψτε οποιοδήποτε από τα κουμπιά του ποτενσιόμετρου.
• Για παράδειγμα, 3ο ποτενσιόμετρο, το αντίστοιχο σερβο στον δέκτη περιστρέφεται.
• Αυτό ισχύει για όλους τους σερβοκινητήρες και τα ποτενσιόμετρα.

Σημείωση: Μπορείτε να συνδέσετε τον πομπό στον υπολογιστή και να ανοίξετε την σειριακή οθόνη για να δείτε τα δεδομένα, όπως η γωνία του σερβοκινητήρα, το επίπεδο τάσης στον αναλογικό πείρο και το ποτενσιόμετρο που λειτουργεί αυτήν τη στιγμή.

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




Προηγούμενο: 200, 600 LED String Circuit στο Mains 220V Επόμενο: Ελεγκτής κινητήρα BLDC υψηλής έντασης χωρίς αισθητήρα με χρήση EMF Back