Általános felépítésű robotok

Semmi csalás, semmi trükk, csupán kinematika.

Egy forgó és egy haladó mozgást végző, két-két léptetőmotor által hajtott készüléken  olyan hatást lehet elérni, mintha a látványfokozó objektum forgás közben csak felénk nézne, illetve haladás közben egy helyben állna. 

A többi kiderül a videóból.

Egy testett öltött emlék a tiszafüredi nyaralásunkról.



Tiszafüreden található egy olyan kerékpáros híd, melynek egyik fele nyitható. A híd egyébként része a Tisza-tavat körülölelő kerékpár útnak. 

Annyira megragadott a konstrukció egyszerűsége, hogy egy működő modellben örökítettem meg.  Ez látható a videóban.

Koppintás kicsiben...





És működik is, ahogy az a videóban látható, hallható.

Mindkettőben közös a fel-le mozgó szán. Ennek révén a helikopter helyből felszáll, majd vissza ereszkedik,  a rakéta pedig begyújtás után felgyorsul a "szökési sebességig" .

A függőleges rúdon mozgó görgős szánhoz tehát egy helikoptert és külön egy rakétát erősítettem. Néhány kiegészítő alkatrészt is beépítettem, főként a látvány és a hanghatás fokozása érdekében. Mindezek a videóban  is láthatók, hallhatók.

Viszont a szánt hajtó léptetőmotor folyamatos gyorsulása illetve lassulása a robotjaim világában újdonság. Azt, hogy a motor hány lépést tegyen meg egy fordulat alatt, hardveresen - a  meghajtó modulon 3 db DIP kapcsoló kombinációjával - állíthatjuk be. A minimum 200 lépés, a maximum pedig 3200. A motor vezérlő szoftverében a lépések között mikrószekundum nagyságrendű késleltetést kell alkalmazni. A szünetek időtartama és a motor sebessége között fordított arányosság van. Tehát, ha azt akarjuk, hogy a motor egy bizonyos lépéstartományban - ez több fordulatnyi is lehet - lassuljon, akkor folyamatosan növekvő késleltetést kell közbeiktatni. Ezt célszerű a lépésszámláló függvényében megadni.  Ebben a kettős robotban ezt az elvet alkalmazva írtam a programokat.

A helikopter emelkedéskor a teljes mozgástartományban a motor gyorsul, ereszkedéskor pedig lassul. A rakéta kilövésekor egy erőteljes, de rövid  gyorsulást követően már állandó sebességgel  mozog felfelé és ugyanekkora sebességgel tér vissza.

Ha mikrobarázdái és hangszedője lenne, akkor valóságos lemezjátszó lenne..



Ismét egy Auriga alaplappal készült robot. Azon túl, hogy igyekeztem valósághűnek megalkotni, a hangerő függvényében változó színű LED csíkkal látványosabb is lett. 

Nem egy bonyolult szerkezet, viszont az Arduino programját  sikerült úgy megírni, hogy minden részegyége szinkronban működhessen. Ezt nagy fegyverténynek tartom, melyre a videóban is utalok.  

Kényszerűségből visszatértem az Auriga alaplaphoz.




Mivel a gripper saját mikró DC meghajtó motorjának csatlakoztatása a CyberPi-hez az én készletemmel nem lehetséges, ezért ezt a robotot a jó öreg Auriga alaplappal működtetem.

Egy Python rendszerű mikró számítógép és egy robot házassága.



A HALOCODE, mint külön rendszer alapkiépítésben csak arra képes, hogy bizonyos külső behatásokra (billegés, forgás, gyorsulás és hangerő változás) fényeffektusokkal reagáljon. 

A külső behatásokat ebben az esetben egy "hagyományos" robot biztosítja.. 

Ennél több információért melegen ajánlom a videó megtekintését. 

"Navigare necesse est vivere non necesse." Ennek a latin mondásnak a magyar megfelelője nagyjából így hangzik: "Hajózni szükséges, élni nem." 

A legújabb robotom apropóján idéztem ezt a közismert latin mondást.  A videó megtekintése után remélem még egyértelműbbé válik az összefüggés.  

Néhány szó a LED mátrixról és a programozásáról.  Egy mátrixot 16 oszlopban és 8 sorban elhelyezkedő  LED-ek alkotják, oszloponként tehát 8 db LED-ünk van. Alulról felfelé haladva  a LED-ekhez a 2  emelkedő hatványai vannak hozzárendelve, azaz egy oszlop egy byte-ot képvisel. Ha azt akarjuk, hogy az  oszlop minden LED-je legyen aktív, akkor 255 értéket kell megadni, ha csak néhányat akarunk aktívvá tenni, akkor az oszlop ezek "értékének" az összegét kapja, pl.: ha a legalsó és a legfelső aktív, akkor 20 + 27 = 1 + 128 = 129. 

A teljes mátrix programozása meglehetősen sziszifuszi munka. Ennek megkönnyítésére egy nagyon egyszerű módszert találtam ki. Ha a LED-eknek egy EXCEL táblázat mezőit  feleltetjük meg, és mondjuk x-ekkel töltjük ki az aktív cellákat, akkor az oszlopok alatti mezőkbe csak azon cellák 2 alapú hatványértékeit  kell összegezni, melyekben x van. Ez egy függvénnyel könnyen megoldható. Az Arduino programba pedig az összegző sorban található 16 db számot kell bemásolni.  

Ez a Dolly nem az a Dolly és nem is a Helló Dolly, hanem a filmgyártásban használt, Dolly becenevű kamera mozgató ún. fahrt kocsi modellje.



