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
Mi az Arduino? Egyrészt egy mikrokontroller, másrészt a programozási környezet neve. Több fajtája létezik, mi az órán az Arduino Duemilanove-t használjuk. Az Arduino egy nyílt forrású, gyors prototipizáláshoz ideális mikrokontroller modul. Használata a világos felépítésű elektronikának és jól értelmezhető programnyelvnek köszönhetően könnyen és gyorsan elsajátítható. Hirtelen elterjedése interaktív művészeti alkotásokban, hobbi alkalmazásokban és gyors vezérléstechnikai megoldások kivitelezésében egy jól kiépült nemzetközi tudásbázist hozott létre, hozzáférhetővé téve az elektronika egyszerű használatát minden érdeklődő számára. Sokrétű ki- és bemenetein keresztül fel tudja venni a kapcsolatot bármilyen jellegű szenzorral és programjának megfelelő válaszadásra képes, meghajtva lámpákat, motorokat, kijelzőket. A mikrokontrollert Arduino nyelven lehet programozni, ami a Wiring nyelvén alapszik, felhasználói felületét pedig a Processing alapja nyújtja. Az Arduino egyedülálló áramkörként is működtethető, vagy összekapcsolható számítógéppel, amin Flash, Processing, MaxMSP, GarageBand, illetve egyéb soros kommunikációra képes programokkal képes együttműködni. A modulokat készen és KIT-ben is meg lehet vásárolni, a programok ingyen letölthetők honlapukról. A kapcsolások és a nyomtatott áramköri tervek szintén hozzáférhetők és magáncélra szabadon felhasználhatók. Az Arduino a 2006-os Ars Electronica digitális közösségek szekciójában is elismerésben részesült. A csapat: Massimo Banzi, David Cuartielles, Tom Igoe, Gianluca Martino, és David Mellis.
A tananyag ezen részét a Massimo Banzi és társai által kidolgozott hivatalos leckék adják, amik Creative Common License-szel rendelkeznek:
Arduino Duemilanove részei
A Duemilanove 2009-es modell, ATmega168 típusú vagy ATmega328 típusú mikrokontrollerrel felszerelt verzióban létezik. 14 digitális ki-/bemenete van amiből 6 speciális PWM funkciót is képes ellátni, 6 analóg bemenettel rendelkezik, valamint egy 16 MHz-es osszcillátorral, egy USB, egy hálózati és egy ICSP csatlakozóval rendelkezik. Egy reset (újraindító) gomb is található rajta. Minden alkatrészt tartalmaz, ami a mikrokontroller működéséhez szükséges, így ha csatlakoztatjuk USB kábelünkkel (5V) a számítógéphez, megkezdhetjük használatát, de akár elemet, akkumulátort vagy AC-to-DC adaptert (a nagyfeszültséget átalakítja kisfeszültségű egyenárammá) dughatunk a hálózati csatlakozójába, ezek ajánlott feszültség értéke maximum 12V lehet. A DC a Direct Current rövidítése, ami kisfeszültségű egyenáramot jelent, ezzel fogunk dolgozni.
A Duemilanove adatai:
- mikrokontroller típusa: ATmega 168 vagy ATmega 328
- működtető feszültségérték: 5V
- bementi feszültség – ajánlott értéke: 7-12V
- bemeneti feszültség – határ értéke: 6-20V
- digitális ki-/bemeneti pinek száma: 14, ebből 6 PWM. 5V-on működnek, mindegyik rendelkezik egy belső felhúzó (pull-up) ellenállással, ami egy speciális paranccsal bekapcsolható (alap állapotban ki van kapcsolva), értéke 20-50 kOhm lehet.
- analóg bemeneti pinek száma: 6, ezek 10 bites felbontáson tudnak egy értéket felvenni 0-1023 között.
- az egyes pinekre jutó áramerősség értéke: 40mA
- a 3.3V elnevezésű pinre jutó áramerősség értéke: 50mA
- flashmemória mérete: 16KB (ATmega168), 32KB (ATmega328) amiből 2KB-ot a bootloader foglal el. A flashmemória egy olyan újraprogramozható, adattárolásra alkalmas eszköz, aminek nincs szüksége tápfeszültségre ahhoz, hogy megtartsa a benne tárolandó adatot. A bootloader magyarul rendszer betöltő program, ezzel képes elindulni az eszköz.
- SRAM mérete: 1 KB (ATmega168), 2 KB (ATmega328).Ez egy statikus memória, amiben a tárolt adat a tápfeszültség megszűnéséig marad meg.
- EEPROM mérete: 512 byte (ATmega168), 1 KB (ATmega328).Elektronikusan törölhető és újraírható, azaz programozható tároló memória. Olyan mint a flashmemória.
- Órajel sebessége: 16 MHz. Ez egy olyan jel, amely két vagy több áramkör tevékenységét koordinálja, szinkronizálja. Egy alacsony és egy magas jelszint között osszcillál.
Áramot kezelő pinek:
- Vin: bemeneti feszültség, ha külső áramforrást használunk az üzemeltetéshez.
- Gnd: földelés.
- 5V: értelemszerűen 5V jön belőle.
3V3: az alaplapra szerelt FTDI chip által termelt 3,3 V feszültség.
Némelyik pin speciális funkciók ellátására is képes, ezeket a későbbiekben használat közben ismerjük meg.
Speciális funkciókkal ellátott pinek:
- digitális 0(RX) és 1(TX): Ezek a pinek össze vannak kötve a FTDI USB-to-TTL nevű soros chip megfelelő részeivel, ezért soros port kommunikációhoz használhatjuk őket. Az RX fogadja, a TX pedig küldi az adatot.
- digitális 2 és 3 pin külső megszakításhoz: a csatlakozón fellépő fel- vagy lefutó él hatására fellépő megszakításkéréshez használható, ez a mikrovezérlő valamelyik bemenetének értékváltozására generálódik. Az attachInterrupt() funkcióval használjuk.
- digitális PWM pinek: 3, 5, 6, 9, 10, és 11 (pulse width modulation = impulzus-szélesség moduláció). Az analogWrite() paranccsal 8 biten küldhetünk rá adatot.
- SPI pinek:10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK), SPI busz (Serial Peripheral Interface = soros periféria illesztő) kommunikációhoz használhatjuk, az SPI Library meghívásával.
- LED 13 pin: a beépített LED van ide kivezetve ide.
- Analóg A4 (SDA) és A5 (SCL) pinek: I2C (TWI) busz kommunikációra alkalmasak, Wire Library meghívásával.
Egyéb pinek:
- AREF pin: Alapvetően az analóg pinek 0-5V között mérik a bementi adatot. Ennek felső értéke ezzel a pinnel és az analogReference() paranccsal megváltoztaható.
- Reset pin: ha a shieldet használunk és van rajta reset gomb, akkor használjuk ezt a pint. LOW-ra állítva működik.
Mi a különbség az analóg és a digitális jel között?
Az analóg jel idő és amplitúdó szerint folyamatosan változó jel, számtalan értéket képes felvenni. Lehet szabályos időközönként, periodikusan változó vagy szabálytalan, azaz a két szélsőérték között bármekkora lehet a pillanatnyi értéke. Az amplitúdó a jel nagyságát határozza meg, a frekvencia pedig az ismétlődések időtartamát, ami a periódusidő vagy a hullámhossz.
Analóg jel, szinusz hullám, szabályos (periodikus) jel
kép: http://hu.wikipedia.org/wiki/Hullám
A digitális jel két értéket vehet fel, nullát vagy egyet. Arduino esetében ez azt jelenti, hogy ha bemenetére 5 V feszültség érkezik, az érték 1 lesz, ha nem érkezik semmi, akkor 0. Kimenetként használva ugyanez igaz, ha 1 értékkel 5 V feszültséget küldünk. Az Arduinonak vannak speciális PWM pinjei, erről később lesz szó.
Digitális jel, bináris számrendszerben
Az arduino mikrokontrollerben található egy Analog-to-Digital-Converter (ADC), ami a bemeneti analóg feszültségjelet átalakítja egy digitális jellé. Konkrét példán keresztül a későbbiekben ismerjük meg a használatát.
Arduino fejlesztőkörnyezet telepítése
Az Arduino Boardhoz egy Arduino nevű open source fejlesztőkörnyezet tartozik, aminek legfrissebb verziója a hivatalos oldalról letölthető háromféle operációs rendszerhez: Windows-hoz, Mac OS X-hez és Linuxhoz. A letöltött fájlt kicsomagoljuk, ha kell, és máris futtathatjuk az Arduino szoftvert, nem kell külön telepíteni. Letöltés erről a linkről lehetséges: http://arduino.cc/en/Main/Software
A Windows automatikusan telepíti az USB drivert, ha rákötjük az Arduinot. Macintoshon le kell tölteni, majd telepíteni kell. Az interneten FTDI USB Serial Driver néven találjuk meg.
A következők szerint töltsünk fel az Arduino Boardunkra egy minta fájlt, hogy le tudjuk ellenőrizni, megfelelően működik-e:
- Nyissuk meg az Arduino szoftvert!
- Keressük ki a mintapéldák között a Blink fájlt: File/Examples/1. Basics/Blink!
· Állítsuk be az általunk használt Arduino típusát. Ezt a Tools/Board lenyíló menüben tehetjük meg, úgy hogy klikkeléssel áttesszük a pipát az adott típushoz.
· Ezután ellenőrizzük a soros port beállítását a Tools/Serial Port menüben! Hogy épp melyiket használjuk (COM1, COM2, COM3, stb.), az Eszközkezelőben (Device Manager) meg tudjuk nézni. Egyszerűbb, ha megpróbáljuk feltölteni a kódot, és ha nem sikerül, akkor átállítjuk a portot egy másikra.
A második gombbal Upload tudjuk feltölteni a kódot a mikrokontrollerünkre. Done Uploading felirat jelzi, ha ez sikerült. Ekkor a beépített sárga LED villogni kezd úgy, hogy 1 másodpercig ég és 1 másodpercig nem, míg ki nem húzzuk az áramból, azaz az USB-ből.
Gombok balról jobbra: Ellenőrzés, Feltöltés, Új ablak, Megnyitás, Mentés és a jobb oldalon a Serial Monitort bekapcsoló gomb.
Az alapokról, a fejlesztőkörnyezetről, hibakeresésről, gyakran ismételt kérdésekről stb. további információkat online, angol nyelven, a Help menüpont alatt találhatunk.
Programozás: szükséges minimum kód
Az Arduino által használ kódok, más néven Sketch-ek kiterjesztése a régebbi verzióknál .pde volt, de az 1.0 verzió óta már .ino kiterjesztést használ.
Arduino sketch írásnál a szükséges minimum a setup() és a loop() függvények meghívása (persze ehhez írhatunk saját függvényeket, de e nélkül nem fog működni a kódunk). Ezek az úgynevezett dedikált funkciók.
A setup funkció a program futtatásakor csak egyszer fut le az elején. Itt adhatjuk meg, hogy melyik pint hogyan akarjuk használni (bemenetként vagy kimenetként). Ekkor inicializáljuk a pineket (értékadás 0-val), illetve hívjuk meg a soros portot.
A loop funkció, mint a neve is mutatja, többször fut le egymás után. Itt változtathatjuk meg a bemeneti és kimeneti adatokat.
Ezek dedikált funkciók, tehát be vannak építve a fejlesztőkörnyezetbe. Voiddal kell őket meghívni.
Szintaxisok:
Setup: A kód legelején definiáljuk benne a változókat (inicializálás), pin módokat,
könyvtár használatát stb. Csak egyszer fut le.
void setup() {
// ide tesszük az állandókat
}
Loop: A setup után következik, folyamatosan, azaz többször fut le, lehetővé teszi, hogy
a program változzon és reagáljon.
void loop() {
// a változók helye – ismétlődik a lefutás
}
További szintaxisok:
; pontosvessző
Az állítások lezárására használjuk.
int a = 13;
{ } kapcsos zárójel
Az arduino programnyelv legfőbb eleme, különböző konstrukciókban használjuk.
Ha van egy nyitó kapcsos zárójel, akkor mindig kell, hogy legyen egy hozzá tartozó záró is. Az Arduino fejlesztőkörnyezetébe be van építve, hogy ha az egyik zárójelet kijelöljük, megmutassa, melyik tartozik hozzá. Hasznos tipp, hogy ne felejtsük el bezárni a zárójelet, tegyük ki egyből mind a kettőt, utána írjunk be közé. Függvényeknél, ciklusoknál és feltételeknél használjuk.
// megjegyzés
Két darab perjel mögé beírhatunk magunknak megjegyzéseket a programsorba, melyeket a fordítóprogram figyelmen kívül hagy, így nem tölti fel őket az Atmega chipre.
Ez a kommentelés csak egy sorra vonatkozik. Ha több sort akarunk írni, a csillagos perjeleket használjuk:
/* ide jön
több sor
megjegyzés */
forrás:
https://miau.gau.hu/mediawiki/index.php/Analóg_és_digitális_jel
http://arduino.cc/en/Guide/Environment, http://arduino.cc/en/Main/arduinoBoardDuemilanove,