Arduino programozási alapok

Slides:



Advertisements
Hasonló előadás
Analóg-digitális átalakítás
Advertisements

LOGICA System.
Rendszertervezés Hardver ismeretek.
A számítógép felépítése
PIC mikrokontrollerek
Neumann-elvek A számítógép legyen teljesen elektronikus, külön vezérlő és végrehajtó egységgel. Kettes számrendszert használjon. Az adatok és a programok.
1 Products for Growth - Hannover 03 PLC-s rendszerünk evolúciója.
A Blown-up rendszer Biczók Gergely Rónai Miklós Aurél BME Számítástudományi és Információelméleti Tanszék Turányi Zoltán Richárd Ericsson Traffic Lab Valkó.
Az integrált áramkörök (IC-k) tervezése
Small Liga Mozgás vezérlő rendszere
Az LCD kijelző programozása
A mikrovezérlők Áttekintő előadás.
ATMEL AVR mikrokontroller család hardver-felépítése
PIC mikrovezérlők.
Fájlkezelés, IO Kivételkezelés Belső osztályok
Mikrovezérlők alkalmazástechnikája laboratóriumi gyakorlat Kovács Tamás & Mingesz Róbert 2. óra február 13., 16.
Mikrovezérlők alkalmazástechnikája laboratóriumi gyakorlat Kovács Tamás & Mingesz Róbert 3. óra február 20., 23.
Mikrovezérlők, perifériák laboratóriumi gyakorlat
Ez a dokumentum az Európai Unió pénzügyi támogatásával valósult meg. A dokumentum tartalmáért teljes mértékben Szegedi Tudományegyetem vállalja a felelősséget,
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 9. Gyakorlat Alap file műveletek.
Virtuális méréstechnika MA-DAQ műszer vezérlése 1 Mingesz Róbert V
Alapfogalmak Adat: fogalmak, tények, jelenségek olyan formalizált ábrázolása, amely emberi vagy gépi értelmezésre, feldolgozásra, közlésre alkalmas. Információ:
Memóriák.
Mikrokontrollerek - MCU -. Mikor kontroller, amikor professzor? Az Aranyköpések c. gyűjteményből…
PIC processzor és környezete
Felkészítő tanár: Széki Tibor tanár úr
A memóriák típusai, jellemzői
A mikrovezérlők világa
A PHP (PHP: Hypertext Preprocessor) nyílt forráskódú, számítógépes szkriptnyelv, legfőbb felhasználási területe a dinamikus weboldalak készítése. Emiatt.
Ez a dokumentum az Európai Unió pénzügyi támogatásával valósult meg. A dokumentum tartalmáért teljes mértékben Szegedi Tudományegyetem vállalja a felelősséget,
Mikrovezérlők, perifériák laboratóriumi gyakorlat 3. óra szeptember 18. Mingesz Róbert v
A számítógép felépítése
Atmega128 mikrokontroller programozása
Mikrokontroller (MCU, mikroC)
1.4. Fordítás, szerkesztés, az objektumkönyvtár használata.
A PLC és használatának előnyei
Visual Basic 2008 Express Edition
Növényházi adatgyűjtő- és vezérlőrendszer tervezése
ARM tanfolyam 2. előadás.
Processzor, alaplap, memória
A szoftver, szoftvertípusok
A Neumann-elvű gépek A Neumann elvek:
Kísérletezés virtuális méréstechnika segítségével 2010 március
Objektum orientált programozás
A ROM és a BIOS Készítette: Tóth Dominik. A ROM A ROM (Read Only Memory) egy olyan elektrotechnikai eszköz, amely csak olvasható memória. Fizikailag az.
A központi egység Informatika alapjai Készítette: Senkeiné B. Judit.
Óravázlat Készítette: Kucsera Mihály 2011.
A Visual Basic nyelvi elemei
HARDVER IT ALAPFOGALMAK. NEUMANN-ELVŰ SZÁMÍTÓGÉPEK FELÉPÍTÉSE Központi feldolgozó egység Háttértárolók Adatbeviteli eszközök (Input) Operatív tár (Memória)
Ismerkedjünk tovább a számítógéppel
Piramis klaszter rendszer
ifin811/ea1 C Programozás: Hardver alapok áttekintése
PIC mikrokontroller.
Mikrovezérlők alkalmazástechnikája laboratóriumi gyakorlat Hőmérséklet mérése Makan Gergely, Mellár János, Mingesz Róbert V március 23.
A ROM ÉS A BIOS. K ÉSZÍTETTE R ELL P ATRIK A ROM A ROM egy olyan elektrotechnikai eszköz, amely csak olvasható adatok tárolására alkalmas memória. Tartalma.
Újdonságok az Arduino szabadszoftveres platform körül Noll János FSF.hu Alapítvány.
1 A számítógépek felépítése jellemzői, működése. 2 A számítógép feladata Az adatok Bevitele Tárolása Feldolgozása Kivitele (eredmény megjelenítése)
Léptetőmotorvezérlés L298N motorvezérlővel és Arduino Pro Minivel – lakásba beépíthető elektromos redőnyszerkezet Készítette: Frankó Tamás MI2004N Kovács.
00. GYAKORLAT Bevezető.
Elágazások a programban – IF utasítás
Neumann János Informatikai Kar
Neumann elvek és a Neumann elvű számítógép felépítése
A berendezés tervező korszerű eszköztára
02. GYAKORLAT Soros monitor.
01. GYAKORLAT Futófény.
A programozható mikrokontroller
09. GYAKORLAT Beeper.
Szervó motor helyzetének vezérlése potenciométer segítségével
Változók.
Digitális Vezérlésű Generátorok
Előadás másolata:

