Üdvözlöm a kezdő csoport résztvevőit!
Ebbe a fórumba fognak kerülni az induló csoport tananyagai.
Váci Robotika Labor |
You are here » Váci Robotika Labor » Kezdő csoport (kedd) » Tananyagok
Üdvözlöm a kezdő csoport résztvevőit!
Ebbe a fórumba fognak kerülni az induló csoport tananyagai.
Az első órán megismerkedünk az Arduino-val és a legalapvetőbb alkatrészekkel (próbapanel, LED, ellenállás)
Az előadás anyagát itt megtaláljátok:
Bevezetes az-arduino mikrovezerlok programozasaba
A Multiméter
A multiméter olyan műszer, mellyel alapvető méréseket tudunk végezni:
- Feszültség mérés (DC vagy AC, tehát egyen vagy váltóáram - mi csak egyenáramot mérünk!)
- Ellenállás mérés (hogy meg tudjuk állapítani egy ellenállás mértékét, pl LED elé 220Ohm körüli "előtét ellenállás" kell 5V-on)
- Áramerősség mérés (mi nem nagyon használjuk)
- Szakadás vizsgálat (hogy két pont között van-e galvanikus kapcsolat vagy nincs)
Feszültség mérése:
Mivel mi általában 5V körüli egyen feszültséggel dolgozunk (DC) ezért szinte mindíg a 20V-os méréshatárt szoktuk használni. Itt értelemszerűen 0 és 20V tartományban tudunk mérni.
Kísérlet: Állítsuk multiméterünket 20V tartományba egyen feszültségnél (bal oldalon lévő 20V), majd kössük rá a labortápunkat (piros vezeték a pirosra, fekete a feketére) majd nézzük meg, hogy a labortápon kijelzett és a multiméterrel mért értékek mennyire pontosan egyeznek meg.
Ellenállásnál vagy 20K-s (20kOhm) határt szoktuk választani, mert ez 0 és 20 000 Ohm között mér vagy esetleg 2000-et mert ez 0 és 2000 között.
Kísérlet: mérjük meg a dobozunkban lévő ellenállásokat, és válogassunk ki belőle 5db 220Ohm körüli értékűt (210-230Ohm körüli érték már megfelelő)
Szakadásvizsgálatnál ha van fémes (galvanikus) kapcsolat a két mért pont között (tehát azon két pont között tud folyni az áram - vezető) akkor sípoló hangot hallunk, ha nem akkor az "szakadás", tehát nincs galvanikus kapcsolatban.
Jelzőlámpa készítése
A jelzőlámpánkhoz összesen 5db LED-re lesz szükségünk (piros, sárga, zöld az autóknak, és piros, zöld a gyalogosoknak)
Szükségünk van még 5db 220Ohm körüli ellenállásra, amit az előző feladatban kikerestünk.
Kell még egy próbapanel, valamin vezetékek és természetesen az Arduino UNO board.
Készítsük el a rajzon látható bekötést:
(figyeljünk rá, hogy a LED-ek hosszabbik lába az ellenállás felé nézzen - tehát a rajz szerint lefelé - a rövidebbik pedig a GND felé, tehát felfelé)
Mint látszik, az Arduino lábait egy ellenálláson keresztül egy LED-hez kötjük, majd a közös GND-re csatlakoztatjuk.
int autozold = 4;
int autosarga = 3;
int autopiros = 2;
int gyalogzold = 13;
int gyalogpiros = 12;
void setup() {
// put your setup code here, to run once:
pinMode(autozold,OUTPUT);
pinMode(autosarga,OUTPUT);
pinMode(autopiros,OUTPUT);
pinMode(gyalogzold,OUTPUT);
pinMode(gyalogpiros,OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(autozold,LOW);
digitalWrite(autosarga,LOW);
digitalWrite(autopiros,HIGH);
digitalWrite(gyalogzold,HIGH);
digitalWrite(gyalogpiros,LOW);
delay(5000);
digitalWrite(autozold,LOW);
digitalWrite(autosarga,HIGH);
digitalWrite(autopiros,HIGH);
digitalWrite(gyalogzold,LOW);
digitalWrite(gyalogpiros,HIGH);
delay(1000);
digitalWrite(autozold,HIGH);
digitalWrite(autosarga,LOW);
digitalWrite(autopiros,LOW);
digitalWrite(gyalogzold,LOW);
digitalWrite(gyalogpiros,HIGH);
delay(5000);
digitalWrite(autozold,LOW);
digitalWrite(autosarga,HIGH);
digitalWrite(autopiros,LOW);
digitalWrite(gyalogzold,LOW);
digitalWrite(gyalogpiros,HIGH);
delay(1000);
}
Futófény
A jelzőlámpához nagyon hasonló kapcsolás. Itt 6db LED-et használunk (a hozzájuk tartozó 220Ohm előtét ellenállással) és a 2-es pin-től kezdődően kötjük be őket a 7-es pin-ig bezárólag.
A programnál bejön egy új dolog, a for ciklus. Kihasználjuk azt, hogy a LED-ek sorban vannak bekötve 2-7-ig, így a deklarációnál és a vezérlésnél is elég egy ciklussal "végigmennünk", és nem kell egyesével kezelnünk a kimeneteket.
A program:
void setup() {
for (int i=2; i<8; i++) {
pinMode(i,OUTPUT);
}
}
void loop() {
for (int i=2; i<8; i++) {
digitalWrite(i,HIGH);
delay(200);
}
for (int i=2; i<8; i++) {
digitalWrite(i,LOW);
delay(200);
}
}
Bemenetek "lebegése"
A fenti programot úgy módosítsuk, hogy az A0-ás lábat bemenetként használjuk, és akkor kapcsoljuk be az összes LED-et ha a bemenet HIGH (magas) egyébként pedig kapcsoljuk ki az összeset.
void setup() {
for (int i=2; i<8; i++) {
pinMode(i,OUTPUT);
}
pinMode(A0,INPUT);
}
void loop() {
if (digitalRead(A0)==HIGH) {
for (int i=2; i<8; i++) {
digitalWrite(i,HIGH);
}
} else {
for (int i=2; i<8; i++) {
digitalWrite(i,LOW);
}
}
}
Fel vagy lehúzó ellenállás használata
(lebegésmentesítés)
A két LED előtti ellenállás 220Ohm
A gomb melletti ellenállás értéke 10kOhm, és ezen keresztül a 2-es bemenet folyamatosan földre van húzva - így biztosítva a stabil állapotot akkor is, ha a gomb nincs benyomva.
A feszültségosztó
Ha egy tápegységre (jelen esetben a labortápunk ami 5V-re van állítva) két ellenállást kötök sorosan (tehát GND - első ellenállás, második ellenállás 5V) akkor a két ellenállás és a GND közötti feszültséget a két ellenállás egymáshoz viszonyított értéke határozza meg. - Ez a feszültségosztó.
Rajzon egy így néz ki:
Tehát a rajz alapján az U1 lesz a labortápunk, azaz a bal alsó pont a fekete vezetékre, a bal felső pedig a pirosra csatlakozik. Ha az R1 és R2 ellenállás értéke egyforma - pl mindkettő 10KOhm lenne, akkor a kimenet a bemeneti feszültség pont felére csökkenne, tehát U2 = 2,5V
Ha a felső R1-es ellenállás értékét csökkentem, akkor a kimenet az 5V felé húzódik, tehát az U2 feszültség nőni fog.
Fordítva ugyanígy, ha az alsó ellenállás értékét csökkentem, akkor a rendszer már a föld felé húzódik inkább, így az U2 kimeneti feszültség csökken.
Fix ellenállások helyett használhatok egyetlen váltakozó ellenállást is, azaz:
A potenciométer
(a zsargonban csak potméter, vagy poti)
A potiknak 3 lábuk van, a két szélső közül az egyiket (mindegy melyiket) a tápra (labortáp piros vezeték) kötjük, a másikat pedig földre (GND-re azaz fekete vezeték) A középső láb lesz az amin keresztül annyi feszültség jön ki, ahol éppen áll a potméter. Ha abba az irányba tekerjük a potit, amelyik lábára a földet kötöttük akkor csökken a feszültség (egész 0-ig) ha a másik irányba akkor 5V-ig nő a feszültség.
Soros monitor és soros plotter
Az Arudino és a számítógép az USB kábelen keresztül képes kommunikálni egymással, úgynevezett virtuális soros portot hoz létre (pl COM3). Hogy használni tudjuk a soros adatátvitelt a setup részbe írjuk be:
Serial.begin(9600);
A 9600-as szám a kapcsolat sebességét határozza meg Baud-ban. Általában 9600 és 115200-as értéket szoktunk használni.
Ezután már kiirathatunk bármit:
Serial.print("ez itt valami");
vagy ha azt szeretnénk, hogy a kiírás új sorban folytatódjon akkor használjuk a Serial.println("ez is valami"); parancsot.
Kössünk egy potmétert az Arduino-ra:
egyik szélső láb (mindegy melyik) az 5V-re
másik szélső léb a GND-re
a középső láb az A0-ra
A setup részben adjuk meg az A0-át mint bemenet:
pinMode(A0,INPUT);
Ezután a loop-on belül olvassuk be az A0 értékét, és irassuk ki a soros monitorra:
Serial.println(analogRead(A0));
próbáljuk ki soros monitorral és soros plotterrel is!
Készítsünk egy kapcsolást és áramkört amelyen 4db LED aszerint világít, hogy a rákötött potméter milyen állásban van!
Kell a potméteren kívül 4 db LED és 4db 220Ohm ellenállás, amik a következő lábakra vannak kötve: 2,3,4,5
void setup() {
pinMode(A0,INPUT);
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
Serial.begin(9600);
}
void loop() {
Serial.println(analogRead(A0));
if (analogRead(A0)>255) { digitalWrite(2,HIGH); } else { digitalWrite(2,LOW); }
if (analogRead(A0)>512) { digitalWrite(3,HIGH); } else { digitalWrite(3,LOW); }
if (analogRead(A0)>767) { digitalWrite(4,HIGH); } else { digitalWrite(4,LOW); }
if (analogRead(A0)>1000) { digitalWrite(5,HIGH); } else { digitalWrite(5,LOW); }
}
Fotoellenállás
Olyan ellenállás, mely a bejutó fény mennyiségével arányosan csökken. Tehát több fény esetén kisebb az ellenállása, kevesebb fény esetén nagyobb.
Teszteljük le! Kössük a multiméterünket 1-1 krokodil csipesszel a fotoellenálláshoz, állítsuk 20K-s méréshatárral ellenállás mérésre, majd mérjük meg az ellenállást különböző fényviszonyok között!
Hogyan lehetne ezt az ellenállás változást az Arduino-ban is felhasználni?
1. feladat:
Készítsünk alkonykapcsolót, ami bizonyos fény alatt bekapcsol egy LED-et!
2. feladat:
Egészítsük ki a fenti kapcsolást egy potméterrel, amivel beállíthatóvá válik, hogy a LED mikor kapcsoljon be/ki. Oldjuk meg, hogy soros plotteren látható legyen a mért fény mennyisége és a potméter beállítása is!
3. feladat:
Egészítsük ki egy relé modullal az áramkörünket!
PWM
Pulse Width Modulation - Impulzus-szélesség moduláció
Egy fogyasztó teljesítményének szabályozására kitalált módszer. Működési elve: Az analóg kimenő feszültségjelek helyettesíthetők digitális impulzus sorozattal.
Ha egy digitális jelet nézünk, annak magas értéke Arduino esetében 5V, alacsony értéke 0V. Ha adott frekvenciával "megszaggatjuk" ezt a jelet, és a kitöltési tényezőjét változtatjuk, (milyen széles legyen a magas állapot) akkor annak átlaga megfeleltethető egy analóg jel mértékének.
Mivel a mikrovezérlők nem képesek "valódi" analóg jel előállítására, így ezt a módszert használjuk helyette a teljesítmény szabályozására, pl LED fényerejének változtatására, egyenáramú villanymotor sebesség szabályozására stb..
Az Arduino UNO 6db PWM képes kimenettel rendelkezik (a száma melletti ~ jel jelzi, hogy az adott láb PWM képes), az erre kiadott analogWrite paranccsal tudunk egy kimeneten PWM jelet előállítani. (küldött jel értéke 0 és 255 között lehet)
Az ultrahangos modul:
Csak a Trig és az Echo láb megfelelő bekötésére kell figyelni (a program szerint) - vigyázat, a modulon nem mindig ez a sorrend, tehát ne csak a sorrendet figyeljük hanem a feliratokat is.
A program:
int trigPin = 11;
int echoPin = 12;
long visszhang;
int tavolsag;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
visszhang = pulseIn(echoPin, HIGH);
tavolsag= visszhang*0.034/2;
Serial.print("Tavolsag: ");
Serial.println(tavolsag);
}
Feladat:
1.)
Egészítsük ki a kapcsolásunkat egy piros LED-el, ami akkor világít, ha 20cm-nél közelebbi akadályt érzékel a szenzorunk.
2.)
Egészítsük ki a kapcsolásunkat még 2db LED-el. Az első LED zöld legyen, és akkor világítson ha az érzékelt akadály távolsága több mint 1 méter, a következő sárga LED 50cm és 1 méter közti akadálynál világítson, az utolsó piros pedig 50cm-nél közelebb.
Digitális dobókocka:
byte porog;
void setup() {
// put your setup code here, to run once:
for (byte i=7; i<=13; i++) {
pinMode(i,OUTPUT);
digitalWrite(i,HIGH);
}
pinMode(A0,INPUT);
}
void kikapcs() {
for (byte i=7; i<=13; i++) {
digitalWrite(i,LOW);
}
}
void bekapcs() {
for (byte i=7; i<=13; i++) {
digitalWrite(i,HIGH);
}
}
void loop() {
// put your main code here, to run repeatedly:
if (digitalRead(A0)==HIGH) {
porog++;
if (porog>6) { porog=1; }
}
if (porog==1) { kikapcs(); digitalWrite(10,HIGH); }
if (porog==2) { kikapcs(); digitalWrite(7,HIGH); digitalWrite(13,HIGH); }
if (porog==3) { kikapcs(); digitalWrite(7,HIGH); digitalWrite(10,HIGH); digitalWrite(13,HIGH); }
if (porog==4) { kikapcs(); digitalWrite(7,HIGH); digitalWrite(9,HIGH); digitalWrite(11,HIGH); digitalWrite(13,HIGH); }
if (porog==5) { kikapcs(); digitalWrite(7,HIGH); digitalWrite(9,HIGH); digitalWrite(10,HIGH); digitalWrite(11,HIGH); digitalWrite(13,HIGH);
if (porog==6) { kikapcs(); bekapcs(); digitalWrite(10,LOW); }
}
}
7 szegmenses kijelző
Összesen 10db láb (alul felül 5-5db), ebből a középső felül és alul is a COM (common=közös) ami nekünk a GND. Minden „pálcika” tulajdonképpen egy led, amit 220Ohm-os ellenálláson keresztül 5V tápra (labortápra) vagy az Arduino kimeneti lábaira köthetünk.
1.) Állítsunk be 5.0V-ot a labortápon, és a pozitív (piros) vezetékre kössünk egy 220Ohm-os ellenállást, majd onnan egy krokodil csipeszt. A labortáp fekete (GND) vezetékét csatlakoztassuk a felső vagy alsó COM (common / GND) lábra, majd az ellenállásról jövő vezetékkel próbáljuk végig a megmaradt lábakat. Látnunk kell, hogy melyik szegmens („pálcika”) kezd el világítani – hasonlítsuk össze a fenti rajzzal!
2.) Csatlakoztassunk mind a 8 kivezetéshez 1-1 ellenállást, majd ezen át az Arduino 2-es lábára kössük, az „a” pálcikához tartozó lábat, a 3-asra a „b”-t stb… az utolsó a „dot” (pont) lesz, ami a 9-es lábra kell, hogy kerüljön. Valamelyik COM lábat kössük az Arduino GND-jére.
byte szamol=0;
void setup() {
for (byte i=2; i<=8; i++) {
pinMode(i,OUTPUT);
}
pinMode(A0,INPUT);
}
void torol() {
for (byte i=2; i<=8; i++) {
digitalWrite(i,LOW);
}
}
void egy() {
torol();
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
}
void ketto() {
torol();
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(8,HIGH);
digitalWrite(6,HIGH);
digitalWrite(5,HIGH);
}
void harom() {
torol();
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(8,HIGH);
}
void negy() {
torol();
digitalWrite(3,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(4,HIGH);
}
void ot() {
torol();
digitalWrite(2,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
}
void hat() {
torol();
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(4,HIGH);
digitalWrite(6,HIGH);
digitalWrite(5,HIGH);
}
void het() {
torol();
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
}
void nyolc() {
torol();
for (byte i=2; i<=8; i++) {
digitalWrite(i,HIGH);
}
}
void loop() {
if (digitalRead(A0)==HIGH) {
delay(200);
szamol++;
if (szamol>8) { szamol=1; }
if (szamol==1) { egy(); }
if (szamol==2) { ketto(); }
if (szamol==3) { harom(); }
if (szamol==4) { negy(); }
if (szamol==5) { ot(); }
if (szamol==6) { hat(); }
if (szamol==7) { het(); }
if (szamol==8) { nyolc(); }
}
}
Thermistor
A thermistor egy olyan ellenállás, melynek aktuális ellenállása, a környező hőmérséklettől függ, annak változására jelentősen változtatja saját ellenállását.
Miért jelentősen? - mert minden anyagnak változik az ellenállása különböző hőmérsékleten, de ennek mértéke általában nem számottevő. A termisztor viszont eleve úgy készült, hogy ez a hatás erősen jelentkezzen, így az áramkörbe építve tulajdonképpen hőmérőként viselkedik.
A bekötése a feszültségosztó elvén történik, a kép alapján:
- Próbáljuk ki a termisztort labortápról (5V-re állítva) és mérjük meg multiméterrel a kimenő feszültséget.
- Építsük meg a kapcsolást, és írjunk egy programot, ami folyamatosan beolvassa az arduino analóg bemenetére érkező feszültséget, és ezt jelenítse meg grafikonon (soros plotteren)
- Csatlakoztassunk egy relé modult, valamint építsünk be egy potmétert. Programból oldjuk meg, hogy a relé akkor kapcsoljon be, ha a hőmérséklet a potméteren beállított érték alá/fölé változik. (ez tulajdonképpen a termosztát - azaz fűtésvezérlő, vagy hűtésvezérlő)
Infravörös távirányító
(IR receiver)
#include <IRremote.h> //ezt le kell tolteni!
IRrecv infra(2);
decode_results adat;
void setup(){
Serial.begin(9600);
infra.enableIRIn();
pinMode(13,OUTPUT);
digitalWrite(13,LOW);
}
void loop() {
if (infra.decode(&adat)) {
digitalWrite(13,HIGH);
delay(100);
digitalWrite(13,LOW);
Serial.print("Vett adat: "); Serial.println(adat.value);
infra.resume();
}
}
Feladatok infra vevő felhasználásával:
1. Kössünk be egy LED-et, és oldjuk meg, hogy a távirányító két tetszőleges gombjával be és ki tudjuk kapcsolni.
2. Alakítsuk át úgy a kapcsolást, hogy a távirányítónak csak egy gombját használjuk és ha be van kapcsolva a LED és gombot nyomunk kapcsoljon ki és fordítva.
3. Oldjuk meg, hogy azt a számot írja ki a soros monitorra a program amit megnyomtunk a távirányítón.
Hivatalos Lego Education oldal:
https://education.lego.com/en-us/support/mindstorms-ev3
Doboz rendezés:
https://education.lego.com/en-us/suppor … ng-started
Lego robot "driving base" összerakása:
Egészítsük ki a robotunk a következő szenzorokkal, és próbáljuk is ki ezek működését App Inventor programból:
Touch sensor - azaz nyomógomb
https://le-www-live-s.legocdn.com/sc/me … e42194.pdf
Gyro sensor - girószkóp (irányérzékelő):
https://le-www-live-s.legocdn.com/sc/me … 309e15.pdf
Ultrasonic sensor - Ultrahangos távolságérzékelő:
https://le-www-live-s.legocdn.com/sc/me … 6e2070.pdf
Color sensor - színérzékelő:
https://le-www-live-s.legocdn.com/sc/me … c9f18b.pdf
Emelőkeret:
https://le-www-live-s.legocdn.com/sc/me … 58e7a7.pdf
Színes téglalap:
https://le-www-live-s.legocdn.com/sc/me … a04558.pdf
You are here » Váci Robotika Labor » Kezdő csoport (kedd) » Tananyagok