Kontrol Motor Servo Nirkabel Menggunakan link komunikasi 2,4 GHz

Coba Instrumen Kami Untuk Menghilangkan Masalah





Pada posting kali ini kita akan membuat rangkaian motor servo nirkabel yang dapat mengontrol 6 motor servo secara nirkabel pada link komunikasi 2,4 GHz.



pengantar

Proyek ini dibagi menjadi dua bagian: pemancar dengan 6 potensiometer dan rangkaian penerima dengan 6 potensiometer motor servo .

Remote memiliki 6 potensiometer untuk mengontrol 6 motor servo individu secara independen di penerima. Dengan memutar potensiometer, sudut dari motor servo dapat dikontrol .



Sirkuit yang diusulkan dapat digunakan di mana Anda membutuhkan gerakan terkontrol, misalnya lengan robot atau pengatur arah roda depan mobil RC.

Inti dari rangkaian ini adalah modul NRF24L01 yang merupakan transceiver yang bekerja pada pita ISM (pita Industri, Ilmiah, dan Medis), ini adalah pita frekuensi yang sama dengan yang digunakan WI-FI Anda.

Ilustrasi Modul NRF24L01:

Ini memiliki 125 saluran, memiliki kecepatan data maksimum 2MBps dan memiliki jangkauan maksimum teoritis 100 meter. Anda akan membutuhkan dua modul seperti itu untuk membuat tautan komunikasi.

Konfigurasi pin:

Ia bekerja pada protokol komunikasi SPI. Anda perlu menghubungkan 7 dari 8 pin ke Arduino untuk membuat modul ini berfungsi.

Ini bekerja pada 3,3 V dan 5V membunuh modul sehingga harus berhati-hati saat menyalakan. Untungnya kami memiliki regulator tegangan 3.3V on board pada Arduino dan itu harus didukung hanya dari soket 3.3V Arduino.

Sekarang mari beralih ke sirkuit Transmitter.

Sirkuit Transmitter:

Rangkaian ini terdiri dari 6 potensiometer dengan nilai 10K ohm. Terminal tengah 6 potensiometer terhubung ke pin input analog A0 ke A5.

Tabulasi diberikan di samping skema untuk NRF24L01 ke koneksi Arduino yang dapat Anda rujuk, jika Anda mengalami kebingungan dalam diagram rangkaian.

Sirkuit ini dapat diberi daya dari baterai USB atau 9V melalui jack DC.

Silakan unduh file perpustakaan di sini: github.com/nRF24/

Program untuk Transmitter:

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

Rangkaian penerima terdiri dari 6 motor servo, satu Arduino dan dua catu daya terpisah.

Itu motor servo membutuhkan arus yang lebih tinggi untuk beroperasi sehingga tidak boleh diberi daya dari Arduino . Itulah mengapa kita membutuhkan dua sumber tenaga yang terpisah.

Harap terapkan tegangan ke servo dengan tepat untuk motor servo mikro 4.8V sudah cukup, jika Anda ingin memberi daya pada motor servo yang lebih besar, terapkan tegangan yang sesuai dengan peringkat servo.

Harap diingat bahwa motor servo mengkonsumsi sejumlah daya meskipun tidak ada momen, itu karena lengan motor servo selalu melawan setiap perubahan dari posisi 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.

Bagaimana mengoperasikan proyek ini:

• Nyalakan kedua sirkuit.
• Sekarang putar salah satu kenop potensiometer.
• Misalnya potensiometer ke-3, servo yang sesuai di penerima berputar.
• Ini berlaku untuk semua motor servo dan potensiometer.

Catatan: Anda dapat menghubungkan pemancar ke komputer dan membuka monitor serial untuk melihat data seperti sudut motor servo, level tegangan pada pin analog dan potensiometer mana yang sedang dioperasikan.

Jika Anda memiliki pertanyaan khusus tentang proyek motor servo nirkabel berbasis Arduino ini, silakan ungkapkan di bagian komentar Anda dapat menerima tanggapan cepat.




Sepasang: 200, 600 Sirkuit String LED pada Sumber Listrik 220V Berikutnya: Pengontrol Motor BLDC Tanpa Sensor Arus Tinggi menggunakan EMF Kembali