2.4 GHz संचार लिंक का उपयोग कर वायरलेस सर्वो मोटर नियंत्रण

समस्याओं को खत्म करने के लिए हमारे साधन का प्रयास करें





इस पोस्ट में हम एक वायरलेस सर्वो मोटर सर्किट का निर्माण करने जा रहे हैं जो 2.4 जीएचजेड संचार लिंक पर 6 सर्वो मोटर्स को वायरलेस तरीके से नियंत्रित कर सकता है।



परिचय

परियोजना को दो भागों में विभाजित किया गया है: 6 पोटेंशियोमीटर वाला एक ट्रांसमीटर और 6 के साथ एक रिसीवर सर्किट सर्वो मोटर्स ।

रिमोट में रिसीवर पर स्वतंत्र रूप से 6 व्यक्तिगत सर्वो मोटर्स को नियंत्रित करने के लिए 6 पोटेंशियोमीटर हैं। पोटेंशियोमीटर को घुमाकर, का कोण इमदादी मोटर को नियंत्रित किया जा सकता है



प्रस्तावित सर्किट का उपयोग किया जा सकता है जहां आपको नियंत्रित गति की आवश्यकता होती है, उदाहरण के लिए एक रोबोट का हाथ या आरसी कार का फ्रंट व्हील दिशा नियंत्रण।

सर्किट का दिल NRF24L01 मॉड्यूल है जो एक ट्रांसीवर है जो आईएसएम बैंड (औद्योगिक, वैज्ञानिक और चिकित्सा बैंड) पर काम करता है यह वही आवृत्ति बैंड है जो आपके WI-FI काम करता है।

NRF24L01 मॉड्यूल का चित्रण:

इसमें 125 चैनल हैं, इसकी अधिकतम डेटा दर 2 एमबीपीएस है और इसमें सैद्धांतिक अधिकतम सीमा 100 मीटर है। संचार लिंक स्थापित करने के लिए आपको दो ऐसे मॉड्यूल की आवश्यकता होगी।

पिन कॉन्फ़िगरेशन:

यह एसपीआई संचार प्रोटोकॉल पर काम करता है। इस मॉड्यूल को काम करने के लिए आपको 8 पिनों में से 7 को Arduino से कनेक्ट करना होगा।

यह 3.3 V पर काम करता है और 5V मॉड्यूल को मारता है इसलिए पॉवरिंग करते समय सावधानी बरतनी चाहिए। सौभाग्य से हमारे पास Arduino पर 3.3V वोल्टेज रेगुलेटर है और इसे Arduino के 3.3V सॉकेट से ही संचालित किया जाना चाहिए।

अब ट्रांसमीटर सर्किट पर चलते हैं।

ट्रांसमीटर सर्किट:

सर्किट में 10K ओम मूल्य के 6 पोटेंशियोमीटर शामिल हैं। 6 पोटेंशियोमीटर का मध्य टर्मिनल A0 से A5 एनालॉग इनपुट पिन से जुड़ा है।

यदि आपके पास सर्किट आरेख में कोई भ्रम है, तो Arduino कनेक्शन के लिए NRF24L01 के लिए योजनाबद्ध के बगल में टेबुलेशन दिया गया है।

यह सर्किट डीसी जैक के माध्यम से यूएसबी या 9 वी बैटरी से संचालित हो सकता है।

कृपया यहां लाइब्रेरी फ़ाइल डाउनलोड करें: 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 और दो अलग-अलग बिजली की आपूर्ति होती है।

इमदादी मोटर्स को संचालित करने के लिए उच्च धारा की आवश्यकता होती है इसलिए इसे arduino से संचालित नहीं करना चाहिए । इसलिए हमें दो अलग-अलग बिजली स्रोतों की आवश्यकता है।

कृपया माइक्रो सर्वो मोटर्स के लिए उचित रूप से इमदादी वोल्टेज 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 एलईडी स्ट्रिंग सर्किट मेन्स 220 वी पर अगला: बैक ईएमएफ का उपयोग करके उच्च वर्तमान सेंसरलेस बीएलडीसी मोटर नियंत्रक