Arduino tanfolyam kezdőknek és haladóknak

Hasonló dokumentumok
MSP430 programozás Energia környezetben. Digitális szenzorok

Bevezetés a mikrovezérlők programozásába: Digitális szenzorok

Bevezetés a mikrovezérlők programozásába: Ismerkedés az Arduino fejlesztői környezettel

Bevezetés a mikrovezérlők programozásába: LCD kijelzők

MSP430 programozás Energia környezetben. Kitekintés, további lehetőségek

Bevezetés a mikrovezérlők programozásába: I/O portok kezelése, számrendszerek, bitműveletek

UH-zongora - zenélés mikrokontrollerrel

MSP430 programozás Energia környezetben. LED kijelzok második rész

Ismerkedés az MSP430 mikrovezérlőkkel

MSP430 programozás Energia környezetben. LED mátrix vezérlése MAX7219 IC-vel

Bevezetés az elektronikába

MSP430 programozás Energia környezetben. Szervó motorok vezérlése

Bevezetés a mikrovezérlők programozásába: Programciklusok szervezése, analóg I/O

MSP430 programozás Energia környezetben. Analóg jelek mérése

Bevezetés a mikrovezérlők programozásába: WS2812 RGB LED-ek vezérlése

MSP430 programozás Energia környezetben. Az első lépések

MSP430 programozás Energia környezetben. Alfanumerikus LCD kijelzok

MSP430 programozás Energia környezetben. Hétszegmenses LED kijelzok

Vegyes témakörök. A KAT120B kijelző vezérlése Arduinoval

MSP430 programozás Energia környezetben. Az I/O portok kezelése

Bevezetés az elektronikába

Mintavételes szabályozás mikrovezérlő segítségével

Többfunkciós hobbirobot építése és vezérlése Arduino UNO mikrovezérlő kártya segítségével

Arduino bevezető Szenzorhálózatok és alkalmazásaik

Bevezetés a mikrovezérlők programozásába: MAX6958: Hétszegmenses LED kijelző vezérlő

Bevezetés a mikrovezérlők programozásába: Fényérzékelés, fénymérés

Bevezetés a mikrovezérlők programozásába: A PM6025 (7 és 16 szegmenses) LCD kijelző vezérlése

Készítette: Ruzsinszki Gábor webmaster442

MSP430 programozás Energia környezetben. LED kijelzok második rész

Programozás és Digitális technika I. Pógár István eng.unideb.hu/pogari

Mérési útmutató. A/D konverteres mérés. // Első lépésként tanulmányozzuk a digitális jelfeldolgozás előnyeit és határait.

Bevezetés az elektronikába

Bevezetés a mikrovezérlők programozásába: Vezérlési szerkezetek, relációs operátorok

MSP430 programozás Energia környezetben. Nokia 5110 grafikus kijelzo vezérlése

Objektumok és osztályok. Az objektumorientált programozás alapjai. Rajzolás tollal, festés ecsettel. A koordinátarendszer

MSP430 programozás Energia környezetben. Nem élhetek muzsikaszó nélkül

Vegyes témakörök. 5. Gagyiszkóp házilag hangfrekvenciás jelek vizsgálata. Hobbielektronika csoport 2018/2019. Debreceni Megtestesülés Plébánia

Bevezetés az elektronikába

Megszólal a Kütyü. Arduino bevezető hangszóró vezérlése 1 / 5 oldal

Bevezetés az elektronikába

Bevezetés a mikrovezérlők programozásába: DC motorok vezérlése

Bevezetés a Modbus kommunikációba

Bevezetés a mikrovezérlők programozásába: Kommunikáció

loop() Referencia:

Tarján Péter Nyíregyházi Egyetem. Szenzorok és ötletek Arduinós mérésekhez

Újdonságok az Arduino szabadszoftveres platform körül. Noll János FSF.hu Alapítvány

Bevezetés a mikrovezérlők programozásába: Léptetőmotorok vezérlése

Bevezetés a mikrovezérlők programozásába: Az Arduino, mint logikai analizátor

Programozó Meta riasztókhoz és Activepark parkolásérzékelőhöz

Képernyő. monitor

A Hobbielektronika csoport. bemutatója

MSP430 programozás Energia környezetben. Digitális szenzorok I2C kommunikációval

MSP430 programozás Energia környezetben

Hobbi Elektronika. 1. Témakörök, célkitűzés, hozzávalók

Multi-20 modul. Felhasználói dokumentáció 1.1. Készítette: Parrag László. Jóváhagyta: Rubin Informatikai Zrt.

T Bird 2. AVR fejlesztőpanel. Használati utasítás. Gyártja: BioDigit Kft. Forgalmazza: HEStore.hu webáruház. BioDigit Kft, Minden jog fenntartva

Bevezetés az Arduino mikrovezérlők programozásába

The modular mitmót system. DPY kijelző kártya C API

SysCVideo: fiktív grafikus kártya SystemC modulként, SDL alapú megjelenítéssel

OMRON FOTOELEKTROMOS KAPCSOLÓK E3NT

Dr. Oniga István DIGITÁLIS TECHNIKA 9

Bevezetés a programozásba II 1. gyakorlat. A grafikus könyvtár használata, alakzatok rajzolása

Pontfelhő létrehozás és használat Regard3D és CloudCompare nyílt forráskódú szoftverekkel. dr. Siki Zoltán

Új kompakt X20 vezérlő integrált I/O pontokkal

Dr. Oniga István DIGITÁLIS TECHNIKA 9

A tervfeladat sorszáma: 1 A tervfeladat címe: ALU egység 8 regiszterrel és 8 utasítással

AQUA LUNA aqua_luna_int 08/11

07. mérés Erősítő kapcsolások vizsgálata.

APB mini PLC és SH-300 univerzális kijelző Általános használati útmutató

Labor 2 Mikrovezérlők

DIGITÁLIS TECHNIKA 7. Előadó: Dr. Oniga István

Labor gyakorlat Mikrovezérlők

2000 Szentendre, Bükköspart 74 MeviMR 3XC magnetorezisztív járműérzékelő szenzor

Vegyes témakörök. 1. Soros vezérlésű LCD számkijelző. Hobbielektronika csoport 2018/2019. Debreceni Megtestesülés Plébánia

Fizikai mérések Arduino-val

T Bird 2. AVR fejlesztőpanel. Használati utasítás. Gyártja: BioDigit Kft. Forgalmazza: HEStore.hu webáruház. BioDigit Kft, Minden jog fenntartva

Stíluslapok használata (CSS)

Programozott soros szinkron adatátvitel

Mérési útmutató a Mobil Kommunikáció és Kvantumtechnológiák Laboratórium méréseihez

3. Hőmérők elkészítése

T-AVL Nyomkövető webkliens

Felhasználói kézikönyv

Yottacontrol I/O modulok beállítási segédlet

NFA Teljesítményszabályozó mérőlánc

A tanulók gyűjtsenek saját tapasztalatot az adott szenzorral mérhető tartomány határairól.

PMU Kezdı lépések. 6-0 Csatlakozás LG GLOFA-GM és SAMSUNG PLC-hez. 6-1 Kommunikáció LG PMU és LG GLOFA-GM7 / GM6 / GM4 között

Mikrovezérlők alkalmazása házi feladatok

A grafika programozás módozatai A képernyő koordinátarendszere A graphics.h header-fájl fontosabb függvényei Mintaprogram

USB I/O kártya. 12 relés kimeneti csatornával, 8 digitális bemenettel (TTL) és 8 választható bemenettel, mely analóg illetve TTL módban használható.

ABB Teach Pendant programozás segédlet

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

LOGSYS LOGSYS LCD KIJELZŐ MODUL FELHASZNÁLÓI ÚTMUTATÓ november 8. Verzió

Perifériáknak nevezzük a számítógép központi egységéhez kívülről csatlakozó eszközöket, melyek az adatok ki- vagy bevitelét, illetve megjelenítését

BEÁGYAZOTT RENDSZEREK ALAPJAI. Grafikus benchmark alkalmazás

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

GOKI GQ-8505A 4 CSATORNÁS KÉPOSZTÓ. Felhasználói kézikönyv

Az MSP430 mikrovezérlők digitális I/O programozása

Egy PIC-BASIC program fordítása, betöltése

VII. Appletek, grafika

Átírás:

Arduino tanfolyam kezdőknek és haladóknak 11. Ultrahangos távolságmérés, OLED kijelzők 1

Ajánlott irodalom Aduino LLC.: Arduino Language Reference ATMEL: ATmega328p mikrovezérlő adatlapja Brian W. Kernighan, Dennis Ritchie: A C programozási nyelv Cseh Róbert: Arduino programozási kézikönyv Harsányi Réka Juhász Márton András: Fizikai számítástechnika: elektronikai alapok és Arduino programozás Ruzsinszki Gábor: Mikrovezérlős rendszerfejlesztés C/C++ nyelven I. PIC mikrovezérlők Ruzsinszki Gábor: Mikrovezérlős rendszerfejlesztés C/C++ nyelven II. Arduino Arduino19_11 projektek Sonar Ultrahangos távolságmérés oled_text_demo egyszerű szövegkiírás OLED kijelzőn oled_setfont szöveg kiírása többféle font használatával oled_basic_drawing a rajzelemek használata 2

Ultrahangos távolságmérő A HC-SR04 modul piezo jeladója az indító impulzus hatására egy 40 khz-es jelcsomagot sugároz ki. A modul digitális kimenő impulzusának szélessége megegyezik a visszaverődött hang terjedési idejével. Valójában ez tehát részben digitális, részben analóg szenzornak tekinthető Főbb paraméterek Tápfeszültség: 4.5 V 5.5 V Mérési tartomány: 2 cm 4 m (gyakorlatban inkább 2 m) Érzékelési szögtartomány: ~ 16 ⁰ 3

Az ultrahangos távolságmérés elve Ha az ultrahang impulzus útjában egy tárgy található, akkor a hullámok egy része visszaverődik. Ez a visszhangot a vevő észlelheti Az adás és a vétel között eltelt t időből és a hang v terjedési sebességéből kiszámítható a szenzor és a tárgy között d távolság: d=t v/2 ahol v esetünkben kb. 340 m/s 4

Ultrahangos távolságmérő Lábkiosztás Trigger: D7 Echo: D8 unsigned long pulseint(int pin, int value) Meghatározza a beérkező impulzus szélességét (mikroszekundum egységekben). pin a vizsgált bemenet sorszáma value az vizsgálandó impulzus polaritása (HIGH vagy LOW) 5

Sonar.ino 1/2. oldal #define echopin 8 #define trigpin 7 #define RED_LED 13 // Echo bemenet // Trigger kimenet int maximumrange = 400; int minimumrange = 1; long duration; float distance; // // // // Hardverfüggő rész Legnagyobb távolság cm-ben Minimális távolság cm-ben Időtartam [us] Távolság [cm]void void setup() { Serial.begin(9600); //Soros kapcsolat 9600 bit/s Serial.println("Sonar program"); pinmode(echopin, INPUT); //Impulzus bemenet pinmode(trigpin, OUTPUT); //Vezérlő kimenet digitalwrite(trigpin, LOW); //Alaphelyzetben alacsony szint pinmode(red_led,output); //A beépített piros LED jelző funkciót lát el digitalwrite(red_led,high); } 6

