hu:arduino:start

No renderer 'pdf' found for mode 'pdf'

Arduino

Arduino Az Arduino egy szabad szoftveres, nyílt forráskódú elektronikai fejlesztőplatform. Alacsony ára, széleskörű bővítési lehetőségei és „nyitottsága” világszerte nagyon népszerűvé tette. Habár az Egyesült Államokon kívül hivatalosan csak a Genuino testvérmárka termékeit lehet kapni, ennek ellenére a platformra mindenki az Arduino néven hivatkozik, itt az OB121-en sem fogok ettől a szokástól eltérni.

Az Arduino-val kapcsolatos információk, szoftverpéldák és könyvtárak a termék ismertetőoldalán találhatók meg.

A programokat nyílt (c++ vagy arduino native) forráskódú fejlesztői rendszerekkel lehet megírni és fordítani (az „alap”-szoftver például innen tölthető le) elsősorban az USB-n keresztül az un. Board-okra.

A Boardok az Arduino elsődleges hardveresztközei, ezek futtatják a programot és ezek bővíthetők elsősorban könnyen a board-okhoz illeszthető shield-ekkel, vagy az io csatlakozókon kívül szinte bármilyen egyéb hardvereszközökkel.

A board-okat és a bővítőeszközöket jelenleg ontja a sok különféle gyártó, és kínai internetoldalakról fillérekért is megszerezhetők ezek az eszközök, ezeknek az ismertetése található itt, kategóriákra bontva, illetve HW-típusonként is kereshetők ebben a jegyzékben: OB121.com hardver-index.

Arduino referenciák: Arduino funkciók, Arduino változók, Arduino struktúrák
Arduino szoftver: Arduino szoftver alapok, Arduino szoftvermegoldások, Arduino könyvtárak, avr-libc, Wemos D1 Wifi
Arduino hardvermegoldások: Kapcsolók, nyomógombok, IO bővítőmodulok, EEPROM, Relé-Modulok, DC Motorvezérlés, Szervovezérlés, Léptetőmotor vezérlés, Micro SD kártyamodul, USB vezérlőmodul, RFID (Wiegand), MP3 modulok, Lézer modulok, Joystick
Arduino Kommunikáció: I²C, SPI, 1-Wire, Wifi,.., nRF24, Bluetooth-Modulok, IR, Board to board, Rádiókommunikáció, Arduino LoRaWAN
Arduino szenzortechnika: Időmérés, Hőmérsékletmérés, Páratartalom-mérés, Nedvesség / esőszenzor, Súlymérés, Távérzékelés, Árammérés, Mozgásérzékelés, Nyomásérzékelés, Áramlásmérés, Elmozdulás / vibráció, Fény- és színérzékelés, Mágneses tér érzékelés, Levegő összetétel
Arduino HMI/LED: LiquidCristal LCD Modulok, 7 szegmenses kijelzők, LED / RGB LED vezérlés, Címezhető RGB LED-ek
Boardok: Arduino board-ok, Wemos board-ok, Arduino shield-ek

Az Arduino eleinte az Uno board-ot jelentette, de fejlődéstörténete töretlen. Egyrészt az olasz Arduino-s fejlesztőgárda is folyamatosan dob a piacra új típusokat, másrészt, mivel a típus open-project, azaz a hardvere szabadon másolható és módosítható, hihetetlen széles palettán mozognak az Arduino kompatibilis klónok is. A teljes Arduino-világot szinte lehetetlen áttekinteni, én is csak az általam ismert rész felületes összefoglalására vállalkozok ezen az oldalon.

TípuschipCPU
speed
TápÜzemi
fesz.
Digitális
pinek száma
(pwm pinek)
Analóg
pinek száma
Flash
memória
SRAM
memória
EEPROM
mérete
Extrák
Arduino UnoATmega328P16 MHz6..20V5V14 (6)632 KB2 KB1 KB -
Arduino Mega2560ATmega256016 MHz6..20V5V54 (15)16256 KB8 KB4 KB -
Arduino Nano3.x: ATmega328,
2.x: ATmega168
16 MHz7..12V5V14 (6)832 KB
16 KB
2 KB
1 KB
1 KB
512 Byte
Mini-B USB csatlakozó
Arduino MicroATmega32u416 MHz7..12V5V20 (7)1232 KB2.5 KB1 KB5 hardveres megszakítás, teljes sebességű USB
Keyes Pro MicroATmega32u48 MHz7..9V3.3V12 (5)432 KB2.5 KB1 KB5 hardveres megszakítás, teljes sebességű USB
Pro Micro 5VATmega32u416 MHz7..9V5V12 (5)432 KB2.5 KB1 KB -
Arduino MiniATmega328P3,3V: 8MHz
5V: 16 MHz
6..20V3,3V
5V
14 (6)832 KB2 KB1 KB2 hardveres megszakítás, nincs USB portja
STM32F103STM32 32-bit Arm Cortex72 MHz5V2.7V..3.6V161664 KB20 KB - USART / I2C / SPI / USB / CAN / DMA
STM32F401STM32 32-bit Arm Cortex25 MHz5V2.7V..3.6V1616256 KB64 KB - USART / I2C / SPI / USB / CAN / DMA
Wemos D1ESP8266EX-9..12V3.3V11 (11)14 KB2 KB1 KB- integrált ESP8266
DuemilanoveATmega168
ATmega328-
6..20V5V14 (6)616KB
32KB
1KB512 byte
1KB
-
Digispark---5V141016KB2KB1KB-
RoboRED---5V/3.3V14632KB2KB1KB-
ATmega1280ATmega1280-5V5416128KB8KB4KB-
Arduino Leonardo--5V201232KB2.5KB1K-
Arduino Due--3.3V5412512KB96K--
ChipKIT Max32Diligent-3.3V8316512KB128KB--
TípuschipCPU
speed
TápÜzemi
fesz.
Digitális
pinek száma
Analóg
pinek száma
Flash
memória
SRAM
memória
EEPROM
mérete
Extrák
Arduino MKR FOX 1200SAMD21 Cortex32.768 kHz (RTC)
48 MHz
5V3.3V81256 KB32 KBnoWifi on board

Memóriafelosztás az ATmega328P-ben

Memóriafelosztás az ATmega328P-ben

A “Bootloader” a flash memória végén, a kód elől foglal nagyjából 512 bájtot. Ez a terület a kód számára felhasználható, ha nem az USB-s bootloader-t használjuk kódletöltésre, hanem a ICSP-re csatlakoztatunk kódletöltő hardvert. (lásd ICSP modulok)

Ez számít az Arduino-k 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 egy 32 kb-s memória esetlén csak 24-30 kb-val 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.

hu: statikus véletlen hozzáférésű memória
en: static random-access memory

Leegyszerűsítve, az SRAM tárolja a programban definiált belső változókat. Az SRAM - szemben a flash-memóriával - árammentes állapotában 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 default értékükkel kerülnek az SRAM-ba.

hu: programozható, törölhető, csak olvasható memória
en: Electrically Erasable Programmable Read-Only Memory

Az EEPROM 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

A különböző Arduino board-ok eltérő méretű EEPROM-mal rendelkeznek:

  • ATmega168: 512 Bytes
  • ATmega8: 512 Byte
  • ATmega328P: 1024 Byte
  • ATmega32U4: 1024 Byte
  • ATmega1280: 4096 Bytes
  • ATmega2560: 4096 Bytes

Az EEPROM többféle módon is bővíthető:

EEPROM-ot használó projektek:

Arduino IDE

Az Arduino IDE egy JAVA nyelven írt feljesztői rendszer, mellyel miután programogokat írunk az Arduino-ra, ezekett lefordítja és debug-olja, majd le is tölti a kártyákra. A letöltés leggyakrabban az USB porton keresztül történik, mely szinte minden Arduino board-on megtalálható, de lehetőség van ISP vagy OTA letöltésre is, ha az adott kártya is biztosítja ezeket a lehetőségeket.

Az Arduino-k egy előre beégetett bootloader-rel rendelkeznek, ez teszi lehetővé a kódok letöltését külső hardver nélkül, egyszerűen az STK500 protokollon keresztül.

Amennyiben ez szükséges, a fenti bootloader az ICSP (In-Circuit Serial Programming) (→ISP) csatlakozó használatával megkerülhető.

Az Arduinók programozásához természetesen nagyon sok lehetőségünk van a meglehetősen fapados (de hatékony és ingyenes) Arduino IDE-n kívül is. használható például a VisualStudio is erre a célra egy Arduino bővítmény telepítése után.

Kapcsolódó oldalak:

en: Over the Air

Az arduino is lehetőséget ad a programok wifin, vagy akár ethernet-shield-en keresztüli letöltésére. Különösen jó lehetőséget kínálnak ennek a funkciónak a kiaknázására az ESP-modulok (ESP8266 vagy ESP32), amiket közvetlenül lehet integrálni az Arduino board-okkal, és így a Wifin keresztüli letöltés megvalósításának nagy részét ezek a modulok viszik el.

Az OTA telepítését az Arduino IDE-ben Eszközök / Könyvtárak kezelése pont alatt a rendelkezésre álló könyvtárak listájából lehet kiválasztani:

Arduino OTA telepítése

en: Application Programming Interface

Az Arduino funkcionalitása a könyvtárrendszeren keresztül bővíthető. A könyvtárak alkalmazása memóriaigényes, de alapos kiválasztásukkal jól optimalizálható a memóriaterhelés, és a programozás jelentős részét is meg lehet spórolni az alkalmazásukkal. Vannak standard könyvtárak, például a Wire, AVR_C, String,.., de rendkívül sok, nagyon alaposan kidolgozott könyvtár tölthető le a Github-ról is. A szenzorok ismertetésénél szinte minden esetben a Github könyvtárakra hivatkozok.

Az Arduino Boardokon előre betöltött és az Arduino IDE-vel kompatibilis speciális program, amely lehetővé teszi a programok board-okra való feltöltését speciális eszközök nélkül; általában USB-n keresztül.

Az Arduino-n futatható programok neve a sketch (vázlat). A sketch-eket .ino fájlokba lehet menteni, vagy onnan betölteni. Az Arduino IDE-ben sok (alap) példaprogram található a File / Examples pont alatt, de szinte minden feltelepített könyvtár is tartalmaz példaprogramokat (ezek szintén a File / Examples pontban nyithatók a telepítésük után, a listán alul találhatók).

Sok sketch soros kapcsolaton keresztül kommunikál a számítógéppel. Az Arduino IDE beépített soros monitorral vagy terminállal rendelkezik, hogy segítsen ezeknek az adatoknak a megjelenítésében. Emellett adatokat is küldhet a board-ra a Monitor segítségével. A soros monitort az „Eszközök” → „Soros monitor” pont alatt találja. Ennek indítása általában újraindítja az Arduino board-ot. Győződjön meg arról, hogy a sebességet, vagyis a baudrátát a megfelelő értékre állította. Ha ezt nem teszi meg, akkor vagy csak szemetet vagy semmit nem fog itt látni. A jellemző adatátviteli sebességek: 9600 vagy 115.200 baud.

ATmega328 IC

Az Arduino board-okat alapvetően PC-nkről az USB porton keresztül programozhatjuk (lásd fent, Bootloader, de van jópár más megoldás is..), és a program futása során a serial információk is ezen keresztül érkez(het)nek a PC-nkre. A legtöbb board a klasszikus FTDI vagy AtMega16U2 USB kommunikáció-IC-t tartalmazza a kapcsolatra, de előfordulhat, hogy az un. (kínai) CH340..CH341 IC-ket építettek be. Ezeknek mindegyike más-más drivert igényel, erre ügyelni kell az első eltérő board alkalmazásánál, mert előfordulhat, hogy a PC-nk nem látja az Arduino-t.

