Tartalomjegyzék:

28BYJ-48 léptetőmotor szögletes helyzetvezérlése Arduino és analóg joystick-kal: 3 lépés
28BYJ-48 léptetőmotor szögletes helyzetvezérlése Arduino és analóg joystick-kal: 3 lépés

Videó: 28BYJ-48 léptetőmotor szögletes helyzetvezérlése Arduino és analóg joystick-kal: 3 lépés

Videó: 28BYJ-48 léptetőmotor szögletes helyzetvezérlése Arduino és analóg joystick-kal: 3 lépés
Videó: Использование кнопки скорости шагового двигателя 28BYJ-48 с 8 проектами: Ultimate Video Tutorial, урок 107 2024, November
Anonim
28BYJ-48 léptetőmotor szögpozíció-vezérlése Arduino és analóg joystick segítségével
28BYJ-48 léptetőmotor szögpozíció-vezérlése Arduino és analóg joystick segítségével

Ez a 28BYJ-48 léptetőmotor vezérlési rendszere, amelyet az utolsó éves dolgozatom részeként fejlesztettem ki. Még nem láttam ilyet, ezért gondoltam, hogy felteszem, amit felfedeztem. Remélhetőleg ez másnak is segít!

A kód alapvetően lehetővé teszi, hogy a léptetőmotor "másolja" az analóg joystick szöghelyzetét, vagyis ha előre tolja a joystickot, a motor "észak" felé mutat. tolja a joystickot nyugat felé, a motor ugyanabba az irányba forog.

A megvalósításhoz megköveteltem, hogy ha a joystickot elengedik, azaz nincs szöghelyzete, a motor visszatér az "otthoni" irányba. Az otthoni irány kelet felé néz, és a motornak (vagy bérelve bármilyen mutatót / eszközt, amelyet a kimeneti tengelyhez csatlakoztatott!) Szintén be kell mutatnia ebbe az irányba, amikor be van kapcsolva.

Kellékek

Arduino Uno vagy hasonló

kenyérlap és jumper vezetékek kiválasztása (férfi -férfi, férfi -nő)

5V -os tápegység

Analóg joystick modul (ideális esetben egy pillanatnyi nyomógomb funkcióval, ez megkönnyíti az "otthoni" helyzet pihenését)

28BYJ-48 léptetőmotor és ULN2003 léptető

Toll, papír és blu-tac (vagy bármely más mutatóeszköz, amelyet a motorhoz rögzíthet!)

1. lépés: 1. lépés: Beállítás

Csatlakoztassa a léptetőmotort a léptetőhöz, és kösse össze a csapokat az alábbiak szerint:

IN1 - Arduino pin 8

IN2 - Arduino pin 9

IN3 - Arduino pin 10

IN4 - Arduino pin 11

Csatlakoztassa az 5 V -os tápegységet a kenyérszekrény tápcsöveihez, és az ULN2003 5 V -os bemeneteket a tápcsövekhez. csatlakoztassa a földsínt az Arduino földjéhez.

a joystickhoz az alábbiak szerint csatlakoztassa:

Kapcsolócsap - Arduino csap 2

X tengely - Arduino A0 (analóg 0 -ban)

Y tengely - Arduino A1

+5V - Arduino 5V kimenet

GND - Arduino GND

Végül csatlakoztassa a kenyeretábla talaját a másik Arduino GND csaphoz

2. lépés: 2. lépés: A kód magyarázata

Mellékeltem a teljes Arduino kódot, amelyet letölthet és használhat. De mindent megteszek, hogy elmagyarázzam az ide vonatkozó részeket.

Ennek a kódnak az elmélete az, hogy a joystick által elfoglalt helyet gráfra osztjuk, középen 0, 0. a joystick bemenetek azonban (kb.) 512 középpontban helyezkednek el a középpontban, így ennek leküzdésére két funkciót használunk az X és Y tengelyről leolvasott érték "nullázására". az Ön által használt tápegységtől függően előfordulhat, hogy módosítania kell a ZeroX és ZeroY funkciók értékeit, hogy a joystick nyugalmi állapotban megbízható 0 -t adjon.

Az X, Y értékek olvasásakor először radiánra konvertálják őket a math.h könyvtár atan2 () függvényével. Ennek a funkciónak a kifejtése kívül esik ezen utasításon, de kérjük, nézze meg - ez egy meglehetősen egyszerű geometriai trükk!

Végezetül, hogy megkönnyítsük azoknak az életét, akik régen nem fokokban, hanem fokokban dolgoztak, az atan2 () által számított rad értéket fokra konvertáljuk.

A ciklus tetején egy kis kódrészlet található, amely lehetővé teszi, hogy a joystick pillanatnyi gombjára kattintva mozgassa az "otthoni" helyet. Ez hihetetlenül hasznos volt a kód tesztelése során, de belehagytam, mert látom, hogyan lehet hasznos néhány esetben.

Most a kód fő tömege! először a joystick X, Y koordinátáit olvassuk be kétszer 10 ms késleltetéssel, majd ellenőrizzük, hogy megegyeznek -e - megállapítottam, hogy a joystick időnként szórványos leolvasást eredményez, és ez az enyhe késleltetés elegendő volt ahhoz, hogy megállítsa a motor forgását ezek alapján. Ez is elég rövid késés, hogy úgy tűnik, hogy nem zavarja a szándékos bemeneteket.

A kód többi része meglehetősen magától értetődő, és mindent megtettem, hogy dokumentáljam; Egy sor IF utasítás összehasonlítja az aktuális joystick szöget a motor szögével, és mozgatja a motort erre a szögre. A 28BYJ-48 fokonként 5,689 lépést tartalmaz, ezért a szükséges mozgást megszorozzuk ezzel a páratlannak tűnő számmal!

A kód egyik része, amely a legtöbb magyarázatot igényli, az, amit "burkoló esetnek" neveztem. Még abban az esetben is, amikor a joystick és a motor pl. +175 °, és a joystick ezt követően -175 ° -ra mozdult el (a joystickon csak 10 ° -os elmozdulás, északról nyugatra nyugatra délnyugatra), a motor 350 ° -kal elmozdul a ROSSZ IRÁNYBAN! ennek elszámolására a különleges esetet írták.

A burkoló eset azzal kezdődik, hogy ellenőrzi, hogy a motor és a joystick ellentétes jelekkel rendelkezik -e, azaz a motor pozitív, a joystick negatív, vagy fordítva. Azt is ellenőrzi, hogy a joystick és a motor abszolút értékének (azaz pozitív értékeinek) összege 180 ° felett van -e.

Ha mindkét állítás igaz, akkor a függvény ellenőrzi, hogy a motornak az óramutató járásával megegyező irányba kell -e mozognia (a motor értéke negatív) vagy az óramutató járásával ellentétes irányba (ha a motor értéke pozitív).

A motor szögének és a joystick szögének abszolút értékeit összeadjuk, és 360 ° -ból kivonjuk, hogy meghatározzuk a mozgást. Végül a motor szöge (amely most a joystick szögét tükrözi) frissül.

3. lépés: VÉGE

Tehát nincs más hátra, mint feltölteni a kódot az Arduino -ra, és futtatni! Tekintse meg a fenti videót, hogy jó ötletet kapjon a projekt működéséről. Ez hasznos lehet a kardántengelyek, a robotkarok és sok más alkalmazás esetén!

Ha használja a kódot, kérjük, tudassa velem, és ha lát olyan helyet, ahol a kód javítható, szívesen várom visszajelzését.

Ajánlott: