Arduino
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.
Arduino | |
Arduino Uno Revision 3 | |
Típus | egykártyás mikrovezérlő |
Processzor | Atmel AVR, ARM Cortex-M, Intel Curie |
Operációs rendszer | nincs (Optiboot Bootloader) |
Arduino weboldala | |
A Wikimédia Commons tartalmaz Arduino témájú médiaállományokat. |
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ésAz 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ésBoard-ok
szerkesztésAz 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ésAz 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ésTí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ésFlashmemória
szerkesztésA 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ésAz 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ésAz 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ésA 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ésAz 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ésAz 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ésAz 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ésAz 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ésA 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ésAz 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ésAz 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ésAz 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- Hivatalos Arduino oldal
- OB121 magyar nyelvű Arduino oldal Archiválva 2020. augusztus 7-i dátummal a Wayback Machine-ben
- Magyar nyelvű teljes Arduino utasítás-referencia
- Érdekes Arduino projektek
- Arduino oktatóanyagok
- 60 nap alatt Arduino: az ingyenes magyar nyelvű tanfolyam
- TavIR: Mikrokontroller világ - Arduino tippek-trükkök
- Mikrovezérlős rendszerfejlesztés C/C++ nyelven - Arduino platform (CC BY-SA 2.5 licenc alatt terjesztett, kereskedelemben is kapható könyv) Archiválva 2013. május 15-i dátummal a Wayback Machine-ben
- Programozható elektronikák[halott link] (A mikrovezérlős rendszerfejlesztés könyv utódja)
- https://www.arduino.cc/en/Main/GenuinoBrand Archiválva 2016. január 13-i dátummal a Wayback Machine-ben
Jegyzetek
szerkesztés- ↑ https://www.arduino.cc/en/Main/FAQ
- ↑ https://www.arduino.cc/en/Main/ArduinoBoardUno
- ↑ https://www.arduino.cc/en/Main/ArduinoBoard101
- ↑ https://www.arduino.cc/en/Main/ArduinoBoardMicro
- ↑ https://www.arduino.cc/en/Main/ArduinoBoardMega2560
- ↑ https://www.arduino.cc/en/Main/ArduinoBoardZero
- ↑ https://www.arduino.cc/en/Main/ArduinoMKR1000
- ↑ hu:arduino:comm_example [OB121]. www.ob121.com. (Hozzáférés: 2020. február 8.)
Források
szerkesztés- Hivatalos Arduino oldal
- OB121: Arduino Archiválva 2020. augusztus 7-i dátummal a Wayback Machine-ben