2.4 GHz కమ్యూనికేషన్ లింక్ ఉపయోగించి వైర్‌లెస్ సర్వో మోటార్ కంట్రోల్

సమస్యలను తొలగించడానికి మా పరికరాన్ని ప్రయత్నించండి





ఈ పోస్ట్‌లో మేము 2.4 GHz కమ్యూనికేషన్ లింక్‌లో 6 సర్వో మోటార్లు వైర్‌లెస్‌గా నియంత్రించగల వైర్‌లెస్ సర్వో మోటార్ సర్క్యూట్‌ను నిర్మించబోతున్నాం.



పరిచయం

ఈ ప్రాజెక్ట్ రెండు భాగాలుగా విభజించబడింది: 6 పొటెన్షియోమీటర్లతో ట్రాన్స్మిటర్ మరియు 6 తో రిసీవర్ సర్క్యూట్ సర్వో మోటార్లు .

రిసీవర్ వద్ద 6 వ్యక్తిగత సర్వో మోటార్లు స్వతంత్రంగా నియంత్రించడానికి రిమోట్‌లో 6 పొటెన్షియోమీటర్లు ఉన్నాయి. పొటెన్షియోమీటర్‌ను తిప్పడం ద్వారా, కోణం సర్వో మోటారును నియంత్రించవచ్చు .



మీకు నియంత్రిత కదలిక అవసరమయ్యే చోట ప్రతిపాదిత సర్క్యూట్‌ను ఉపయోగించవచ్చు, ఉదాహరణకు రోబోట్ యొక్క చేయి లేదా RC కారు యొక్క ఫ్రంట్ వీల్ దిశ నియంత్రణ.

సర్క్యూట్ యొక్క గుండె NRF24L01 మాడ్యూల్, ఇది ISM బ్యాండ్ (ఇండస్ట్రియల్, సైంటిఫిక్ మరియు మెడికల్ బ్యాండ్) పై పనిచేసే ట్రాన్స్‌సీవర్, ఇది మీ WI-FI పనిచేసే అదే ఫ్రీక్వెన్సీ బ్యాండ్.

NRF24L01 మాడ్యూల్స్ యొక్క ఉదాహరణ:

ఇది 125 ఛానెల్‌లను కలిగి ఉంది, ఇది గరిష్ట డేటా రేటు 2 ఎమ్‌బిపిఎస్‌ను కలిగి ఉంది మరియు ఇది సైద్ధాంతిక గరిష్ట పరిధి 100 మీటర్లు. కమ్యూనికేషన్ లింక్‌ను స్థాపించడానికి మీకు అలాంటి రెండు మాడ్యూల్స్ అవసరం.

పిన్ కాన్ఫిగరేషన్:

ఇది SPI కమ్యూనికేషన్ ప్రోటోకాల్‌పై పనిచేస్తుంది. ఈ మాడ్యూల్ పని చేయడానికి మీరు 8 పిన్‌లలో 7 ని ఆర్డునోకు కనెక్ట్ చేయాలి.

ఇది 3.3 V పై పనిచేస్తుంది మరియు 5V మాడ్యూల్‌ను చంపుతుంది కాబట్టి శక్తినిచ్చేటప్పుడు జాగ్రత్త తీసుకోవాలి. అదృష్టవశాత్తూ మనకు Arduino పై 3.3V వోల్టేజ్ రెగ్యులేటర్ ఉంది మరియు ఇది Arduino యొక్క 3.3V సాకెట్ నుండి మాత్రమే శక్తినివ్వాలి.

ఇప్పుడు ట్రాన్స్మిటర్ సర్క్యూట్కు వెళ్దాం.

ట్రాన్స్మిటర్ సర్క్యూట్:

సర్క్యూట్లో 10 కె ఓం విలువ యొక్క 6 పొటెన్షియోమీటర్ ఉంటుంది. 6 పొటెన్షియోమీటర్ల మధ్య టెర్మినల్ A0 నుండి A5 అనలాగ్ ఇన్పుట్ పిన్స్కు అనుసంధానించబడి ఉంది.

సర్క్యూట్ రేఖాచిత్రంలో మీకు ఏదైనా గందరగోళం ఉంటే, మీరు సూచించే ఆర్డునో కనెక్షన్‌కు NRF24L01 యొక్క స్కీమాటిక్ పక్కన పట్టిక ఇవ్వబడుతుంది.

ఈ సర్క్యూట్ 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 సర్వో మోటార్లు, ఒక ఆర్డునో మరియు రెండు వేర్వేరు విద్యుత్ సరఫరా ఉన్నాయి.

ది సర్వో మోటార్లు పనిచేయడానికి అధిక కరెంట్ అవసరం కాబట్టి ఇది ఆర్డునో నుండి శక్తిని పొందకూడదు . అందుకే మాకు రెండు వేర్వేరు విద్యుత్ వనరులు అవసరం.

మైక్రో సర్వో మోటార్లు 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------------------------//

అది రిసీవర్‌ను ముగించింది.

ఈ ప్రాజెక్ట్ను ఎలా ఆపరేట్ చేయాలి:

The సర్క్యూట్ రెండింటికి శక్తినివ్వండి.
• ఇప్పుడు పొటెన్షియోమీటర్ నాబ్‌లో ఏదైనా తిప్పండి.
2nd ఉదాహరణకు 3 వ పొటెన్షియోమీటర్, రిసీవర్ వద్ద సంబంధిత సర్వో తిరుగుతుంది.
• ఇది అన్ని సర్వో మోటార్లు మరియు పొటెన్షియోమీటర్లకు వర్తిస్తుంది.

గమనిక: మీరు ట్రాన్స్‌మిటర్‌ను కంప్యూటర్‌కు కనెక్ట్ చేయవచ్చు మరియు సర్వో మోటర్ యొక్క కోణం, అనలాగ్ పిన్ వద్ద వోల్టేజ్ స్థాయి మరియు ప్రస్తుతం ఏ పొటెన్షియోమీటర్ పనిచేస్తున్నారు వంటి డేటాను చూడటానికి సీరియల్ మానిటర్‌ను తెరవవచ్చు.

ఈ ఆర్డునో ఆధారిత వైర్‌లెస్ సర్వో మోటార్ ప్రాజెక్ట్‌కు సంబంధించి మీకు ఏదైనా నిర్దిష్ట ప్రశ్న ఉంటే, దయచేసి వ్యాఖ్య విభాగంలో వ్యక్తీకరించండి మీకు శీఘ్ర ప్రతిస్పందన లభిస్తుంది.




మునుపటి: మెయిన్స్ 220 విలో 200, 600 ఎల్ఈడి స్ట్రింగ్ సర్క్యూట్ తర్వాత: బ్యాక్ ఇఎంఎఫ్ ఉపయోగించి హై కరెంట్ సెన్సార్లెస్ బిఎల్‌డిసి మోటార్ కంట్రోలర్