A legtöbb Arduino USB port rendelkezik egy túláramvédelemmel (resettable polyfuse), mely az 500 mA-t meghaladó áramfelvétel vagy rövidzárlat esetén automatikusan leold.

Arduino USB UART konverter típusok:

  • FTDI: A korai Arduino-k konverter-típusa, túl drágának bizonyult. Külső konverterként továbbra is szokás használni (az ISP-re csatlakoztatva)
  • Atmega8U2: Az első szériás Uno-k konvertere, az R2 verzióig
  • AtMega16U2: Aktuálisan a legtöbb (hivatalos) Arduino board UART konvertere
  • CH340/CH340G/CH341: a kínai gyártású Arduino klónok jellemző konvertere, a driverek letöltése némileg körülményes

Kapcsolódó oldalak:

Igazság szerint a legegyszerűbb az összes (CH340, CH341) drivernek a telepítése (lásd lent). Helyet igazán nem foglalnak, de ha szükség van rájuk, a rendszer automatikusan eléri ezeket, és ezekkel azonosítani tudja a csatlakoztatott board-okat. Első nekifutásra érdemes csak az újabb fejlesztésű CH341-et telepíteni.

Letöltések:

CH340 driver (régebbi Windows verziókhoz):

Direkt letöltés: CH340 Windows driver

CH341 driver (Windows 10, 32/64 bit) (CH340G,CH340T,CH340C,CH340N, CH340K, CH340E,CH340B,CH341A,CH341F, CH341T,CH341B,CH341C,CH341U):

Direkt letöltés: CH341 Windows driver
Letöltés a driverfejlesztő oldaláról: http://www.wch.cn/download/CH341SER_ZIP.html

FTDI konverter

Sok esetben a letöltés nem lehetséges (vagy nem a legjobb megoldás) az USB-n keresztül. Az Arduino Mini és az Arduino Pro Mini sorozat például a helytakarékosság miatt eleve nem rendelkezik USB-csatlakozóval, így ezeknél elkerülhetetlen a külső letöltő alkalmazása.

A legegyszerűbb megoldás egy FTDI konverter beszerzése, így a PC irányából ugyanúgy USB-n történik a csatlakoztatás, csak a board-hoz kell megfelelő módon illeszteni az átalakítót.

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:

TTL logikai szintek

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 pin-ek á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 pin-en, 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 pin 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().

Az Arduino-k (már csak 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 egyszerűen meghal, 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 egyszerűen ki-be kapcsolgat (a relék meg ennek megfelelően klattyognak) - nos ilyen esetben érdemes átgondolni a board terhelését.

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

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

Tapasztalatom szerint a pineket nem érdemes 15 mA és az egész board-ot (UNO) 150 mA felett terhelni, mert klattyogás lesz a dolog vége.

A nagyobb áramfelvételű fogyasztókat érdemes optóval leválasztott relékkel, solid-state relékkel vagy tranzisztorokkal (triac, TIP120, miegyéb..) leválasztani az Arduino-tól, már csak azért is, mert a túl nagy - előre nem látott - áramokkal (felfutási terhelés, visszaáram, generátoros ezmegaz) szemben a board egyáltalán nem védett, azaz le fog égni.

Az Arduino pinek felhasználására van pár apróbb tudnivaló és trükk, ezek számos megmagyarázhatatlan problémának is az okai adott esetben:

  • A pin0 és 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 serial monitorra információt küldjünk, ezek a pinek 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 pin-ekből, akkor olyan funkciót pakoljunk ide, melytől el tudunk köszönni a serial használatának az idejére.
  • Az analog pin-eket minden további nélkül fel lehet használni digitális portként, ilyenkor egyszerűen, például az Uno esetén pin 14..19-ként kell rájuk hivatkozni, mint az a lenti ábrán is látható.
  • Saját tapasztalatom az, hogy már a tervezésnél érdemes kijelölni a szabadon hagyandó portokat. Mivel kommunikációra leginkább az I²C-t használom, ezért az Uno esetén az A4-et és A5-öt erre a kommunikációra tarom fel. Ugyanígy - főleg a teszteléshez - érdemes számolni a soros kommunikációval és az ahhoz tartozó portokkal, azaz az Uno esetén a 0 (Rx) és 1 (Tx) pinekkel.

Arduino UNO pinek

Az ISP (In-circuit Serial Programming) az áramköri soros programozást, míg az ICSP (In Circuit Serial Programming) az áramkör soros programozását jelenti. Bármely olyan megoldást, mely lehetővé teszi a mikrovezérlő programozását egy soros protokollt használó áramkörben, ISP-nek vagy ICSP-nek is nevezhetjük.

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. A lehetséges portok lábkiosztásai:

Arduino ISP lábkiosztás

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 portneverövid leírás
MISOMaster In Slave Outmasterként bemenet, slaveként kimenet
VTG5Vbetáp 5V+
SCKSerial Clocksoros órajel, SPI-nél a master adja
MOSIMaster Out Slave Inmasterként kimenet, slaveként bemenet
RSTResetreset
GND0V0V

Bővebben: Arduino ICSP modulok

en: interrupt service routine

Az ISR (interrupt service routine) (magyarul megszakításkezelés) funkció a gyorsan váltakozó állapotú bemenetek felügyeletére lett kifejlesztve. Ezek a megszakítások jellemzően a gyors impulzusok (Hall-impulzusok - á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ártyainterrupt-ra kijelölt digitális portok
Arduino Uno, Arduino Nano, Mini, egyéb 328-alapú2, 3
Arduino Mega, Mega2560, MegaADK2, 3, 18, 19, 20, 21
Micro, Leonardo, egyéb 32u4-alapú0, 1, 2, 3, 7
Wemos D1az összes digitális kimenet (kivéve a D0)

A interrupthívásokhoz szükséges funkciók leírása itt található:

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 érhető el a PWM funkció.

Boardkijelölt PWM kimenetek
A legtöbb, ATmega168-as vagy ATmega328-as board-oknál
Arduino Uno, Arduino Nano*
3, 5, 6, 9, 10, 11 pin, pin 5-6: 980 Hz, a többi: 490 Hz
Arduino Mega2..13. és 44..46. pin
Wemos D1az összes digitális kimenet (kivéve a D0)
Arduino Micro0, 1, 2, 3, 7
régebbi board-oknál9, 10 és 11. pin

*: az ATmega168-as vagy ATmega328-as board-oknál:

  • timer0: pin 5 és 6, 8-bites PWM
  • timer1: pin 9 és 10, 16-bites PWM
  • timer2: pin 11 és 3, 8-bites PWM

Olyan szervoknál, amik 16 bites felbontást igényelnek, előfordulhat, hogy csak a 9. és 10. pin fog működni!

Az Arduino Micro-val csak 8-bites PWM valósítható meg.

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 kommunikáció

Az Arduino rendszereknél a leggyakrabban használt közvetlen* kommunikációs megoldások összevetése:

*: az Ethernet, Wifi, Can,.. ebben az értelemben nem közvetlen kommunikáció, mert valamilyen átalakítót igényelnek, és az átalakítók csak a lenti kommunikációs formákkal érhetők el.

kommunikációs megoldásSoros (UART)I²C1-WireSPI
partnerek / slave-ek
száma maximum
P2P kommunikáció,
1 master + 1 slave
elméletileg 128 állomáselméleti korlát nincs,
gyakorlatilag kb. 150
Az SS pinek száma határozza meg.
SS nélkül 1 master és 1 slave
áthidalható távolság (≈)9600 baud: 2-3 m
300 baud: >100 m (sodort érpár)
100 Kbaud: 1 m
10 Kbaud: 6-8 m
20 szenzorral max. 100 mmax. 5 m
felhasznált pinek száma2: Tx, Rx2: SDA, SCL1: DATA3 vagy 4: SCK, MOSI, MISO, (SS)
korlátozásokPin 0 és 1 használata
esetén a soros letöltés és
a soros monitor nem
működik
I²C1-WireSPI
szenzorok-I²C1-WireSPI
a kommunikáció
általános leírása
-I²C1-WireSPI

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 van kötve a board-ok TX és RX pin-jei is, így amennyiben soros kommunikációt használ, ezeket a pin-eket nem használhatja digitális portként.

Ez a csatorna természetesen 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 pin-kiosztása:

boardsoros kommunikáció pin-jei
Arduino Uno, NanoRx←0, Tx→1
Arduino Mega, DueSerial1: pin 19 (RX) pin 18 (TX), Serial2: pin 17 (RX) pin 16 (TX), Serial3: pin 15 (RX) pin 14 (TX)

Alkalmazása: Serial funkció

A szoftveres soros kommunikációt a SoftwareSerial könyvtár alkalmazása teszi lehetővé. Míg a HW soros kommunikáció HW komponenseket alkalmaz az UART-hoz, és ez működik más feladatok elvégzése közben is (amíg van hely a 64 byte méretű pufferben), addig a szoftver soros kommunikáció szoftverből megy. Ez nyilván a többi szoftver végrehajtásának a rovására megy, de egyszerre több soros kommunikációt tesz lehetővé, akár 1115.200-as sebességgel.

Az ehhez szükséges SoftwareSerial.h innen tölthető le: http://arduiniana.org/libraries/newsoftserial/

A szoftveres soros kommunikáció korlátai

  • Ha több szoftver soros portot kell használni, akkor egyidejűleg csak egy tud fogadni adatokat
  • A Mega és a Mega 2560 nem minden pinje alkalmas a szoftver soros kommunikációra, az RX-hez az alábbi pinek használhatók: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 ( 63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69).
  • A Leonardo esetén az RX-hez csak a következő pinek használhatók: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).
  • Az Arduino Genuino 101 estén az RX maximális sebessége 57.600 bps lehet, és a pin 13 RX-ként nem használható.

Adatvesztés a szoftveres soros kommunikáció során

Ha hosszú üzeneteket küld vagy fogad a szoftveres soros kommunikációval, előfordulhat, néhány hiányzó karakterrel érkeznek ezek meg. Ennek az oka nem feltétlenül a kódban keresendő. Lehet, hogy a SoftwareSerial receive puffer megtelik és ezután eldobja a karaktereket.

A legegyszerűbb megoldás erre az, ha a szoftver soros pufferét alapértelmezett 64 bájttól 256 bájtra növeli (vagy csak nagyobb méretre, mint 64 bájt):

A PC-n nyissa meg az alábbi fájlt: C:\Program Files (x86) → Arduino → hardware → Arduino → avr → libraries → SoftwareSerial → SoftwareSerial.h és módosítsa az alábbi sort:

// RX buffer size
#define _SS_MAX_RX_BUFF 64  // 64 módosítása például a maximális 256-ra

Szimultán többszörös szoftver soros kommunikáció

Szimultán többszörös szoftver soros kommunikációhoz az alábbi könyvtárt érdemes használni: https://www.pjrc.com/teensy/td_libs_AltSoftSerial.html

Az Arduino kártyákon az egyik leggyakrabban alkalmazott kommunikáció az I²C. Az ehhez szükséges könyvtárakat és a példa-bekötéseket a konkrét moduloknál ismertetem, ezeknek az összefoglalása itt található: Arduino I²C kommunikáció. Az alapértelmezett portok a kommunikációhoz a különböző board-okon az alábbiak:

kártya neveSDA (adat-port)SCL (órajel-port)megjegyzés
Arduino UnoA4A5
Arduino Mega2021
Arduino Nano45
Wemos D1A4 (SDA)A5 (SCL)az összes digitális kimenet
(kivéve a D0) alkalmazható I²C-re
NodeMCU (ESP8266)D2(GPIO4)D1(GPIO5)a D0 nem használható I²C-re

Az I²C általános leírása: I²C
Az Aduino-s I²C megoldások összefoglalása itt található: Arduino I²C kommunikáció.
Az Arduino WIRE könyvtárának a leírása (ez valósítja meg az I²C kommunikációt) itt található: WIRE library funkciók

Az Arduino kártyákon egyik gyakran alkalmazott kommunikáció az SPI. Az ehhez szükséges könyvtárakat és a példa-bekötéseket a konkrét moduloknál ismertetem, ezeknek az összefoglalása itt található: Arduino SPI kommunikáció. Az Arduino-kon az ISP csatlakozómodul is SPI-t alkalmaz, ez viszonylag egyszerűen projektálható (sajnos az SS itt nem kapott helyet):

SPI

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

kártya neveSPI SS
(kiválasztás)
SPI MOSISPI MISOSPI SCK
Arduino UNO10111213
Arduino Mega53505152
Arduino NanoD10D11D12D13
NodeMCU (ESP8266)D8(GPIO15)D7(GPIO13)D6(GPIO12)D5(GPIO14)

Az Aduino-s SPI megoldások összefoglalása itt található: Arduino SPI kommunikáció.

Az Aduino SPI könyvtár leírása: https://www.arduino.cc/en/Reference/SPI

Meg ez is (de bővebb): http://www.gammon.com.au/spi

Az 1-vezetékes busz a Dallas Semiconductor Corp. soros interfészét írja le, amely egy adatvezetéket (DQ) kezel, mely mind tápegységként, mind pedig adó- és vevővezetékként használnak. Az 1-vezetékes kifejezés félrevezető, mivel a kommunikáció földelést (GND) is igényel. Valójában a 1-wire esetén is mindig minimum két fizikai vezetéket használunk (GND, DQ).

Egy összefoglalót a 1-wire kommunikációt alkalmazó Arduino szenzorokról itt talál: Arduino 1-wire kommunikáció.

Az Arduino természetesen alkalmas az etherneten keresztüli kommunikációra, az internetes funkciók elérésére. Az ethernet elérésének a legegyszerűbb módja ehternet modul vagy bővítmény alkalmazása. A modulok és bővítmények jellemzően SPI kommunikációt folytatnak az Arduino boardokkal:

Arduino Uno Ethernet SPI lábkiosztásaArduino Mega Ethernet SPI lábkiosztása
Arduino Uno Ethernet SPI lábkiosztásaArduino Mega Ethernet SPI lábkiosztása

A legtöbb ethernet boardra micro-SD kártyaolvasót is integráltak. Ennek a használata opcionális, de plusz egy pin-t foglal a board-on.

Az aktuális Arduino könyvtárinformációk itt találhatók: https://www.arduino.cc/en/reference/ethernet

A modulok / bővítmények ethernet kommunikációját jellemzően WIZnet W5x00 sorozatú IC-i végzik. Ezeknek a főbb tulajdonságainak összehasnlítása:

FunkcióW5100W5300W5500
Interface Modedirekt, indirekt, SPIdirekt, indirektSPI
Socket-ek száma448
Sebesség (max, MBPS)252515
AdatbuszOnly 8 Bit, DATA[7:0]16/8 Bit, DATA[15:8]/DATA[7:0]16/8 Bit
Címbusz15 PINs, ADDR[14:0]10PINs, ADDR[9:0]10PINs, ADDR[9:0]
Memória mérete(Fix) 16KBytes
TX : 8KBytes, RX : 8Kbytes
(konfigurálható) 128KBytes
TX : 0~128KBytes, RX : 0~128KBytes
(Fix) 32KBytes
TX : 16KBytes, RX : 16Kbytes
  • hu/arduino/start.txt
  • 2022/04/21 15:02
  • ()