Bevezetés az elektronikába

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

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

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

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

MSP430 programozás Energia környezetben

Bevezetés az elektronikába

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

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

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

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

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

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 a mikrovezérlők programozásába: Ismerkedés az Arduino fejlesztői környezettel

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

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

Bevezetés az elektronikába

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

Újrakonfigurálható eszközök

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

Bevezetés az elektronikába

Megjegyzés: A leírás abszolút kezdők számára készült elnézést azoktól, akik ezen a szinten már túlvannak!

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

Labor 2 Mikrovezérlők

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

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

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

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

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

Programozás BMEKOKAA146. Dr. Bécsi Tamás 3. előadás

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

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

A Hobbielektronika csoport. bemutatója

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

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

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

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

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

A C# programozási nyelv alapjai

Bevezetés az elektronikába

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

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

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

Mikrokontrollerek és alkalmazásaik Beadandó feladat

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

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás 3. előadás

Algoritmus fogalma. Mi az algoritmus? HF: Al Khwarizmi. Egy adott probléma megoldásának leírása elemi lépések sorozatával

Informatika terméktervezőknek

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

I. C8051Fxxx mikrovezérlők hardverfelépítése, működése. II. C8051Fxxx mikrovezérlők programozása. III. Digitális perifériák

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

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós február 18. Széchenyi István Egyetem, Gy r

Labor gyakorlat Mikrovezérlők

Újrakonfigurálható eszközök

Újrakonfigurálható eszközök

Labor gyakorlat Mikrovezérlők

Programozási nyelvek I. 5. előadás (Gregorics Tibor anyagának felhasználásával)

LPT illesztőkártya. Beüzemelési útmutató

UH-zongora - zenélés mikrokontrollerrel

loop() Referencia:

Labor gyakorlat Mikrovezérlők

OMRON FOTOELEKTROMOS KAPCSOLÓK E3NT

Bevezetés az elektronikába

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

FL-11R kézikönyv Viczai design FL-11R kézikönyv. (Útmutató az FL-11R jelű LED-es villogó modell-leszállófény áramkör használatához)

Szoftvertechnológia alapjai Java előadások

Internet programozása. 3. előadás

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

Webprogramozás szakkör

Akusztikus MEMS szenzor vizsgálata. Sós Bence JB2BP7

Ismerkedés az MSP430 mikrovezérlőkkel

KÜLÖNLEGES SZENZOROK. Típus F10-C20/C30/C50 F10-C25/C35/C55. NPN nyitott kollektoros kimenetek (2 db) max. 50 ma terhelhetõség

2.3. Soros adatkommunikációs rendszerek CAN (Harmadik rész alapfogalmak II.)

Járműfedélzeti rendszerek II. 2. előadás Dr. Bécsi Tamás

Hobbi Elektronika. Bevezetés az elektronikába: Fényemittáló dióda (LED)

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

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

A 27/2012 (VIII. 27.) NGM rendelet (12/2013 (III.28) NGM rendelet által módosított) szakmai és vizsgakövetelménye alapján.

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

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

A C programozási nyelv II. Utasítások. A függvény.

A/D és D/A konverterek vezérlése számítógéppel

Hagyományos tűzjelző rendszer

Java programozási nyelv

Whead 3.0. Szélsebesség és széliránymérő illesztő távadó. Előzetes

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

Mérési utasítás. Labor 2, Mikrovezérlők. Budai Tamás, Automatizálási Tanszék Széchenyi István Egyetem v1.1.

ALPHA és ALPHA XL műszaki leírás

Elektronika laboratóriumi mérőpanel elab panel NEM VÉGLEGES VÁLTOZAT! Óbudai Egyetem

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

BASH script programozás II. Vezérlési szerkezetek

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

Programozás C nyelven (3. ELŐADÁS) Sapientia EMTE

Egyszabadságfokú mechanikai rendszer irányítása nyílt hurkú vezérlés

C programozás. 1 óra Bevezetés

LED DRIVER 6. 6 csatornás 12-24V-os LED meghajtó. (RDM Kompatibilis) Kezelési útmutató

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ó.

Nyomtatóport szintillesztő 3V3

Szoftvertervezés és -fejlesztés I.

eco1 egymotoros vezérlés

Átírás:

Bevezetés az elektronikába 13. Arduino programozás analóg I/O Hobbielektronika csoport 2018/2019 1 Debreceni Megtestesülés Plébánia

PWM: impulzus-szélesség moduláció PWM = pulse width modulation (impulzus-szélesség moduláció) A frekvencia állandó A kitöltés változtatható 0-255 között Az analogwrite() függvény csak bizonyos lábakra vonatkozóan használható Arduino Uno/Nano (Atmega 328P): Időzítő Csatorna Kivezetés Frekvencia Timer0 Timer1 Timer2 OC0A, OC0B OC1A, OC1B OC2A, OC2B 6, 5 980 Hz 9, 10 490 Hz 11, 3 490 Hz Hobbielektronika csoport 2018/2019 2 Debreceni Megtestesülés Plébánia