A Fekete, fehér, igen, nem hardverének átalakítása révén született. Ahogy az a videóból kiderül, többféle képpen tud mozgatni egy mobil telefont, melynek hátlapi kamerája  reprezentálja a filmfelvevőt.

Maga a szerkezet és a működése nem bonyolult, de az Arduino programja már más eset, ugyanis rengeteg feltételes utasítást és ciklust foglal magába, emiatt több száz sorból áll.

Minden esetre jó szórakozást kívánok! 

Egy új encoder motor driver kipróbálásához találtam ki ezt a robotot.


Kiegészítésül egy kis rágcsálnivaló csemege:

Ahogy a videóban hallható-látható, a szán mozgásával szinkronban fordul el a LED mátrix.

A jelen estben úgy állítottam be a paramétereket, hogy a szánt mozgató léptetőmotor 6000 lépésnyit forduljon el a teljes mozgási tartományban, a mátrix szögelfordulása pedig 60° legyen. A programba tehát egy olyan feltételes utasítást kellett beépíteni, mely a léptetőmotort vezérlő ciklusváltozó minden olyan értékénél, amely maradék nélkül osztható 100-al, a kijelzőt mozgató szervómotor állásszögét- mozgásiránytól függően - 1-el növeli vagy csökkenti.

 

Majdnem egyszerre készült a Távmérővel, mert van hasonlóság a harvereket illetően. De más a funkciója, melyhez más szenzor tartozik. Ja, és beszél is, innen az elnevezése.




Minden egyéb tudnivaló a videóban megtalálható.

Nem akarok szerénytelen lenni, de a legújabb robotomat csupán ujjgyakorlatnak tekintem.


Viszonylag egyszerű mechanika és Arduino program alkotja a lelkét, bár néhány szokatlan kialakítás azért van benne: az összesen 4 db motor, melyből három encoder, a kétszárnyú kapu, és az utasítgatásokat szóban kiadó audio player. 

A részletesebb felépítése és működése kiderül a videóból.

Még annyit. a videóban látható fotókat és snitteket nem a hagyományos, megszokott eszközökkel, hanem  az új iPad tabletemmel készítettem. Olybá tűnik, hogy ez nem ment a minőség rovására, sőt...

Ez a robot arra példa, hogyan lehet két léptetőmotort szinkron vezérelni.

Ahogy a videóban említettem, itt írom le, hogyan sikerült a két léptetőmotort szinkronban vezérelni, azaz azonos idő alatt eltérő távolságokat tesznek meg az általuk fogasszíjjal hajtott szánok.

 

A motorok driverei hardveresen úgy vannak beállítva, hogy 540 - 540 lépést (szögelfordulást) tesznek meg, amíg a szánok egy-egy kockányit mozdulnak el.

 

Tételezzük fel, hogy a szánoknak X irányban 5, Y irányban 3 kockányit kell szinkron megtenniük. Ha ez teljesül, akkor eredőként egy ferde egyenest kapunk, tehát a kezdőpontból (kockából) kiindulva a szenzor tornyiránt jut el a végpontba (kockába).

 

Nyilvánvaló, hogy ha azonos idő alatt kell a két távolságot megtenni, akkor annak a motornak, amely az Y szánt mozgatja, 3/5-nyivel kisebb sebességűnek kell lenni. Ha az X motor két lépése közötti idő 200 mikrószekundum (ez a lehetséges minimális érték), akkor az Y motornál ez az intervallum 5/3 * 200 = cca. 333 mikró szekundum.

 

A programban a motorokat egy olyan ciklusnak kell vezérelnie, melynek a számlálója 0 - tól 5 * 3 * 540-ig (vagyis a két távolság legkisebb közös többszösének és az 540-nek a szorzatáig) lépked egyesével. Minden értékére két feltétel vizsgálat történik:

 - ha 3-al osztható, akkor az X motor lép egyet,

 - ha 5-el osztható, akkor az Y motor lép egyet.

 

Eszerint a ciklus végéig az X motor 2700-at lép, míg az Y motor 1620-at.

 

És mivel 2700 * 200 = 540 000 és 1620 * 333 = 540 000 mikroszekundum, így az egyidejűség teljesül!

 

A könnyebb érthetőség miatt a fenti eszmefuttatásban nem foglalkoztam az irányokkal (előjelekkel) és a változók típusával, mindegyiket egész számként kezeltem. Az Arduino nyelvben ez kissé bonyolultabb...

Néhány új beszerzésű alkatrész kipróbálásához építettem a videóban bemutatott deszkamodellt.



A videó és az abban található leírás reményeim szerint elég információt ad a készülék felépítésének és működésének megértéséhez. Úgyhogy itt csak arra utalok, hogy van még náhány új alkatrész, ami szintén kipróbálásra vár. 

Előbb vagy utóbb ezek is sorra kerülnek. 

Ez a készülék egy jól ismert mechanizmus - az ún. himbás mechanizmus - működésén alapszik. 


A lényege, hogy forgó mozgást alakít át egyenes vonalú mozgássá, csakúgy, mint pl. a forgattyús mechanizmusok. 

A lényege kihámozható a videóból. A nagyobb látványosság kedvéért kicsit felcsicsáztam, mert amúgy öncélúnak tűnhet, hiszen a mechanizmus működésén kívül komolyabb funkciója nincs.

Most tehát inkább a mechanikára koncentráltam, pontosabban arra, hogy a Makeblock készletemből miként lehet összeállítani. A programja nagyon egyszerű, nem volt szükség  különösebb agytornára.

Ez egy olyan robot, amely Android applikációval kommunikálva hangutasításokat fogad és szóbeli válaszokat küld vissza. Magyarán: úgy lehet működtetni, hogy közben csetelünk vele. 

A vezérlő applikáció az Androidos telefon beszéd felismerő és szöveg olvasó rendszereit használja. A kétirányú kommunikáció valójában egy-egy karakterrel történik. Ha kimondunk egy hangparancsot, az alkalmazás ahhoz egy meghatározott   karaktert rendel és azt küldi át a robotnak Bluetooth kapcsolaton. A robot szintén egy karakterből álló "válaszát", az alkalmazás a  Bluetooth kapcsolaton  keresztül fogadja és rendel hozzá szintetikus beszédhangon elmondott szöveget.

A videóban látható mindkét rendszer blokk sémája, melyeket az MIT App Inventor fejlesztő környezetéből másoltam ki.

Már csak annyit fűznék hozzá, hogy a robot Arduino programozása során tekintettel kell lenni az Android alkalmazás lehetőségeire, és fordítva, azaz egyszerre két rendszerben kell gondolkozni. Az ide passzoló és nagyon szemléletes  mondást most inkább nem idézném...


Az alapkoncepció nem változott, de az ördög a részletekben van. Az előző verzió kezelő szerveit és a TFT kijelzőt lecseréltem egy Androidos telefonra. 

Ahogy legutóbb megigértem, elkészítettem a mikrohullámú sütő Androidos változatát.

Az okostelefonon futó applikációt természetesen a már jól bevált MIT App Inventorral készítettem.

A videóban jól látható a teljes működés. Itt csak annyit említenék meg, hogy a robot lényege a visszafelé számláló időzítő és annak megjelenítése. Ezt az applikáció és a robot közötti kétirányú Bluetooth-os kommunikációval valósítottam meg. Az induló értéket a telefonon lehet beállítani, amit továbbít a robotnak. A visszaszámlálást a robot végzi, és a pillanatnyi értéket kijelzés céljából visszaküldi az applikációnak. A készülék a visszaszámlálás során különböző feltételeket is megvizsgál: menet közben történt-e ajtónyitás vagy nem nyomták-e meg a telefonon a STOP gombot.  Ennél a változatnál egy-egy feltétel teljesülése esetén a robot már eltérően viselkedik, így sikerült "okosabbá" tenni az előző változathoz képest.

Az MIT App Inventort érintő előtanulmányok után egy klasszikusnak mondható robotot építettem, melynek karja több irányú mozgásra képes, így alkalmas tárgyak (pl. gyógyszeres  fiolák) mozgatására. 

A fő hangsúly  azonban a vezérlésén van, mely jelen esetben egy tableten futó, és direkt erre a célra létrehozott Android alkalmazás.

Mind az applikációt, mind a robotot - vagyis a teljes rendszert -  igyekeztem elég részletesen bemutatni a videóban. 

Egy újdonságra - amely sok próbálkozás eredményeként született - azonban itt is szeretném felhívni a figyelmet: nevezetesen arra, hogy az egyes mozgási fázisokat indító gombok ("kézi vezérlés" esetén) színe pirosra vált, és csak akkor kapják vissza eredeti színüket, ha az adott fázis véget ér. Az előre programozott ciklust (két különböző színű fiola felcserélése) indító gomb színe pedig akkor vált vissza feketére,  amikor a teljes ciklus lefutott. 

Természetesen a robot Arduino programját és a vezérlő Androidos alkalmazást a kétirányú  Bluetooth-os kommunikáció  szempontából össze kellett hangolni.

A 180-ik robothoz olyan Androidos alkalmazást készítettem, melynek révén értelmes beszédhanggal lehet a készüléket vezérelni. Tehát nincs indító taps, bekiabálás, stb., hanem helyettük magyar nyelven elhangzó, értelmes vezérlő utasítások.


A videóban mind az irányítandó deszkamodell, mind az applikáció részletesebb ismertetése megtalálható és a két rendszer közös működését is illusztráltam. 

Az Android telefonra telepített applikáció szintén az MIT App Inventor-ral készült, és azon a felismerésen alapszik, hogy olyan alkalmazás is fejleszthető, mely a telefon érzékelőit és a gyárilag telepített moduljait - jelen esetben a Bluetooth egységet és a Google beszédfelismerő modulját  -  is képes kezelni.

A deszkamodellhez kiegészítés képpen csak annyit, hogy az emberkét egy normál méretű szervómotor, míg a kezeit két mikró szervómotor mozgatja.


Új vizekre eveztem! Gondolván, hogy a jó pap holtáig tanul, a fejembe vettem, hogy megpróbálok egy Android op. rendszeren futó saját applikációt összehozni, mellyel robotot lehet vezérelni Bluetooth kapcsolaton keresztül. 

Tehát nem gyári alkalmazással és nem a soros terminálon keresztül, hanem robot specifikus, saját fejlesztésű applikációval. 

Építettem egy deszamodellt, melynek 4 funkcióját egy használaton kívüli Samsung okostelefonnal lehet vezérelni. Az Androidos alkalmazást az MIT App Inventor grafikus programozási felületén készítettem el. Miután sikerült a kitűzött célt elérni, feltöltöttem és telepítettem a telefonra. 

A többit a videóban ismertetem, melyben illusztráció céljából képernyő felvételek is láthatók.

A fentiekhez csak annyit fűzök hozzá, hogy 

Egy öröknaptárból megtudhatjuk, hogy a keresett dátumhoz milyen nap tartozik. Ez a kis szerkezet is pontosan ezt tudja, ráadásul az eredményt az adatbevitelre szolgáló Bluetooth soros terminálra is kiírja. 

