Како управљати серво мотором помоћу џојстика

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





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

Увод

Мото овог чланка није само да управљајте серво моторима али, да бисте научили како да користите а џојстик за контролу многи други периферни уређаји.



Сада да погледамо џојстик.

Џојстик је улазни уређај који се састоји од полуге која се може кретати у више праваца у Кс и И оси. Кретање ручице користи се за управљање мотором или било којим периферним електронским уређајима.



Џојстици се користе од РЦ играчака до авиона компаније Боинг и обављају сличне функције. Поред тога, игре и мањи штапови за управљање имају дугме у З оси које се може програмирати за извршавање многих корисних радњи.

Илустрација џојстика:

Илустрација џојстика:

Џојстики су уопште електронски уређаји, зато морамо да применимо снагу. Кретање полуге ствара разлику напона на излазним пиновима. Нивои напона обрађују се помоћу микроконтролера за управљање излазним уређајем као што је мотор.

Илустровани џојстик је сличан оном који се може наћи у ПлаиСтатион и Ксбок контролерима. Не требате сломити ове контролере да бисте их спасили. Ови модули су лако доступни у локалним електронским продавницама и на веб локацијама е-трговине.

Сада да видимо конструкцију овог џојстика.

Има два 10 кило охма потенциометар позициониран у Кс и И оси са опругама тако да се враћа у првобитни положај када корисник отпусти силу из ручице. Има тастер за укључивање на З оси.

Има 5 пинова, 5 волт Вцц, ГНД, променљиву Кс, променљиву И и СВ (прекидач З осе). Када применимо напон и оставимо џојстик у првобитном положају ручице. Осовине Кс и И произвешће половину примењеног напона.

Када померимо ручицу, напон варира у Кс и И излазним пиновима. Сада практично повежимо џојстик са Ардуином.

Шематски приказ:

Ардуино серво управљање мотором помоћу џојстика

Детаљи о пин контакту дати су поред кола. Повежите завршено подешавање хардвера и отпремите код.

Програм:

//---------------Program Developed by R.Girish--------------//
int X_axis = A0
int Y_axis = A1
int Z_axis = 2
int x = 0
int y = 0
int z = 0
void setup()
{
Serial.begin(9600)
pinMode(X_axis, INPUT)
pinMode(Y_axis, INPUT)
pinMode(Z_axis, INPUT)
digitalWrite(Z_axis, HIGH)
}
void loop()
{
x = analogRead(X_axis)
y = analogRead(Y_axis)
z = digitalRead(Z_axis)
Serial.print('X axis = ')
Serial.println(x)
Serial.print('Y axis = ')
Serial.println(y)
Serial.print('Z axis = ')
if(z == HIGH)
{
Serial.println('Button not Pressed')
}
else
{
Serial.println('Button Pressed')
}
Serial.println('----------------------------')
delay(500)
}
//---------------Program Developed by R.Girish--------------//

Отворите серијски монитор можете видети ниво напона на клиновима Кс и И осе и статус З осе, тј. Тастера као што је приказано доле.

Ове вредности оси Кс, И, З користе се за тумачење положаја ручице. Као што видите вредности су од 0 до 1023.

То је зато што је Ардуино уградио АДЦ претварач који претвара напон 0В - 5В у вредности од 0 до 1023.

Са серијског монитора можете бити сведоци да када ручица остане нетакнута, полуга остаје у средњем положају и Кс и И осе и показује половину вредности 1023.

Такође можете видети да није тачно половина 1023-е то зато што производња ових џојстика никада није била савршена.

До сада бисте стекли неко техничко знање о џојстику.

Сада да видимо како да управљамо два серво мотора помоћу једног џојстика.

Кружни дијаграм:

Два серво-мотора контролише се једним џојстиком када померате џојстик дуж Кс осе, серво повезан на иглу # 7 се креће у смеру кретања казаљке на сату и у смеру супротном од сата у зависности од положаја ручице.

Серво актуатор такође можете држати у положају ако држите ниво џојстика у одређеном положају.

Слично као код серво мотора спојеног на пин # 6, ручицу можете померати дуж И осе.

Када притиснете ручицу дуж З осе, два мотора ће извршити померање за 180 степени.

Можете или да повежете ардуино са 9в батерија или на рачунар. Ако Ардуино повежете са рачунаром, можете отворити серијски монитор и видети угао серво покретача и нивое напона.

Програм за управљање серво мотором:

//---------------Program Developed by R.Girish--------------//
#include
Servo servo_X
Servo servo_Y
int X_angleValue = 0
int Y_angleValue = 0
int X_axis = A0
int Y_axis = A1
int Z_axis = 2
int x = 0
int y = 0
int z = 0
int pos = 0
int check1 = 0
int check2 = 0
int threshold = 10
void setup()
{
Serial.begin(9600)
servo_X.attach(7)
servo_Y.attach(6)
pinMode(X_axis, INPUT)
pinMode(Y_axis, INPUT)
pinMode(Z_axis, INPUT)
digitalWrite(Z_axis, HIGH)
}
void loop()
{
x = analogRead(X_axis)
y = analogRead(Y_axis)
z = digitalRead(Z_axis)
if(z == LOW)
{
Serial.print('Z axis status = ')
Serial.println('Button Pressed')
Serial.println('Sweeping servo actuators')
for (pos = 0 pos <= 180 pos += 1)
{
servo_X.write(pos)
delay(10)
}
for (pos = 180 pos >= 0 pos -= 1)
{
servo_X.write(pos)
delay(15)
}
for (pos = 0 pos <= 180 pos += 1)
{
servo_Y.write(pos)
delay(10)
}
for (pos = 180 pos >= 0 pos -= 1)
{
servo_Y.write(pos)
delay(15)
}
Serial.println('Done!!!')
}
if(x > check1 + threshold || x {
X_angleValue = map(x, 0, 1023, 0, 180)
servo_X.write(X_angleValue)
check1 = x
Serial.print('X axis voltage level = ')
Serial.println(x)
Serial.print('X axis servo motor angle = ')
Serial.print(X_angleValue)
Serial.println(' degree')
Serial.println('------------------------------------------')
}
if(y > check2 + threshold || y {
Y_angleValue = map(y, 0, 1023, 0, 180)
servo_Y.write(Y_angleValue)
check2 = y
Serial.print('Y axis voltage level = ')
Serial.println(y)
Serial.print('Y axis servo motor angle = ')
Serial.print(Y_angleValue)
Serial.println(' degree')
Serial.println('------------------------------------------')
}
}
//---------------Program Developed by R.Girish--------------//

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




Претходно: Круг дигиталног мерача капацитивности помоћу Ардуина Следеће: Коришћење дигиталног потенциометра МЦП41кк са Ардуином