التحكم في محرك سيرفو لاسلكي باستخدام وصلة اتصال 2.4 جيجا هرتز

جرب أداة القضاء على المشاكل





في هذا المنشور ، سنقوم ببناء دائرة محرك سيرفو لاسلكي يمكنها التحكم في 6 محركات مؤازرة لاسلكيًا على رابط اتصال 2.4 جيجا هرتز.



مقدمة

ينقسم المشروع إلى جزأين: جهاز إرسال بستة مقاييس جهد ودائرة استقبال بـ 6 أجهزة المحركات .

يحتوي جهاز التحكم عن بعد على 6 مقاييس جهد للتحكم في 6 محركات مؤازرة فردية بشكل مستقل في جهاز الاستقبال. عن طريق تدوير مقياس الجهد ، تكون زاوية يمكن التحكم في محرك سيرفو .



يمكن استخدام الدائرة المقترحة حيث تريد التحكم في الحركة ، على سبيل المثال ذراع الروبوت أو التحكم في اتجاه العجلة الأمامية لسيارة RC.

قلب الدائرة هو الوحدة النمطية NRF24L01 وهي عبارة عن جهاز إرسال واستقبال يعمل على نطاق ISM (النطاق الصناعي والعلمي والطبي) وهو نفس نطاق التردد الذي يعمل به WI-FI.

رسم توضيحي لوحدات NRF24L01:

يحتوي على 125 قناة ، ويبلغ الحد الأقصى لمعدل البيانات 2 ميجابت في الثانية ويبلغ أقصى مدى نظري 100 متر. ستحتاج إلى وحدتين من هذه الوحدات لإنشاء رابط اتصال.

تكوين الدبوس:

يعمل على بروتوكول الاتصال SPI. تحتاج إلى توصيل 7 من 8 دبابيس بـ Arduino لجعل هذه الوحدة تعمل.

يعمل على 3.3 فولت و 5 فولت يقتل الوحدة لذا يجب توخي الحذر أثناء التشغيل. لحسن الحظ ، لدينا منظم جهد 3.3 فولت على Arduino ويجب أن يتم تشغيله فقط من مقبس 3.3V من Arduino.

الآن دعنا ننتقل إلى دائرة الإرسال.

حلبة المرسل:

تتكون الدائرة من 6 مقاييس جهد بقيمة 10 كيلو أوم. يتم توصيل الطرف الأوسط المكون من 6 مقاييس جهد بدبابيس إدخال تناظرية من A0 إلى A5.

يتم إعطاء الجدولة بجانب التخطيطي لـ NRF24L01 لاتصال Arduino الذي قد تشير إليه ، إذا كان لديك أي ارتباك في مخطط الدائرة.

قد يتم تشغيل هذه الدائرة من بطارية USB أو 9V عبر مقبس DC.

يرجى تنزيل ملف المكتبة هنا: github.com/nRF24/

برنامج المرسل:

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

هذا يختتم المرسل.

المستقبل:

تتكون دائرة الاستقبال من 6 محركات مؤازرة ، واحد Arduino واثنين من إمدادات الطاقة المنفصلة.

ال تحتاج المحركات المؤازرة إلى تيار أعلى للعمل ، لذا يجب ألا يتم تشغيلها من اردوينو . لهذا السبب نحتاج إلى مصدرين منفصلين للطاقة.

يرجى تطبيق الجهد على المؤازرة بشكل مناسب لمحركات المؤازرة الدقيقة 4.8 فولت كافية ، إذا كنت ترغب في تشغيل محركات مؤازرة أكبر ، فقم بتطبيق الجهد المطابق لتصنيف المؤازرة.

يرجى تذكر أن محرك سيرفو يستهلك بعض الطاقة حتى في حالة عدم وجود لحظة ، وذلك لأن ذراع محرك السيرفو تقاوم دائمًا أي تغيير من موضع التعليق.

برنامج المتلقي:

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

هذا يخلص المتلقي.

كيفية تشغيل هذا المشروع:

• قم بتشغيل كل من الدائرة.
• الآن قم بتدوير أي مفتاح من مقبض مقياس الجهد.
• على سبيل المثال مقياس الجهد الثالث ، يتم تدوير المؤازرة المقابلة في جهاز الاستقبال.
• ينطبق هذا على جميع المحركات المؤازرة ومقاييس الجهد.

ملاحظة: يمكنك توصيل جهاز الإرسال بالكمبيوتر وفتح الشاشة التسلسلية لرؤية البيانات مثل زاوية محرك المؤازرة ومستوى الجهد عند الدبوس التناظري وأي مقياس الجهد قيد التشغيل حاليًا.

إذا كان لديك أي سؤال محدد بخصوص مشروع محرك المؤازرة اللاسلكي المستند إلى Arduino ، فيرجى التعبير في قسم التعليقات عن أنك قد تتلقى ردًا سريعًا.




السابق: 200 ، 600 LED سلسلة الدائرة على 220V التيار الكهربائي التالي: وحدة تحكم محرك BLDC عالية الحالية بدون استشعار باستخدام EMF الخلفي