A működése a videóból kiderül, így itt csak az elvi alapjairól ejtek néhány szót.

A program egy öröknaptár algoritmuson alapszik. Elég sokat böngésztem a neten, mire ráakadtam egy letisztult képletsorra, amelyet könnyű volt adaptálni. Akit érdekel, itt megtalálhatja.

A programba természetesen a Gergely-féle naptárra vonatkozó szabályokat építettem be. Bár a képlet beszámítja a szökőévek plusz napjait, figyelembe veszi a 30 napos hónapokat, de ha olyan dátumokat adunk meg, amelyek ellentmondásban vannak ezekkel, a készülék külön feltétel vizsgálatok eredményeként hibát jelez. 

Minden 4-el és 400-al maradék nélkül osztható év szökőév, kivéve a 100-al oszthatókat. Így pl. a 2000-es és a 2020-as évek szökőévek, de az 1900 nem. Ha tehát az 1900. 02. 29-ére vagyunk kíváncsiak, a készülék és a terminál hibát jelez és természetesen nem ad ki eredményt.

A program ugyancsak hibát jelez, ha 30 napos hónapra vonatkozóan 31-ét adunk meg. Például a bármely évre vonatkozó 09. 31-es dátum hibás, Ugyancsak hiba, ha 02. 30-át vagy 31-ét adunk meg, hiszen a február 28, szökőévben 29 napos.

(A fenti példákban a dátum formátum a megszokott, de a soros terminálon egy egybefüggő, nyolc számból álló adatsort kell megadni. Pl. a mai dátum így néz ki: 20210228.)

Ez nem a klasszikus Memory játék robotosítása, vagyis nem azonos ábrájú kártyákat kell összepárosítani, hanem összesen 4 db, néhány tizedmásodpercre egyesével felvillanó, a robot által generált  véletlen egész számot  memorizálni. 

A számjegyeket a 0-tól 9-ig terjedő tartományból választja ki a program, és négyes csoportban Bluetooth soros terminálon keresztül lehet a készülékbe "visszajuttatni". Az összehasonlítja a "saját" számaival, azaz megállapítja, hogy jól olvastunk-e le, és nem kevertük-e össze a sorrendet. Az összehasonlítás eredményét különböző effektusokkal jeleníti meg, miközben két számkijelzőn a két számcsoportot is kijelzi.

Nehezítés képpen az  egyes számjegyek két LED mátrixon villanhatnak fel. Hogy éppen melyiken, azt ugyancsak véletlen szerűen választja ki a program. Ráadásul, ha öt egymást követő leolvasás helyes, akkor a felvillanások ideje a kezdeti 0.5 sec-ról 0.1 sec-ra lecsökken.   Ha közben hibázunk, akkor viszont újra 0.5 sec-ról fog indulni.

Mivel a videóban - újdonságképpen - magyarázó szövegeket is feltüntettem, így itt  ennél részletesebb leírást nem tartok szükségesnek.

Ez egy olyan robot, ami azt csinálja automatikusan, amit Te  gyerekkorodban  - vagy most a kiskorú leszármazottaid - kézzel és  levegővel: azaz szappanbuborékokat fúj.

Végy egy kínai játék szappanbuborék fújót, vágd le a szárával együtt a recés karikát (nevezzük fújókának) és erősítsd egy szervo motorra szerelt kar végéhez. A robotkészlet mini ventillátorát és a többi szükséges alkatrészt úgy helyezd el  egy állványon, hogy az elektronika védve legyen az esetlegesen ráfröccsenő folyadéktól. Egy megfelelő méretű műanyag pohárba önts elegendő mennyiségű víz-sampon keveréket és tedd az állványon kialakított platóra. Kísérleti úton állapítsd meg a fújóka ventillátorhoz viszonyított optimális helyzetét a folyamatos buborék fújás céljából. 

Írj egy rövid Arduino programot, mely lehetővé teszi, hogy infra távirányítóval vezérelve a szerkezet kétfajta módon működhessen. Az egyik esetben a ventillátor folyamatos forgása közben a kar háromszor merítse be a fújókát a folyadékba és emelje ki a megfelelő magasságig, a másik esetben a ventillátor csak akkor forogjon, ha a fújóka kiemelt állapotban van. Ez utóbbi szintén háromszor ismétlődjön.

Ha minden kész, indítsd el és gyönyörködjetek a buborékokban.

Készíts róla videó felvételt, mely bemutatja mind a folyamatos, mind a szakaszos működést. 


Gyermekkoromban vissza-visszatérő álmom volt, hogy egy vízszintesen (!) mozgó liftben utazom. (Álomfejtők kíméljenek!)

Most, hogy immáron a második gyerekkoromat élem és komolyan veszem a Makeblock "Construct Your Dreams" szlogenjét, ez az álmom valósággá vált. Függőlegesen mozgó liftet korábban már több variációban is készítettem, de most a vízszintes is megvalósult...

A fülkét a már jól ismert, léptető motor/fogasszíj által működtetett görgős szánra építettem. Az ajtaját egy mikró szervomotor nyitja/zárja. A tetejéhez egy számkijelzőt és egy 4 LED-es kijelzőt erősítettem, mely utóbbi bizonyos szituációkban belső világítást ad a fülkének. Van még egy szintén szervomotorral mozgatott elem a fülkében, mely némiképp egy ember sziluettjére hasonlít, ő szimbolizálja az utas(ok) jelenlétét.  Ha az utas függőlegesen áll, azt jelenti, hogy legalább egy valaki van a fülkében, ilyenkor a belső világítás is működik. Ha az utas fekszik, azt jelenti, hogy a fülke üres és nincs megvilágítva sem.

