36
1 Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia Arduino tanfolyam kezdőknek és haladóknak 13. Fényérzékelés, motorvezérlés, a robotika alapjai

Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

1Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

Arduino tanfolyam kezdőknek és haladóknak

13. Fényérzékelés, motorvezérlés, a robotika alapjai

Page 2: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

2Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

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

Page 3: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

3Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

Témák és mintaprogramok LDR_test.ino – CdS fényérzékeny ellenállásokkal már többször is

találkozhattunk előadásainkon, ezzel az egyszerű mintaprogrammal fényt mérünk, s a fénymérőnket megpróbáljk kalibrálni egy lxmérő segítségével

tcrt5000_test1.ino – visszavert IR fény mérése TCRT5000 szenzorral, környezeti hatások korrekciója nélkül

tcrt5000_test2.ino – visszavert IR fény mérése TCRT5000 szenzorral, környezeti hatások korrekciójával

L293D_test_1M.ino – egy DC motor vezérlése L293D IC-vel

L293D_test_2M.ino – két DC motor vezérlése L293D IC-vel

motor_test.ino – a kétkerék meghajtású robot motorjainak ellenőrzése (L298N motorvezérlő kártyával)

robot_with_tcrt5000.ino – TCRT5000 szenzor alkalmazása ütközésgátlóként (akadály észlelésekor leállítja a motort)

Page 4: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

4Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

CdS fényérzékeny ellenállás

A GL55 típusú kadmiumszulfid (CdS) anyagú ellenállások vezetőképessége a fény hatására növekszik.A spektrális érzékenység maximuma 540 nm (sárgászöld).

Típus Sötét-ellenállás

Ellenállás @ 10 lx

γ Válaszidő

GL5528 1 MΩ 10 – 20 kΩ 0.6 20 – 30 ms

𝛾=lg(R10R100

)

R10 és R100 a 10 és 100 lux-nál mért ellenállás értékek.

Page 5: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

5Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

Fotometriai alapfogalmakFényforrás fényerőssége: az egységnyi térszögbe kisugárzott fényteljesítmény (ref 555 nm). Mértékegysége: 1 cd (= 1W/683 sr), kb. 1 gyertya fényerőssége. Egy 100 W izzó fényerőssége kb. 120 cd.Fényáram: a fényerősség és a kisugárzási térszög szorzata. Mértékegysége: 1 lm ( = 1 cd · 1 sr) Egy 100 W izzólámpa fényárama kb. 1380 lumen.Megvilágítás erőssége: az adott felületre eső fényáram és a felület nagyságának hánydosa. Mértékegysége: 1 lx (1 lux a megvilágítása annak a felületnek, amelynek 1 négyzetméterére merőlegesen és egyenletesen 1 lumen fényáram esik). Egy 100 W izzó 1,5 m távolságból kb. 100 lx megvilágítást eredményez.

Környezet Megvilágítás (lux)

Iroda 500

Folyosó 50

Napfény nyáron 100 000

Napfény télen 10 000

Telihold 0,2

Színérzékelés határa 3

Page 6: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

6Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

LDR_test.ino

void setup() Serial.begin(9600); analogReference(DEFAULT);

void loop() int sensorValue = analogRead(A0); Serial.print("A0 = "); Serial.print(sensorValue); Serial.print(" V0: "); float voltage = sensorValue*4.66/1023; Serial.print(voltage,3); float Rx = 10000.0; if(sensorValue > 0) Rx = 46.6/voltage - 10; Serial.print(" V Resistance = "); Serial.print(Rx,1); Serial.println(" kOhm"); delay(2000);

10k

Itt 4,66 V a mért tényleges referencia feszültség (5 V helyett).

Rx kiszámítása:

voltage = 4,66 V * 10k /(Rx + 10k)

Ha Rx-et kifejezzük, akkor: Rx = 4,66 V * 10k / voltage – 10k

Az LDR és a 10 kΩ-os ellenállás feszült-ségosztót alkot. Az osztó feszültségét az ADC segítségével megmérve, az LDR ellenállása meghatározható

Page 7: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

7Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

A fotoellenállás kalibrálása

