Arduino

A Wikipédiából, a szabad enciklopédiából
Arduino
Arduino Uno Revision 3
Arduino Uno Revision 3

Típusegykártyás mikrovezérlő
ProcesszorAtmel AVR, ARM Cortex-M, Intel Curie
Operációs rendszernincs (Optiboot Bootloader)
Arduino weboldala
A Wikimédia Commons tartalmaz Arduino témájú médiaállományokat.

Az Arduino egy szabad szoftveres, nyílt forráskódú elektronikai fejlesztőplatform, arra tervezve, hogy a különböző projektekben az elektronikus eszközök könnyebben hozzáférhetőek, kezelhetőek legyenek. Széles tömegek számára elérhető, mivel olcsó, könnyen beszerezhető, egyszerűen programozható, és csatlakoztatható más eszközökhöz.

A fejlesztői platform az úgynevezett IDE-ből, és egy Arduino Board-ból áll. Előbbi segítségével programokat írhatunk és tesztelhetünk számítógépen, utóbbi pedig egy hardver eszköz, amelyre az előzőleg elkészített programokat feltölthetjük a számítógépen keresztül, majd elektronikus eszközöket vezérelhetünk a segítségével.

Az Arduino Board elérhető kereskedelmi forgalomban kapható, előre összeszerelt, vagy otthon összeszerelhető alkatrészcsomagként. Mivel nyílt forráskódú a hardver is, bárki készíthet magának saját változatot belőle, vagy az eredetivel kompatibilis klónt.[1]

Szoftver[szerkesztés]

Az Arduino IDE egy kereszt-platformos Java nyelven írt fejlesztőkörnyezet, amely segítségével Arduino programokat készíthetünk, tesztelhetünk, majd az Arduino Board-okra tölthetjük. Az induláshoz a fejlesztőeszköz több mintaprogramot tartalmaz, amelyek segítségével egyszerűen megtanulhatjuk, hogyan tudunk LED-et villogtatni, fényerőt szabályozni, vagy a számítógéppel kommunikálni USB-n keresztül. Az Arduino programokat egy C/C++ alapú programozási nyelven írhatjuk, így az ezeket a nyelveket ismerők könnyen kiismerhetik magukat a környezetben. AZ IDE-hez tartozik a "Wiring" nevezetű C/C++ programkönyvtár, amellyel egyszerűen végezhetjük el a leggyakoribb input/output műveleteket.

Hardver[szerkesztés]

Board-ok[szerkesztés]

Az Arduino Board-ok többféle változatban készülnek, amelyek méretben, a mikrovezérlő típusában, a belső memóriában, a be- és kimenetek számában különböznek. Vannak amelyek rendelkeznek beépített Ethernet, Bluetooth, Wi-Fi csatlakozási lehetőséggel.

Forgalomban lévő modellek[szerkesztés]

  • Arduino/Genuino UNO

Széles körben használt modell, 8 bites, 16 MHz-es ATmega328P processzorral. 14 digitális I/O lábbal és 32 kB flash memóriával rendelkezik.[2]

  • Arduino/Genuino 101

Egy kétmagos, kis fogyasztású, 32 bites, 32 MHz-es Intel Curie processzorral, Bluetooth LE támogatással rendelkező lap, ugyanazon perifériákkal, mint az UNO. Flash memóriája 192 kB méretű.[3]

  • Arduino/Genuino Micro

Kisméretű, ATmega32U4 processzorral rendelkező változat, amely micro USB csatlakozóval rendelkezik és breadboardon való használatra tervezték. Beépített USB vezérlője van, aminek segítségével akár egérként vagy billentyűként is működhet. 32 kB flash memóriája van.[4]

  • Arduino/Genuino Mega 2560

Összetettebb projekthez használható, 54 digitális I/O és 16 analóg bemeneti lábbal. ATmega2560 processzor és 256 kB flash memória van benne.[5]

  • Arduino/Genuino Zero

32 bites, nagyobb számítási teljesítményű változata az UNO-nak. Atmel SAMD21 processzor és 256 kB flash memória van benne. Előnye, hogy beépített debuggere is van.[6]

  • Arduino/Genuino MKR1000

Wi-Fi támogatással ellátott, 32 bites lap, ami IoT projektekhez lett tervezve. Gyárilag működik akkumulátorról, tölti is azt USB-ről. SAMD21 és 256 kB flash memória van benne, valamint egy Wi-Fi modul és ahhoz való antenna.[7]

Már nem gyártott modellek[szerkesztés]

  • Arduino Duemilanove
  • Arduino Ethernet
  • Arduino BT
  • Arduino Mega
  • Arduino ADK
  • Arduino DUE
  • Arduino Ethernet
  • Arduino Fio
  • Arduino Leonardo
  • Arduino Esplora
  • Arduino Yún

Shield-ek[szerkesztés]

Az Arduino-k funkcionalitását könnyedén kiegészíthetjük az úgynevezett Shield-ekkel, amelyek a Board-okhoz egyszerűen illeszthető elektronikai áramkörök. Ezek segítségével azt Arduino-t akár közvetlenül az internetre csatlakoztathatjuk, motorokat, LED-eket, vezérelhetünk vele, vagy Wi-Fi, Bluetooth hálózatra kapcsolódhatunk. A jelenlegi hivatalos Arduino Shield-ek:

  • Arduino WiFi Shield 101
  • Arduino Proto Shield
  • Arduino MKR Proto Shield
  • Arduino MKR Proto Large Shield
  • Arduino Yún Shield
  • Arduino Motor Shield
  • Arduino Ethernet Shield
  • Arduino GSM Shield
  • Arduino GPS Shield
  • Arduino Servo Shield

Ezeken kívül több cég gyárt világszerte Arduino kompatibilis Shield-eket, különböző célokra.

Néhány board összevetése[szerkesztés]

Típus chip CPU

sebesség

Táp Üzemi

fesz.

Digitális

lábak száma (pwm pinek)

Analóg

pinek száma

Flash

memória

SRAM

memória

EEPROM

mérete

Extrák
Arduino UNO ATmega328P 16 MHz 6..20V 5V 14 (6) 6 32 KB 2 KB 1 KB -
Arduino MINI ATmega328P 3,3V: 8MHz

5V: 16 MHz

6..20V 3,3V

5V

14 (6) 8 32 KB 2 KB 1 KB nincs USB portja
Arduino MEGA2560 ATmega2560 16 MHz 6..20V 5V 54 (15) 16 256 KB 8 KB 4 KB -
Arduino Nano ATmega328P 16 MHz 7..12V 5V 22 (6) 8 32 KB 2 KB 1 KB -
Wemos D1 ESP8266EX- 9..12V 3.3V 11 (11) 1 4 KB 2 KB 1 KB - integrált ESP8266
Duemilanove ATmega168

ATmega328-

6..20V 5V 14 (6) 6 16KB

32KB

1KB 512 byte

1KB

-
Digispark - - - 5V 14 10 16KB 2KB 1KB -
RoboRED - - - 5V/3.3V 14 6 32KB 2KB 1KB -
ATmega1280 ATmega1280 - - 5V 54 16 128KB 8KB 4KB -
Arduino Leonardo - - - 5V 20 12 32KB 2.5KB 1K -
Arduino Due - - - 3.3V 54 12 512KB 96K - -
ChipKIT Max32 Diligent - - 3.3V 83 16 512KB 128KB - -

Az Arduino memóriatípusai[szerkesztés]

Flashmemória[szerkesztés]

A Flashmemória számít az Arduino-k "fő" memóriájának, ez tárolja a letöltött programot, és kikapcsolás után is megőrzi a tartalmát, azaz a programot elegendő csak egyszer letölteni ide, az minden ismételt bekapcsolás esetén "magától" újraindul. Programozás során nem számolhatunk a teljes memóriával, mivel a letöltőprogram (bootloader) és például a különböző kommunikációk is innen "csípnek le" részeket.