A fülke öt pozícióban (0-tól 4-ig) állhat meg. A jobb szélső a 0., mely egyben az alaphelyzete is, a 4. pedig a bal szélen található. Egy ciklus indítását követően - mely bluetooth-os soros terminálon keresztül történik - négy pozícióban áll meg a fülke. A pozíciókat a program random generálja, azzal a feltétellel, hogy két egymást követő nem lehet azonos. Az utolsó fázisban  pedig a fülke visszatér az alaphelyzetbe. A számkijelzőn mindig a következő pozíció sorszáma jelenik meg. 

Az utasforgalom, azaz a ki- és beszállások sorrendje viszont kötött:

A videóban két ciklus látható. Ezekből is kitűnik, az alahelyzetet kivéve, hogy a pozíciók eltérőek, de az utasforgalom sorrendje ugyan az.

Ez egy olyan pénzkiadó automata (ATM), amely bankjegyek helyett 3-3 db10-es, 20-as és 50-es címletű műanyag zsetonokból  állítja össze és adja ki a kívánt összeget. (Lám-lám, mire jó a gyerekkoromtól megőrzött NDK-s rulett játék.)

És mint egy valódi ATM-nek, van adatbevitelre szolgáló billenytyűzete (mobiltelefonon futó Bluetoothos terminál formájában), bankkártya fogadó nyílása, számkijelzője és egy fényjelzésre alkalmas LED-es kijelzője. 

A zsetonokat élükre állítva résekbe helyezzük.  Egy-egy résbe  3 db, azonos címletű zseton kerül. Az 50-esek pirosak, a 20-asok szürkék és a 10-esek kékek, bár jelen esetben ennek nincs jelentősége, de könnyebben felismerhetők. Ezt az egységet (nevezzük tárnak) egy léptetőmotorral mozgatott szánra építettem, a rések merőlegesek a szánmozgás irányára.  A zsetonokat egy olyan szerkezet  tolja ki a résekből, mely hosszanti irányban mozdulatlan, keresztirányban - azaz a rések mentén - viszont egy másik léptetőmotor mozgatja. A léptetőmotorok fogasszíjhajtás révén működtetik  a szánt illetve a kilökőt.

A kiadandó összeg - melyet a mobiltelefon "tasztatúráján" lehet bepötyögni, majd ezt követően megjelenik a számkijelzőn - 100 és 240 közötti, tízzel osztható szám  lehet. 

Az adatbevitel és a "pénzkiadás" csak akkor valósulhat meg, ha az arra alkalmas nyílásba helyezünk egy bankkártyát, pontosabban egy azt pótló műanyag lapot. Ennek megtörténtét egy, a kártya alatt elhelyezkedő fényerősség érzékelő kimenő jelének csökkenése alapján ellenőrzi a program. A kártya behelyezéséig a 4 LED vörösen villog, azt követően folyamatos zöldre vált, majd a "pénzkiadás" után villogó zöld fény jelzi, hogy a kártya már kivehető.

Eltekintve egy valódi ATM és a robot alapvető eltéréseitől (bankjegy kontra zseton és bankkártya kontra helyettesítő), a  "pénzkiadás" folyamatát reményeim szerint sikerült valósághűvé tenni: behelyezzük a bankkártyát, megadjuk a kívánt összeget, mely látható is a kijelzőn, a program kiszámítja, hogy a címletekből hány darabra van szükség, és a végén kiadja azokat. (Két tranzakció között pedig jöhet a "pénszállító" újratölteni a részben vagy teljesen kiürült  tárat...)

A videóban 130-ra és 180 -ra lefuttatott tranzakciókra láthatunk példákat.

A feleségem ötletére alapozva építettem meg a következő robotomat. Ezzel a mechanikailag egyszerű készülékkel a Huszonegyes kártyajátékot lehet játszani. A magyar kártyás verzióra vonatkozó játékszabályokat  pl. itt lehet lehet elolvasni.

Jelen esetben csak egy játékos van, a bank maga a készülék. Tét nincs, viszont a különböző feltételek szerint a program határozza meg, hogy a játékos nyert-e vagy veszített. 

Mint korábban több esetben, ennek a szerkezetnek a programozása volt az igazi kihívás. Olyan algoritmusokat kellett hozzá megalkotni, melyeknek a részegységek vezérlésén túl a játékszabályok szabta feltételeknek  is meg kellett felelniük.


A kiosztott kártyalap "színét" (makk, piros, tök és zöld) grafikus formában a LED mátrix jeleníti meg, az értékét pedig a számkijelző. Az éppen aktuális összesített pontértéket a játékos esetében egy léptető motor által forgatott tárcsáról lehet leolvasni (alul egy kis fekete nyíl mutat rá), a bank esetében pedig minden húzás után a LED mátrixon megjelenő Σ jel feletti szám jelenti.

