Robotépítés kezdőknek

Robotépítés kezdőknek

VONALKÖVETŐ ROBOT - ELSŐ RÉSZ

2017. december 06. - FizikusRobotBlog

Bevezetés
Ebben a cikkben a robotika alapjait tekintem át egy egyszerű kis robot építésén keresztül bemutatva.

A robotépítés 4 főbb fázisra bontható:

  1. Tervezés
  2. Építés
  3. Tesztelés
  4. Módosítás és továbbfejlesztés

Miután elhatároztuk, hogy építünk egy robotot, már csak azt kell eldönteni milyen feladatot tudjon önállóan végrehajtani. Ezzel el is érkeztünk a robotépítés első lépéséhez, a tervezéshez. A tervezés és építés során megpróbáltam a lehető legegyszerűbb megoldásokat felhasználni

Tervezés:
Legelőször a megoldandó feladatot kell pontosan definiálni. El kell dönteni hogy mit is tudjon a robot. Érdemes először egyszerűbb, kisebb tudású robotokkal kezdeni és fokozatosan haladni az egyre bonyolultabbak felé.

A cikkben egy vonalkövető robot építését mutatom be. A feladat elég egyszerűnek hangzik: a robot kövesse a padlón lévő vonalat (világos padlón fekete szigetelőszalag csík). Amint látni fogjuk, a megvalósítás már nem is lesz olyan egyszerű. A végeredmény viszont egy teljesen autonóm robot lesz.

A robot fő feladata, miszerint kövesse a vonalat, több részfeladatra bontható le.

1. Vonalérzékelés (szenzorok)
Ahhoz hogy egyáltalán követni tudja a robot a vonalat, először is érzékelnie kell azt. Szükségünk lesz egy olyan szenzorra, ami érzékeli a vonalat, és olyan válaszjelet ad, amit a robotot vezérlő elektronika értelmezni tud.

2. Adatfeldolgozás és vezérlés
A robotnak kell egy “agy”, ami beolvassa, feldolgozza és értelmezi az érzékelők adatait. Ezek alapján döntéseket végez és ezektől függően a megfelelő kormányparancsok kiadásával vezérli a robotot hogy a vonalat követni tudja. A végrehajtandó parancsokat olyan vezerlőjelekké kell alakítania, amit a motorsebesség szabályozó és/vagy a kormányszervek értelmezni tudnak. Vonalkövető robot építhető tranzisztorokkal, vagy műveleti erősitőkkel is, de erre a feladatra a mikrovezérlők (mikrokontrollerek) lesznek a legalkalmasabbak.

3. Haladás (meghajtás)
A vonal követéséhez a robotnak nemcsak haladnia kell, hanem a haldási irányát is meg kell tudnia változtatni (kanyarodás). Ehhez valamilyen meghajtási és kormányzási módra lesz szükség.

A fentiekben említett részfeladatokat nem kezelhetjük különálló részekként, mert kölcsönösen meghatározzák egymást. Például az érzékelők által szolgáltatott jel meghatározza, hogy a robotot vezérlő mikrokontrollernek milyen jeleket kell tudnia feldolgozni. Hasonló módon a meghajtás kiválasztása meghatározza hogy a robotvezérlőnek milyen jellegű kormányparancsokat kell kiadnia. A robot mérete és súlya pedig az alváz és a meghajtás méretezésére van hatással.

Most részletesebben is megvizsgálom az egyes részfeladatokat és leírom, hogy a robotnál milyen megoldások használata mellett döntöttem. Mivel ez a cikk főleg a robotikával most ismerkedőknek szól, ezért a lehető legegyszerűbb megoldásokat fogom választani.

Szenzorok
Először azt kellene eldönteni, hogy milyen érzékelővel detektáljuk a vonalat. A vonal érzékelése többféleképpen tehető meg. Az alábbiakban felsorolok néhány példát:

A vonal érzékelésére használhatunk pl. egy kamerát. Ekkor a kamera által készített képek feldolgozásával és elemzésével határozhatjuk meg a vonal helyét. Ez a módszer elég bonyolult, ezért inkább egy egyszerűbb megoldást alkalmazok.