Arduino programozási alapok http://arduino.cc nyílt forráskódú (hw+sw) prototípus platform. joe@mogi.bme.hu A készítők célja: „It's intended for artists, designers, hobbyists and anyone interested in creating interactive objects or environments.” Ezek közül melyikek vagyunk ? „Bárhogy is rakom össze, harckocsi lesz belőle”

A fejlesztő részei Tápellátás Programozható eszköz (uC), kivezetett csatlakozókkal a bővítőkhöz Programozó („égető”), számítógéphez (pl. PC) kötve Futtatható programot készítő rendszer (compiler + GUI) A tápellátás feladata: az alappanel és az esetleg rákapcsolt plusz panelek energiaellátása. PC-vel összekapcsolva USB-ről (5V, 500 mA), önálló működés esetén külső tápegységről (7-16V DC), esetleg telepről képes üzemelni. Szükséges kimeneti feszültségek: 5V, 3.3V. Külső táp + 5V-os lineáris stabilizátor. Védődióda, elkó. Átkapcsoló és 3.3V-os stabilizátor. Komparátor, FET.

A mikrokontroller (μC) felépítése: ATmega328P, UNO CPU: processzor (ALU+regiszterek+vezérlő áramkörök), csatlakozásai nincsenek közvetlenül kivezetve. A PC processzora (i7) hasonló, de más hardvert nem tartalmaz. Gyakran Harvard architektúrájú RISC: AVR. (flash)ROM: a processzort működtető gépi kódú programot tartalmazza, az eszköz bekapcsolásakor azonnal indul. Arduino-nál mindig tartalmazza a „bootloader”-t, amely megfelelő feltételek esetén (amit a programozó teremt meg) képes a flashROM-ba kódot írni és átadni neki a vezérlést. 32 kbyte méretű. Operatív memória - regiszterek (RAM): statikus RAM, írható és olvasható. Általában ide vannak ágyazva az I/O portok is. 2 kbyte méretű. Veremtárat is mindig tartalmaz, címezhető vagy fix helyen. I/O portok (GPIO): tetszőlegesen konfigurálható ki/bemenetre. A legtöbb általános célú lábon van i/o port. Amennyiben 1-et írunk a hozzá tartozó RAM megfelelő bitjébe, a kimenetre konfigurált lábon logikai magas szint lesz 5V, ha 0-t, alacsony. Kimeneti áram max 20 mA. A bemenetre konfigurált lábhoz a tokon belül felhúzó ellenállás is bekapcsolható, ezzel csökkentve a külső elemek számát. Pl. nyomógomb a föld és a láb közé. oszcillátor, kvarckristály/kerámia rezonátor csatlakoztatására, belső r/c oszcillátor órajelgenerálás. 16MHz-es kerámia rezonátor Interrupt vezérlő: valamely láb vagy belső jellemző megváltozása megszakítást generál, és egy kezelő függvény lefut. A/D átalakító: a bemeneti lábak nem csak digitálisak lehetnek, hanem analógok is. Általában multiplexelve kerül a bemenetekről a jel az átalakítóra. 6 csatorna, 1 átalakító, 10 bites felbontás, beépített hőmérő. Analóg komparátor: bemeneti lábak feszültségkülönbsége (A>B) digitális formában rendelkezésre áll, megszakitást kérhet. Időzitő/Számláló: Külső/belső órajelet képes számolni, ha túlcsordul, megszakítást generál. 2 db 8 bites, 1 db 16 bites timer előosztóval. PWM kimenet: impulzusszélesség modulált kimenet. 6 PWM csatorna, kitöltési tényező 0..255. soros ki/bemenet pl RS-232, RX és TX lábak. A soros portot az égető használja, 1k-s ellenállásokon keresztül. i2c: Philips által kifejlesztett kétvezetékes (SCL,SDA) busz. ATMEL nem vette meg, TWI-nek (kétvezetékes interface) hívják. AD4-AD5 lábak az SDA és SCL. Alkalmazás: LM75AD hőmérő, giroszkóp. SPI: soros periféria interface. I2c-nél több lábat használ, nagyobb órajellel. Ethernet, SD kártya.