Feladat: változtassuk a megvilágítást, és mérjük meg az LDR ellenállását a megvilágítás függvényében! (Luxmérő alkalmazást találunk az okostelefonokhoz is)

Mindkét skála logaritmikus!

Page 8: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

8Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

TCRT5000 reflektív optikai érzékelőEgy IR LED-et és egy fototranzisztort tartalmaz.

Működési elv: ha nincs akadály, a fény nem verődik vissza, a tranzisztor nem érzékel fényt.Visszaverődés esetén a távolságtól és a refleexiós tényezőtől függ a visszaverődési arány.

Page 9: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

9Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

Bekötési vázlat

47 kΩ100 Ω

Fototranzisztornál mindegy, hogy kollektor- vagy emitteer oldalra kerül a munkaellenállás. Mi most emitteer oldalra tetteük, így a nagyobb feszültség nagyobb megvilágítotteságot jelent.

Page 10: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

10Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

TCRT5000_test1.ino

void setup() Serial.begin(9600); analogReference(DEFAULT); //VCC referencia pinMode(6,OUTPUT); digitalWrite(6,HIGH);

void loop() int a = meres(A0, 500); Serial.print("A = "); Serial.println(a); delay(500);

int meres(int pin, int n) long sum=0; for(int i=0; i<n; i++) sum += analogRead(pin); return sum/n;

Több mérést végzünk, átlagolással

Page 11: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

11Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

Kísérletezzünk! Távolítsnk/közelítsünk egy tárgyat, és figgyeljük a mért értékek

változását!

Page 12: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

12Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

tcrt5000_test2.ino A beszűrődő fény hatását úgy minimalizálhatjk , hogy a LED ki- és

bekapcsolt állapotában is végzünk egy-egy mérést, s csak a változást vesszük figgyelembe

A LED-et a D6 kimenet vezérli, az analóg jelet az A0 bemenet fogadja

void setup() Serial.begin(9600); analogReference(DEFAULT); pinMode(6, OUTPUT); digitalWrite(6,LOW);

void loop() int a = meres(6,A0, 500); Serial.print("A = "); Serial.println(a); delay(500);

int meres(int pin1, int pin2, int n) long sum1=0, sum2=0, difi; digitalWrite(pin1, HIGH); for(int i=0; i<n; i++) sum1 += analogRead(pin2); digitalWrite(pin1, LOW); for(int i=0; i<n; i++) sum2 += analogRead(pin2); difi = (sum1 - sum2)/n; return difi;

Page 13: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

13Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

A beszűrődő fény hatása Az alábbi táblázatban és ábrán összehasonlítottuk a két program

eredményét. A különbséget a beszűrődő fény okozza

Page 14: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

14Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

Bevezetés a robotikába

Page 15: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

15Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

Kisteljesítményű DC motorok

Feszültség: 3 V – 6VÁram: 0.4 A – 0.6 AForgásirány váltás: polaritásváltással

Page 16: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

16Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

Motorvezérlés: H-hídHa a motor forgásirányát meg akarjuk változtatni, fel kell cserélni a polaritást. Ezt négy kapcsolóval tudjuk megoldani. Az elrendezést H-hídnak nevezzük.

Forrás és leírás: hobbirobot.hu/content/vonalkoveto-i-robotika-kezdoknek

K1 és K4 zárásakor a motor az egyik irányba forog.K2 és K3 zárásakor az ellenkező irányba forog.

Elektronikus vezérlés: tranzisztorokkalMivel K1 és K2, s hasonlóan K3 és K4 sohasem lehet egyidejűleg zárva, elegendő félhidanként egy-egy vezérlőjel, mely a kapcsolókat ellenütemben zárja.

Fél híd Fél híd

Page 17: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

17Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

L293D 4db félhíd, vagy 2db H-híd

VCC = 4,5 – 36 VVA, VEN = 2.3 – 7 VImax = 0,6 AIpeak = 1,2 A (100 µs)

Félhíd: egyirányú forgás vezérlésére (pl. ventillátorok)H-híd: polaritásváltást igénylő vezérlésekhez

Page 18: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

18Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

Egy motor vezérléseEnable1,2 IN1 IN2 Motor

H 0 0 Stop

H 1 0 Előremenet

H 0 1 Hátramenet