A játékos kezében az infra távirányítóval kezeli a robotot. Először "megkeveri a paklit", vagyis jónéhány változót és a tárcsát alaphelyzetbe állítja. Ezen művelet során az alaplap LED gyűrűjén kék futófény megy oda-vissza. Majd annyiszor nyom meg egy másik gombot, ahány lapot kér játékosként. Ha ezzel leáll, akkor a számláló tárcsa megőrzi az összpontszámát. Kivéve ha befuccsol, mert ekkor a 22 és a 0 közötti kis nyíl jön a képbe. Egy másik gomb egyszeri megnyomására a bank automatikusan kezdi húzni a lapokat egy többnyire tapasztalati úton megállapított algoritmus szerint. Amíg a játékos aktív, a LED gyűrűn minden második LED fehéren világít, és amikor a bank válik aktívvá, a LED--ek fényei kékre váltanak. Ha a bank leáll a laphúzással, akkor a kijelzőn az ő elért összpontszáma látható, míg a tárcsán a játékosé. A program ezek összevetésével állapítja meg, hogy a játékos nyert-e vagy veszített. Ez alól kivétel, ha valamelyikük első két lapja ász (2 * 11 = 22), mert az azonnal nyer, vagy ha befuccsol, mert az azonnali vesztést jelent. Ha a játékos nyer, a LED gyűrű zöld fénnyel világít, miközben egy hosszabb dallam hallható az alaplapi zümmeren, ha veszít, akkor piros fény mellett egy rövidebb dallam hallható.

A programot úgy készítettem, hogy az egy játszmában már kiosztott lapokat többé már ne vegye figyelembe. Ez látható a videóban is a soros monitoron keresztül a képernyőre kiíratott "táblázatokban", ahol a már figyelembe nem vehető lapok értéke 0-ra változott. Persze a "keverés" során, vagyis új játszma előtt visszakapják eredeti értéküket.

A videóban szinte minden lehetséges variáció előfordul: az első egymást követő két ász-tól a befuccsolásokon  és a pontazonosságon át a tisztán pontszámokon alapuló nyerésig és vesztésig.

Ez egy olyan kísérleti berendezés, mely az Auriga alaplapon található két fénymérő szenzor adta lehetőséget használja ki. Nevezetesen, ha az egyik érzékelőt erősebb fényhatás éri, mint a másikat, akkor ez a különbség a kimeneti  jelek erősségénél is jelentkezik.

A függőleges helyzetben beépített alaplapon a két szenzor nagyjából a 2 és 9 számú csatlakozók vonalában található. Az alaplappal szemben, a megfelelő magasságban egy "reflektor" random módon hol az egyikre, hol a másikra írányítja a fényt. Ezt az egységet egy szervómotor mozgatja jobbra-balra 20 - 20 fokos elfordulásokkal. A fényforrás egy 4 LED-es kijelző, amely csak a mérések időtartama alatt világít. Egy-egy mérés 5 impulzusból áll, melyek számtani átlaga lesz az adott szenzor kimeneti értéke. Ha ez egy tapasztalati úton megállapított határértéknél nagyobb, a másik pedig kisebb, akkor nyilvánvalóan a nagyobb értéket mutató szenzort tekintjük aktívnak, és ennek hatására a megfelelő oldali encoder motor forogni kezd. Ha a következő mérésnél ugyanaz a szenzor lesz aktív, a motor tovább forog, ellenkező esetben ez a motor leáll és a másik kezd forogni. A LED mátrixon megjelenő nyíl az éppen forgó motor irányába mutat. A mérések előtt az alaplap LED gyűrűje egy rövid időre zöld fénnyel felvillan.  Megjegyzem, hogy az encoder motorok meghajtó áramkörei és csatlakozói ugyancsak az alaplapon találhatók.

Az alaplap hangerő érzékelőjét használva egy ciklus hangvezérlésre indul és öt mérésből áll. Ezt követően a motorok leállnak és minden más egység is alaphelyzetbe áll vissza.

A holdjáró vagy holdautó (angolul: Lunar Roving Vehicle, röviden: LRV) egy elektromos hajtású, telepekkel üzemeltetett közlekedési eszköz, melyet a Holdon használtak.  

Az eszköz ember által vezethető változata az amerikai Apolló program utolsó három holdmissziójában, az Apollo-15, 16 és 17 küldetésekben kapott szerepet. A jármű tervezésével az 1956-ban az Egyesült Államokba menekült Pavlics Ferencet (1928 - ) bízták meg.  

Az első példány1971-ben érkezett a Holdra az Apolló-15-tel, ezt 1972-ben újabb kettő követte az Apolló-16 és 17 rakományaként. A három autó ma a Hold három különböző pontján parkol. (Forrás: Wikipédia)

Ez a közel 50 éves műszaki bravúr és nem mellesleg a tudománytörténész "apóstárs" (Gazda István) késztetett arra, hogy egy olyan modellt építsek, amely a lehetőségekhez képest minél jobban hasolítson az eredetire. A videóban egyrészt igyekeztem a részleteket megmutatni, másrészt egy rövid működési periódus is látható két perspektívából.  A modell először előre gurul, megáll, majd "sugárzást" - valójában az alaplapra integrált szenzor révén fényerőt - mér, aztán visszagurul. A különböző fázisokhoz fényeffektusokat is beprogramoztam.

A két mellső kereket közvetlenül encoder motorok hajtják. Az Auriga alaplapon kívül még két elektronikus modul került beépítésre: egy numerikus és egy 4 LED-es kijelző. A működtetés infra távirányítóval történik. 


Hát idáig is eljutottam. Megszületett a Százötvenedik! 

Mint a korábbi jubíleumi robotoknál, ennél is a látványon van a hangsúly, de köszönhetően az új alaplapnak, már dalamokkal is kiegészül. 

Magáról a felépítésről csak annyit, hogy a karokat két szervómotor, a kinyíló-becsukódó fedeleket (ajtókat) pedig két encoder motor mozgatja. A nem mozgó alkatrészek  (ultrahangos távmérő, LED mátrix, LED csík) ismerősek lehetnek, hiszen azokat már korábbi szerkezetekben is használtam.

