Oldalforrás megtekintése Korábbi változatok Hivatkozások Exportálás PDF-be Share on ... Google+ Twitter LinkedIn Facebook Pinterest Telegram Tartalomjegyzék Arduino Arduino board-ok Néhány Arduino board összevetése Az Arduino board-ok memóriatípusai Flash memória SRAM EEPROM Arduino IDE Arduino OTA Arduino API Arduino Bootloader Sketch Arduino és USB FTDI (vagy CH340G) konverter TTL logikai szintek Pin-ek terhelhetősége Pin-ek felhasználása Arduino ISP/ICSP Arduino ISR Példák az interrupt-hívásra Arduino PWM Arduio AREF pin Arduino kommunikáció Arduino soros kommunikáció Arduino hardveres soros kommunikáció Arduino szoftveres soros kommunikáció A szoftveres soros kommunikáció korlátai Adatvesztés a szoftveres soros kommunikáció során Szimultán többszörös szoftver soros kommunikáció Arduino I²C Arduino SPI Arduino 1-wire Arduino Ethernet 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 Arduino board-ok 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. Néhány Arduino board összevetése TípuschipCPU speedTápÜzemi fesz.Digitális pinek száma (pwm pinek)Analóg pinek számaFlash memóriaSRAM memóriaEEPROM méreteExtrá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: ATmega16816 MHz7..12V5V14 (6)832 KB 16 KB2 KB 1 KB1 KB 512 ByteMini-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 MHz6..20V3,3V 5V14 (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 32KB1KB512 byte 1KB- Digispark---5V141016KB2KB1KB- RoboRED---5V/3.3V14632KB2KB1KB- ATmega1280ATmega1280-5V5416128KB8KB4KB- Arduino Leonardo--5V201232KB2.5KB1K- Arduino Due--3.3V5412512KB96K-- ChipKIT Max32Diligent-3.3V8316512KB128KB-- Az Arduino board-ok memóriatípusai 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) Flash memória Ez 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 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. SRAM 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. EEPROM 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ő: I²C-n keresztül elérhető EEPROM IC-vel: AT24C256 I²C EEPROM IC és modul SD kártyával: Micro SD kártyamodul EEPROM-ot használó projektek: nodemcu_compact_1: nodeMCU compakt 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: Az Arduino IDE telepítése lépésről lépésre Az Arduino IDE magyarra kapcsolása Felmerülő problémák az Arduino csatlakoztatása kapcsán Arduino OTA 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 API 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. Arduino Bootloader 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. Sketch 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. Arduino és USB 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: Az Arduino csatlakoztatása a PC-hez Felmerülő problémák az Arduino csatlakoztatása kapcsán 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 (vagy CH340G) 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. TTL logikai szintek 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 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(). Pin-ek terhelhetősége 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. Pin-ek felhasználása 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 ISP/ICSP 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: 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 Arduino ISR 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ó: attachInterrupt() detachInterrupt() interrupts() noInterrupts() Példák az interrupt-hívásra YF-S201 áramlásmérés Arduino PWM 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. Arduio AREF pin 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 maximumP2P kommunikáció, 1 master + 1 slaveelméletileg 128 állomáselméleti korlát nincs, gyakorlatilag kb. 150Az 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 m20 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ödikI²C1-WireSPI szenzorok-I²C1-WireSPI a kommunikáció általános leírása-I²C1-WireSPI Arduino soros kommunikáció Arduino hardveres soros kommunikáció 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ó Arduino szoftveres soros kommunikáció 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 Arduino I²C 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 Arduino SPI 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): 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 Arduino 1-wire 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ó. Arduino Ethernet 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 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