Kawalan Motor Servo Tanpa Wayar Menggunakan pautan komunikasi 2.4 GHz

Cuba Instrumen Kami Untuk Menghapuskan Masalah





Dalam catatan ini kita akan membina litar motor servo tanpa wayar yang dapat mengawal 6 motor servo secara wayarles pada pautan komunikasi 2.4 GHz.



Pengenalan

Projek ini terbahagi kepada dua bahagian: pemancar dengan 6 potensiometer dan litar penerima dengan 6 motor servo .

Alat kawalan jauh mempunyai 6 potensiometer untuk mengawal 6 motor servo individu secara bebas pada penerima. Dengan memutar potensiometer, sudut motor servo dapat dikawal .



Litar yang dicadangkan boleh digunakan di mana anda memerlukan gerakan terkawal, misalnya lengan robot atau kawalan arah roda depan kereta RC.

Inti litar adalah modul NRF24L01 yang merupakan transceiver yang berfungsi pada jalur ISM (Jalur industri, saintifik dan perubatan) ia adalah jalur frekuensi yang sama dengan yang berfungsi oleh WI-FI anda.

Ilustrasi modul NRF24L01:

Ia mempunyai 125 saluran, ia mempunyai kadar data maksimum 2MBps dan mempunyai jarak maksimum teori 100 meter. Anda memerlukan dua modul seperti itu untuk mewujudkan pautan komunikasi.

Konfigurasi pin:

Ia berfungsi pada protokol komunikasi SPI. Anda perlu menyambungkan 7 daripada 8 pin ke Arduino untuk menjadikan modul ini berfungsi.

Ia berfungsi pada 3.3 V dan 5V membunuh modul sehingga berhati-hati mesti diambil semasa menghidupkan. Nasib baik kita mempunyai pengatur voltan 3.3V di Arduino dan ia mesti dihidupkan hanya dari soket Arduino 3.3V.

Sekarang mari kita beralih ke litar Pemancar.

Litar Pemancar:

Litar terdiri daripada 6 potensiometer nilai 10K ohm. Terminal tengah 6 potensiometer disambungkan ke pin input analog A0 hingga A5.

Tabulasi diberikan di samping skema untuk sambungan NRF24L01 ke Arduino yang mungkin anda rujuk, jika anda mempunyai kekeliruan dalam rajah litar.

Litar ini mungkin dikuasakan dari bateri USB atau 9V melalui bicu DC.

Sila muat turun fail perpustakaan di sini: github.com/nRF24/

Program untuk Pemancar:

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

Itu menyimpulkan pemancar.

Penerima:

Litar penerima terdiri daripada 6 motor servo, satu Arduino dan dua bekalan kuasa yang berasingan.

The motor servo memerlukan arus yang lebih tinggi untuk beroperasi sehingga tidak boleh digerakkan dari arduino . Itulah sebabnya kami memerlukan dua sumber kuasa yang berasingan.

Sila gunakan voltan pada servo dengan tepat untuk motor servo mikro 4.8V sudah cukup, jika anda ingin menghidupkan motor servo pukal, gunakan pemadanan voltan dengan peringkat servo.

Ingatlah bahawa motor servo menggunakan sedikit tenaga walaupun tidak ada saat, itu kerana lengan motor servo selalu melawan sebarang perubahan dari kedudukannya yang dikomentari.

Program untuk Penerima:

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

Itu menyimpulkan penerima.

Cara mengendalikan projek ini:

• Kuasa kedua litar.
• Sekarang putar salah satu kenop potensiometer.
• Contohnya potensiometer ke-3, servo yang sesuai pada penerima berputar.
• Ini berlaku untuk semua motor servo dan potensiometer.

Catatan: Anda boleh menyambungkan pemancar ke komputer dan membuka monitor bersiri untuk melihat data seperti sudut motor servo, tahap voltan pada pin analog dan potensiometer mana yang sedang dikendalikan.

Sekiranya anda mempunyai pertanyaan khusus mengenai projek motor servo tanpa wayar berasaskan Arduino ini, sila nyatakan di bahagian komen anda mungkin mendapat respons pantas.




Sebelumnya: 200, 600 LED String Circuit pada Mains 220V Seterusnya: Pengawal Motor BLDC Sensorless Arus Tinggi menggunakan Back EMF