בקרת מנוע סרוו אלחוטי באמצעות קישור תקשורת 2.4 GHz

נסה את הכלי שלנו לביטול בעיות





בפוסט זה אנו הולכים לבנות מעגל מנוע סרוו אלחוטי שיכול לשלוט 6 מנועי סרוו באופן אלחוטי בקישור תקשורת של 2.4 GHz.



מבוא

הפרויקט מחולק לשני חלקים: משדר עם 6 פוטנציומטרים ומעגל מקלט עם 6 מנועי סרוו .

בשלט יש 6 פוטנציומטרים לשליטה על 6 מנועי סרוו בודדים באופן עצמאי במקלט. על ידי סיבוב הפוטנציומטר, זווית ה- ניתן לשלוט על מנוע סרוו .



ניתן להשתמש במעגל המוצע במקום בו אתה זקוק לתנועה מבוקרת, למשל זרוע של רובוט או בקרת כיוון הגלגל הקדמי של מכונית RC.

לב המעגל הוא מודול NRF24L01 שהוא מקלט משדר שהוא עובד על רצועת ISM (הלהקה התעשייתית, המדעית והרפואית) זה אותה תדר שבו ה- WI-FI שלך עובד.

איור של מודולי NRF24L01:

יש לו 125 ערוצים, יש לו קצב נתונים מקסימלי של 2MBps ויש לו טווח מקסימלי תיאורטי של 100 מטר. תצטרך שני מודולים כאלה כדי ליצור קישור תקשורת.

תצורת סיכה:

זה עובד על פרוטוקול תקשורת SPI. עליך לחבר 7 מתוך 8 הפינים לארדואינו בכדי לגרום למודול זה לעבוד.

זה עובד על 3.3 וולט ו -5 וולט הורג את המודול ולכן יש לנקוט בזהירות בזמן ההפעלה. למרבה המזל יש לנו רגולטור מתח 3.3V על Arduino והוא חייב להיות מופעל רק משקע 3.3V של Arduino.

עכשיו בואו נעבור למעגל המשדר.

מעגל משדר:

המעגל מורכב מ -6 פוטנציומטר בערך 10K אוהם. המסוף האמצעי של 6 פוטנציומטרים מחובר לסיכות כניסה אנלוגיות A0 עד A5.

הטבלה ניתנת לצד הסכימה עבור חיבור NRF24L01 ל- Arduino שתוכלו להפנות אליו, אם יש לכם בלבול בתרשים המעגל.

מעגל זה עשוי להיות מופעל מסוללת USB או 9 וולט באמצעות שקע 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 מנועי סרוו, ארדואינו אחד ושני ספקי כוח נפרדים.

ה מנועי סרוו זקוקים לזרם גבוה יותר בכדי שיפעלו ולכן אסור להם להיות מופעל מארדוינו . לכן אנו זקוקים לשני מקור כוח נפרד.

אנא הפעילו מתח על סרוו כראוי עבור מנועי סרוו מיקרו 4.8V זה מספיק, אם אתם רוצים להניע מנועי סרוו גדולים יותר, יש להחיל התאמת מתח לדירוג של סרוו.

אנא זכור כי מנוע סרוו צורך מעט כוח גם כשאין רגע, זאת מכיוון שזרועו של מנוע הסרוו תמיד נלחמת כנגד כל שינוי ממצב העירו.

תוכנית למקלט:

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

זה מסכם את המקלט.

כיצד להפעיל פרויקט זה:

• הפעל את שני המעגלים.
• כעת סובב כל אחד מכפתור הפוטנציומטר.
• לדוגמא פוטנציומטר 3, הסרוו המתאים במקלט מסתובב.
• זה חל על כל מנועי סרוו ופוטנציומטרים.

הערה: באפשרותך לחבר את המשדר למחשב ולפתוח צג סדרתי כדי לראות את הנתונים כגון זווית מנוע הסרוו, רמת המתח בסיכה אנלוגית ואיזה פוטנציומטר מופעל כעת.

אם יש לך שאלה ספציפית ביחס לפרויקט זה של מנוע סרוו אלחוטי מבוסס Arduino, אנא הביע בסעיף ההערה שאתה עשוי לקבל תגובה מהירה.




הקודם: 200, 600 מעגלי LED מיתרים ברשת 220V הבא: בקר מנוע BLDC ללא חיישן זרם גבוה באמצעות EMF בחזרה