Arduino kezdőknek 1
Szilágyi Sándor Zoltán Villamosmérnök, mérnök-informatikus
A cikket megírtam: 2021. 06. 28-án
A Rádiótechnikában megjelent: 2022. február
Ez a blog oldal tehát az eredeti, saját tulajdonomban levő dokumentum, és nem a nyomtatásban megjelent (beküldött) másolata. A cikket én írtam, én küldtem be, és csak azután jelent meg nyomtatott formában is. A nyomtatásban megjelent cikkeimre szerződést nem kötöttek velem, és anyagi juttatást se kaptam soha érte. Mivel a magazin már nem kapható, ezért a megjelent 13 cikkemet itt folytatnám, mivel Magyarországon jelenleg nincs hobbielektronikával foglalkozó magazin.
Ahogy a cím is elárulja, ennek a cikknek a célja az alapok bemutatása. Mint kísérletező amatőr szeretném megosztani az eddigi munkáimat és elért eredményeimet úgy, hogy a teljesen kezdők számára is érthető legyen. Természetesen egy cikkbe nem fér el minden, így tervezem, hogy rendszertelen időközönként folytatásokkal egészítem ki.
Első találkozás az Arduino-val.
Néhány évvel ezelőtt (2019 tavaszán) egy korábbi munkahelyemen kaptam azt a feladatot, hogy tervezzek/építsek/programozzak egy beléptetőrendszert a cég bejáratához, ami egy Excel táblázatba menti le a beérkező kollégák kártyáinak egyedi azonosítóját a hozzárendelt névvel és időponttal együtt, majd kilépéskor ugyanazt ismételje meg. Előtte sose találkoztam Arduino-val, csak hallottam róla. A nulla szintről kb néhány nap alatt meg tudtam csinálni a fentebbi feladatot (teljesen nem fejeztem be, csak egy próba projekt volt). Két különböző board-ot is kipróbáltam a feladat során. Bár sose programoztam előtte ilyet, mégis szinte néhány óra alatt megtanultam a használatát, mivel az interneten elég sok segítséget lehetett találni, példaprogramokkal, áramköri megoldásokkal együtt. Akkor beleszerettem. Mivel gyermekkorom óta célom különböző amatőr robotok építése, tervezése, így a korábban próbálgatott más jellegű mikrokontrollereket egy időre félretettem, és a sokkal könnyebben tanulható Arduino-ra váltottam. A tervezési/fejlesztési idő a töredékére csökkent, nem kellett napokig-hetekig küszködni, hogy sikerélményem legyen, szinte egy órán belül kész volt az első sikeres projekt!
Az eszköz (UNO REV3) bemutatása
Az interneten számos weboldalon bőségesen találhatunk információt a különböző board-okról. Itt csak egy kis bepillantást szeretnék nyújtani, hogy azok, akik nem ismerik, és érdeklődnek iránta, hogy megismerjék.
A hardver egy ATmega328P alapú fejlesztő eszköz, I/O egységekkel és egyéb eszközökkel. A szoftver nyílt forráskódú, mely ingyenesen letölthető (természetesen lehet adni támogatást is). A csomag (hardver/szoftver) előnye, hogy egyszerűen programozható, C-alapú, illetve könnyen csatlakoztathatók hozzá a különféle elektronikus alkatrészek vagy a készen kapható shield-ek. Hátránya egyedül az ára, mivel sokkal többe kerül, mint egy alap mikrokontroller és a hozzá tartozó alkatrészek (rezgőkvarc, passzív alkatrészek, csatlakozók, kis nyák, stb). A könnyű kezelhetősége, gyors programozása, és a sok sikerélmény viszont mindenképpen háttérbe szorítja ezt a tényt.
A fejlesztői környezet részei: board (pl Arduino UNO REV3), USB A-B kábel, Arduino IDE. Az alap környezetet bővíthetjük a shield-ekkel, de mi is építhetünk hozzál saját hardvert. A board-oknak elég sok különböző fajtája létezik, vannak, amelyek már nincsenek forgalomban, vannak viszont olyan speciálisok, amelyek, wifi, vagy bluetooth csatlakozási lehetőséggel is rendelkeznek. A shield-eket I/O perifériák csatlakoztatásához használjuk, pl motorvezérlés, LED-meghajtók, GPS, ethernet, wifi, stb.
A fejlesztés a fejlesztői környezetben történik, majd a kész programot fordítás után „feltöltjük” a board-unkba egy USB A-B kábel (nyomtatókábel) segítségével. Ezen keresztül kap tápfeszültséget is a (amíg a fejlesztés történik). Ez később külön tápegységről vagy akkumulátorról is kaphat tápfeszültséget (pl robot autók esetében).
Arduino UNO REV3 felépítése (csak a fontosabb elemek és adatok)
- Atmega328P mikrokontroller
- 16MHz-es processzor
- 6-20 V tápfeszültség
- 5 V üzemi feszültség (20 mA lehet a lábak maximális terhelése)
- 32 KB flash memória (A letöltött programokat és a saját működéséhez szükséges programokat is tárolja. Így kb 24-30 KB-ot használhatunk fel. A tartalmát megőrzi kikapcsolás után is.)
- 2 KB SRAM (a tartalmát nem őrzi meg, kikapcsolás után „elfelejti”. A program belső változóit tárolja)
- 1 KB EEPROM (a flash-hez hasonlóan szintén nem felejti el kikapcsolás után a tartalmát. Konfigurációkat és indulási alapbeállításokat tartalmaz.)
- Digitális I/O: 14 db (ebből 6 db PWM és 2 db interrupt)
- Analóg inputok: 6 db (digitálisként is használhatók)
- Egyéb: SPI kommunikáció, soros (UART) port, alaplapi feszültség stabilizátor, tápcsatlakozó, reset-gomb, visszajelző LED, stb.
Az IDE fejlesztői környezet
A www.arduino.cc honlapról lehet letölteni. Nyelve az angol, de át tudjuk alakítani magyarra: File/Preferences, majd az Editor language legördülő menüjéből kiválasztható. Telepítés után az első dolgunk beállítani az alaplapot, melyet az Eszköszök/Alaplap menüben választhatjuk ki. Ezután a programozót is be kell állítani, hasonló módon: Eszközök/Programozó menüből. Végül be kell állítani a portot (ez fizikailag változhat, ha az USB-kábelt a számítógépen másik helyre dugjuk. Az Eszközök/Port menüben találjuk. Érdemes a kábelt mindig ugyanoda csatlakoztatni, mert ha másik helyre tesszük, akkor a port száma változhat és előfordulhat, hogy újra be kell állítani.
Mielőtt az első önálló nagy programot megírjuk, érdemes tanulni, gyakorolni. A fejlesztői környezet mintapéldákat is tartalmaz, ezeket a Fájl/Példák menüpontban találjuk. Bármelyiket be lehet tölteni, és ha a megfelelő hardver csatlakoztatva van az Arudino-hoz, ki is lehet próbálni.
Az utolsó lépés a program fordítása, majd letöltése. A programot a menü alatti kis pipára kattintva fordíthatjuk le. Végül, ha nincs hiba, a mellette levő kis nyílra kattintva lehet feltölteni a kontrollerbe.
1. program: „Helló világ!” – a beépített L-LED folyamatos világítása
A lehető legegyszerűbb, kedvcsináló feladat. Egyszerűbb, mint ami a példaprogramok közt meg van adva. A board-on levő L-jelű LED-et használjuk fel benne. Ez egy LM358 kisjelű dual műveleti erősítő egyik felének 7-es kimenetére van kötve egy 1K-s ellenálláson keresztül. A katódja pedig a GND-re csatlakozik. A program fontosabb elemei:
void setup() {} - A beállításokat tartalmazza (deklaráció), melyek egyszer futnak le a program legelején. Csupa kisbetűvel, és szóközzel van írva, megváltoztatása hibát okoz.
pinMode(); - Ez egy olyan függvény, mellyel a ki- és bemeneteket lehet konfigurálni, illetve esetünkben a boardon levő L LED-et is. Pontosvesszővel zárjuk.
LED_BUILTIN - Az eszközön levő beépített LED-et aktivizálja (L). Csupa nagybetűvel és alulvonással írjuk.
OUTPUT - Az adott pin-t kimenetként használjuk fel. Csupa nagybetűvel írjuk.
INPUT - Az adott pin-t bemenetként használjuk fel.
void loop() {} - A főprogram, mely ciklikusan újra és újra végrehajtódik.
digitalWrite(); - Függvény, ez írja ki az adott pin-re a beállított értéket. Ezt is pontosvesszővel zárjuk. Mint az előző függvénynél, itt is egybeírjuk a két szót úgy, hogy csak a második szó első betűje lehet nagybetű (a W).
HIGH - magas érték, azaz logikai „1” beállítása.
LOW - alacsony érték, azaz logikai „0” beállítása. A HIGH és a LOW értékeket is csupa nagybetűvel írjuk.
A program mindegyik elemének tehát írási szabályai vannak. Pl a „pinmode”-ot beírva az fekete karakterekkel jelenik meg, majd fordításkor jelzi is a hibát. Viszont „pinMode”-ként beírva narancssárga színű lesz, jelezve, hogy jól gépeltük be. Ez a többire is érvényes, csak a színek lehetnek eltérőek.
Az 1. ábrán szereplő egyszerű program tehát felgyújtja a panelen levő beépített „L” feliratú LED-et, mely folyamatosan világít (a végtelenségig).
1. ábra
2. program: a beépített L-LED villogtatása.
Ezt nem szükséges begépelni, mivel a példaprogramok közt megtalálható „Blink” néven (2. ábra). Az inicializáló része megegyezik az előbbi példáéval, mivel itt is csak a beépített LED-et használjuk fel. A főprogram viszont három új sorral bővül: először magas szintre állítjuk az adott pint, majd ezt megtartjuk egy adott ideig. Ezután a beépített LED-et alacsony szintre állítjuk be, így az elalszik. Végül ezt az állapotot szintén 1 sec ideig tartjuk fenn. Ezután a void loop() kapcsoszárójelei között levő program újra és újra lefut, a végtelenségig. Új parancs:
delay(); - késleltetés. Csupa kisbetűvel írjuk, és pontosvesszővel zárjuk. A zárójelben adhatjuk meg az értéket századmásodpercben, azaz a delay(1000); 1 másodperces késleltetést jelent.
2. ábra
Források:
https://hu.wikipedia.org/wiki/Arduino (2021 április)
https://www.farnell.com/datasheets/1682209.pdf
A cikket megírtam: 2021. 06. 28-án
A Rádiótechnikában megjelent: 2022. február