Bezvadu servomotora vadība, izmantojot 2,4 GHz sakaru saiti

Izmēģiniet Mūsu Instrumentu Problēmu Novēršanai





Šajā amatā mēs izveidosim bezvadu servomotora ķēdi, kas bez vadiem var vadīt 6 servomotorus, izmantojot 2,4 GHz sakaru saiti.



Ievads

Projekts ir sadalīts divās daļās: raidītājs ar 6 potenciometriem un uztvērēja ķēde ar 6 servomotori .

Tālvadības pultij ir 6 potenciometri, lai kontrolētu 6 atsevišķus servomotorus neatkarīgi no uztvērēja. Pagriežot potenciometru, leņķis servomotoru var vadīt .



Piedāvāto shēmu var izmantot tur, kur nepieciešama kontrolēta kustība, piemēram, robota svira vai RC automašīnas priekšējo riteņu virziena vadība.

Ķēdes sirds ir NRF24L01 modulis, kas ir uztvērējs, un tas darbojas ISM joslā (rūpniecības, zinātnes un medicīnas joslā). Tā ir tā pati frekvenču josla, kuru darbojas jūsu WI-FI.

NRF24L01 moduļu ilustrācija:

Tam ir 125 kanāli, tā maksimālais datu pārraides ātrums ir 2 MB / s un teorētiskais maksimālais diapazons ir 100 metri. Lai izveidotu sakaru saiti, jums būs nepieciešami divi šādi moduļi.

Piespraudes konfigurācija:

Tas darbojas uz SPI sakaru protokola. Lai šis modulis darbotos, jums ir jāpieslēdz 7 no 8 tapām ar Arduino.

Tas darbojas ar 3,3 V un 5 V nogalina moduli, tāpēc strāvas padeves laikā jābūt uzmanīgam. Par laimi mums uz Arduino ir 3,3 V sprieguma regulators, un tam jābūt barotam tikai no Arduino 3,3 V kontaktligzdas.

Tagad pārejam uz raidītāja ķēdi.

Raidītāja ķēde:

Shēma sastāv no 6 potenciometriem ar 10K omu vērtību. 6 potenciometru vidējā spaile ir savienota ar A0 līdz A5 analogās ieejas tapām.

Tabulas tiek dotas blakus shēmai NRF24L01 līdz Arduino savienojumam, uz kuru jūs varat atsaukties, ja jums ir neskaidrības ķēdes shēmā.

Šo ķēdi var darbināt no USB vai 9V akumulatora, izmantojot līdzstrāvas ligzdu.

Lūdzu, lejupielādējiet bibliotēkas failu šeit: github.com/nRF24/

Raidītāja programma:

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

Ar to raidītājs secina.

Uztvērējs:

Uztvērēja ķēde sastāv no 6 servomotoriem, viena Arduino un diviem atsevišķiem barošanas avotiem.

The servomotoriem darbībai nepieciešama lielāka strāva, tāpēc to nedrīkst darbināt no arduino . Tāpēc mums ir nepieciešami divi atsevišķi enerģijas avoti.

Lūdzu, pieslēdziet servo atbilstoši spriegumam mikro servo motoriem. Pietiek ar 4,8 V, ja vēlaties darbināt lielākus servomotorus, piemērojiet sprieguma atbilstību servo vērtējumam.

Lūdzu, atcerieties, ka servomotors patērē zināmu jaudu pat tad, ja nav brīža, tas ir tāpēc, ka servomotora svira vienmēr cīnās pret jebkādām izmaiņām no komentētā stāvokļa.

Uztvērēja programma:

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

Ar to uztvērējs noslēdzas.

Kā vadīt šo projektu:

• Strāvas padevi abām ķēdēm.
• Tagad pagrieziet jebkuru potenciometra pogu.
• Piemēram, 3. potenciometrs, atbilstošais servo pie uztvērēja griežas.
• Tas attiecas uz visiem servomotoriem un potenciometriem.

Piezīme: Jūs varat savienot raidītāju ar datoru un atvērt sērijas monitoru, lai redzētu datus, piemēram, servomotora leņķi, sprieguma līmeni analogajā tapā un to, kurš potenciometrs pašlaik tiek darbināts.

Ja jums ir kādi īpaši jautājumi par šo Arduino balstītā bezvadu servomotora projektu, lūdzu, komentāru sadaļā norādiet, ka varat saņemt ātru atbildi.




Pāri: 200, 600 LED virknes ķēde uz tīkla 220V Nākamais: Augstas strāvas sensora BLDC motora kontrolieris, izmantojot aizmugurējo EMF