H 1 1 Stop

L X X Stop

E1,2: Letiltja vagy engedélyezi az 1. H-hidat

In1 és In2 a forgás irányát adja meg. Csak az 1,0 illetve 0,1 kombináció esetén van forgás.

Egyszerűsítési lehetőségek:(ha sokalljuk a kivezetéseket)

1. Ha E1,2 állandóan magas szintet kap, In1 és In2 önmagában elég a vezérléshez.

2. Ha In2 = In1 (inverter, IC-vel vagy tranzisztorral) akkor E1,2 és In1 elegendő a vezérléshez.

Page 19: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

19Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

Egy motor vezérlése ArduinovalBekötési vázlat:D2 = In1 (sárga)D3 = Enable1,2 (kék)D4 = In2 (zöld)

Megjegyzések: 1. Az IC-t 180 fokkal elforgattuk a kedvezőbb vezetékezéshez!2. Ha PWM jellel vezéreljük az E1,2 bemenetet, akkor

szabályozhatjuk a motor teljesítményét…

Az Arduino itt az USB csatlakozón keresztül kap tápfeszültséget!

Page 20: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

20Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

L293D_test_1M.ino

#define PWMA 3 //L293D pin1#define D1A 2 //L293D pin2#define D2A 4 //L293D pin7

void setMotor(int speed, boolean reverse) analogWrite(PWMA, speed); digitalWrite(D1A, !reverse); digitalWrite(D2A, reverse);

void setup() Serial.begin(9600); pinMode(PWMA, OUTPUT); pinMode(D1A, OUTPUT); pinMode(D2A, OUTPUT); Serial.println("L293D test program");

void loop() delay(5000); Serial.println("move forward 75%"); setMotor(196, 0); // Forward 75% delay(2000); setMotor(0, 0); // Stop motor delay(1000); Serial.println("move reverse 75%"); setMotor(196, 1); // Reverse 75% delay(2000); setMotor(0, 0); // Stop motor

Egy motor vezérlése. A végtelen ciklsban 5s várakozás tán 2s előremenet, 1s várakozás, majd 2s hátramenet ismétlődik. Az előre- és hátramenet 75 %-os teljesítménnyel történik.

Page 21: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

21Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

Két motor vezérlése Arduinoval

Az Arduino itt az USB csatlakozón keresztül kap tápfeszültséget!

Megjegyzés:A rajzon látható kapcsolásban azonos vezérlés mellett a két motor azonos irányba forog.

A fényképen látható független jobb és bal kerék meghajtású kocsihoz azonban az egyik motor polaritását fel kell cserélni! Egyenesvonalú mozgásnál a két motor forgása ellentétes irányú!

A kapcsolás pazarlóan bánik az Arduino kimenetekkel. Ez a feladat kevesebb kivezetéssel is megoldható volna.

Page 22: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

22Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

L293D_test_2M.ino

#define PWMA 3 //L293D pin1#define D1A 2 //L293D pin2#define D2A 4 //L293D pin7#define PWMB 6 //L293D pin9#define D3B 5 //L293D pin10#define D4B 7 //L293D pin15

void setup() Serial.begin(9600); pinMode(PWMA, OUTPUT); pinMode(D1A, OUTPUT); pinMode(D2A, OUTPUT); pinMode(PWMB, OUTPUT); pinMode(D3B, OUTPUT); pinMode(D4B, OUTPUT); Serial.println("L293D test program");

void setMotor(int speed, boolean reverse) analogWrite(PWMA, speed); analogWrite(PWMB, speed); digitalWrite(D1A, !reverse); digitalWrite(D2A, reverse); digitalWrite(D3B, !reverse); digitalWrite(D4B, reverse);

void loop() delay(5000); Serial.println("move forward 75%"); setMotor(196, 0); // Forward 75% delay(2000); setMotor(0, 0); // Stop motor delay(1000); Serial.println("move reverse 75%"); setMotor(196, 1); // Reverse 75% delay(2000); setMotor(0, 0); // Stop motor

Két motor vezérlése. A végtelen ciklsban 5s várakozás tán 2s előremenet, 1s várakozás, majd 2s hátramenet ismétlődik.

Az előre- és hátramenet 75 %-os teljesítménnyel történik.

Page 23: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

23Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

Építsünk robotot! A képen látható 2WD (kétkerék meghajtású) robot az olcsóbbak

közé tartozik, de nem volt szerencsés választás mert barkácsolás és kiegészítők nélkül nem lehet összerakni

Page 24: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

24Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

A robot alváz és a motorok A 2WD robotalváz (szerelőlap, bolygókerék, elemtartó, 2 db

egyenáramú motor a műanyag kerekekkel) külön készletként is beszerezhető

Könnyen összeszerelhető, de a szerelőlapon található fratok egyetlen általam ismert mikrovezérlő vagy motorvezérlő kártyához sem illeszkednek – jó, ha van ottuhon fúrógép, távtartók és csavarok

Page 25: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

25Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

A mikrovezérlő kártya és kiegészítői Az Ardino kártya egy

szokványos UNO klón, CH340 USB-soros átalakítóval

Az Ardino IDE Tools menüjében az Arduino/ Genuino Uno kártyát kell kiválasztani

A Sensor shield kártya csak az Ardino kártya kivezetéseinek kényelmesebb elérésére való, egyébként nélkülözhető

Page 26: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

26Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

Az L298N motorvezérlő kártya A motorvezérlő kártya egy L298N IC-t tartalmaz (Stmicroelectronics)

Két teljes híd

Max 46 V, ill. 2 A (max 25W)

Motor és vezérlés közös vagy különtáplálással(közös táplálás max. 12 V-ig)

Engedélyezés:

fixen (jumperrel)

Külső jellel (pl. PWM)

Forrás: lastminteengineers.com/l298n-dc-stepper-driver-ardino-ttorial/

jumper aközöstápellátáshoz

Védődiódák

Page 27: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

27Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

Egy lehetséges kapcsolás Az Ardino kártya ittu külön

táplálást kap, csak a közös pont (GND) van közösítve, a motorvezérlő kártya pedig saját maga állítja elő az 5V tápfeszültséget (jmper van )

Ha a motorok teljesítményét (a robot sebességét) is szabályozni akarjk, akkor az Enable bemeneteket is az Ardino-val kell meghajtani

Forrás: lastminteengineers.com/l298n-dc-stepper-driver-ardino-ttorial/

Page 28: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

28Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

Az általunk megépített kapcsolás A motorok táplálását négy AA

cerzaelemmel oldottuk meg

Az Ardino kártya egy 9 V-oselemről kap táplálást és

A motorvezérlő elektronika +5 Vfeszültségét az Ardinokártya biztosítja

A motorok tükör-szimmetriks bekötésehardveresen biztosítjaaz ellentétes irányúforgást a bal és jobbmotornál

Felhasznált forrás: lastminteengineers.com/l298n-dc-stepper-driver-ardino-ttorial/

B- bal A- jobb

Page 29: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

29Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

A megépített kapcsolás részletei A részletfotókon látható a

motorok bekötése és a tápellátás megoldása

Page 30: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

30Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

motor_test.ino

#define B1A 7 // Bal motor előre#define B1B 6 // Bal motor hátra#define A1A 5 // Jobb motor előre#define A1B 4 // Jobb motor hátravoid setup() Serial.begin(9600); Serial.println("Motor test"); pinMode(B1A,OUTPUT); pinMode(B1B,OUTPUT); pinMode(A1A,OUTPUT); pinMode(A1B,OUTPUT); digitalWrite(B1A,LOW); digitalWrite(B1B,LOW); digitalWrite(A1A,LOW); digitalWrite(A1B,LOW);

Ez az egyszerű kis program csak arra szolgál, hogy a motorok működését és forgásirányát ellenőrizni tdjk

Vezérlés:B1A B1B A1A A1B

0 0 0 0 Stop1 0 1 0 Forward (Előre)0 1 0 1 Reverse (Hátra)1 0 0 1 Left (Balra)0 1 1 0 Right (Jobbra)

A program a soros porton kiírja, hogy éppen mit csinál (9600 bps)

A program: Előre 3 mp, Hátra 3mp, Jobbra 3 mp,Balra 3 mp, közben 1-1 mp Stop Folytatás a következő oldalonR

Page 31: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

31Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

motor_test.inoSerial.println("Turn RIGHT"); digitalWrite(B1A,HIGH); digitalWrite(B1B,LOW); digitalWrite(A1A,LOW); digitalWrite(A1B,LOW); delay(3000); digitalWrite(B1A,LOW); digitalWrite(B1B,LOW); digitalWrite(A1A,LOW); digitalWrite(A1B,LOW); delay(1000); Serial.println("Turn LEFT"); digitalWrite(B1A,LOW); digitalWrite(B1B,LOW); digitalWrite(A1A,HIGH); digitalWrite(A1B,LOW); delay(3000); digitalWrite(B1A,LOW); digitalWrite(B1B,LOW); digitalWrite(A1A,LOW); digitalWrite(A1B,LOW); delay(2000);

void loop() Serial.println("Forward ALL"); digitalWrite(B1A,HIGH); digitalWrite(B1B,LOW); digitalWrite(A1A,HIGH); digitalWrite(A1B,LOW); delay(3000); digitalWrite(B1A,LOW); digitalWrite(B1B,LOW); digitalWrite(A1A,LOW); digitalWrite(A1B,LOW); delay(1000); Serial.println("Reverse ALL"); digitalWrite(B1A,LOW); digitalWrite(B1B,HIGH); digitalWrite(A1A,LOW); digitalWrite(A1B,HIGH); delay(3000); digitalWrite(B1A,LOW); digitalWrite(B1B,LOW); digitalWrite(A1A,LOW); digitalWrite(A1B,LOW); delay(1000);

Page 32: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

32Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

Robot akadályérzékelővel Szereljünk fel egy TCRT5000 érzékelőt a robot elejére és kössük a

kimenetét az Ardino A0 analóg bemenetére!

A következő program leállítja a motorokat, ha akadályt észlel

Page 33: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

33Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

robot_with_tcrt5000.ino

#define B1A 7 // Bal motor előre#define B1B 6 // Bal motor hátra#define A1A 5 // Jobb motor előre#define A1B 4 // Jobb motor hátra

int state = 0; // 0:stop, 1:forwardint hatter, adat;

int meres(int pin, int n) long sum = 0; for (int i = 0; i < n; i++) sum += analogRead(pin); return sum / n;

void setup() Serial.begin(9600); Serial.println("Motor with TCRT5000"); analogReference(DEFAULT); pinMode(B1A, OUTPUT); pinMode(B1B, OUTPUT); pinMode(A1A, OUTPUT); pinMode(A1B, OUTPUT); digitalWrite(B1A, LOW); digitalWrite(B1B, LOW); digitalWrite(A1A, LOW); digitalWrite(A1B, LOW); hatter = meres(A0, 100); Serial.print("Háttér = "); Serial.print(hatter); Serial.print(" Limit = "); hatter = hatter + hatter / 10; Serial.println(hatter);

Ebben a programban nem kapcsolgatjk a LED-et

A program indításakor végzünk egy „háttuér” mérést, s ha ennél 10 %-kal több fényt érzékelünk, az akadálynak tekintjük

Page 34: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

34Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

robot_with_tcrt5000.inovoid loop() adat = meres(A0, 100); switch (state) case 0: digitalWrite(B1A, LOW); digitalWrite(B1B, LOW); digitalWrite(A1A, LOW); digitalWrite(A1B, LOW); if ( adat < hatter) Serial.println("Forward ALL"); state = 1; break; case 1: digitalWrite(B1A, HIGH); digitalWrite(B1B, LOW); digitalWrite(A1A, HIGH); digitalWrite(A1B, LOW); if ( adat > hatter) Serial.println("Stop ALL"); state = 0; break; delay(50);

Page 35: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

35Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

Az Arduino nano kártya kivezetései

Page 36: Arduino tanfolyam kezdőknek és haladóknakmegtestesules.info/hobbielektronika/2019/arduino19_13.pdf · 2020. 3. 21. · A beszűrődő fény hatását úgy minimalizálhatjˆk ,

36Hobbielektronika csoport 2019/2020 Debreceni Megtestesülés Plébánia

Ellenállás színkódok