Lektorált tananyag, ami a BKF Digitális és Kollaboratív Művészet (DIKOM) pályázatnak keretén belül valósult meg.
Szerző: Harsányi Réka, Társszerző: Juhász Márton András, Lektor: Fernezelyi Márton
Servo könyvtár
A szervomotorok olyan aktuátorok, melyek a visszacsatolás elvén működnek. A legegyszerűbb esetben a szervo tengelyét elfordító motor egy áttételen keresztül egy potmétert is elforgat, ami egy komparátor áramkör egyik bemenetéhez kapcsolódik. A komparátor egyszerű analóg integrált áramkör, amit legegyszerűbben úgy képzelhetünk el, mint egy mérleget. A szervo esetében a „mérleg” egyik oldalán a potméter – és így a tengely – állapota, a másik oldalán a szervo bemenetére adott feszültségszint a „súly”, a „mérleg nyelve” pedig a motor elfordulási irányát és erejét reprezentálja. Ily módon meghatározott feszültségszinteknek megfeleltethetők a motortengely állásának szögei. A Servo könyvtárral az Arduino PWM képes kimeneteit felhasználva, a csatlakoztatott szervomotorokat az elfordulás szögének megadásával irányíthatjuk. Miután a potméter nem képes a körbeforgásra, a megadható szögek 0 és 180 fok közé esnek és mindig egész számok.
Szervomotor szerkezete
(A bonyolultabb felépítésű szervomotorok komparátor helyett digitális jelfeldolgozást is végeznek. A potméter szerepét optikai vagy mágneses kódtárcsa váltja fel és a kommunikáció a motorral digitális buszon zajlik.) Hobbi és modellezési célra három méretben szabványosították a szervokat. Alaptípusaikat tekintve megkülönböztetünk nagy nyomatékú és nagy sebességű motorokat. Mindegyikre jellemző, hogy három vezeték tartozik hozzájuk: föld (barna/fekete), táp (piros) és vezérlés (narancs/fehér).
Amire szükség lesz:
- Arduino,
- hobbi szervomotor,
- 10 kiloohmos potméter.
Kapcsolás:
Kössük be a potméterünket feszültségosztóként, a közepét pedig az A0 analóg bemenetre. A szervomotor tápkábeleit az Arduino 5 V-os tápvezetékeihez, vezérlőkábelét a 9-es PWM kimenethez csatlakoztassuk.
Szervomotor és potméter bekötése
Arduino kód: 75szervo
attach()
Szervo objektumhoz fizikai csatlakozó címét köti.
Szintaxisa:
Servo.attach(pin),
Servo.attach(pin, min, max).
Paraméterei:
Servo: Servo típusú változó,
pin: a PWM képes kimenet, amire a motor vezérlését kötöttük,
min: a vezérlőimpulzus szélességének minimuma mikroszekundumokban kifejezve, alapállapotban 544 és ez feleltethető meg a motoron a 0 foknak. Opcionális finomhangolásra ad lehetőséget.
max: a vezérlőimpulzus szélességének maximuma, alapállapotban 2400 mikroszekundum.
write()
A megadott pozícióba mozgatja a szervomotort. Szabvány szervo esetén a megadott szögnek megfelelően mozdul el a motor tengelye. (Ha szétszedjük a szervomotort és a potméter helyére két egyforma értékű ellenállást teszünk, mintha a potméter mindig középen állna, akkor folyamatosan forgó mozgást végző motort fogunk kapni, aminek ez a parancs a sebességét fogja állítani. 180 esetén az egyik irányba forog teljes sebességgel, 0 esetén a másikba és 90-nél megáll.)
Szintaxisa:
Servo.write(val).
Paramétere:
Servo: Servo típusú változó,
val: a szög, ahová a motort fordítani szeretnénk.
writeMicroseconds()
Abban az esetben, ha precízebb mozgatásra van szükségünk, célszerű nem szögértékben megadni az elfordulás mértékét, hanem a vezérlő impulzus szélességét közvetlenül mikroszekundumokban. Ideális esetben 1000 körül az óramutató járásának megfelelő irányú végállapotot, 2000 körül az ellenkező végállapotot és 1500 körül a középső állapotot kellene jelentenie. Ez a gyakorlatban nem jellemző, valahol 700 és 2300 körüli értékek az irányadók.
Szintaxisa:
Servo.writeMicroseconds(val).
Paramétere:
Servo: Servo típusú változó,
val: impulzus szélessége mikroszekundumokban.
read()
Visszaadja a write() utasításnak legutoljára megadott értéket.
Szintaxisa:
Servo.read().
attached()
Megvizsgálja, hogy egy Servo objektumhoz kötöttünk-e fizikai csatlakozót. Bool típusú változót ad vissza.
Szintaxisa:
Servo.attached().
detach()
Megszünteti a Servo objektum fizikai címhez kötését.
Szintaxisa:
Servo.detach(pin).
Paraméterei:
Servo: Servo típusú változó,
pin: a PWM képes kimenet, amire a motor vezérlését kötöttük.
Stepper Motor könyvtár
A léptetőmotorok olyan egyenáramú motorok, amiknek az állórésze több elektromágnest tartalmaz. A tengelyen elhelyezett aktív mágnest (forgórész) az egymás után szekvenciálisan be-/kikapcsolt elektromágnesek kis lépésekben elfordítják. Jelentőségük az, hogy visszacsatolás nélkül nagy pontosságú és apró lépésekből álló forgómozgást lehet velük elérni. Két alaptípust különböztetünk meg az elektromágnesek tekercseinek kivezetései alapján. Az unipoláris motorok esetén minden tekercs egyik vége közös vezetékként hagyja el a motor burkolatát, míg a bipoláris motorok esetén a tekercsek kivezetései szabadon állnak.
Unipoláris léptetőmotor vázlatrajza
A tekercseket meghatározott rendben kell működtetni, hogy a felépülő mágneses tér négy lépésben fordítson a tengelyen:
lépés |
1 tekercs |
2 tekercs |
3 tekercs |
4 tekercs |
1 |
magas |
alacsony |
magas |
alacsony |
2 |
alacsony |
magas |
magas |
alacsony |
3 |
alacsony |
magas |
alacsony |
magas |
4 |
magas |
alacsony |
magas |
alacsony |
Logikai jelek a negyed lépésekhez
A léptetőmotorokat leíró legfontosabb adat, hogy egy lépés alatt hány fokot fordulnak el. Egy 1,8 fok/lépés precizitású motor 200 lépésben fordul teljesen körbe, tehát a 14.1 táblázatban látható lépéseket fordulatonként 200-szor kell megismételni.
Unipoláris léptetőmotorok
A léptetőmotorok általában több áramot vesznek fel működésükhöz, mint amennyit az Arduino digitális csatornáin keresztül kezelni képes, és sok esetben a működésükhöz szükséges feszültség sem 5 V, hanem magasabb. Az alábbi kapcsolásban szereplő integrált áramkör az ULN2004 egy teljesítmény-tranzisztorokból álló úgynevezett Darlington sor. Univerzálisan felhasználhatjuk az Arduino kimeneteinek erősítésére, csatornánként 50 V-ig 500 mA-t képes kapcsolni. Minden bemenetre adott magas szintű jel a bemenethez tartozó kimenet és a föld közé kötött fogyasztót üzembe helyezi. A COM jelzésű lábon kell, legyen az a közös tápfeszültség, amit az IC-vel kapcsoltatni szeretnénk.
ULN2804, mint léptetőmotor meghajtó
Az unipoláris motorok általában 5 vagy 6 kivezetéssel rendelkeznek. A vezetékek közül 4 a forgórészt körülfogó tekercsek egy-egy vége, az ötödik pedig az összes tekercs másik vége egy vezetéken. Amennyiben 6 vezetéket látunk, akkor a motorban két tekercs van, amik két-két vége az első négy kivezetés, az ötödik és hatodik elvezetések pedig a tekercsek közepére csatlakoznak. A tekercsek ellenállásának megmérésével – egy műszer segítségével – kikövetkeztethetjük, hogy melyik kivezetés hová tartozik. A közös elvezetés egyben azt is jelenti, hogy a tekercsek és a mágneses tér polaritása mindig ugyanaz lesz.
Arduino motor-shield és léptető motor
Bipoláris léptetőmotorok
Bipoláris motorok esetén a tengely forgatásához az elektromágnesek polaritását is meg kell változtatni, ezért a két tekercs mindkét kivezetése szabadon áll. A polaritás megváltoztatásának legegyszerűbb módja H-híd kapcsolással valósítható meg, ami négy tranzisztorból álló áramkör. Képzeljük el úgy, mint négy kapcsolót, amik közül kettő a tápvezetékek pozitív, kettő pedig a negatív ágát tudja kapcsolni. Amikor (14.8. ábra) S1 és S4 megszakítja, S2 és S3 zárja az áramkört, az áram az M-mel jelölt motorban az egyik irányba folyik. Megfordítva a kapcsolók állását, az áram iránya is megfordul, csakúgy, mint a tekercs által keltett mágneses tér polaritása.
H-híd kapcsolás funkcionális rajza
A gyakorlatban használhatunk integrált H-híd áramkört (pl. L293D) két egyenáramú motorok forgásirányának váltására vagy egy bipoláris léptetőmotor meghajtására.
L293D integrált H-híd bekötése bipoláris léptetőmotorral
Amennyiben nem szeretnénk az áramkörök megépítésével fáradozni, különféle motorok meghajtására a legkézenfekvőbb az Adafruit által gyártott MotorShield. A kiegészítő modul tartalmaz két darab L293D-t és a vezérlésüket leegyszerűsítő logikai áramkört. Alkalmazásával egyidejűleg meg tudunk hajtani 4 db egyenáramú motort, vagy két léptetőmotort és mindezektől függetlenül két szervomotort is.
Adafruit MotorShield
A stepper motor könyvtár használata
Amire szükség lesz:
- Arduino,
- unipoláris vagy bipoláris léptetőmotor,
- ULN2804 vagy L293D vagy Adafruit MotorShield,
- 10 kiloohmos potméter.
Kapcsolások:
2 pines bipoláris stepper motor L293D H-híddal
4 pines bipoláris stepper motor L293D H-híddal
A fentieknek megfelelően csatlakoztassunk egy léptetőmotort, és jegyezzük meg, melyik tekercs melyik Arduino kivezetéssel hozható működésbe. A potmétert feszültségosztóként a középső kivezetésével az A0 analóg bemenetre kössük.
Arduino kód: 76sztepper
A stepper motor könyvtár függvényei
Stepper()
Létrehozza a Stepper osztály egy példányát a megadott lépésszámmal és tekercsekhez tartozó Arduino csatornákkal.
Szintaxisa:
Stepper(steps, pin1, pin2),
Stepper(steps, pin1, pin2, pin3, pin4).
Paraméterei:
steps: az egy körülforduláshoz szükséges lépések száma (motortól függ),
pin1, pin2: kétvezetékes meghajtás esetén (kiegészítő logikai áramkör szükséges) a meghajtó vezérléséhez használt csatornák száma,
pin1, pin2, pin3, pin4: négyvezetékes meghajtás esetén a tekercsekhez tartozó csatornák száma.
Példakód:
Stepper myStepper = Stepper(200,4,5,6,7);
setSpeed()
Beállítja a motor forgási sebességét a megadott fordulat/perc alapján.
Szintaxisa:
Stepper.setSpeed(rpm).
Paraméterei:
Stepper: Stepper osztály példánya,
rpm: forgási sebesség fordulat/percben.
step()
Adott számú lépést hajtat végre a motorral. Ha a megadott érték pozitív, akkor egyik, ha negatív, akkor a másik irányba forgat. Ez a függvény megvárja, amíg a motor megteszi a lépéseket.
Szintaxisa:
Stepper.step(steps).
Paraméterei:
Stepper: Stepper osztály példánya,
steps: lépések száma, polaritása a forgás irányát határozza meg.
Arduino, mint ISP
Az Arduino legnagyobb előnye és egyszerű használatának kulcsa, hogy a fejlesztőkörnyezetből – minden egyéb eszköz nélkül – az USB porton keresztül feltölthetjük a megírt programot, ami ezt követően futtatásra kerül. Az állandó program, ami ezt lehetővé teszi, az Arduino firmware-e, az úgynevezett bootloader. (Az ICSP csatlakozó SPI kommunikációs funkciójának tárgyalásakor már említettük (14.1.5.), hogy a bootloader feltöltése miatt ez a felület az összes típusú lapkán megtalálható.) Az ISP (In System Programmer) egy olyan eszköz, amivel bootloader nélküli mikrokontrollerbe tölthetünk fel kódot. A környezet példakódjai között megtaláljuk az ArduinoISP firmware-t, ami AVR ISP eszközzé alakítja az Arduinot. Lehetséges alkalmazások közül az egyik leghasznosabb a tönkrement kontrollerű Arduinok javítása – elegendő kivenni a tokjából a rossz IC-t és a helyére került újba beégetni a bootloadert egy másik Arduino segítségével. Készíthetünk egyetlen kontrollerből is költséghatékony Arduinot ugyanezzel a módszerrel.
Instrukciók bootloader beégetéséhez:
- Töltsük fel a programozóként használni kívánt Arduinora az ArduinoISP kódot.
- Tegyünk egy 10 uF-os kondenzátort a programozó RESET lába és a föld közé.
- Kössük be a programozandó eszközt az alábbi példák egyike szerint.
- Válasszuk ki a Board menüből a programozandó eszköz típusát.
- Burn bootloader menüből válasszuk az Arduino és ISP parancsot.
Arduino programozása Arduinoval
UNO, Duemilanove, Diecimila programozása
ATmega mikrokontroller programozása Arduinoval
Abban az esetben, ha egy feladat ellátásához nincs szükség az Arduino USB csatlakozójára és már megírtunk egy jól működő programot, feltölthetjük egy szabadon álló mikrokontrollerre, ami ugyanúgy fogja végrehajtani azt, mint az Arduinonk.
Atmega168 és Atmega328 lábkiosztása és az Arduino megfelelő csatornái
Atmega programozása
forrás: http://arduino.cc/en/Tutorial/HomePage, http://arduino.cc/en/reference/stepper, http://arduino.cc/en/reference/servo, http://arduino.cc/en/Tutorial/ArduinoISP