Jak ovládat servomotor pomocí joysticku

Vyzkoušejte Náš Nástroj Pro Odstranění Problémů





V tomto příspěvku se naučíme ovládat servomotory pomocí joysticku a Arduina. Uvidíme přehled joysticku, jeho kolíků, jeho konstrukce a fungování. Budeme extrahovat užitečná data z joysticku, který bude základem pro ovládání servomotorů.

Úvod

Mottem tohoto článku není jen to ovládat servomotory ale naučit se používat a joystick pro ovládání mnoho dalších periferních zařízení.



Nyní se podívejme na joystick.

Joystick je vstupní zařízení, které se skládá z páky, která se může pohybovat v několika směrech v osách X a Y. Pohyb páky se používá k ovládání motoru nebo jakýchkoli periferních elektronických zařízení.



Joysticky se používají od RC hraček po letadla Boing a plní podobné funkce. Navíc hry a menší joysticky mají tlačítko v ose Z, které lze naprogramovat tak, aby provádělo mnoho užitečných akcí.

Ilustrace joysticku:

Ilustrace joysticku:

Joysticky jsou obecně elektronická zařízení, takže musíme používat energii. Pohyb páky vytváří rozdíl napětí na výstupních kolících. Úrovně napětí jsou zpracovávány mikrokontrolérem pro ovládání výstupního zařízení, jako je motor.

Ilustrovaný joystick je podobný, který lze najít v řadičích PlayStation a Xbox. Není nutné tyto ovladače prolomit, abyste jeden zachránili. Tyto moduly jsou snadno dostupné v místních elektronických obchodech a na stránkách elektronického obchodování.

Nyní se podívejme na konstrukci tohoto joysticku.

Má dva 10 kiloohmů potenciometr umístěn v osách X a Y s pružinami, takže se vrátí do své původní polohy, když uživatel uvolní sílu z páky. Má tlačítko push to ON na ose Z.

Má 5 pinů, 5 voltů Vcc, GND, proměnnou X, proměnnou Y a SW (spínač osy Z). Když jsme připojili napětí a nechali joystick v původní poloze páky. Kolíky X a Y budou produkovat polovinu aplikovaného napětí.

Když pohneme pákou, napětí se mění ve výstupních pinech X a Y. Nyní pojďme prakticky propojit joystick s Arduinem.

Schematický diagram:

Ovládání servomotoru Arduino pomocí joysticku

Podrobnosti o připojení kolíků jsou uvedeny vedle obvodu. Připojte dokončené nastavení hardwaru a nahrajte kód.

Program:

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

Otevřete sériový monitor a uvidíte úroveň napětí na pinech os X a Y a stav osy Z, tj. Tlačítko, jak je znázorněno níže.

Tyto hodnoty os X, Y, Z se používají k interpretaci polohy páky. Jak vidíte, hodnoty jsou od 0 do 1023.

Je to proto, že Arduino má zabudovaný ADC převodník, který převádí napětí 0V - 5V na hodnoty 0 až 1023.

Ze sériového monitoru můžete být svědky toho, že pokud je páka nedotčena, zůstává páka ve střední poloze os X i Y a vykazuje poloviční hodnotu 1023.

Můžete také vidět, že to není přesná polovina z 1023, protože výroba těchto joysticků nikdy nebyla dokonalá.

Nyní byste už měli nějaké technické znalosti o joystickech.

Nyní se podívejme, jak ovládat dva servomotory pomocí jednoho joysticku.

Kruhový diagram:

Dva servomotory jsou ovládány jedním joystickem, když pohybujete joystickem podél osy X, servo připojené na kolíku # 7 se pohybuje ve směru hodinových ručiček a proti směru hodinových ručiček v závislosti na poloze páky.

Servopohon můžete také držet v určité poloze, pokud držíte úroveň joysticku v určité poloze.

Podobně jako u servomotoru připojeného na kolíku č. 6 můžete pákou pohybovat podél osy Y.

Když stisknete páku podél osy Z, oba motory provedou o 180 stupňů.

Můžete buď připojit arduino k 9v baterie nebo do počítače. Pokud připojíte Arduino k počítači, můžete otevřít sériový monitor a sledovat úhel servopohonů a úrovně napětí.

Program pro ovládání servomotoru:

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

Pokud máte ohledně tohoto projektu jakékoli konkrétní dotazy, neváhejte je vyjádřit v sekci komentářů, můžete obdržet rychlou odpověď.




Předchozí: Obvod digitálního kapacitního měřiče pomocí Arduina Další: Použití digitálního potenciometru MCP41xx s Arduino