Robotépítés kezdőknek

Robotépítés kezdőknek

VONALKÖVETŐ ROBOT - MÁSODIK RÉSZ

2017. december 07. - FizikusRobotBlog

Az előző részben nagyvonalakban megterveztük a vonalkövető robotot.

Most jöhet a következő lépés. Építsük meg!

Építés

Robotépítésnél 3 főbb területhez is értenünk kell, hogy működőképes robotot hozzunk létre. Névszerint: mechanika, elektronika és programozás. A cikkben is ezen felosztás szerint tárgyalom az építés menetét

  1. Mechanika
    Ebben a fejezetben az előző részben már felvázolt egyszerű robotalvázát építem meg. Ez egy univerzális konstrukció, amely később könnyen felhasznalható más robotok alapjául is (pl. labirintusjáró robot, falnaknemütköző robot stb...).
  2. Elektronika
    Ebben a fejezetben megépítem a LED-ből és fotoellenállásból álló vonalérzékelő szenzort és a motorvezérlő panelt, ami a robot mozgatásáért felelős DC motorokat irányítja. A robot “agya” egy AVR ATMega328-as mikrovezérlőt tartalmazó, Arduino Nano-ra épülő robotvezérlő panel lesz.
  3. Programozás
    Ebben a fejezetben a robotot megtanítom “gondolkodni” (beprogramozom az Arduino-t, hogy az egyes környezeti ingerekre (az érzékelők jeleire) miként is válaszoljon).

 

  1. Mechanika (Robot alváz)

Legelőször is szükségünk lesz egy stabil alvázra, amire majd fel tudjuk erősíteni az alább felsorolt főbb részeket:

  • 2 db kapcsolókkal ellátott áramforrás (egy 9V-os és egy 6V-os)
  • differenciális meghajtás (2db kerekekkel ellátott áttételes DC motor + egy bolygókerék)
  • L293D IC-n alapuló motorvezérlő panel
  • Arduino Nano-t tartalmazó robotvezérlő panel.
  • Vonalérzékelő szenzorok, amelyekkel a robot a külvilágot érzékeli

 

Az alváz elrendezése nagyon sokféle lehet. Ennek a kialakítása nagymértékben függ a rendelkezésre álló alapanyagoktól. Használhatunk farost lemezt, műanyag lapot, fém építőjátékot, de akár egy CD lemezt is.

 vk2-1.jpg

Az alváz alsó felére kell felszerelni a két áttételes motort és a bolygókereket. A kormányzás a két hajtott kerék sebességének, és a forgási irányának változtatásával történik majd. Hátul a bolygókerék bármerre szabadon elfordulhat, biztosítva ezzel az irányváltoztatást. Az alábbi ábrán egy saját gyártású robotalváz látható, amit egy plexi lapra építettem. Egy fénykövető robothoz, Robomoly-hoz használtam.

vk2-2.jpg

A vonalkövető robothoz egy gyári alvázat fogok felhasználni (látható hogy nincs sok lényegi különbség a saját gyártású alvázzal összehasonlítva):

vk2-3.jpg

Az alváz elkészülte után jöhet a többi alkatrész elkészítése.

 

  1. Elektronika

Vonalérzékelő szenzor
A robot a vonal érzékelésére egy fotoellenállást használ, aminek az ellenállása a rá eső fény értékétől függően változik. Nagy fényerősség esetén az ellenállás alacsony, sötétben pedig nagy. Ezt az ellenállásváltozást kell olyan érték változásává alakítani, amit a mikrokontroller mérni tud. Az alábbi ábrának megfelelően csatlakoztatva a fotoellenállást a mikrokontrollerhez, átalakíthatjuk az ellenállásváltozást feszültségszint változássá.

 vk2-4.jpg

A LED-től és a hozzá tartozó áramkorlátozó ellenállástól eltekintve, a fenti kapcsolás értelmezhető egy olyan speciális feszültségosztó kapcsolásként is, amelyben az egyik ellenállás (a fotoellenállás) értéke változik. Ezzel a kapcsolással az érzékelő az LDR-re visszaverődott fény erősségétől függő feszültségjelet ad válaszul (nagyobb fényerő esetén nagyobb feszültséget). Ezt a jelet a mikrovezérlő már tudja kezelni. A fehér LED a talajt megvilágító állandó nagyságú fényerősségről gondoskodik.

A feszültségosztó kapcsolás egyenletei alapján, a szenzor kimenetén lévő feszültség az alábbi képlettel számolható:

vkeplet.jpg Amikor a fotoellenállás a világos padló felett van, akkor a több visszavert fény miatt a fényerősség nagy, az LDR ellenállása (RLDR ) kicsi, ezért nagy áram folyik az áramkör ezen ágában. A kis ellenálláson eső feszültség is kicsi, ezért a kimeneti lábon lévő feszültség közelítőleg VCC-vel egyezik meg (5V). Amikor a fotoellenállás a fekete vonal felett van, a kevés visszavert fény miatt az LDR ellenállása nagy, ezért kis áram folyik az áramkör ezen ágában. A nagyobb ellenálláson nagy a feszültségesés is, ezért a kimenetre jutó feszültség közelít a 0V-hoz. Ezt az analóg feszültséget alakítjuk át az ADC-vel egy digitális számmá.

 vk2-5.jpg

A fényes és sötét állapotok közötti relatív feszültségváltozást az alábbi képlettel számolhatjuk ki:

 rkeplet.jpg

Ahol Rsötét és Rvilágos a fotoellenállás sötétben és világosban mért ellenállása. A szenzor érzékenységének maximalizálásához az R ellenállás értékét úgy kell megválasztani, hogy a relatív feszültségváltozás a lehető legnagyobb legyen.

Az ideális szenzornak közel nulla lenne az ellenállása fényben, és végtelen nagy lenne sötétben, ezért a fényes és a sötét állapotok között maximális feszültségváltozást adna válaszul. Az áltam használt szenzor közel sem tökéletes, világosban mért ellenállása kb 10kOhm, sötétben pedig 100kOhm. Ha ezeket a fenti képletbe beírjuk, és a relatív feszültségváltozást az R ellenállás függvényében ábrázoljuk, akkor az alábbi grafikont kapjuk:

vk2-6.jpg

A grafikonról látható, hogy 100 kOhm-os érték esetén lesz a legnagyobb a szenzor válasza. De ekkora ellenállást alkalmazva, a fellépő áram értéke nagyon kicsi, emiatt a szenzor a zajokra fokozottan érzékenyebb lesz. Meg kell találni a megfelelő kompromisszumot az érzékenység és a zajosság között, ezért a szenzornál egy 22kOhm-os ellenállást használtam.

A vonalérzékelő szenzort úgy alakítottam ki, hogy a fotoellenállás a LEDhez viszonyítva előrébb legyen. Így a LED fénye a fotoellenállás mögül jön, ezért a LED közvetlenül nem tud rávilágítani a fotoellenállásra, csak a padlóról visszaverődött szórt fény éri el a szenzort. Az alábbi kép ezt mutatja.

vk2-7.jpg

A követendő vonal 18mm széles fekete szigetelőszalagból készült. A vonalkövető szenzort úgy kell megépíteni, hogy a vonal a két érzékelő között helyezkedjen el. Ezért a szenzorok között kb. 30mm-es távolságot hagytam.

vk2-8.jpgA vonalérzékelő szenzorokat egyetlen próbanyákra építettem meg.

vk2-9.jpg

A fotoellenállás nagyon érzékeny a környezeti fényviszonyokra. Ezért a szenzort megpróbáltam a lehető legjobban leárnyékolni úgy, hogy a fotoellenállást lehetőleg csak a LED-ről jövő, a padlóról visszaverődött fény világítsa meg. 

