Ako ovládať servomotor pomocou joysticku

Vyskúšajte Náš Nástroj Na Odstránenie Problémov





V tomto príspevku sa naučíme, ako ovládať servomotory pomocou joysticku a Arduina. Uvidíme prehľad joysticku, jeho kolíkov, jeho konštrukcie a fungovania. Budeme extrahovať užitočné údaje z joysticku, ktorý bude základom pre ovládanie servomotorov.

Úvod

Mottom tohto článku nie je iba to ovládať servomotory ale, naučiť sa používať a joystick na ovládanie mnoho ďalších periférnych zariadení.



Teraz sa pozrime na joystick.

Joystick je vstupné zariadenie, ktoré sa skladá z páky, ktorá sa môže pohybovať v niekoľkých smeroch v osiach X a Y. Pohyb páky sa používa na ovládanie motora alebo iných periférnych elektronických zariadení.



Joysticky sa používajú od RC hračiek po lietadlá Boing a vykonávajú podobné funkcie. Ďalej hry a menšie joysticky majú tlačidlo v osi Z, ktoré je možné naprogramovať na vykonávanie mnohých užitočných akcií.

Ilustrácia joysticku:

Ilustrácia joysticku:

Joysticky sú vo všeobecnosti elektronické zariadenia, takže musíme napájať. Pohyb páky vyvoláva rozdiel napätia na výstupných kolíkoch. Úrovne napätia sú spracovávané mikrokontrolérom na riadenie výstupného zariadenia, napríklad motora.

Podobný je aj ilustrovaný joystick, ktorý sa nachádza v ovládačoch PlayStation a Xbox. Ak chcete jeden zachrániť, nemusíte tieto ovládače rozbiť. Tieto moduly sú ľahko dostupné v miestnych elektronických obchodoch a na stránkach elektronického obchodu.

Teraz sa pozrime na konštrukciu tohto joysticku.

Má dva 10 kilo ohmov potenciometer umiestnený v osiach X a Y s pružinami tak, aby sa vrátil do svojej pôvodnej polohy, keď používateľ uvoľní silu z páky. Má tlačidlo push to ON na osi Z.

Má 5 pinov, 5 voltov Vcc, GND, premennú X, premennú Y a SW (spínač osi ​​Z). Keď sme pripojili napätie a joystick sme nechali v pôvodnej polohe páky. Kolíky X a Y budú produkovať polovicu aplikovaného napätia.

Keď pohneme páčkou, napätie sa líši vo výstupných kolíkoch X a Y. Teraz poďme prakticky prepojiť joystick na Arduino.

Schematický diagram:

Ovládanie servomotora Arduino pomocou joysticku

Podrobnosti o pripojení kolíkom sú uvedené vedľa obvodu. Pripojte dokončené nastavenie hardvéru 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--------------//

Otvorte Sériový monitor a uvidíte úroveň napätia na kolíkoch osí X a Y a stav osi Z, t. J. Tlačidlo, ako je znázornené nižšie.

Tieto hodnoty osí X, Y, Z sa používajú na interpretáciu polohy páky. Ako vidíte, hodnoty sú od 0 do 1023.

Je to preto, že Arduino má zabudovaný prevodník ADC, ktorý prevádza napätie 0V - 5V na hodnoty 0 až 1023.

Zo sériového monitora môžete vidieť, že keď je páka nedotknutá, zostáva v strednej polohe oboch osí X a Y a vykazuje polovičnú hodnotu 1023.

Môžete tiež vidieť, že to nie je presná polovica z 1023, pretože výroba týchto joystickov nikdy nebola dokonalá.

Teraz by ste už mali nejaké technické znalosti o joystickoch.

Teraz sa pozrime, ako ovládať dva servomotory pomocou jedného joysticku.

Schéma zapojenia:

Dva servomotory sú ovládané jedným joystickom, keď pohybujete joystickom pozdĺž osi X, servo pripojené na kolíku # 7 sa pohybuje v smere hodinových ručičiek a proti smeru hodinových ručičiek v závislosti od polohy páky.

Servomotor môžete tiež držať v polohe, ak držíte úroveň joysticku v konkrétnej polohe.

Podobne ako u servomotora pripojeného na kolíku č. 6 môžete páku posúvať pozdĺž osi Y.

Keď stlačíte páčku pozdĺž osi Z, obidva motory vykonajú stáčanie o 180 stupňov.

Môžete buď pripojiť arduino k 9v batéria alebo do počítača. Ak pripojíte Arduino k počítaču, môžete otvoriť sériový monitor a pozrieť sa na uhol servopohonov a úrovne napätia.

Program pre riadenie servomotora:

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

Ak máte nejaké konkrétne otázky týkajúce sa tohto projektu, neváhajte ich vyjadriť v sekcii komentárov, môžete dostať rýchlu odpoveď.




Dvojica: Obvod merača digitálnej kapacity pomocou Arduina Ďalej: Použitie digitálneho potenciometra MCP41xx s Arduino