Sonar.ino 2/2. oldal void loop() { delay(1000); //egy kis várakozás digitalwrite(red_led,high); digitalwrite(trigpin, HIGH); Trigger impulzus előállítása delaymicroseconds(10); digitalwrite(trigpin, LOW); duration = pulsein(echopin, HIGH); //Impulzus szélességének meghatározása digitalwrite(red_led,low); distance = duration/58.82; // Kiszámoljuk a távolságot if (distance >= maximumrange distance < minimumrange) { distance = -1.0; } Serial.print(distance); // A mért távolság kiíratása Serial.println(" cm"); } Ahol d a távolság, t az impulzus hossza, v a hang terjedési sebessége (~340 m/s). Mivel t értéke µs-ban adott, d-t pedig cm-ben mérjük, így d = t * 34000/2000000, azaz d = t/58.82 7

OLED I2C kijelző SSD1306 vezérlővel Jellemzők: OLED technológia 128x64 képpont 0,96 (2,4 cm) képátló I2C illesztő 2.5V-5.5V tápfeszültség SSD1306 vezérlő Monokróm (egyes változatoknál a felső harmad más színű) Grafikus megjelenítés Inverz mód Görgetés több irányba Dokumentáció: Solomon Systech SSD1306 adatlap 8

SSD1306 programkönyvtárak A kijelző elvileg saját programmal is vezérelhető az adatlap alapján, de kényelmesebb a meglevő programkönyvtárak közül választani Adafruit_SSD1306: C++ nyelven írt osztály, amely az Adafruit_GFX és a Print osztályok leszármazottja, azok metódusait is örökli. Az Adafruit_GFX könyvtárat is telepíteni kell! forrás: github.com/adafruit/adafruit_ssd1306 és github.com/adafruit/adafruit-gfx-library U8g2: a korábbi U8g programkönyvtár továbbfejlesztett kiadása. Sokféle kijelzőhöz használható (pl. SH1106 1.3 OLED-hez is), de a fentinél bonyolultabb és terjedelmesebb Forrás: github.com/olikraus/u8g2_arduino OLED_I2C: egyszerű, SSD1306 I2C kijezőre optimalizált könyvtár Forrás: www.rinkydinkelectronics.com/library.php?id=79 Mi most csak az Adafruit_GFX + Adafruit_SSD1306 könyvtárakkal foglalkozunk! 9

A szükséges programkönyvtárak telepítése Nyissuk meg a Tools menüben a Manage Libraries menüpontot! Keressük meg és telepítsük az Adafruit GFX könyvtárat! A keresősávba GFX helyett ssd1306-ot írva keressük meg és telepítsük az Adafruit ssd1306 könyvtárat is! 10

SSD1306 használata Arduinoval Egy kitűnő bevezető tananyag található a Last Minute Engineers honlapján Interface OLED Graphic Display Module with Arduino ebből merítünk mi is. A tananyag az Adafruit_SSD1306 könyvtárat használja A 128x64 képpontos kijelző 8 lapra van felosztva, amelyekben egy oszlop 8 képpontból áll, amelyeket egy bájt bitjei vezérelnek Minden lap 128 oszlopból áll, azaz 128 bájttal írható felül A teljes képet (1024 bájt) a memóriában kell összeállítani és innen kell frissíteni a kijelzőt x (0 127) y (0 63) 11

Az SSD1306+GFX könyvtár főbb metódusai cleardisplay() töröl minden képpontot a bufferben drawpixel(x,y, color) az x,y koordinátájú pixel beállítása settextcolor(c[, bg]) szöveg- és háttérszín megadása ( 0 vagy 1) settextsize(n) szövegméret megadása (n = 1 8) setcursor(x,y) kurzor beállítása megadott pontba print( message ) szöveg kiírása print(n,hex) szám kiírása hexadecimális számrendszerben print(n,dec) szám kiírása tízes számrendszerben display() képernyő frissítése (buffer kiírása) 12

Az SSD1306 osztály példányosítása Az Adafruit_SSD1306 könyvtárat folyamatosan fejlesztik, ügyelve rá, hogy a régi programokkal kompatibilis maradjon, ezért többféle módon történhet a példányosítás: Példányosítás régi módon Új típusú példányosítás #include <Wire.h> #include <Adafruit_SSD1306.h> #include <Adafruit_GFX.h> #define OLED_ADDR 0x3C #include <Wire.h> #include <Adafruit_SSD1306.h> #include <Adafruit_GFX.h> #define OLED_ADDR 0x3C Adafruit_SSD1306 display(-1); #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET -1 Adafruit_SSD1306 display(screen_width, SCREEN_HEIGHT, &Wire, OLED_RESET); #if (SSD1306_LCDHEIGHT!= 64) #error("height incorrect, please fix\ Adafruit_SSD1306.h!"); #endif void setup() { display.begin(ssd1306_switchcapvcc,\ OLED_ADDR);... } void setup() { display.begin(ssd1306_switchcapvcc,\ OLED_ADDR);... } 13

oled_text_demo.ino A Last Minute Engineers honlapján található tananyagból vett mintaprogram segítségével mutatjuk be a kijelző használatát. Egyszerű szövegkiírás: Hello world! (az előző oldali példányosítás után folytatjuk a programot) display.settextsize(1); display.settextcolor(white); display.setcursor(0,28); display.println("hello world!"); display.display(); delay(2000); display.settextcolor(black, WHITE); display.setcursor(0,28); display.println("hello world!"); display.display(); delay(2000); 14 //INVERTED

oled_text_demo.ino Szövegméret változtatása a settextsize(n) függvénnyel megnagyobbíthatjuk a pixeleket, ezzel megnő a betűk mérete is display.settextcolor(white); display.setcursor(0,24); display.settextsize(2); display.println("hello!"); display.display(); delay(2000); Az alap font 7x10 pont settextsize(2) után 14x20 képpont méretű lesz a fontméret ASCII szimbólumok kiíratása a print/println hívásával szöveget, számot írhatunk ki, a write() metódussal pedig karakterkódot adhatunk meg, például write(3) egy szív karaktert ír ki display.setcursor(0,24); display.settextsize(2); display.write(3); // Szívecske rajzolás display.display(); delay(2000); 15

oled_text_demo.ino Számok kiírása a print() metódussal nemcsak szöveget, hanem számokat is kiírathatunk (32 bites előjelt nélküli számokat adhatunk meg) // Display Numbers display.settextsize(1); display.setcursor(0,28); display.println(123456789); display.display(); delay(2000); //Szám kiírása Számrendszer megadása a Print osztály örökölt tulajdonságai miatt azt is megadhatjuk, hogy milyen számrendszerben írjuk ki a számot display.setcursor(0,28); display.print("0x"); display.print(0xff, HEX); display.print("(hex) = "); display.print(0xff, DEC); display.println("(dec)"); display.display(); delay(2000); 16

További fontok használata A beépített 7x10 képpont méretű fonton kívül a GFX könyvtárral együtt települő további fontokat is használhatjuk: Három fontcsalád (Serif, Sans, Mono) négyféle méret (9, 12, 18 és 24 pont) négyféle variáns (normál, italic/oblique, bold, bold italic/oblique) A használathoz be kell csatolni a használni kívánt fontok fejléc állományait, például: #include #include #include #include <Wire.h> <Adafruit_GFX.h> <Adafruit_SSD1306.h> "Fonts/FreeSerifBold12pt7b.h" Ki kell választani a kívánt fontot, például: display.setfont(&freeserifbold12pt7b); 17

oled_setfont.ino #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include "Fonts/FreeSerifBold12pt7b.h" //Font betöltés #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels Adafruit_SSD1306 display(screen_width, SCREEN_HEIGHT, &Wire, -1); void setup() { display.begin(ssd1306_switchcapvcc, 0x3C); display.setfont(&freeserifbold12pt7b); //Font kiválasztása display.settextsize(1); display.settextcolor(white); display.setcursor(15,22); display.print("17:56:35"); display.setfont(); //Vissza a beépített fonthoz display.settextsize(1); display.setcursor(5,32); display.print("thursday 2020.02.20"); display.setcursor(20,45); display.print("temp: 26.2 C"); display.display(); } void loop() { } 18

Grafikus elemek: téglalap rajzolása Üres téglalap rajzolása a drawrect() függvény öt paramétert kér: a bal felső sarok x,y koordinátái, szélesség, magasság és a tintaszín. display.settextsize(1); display.settextcolor(white); display.setcursor(0,0); display.println("rectangle"); display.drawrect(0, 15, 60, 40, WHITE); display.display(); delay(2000); Kitöltött téglalap rajzolása a fillrect() metódussal történik, a paraméterek ugyanazok, mint az üres téglalap rajzolásnál display.settextsize(1); display.settextcolor(white); display.setcursor(0,0); display.println("rectangle"); display.fillrect(0, 15, 60, 40, WHITE); display.display(); delay(2000); 19

Grafikus elemek: lekerekített téglalap Lekerekített téglalap rajzolása a drawroundrect() függvény hat paramétert kér, melyből az 5. paraméter a lekerekítés sugara display.settextsize(1); display.settextcolor(white); display.setcursor(0,0); display.println("round Rectangle"); display.drawroundrect(0, 15, 60, 40, 8, WHITE); display.display(); delay(2000); Kitöltött téglalap rajzolása a fillrect() metódussal történik, a paraméterek ugyanazok, mint az üres téglalap rajzolásnál display.settextsize(1); display.settextcolor(white); display.setcursor(0,0); display.println("filled Round Rectangl"); display.fillroundrect(0, 15, 60, 40, 8, WHITE); display.display(); delay(2000); 20

Grafikus elemek: kör rajzolása Üres kör rajzolása a drawcircle() függvény négy paramétert kér: a középpont x,y koordinátái, a sugár és a tintaszín. display.settextsize(1); display.settextcolor(white); display.setcursor(0,0); display.println("circle"); display.drawcircle(20, 35, 20, WHITE); display.display(); delay(2000); Kitöltött kör rajzolása a fillcircle() metódussal történik, a paraméterek ugyanazok, mint az üres kör rajzolásnál display.settextsize(1); display.settextcolor(white); display.setcursor(0,0); display.println("filled Circle"); display.fillcircle(20, 35, 20, WHITE); display.display(); delay(2000); 21

Grafikus elemek: háromszög rajzolása Üres háromszög rajzolása a drawtriangle() függvény hét paramétert kér: a három csúcs x,y koordinátái, és a tintaszín. display.settextsize(1); display.settextcolor(white); display.setcursor(0,0); display.println("triangle"); display.drawtriangle(30,15, 0,60, 60,60, WHITE); display.display(); delay(2000); Kitöltött háromszög rajzolása a filltriangle() metódussal történik, a paraméterek ugyanazok, mint az üres háromszög rajzolásnál display.settextsize(1); display.settextcolor(white); display.setcursor(0,0); display.println("filled Triangle"); display.filltriangle(30,15, 0,60, 60,60, WHITE); display.display(); delay(2000); 22

Az Arduino nano kártya kivezetései 23

Ellenállás színkódok 24