Váci Robotika Labor

User info

Welcome, Guest! Please login or register.


You are here » Váci Robotika Labor » Kezdő csoport (kedd) » Tananyagok


Tananyagok

Posts 1 to 20 of 20

1

Üdvözlöm a kezdő csoport résztvevőit!

Ebbe a fórumba fognak kerülni az induló csoport tananyagai.

0

2

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

0

3

A Multiméter
https://media.icdn.hu/product/GalleryMod/2018-04/464224/resp/978369_maxwell_25103_digitalis_multimeter.jpg

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.

0

4

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é)

http://www.edukanyar.hu/karbantart/jelzolampa.jpg

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.

0

5

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);
}

0

6

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.
http://www.edukanyar.hu/karbantart/futofeny.jpg

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);
}
}

0

7

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);
}
}
}

0

8

Fel vagy lehúzó ellenállás használata
(lebegésmentesítés)

http://www.edukanyar.hu/karbantart/gomb.jpg

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.

0

9

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:
http://www.bsselektronika.hu/rajzok/feszoszto.gif

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.

0

10

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!

0

11

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

0

12

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); }
}

0

13

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.

http://vemix.hu/img/33501/250591/250591.jpg

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!

0

14

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.
http://megtestesules.info/hobbielektronika/mbed/images/pwm/pwm_example.png

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)

0

15

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.

https://i2.wp.com/randomnerdtutorials.com/wp-content/uploads/2013/11/ultrasonic-sensor-with-arduino-hc-sr04.jpg

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);
}

0

16

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.

0

17

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); }
  }
}

0

18

7 szegmenses kijelző

https://lastminuteengineers.com/wp-content/uploads/2018/06/7-Segment-Internal-LED-Formation-Structure-and-Pinout.png
Ö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.
https://lastminuteengineers.com/wp-content/uploads/2018/07/Project-Working-and-Interfacing-Seven-Segment-Display-with-Arduino.jpg

0

19

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(); }
}

}

0

20

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:
https://www.hacktronics.com/images/arduino_thermistor_circuit.jpg

http://www.circuitbasics.com/wp-content/uploads/2015/12/Arduino-Thermistor-Temperature-Sensor-Voltage-Divider-Circuit-1024x720.jpg

http://www.circuitbasics.com/wp-content/uploads/2015/12/Arduino-Thermistor-Basic-Set-Up-1024x437.png

- 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ő)

http://www.circuitbasics.com/wp-content/uploads/2015/11/Arduino-Temperature-Dependent-Light-Bulb-With-5V-Relay-Updated.png

0


You are here » Váci Robotika Labor » Kezdő csoport (kedd) » Tananyagok