2018-10-16
Az Arduino-ról sokan írtak már, én meg nem is olyan régen kezdtem vele foglalkozni. Ez a szekér elment már? Lehet. Az Arduino sok szempontból figyelemre méltó, foglalkoznak vele hozáértők és kezdők is. Volt előzménye is, és nagyon sok embernek munkája tetesül meg az Arduino-ban. Az Arduino név hallatán az emberek talán előszőr a kártyákra gondolnak, amely egy kis mikroszámítógép. Előnye, hogy forrasztgatás nélkül tudunk vele automatákat építeni, megismerhetjük vele a programozást. Az Arduinót és a köré épült rendszert nevezhetjük akár az elektronika LEGO-jának is.
Többféle Arduino kártya elérhető, sőt akár magunk is készíthetünk a saját ízlésünk szerint. A közös bennük, hogy az Atmel AVR mikrovezérlők köré épültek. Az Atmel-t azóta felvásárolta a konkurens MicroChip. Ha a MicroChip megszüntetné az AVR-ek gyártását, bízok a kinaiakban, hogy majd csak elkezdik azt is utángyártani. Az eredeti kártya az Arduino UNO volt, a képen egy korai példány látszik, ilyenhez ma már nem lehet hozzájutni, a képet a Wikipédián találtam.
Manapság ennek továbbfejlesztett változatához lehet kapni.
Az UNO szerintem magán viseli egy hobby/oktató termék összes jegyét. Az asztalon valamit összedugdosni jó, de terméket nehéz rá alapozni. Számomra sokkal perspektívikusabb az Arduino NANO.
Ha több memóriára van szükségünk, például grafikus képernyővel akarunk dolgozni, az Arduino MEGA lehet a segítségünkre. Alapvetően láb kompatibilis az UNO-val, a plusz dolgokkal kiegészítve. Az ördög a részletekben rejlik, a fenti kijelentés addig igaz, amíg az AVR processszort az Arduino rendszeren keresztül kezeljük. Amikor meg kell kerülni az Arduino rendszert, direktben/assembly szinten vezéreljük a processzort, figyelembe kell venni, hogy a processzor lábai ténylegesen melyik lábra vannak kivezetve.
Azért igyekeznek az UNO-t követni, mert Arduino szóhasználattal úgynevezett shield (pajzs), kártyákat, kegészítő/bővítő áramköröket fejlesztettek hozzá. Ezek általában az UNO-ra rádughatók. Igazán csak néhány minta, elsőként egy érintés érzékeny TFT kijelző.
Hálózati kártya shield. Megfigyelhető a speciális foglalatok, amik lehetővé teszik a lábak továbbvezetését. Na most több ilyen shield-ből egymásra épített kockát az ember dobozoljon be :(.
Joystick shield.
Gyakran ennyiben ki is merül az Arduino ismertetése. Pedig nagyon fontos a kártyához tartozó szoftver. A szoftver ugye nem egy programot, hanem programok halmazát jelenti. Egy kezdő machinátornak persze elegendő annyit tudnia, ha Arduinoval akar foglalkozni az Ardduino-tól le kell töltenie az Arduino IDE-t (Integrated Development Enviroment). Mivel ez GNU, szabadon használható, ingyen van. Az Arduino IDE-ben mindent meg lehet csinálni, de esetleg nem baj ha tudjuk, hogy Arduino-hoz fejleszthetünk CodeBox és AVR Studio alatt is, meg biztos van még más is amiről még nem olvastam. Az Arduino programokat .ino fájlokba írjuk. Olvastam olyat is, hogy ez egy lebutított C. A "C", az ugye egy közkedvelt programozási nyelv, amiben szeretnek hardver közeli programokat írni. Értsd: alkalmas az áramkörök jó/hatékony kezelésére. Voltak olyan megátalkodott programozók, akik a többi programozó csodálkozására, nem elég, hogy megírták a C nyelvet, ezután C-ben írták meg a UNIX operációs rendszert. Na szóval a lebutított C egy tévedés, az Arduino IDE alatt a GCC (GNU C/C++) fordító fordítja le a programjainkat. Tehát a programokat .ino fájlba írjuk, de az színtiszta C++. Mindenki őrizze meg a nyugalmát, és ettől ne rémüljön meg! Én az Arduinonak köszönhetem, hogy megtapasztalhattam a C++ mennyire leegyszerűsíti/megkönnyíti a fejlesztést. Alább látható mintaként az Arduino "Hello World!" programja (bocsi, C-ben az első program, amit mindenki megír). Az Arduino paneleken van egy L LED, ami amúgy a 13-as lábnak felel meg. A program ezt a lábat kimenetre állítja, majd 1-be kapcsolja, vár fél másodpercet, majd 0-ba. A LED ennek megfelelően fog villogni.
void setup()
{
pinMode( 13, OUTPUT);
}
void loop()
{
digitalWrite( 13, 1);
delay( 500);
digitalWrite( 13, 0);
delay( 500);
}
Kezdéshez nem szükséges, de érdemes tovább boncolgatni az Arduino szoftverét. Én MS Windowst használok. Letölthetjük az Arduino IDE -t telepíthető, meg .zip csomagban is. A telepítő a \Program Files alá telepíti magát, de mivel én a .zip csomagot használtam, azt a c:\Arduino mappába bontottam ki.
Érdekes a c:\Arduino\hardware\arduino\avr\cores\arduino\main.cpp fájl. Aki már programozott C/C++-ban, megtalálja benne a setup() és loop() kezelését.
Az c:\Arduino\hardware\tools\avr\avr\ mappa tartalmazza az AVR GCC fordítót (értsd Atmel AVR procokhoz való változat).
Aki tovább vizsgálódik, több érdekességet is fog találni, például a különböző AVR-khez való bootloadereket, az Arduino programjainak, utasításainak forráskódját... mert ez GNU.
Később fontos lesz számunkra c:\Users\User\Documents\Arduino\libraries\ mappa. Figyelem, ez nem az Arduino mappában van! Szabványosan a \user alatt illik elhelyezni a felhasználó adatait. Ide kerülnek az egyes shield-ekhez, áramkörökhöz előre megírt vezérlő rutinok, Arduinó szóhasználattal library-k, ami ugye könyvtárat jelent angolul. Funkciójuk hasonlít a PC-knél használt driver-ekhez. A library-król külön fogok írni, most elég talán annyi, hogy ezekben találjuk/helyezzük el az egyes kiegészítő áramkörök C++-ban megírt kezelő programjait. Ez az Arduino-nak megint egy hatalmas előnye, hogy a legtöbb érzékelőkhöz/shield-ekhez általában már valaki megírta a kezelést, és mi már viszonylag egyszerűen néhány utasítással dolgozhatunk velük.
Valahogy fontosnak érzem bemutatni, hogyan nézett ki egy számítógép, ahogy azt a mérnökök megteremtették. Azóta persze a marketingesek nyomására a számítógépet agyonturbózták, ha jól emlékszem a sebességét megnövelték vagy 5 nagyságrenddel, a 4 kiloszó memóriát felpumpálták több gigabyt-ra, a több terabyte-os háttértárakról meg ne is beszéljünk. Ma egy számítógép elképzelhetetlen színes grafikus képernyő nélkül, ami általában tapizható, és olyan kicsire zsugorították, hogy egy zsebtolvaj simán kisétálhat vele a szobánkból. Hja, hol vanak ma már a klimatizált számítógép központok? Amúgy a viccet félretéve, szakközépiskolában még ilyen gépen tanultam a programozást. A képen egy KFKI gyártmányú TPA1001 látható, 4 kszó ferritgyűrűs memóriája volt, azért nem kbyte-ot írtam, mert 12 bites szervezésű volt, és nem hexadecimális számokkal bűvöltük, hanem oktálisokkal. Belül nagyon irigy voltam a következő évfolyamra, mert ők már a Hiradástechnika Szövetkezet Z80 alapú HT1080 iskolaszámítógépén tanulhattak. Mellette egy Teletype látható. Ez egy klaviatúra, nyomtató, lyukszallag olvasó és lyukszallag lyukasztó kombó volt. A programokat lyukszallagon tároltuk, teletype-on lehetett beolvastatni őket, már ha előbb a gép előlapján lévő mérnöki pultról (switch register) binárisan bepötyögtük a 20 szó hosszúságú binloadert. Nem szeretném az emlékeimmel a olvasóimat hosszabban terhelni. Amit érdemes megfigyelnünk ezen a képen, az hogy ott áll az a szerencsétlen számítógép a 4 kszó memóriájával, konkrétan azt sem tudja hol, az egyetlen kapcsolata a külvilággal az az egy szem teletype, amin keresztül kapja az utasításainkat, és azoknak megfelelően a nyomtatóra gépeli ki az eredményt. Ez nagyon fontos lesz a programozás szempontjából, a gép csak azokat a dolgokat fogja tudni kiírni, elvégezni, amikre megtanítjuk, amiket előzőleg leprogramozunk.
Azt hiszem jól látható a párhuzam egy Arduinós rendszerrel. Az Arduino egyetlen USB csatlakozó keresztül megoldotta, hogy a PC-nk elássa tápárammal a kártyát, feltölthessük a kártyára a programjainkat, és biztosítson egy soros terminált, amire az Arduinónk ki tudja írni az eredményeket. Ezen felül jön majd, hogy érzékelőket, kapcsolókat, kijelzőket, relékett, motorokat kapcsolhatunk a kártyánkhoz.
Elég hosszúra nyúlt ez a cikk, úgy gondolom néhány egyszerű programot és az Arduino IDE-t egy következő cikkben fogom körüljárni. Itt a vége, fuss el véle.