Mivel botfülü vagyok, a dallamok nem saját kompozíciók, a programjaikat az interneten fellelhető forrásokból vettem át.

Talán ennyi elég is a leírásból. 

A videóban látható, az ultrahangos távmérő révén induló ciklus reményeim szerint önmagáért beszél, nem szorul magyarázatra.

A jelen weblap "Jól sikerültek" menüpontja alatt található  az a  Morze távíró,  amely a Morze kódokat betűkké konvertálta, és amelyet még grafikusan programoztam,  

Ez a mostani készülék viszont Morze kódokkal képes indítani egy encoder- és egy szervómotort, valamint  egy váltakozó színű fényeffektust. A programja már Arduino nyelven íródott.

A készülék felépítése nagyon egyszerű. Az encoder motorra egy tárcsát, a szervómotorra egy kart erősítettem, melyeken egy-egy fehér pötty segíti a mozgás vizuális érzékelését. A fényeffektust az Auriga alaplap 12 db, kör alakban elhelyezkedő LED-jei produkálják.

A készülék 3 féle parancsot kezel: LIGHT, MOTOR és SERVO. Ám elegendő ezek kezdőbetűinek Morze kódját megadni: (L= . - .. ),  (M =  - - ) és (S = . . .), a többit már a program elintézi. A rövid/hosszú jelek aránya a szabványos 1:3 érték, ezt biztosítja a két érintőszenzor. A bal oldalival a rövid (ti), a jobb oldalival a hosszú (tá) jeleket lehet bevinni. Bármeddig is érintjük meg őket, a jelhosszak 250 illetve 750 ms-osak. A Morze jelek bevitele során az alaplap zümmögője hangot ad ki és a LED-jei fehér fénnyel világítanak. 

A parancsok sorrendje tetszőleges, és a LED mátrixon addig futnak, amíg az  adott egység (kb. 10 - 10 mp-ig) aktív.

A videóban mindhárom parancsra vonatkozóan láthatunk példát.

Ez az egyszerű készülék az Auriga alaplapra integrált érzékelők és egyéb elektronikai eszközök működését hivatott demonstrálni. 

Magát az alaplapot egy szervomotor döntögeti, miközben a kijelzőn megjelennek a gyro szenzor mért értékei. A 12 db-os LED gyűrű tetszőlegesen programozható, először 4 színnel a teljes gyűrű világít, majd egy futóvény jár körbe. Ezután a fénymérés következik, melynek során látható, hogy a kézzel eltakart szenzor által mutatott érték lecsökken. Ezt követi a hangerőmérés, ahol egy hangeffektus hatására megnő az érték. Majd  hőmérsékletmérés következik, és a sort egy, a zümmer által lejátszott dallam zárja.

A program szokatlanul hosszú, első sorban a LED mátrixon megjelenő logók és a dallam inicializálása miatt. A felépítése a már megszokott módon moduláris, minden műveletet külön függvényekbe foglaltam. Így a fejlesztés során ezek egymástól függetlenül kipróbálhatók az infra távirányító dedikált gombjai révén. A videóban viszont a már összerakott teljes ciklus látható. 

Ha netán valaki részletesebben szeretné az Auriga alaplapot megismerni, javasolom, hogy ezt a linket nézze meg.

A recept:

Csenj el az unokák levetett építőjátékából 8 db, páronként azonos színű  fa hasábot. Építs egy olyan robotot,  mely kötött geometriában, de tetszőleges sorrendben elhelyezett hasábokból a színazonosakat egymásra helyezi, vagyis a folyamat végén 4, páronként azonos színű kupac lesz.

Nos, e recept szerint készült az itt bemutatott robot. Két fő mechanikai egysége van: egy függőleges tengely körül elforduló oszlop, és egy gördülő szán, melyek a grippernek (fogókarnak) két szabadsági fokot biztosítanak. A mozgatásokról egy fogaskerék pár illetve egy fogasszíj révén egy-egy léptetőmotor gondoskodik. A grippert a saját DC motorja nyitja illetve zárja. A hasábok színazonosítását az oszloppal együtt forgó színérzékelő végzi. 

A hasábok kiinduló helyzetbe állítását egy előrajzolt papírlap segíti, mely benyúlik a robot talapzata alá.. A rajz 8 db, sugárirányú téglalapból áll, ezek reprezentálják a hasábok kontúrjait. A készülék esetleges tehetetlenségi elmozdulásának kiküszöbölésére a talapzat egy párhuzamszorítóval az asztalhoz van erősítve. 

A robot infra távirányítóval történő indítása előtt a hasábokat tetszőleges színsorrendben elhelyezzük a papírlapon. Indítás után először "körbejár" a színérzékelő, és a hasábok végeit figyelve megállapítja azok színeit. A program a kiolvasott színkódokat rendre egy tömbben tárolja, a következő fázisban ebből kiválasztja az azonos színkódú hasábpárok  pozícióit, melyekből egy másik tömböt képez. Ez utóbbi vezérli a robot mozgatását.

A program két alapszabályra épül: 1. A kiinduló, vagyis a 0 szöghelyzet mindig a bal oldali első hasáb helye. 2. A párosítás prioritási sorrendje mindig ugyanaz: először a piros, majd a sárga, ezt követően a zöld és végül a kék hasábokat rakja egymásra úgy, hogy az eredetileg alacsonyabb "helyi értékű", tehát a 0-hoz közelebbi kerül felülre.

A videóban két ciklus látható. Természetesen a hasábok induló helyzetei eltérőek, és a rövidítés érdekében a  másodikat a háromszorosára felgyorsítottam.

