Traadita servomootori juhtimine, kasutades 2,4 GHz sidelinki

Proovige Meie Instrumenti Probleemide Kõrvaldamiseks





Selles postituses ehitame traadita servomootori vooluringi, mis suudab juhtida traadita 6 servomootorit 2,4 GHz sidesidel.



Sissejuhatus

Projekt on jagatud kaheks osaks: 6 potentsiomeetriga saatja ja 6-ga vastuvõtjaahel servomootorid .

Kaugjuhtimispuldil on 6 potentsiomeetrit, et juhtida vastuvõtja juures eraldi 6 servomootorit. Potentsiomeetri pööramisel pööratakse nurga alla servomootorit saab juhtida .



Kavandatud vooluringi saab kasutada seal, kus vajate juhitavat liikumist, näiteks roboti kätt või RC-auto esiratta juhtimise juhtimist.

Vooluahela süda on NRF24L01 moodul, mis on transiiver, mis töötab ISM-sagedusribal (tööstus-, teadus- ja meditsiiniriba). See on sama sagedusriba, mida töötab teie WI-FI.

NRF24L01 moodulite illustratsioon:

Sellel on 125 kanalit, maksimaalne andmeedastuskiirus on 2 MB / s ja teoreetiline maksimaalne leviala on 100 meetrit. Sideühenduse loomiseks vajate kahte sellist moodulit.

PIN-koodi konfiguratsioon:

See töötab SPI sideprotokollil. Selle mooduli toimimiseks peate 8-st tihvtist 7 ühendama Arduinoga.

See töötab 3,3 V ja 5 V tapab mooduli, nii et toite ajal tuleb olla ettevaatlik. Õnneks on meil Arduino pardal 3,3 V pinge regulaator ja see peab olema toide ainult Arduino 3,3 V pistikupesast.

Nüüd liigume saatja ahelasse.

Saatja ahel:

Vooluring koosneb 6 potentsiomeetrist 10K oomi väärtusega. 6 potentsiomeetri keskmine klemm on ühendatud A0 kuni A5 analoogsisendi tihvtidega.

Tabel on toodud NRF24L01-Arduino ühenduse skeemi kõrval, millele võite viidata, kui teil on skeemil segadust.

Selle vooluahela toiteallikaks võib olla USB või 9V aku alalisvoolupistiku kaudu.

Laadige raamatukogu fail alla siit: github.com/nRF24/

Saatja programm:

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

Sellega saatja kokku jõuab.

Vastuvõtja:

Vastuvõtja vooluahel koosneb 6 servomootorist, ühest Arduinost ja kahest eraldi toiteallikast.

The servomootorid vajavad töötamiseks suuremat voolu, nii et neid ei tohi toita arduinost . Seetõttu vajame kahte eraldi toiteallikat.

Mikroservimootorite jaoks piisab, kui pingest piisab 4,8 V pingest. Kui soovite toita suuremaid servomootoreid, rakendage pinge vastavust servo nimiväärtusele.

Pidage meeles, et servomootor tarbib natuke energiat isegi siis, kui hetke pole, seda seetõttu, et servomootori vars võitleb alati kommenteeritud positsiooni muutuste vastu.

Vastuvõtja programm:

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

Sellega järeldub vastuvõtja.

Kuidas seda projekti juhtida:

• Toide mõlemat vooluahelat.
• Pöörake nüüd potentsiomeetri nuppu.
• Näiteks 3. potentsiomeeter pöörleb vastuvõtja vastav servo.
• See kehtib kõigi servomootorite ja potentsiomeetrite kohta.

Märkus. Saate ühendada saatja arvutiga ja avada seeriamonitori, et näha selliseid andmeid nagu servomootori nurk, pinge tase analoognõelal ja milline potentsiomeeter töötab.

Kui teil on selle Arduino põhise traadita servomootori projekti kohta konkreetseid küsimusi, palun märkige kommentaaride jaotises, et võite saada kiire vastuse.




Eelmine: 200, 600 LED-i ahel vooluvõrgus 220V Järgmine: suure voolu andurita BLDC mootori kontroller, kasutades tagumist EMF-i