Arduino DC Motor Vezérlés: Az Alapoktól a Gyakorlati Példákig
Ebben a rövid projektben bemutatjuk neked, hogyan tudsz vezérelni, irányítani a DC motorokat Arduino segítségével. Az Arduino kiválóan alkalmas az elektronika és a programozás megismerésére mindazok számára, akik érdeklődnek iránta. A DC motorok talán a legelterjedtebben alkalmazott eszközök a különböző robotikai projektekben.
A DC Motor Vezérlés Alapjai: PWM és H-híd
Mindezek előtt egy kis elmélettel fogjuk kezdeni, hogy elsajátítsátok és megértsétek, hogyan is működik a DC motor. Egy DC motor sebességét/fordulatszámát egyszerűen szabályozhatjuk úgy, hogy a bemenetén változtatjuk a bemeneti feszültséget, valamint PWM jel segítségével.
Mi az a PWM jel?
A PWM (Pulse Width Modulation) vagy másképp nevezve impulzus szélesség moduláció olyan technika, amely lehetővé teszi számunkra, hogy az elektromos eszközhöz tartozó feszültség átlagértékét gyors sebességgel bekapcsolva és kikapcsolva állítsuk be.
H-híd a forgásirány szabályozásához
Másrészről a forgásirány szabályozásához csak a motoron át vezetett áram irányát kell megváltoztatnunk, és ennek leggyakoribb módja a H-híd használata. A H-Bridge-áramkör négy kapcsolóelemet, tranzisztort vagy MOSFET-et tartalmaz. Tehát, ha ezt a két metódust (PWM, H-híd) kombinálni tudjuk, akkor teljes uralmunk lesz a DC motor felett.
L298N Motorvezérlő - Részletes Áttekintés
Számos DC motor vezérlő van, amelyek rendelkeznek ezen képességekkel, mint például az L298N típusú motorvezérlő. Az L298N egy dual H-hidas motorvezérlő, amely lehetővé tesz 2 db DC motor vezérlését (sebesség, forgásirány) egy időben. A vezérlő képes a DC motorokat 5V -35V feszültségig kezelni 2A-es csúcsáram mellett.
Relé vezérlés Arduino segítségével
L298N Pin Kivezetések és Tápellátás
Nézzük is meg közelebbről a pin kivezetéseket az L298N típusú motorvezérlőnek. A modul két csavaros sorkapoccsal rendelkezik, amelyek a két motor (Motor A, Motor B) vezérléséhez szolgál. A további 3-as sorkapocs pedig a GND, a VCC és egy 5V-os pin, amely lehet be- és kimenet is. Ez a motor VCC feszültségétől függ.
A modul rendelkezik egy 5V-os szabályozóval, amelyet egy jumperrel tudunk be, illetve kikapcsolni. Ha a motor megtáplálása 12V-ig terjed, akkor az 5V-os szabályozót a jumperrel engedélyezve az 5V-os kimenet használható például az Arduino megtáplálására. Azonban ha a motor meghaladja a 12V-ot, akkor a jumpert el kell távolítani, mert ezek a nagyobb feszültségek károsíthatják az 5V-os szabályozót. Ebben az esetben az 5V-os pint bemenetként kell használni és megtáplálni egy 5V-os tápegységgel, hogy az IC megfelelően tudjon működni.
Itt meg kell, hogy említsem, hogy ez az IC 2V-os feszültség csökkenést okoz. Például, ha 12V-os tápegységet használunk, a motor csatlakozóinak feszültsége kb. 10V lesz, ami annyit jelent, hogy a 12V-os egyenáramú motor nem tud maximális sebességet elérni.
Sebesség és Irányítás
- Az „Enable A” és „Enable B” pinek teszik lehetővé, hogy használjuk a megfelelő oldali motort és annak sebességét változtatni tudjuk.
- Ha a jumper az ENA vagy ENB-n használva van, akkor a motor a maximális sebességgel működik.
- Ha eltávolítjuk a jumpert, akkor PWM jelet csatlakoztatva ehhez a pinhez szabályozhatjuk a motort.
- Ha leföldeljük ezt a pint, akkor a motor le van tiltva.
Az IN1 és IN2 bemenetek az „A” motor forgásirányáért felelős pinek, míg az IN3 és IN4 a „B” motoré. Ezek a pinek valójában az L298N IC belsejében lévő H-híd kapcsolóinak az irányítására használjuk. Ha az IN1 LOW és az IN2 HIGH értéket kap, akkor a motor előre halad és fordítva. Ha az IN1 HIGH és az IN2 LOW, akkor pedig visszafelé forog. Ha mindkét pin értéke azonos, tehát IN1-2= LOW vagy IN1-2 = HIGH, akkor a motor megáll. Ugyanez vonatkozik az IN3 és IN4 bemenetekre a „B” motor esetében.
Gyakorlati Példa L298N-nel
Most pedig készítsük el az első gyakorlati példát. Ebben a gyakorlatban egy potenciométerrel vezéreljük a motor sebességét és egy nyomógomb segítségével tudjuk változtatni a forgás irányát.
Motorfelni tudnivalók BMW tulajoknak
int pwmOutput = map(potValue, 0, 1023, 0 , 255); // Felosztja a 0-1023 tartományt 0-255 tartományra.analogWrite(enA, pwmOutput); // PWM jelet küld az L298N EN pinjére.
Adafruit Motorshield v2 - A Fejlett Megoldás
A Motorshield kit egyike a legkedveltebb Adafruit készleteknek, így a cégnél az eredeti verzió fejlesztése mellett döntöttek. A javított panel (v2) a DC és a léptető motorok még könnyebb, még egyszerűbb működtetését teszi lehetővé, kiváló alap bármilyen robotikai projekthez.
A panel alaptulajdonsága, a 4 db DC motor és a 2 db léptetőmotor vezérlése. Az eredeti L293 darlington meghajtót a TB6612 mosfet vezérlő váltotta fel, ami 1,2A-t (csúcsban, rövid időre, kb. 3A) képes leadni. A vezérlő panel maximálisan négy darab DC motor vezérlésére alkalmas, mindkét forgási irányban.
Jellemzők és Kompatibilitás
- 4 H-híd: TB6612-es lapkakészlet, 1,2A állandósult, 3A (20ms) csúcsterhelhetőség mellett, beépített hővédelem, illetve önindukciós hatást védő diódák.
- 4 db. kétirányú DC motor, 8-bites sebesség beállítási lehetőség motoronként.
- Fontos adat, hogy a motorvezérlő panel 5V-12V közötti tápfeszültséggel működő motorokhoz készült.
- A panel vezérlő chip-jei motoronként 1,2A-t szolgáltatnak, rövid időre, csúcsértékben (20msec) 3A leadására képesek.
- Kompatibilitás: Arduino UNO, Leonardo, ADK/Mega R3, Diecimila és Duemilanove típusokkal. Moduláris felépítés, a választható címzésnek köszönhetően (5bit) akár 32db pajzs is használható. Due 3.3v-ra jumperelve.
- Ahhoz, hogy az eszközt használni tudjuk, telepítenünk kell a szükséges library-t.
DC Motor Vezérlés L293D-vel és Infravörös Érzékelővel (IRFL Projekt)
Nem csatlakoztathatod közvetlenül a motort az Arduino bármely portjához, mert a motorok nagyobb áramot vonnak, és az Arduino megégne ezen áramtól. Ezért használunk egy köztes chipet, az L293D-t. Fontos megjegyezni, hogy ha kettőnél több motort csatlakoztatunk, az IC megéghet.
Hogyan vezéreljünk szervomotort és infravörös érzékelő modult Arduino Uno R3 segítségével || Szervomotor || IR érzékelő ||
Az alábbi lépésben a HIGH és LOW az ON és OFF-ra utal. Az Arduino a HIGH és LOW utasításokat támogatja a nyelvében. Összehasonlíthatod ezeket az utasításokat a programmal.
Kapcsolási rajz és programozás
Az érzékelő nem tudja, mit tegyen, amikor észleli a kezünket. Csupán tájékoztatja az Arduinót, hogy észlelt egy tárgyat előtte. Ennek alapján az Arduino programja leállítja a motort. Íme egy leírás egy motor vezérléséhez Arduino és IR szenzor segítségével:
V70 tanksapka ajtó motor javítás
- Pin 3 az Arduinóból csatlakoztatva az L293 pin 2-höz.
- Pin 4 az Arduinóból csatlakoztatva az L293 pin 7-hez. (Ha a pin3 HIGH és a pin4 LOW, a motor egy irányba forog. Ha a pin3 LOW és a pin4 HIGH, a motor fordított irányba forog. Ha mindkét pin azonos (LOW vagy HIGH), a motor megáll.)
- Pin 9 az Arduinóból csatlakoztatva az L293 pin 1-hez. (Ez a pin mindig HIGH kell, hogy legyen. Ha le akarod állítani a motort, LOW-ra állíthatod ezt a pint.)
- Az L293-ban csatlakoztassa a 4,5,12,13 pineket a földre.
- Az L293-ban csatlakoztassa a 16-os pint 5V-hoz (az Arduinóról is táplálható).
- Az L293-ban adja meg a motorhoz szükséges feszültséget a 8-as pinnek, és csatlakoztassa az IR szenzor kimenetét az Arduino A0 pinjére.
Példa kód L293D-vel és IR szenzorral
const int switchPin = 2; // switch inputconst int motor1Pin = 3; // H-bridge leg 1 (pin 2, 1A)const int motor2Pin = 4; // H-bridge leg 2 (pin 7, 2A)const int enablePin = 9; // H-bridge enable pinvoid setup() { pinMode(switchPin, INPUT); pinMode(12, OUTPUT); pinMode(A0, INPUT); pinMode(motor1Pin, OUTPUT); pinMode(motor2Pin, OUTPUT); pinMode(enablePin, OUTPUT); digitalWrite(enablePin, HIGH);}void loop() { if (analogRead(A0) > 0) { digitalWrite(motor2Pin, LOW); digitalWrite(motor1Pin, LOW); } else { digitalWrite(motor1Pin, HIGH); digitalWrite(motor2Pin, LOW); }}Ez volt az első projektem, és lehetnek benne hibák.
Tápellátási Megoldások
Ha a tápellátást egy 6-12V DC kimenetű fali adapterrel vagy elem-csomaggal (battery pack) akarjuk megoldani, akkor egyszerűen csatlakoztassuk az adaptert az Arduino táp-csatlakozójába, vagy a táp-sorkapocsba és használjuk a jumper rövidzárat. Az Arduino az USB csatlakozóján, a motorok a sorkapcson keresztül kapnak tápellátást. Ebben az esetben ne alkalmazzuk a jumper rövidzárat!
A másik függetlenített tápellátási megoldás, ha az Arduino az ún. DC barrel jack-en (a hengeres tápcsatlakozó) keresztül, a motorok pedig a sorkapcson keresztül kapnak ellátást.
Egyéb Motorok: Léptető és Szervo motorok
A léptető motorok gyakori alkatrészei a különböző robotikai, illetve CNC projekteknek.
TMC2209 Bipoláris Mikrolépéses Léptetőmotor Vezérlő
A TMC2209 léptetőmotor-vezérlő kiemelkedő teljesítményt nyújt csendes működés és nagy hatékonyság mellett. Az intelligens áramvezérlésnek és a StealthChop2 technológiának köszönhetően minimalizálja a zajt és a rezgéseket, így ideális 3D nyomtatókhoz és precíziós automatizálási rendszerekhez.
Hobby Szervó Motorok
A kis méretű, ún. hobby szervók használata nagyon egyszerű. Kössük őket a panel háromtűs csatlakozójának valamelyikére és már indítható is a program. A panel az Arduino 9-es, illetve 10-es kimenetét használja a szervók működtetésére, programunkban ezekre a lábakra hivatkozzunk! Amennyiben külső tápellátás szükséges, vágjuk át a tápvonalat a panel hátoldalán, és a szervókat az Opt Servo feliratú jumperen keresztül lássuk el tápfeszültséggel.