Blokkdiagram

Multifunkciós lábak: szoftverből döntjük el, melyik funkció jelenjen meg. ATmega328 lábai Arduino-ban majdnem minden láb fix funkciójú Kis túlzás: pic32, az RPxxx elnevezésű lábak programozható funkciókkal rendelkeznek

Program beégetési módok, a programozó egység A µC kétféle módon programozható: Különálló égetővel: az égető hardvert a µC-hez csatlakoztatva. ICSP Header kiépítve. Bootloaderrel, ekkor a bootloader program végzi el a beégetést. Kapható bootloaderes µC is. Ha reset után bizonyos ideig nincs égetési parancs, az általa beégetett programra ugrik. USB a PC fele ICSP header az ATmega328-hoz USB-RS232 átalakítóként használt ATmega16u2 RS-232 RX-TX az ATmega328 fele

A fejlesztő környezet: IDE (GUI + GCC) Az IDE környezet JAVA-ban íródott, a portolás megkönnyítésére. A kész, felinstallálható IDE-t letölthetjük Windows-ra, MAC-OS-re és Linux-ra. Természetesen a forrás is letölthető. Windows-nál installálni sem szükséges: kicsomagolva a Zip fájlt, a program indítható. A kicsomagolás után lesz „Drivers” könyvtár is, a hardver csatlakoztatásához szükséges INF fájlt tartalmazza. Az inf fájl egy USB-s soros portot készít a fejlesztőnek, amit (a felhasznált Ardunio típussal együtt) kézzel kell az IDE menüjében beállítanunk. Fordítás (csak teszt, szintaktikai ellenőrzés) Fordítás + feltöltés új-megnyit-ment. Mentés nélkül is tud fordítani. Soros monitor. Ha már kész a feltöltés, a soros port a PC-vel való kommunikációra használható. Feltöltéskor a terminál ablak bezáródik. Baud-ra ügyelni