vk2-10.jpg

A vonalérzékelő szenzort a robot elejére, a talajtól kb 3-5 mm távolságra szereltem fel. 

vk2-11.jpg

 

Motorvezérlő panel

A motorokat nem köthetjük közvetlenül a mikrovezérlőre, azon oknál fogva, hogy a motoroknak nagy áramra van szüksége, amit a mikrokontrollerek nem tudnak leadni. A megoldás az, hogy egy motorvezérlő IC-t használunk, ami a gyenge áramú vezérlőjeleket a motorokat meghajtó nagy áramú jelekké alakítja át.

Az L293D motorvezérlő IC az első részben ismertetett, H-híd kapcsolásnak felel meg, azzal a különbséggel, hogy elektronikus kapcsolókat használ, amelyek az IC megfelelő lábaira adott 0V-os vagy 5V-os vezérlőjelekkel nyithatók és zárhatók. Ezáltal a H-híd IC könnyedén vezérelhető a mikrokontrollerrel. Az L293D két H-hidat tartalmaz, ezért egyetlen IC elég a robot két motorjának a vezérléséhez.

Az alábbi ábrán látható a motorvezérlő panel kapcsolási rajza, amit egy próbanyákon állítottam össze:

vk2-12.jpg 

Most nézzük meg részletesen hogy a kapcsolás egyes elemei milyen feladatot látnak el.

Az L293D motorvezérlő IC-nek motoronként (H-hidanként) 2 bemenete van a motor forgásirányának a beállítására, és egy engedélyező bemenete a motor ki/be kapcsolására. Az alábbi táblázatokban az látható, hogyan vezérelhetjük az egyik motort az L293D IC INPUT1, INPUT2 és ENABLE1 lábaira adott feszültségjelektől függően. A motor forgásiránya az INPUT1 és INPUT2 lábakra adott digitális jelekkel vezérelhető. A motor sebessége pedig az ENABLE1 lábra adott változó kitöltési tényezőjű PWM jellel változtatható. (Ehhez hasonlóan a másik motor az INPUT3, INPUT4 és az ENABLE2 lábakra adott feszültségjelekkel vezérelhető.)

vk2-13.jpg

A motorokra jutó átlagfeszültség a PWM jel kitöltési tényezőjétől függ. A PWM jel több százszor ki-be kapcsolja a motor tápfeszültségét, ezért a motorok tekercseiben is másodpercenként több százszor épül fel és szűnik meg az elektromágneses tér. Ez a fellépő önindukció miatt nagy feszültség és áramlökéseket generálhat (elektromos zaj), amik akár tönkre is tehetik a mikrovezérlőt. Ennek kivédésere az L293D motorvezerlő IC rendelkezik beépített védődiódákkal.

Az egyik DC motort az L293D IC OUTPUT1 és OUTPUT 2 érintkezőire kell kötni, a másikat pedig az OUTPUT3-ra és OUTPUT4-re. A Vcc-vel jelölt érintkezőre kell a stabilizált 5V-ot kötni, a Vs-sel jelölt érintkezőre pedig a DC motorokat meghajtó tápfeszültséget.

Zajszűrés és a motorok simább járása érdekében ajánlatos 0,22 μF-os poliészter pufferkondenzátort kötni a motor pólusai közé, és 0,1 μF-os kerámia kondenzátort kötni a motor pólusai és a föld közé. A motorvezérlő panelre érkező, nem stabilizált motorfeszültség és a föld közé is érdemes egy 100 μF-os kondenzátort kötni.

Látható, hogy a motor forgásirányát megadó INPUT1 és INPUT2 lábakon lévő feszültségszint mindig egymás ellentettje (ha az egyiken 5V van, akkor a másikon 0V-nak kell lennie). Ráadásul mindkét lábon nem lehet egy időben 5V sem, mert az rövidre zárná a motorok tápfeszültségét, ami könnyen leégetheti az IC-t. Ez egy hex inverter IC-t használatával könnyen elkerülhető, ami gondoskodik arról, hogy a forgásirányt megadó INPUT lábakon mindig különböző jelek legyenek. Ráadásul így két I/O lábat is megspórolok az Arduino-n, mert a két INPUT láb egyetlen jellel vezérelhető.

Az L293D IC-nek és a CD4069-es hex inverter IC-nek a működéshez stabilizált 5V kell.

 

Robotvezérlő panel

A robotnál szükségünk lesz ADC-re a vonalérzékelő szenzorok jeleinek a feldolgozásához. Szükség lesz digitális jelekre is a motorok forgásirányának a beállításához és szükség lesz PWM jelekre a motorok sebességének a beállításához.

Az alábbi ábra az Arduino Nano lábkiosztását mutatja. A D0 - D13 lábak digitális ki/bemeneti lábak, amelyek közül 6 db képes PWM jelek előállítására is (D3, 5, 6, 9, 10 és 11). Az A0 - A7 lábak az analóg bemeneti lábak, ezek a mikrovezérlő ADC-jére vannak kötve.

vk2-14.jpg

A robotvezérlő panel az Arduino Nano köré épül. Fő feladata hogy az Arduino panel kivezetéseit jobban elérhetővé tegye, és megkönnyítse a vonalérzékelő szenzorok csatlakoztatását.

vk2-15.jpg

A panelt úgy alakítottam ki, hogy az Arduino Nano minden lábát kivezettem egy tüskesorra. Látható, hogy minden analóg lábnál lévő csatlakozó 3 érintkezős. Az analóg lábhoz menő csatlakozó mellé közvetlenül a +5V is és a föld (GND) is oda van vezetve. Ezzel egy univerzális 3 érintkezős csatlakozót alakítottam ki, amelyre a vonalérzékelő szenzorokat könnyen rá tudom csatlakoztatni. A fejlesztés is sokkal gyorsabb és egyszerűbb így, mert az Arduino Nano minden lába könnyen hozzáférhető.

Az ábráról az is látható, hogy minden csatlakozónál az 5V van középen, a GND az Arduino-tól távolabbi szélen, az analóg lábak pedig az Arduinohoz közelebbi szélen. Ez azért előnyös, mert ha véletlenül valaki fordítva is dugná rá az érzérelők csatlakozóját a panelre (velem pl. rendszeresen előfordul), akkor maximum az érzékelő nem fog működni, de legalább nem lesz az érzékelőn fordított polaritás, ami akár tönkre is teheti a szenzort vagy az Arduino-t.

A képeken látható még néhány kondenzátor is. Zajszűrés és pufferelés céljából a bejövő 9V-os tápfeszültség és GND közé, plussz az analóg lábakhoz menő 5V és GND közé is tettem egy-egy 100uF-os és 0.1uF-os kondenzátort.

 

Összeszerelés
Most már minden elem elkészült, hozzáláthatok a robot végleges összeszereléséhez. Az alábbi ábrának megfelelően rákötöttem a vonalérzékelő szenzor kimeneteit a A4-es és A5-ös analóg bemeneti lábakra. Összekötöttem az Arduino panel digitális D4-es, D5-ös, D6-os és D7-es lábait a motorvezérlő panel megfelelő érintkezőivel. Rákötöttem az elemeket és a stabilizált 5V-ot is a panelekre és a vonalérzékelő szenzorokra.

vk2-16.jpg

Ezzel el is készült a robot!

vk2-17.jpg

vk2-18.jpg 

A robot programozása az építés utolsó lépése, ami nem választaható élesen külön a következő fázistól, a teszteléstől.

A harmadik, befejező részben a programozással, a robot tesztésével és a továbbfejlesztési lehetőségek vizsgálatával folytatom...

A bejegyzés trackback címe:

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

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