Az Arduino nano kártya kivezetései PWM kimenetek Hobbielektronika csoport 2018/2019 3 Debreceni Megtestesülés Plébánia

Lélegző LED led_fade.ino A D5 kivezetésre kötött LED fényerejét fokozatosan növeljük, majd a maximum elérése után fokozatosan csökkentjük Az analogwrite(pin,duty) függvény két paramétere a vezérelni kívánt digitális kivezetés sorszáma (csak 3, 5, 6, 9, 10, 11 lehet) és a PWM kitöltési tényező (0 255 közötti érték) Mivel a LED úgy van bekötve, hogy magas szintű jel esetén világít, így a kis kitöltés kisebb fényerőt, a nagy kitöltés nagyobb fényerőt jelent. Szemünk nem lineárisan érzékel, kétszer nagyobb kitöltésnél nem kétszer nagyobb fényerőt érzékelünk! Hobbielektronika csoport 2018/2019 4 Debreceni Megtestesülés Plébánia

led_fade.ino A D5 kivezetésre kötött LED fényerejét változtatjuk ( lélegző LED) Const int led = 5; int brightness = 0; int fadeamount = 5; // ide van kötve a LED // fényerő értéke // a változás léptéke void setup() { pinmode(led, OUTPUT); // D5 legyen kimenet (ez a sor elhagyható) void loop() { // A LED kimeneten beállítjuk a kitöltést (a LED fényerejét) analogwrite(led, brightness); // megnöveljük a fényerő értékét az általunk megadott // léptékben, mindig, mikor lefut a loop, hozzáadódik brightness = brightness + fadeamount; // a végén megfordítjuk a változás irányát: if (brightness == 0 brightness == 255) { fadeamount = -fadeamount ; // Várunk, hogy a szemünk is láthassa a változást: delay(50); Forrás: Harsányi Réka - Juhász Márton András: Fizikai számítástechnika Hobbielektronika csoport 2018/2019 5 Debreceni Megtestesülés Plébánia

Teljesítményvezérlés potméterrel A potméterrel leosztott feszültséget megmérjük az analogread(a0) függvényhívással (0 1023 közötti értéket kapunk) A kapott számot átskálázzuk a 0 255 tartományba, majd az analogwrite() függvényhívással erre az értékre állítjuk be a D5 PWM csatorna kitöltését LED Arduino anód D5 katód GND (470 Ω-on keresztül) Potméter Arduino teteje +5 V csúszka A0 alja GND (a potméter 10 kω-os) Hobbielektronika csoport 2018/2019 6 Debreceni Megtestesülés Plébánia

led_pwm.ino Az ADC 0 1023 közötti számot ad vissza, ezt legalább néggyel kell osztani, hogy 0 255 közötti számot kapjunk a PWM vezérléséhez Itt most 8-cal osztjuk az ADC-ből kapott értékeket, s osztás helyet jobbraléptetést végzünk const int led = 5; // ide van kötve a LED void setup() { // Nincs tennivaló void loop() { int reading = analogread(a0); analogwrite(led, reading>>3 ); // Osztás 8-cal // Várunk, hogy a szemünk is láthassa a változást: delay(50); Hobbielektronika csoport 2018/2019 7 Debreceni Megtestesülés Plébánia

Vezérlési szerkezetek A műveletek végrehajtási sorrendjét határozzák meg. Utasítások és blokkok Feltételes elágazás if else utasítás else if utasítás switch utasítás Ma erről lesz szó Ciklusszervezés while utasítás for utasítás do while utasítás A break és continue utasítások A goto utasítás és a címkék Forrás: BRIAN W. KERNIGHAN DENNIS M. RITCHIE: A C programozási nyelv, 3. fejezet Hobbielektronika csoport 2018/2019 8 Debreceni Megtestesülés Plébánia