A GCC fordító A GCC fordító a GNU projekten belül, a GNU operációs rendszerhez készült. A GCC fordító tervezésénél és a kódolásánál a fő szempont egy jó minőségű, ingyenes eszköz készítése volt. Hasonló cél a különféle számítógép architektúrák támogatása. Az avr-gcc egy cross-compiler: PC(MAC)-on futva állít elő avr-en futó kódot. A compiler fordítás közbeni üzeneteit akkor fogjuk látni, ha a File/Preferences menüben bekapcsoltuk a „Show verbose output during compilation” kijelölőnégyzetet. Mindent bekapcsoltunk Fordítás eredménye: .HEX fájl keletkezett. Ezt lehet betölteni a µC flash-romjába (program storage space). Kaptunk memória foglaltsági statisztikákat is: mennyi ROM, és RAM (dynamic memory) szükséges a programnak. Mint minden Unix jellegű fordítási folyamatban, itt is assemblerre fordítunk először, majd az avr-as segítségével (amely a binutils része) lesz futtatható kódunk. avr-gcc –v kimenete: Using built-in specs. Target: avr Thread model: single gcc version 4.3.2 (WinAVR 20081205)

Sketch (vázlat) setup() függvény: reset után egyszer lefut. A sketch az általunk megírandó programot jelenti. Nem a teljes lefordítandó anyagot látjuk, hanem csak egy részét. A régebbi verziók üres oldallal indultak, az 1.5.5-r2 béta változat megír nekünk két függvény fejlécet. setup() függvény: reset után egyszer lefut. Ide kell írni az inicializáló részt, például a GPIO-k kimenetre programozását, a soros port inicializálását. Az A/D átalakító vagy a PWM inicializálása nem szükséges. loop() függvény: folyamatosan, végtelen ciklusban fut. Ide írjuk a működtető programot. Amikor a végéhez ér, azonnal újraindul. A Sketch programozási nyelve C++. (Ezen az előző dia alapján nem lepődünk meg) Az elmentett sketch .ino kiterjesztést kap, ez egy Unix-os soremeléseket tartalmazó szövegfájl. Jegyzettömbbel egy sornak látszik, wordpad-dal kinyitható.

A főprogram: hardware/arduino/cores/arduino/main.cpp Cpp fájlt nem tud betölteni, csak ino-t. Az init() függvény a rendszer inicializáló. A setup() függvény a felhasználó által megírandó inicializáló. Ha nincs meg, hiba. A loop() függvény végtelen ciklusban fut. A serialEventRun függvénypointer, ha nem definiáltuk, NULL. #include <Arduino.h> int main(void) { init(); #if defined(USBCON) USBDevice.attach(); #endif setup(); for (;;) { loop(); if (serialEventRun) serialEventRun(); } return 0; „Az intelligens programkészítők vidáman elolvassák a 400 oldalas leírást egyetlen programsor leírása előtt. Az Arduino programozók akkor olvasnak leírást, ha már felszállt a füst.” – RTFM mai változatban.

Gyakran használt függvények és osztályok void pinMode(lábszám,üzemmód): a digitális lábat állítja adott üzemmódra. A loop()-ban is használható. Üzemmódok: INPUT, OUTPUT, INPUT_PULLUP. Az analóg input lábak (A0,A1 stb) is használhatóak. void digitalWrite(lábszám,adat): a digitális lábra kimenetet kapcsol. Az adat HIGH vagy LOW lehet, ezek csak definiált konstansok (HIGH=1, LOW=0). int digitalRead(lábszám): beolvas egy digitális bemenet. Az eredmény 0 vagy 1 lesz. int analogRead(lábnév): beolvas egy analóg bemenetet. 10 bites átalakító, alapesetben 5V referencia. 5V=1023 void analogWrite(lábszám, érték): pwm képes kimenet (3,5,6,9,10,11) kitöltési tényezőjének állítása 0..255 intervallumban. void delay(ezredmásodperc): adott idejű várakozás. Serial: soros port osztály. Inicializásása a Serial.begin(baudrate) függvénnyel történik. Ezt a számot kell a serialMonitor-ban beállitani, különben értelmetlen jelsorozatot kapunk. int Serial.available(): hány karakter érkezett a PC felől. Ha 0, nem érkezett karakter. char Serial.read(): egy karakter olvasása a serial bufferből void Serial.print(adat): kiírás a portra. Az adat lehet int, char, double és string is. Void Serial.println(adat): mint print(), csak egy soremeléssel lezárva a kiírást.

Sebességteszt A következő program futását nézzük meg: void setup() { pinMode(3,OUTPUT); } void loop() { digitalWrite(3,HIGH); digitalWrite(3,LOW);

PWM teszt void setup() { pinMode(3,OUTPUT); pinMode(5,OUTPUT); } void loop() { analogWrite(3,64); analogWrite(5,128); delay(10000);

Delay teszt void setup() { pinMode(3,OUTPUT); } void loop() { digitalWrite(3,HIGH); delay(2); digitalWrite(3,LOW);

Az i2c kommunikáció Az i2c-t a Philips (ma NXP) fejlesztette ki, tőlük kell licenszelni. Az ATMEL nem fizetett, emiatt a kétdrótos buszt TwoWireInterface-nek (TWI) nevezi. Természetesen a felhúzó ellenállások és a buszprotokoll ugyanaz, mint az I2c-nél. A library-t Wire-nek nevezzük. 2006 óta nem kell fizetni az nxp-nek. #include <Wire.h> // library betöltése (c++) Wire.begin(); // inicializálás, analóg lábak lekapcsolása, felhúzó ellenállások bekapcsolása Wire.requestFrom(i2c cím, byteok száma); // adott számú byte átvitelének kérése slave eszköztől Wire.available() true, ha van adat az i2c pufferben Wire.read() 1 byte olvasása Wire.beginTransmission(i2c cím) átvitel kezdete, start bit Wire.write(adat) írás az i2c slave-nek Wire.endTransmission() átvitel vége, ack bit Wire.onReceive(függvény) beérkezett adatnál meghívja a függvényünket. A függvény megkapja a pufferben lévő bájtok számát. Wire.onRequest(függvény) szolgaként programozott eszköznél a függvényünk fut le, ha adatot kér tőlünk a master eszköz.

Interrupt (mert azt senki sem tudja) informatika-I ea. Ha bekövetkezik egy megszakítási szituáció (int.0: 2-es láb, int.1: 3-as), egy függvényt írhatunk, amely az eseményre azonnal reagál. A hozzárendelés a következő: attachInterrupt(megszakítás, kezelőfüggvényünk, esemény); Megszakítás: 0 vagy 1 Kezelőfüggvényünk: általunk megírt függvény neve Esemény: LOW – alacsony láb, CHANGE – láb állapot változás, RISING: felfutó és, FALLING: lefutó él int c; void setup() { c=0; pinMode(2,INPUT_PULLUP); pinMode(4,INPUT_PULLUP); attachInterrupt(0,megszakitas,FALLING); Serial.begin(9600); } void loop() { Serial.print("c="); Serial.println(c); delay(1000); void megszakitas() { if (digitalRead(4)==1) c++; else c--; Példa: encoder. Akkor fut le a megszakitas(), ha a 2-es lábat földrehúzzuk Itt a c-t csak kiíratjuk. Ha a 4-es bemenet magas, előre, egyébként vissza.

LabView kezelői felület Az Arduino-ba egy NI által készített firmware-t töltve használható LabView komponensként is. Ezt a diát és a következőt is Szakály Norbi kolléga készítette. 1. VI Package Manager (VIPM) letöltése és telepítése 2 lefordítani és feltölteni a Arduino Firmware-t, LabVIEW \vi.lib\LabVIEW Interface for Arduino\Firmware\LIFA_Base\LabVIEWInterface.ino. 3. LabView indul

LabView példaprogram

Előnyök és hátrányok Előnyök: Olcsó Kezdők is könnyen boldogulnak Nagyszámú kiegészítő (shield) kapható Jól dokumentált, komplett mintaprogramok (examples) a fejlesztőben Nyílt forráskód Hátrányok: Drága Debug lehetőség nincs Nem tartalmaz semmilyen perifériát egy db LED-en kívül Nem használható ki a teljes uC A shieldek legtöbbször csak egy, max kettő funkciósak. Legtöbbször fórumokon van csak a problémára megoldás Ellustul a programozó LilyPad

Arduino a tanszéken K. Brúnó szakdolgozata Mechatronika szakosztály szakkör Gerincőr: 30 db Arduino UNO i2c beszerezve Mechatronika gólyatábor - augusztus 15. (D506) shield még nincs. 20 db Arduino kölcsön a szakosztálynak. Szakkör a D506-ban. 2014 január: Mogi shield Mechatronikai Szimulációk c. MSC tantárgy 2 alkalom előadás, 1 alkalom gyakorlat Bármelyik számítógépterem Arduino laborrá alakítható

MOGI Shield Minden gyári shield célspecifikus és 10-50$. Czmerk András kolléga ötlete: készítsünk egy shield-et, amin egy izzólámpa, egy hőmérő és egy ventilátor található. Hw konfiguráció: sda,scl(a4,a5): lm75a, 0x48, internal pull-up out 11: lamp output (fet, pwm) out 10: cooler fan output (fet,pwm) pwm 3,5,6: pwm output to rgb led a0,a1,a2: 10k pots 2,4,7: buttons in internal pull-up a3: phototransistor in

Gyártás

Gyártás

Gyártás

Library készítés A programból osztályt készítünk Az osztályt .h és .cpp fileba rakjuk Plusz #include-ok: Ardunio.h, és az általunk használt library-k Megírjuk a keywords.txt-t Betesszük a „libraries” könyvtárba, ugyanolyan nevű könyvtárba, mint a cpp és a h

Gyári library-k EEPROM: a cpu-ba épített nem felejtő eeprom kezelő függvényei. UNO: 1024 byte. read(int cím), write(int cím, byte adat). Ethernet: az ethernet shield kezelő felülete. Ezzel lehet készíteni távoli elérésű gpio-t például. Connect(),write(), read(). Mintaprogram: WebServer GSM: mobiltelefon shield-hez. VoiceClass, GSM_SMS osztály, GPRS osztály, GSMclient, GSM szerver osztály. Connect(), read(), write(). LiquidCrystal: LCD. Szinte az összes olcsó LCD modulban hd4470 kompatibilis vezérlő van. 4 vagy 8 bites interface választható. Begin(), write(), blink(), setCursor(), clear(). SD: memóriakártya elérés, fat16 vagy fat32 üzemmódban. Több file is kinyitható. File osztállyal együtt. open(), print(), read(), close(). Servo: szervómotor vezérlése. A write()-ben fokot adunk meg, a motor oda áll be. SPI: az spi protokoll megvalósítása. Transfer() függvény. Az SD is ezt használja. SoftwareSerial: Az UNO-ban az egy uart-ot az égető használja. Bármelyik két lábon tudunk szoftveres soros portot készíteni. Készült egy NewSoftSerial library is. Stepper: léptetőmotor vezérlésére. setSpeed(int rpm), step(int lépés). TFT: színes kijelző vezérlése. Adafruit gyártmányú vezérlőhöz. SPI-t használ. Image(), line(), circle(). Wire: i2c. Már volt róla szó. FFT: hangmintákra. nem része a fejlesztőnek, de letölthető. Frekvencia-analízis

Az UNO32 (digilent, chipkit) Az Arduino felület népszerűsége és nyílt forráskódja egyéb gyártókat is megihletett. Az UNO32-ben Microchip Pic32mx található, 80 Mhz órajellel. Lábkiosztása szinte kompatibilis, szoftvere egy régebbi Arduino-ból lett Kialakítva. Természetesen a gcc itt nem avr-t fordít, hanem pic32-t xc32 néven. MPLAB is használható a fejlesztésre 3.3V a gpio-kon Az analóg inputok Védődiódákkal ellátva Icsp csatlakozó Pickit3-hoz

UNO-32: 442 kHz, de csak 3.3V-os jel A következő program futását nézzük meg: void setup() { pinMode(3,OUTPUT); } void loop() { digitalWrite(3,HIGH); digitalWrite(3,LOW);

1.1usec ! Mplab: int main(void) { // rd0 : arduino pin 3 TRISDbits.TRISD0=0; // output while (1) LATDbits.LATD0=1; LATDbits.LATD0=0; }