A vonalkövető robotok általában a padlóról visszaverődött fény mérésével érzékelik a vonalat. A fekete vonal ugyanis kevesebb fényt ver vissza, a világos/fehér padló pedig többet. A megvilágításhoz használt fény hullámhosszától, és a detektor típusától függően többféle megoldás is létezhet:

  • LED fényforrás + fotoellenállas (LDR) (látható fény)
  • LED fényforrás + fototranzisztor (látható fény)
  • IR LED fényforrás + fototranzisztor (infravörös fény)

A látható fény tartományában működő érzékelők teljesitményét a környezeti fényviszonyok nagyban befolyasolják. Az infravörös tartományban működő érzékelők erre kevesbé érzékenyek.

Az érzékelési mód kiválasztása után már "csak" azt kell eldönteni, hogy hány darab érzékelőt (1, 2, 3, 4, 5, 6 stb...) és milyen elrendezésben akarunk használni. A neten sokfele változatra találhatunk példát.

A robotnál fehér fényű LED-eket és fotoellenállásokat (LDR) fogok használni a vonal érzékelésére, mert ezek olcsón és könnyen beszerezhetőek.

Fotoellenállás (LDR)

vk1-1.jpgA robot a vonal érzékelésére fehér LED + fotoellenállás (LDR) párosból álló fényérzékelő szenzorokat használ. A fotoellenállás lényegében egy kadmium szulfid (CdS) ellenálláscsík, aminek az ellenállása a rá eső fény intenzitásától függően változik. Nagy fényerősség esetén az ellenállása alacsony, sötétben pedig nagy. Amikor a fotoellenállás a fekete vonal felett van, a kevés visszavert fény miatt az LDR ellenállása nagy, amikor pedig a fehér padló felett van , akkor a több visszavert fény miatt az LDR ellenállása alacsony. Ezt az ellenállásváltozást kell olyan érték változásává alakítani, amit a mikrovezérlő mérni tud. Ezt egy ún. feszültségosztó kapcsolással tehetjük meg (a vonalérzékelő szenzor felépítését részletesen a második részben ismertetem majd). Így a szenzor az LDR-re érkező fény erősségétől függő feszültséget ad válaszul, amit a robotvezérlő az analóg-digitális átalakitóval (ADC) már mérni tud. A talajt megvilágító állandó nagyságú fényerősségről egy fehér fényű LED gondoskodik.

Analóg és digitális jelek
A vonalérzékelő szenzor a mérendő jellel (jelen esetben a fényerősséggel) arányos analóg feszültségjelet állít elő, ami két szélső érték között végtelen sok értéket vehet fel. Ahhoz hogy ezt a jelet mérni tudjunk és a mikrovezérlők digitális világában fel tudjuk dolgozni, egy analóg-digitális átalakítóra (ADC) van szükség. A legtöbb modern mikrokontroller rendelkezik beépített ADC átalakítóval. Az ADC a bemeneti analóg feszültségjelet átalakítja egy digitális jellé (bináris számmá). Ennek a számnak a lehetséges maximális értékét az ADC felbontása határozza meg. A robotnál használt AVR mikrovezérlő analóg-digitális átalakítója 10 bites, azaz 0-1023 között vehet fel értékeket.

Az ADC két referencia feszültségszint közötti feszültségtartományban mér. Az alsó a föld (GND) a felső peidg ARef . Tehát az ADC a 0 – ARef feszültségtartományba eső analóg bemeneti jelet alakítja át egy 0 – 1023 közötti digitális jellé (bináris számmá). Ha a bemenő feszültség 0V (GND), akkor a kimenet 0, ha a bemenő feszültség ARef-el egyezik meg, akkor a kimenet értéke 1023, ha pedig a bemenő feszültség pl. a referenciafeszültség fele, akkor a kimenet értéke ezzel arányosan 512 lesz. Az alábbi ábra ezt szemlélteti ahol ARef= 5V.

vk1-2.jpg

Az AVR mikrovezérlő egy kifinomult elektronikus eszköz, amely csak bizonyos határértékek közé eső feszültséget tud mérni. A határértéken kívül eső feszültségek károsíthatják a mikrokontrollert. Az AVR adatlapján az szerepel, hogy az ADC lábon a mérendő bemeneti jelnek AGND (0V) és Vcc (5V) között kell lenni (az ARef referencia feszültség maximális értéke 5V). Ha a referencia feszültségnél nagyobb feszültséget akarunk mérni, akkor egy feszültségosztó kapcsoláson keresztül kell a bemeneti jelet a mikrovezérlőre kötni.

vk1-3.jpg

Meghajtás:
A vonalkövetésehez a robotnak haladnia kell tudni. Ehhez valamilyen motorra lesz szükség. Itt is többféle lehetőség kínálkozik. Használhatunk pl. áttételes DC motort, léptetőmotort vagy szervómotort. Mindegyik motor más-más feladatra a legideálisabb. Mivel ezek a motorok különböző módon működnek és teljesen különböző jelekkel vezérelhetőek, ezért a motorok kiválasztása eleve meghatározza a motorvezérlési módot is. A motorok eltérő feszültség és áram szükséglete pedig az áramforrásra vonatkozó követelményeket határozza meg.

A motorok kiválasztását az is befolyásolhatja, hogy milyen meghajtási módot választunk. Ez a robot által elvégzendő feladattól is függhet. Például milyen terepen kell majd a robotnak mozognia (szárazföld, víz esetleg mindkettő)? Lánctalpat használjon-e a robot vagy kekeket. A kerekek elrendezése is sokféle lehet (3, 4 esetleg 6 kerék). Ezek közvetve a kormányzás módját is meghatározhatják. Például a lánctalpas meghajtásból eleve következik a differenciális hajtás. Ha nem használunk bolygókereket és omniwheel-t, akkor 3 kerék esetén pedig következik, hogy legalább az egyik kereket kormányozni kell majd.

A DC motorokkal összehasonlítva a léptetőmotorok és a szervómotorok vezérlése bonyolultabb, ezért a vonalkövető robot meghajtásához két darab áttételes DC motort fogok használni. A kekekek kormányzását elkerülendő, a robot egy differenciális meghajtást használó 3 kerekű konstrukció lesz (két egymástól függetlenül meghajtott kerék és egy bolygókerék). A motorok tápellátásáról 4db ceruzaelem fog gondoskodni.

Most nézzük meg hogyan lehet a differenciális meghajtással egy robotot mozgatni és kormányozni.

Differenciális meghajtás
A diferenciális meghajtású robot úgy működik mint egy lánctalpas jármű. A különböző oldalon lévő kerekek egymástól függetlenül vannak meghajtva. Ezek biztosítják a meghajtást és a kormányzást is, ezért nem szükséges az első kerekek elfordítása, mint pl. egy hagyományos autó vagy kerékpár esetén. A két oldalon lévő kereket azonos sebességgel hajtva, a robot az adott irányba egyenesen halad (A). A robot kormányzásához elegendő a jobb és bal oldali kereket különböző sebességgel meghajtani. Például ha a jobb oldali kerék gyorsabban forog mint a bal oldali kerék, akkor a robot balra fordul (B). A fordulás ívenék nagysága a kerekek forgási sebességének a különbségétől függ. Ha az egyik motor áll, akkor az álló kerék körül elfordulva kanyarodik a robot (C). Az alábbi ábráról látható hogy akár a helyben fordulás is megvalositható, ha a motorok forgásiránya ellentétes (D).

vk1-4.jpg


A diferenciális meghajtás esetén a robot mozgatása és kormanyzása a két DC motor forgasirányának és sebességének a változtatásával történik. Most nézzuk meg részletesen hogyan tehető ez meg.

Motorvezérlés (DC motor)
Egy DC villanymotor meghajtása könnyű, elég csak a motorhoz csatlakozó két vezetéket egy elemre kötni és a motor működni fog. Ez nagyszerű, de egyetlen irányba forog csak a motorunk. Mi a teendő, ha a másik irányba szerenténk a motorunkat hajtani? A válasz most is igen egyszerű, cseréljük fel az elem pólusaira kötött vezetékeket és a motor az ellenkező irányba fog forogni.

A robotunknál viszont menet közben nem tudjuk az elemre kötött vezetékeket mindíg leválasztani és fordítva visszakötni, ha irányt akarunk váltani. Ez a probléma 4 kapcsoló használatával könnyedén megoldható egy H-híd (H-bridge) kapcsolással.

vk1-5.jpg

A H-bridge működési elve: A) H-bridge áramkör, B) a K1 és K4 kapcsolók zárásakor a motor az egyik irányba forog, C) a K2 és K3 kapcsolók zárásakor a motor a másik irányba forog .