Ráadásul a letöltött könyvtárak is sok helyet tudnak innen foglalni, ezért alaphangon is 32 kB memória esetén csak 24-30 kB-tal számolhatunk (könyvtárak nélkül).

Ezen kívül a flash nem írható végtelenül újra, a maximális írásciklus-számát 100.000-ben limitálták. Ez arra elég, hogy egy naponta 10-szer újraírt programot mintegy 27 évig gond nélkül tároljon.

SRAM[szerkesztés]

Az SRAM (static random-access memory; statikus tetszőleges hozzáférésű memória) tárolja a programban definiált belső változókat. Az SRAM - szemben a flash-memóriával - árammentes állapotban nem őrzi meg a tartalmát, ezért minden bekapcsolást követően a program újradefiniálja a változókat és azok az ott meghatározott "alapértelmezett" értékükkel kerülnek az SRAM-ba.

EEPROM[szerkesztés]

Az EEPROM (Electrically Erasable Programmable Read-Only Memory, programozható, törölhető, csak olvasható memória) a board-ok nem felejtő változómemóriája. Ez - hasonlóan a Flash-hez - kikapcsolás során is megőrzi a tartalmát, de - és szintúgy, mint a Flash esetén - "csak" 100.000 írásciklusra van hitelesítve, azaz például a ciklikus adatírásra nem igazán alkalmas. Ráadásul egy kicsit lassabb is a kezelése, mint a "normál" SRAM-é. Ezekből a technikai jellemzőkből adódóan az EEPROM az alábbi funkciókra alkalmazható:

  • konfiguráció(k) letárolása
  • indulási alapbeállítások mentése
  • újraindulásoktól független számlálók, értékek, gyüjtött értékek (pl. Üzemóraszámláló) mentése

Az Arduino TTL szintjei[szerkesztés]

A logikai magas (HIGH) és alacsony (LOW) szinteket alkalmazó (digitális) elektronikai berendezések többnyire az un. TTL logika (Transistor-Transistor Logic) alapján definiálják a magas/alacsony jelekhez köthető feszültségszinteket. Ezektől a szintektől az Arduino logikai szintjei némileg eltérnek:

  • VOH: Minimális kimeneti tápfeszültségszint. Efölött a TTL eszköz HIGH jelet biztosít.
  • VIH: Minimális bemeneti feszültségszint a magas (HIGH) jelhez.
  • VIL: Maximális bemeneti feszültségszint az alacsony (LOW) jelhez.
  • VOL: Maximális kimeneti feszültsége egy alacsony (LOW) jelhez.

A letakart részeken a bemenet kiértékelése (HIGH vagy LOW) bizonytalanná válik.

Míg a program-logikai szinteket a true (igaz, 1) és false (hamis, 0) konstansokkal, addig a lábak állapotát a HIGH (magas, 1) illetve a LOW (alacsony, 0) konstansokkal lehet jellemezni.

A HIGH állapot egy jel olvasása esetén az 5V-os bemeneteken 3V jelszint felett, míg a 3,3V bemeneteken 2,0V felett jelentkezik. A LOW állapotok 5-os board-oknál 1,5V alatt, 3,3V-os boardoknál kb. 1,0V alatt jelentkeznek.

A köztes feszültségszinteket (5V-os boardoknál 1,5V - 3,0V, 3,3V-os board-oknál 1,0V - 2,0V) érdemes kerülni, mert a bemeneti állapot bizonytalanná válik.

Amennyiben a bemeneti felhúzóellenállás előzőleg aktiválásra került az adott lábon, akkor onnan jó eséllyel soha nem fogunk HIGH állapotot olvasni, lásd: digitalRead().

Kimenetek esetén a HIGH állapot kiadását követően a láb a maximális feszültségszintet veszi fel, azaz 3,3V-os board-oknál a 3,3V-ot, az 5V-osoknál az 5V-ot.

Amennyiben előzően a belső felhúzóellenállást aktiváltuk, a kimeneti feszültség is HIGH jel esetén az 5V helyett kevesebb (kb. 3,3V) lesz, lásd: digitalWrite().

A lábak terhelhetősége[szerkesztés]

Az Arduino-k (egyszerű konstrukciójuknál fogva) nem igazán terhelhetők, és ezzel minden nagyobb áramot igénylő vezérlésnél (szolenid szelepek, relék,..) figyelembe kell venni. Komolyabb túlterhelés esetén a board tönkremegy, kisebb (és rövid idejű) túlterhelés esetén lekapcsol. Rosszul méretezett relévezérlés esetén előfordulhat, hogy az Arduino ki-be kapcsolgat (a relék ennek megfelelően "klattyognak") - ilyen esetben érdemes átgondolni a board terhelését.

Főbb terhelhetőségi határértékek (ezek típusonként változhatnak):

  • Lábak terhelhetősége az UNO esetén (5V): 20 mA
  • Lábak terhelhetősége az Mega board esetén (5V): 40 mA
  • Lábak terhelhetősége (3,3V esetén): 10 mA
  • Az összes láb (Vcc, GND) maximális terhelhetősége (UNO): 200 mA
  • Az összes láb (Vcc, GND) maximális terhelhetősége (Mega): 400..800 mA

Lábak felhasználása[szerkesztés]

  • A „láb0” (pin0) és „láb1” (pin1) a soros kommunikációhoz van kötve, így amennyiben információt akarunk kapni a board-tól, és használjuk a "Serial.print" utasítást, hogy a soros monitorra információt küldjünk, ezek a lábak erre az időre digitális ki-bemenetként nem használhatók. Lehetőség szerint ne is definiáljuk ezeket digitális csatornaként, vagy ha ez nem meg, mert kifogytunk a lábakból, akkor olyan funkciót irányítsunk ide, melyről le tudunk mondani a soros vonal használatának az idejére.
  • Az analóg pin-eket minden további nélkül fel lehet használni digitális portként, ilyenkor például az Uno esetén pin 14..19-ként kell rájuk hivatkozni.

Arduino ISP[szerkesztés]

Az ISP (In-system programming) port, ami jellemzően az Arduino (és kompatibilis) kártyákra van integrálva, lehetőséget biztosít arra, hogy az USB/bootload megkerülésével törtsünk le programot a kártyára. Emellett kommunikációs lehetőséget is biztosít SPI kommunikációra, például kártyák között.

Ráadásul ezek a lábak az IO portok megfelelő lábaival (lásd lent) is párhuzamosan vannak kötve, így itt egyszerűen csak össze vannak "csoportosítva" a letöltésekhez. Lehetőség van arra is, hogy egy Arduino kártyát alkalmazunk arra, hogy más Arduino-kra programokat töltsünk fel az ISP-n keresztül.

Arduino ISP port neve rövid leírás
MISO Master In Slave Out masterként bemenet, slaveként kimenet
VTG 5V betáp 5V+
SCK Serial Clock soros órajel, SPI-nél a master adja
MOSI Master Out Slave In masterként kimenet, slaveként bemenet
RST Reset reset
GND 0V 0V

Arduino SPI[szerkesztés]

Az Arduino kártyákon egyik gyakran alkalmazott kommunikáció az SPI. Az Arduino-kon az ISP csatlakozómodul is SPI-t alkalmaz, ez viszonylag egyszerűen projektálható (az "SS" itt nem kapott helyet):



Az alapértelmezett portok a kommunikációhoz a különböző board-okon az alábbiak:

kártya neve SPI SS

(kiválasztás)

SPI MOSI SPI MISO SPI SCK
Arduino UNO 10 11 12 13
Arduino Mega 53 50 51 52
Arduino Nano D10 D11 D12 D13

Arduino SPI alkalmazások[8][szerkesztés]

  • AI-Thinker LoRa 433MHz modul (lásd: LoRa)
  • Arduino Micro SD kártyamodul
  • Kétirányú 16 bites I/O bővítő I²C / SPI soros interfész (MCP23017 IC-vel)
  • NRF24L01 + PA + LNA modul

