Langaton servomoottorin ohjaus 2,4 GHz: n tietoliikenneyhteydellä

Kokeile Instrumenttia Ongelmien Poistamiseksi





Tässä viestissä aiomme rakentaa langattoman servomoottoripiirin, joka voi ohjata kuutta servomoottoria langattomasti 2,4 GHz: n tietoliikenneyhteydellä.



Johdanto

Projekti on jaettu kahteen osaan: lähetin 6 potentiometrillä ja vastaanotinpiiri 6: lla servomoottorit .

Kaukosäätimessä on 6 potentiometriä kuuden yksittäisen servomoottorin ohjaamiseen vastaanottimessa. Kierrä potentiometriä servomoottoria voidaan ohjata .



Ehdotettua virtapiiriä voidaan käyttää siellä, missä tarvitset hallittua liikettä, esimerkiksi robotin käsivarsi tai RC-auton etupyörän suuntaussäätö.

Piirin sydän on NRF24L01-moduuli, joka on lähetin-vastaanotin, joka toimii ISM-taajuusalueella (teollisuus-, tiede- ja lääketieteellinen kaista). Se on sama taajuuskaista, jota WI-FI toimii.

Kuva NRF24L01-moduuleista:

Siinä on 125 kanavaa, sen suurin tiedonsiirtonopeus on 2 Mbps ja teoreettinen enimmäiskantama on 100 metriä. Tarvitset kaksi tällaista moduulia yhteyden muodostamiseksi.

Nastan kokoonpano:

Se toimii SPI-yhteyskäytännöllä. Sinun on liitettävä 7 8 nastasta Arduinoon, jotta tämä moduuli toimii.

Se toimii 3,3 V: lla ja 5 V: lla tappaa moduulin, joten virtaa on oltava varovainen. Onneksi meillä on aluksella 3,3 V: n jännitesäädin Arduinossa ja sitä saa käyttää vain Arduinon 3,3 V: n liitännästä.

Siirrytään nyt lähetinpiiriin.

Lähettimen piiri:

Piiri koostuu kuudesta 10K ohmin arvoisesta potentiometristä. 6 potentiometrin keskiliitin on kytketty analogisista A0 - A5 tuloliittimiin.

Taulukko annetaan NRF24L01 - Arduino-yhteyden kaavion vieressä, johon voit viitata, jos sinulla on sekaannusta piirikaaviossa.

Tämä piiri voidaan saada virtansa USB- tai 9 V -akusta DC-liitännän kautta.

Lataa kirjastotiedosto täältä: github.com/nRF24/

Lähettimen ohjelma:

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

Lähetin lopetetaan.

Vastaanottaja:

Vastaanotinpiiri koostuu kuudesta servomoottorista, yhdestä Arduinosta ja kahdesta erillisestä virtalähteestä.

servomoottorit tarvitsevat suuremman virran toimiakseen, joten niitä ei saa virtaa arduinosta . Siksi tarvitsemme kaksi erillistä virtalähdettä.

Käytä jännitettä servoon asianmukaisesti mikroservomoottoreille. 4,8 V riittää, jos haluat käyttää voimakkaampia servomoottoreita, sovita jännitteen sovitus servoluokkaan.

Muista, että servomoottori kuluttaa jonkin verran virtaa myös silloin, kun hetkeä ei ole, koska servomoottorin varsi taistelee aina muutoksia vastaan ​​kommentoidusta asennosta.

Vastaanottimen ohjelma:

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

Se päättää vastaanottimen.

Kuinka toteuttaa tämä projekti:

• Kytke molempiin piiriin virta.
• Kierrä mitä tahansa potentiometrin nuppia.
• Esimerkiksi 3. potentiometri, vastaava servo vastaanottimessa pyörii.
• Tämä koskee kaikkia servomoottoreita ja potentiometrejä.

Huomaa: Voit liittää lähettimen tietokoneeseen ja avata sarjamoduulin nähdäksesi tiedot, kuten servomoottorin kulman, jännitetason analogisella tapilla ja mitä potentiometriä käytetään parhaillaan.

Jos sinulla on kysyttävää tästä Arduino-pohjaisesta langattomasta servomoottoriprojektista, ilmaise kommenttiosassa, että saat nopean vastauksen.




Pari: 200, 600 LED-merkkijonopiiri 220V: n verkkovirralla Seuraava: Suurivirtainen anturiton BLDC-moottoriohjain, joka käyttää Back EMF -toimintoa