Az A ábrán, amikor mind a négy kapcsoló nyitva van, egyik motorvezeték sem kapcsolódik az elemhez. A motor elindításához kapcsoljuk be a K1 és a K4 kapcsolót (B ábra). Figyeljük meg hogy a motor bal vezetéke az elem pozitív pólusához csatlakozik, a jobb oldali vezeték pedig a negatív pólushoz. Ahhoz, hogy a motor az ellenkező irányba forogjon, a K2 és K3 kapcsolókat kell zárni a K1 és K4 kapcsolókat pedig kinyitni. Figyeljük meg hogy a motor bal vezetéke most az elem negatív pólusához csatlakozik, a jobb oldali vezeték pedig a pozitív pólusához, a vezetékek bekötése az előző fordítottja

A motorok elektronikus úton történő kapcsolását megtehetjük pl. hagyományos tranzisztoros vagy FET-es H-híd kapcsolásokkal, de a robotnál egy egyszerűbb megoldást fogok alkalmazni. A motorok vezérlését egy erre a célra tervezett motorvezérlő IC-vel valósítom meg (részletek a 2.-ik részben). Az L293D IC két H-híd kapcsolást tartalmaz, ezért egyetlen IC-vel két darab DC motor vezérlehető. Ezáltal a motorvezérlő kapcsolás sokkal egyszerűbb lesz.

Ez minden, amit tudunk kell a DC motorok vezérléséhez? Ha a motorokat csak két irányba akarjuk hajtani maximális sebességgel, akkor ennyi elég is. Bár néhány alkalmazás esetében (amilyen például a vonalkövető robotnál is használt differenciális meghajtás), nagyon hasznos tud lenni, ha a motorokat különböző sebességekkel tudjuk meghajtani.

Adott feszültség esetén a motorok sebessége egy nagyon egyszerű és szellemes megoldással változtatható, ez az ún. impulzusszélesség moduláció (Pulse Width Modulation - PWM). Ha a motorra adott feszültséget a motorvezérlővel nagyon gyorsan (percenként akár több ezerszer) ki/be kapcsolgatjuk és a ki/bekapcsolási idők egymáshoz viszonyított arányát változtatjuk, akkor a motor sebessége is változni fog.

vk1-6.jpg

Az impulzusszélesség moduláció (PWM) elve: Egy rövid impulzusokból álló jelsorozatban a ki/be kapcsolási idők egymáshoz viszonyított arányának változtatásával a jel átlagfeszültsége változtatható: a) impulzusszélesség = 2ms, Vátlag = 2,5V, b) impulzusszélesség = 3ms, Vátlag = 3,75V, c) impulzusszélesség = 1ms, Vátlag = 1,25V.

Adatfeldolgozás és vezérlés
A robot vezérlését egy mikrovezérlővel fogom megoldani. A mikrovezérlőt (mikrokontrollert) úgy is definiálhatjuk, mint egy, egyetlen chip-ből álló számítógépet, ami rendelkezik saját központi vezérlő egységgel, memóriával, Aritmetikai Logikai Egységgel (ALU), némi EPROM-mal (másodlagos háttértár, ami az adatokat kikapcsolás után is megőrzi), sokféle chipre integrált perifériával (Timer, Soros kommunikáció, Analóg- Digitális átalakító (ADC) stb…).

A mikrokontroller a végrehajtandó programot egy flash memóriában tárolja. Ez a memória könnyedén törölhető és újraprogramozható - akár több ezerszer is. Ez nagyon rugalmassá teszi a mikrokontrollerek használatát. A mikrokontroller legtöbb lába lehet digitális kimenet, digitális bemenet, és néhány láb analóg bemenet is. A bemeneti lábakat arra használhatjuk, hogy a külvilágból érkező adatokat olvassunk be. A legegyszerűbb esetekben pl. lekérdezhetjük kapcsolók, vagy érzékelők állapotát. Az érzékelt adatoktól függően a mikrovezérlő az általunk bepogramozott módon válaszol (az adott kimeneti lábakra 5V-os, 0V-os feszültséget vagy PWM jelet ad). Ezekkel vezerélhetünk különböző eszközöket Pl. LED-eket, motorokat, kijelzőket stb...