A nemrég beszerzett mBot Ranger Auriga alaplapját felhasználva egy új Kávé keverőt konstruáltam. Ennek felépítése egyszerűbb, mint a Gabi bácsi rendszerterve alapján készült korábbi verzióé. Viszont kihasználtam az új mikróvezérlő sajátosságait,  nevezetesen néhány, az alaplapra integrált  eszközt (12 db-os LED gyűrű, hangérzékelő, zümmer) is bevontam a programozásba. Ezen kívül a régi és az mBot tartozékaként beszerzett, tehát immáron 2 db fekete-fehér szenzorok is szerepet kaptak.

A készüléket lényegében egy függőleges állvány alkotja, melyen egy szánszerkezethez erősített keverőmotor-lapát kombó süllyed vagy emelkedik. A  függőleges irányú és a keverő mozgatásokat két egyszerű DC motor végzi. A süllyesztés illetve az emelés végállásait a két fekete-fehér szenzor biztosítja, melyeket egy oldalsó, függőleges tartóoszlophoz erősítettem. A szán oldalán lévő fehér csik "kiolvasása" révén az érzékelők arra is képesek, hogy a végállásokhoz közelítve a szán sebességét a program a felére csökkentse, magyarán nem hirtelen állítja le.

A néhány másodpercig tartó keverés a lapát váltakozó irányú forgása révén történik, miközben az alaplapon 3 egymást követő LED piros-zöld-kék fénnyel  a megfelelő irányban a gyűrűn körbefut.

Egy ciklus hangparancsra indul. Először a LED mátrixon fényújságszerűen "HOL A KÁVÉM" felirat angol nyelvű megfelelője fut egészen addig, amíg a kávéval megtöltött "csészét" az állvány alján lévő és porzicionáló tüskékkel ellátott aljzatra nem helyezzük. A csésze meglétét egy ultrahangos távérzékelő érzékeli. Ha a csésze a helyére került, egy rövid sipolás után a keverő lesüllyed és megkevergeti a kávét. Ezt követően a keverő felemelkedik, a LED mátrixon pedig a "CHEERS!" felirat fut. Ezután lehet a csészét leemelni az aljzatról. A folyamat végén ugyancsak egy rövid hangjelzés hallható.

Az említett hangjelzések miatt a videóban az aláfestő zenét gyárilag állítottam halkra, tehát nem az Ön készülékében van a hiba...

A jól ismert Tic-tac-toe játéknak sok "robotosított" változata található az interneten. Többnyire ezek 9 db, különböző színnel világító nyomógombokból állnak, a játékos pedig a gép ellen játszik. A programkód akár több ezer soros is lehet, hiszen a mikrovezérlőt majdnem mesterséges intelligenciával (AI) kell felvértezni.

Nos, mivel az én hardveres  lehetőségeim korlátozottak és nem szándékoztam több hónapot programírással eltölteni, ezért egy egyszerűbb változatot építettem és programoztam. Itt két hús-vér játékos fekete és fehér korongokkal játszik egymás ellen, az "agy" lényegében nyilvántartja az egyes lépéseket,  megállapítja, hogy van-e nyertes vagy nincs,  és azt ki is jelzi. 

És még valami: ennek a kis szerkezetnek a programozása hozzásegített jobban megérteni a karakter és string változók "lelki világát".

A készülék lelke egy alulról különböző színekkel megvilágítható, félig áttetsző asztal, mely 3 oszlopban és 3 sorban 9 darab, egyedi jelzéssel ellátott mezőből áll, lényegében tehát egy mátrix. Az asztal két oldalán elhelyezett, (W-fehér, B-fekete jelű)  érintő szenzorokkal lehet a soron következő játékos színét inputként megadni. Ekkor az aszal megvilágítása is átvált: a fehér korongokkal játszó játékos esetében fehérre, a feketével játszó esetében pedig (jobb híján) kékre. A videóban nem látszik, de egy újabb játék előtt a szenzorok egyidejű megérintésével lehet a rendszert alapállapotba visszaállítani, vagyis resetelni, ilyenkor az asztal zölden világít. A LED mátrixon alapesetben egy ? látható, de a következő lépésre várva is ez jelenik meg. 

Az adott játékos következő lépését, vagyis annak a mezőnek a betű és számjelét, amelyikre lép (pl. C2), inputként Bluetooth soros terminálon lehet megadni, amely a LED mátrixon is megjelenik. A háttérben ilyenkor a program a mező azonosítóját lecseréli a játékos színének rödídítésére (B vagy W). Erre azért van szükség, mert ha valamelyik játékos már a 3. lépésénél tart, akkor a program vizsgálja, hogy van-e három azonos jelű mezőből álló sor, oszlop vagy átló.  Ha van, akkor már a nyertes is megvan. A játékot egyébként bármelyik játékos kezdheti. Az említett nyertes  vizsgálat egészen az utolsó, azaz a 9. lépésig is eltarthat. Ha addig sincs nyertes, akkor a játszma döntetlennel zárul.

Ha van nyertes játékos, akkor annak színének kezdőbetűje (B vagy W) megjelenik a LED mátrixon, miközben az asztal néhányszor sárga színnel villog. Ha a játszma döntetlennel zárul, akkor egy D betű jelenik meg, miközben az asztal folyamatosan pirossal világít.

A videóban a szerkezet bemutatásán kívül két játszma látható a 6. lépéstől, mindkettő kétszeres sebességre felgyorsítva. Az elsőben a fekete (B) kezdett és döntetlennel zárul, a másodikban a fehér (W) kezdett, de a fekete (B) nyer a 8. lépésnél.