hu:arduino:start

Differences

This shows you the differences between two versions of the page.

hu:arduino:start [2020/01/04 22:05]
hu:arduino:start [2022/04/21 15:02] ()
 1:  1:
 +====== Arduino ======
  
 +{{ :wiki:arduino:arduino_uno.jpg?300|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 [[https://www.arduino.cc/|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: [[hu:main:hw_index#ob121com_hardver-index|OB121.com hardver-index]].
 +
 +Arduino referenciák: [[hu::arduino::reference|Arduino funkciók]], [[hu::arduino::variables|Arduino változók]], [[hu::arduino::structs|Arduino struktúrák]]  \\ 
 +Arduino szoftver: [[hu::arduino::soft_basic|Arduino szoftver alapok]], [[hu::arduino::soft_solutions|Arduino szoftvermegoldások]], [[hu::arduino::soft_libs|Arduino könyvtárak]], [[hu::arduino::lib_avr_libc|avr-libc]], [[hu::arduino::d1_wifi_modul|Wemos D1 Wifi]]\\
 +Arduino hardvermegoldások: [[hu::arduino::switch|Kapcsolók, nyomógombok]], [[hu::arduino::io_expand|IO bővítőmodulok]], [[hu::arduino::eeprom|EEPROM]], [[hu::arduino::relay_modul|Relé-Modulok]], [[hu::arduino::dc_motor|DC Motorvezérlés]], [[hu::arduino::servo|Szervovezérlés]], [[hu::arduino::stepper| Léptetőmotor vezérlés]], [[hu::arduino::micro_sd_card|Micro SD kártyamodul]], [[hu::arduino::usb_client|USB vezérlőmodul]], [[hu::arduino::rfid|RFID (Wiegand)]], [[hu::arduino::mp3|MP3 modulok]],  [[hu::arduino::laser|Lézer modulok]], [[hu::arduino::joystick|Joystick]] \\ 
 +Arduino Kommunikáció: [[hu::arduino::comm_example|I²C, SPI, 1-Wire, Wifi,..]], [[hu::arduino::nrf24|nRF24]],  [[hu::arduino::bluetooth_modul|Bluetooth-Modulok]], [[hu::arduino::ir|IR]], [[hu::arduino::board_to_board|Board to board]], [[hu::arduino::radio_comm|Rádiókommunikáció]], [[hu::arduino:lorawan|Arduino LoRaWAN]] \\
 +Arduino szenzortechnika:  [[hu::arduino::rtc|Időmérés]], [[hu::arduino::temperature|Hőmérsékletmérés]], [[hu::arduino::humidity|Páratartalom-mérés]], [[hu::arduino::moisture|Nedvesség / esőszenzor]],  [[hu::arduino::weigh|Súlymérés]], [[hu::arduino::distant|Távérzékelés]], [[hu::arduino::current|Árammérés]], [[hu::arduino::pir|Mozgásérzékelés]], [[hu::arduino::press|Nyomásérzékelés]], [[hu::arduino::flow|Áramlásmérés]], [[hu::arduino::tilt|Elmozdulás / vibráció]],   [[hu::arduino::light|Fény- és színérzékelés]], [[hu::arduino::magnetic|Mágneses tér érzékelés]],  [[hu::arduino::air|Levegő összetétel]]  \\   
 +Arduino HMI/LED: [[hu::arduino::liquidcrystal_modul|LiquidCristal LCD Modulok]], [[hu::arduino::seven_segments|7 szegmenses kijelzők]], [[hu::arduino::arduino_led|LED / RGB LED vezérlés]], [[hu::arduino::adr_rgb_led|Címezhető RGB LED-ek]]  \\ 
 +Boardok: [[hu::arduino::boards|Arduino board-ok]], [[hu::arduino::wemos_boards|Wemos board-ok]], [[hu::arduino::shields|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ípus^chip^CPU \\ 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|
 +^[[hu:arduino:boards#arduino_uno|Arduino Uno]]|[[hu:modul:atmel_avr#atmega328p|ATmega328P]]|16 MHz|6..20V|5V|14 (6)|6|32 KB|2 KB|1 KB| - |
 +^[[hu:arduino:boards#arduino_mega|Arduino Mega2560]]|ATmega2560|16 MHz|6..20V|5V|54 (15)|16|256 KB|8 KB|4 KB| - |
 +^[[hu:arduino:boards#arduino_nano|Arduino Nano]]|3.x: ATmega328, \\ 2.x: ATmega168|16 MHz|7..12V|5V|14 (6)|8|32 KB \\ 16 KB|2 KB \\ 1 KB|1 KB \\ 512 Byte|Mini-B USB csatlakozó|
 +^[[hu:arduino:boards#arduino_micro|Arduino Micro]]|ATmega32u4|16 MHz|7..12V|5V|20 (7)|12|32 KB|2.5 KB|1 KB|5 hardveres megszakítás, teljes sebességű USB|
 +^[[hu:arduino:boards#arduino_micro|Keyes Pro Micro]]|ATmega32u4|8 MHz|7..9V|3.3V|12 (5)|4|32 KB|2.5 KB|1 KB|5 hardveres megszakítás, teljes sebességű USB|
 +^[[hu:arduino:boards#arduino_micro|Pro Micro 5V]]|ATmega32u4|16 MHz|7..9V|5V|12 (5)|4|32 KB|2.5 KB|1 KB| - |
 +^[[hu:arduino:boards#mini|Arduino Mini]]|[[hu:modul:atmel_avr#atmega328p|ATmega328P]]|3,3V: 8MHz \\ 5V: 16 MHz|6..20V|3,3V \\ 5V|14 (6)|8|32 KB|2 KB|1 KB|2 hardveres megszakítás, nincs USB portja|
 +^STM32F103|STM32 32-bit Arm Cortex|72 MHz|5V|2.7V..3.6V|16|16|64 KB|20 KB| - |USART / I2C / SPI / USB / CAN / DMA|
 +^STM32F401|STM32 32-bit Arm Cortex|25 MHz|5V|2.7V..3.6V|16|16|256 KB|64 KB| - |USART / I2C / SPI / USB / CAN / DMA|
 +^[[hu:arduino:wemos_boards#wemos_d1|Wemos D1]]|ESP8266EX-||9..12V|3.3V|11 (11)|1|4 KB|2 KB|1 KB|- integrált [[hu:esp:start#esp8266|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|-|-|
 +^Típus|chip|CPU \\ 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 1200|SAMD21 Cortex|32.768 kHz (RTC) \\ 48 MHz|5V|3.3V|8|1|256 KB|32 KB|no|Wifi on board|
 +===== Az Arduino board-ok memóriatípusai =====
 +
 +{{:hu:arduino:memmap.jpg?500|Memóriafelosztás az ATmega328P-ben}}
 +
 +Memóriafelosztás az ATmega328P-ben
 +
 +<WRAP center round tip 80%>
 +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 [[#arduino_isp|ICSP]]-re csatlakoztatunk kódletöltő hardvert. (lásd [[hu:arduino:icsp_moduls|ICSP modulok]])
 +</WRAP>
 + 
 +==== 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: [[hu:arduino:eeprom#at24c256_i_c_eeprom_ic_es_modul|AT24C256 I²C EEPROM IC és modul]]
 +  * SD kártyával: [[hu:arduino:micro_sd_card#micro_sd_kartyamodul|Micro SD kártyamodul]]
 +
 +**EEPROM-ot használó projektek:**
 +  * [[hu:arduino:projects:nodemcu_compact_1|nodemcu_compact_1]]: nodeMCU compakt
 +
 +{{ :wiki:arduino:arduino_ide_1.png?200|Arduino IDE}}
 +=====  Arduino IDE =====
 +Az Arduino [[hu:comm:comdict#ide|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 [[hu:comm:bus_usb#usb|USB]] porton keresztül történik, mely szinte minden Arduino board-on megtalálható, de lehetőség van [[hu:comm:comdict#isp|ISP]] vagy [[#arduino_ota|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 protokol**lon keresztül.
 +
 +Amennyiben ez szükséges, a fenti bootloader az  **ICSP** (//In-Circuit Serial Programming//) (→[[hu:arduino:start#arduino_isp|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: \\
 +  * [[hu:arduino:soft_basic#az_arduino_ide_telepitese_lepesrol_lepesre|Az Arduino IDE telepítése lépésről lépésre]]
 +  * [[hu:arduino:soft_basic#az_arduino_ide_magyarra_kapcsolasa|Az Arduino IDE magyarra kapcsolása]]
 +  * [[hu:arduino:soft_basic#felmeruelo_problemak_az_arduino_csatlakoztatasa_kapcsan|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: 
 +
 +{{:hu:arduino:ota_bib.png?500|Arduino OTA telepítése}}  
 +
 +==== 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 [[hu:arduino:wire_reference|Wire]], [[hu:arduino:avr_reference|AVR_C]], [[hu:arduino:string_reference|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.
 +
 +{{ :wiki:comm:atmega328ic.jpg?200|ATmega328 IC}}
 +
 +=====  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:** \\
 +  * [[hu:arduino:soft_basic#az_arduino_csatlakoztatasa_a_pc-hez|Az Arduino csatlakoztatása a PC-hez]]
 +  * [[hu:arduino:soft_basic#felmeruelo_problemak_az_arduino_csatlakoztatasa_kapcsan|Felmerülő problémák az Arduino csatlakoztatása kapcsán]]
 +
 +<WRAP center round tip 80%>
 +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.
 +</WRAP>
 +
 +**Letöltések**: 
 +
 +**CH340 driver (régebbi Windows verziókhoz):**
 +
 +Direkt letöltés: {{ :hu:arduino:ch34x_install_windows_v3_4.zip |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: {{ :hu:arduino:ch341ser.zip |CH341 Windows driver}} \\
 +Letöltés a driverfejlesztő oldaláról: http://www.wch.cn/download/CH341SER_ZIP.html \\
 +
 +
 +
 +{{ :wiki:arduino:ftdi_arduino_mini.png?200|FTDI konverter}}
 +==== 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 =====
 +{{anchor:arduino_ttl}}
 +
 +A logikai magas ([[hu:arduino:variables#high|HIGH]]) és alacsony ([[hu:arduino:variables#low|LOW]]) szinteket alkalmazó (digitális) elektronikai berendezések többnyire az un. [[hu:comm:comdict#ttl|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:
 +
 +{{:wiki:arduino:high_low_level_arduino.png|TTL logikai szintek}}
 +
 +**V<sub>OH</sub>**: Minimális kimeneti tápfeszültségszint. Efölött a TTL eszköz HIGH jelet biztosít. \\
 +**V<sub>IH</sub>**: Minimális bemeneti feszültségszint a magas (HIGH) jelhez. \\
 +**V<sub>IL</sub>**: Maximális bemeneti feszültségszint az alacsony (LOW) jelhez. \\
 +**V<sub>OL</sub>**: 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: [[hu:arduino:reference#digitalread|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: [[hu:arduino:reference#digitalwrite|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**
 +
 +<WRAP center round important 80%>
 +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.
 +</WRAP>
 +
 +
 +
 +=====  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 [[#arduino_soros_kommunikacio|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 [[hu:arduino:start#arduino_soros_kommunikacio|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 [[hu:arduino:start#arduino_i_c|soros kommunikáció]]val és az ahhoz tartozó portokkal, azaz az Uno esetén a **0 (Rx)** és **1 (Tx)** pinekkel. 
 +
 +{{:wiki:arduino:uno_pins.png?400|Arduino UNO pinek}}
 +=====  Arduino ISP/ICSP =====
 +{{anchor: arduino_isp}}{{anchor: arduino_icsp}}
 +
 +<WRAP center round todo 80%>
 +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.
 +</WRAP>
 +
 +Az [[hu:comm:comdict#isp|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 [[hu:comm:bus_spi#spi|SPI]] kommunikációra, például kártyák között. A lehetséges portok lábkiosztásai:
 +
 +{{:wiki:arduino:icsp_headers.jpg?400|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 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|
 +
 +Bővebben: [[hu:arduino:icsp_moduls|Arduino ICSP modulok]] \\
 +
 +=====  Arduino ISR =====
 +en: interrupt service routine
 +
 +{{anchor:interrupt_port}}
 +{{anchor:isr}}
 +Az [[hu:comm:comdict#isr|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 [[hu:arduino:reference#attachinterrupt|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|
 +|[[hu:arduino:boards#arduino_uno|Arduino Uno]], [[hu:arduino:boards#arduino_nano|Arduino Nano]], Mini, egyéb 328-alapú|2, 3|
 +|[[hu:arduino:boards#arduino_mega|Arduino Mega]], Mega2560, MegaADK|2, 3, 18, 19, 20, 21|
 +|Micro, Leonardo, egyéb 32u4-alapú|0, 1, 2, 3, 7|
 +|[[hu:arduino:boards#wemos_d1|Wemos D1]]|az összes digitális kimenet (kivéve a D0)|
 +
 +A interrupthívásokhoz szükséges funkciók leírása itt található:
 +  * [[hu:arduino:reference#attachinterrupt|attachInterrupt()]]
 +  * [[hu:arduino:reference#deattachinterrupt|detachInterrupt()]]
 +  * [[hu:arduino:reference#interrupts|interrupts()]]
 +  * [[hu:arduino:reference#nointerrupts|noInterrupts()]]
 +
 +==== Példák az interrupt-hívásra ====
 +[[hu:arduino:flow#yfs201|YF-S201 áramlásmérés]]
 +
 +=====  Arduino PWM =====
 +{{anchor:arduino_pwm}}
 +A [[hu:comm:start#pwm|PWM]] ([[hu:comm:start#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 [[hu:arduino:reference#analogwrite|analogWrite()]] funkcióval lehet végezni. A kijelölt - //~-lal jelölt// - PWM digitális kimeneteken érhető el a PWM funkció.
 +
 +^Board^kijelölt PWM kimenetek|
 +|A legtöbb, ATmega168-as vagy ATmega328-as board-oknál \\ [[hu:arduino:boards#arduino_uno|Arduino Uno]], [[hu:arduino:boards#arduino_nano|Arduino Nano]]*|3, 5, 6, 9, 10, 11 pin, pin 5-6: 980 Hz, a többi: 490 Hz|
 +|[[hu:arduino:boards#arduino_mega|Arduino Mega]]|2..13. és 44..46. pin|
 +|[[hu:arduino:boards#wemos_d1|Wemos D1]]|az összes digitális kimenet (kivéve a D0)|
 +|[[hu:arduino:boards#arduino_micro|Arduino Micro]]|0, 1, 2, 3, 7|
 +|régebbi board-oknál|9, 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 =====
 +{{anchor:aref}}
 +Az AREF pinen keresztül, az [[hu:arduino:reference#analogreference|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ás^[[#serial|Soros (UART)]]^[[#i2c|I²C]]^[[#1wire|1-Wire]]^[[#spi|SPI]]|
 +|partnerek / slave-ek \\ száma maximum|P2P kommunikáció, \\ 1 master + 1 slave|elméletileg 128 állomás|elmé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 m|max. 5 m|
 +|felhasznált pinek száma|2: Tx, Rx|2: SDA, SCL|1: DATA|3 vagy 4: SCK, MOSI, MISO, (SS)|
 +|korlátozások|Pin 0 és 1 használata \\ esetén a soros letöltés és \\ a soros monitor nem \\ működik|I²C|1-Wire|SPI|
 +|szenzorok|-|[[hu:arduino:comm_example#arduino_i2c_com|I²C]]|[[hu:arduino:comm_example#arduino_1_wire_com|1-Wire]]|[[hu:arduino:comm_example#arduino_spi_com|SPI]]|
 +|a kommunikáció \\ általános leírása|-|[[hu:comm:bus_i2c|I²C]]|[[hu:comm:bus_1wire|1-Wire]]|[[hu:comm:bus_spi|SPI]]|
 +
 +=====  Arduino soros kommunikáció =====
 +{{anchor:serial}}
 +{{anchor:arduino_soros}}
 +
 +====  Arduino hardveres soros kommunikáció ====
 +{{anchor:serial_hw}}
 +
 +Az Arduino board-ok alapértelmezett kommunikációja a soros ([[hu:comm:start#uart|UART]]), melyet az USB-n keresztül folytatnak a programozókészülékkel vagy a kommunikációs partner PC-vel. Az [[hu:comm:bus_usb#usb|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 [[hu:comm:bus_rs232#rs-232|RS-232]]-re, de ebben az esetben ügyelni kell a feszültségszintekre, ami az [[hu:comm:bus_rs232#rs-232|RS-232]] esetén jellemzően ± 12V. Valamennyi Arduino board-nak legalább egy soros ([[hu:comm:start#uart|UART]]) portja van, ezeknek a pin-kiosztása:
 +
 +^board^soros kommunikáció pin-jei|
 +|[[hu:arduino:boards#arduino_uno|Arduino Uno]], [[hu:arduino:boards#arduino_nano|Nano]]|Rx←0, Tx→1|
 +|[[hu:arduino:boards#arduino_mega|Arduino Mega]], Due|Serial1: pin 19 (RX) pin 18 (TX), Serial2: pin 17 (RX) pin 16 (TX), Serial3: pin 15 (RX) pin 14 (TX)|
 +
 +Alkalmazása: [[hu:arduino:reference#serial|Serial]] funkció
 +
 +====  Arduino szoftveres soros kommunikáció ====
 +{{anchor:serial_sw}}
 +
 +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:
 +
 +<code>
 +// RX buffer size
 +#define _SS_MAX_RX_BUFF 64  // 64 módosítása például a maximális 256-ra
 +</code>
 +
 +=== 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 =====
 +{{anchor:arduino_i2c}}
 +{{anchor:i2c}}
 +Az Arduino kártyákon az egyik leggyakrabban alkalmazott kommunikáció az [[hu:comm:bus_i2c#i2c|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ó: [[hu:arduino:comm_example#arduino_i2c_com|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 neve^SDA (adat-port)^SCL (órajel-port)^megjegyzés|
 +|[[hu:arduino:boards#arduino_uno|Arduino Uno]]|A4|A5||
 +|[[hu:arduino:boards#arduino_mega|Arduino Mega]]|20|21||
 +|[[hu:arduino:boards#arduino_nano|Arduino Nano]]|4|5||
 +|[[hu:arduino:boards#wemos_d1|Wemos D1]]|A4 (SDA)|A5 (SCL)|az összes digitális kimenet \\ (kivéve a D0) alkalmazható I²C-re|
 +|[[hu:esp:nodemcu_i2c|NodeMCU (ESP8266)]]|D2(GPIO4)|D1(GPIO5)|a D0 nem használható I²C-re|
 +
 +Az I²C általános leírása: [[hu:comm:bus_i2c#i2c|I²C]] \\
 +Az Aduino-s I²C megoldások összefoglalása itt található: [[hu:arduino:comm_example#arduino_i2c_com|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ó: [[hu:arduino:wire_reference|WIRE library funkciók]] \\
 +
 +=====  Arduino SPI =====
 +{{anchor:spi}}
 +
 +Az Arduino kártyákon egyik gyakran alkalmazott kommunikáció az [[hu:comm:bus_spi#spi|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ó: [[hu:arduino:comm_example#arduino_spi_com|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):
 +
 +{{:wiki:arduino:spi.png|SPI}}
 +
 +Az alapértelmezett portok a kommunikációhoz a külömböző board-okon az alábbiak:
 +
 +^kártya neve^SPI SS\\ (kiválasztás)^SPI MOSI^SPI MISO^SPI SCK|
 +|[[hu:arduino:boards#arduino_uno|Arduino UNO]]|10|11|12|13|
 +|[[hu:arduino:boards#arduino_mega|Arduino Mega]]|53|50|51|52|
 +|[[hu:arduino:boards#arduino_nano|Arduino Nano]]|D10|D11|D12|D13|
 +|[[hu:esp:start#nodemcu_esp8266|NodeMCU (ESP8266)]]|D8(GPIO15)|D7(GPIO13)|D6(GPIO12)|D5(GPIO14)|
 +
 +
 +Az Aduino-s SPI megoldások összefoglalása itt található: [[hu:arduino:comm_example#arduino_spi_com|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 =====
 +{{anchor:1wire}}
 +
 +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: [[de:arduino:comm_example#arduino_1_wire_com|Arduino 1-wire kommunikáció]].
 +
 +
 +
 +=====  Arduino Ethernet =====
 +{{anchor: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:
 +|{{ :hu:arduino:arduino_uno_ethernet_pins.png?400 |Arduino Uno Ethernet SPI lábkiosztása}}|{{ :hu:arduino:arduino_mega_ethernet_pins.png?400 |Arduino Mega Ethernet SPI lábkiosztása}}|
 +|Arduino Uno Ethernet SPI lábkiosztása|Arduino 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ó^W5100^W5300^W5500|
 +|Interface Mode|direkt, indirekt, SPI|direkt, indirekt|SPI|
 +|Socket-ek száma|4|4|8|
 +|Sebesség (max, MBPS)|25|25|15|
 +|Adatbusz|Only 8 Bit, DATA[7:0]|16/8 Bit, DATA[15:8]/DATA[7:0]|16/8 Bit|
 +|Címbusz|15 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|