Arduino ISR[szerkesztés]

Az ISR (interrupt service routine) (magyarul: megszakításkezelés) funkció a gyorsan változó állapotú bemenetek felügyeletére lett kifejlesztve. Ezek a megszakítások jellemzően a gyors impulzusok (Hall-impulzusok - például átfolyásmérők, áramjel-impulzusok) számlálására vagy figyelésére alkalmasak, függetlenek a program futásciklusától.

Szoftver oldalról ezeket a jeleket az attachInterrupt() funkcióval kell lekezelni, és csak az erre a célra kijelölt portokon lehet ezeket a gyors jeleket beolvasni:

kártya interrupt-ra kijelölt digitális portok
Arduino Uno, Arduino Nano, Mini, egyéb 328-alapú 2, 3
Arduino Mega, Mega2560, MegaADK 2, 3, 18, 19, 20, 21
Micro, Leonardo, egyéb 32u4-alapú 0, 1, 2, 3, 7
Wemos D1 az összes digitális kimenet (kivéve a D0)

Arduino PWM[szerkesztés]

A PWM (pulse-width modulation) egy olyan jelképzési forma, mellyel a digitális kimeneten analóg kimeneti jeleket képezhetünk, azaz ez egy digitális-analóg konverter funkció. A PWM kimenetek vezérlését az Arduino-knál az analogWrite() funkcióval lehet végezni. A kijelölt - ~-lal jelölt - PWM digitális kimeneteken 980 Hz-es frekvencia érhető el, a többin pedig 490 Hz.

Board kijelölt PWM kimenetek
A legtöbb, ATmega168-as vagy ATmega328-as board-oknál

Arduino Uno, Arduino Nano

3., 5., 6., 9., 10. és 11. pin
Arduino Mega 2..13. és 44..46. pin
Wemos D1 az összes digitális kimenet (kivéve a D0)
régebbi board-oknál 9, 10 és 11. pin

Arduino AREF pin[szerkesztés]

Az AREF pinen keresztül, az analogReference() funkción keresztül az analóg bemenethez használt külső (type: EXTERNAL) referenciafeszültséget (azaz a bemeneti tartomány maximális értékét) lehet beállítani.

Arduino soros kommunikáció[szerkesztés]

Az Arduino board-ok alapértelmezett kommunikációja a soros (UART), melyet az USB-n keresztül folytatnak a programozókészülékkel vagy a kommunikációs partner PC-vel. Az USB porttal párhuzamosan vannak kötve a board-ok TX és RX lábai is, így amennyiben soros kommunikációt használ, ezeket a lábakat nem használhatja digitális portként.

Ez a csatorna használható más UART kommunikációra is, például RS-232-re, de ebben az esetben ügyelni kell a feszültségszintekre, ami az RS-232 esetén jellemzően ±12V. Valamennyi Arduino board-nak legalább egy soros (UART) portja van, ezeknek a láb-kiosztása:

board soros kommunikáció láb
Arduino Uno, Nano Rx←0, Tx→1
Arduino Mega, Due Serial1: pin 19 (RX) pin 18 (TX), Serial2: pin 17 (RX) pin 16 (TX), Serial3: pin 15 (RX) pin 14 (TX)

Arduino I²C[szerkesztés]

Az Arduino kártyákon az egyik leggyakrabban alkalmazott kommunikáció az I²C. Az alapértelmezett portok a kommunikációhoz a különböző board-okon az alábbiak:

kártya neve SDA (adat-port) SCL (órajel-port) megjegyzés
Arduino UNO A4 A5
Wemos D1 A4 (SDA) A5 (SCL) az összes digitális kimenet (kivéve a D0) alkalmazható I²C-re

Az Arduino WIRE könyvtárának a leírása (ez valósítja meg az I²C kommunikációt) a WIRE library funkció valósítja meg.

További olvasnivalók, linkek[szerkesztés]

Jegyzetek[szerkesztés]

Források[szerkesztés]