Ne felejtsük el azonban, hogy ezek a lábak csak kismertekű áramot képesek elnyelni/leadni, tehát nagyobb áramigenyű eszközöket (mint pl. a robotunk DC motorjai) már nem képes meghajtani. De megfelelő kapcsolás/relé közbebeiktatásával már bármekkora áramú/feszültségű/teljesítményű eszközt vezérelhetünk.

Az előző fejezetekben láthattuk, hogy a robot vezérléséhez olyan mikrokvezérlőre lesz szükségünk, ami rendelkezik ADC átalakítóval a vonalérzékelő szenzor jeleinek a feldolgozásához, ugyanakkor tud PWM jeleket is előállítani a motorvezérlés megvalósításához.

Rengeteg mikrovezérlő közül választhatunk. Létezik 8 bites, 16 bites, 32 bites stb... El kell döntenünk, hogy melyik gyártó termékét akarjuk használni, melyiket tudjuk könnyen beszerezni (PIC, AVR , ARM, BASIC STAMP, PICAXE, Texas Instruments stb...). Azt is meg kell vizsgálni hogy mennyire rugalmasan bővíthető vagy változtatható az adott hardver. Ingyenesen elérhető-e hozzá a fejlesztői környezet vagy fizetni kell érte? Milyen programnyelven lehet a mikrovezérlőt programozni? (Assembly, Basic, Pascal, C stb...)

A vonalkövető robot építéséhez egy Arduino Nano panelt használok, mert az Arduino hardver felépítése és a fejlesztői környezet nyílt jogállású, szabadon felhasználható, változtatható és ingyenesen hozzáférhető. Akár építhetünk is egyet, ha rendelkezünk a szükséges eszközökkel. Az Arduino Nano egy ATMEGA328-as AVR mikrokontrollert tartalmazó panel, melyet egy egyszerűsített C - nyelven lehet programozni. A megírt programot USB-n keresztül tölthetjük a mikrovezérlőbe. Egy kevés programozási ismerettel és minimális elektronikai tudással már el lehet kezdeni robotot építeni vele. Az Arduino használatához nem szükséges részletesen ismernünk a rajta található mikrovezérlő működését, ugyanis a fejlesztői környezet ezt elfedi előlünk (pl. az I/O műveletek, ADC, PWM egy-egy utasítással megoldható). Ez egy egyszerű es gyors megoldás, ezért ideális választás kezdésnek egy Arduino panel.

Összefoglalás
A korábban említett tervezési szempontok figyelembevétele alapján véglegesíthetjük a vonalkövető robotunk felépítését:

  • A robot hely- és irányváltoztatását legegyszerűbben 2 db áttételes DC motor alkalmazásával, differenciális meghajtással tudjuk elérni (2 külön hajtott kerek + egy bolygókerek).
  • A robot a vonalat 2db szenzorral, a padlóról visszaverődött fény mérésével érzékeli.
  • A LED-ből és fotoellenállásból alló vonalérzékelő szenzorok a fényerősséggel arányos analóg feszültségjelet állítanak elő.
  • Az ATMega328-as mikrovezérlő ezeket a változó feszültségjeleket az ADC átalakító segitségével feldolgozza.
  • Ahhoz hogy a robot a vonalat követni tudja, a mikrovezérlő a mért értékektől függően változtatja a robotot kormányzó DC motorok sebességét a motorvezérlőnek küldött PWM jelekkel.
  • Külön áramforrás a motoroknak + motorvezérlő elektronikának, és az érzékelőknek + Arduino panelnek

A mikrovezérlő és a motorvezerlő IC kis áramigényű, meghajtásukhoz szabályozott stabil 5V-os tápfeszültség kell, amit az Arduino panel biztosít majd. A motorok áramigénye viszont nagy, meghajtásukhoz nem kell szabályozott stabil 5V. A szénkefés DC motorok ráadásul nagymértékű zajt is generálhatnak. Ezért célszerű feladatonként szétválasztani a tápellátást és két áramrorrást használni, egyet külön a DC motoroknak, és egyet külön az elektronikának.

A robot blokkvázlata az alábbi ábrán látható:

vk1-7.jpg

 

Az alábbi ábra egy lehetséges robotelrendezést mutat:

vk1-8.jpg

Folyt. köv. hamarosan...

A bejegyzés trackback címe:

https://robotepites.blog.hu/api/trackback/id/tr6213450183

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása