Бежична контрола серво мотора помоћу комуникационе везе од 2,4 ГХз

Испробајте Наш Инструмент За Елиминисање Проблема





У овом посту ћемо конструисати бежични склоп серво мотора који може бежично управљати 6 серво мотора на комуникационој вези од 2,4 ГХз.



Увод

Пројекат је подељен на два дела: предајник са 6 потенциометра и пријемнички круг са 6 серво мотори .

Даљински управљач има 6 потенциометра за независно управљање 6 појединачних серво мотора на пријемнику. Ротирањем потенциометра, угао серво мотором се може управљати .



Предложени круг се може користити тамо где вам је потребно контролисано кретање, на пример рука робота или контрола смера предњег точка РЦ аутомобила.

Срце кола је НРФ24Л01 модул који је примопредајник који ради на ИСМ опсегу (индустријски, научни и медицински опсег), то је исти опсег фреквенција као и ваш ВИ-ФИ.

Илустрација модула НРФ24Л01:

Има 125 канала, максималну брзину преноса података од 2МБпс и теоретски максимални домет од 100 метара. За успостављање комуникационе везе требат ће вам два таква модула.

Конфигурација пин-а:

Ради на СПИ комуникацијском протоколу. Морате повезати 7 од 8 пинова на Ардуино да би овај модул функционисао.

Ради на 3.3 В, а 5 В убија модул, тако да морате бити опрезни док напајате. Срећом имамо Ардуино регулатор напона од 3.3В и он се мора напајати само из 3.3В Ардуино утичнице.

Сада пређимо на коло предајника.

Круг предајника:

Коло се састоји од 6 потенциометра вредности 10К охма. Средњи терминал 6 потенциометра повезан је на аналогне улазне пинове А0 до А5.

Табела је дата поред шеме за везу НРФ24Л01 са Ардуино на коју се можете позвати ако имате било какве забуне у дијаграму кола.

Овај круг се може напајати из УСБ или 9В батерије путем једносмерне утичнице.

Преузмите датотеку библиотеке овде: гитхуб.цом/нРФ24/

Програм за предајник:

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

То закључује пријемник.

Како водити овај пројекат:

• Напајајте оба кола.
• Сада окрените било који тастер потенциометра.
• На пример, 3. потенциометар, одговарајући серво на пријемнику се окреће.
• Ово се односи на све серво моторе и потенциометре.

Напомена: Предајник можете повезати са рачунаром и отворити серијски монитор да бисте видели податке као што су угао серво мотора, ниво напона на аналогном пину и који потенциометар тренутно ради.

Ако имате било каквих конкретних питања у вези са овим пројектом бежичног серво мотора заснован на Ардуину, изразите у одељку за коментаре да ћете можда добити брз одговор.




Претходно: 200, 600 ЛЕД струјних кругова на мрежи 220В Следеће: БЛДЦ контролер мотора без јаке струје који користи задњи ЕМФ