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