A switch utasítás A switch utasítás egy kifejezés értékét több egész értékű állandó értékével hasonlítja össze, és azt az ágat hajtja végre, amelyiknél egyezést talál A switch utasítás általános felépítése: switch (kifejezés) { case állandó kifejezés: utasítások; break case állandó kifejezés: utasítások; break... default: utasítások A break szerepe az, hogy kiugorjon a switch utasítás törzséből Egy példa: switch (led_state) { case 0: digitalwrite(red_led, LOW); break; case 1: digitalwrite(red_led, HIGH); break; default: digitalwrite(red_led,!digitalread(red_led)); Hobbielektronika csoport 2018/2019 9 Debreceni Megtestesülés Plébánia

Újraírjuk a led_tristate.ino programot Emlékszünk még a piros LED vezérlésére nyomógomb segítségével? első lenyomásra a piros LED világít második lenyomásra a piros LED villog (kb. 1 Hz 2 Hz) harmadik lenyomásra a piros LED kialszik Minden gomblenyomás egy újabb állapotba viszi a LED-et: 0: A LED nem világít (a kimenet LOW) 1: A LED folyamatosan világít (a kimenet HIGH) 2: A LED villog (a kimenet állapotát 500 250 ms-onként átbillentjük) A LED állapotát a led_state változóban tároljuk A LED: Nem világít Világít Villog Most egy kicsit gyorsabbra vesszük! Hobbielektronika csoport 2018/2019 10 Debreceni Megtestesülés Plébánia

A kapcsolás Hozzávalók: Arduino, LED, nyomógomb, 470 Ω-os ellenállás LED anódja D5-re a nyomógomb pedig D3-ra csatlakozik Hobbielektronika csoport 2018/2019 11 Debreceni Megtestesülés Plébánia

Ez volt a led_tristate.ino program const int RED_LED = 5; const int PUSH2 = 3; // D5-re van kötve a LED // D3-ra van kötve a nyomógomb // Hardverfüggetlen rész (MSP430 Launchpad kártyán is futtatható!) boolean waitforpress = true; // Kezdetben lenyomásra várunk int led_state = 0; // Kezdetben a LED ki van kapcsolva int timecount = 25; // Villogás félperiódusának ideje // 20 ms egységekben (500 ms = 25*20 ms) void setup() { pinmode(red_led,output); // Legyen kimenet pinmode(push2,input_pullup); // Bemenet belső felhúzással Folytatás a következő oldalon... A változók szerepe: waitforpress: a nyomógomb lenyomás felengedés ciklusának nyilvántartására használjuk (true = lenyomásra várunk, false = felengedésre várunk) led_state: ebben tartjuk nyilván a LED állapotát (0 = nem világít, 1 = világít, 2 = villog) timecount: a 20 ms-os időszeletek (vissza)számlálója villogtatáskor Hobbielektronika csoport 2018/2019 12 Debreceni Megtestesülés Plébánia

Ez volt a led_tristate.ino program const int RED_LED = 5; const int PUSH2 = 3; // D5-re van kötve a LED // D3-ra van kötve a nyomógomb // Hardverfüggetlen rész (MSP430 Launchpad kártyán is futtatható!) boolean waitforpress = true; // Kezdetben lenyomásra várunk int led_state = 0; // Kezdetben a LED ki van kapcsolva int timecount = 25; // Villogás félperiódusának ideje // 20 ms egységekben (500 ms = 25*20 ms) void setup() { pinmode(red_led,output); // Legyen kimenet pinmode(push2,input_pullup); // Bemenet belső felhúzással Folytatás a következő oldalon... A változók szerepe: waitforpress: a nyomógomb lenyomás felengedés ciklusának nyilvántartására használjuk (true = lenyomásra várunk, false = felengedésre várunk) led_state: ebben tartjuk nyilván a LED állapotát (0 = nem világít, 1 = világít, 2 = villog) timecount: a 20 ms-os időszeletek (vissza)számlálója villogtatáskor Hobbielektronika csoport 2018/2019 13 Debreceni Megtestesülés Plébánia

Ez volt a led_tristate.ino program void loop() { if(waitforpress) { //Ha lenyomásra várunk és if(!digitalread(push2)) { //Ha lenyomás történt... if(++led_state > 2) led_state = 0; //Állapot léptetés KEYPRESS digitalwrite(red_led, led_state > 0); //LED állapot beállítása waitforpress = false; //Következő stáció: felengedésre várunk else { //Ha felengedésre vártunk és if(digitalread(push2)) { //Ha felengedést észlelünk... waitforpress = true; //Következő stáció: lenyomásra várunk delay(20); //pergésmentesítő késleltetés if(led_state == 2) //Ha villogtatás állapotban vagyunk if(--timecount == 0) { //Ha az eltelt idő 25*20 ms, akkor digitalwrite(red_led,!digitalread(red_led)); //LED átbillentése timecount = 25; //Következő billentés 25*20 ms múlva... BLINK Hobbielektronika csoport 2018/2019 14 Debreceni Megtestesülés Plébánia

Ez volt a led_tristate.ino program void loop() { if(waitforpress) { if(!digitalread(push2)) { else { if(++led_state > 2) led_state = 0; //Ha lenyomásra várunk és //Ha lenyomás történt... //Állapot léptetés digitalwrite(red_led, led_state > 0); //LED állapot beállítása waitforpress = false; if(digitalread(push2)) { waitforpress = true; delay(20); if(led_state == 2) if(--timecount == 0) { //Következő stáció: felengedésre várunk //Ha felengedésre vártunk és //Ha felengedést észlelünk... //Következő stáció: lenyomásra várunk //pergésmentesítő késleltetés //Ha villogtatás állapotban vagyunk //Ha az eltelt idő 25*20 ms, akkor digitalwrite(red_led,!digitalread(red_led)); //LED átbillentése timecount = 25; //Következő billentés 25*20 ms múlva... Ezt a részt átírjuk egy switch utasításra KEYPRESS A LED kezelése átkerül ide BLINK Hobbielektronika csoport 2018/2019 15 Debreceni Megtestesülés Plébánia

Ez lett az új program: led_tristate2.ino const int RED_LED = 5; const int PUSH2 = 3; boolean waitforpress = true; int led_state = 0; void setup() { pinmode(red_led, OUTPUT); //Kezdetben lenyomásra várunk //Kezdetben a LED ki van kapcsolva //legyen kimenet pinmode(push2, INPUT_PULLUP); //Bemenet belső felhúzással void loop() { if (waitforpress) { //Ha lenyomásra várunk és if (!digitalread(push2)) { //Ha lenyomás történt... if (++led_state > 2) led_state = 0; //Állapot léptetés (2 után körülfordulás...) waitforpress = false; //Következő stáció: felengedésre várunk else { if (digitalread(push2)) { waitforpress = true; switch (led_state) { case 0: digitalwrite(red_led, LOW); break; case 1: digitalwrite(red_led, HIGH); break; default: digitalwrite(red_led,!digitalread(red_led)); delay(250); //Ha felengedésre vártunk és //Ha felengedést észlelünk... //Következő stáció: lenyomásra várunk Innen kikerült a LED kimenet vezérlése Kompromisszum a lusta megoldáshoz Hobbielektronika csoport 2018/2019 16 Debreceni Megtestesülés Plébánia

Fénymérés fényérzékeny ellenállással A kapcsolás feszültségosztóként működik, amelyikben a felső tag egy CdS fényérzékeny ellenállás, melynek ellenállása a megvilágítástól függően széles határok között változik. A megvilágítás hatására az ellenállása csökken Az ellenállásosztó közös pontját az A3 analóg bemenetre kötöttük Az eredményt soros porton kiküldjük a számítógépre, s a terminálablakban jelenik meg. Hobbielektronika csoport 2018/2019 17 Debreceni Megtestesülés Plébánia

Photoresistor.ino void setup () { Serial.begin(9600); analogreference(default); //VCC a referencia Serial.print("Photoresistor"); void loop () { long reading = 0; for(int i=0; i<4750; i++) { reading += analogread(a3); // Trükkös osztás 1024-gyel float voltage = reading>>10; Serial.print(voltage,0); Serial.print(" mv, "); // Átszámítás kohm-ra // Rx = VCC*10k/voltage - 10k float rx = 47500/voltage - 10; Serial.print(rx,3); Serial.println(" kohm"); delay (5000); 4750 db mérés eredményét összeadjuk és nem szorzunk Vref-fel! Photoresistor 3145 mv, 5.103 kohm 3149 mv, 5.084 kohm 3036 mv, 5.646 kohm 1393 mv, 24.099 kohm 1322 mv, 25.930 kohm 4406 mv, 0.781 kohm 4449 mv, 0.677 kohm 4134 mv, 1.490 kohm 2856 mv, 6.632 kohm 2836 mv, 6.749 kohm Hobbielektronika csoport 2018/2019 18 Debreceni Megtestesülés Plébánia

Az érzékelési tartomány sávokra osztása Módosítsuk az előző programot úgy, hogy az ADC-vel mért értékeket sávokra osztjuk fel, s az eredmény szöveges értékelését kiíratjuk a soros porton! Legyenek a kiírandó szövegek: sötét derengő fény közepes fény erős fény Az eredmény szöveges értékeléséhez használjuk a most tanult switch utasítást! Hobbielektronika csoport 2018/2019 19 Debreceni Megtestesülés Plébánia

switch_case.ino const int sensormin = 0; const int sensormax = 800; void setup() { Serial.begin(9600); // szenzor minimum (tapasztalat alapján) // szensor maximum (tapasztalat alapján) // Soros port inicializálása void loop() { int reading = analogread(a3); // Szenzor kiolvasás // A mérési tartomány leképezése négy esetre int range = map(reading, sensormin, sensormax, 0, 3); switch (range) { case 0: // Eltakart szenzor esetén Serial.println("sötét"); break; case 1: // kezed közel a szenzorhoz Serial.println("derengő fény"); break; case 2: // kezed 10 cm-re a szenzortól Serial.println("közepes fény"); break; case 3: // kezed nincs a fény útjában Serial.println("erős fény"); break; delay(1000); // Késleltetés a kiíratások között Hobbielektronika csoport 2018/2019 20 Debreceni Megtestesülés Plébánia