Close

Robotické sudoku s Arduinem

Arduino robotické sudoku

Ing. Miroslav Tesař nám poslal popis projektu, který se svými studenty uskutečnil na SPŠ Poprad. Děkujeme


Tím:

  • Anton Kornaj – strojár, mechanik pohonov, riadenie krokových motorov 
  • Adrián Hradický – supervízor, kabeláž, výroba DPS, dizajn
  • Lukáš Házy    – efektor, čítanie RFID, IR riadenie
  • Maroš Zvara – riešenie sudoku podľa pravidiel, TFT displej
  • Daniel Smižanský – riešenie sudoku heuristikou
  • Ing. Miroslav Tesař – koordinátor, SPŠ Poprad, Mnoheľova 828, 05846 Poprad

Robotické sudoku rozpozná zadanie herného plánu, nájde riešenie a výsledné riešenie uloží prostredníctvom lineárneho polohovacieho systému zo zásobníku do herného poľa.

Úvod

Robotické sudoku je pôvodné riešenie projektu a podľa dostupných informácií v takejto forme nie je nikde riešené. 

Projekt Robotické sudoku sledoval niekoľko cieľov:

  1. Realizácia náročného projektu tímovou spoluprácou.
  2. Nájdenie programového riešenia hry sudoku akejkoľvek náročnosti pomocou platformy Arduino Mega 2560. 
  3. Vytvorenie základovej dosky pre umiestnenie technológie a ukladanie číselných kameňov do zásobníka a hráčskeho poľa. 
  4. Vyvinutie bezkontaktných číselných kameňov a bezkontaktný systém skenovania týchto kameňov pomocou RFID zabudovaného do efektoru.
  5. Vyvinutie magnetického efektoru pre uchopenie číselných kameňov a ich fyzického ukladania pomocou lineárneho polohovacieho systému.
  6. Ovládanie Robotického sudoku pomocou IR diaľkového ovládača.

Riešenie Robotického sudoku v takej forme podľa našich dostupných informácií nebolo realizované. Jedná sa teda o pôvodné riešenie bez plagiátorstva akejkoľvek jeho časti. Na internetových stránkach sme našli robotické vozidlo, ktoré postupne maľovalo číslice na papier, avšak nemáme žiadne bližšie informácie o tomto projekte. Takisto sa na internetových stránkach nachádza on-line aplikácia na riešenie sudoku.

Projekt Robotické sudoku predstavuje široké spektrum odbornej problematiky od pochopenia hráčskej stratégie, jeho programového spracovania, ovládania a skĺbenia s mechanikou uchopenia a polohovania. Dáva dobré predpoklady k vedeniu študentov k tímovej práci a k pochopeniu väzby človek-problém-program-stroj.

Technické prevedenie

Hardvérové riešenie

Hardvérové riešenie pozostáva z niekoľkých častí:

  • Riadiaca jednotka
    • Riadiacou jednotkou je Arduino Mega 2560, ktoré svojou konfiguráciou predstavuje dostatočnú platformu pre program ako z hľadiska rýchlosti, dostupnej programovej a dátovej pamäti vrátane EEPROM a dostatočným počtom V/V pinov.
Arduino sudoku robot - Riadiaca jednotka

Riadiaca jednotka

  • Herná doska
    • Herná doska predstavuje základnú mechanickú platformu projektu. Je vytvorená z bukového dreva dĺžky 100cm, šírky 64cm a hrúbky 4cm. Na doske sa nachádza herné pole a zásobník. V týchto oblastiach sa nachádzajú vyfrézované otvory priemeru 23mm a hĺbky 6mm v matici 9×9 pre číselné kamene. Dôvodom tohto riešenia bolo presné polohovanie číselných kameňov a ich stabilita v priestore. Ďalej sa na doske nachádza lineárny polohovací systém v X/Y súradniciach na ktorom je magnetický efektor a snímač RFID kódu. Riadiaca jednotka Arduino Mega2560 sa spolu s periférnymi obvodmi nachádza takisto na základovej doske. Tým herná doska vytvára kompaktný prenositeľný systém a predstavuje dobrú orientáciu v hráčskom priestore.
Arduino sudoku robot - Frézovanie otvorov v základovej doske

Frézovanie otvorov v základovej doske

Arduino sudoku robot - Založenie kameňov do zásobníku

Založenie kameňov do zásobníku

  • Lineárny polohovací systém a krokové motory
    • Lineárny polohovací systém je postavený na produktoch firmy Hennlich, ktorý je aj sponzorom tohto projektu. Súčasťou lineárneho polohovacieho systému je stanovenie „nulového“ bodu pomocou optoelektronického systému založenom na obvodoch TCST 1103.
Arduino sudoku robot - Osadenie lineárneho vedenia

Osadenie lineárneho vedenia

  • Číselné kamene
    • Číselné kamene sú vytvorené sústružením dubovej násady na hrable. Vonkajším rozmerom číselných kameňov je priemer 21mm a hrúbkou 4mm. V tomto základe je otvor priemeru 18mm v  hĺbke 2mm a otvor 5mm do hĺbky 1mm. V otvore je uložený neodymový magnet priemeru 5mm a hrúbkou 1mm. Nad ním sa nachádza 18mm RFID 125kHz samolepiaca minca. Tento základ je prekrytý dyhou 3mm, v ktorej je vygravírované číslo v rozsahu 1 až 9.
Arduino sudoku robot - Kameň v rozloženom stave

Kameň v rozloženom stave

  • Efektor
    • Efektor sa skladá z čítacej jednotky 125kHz RFID modulu RDM6300, anténou vlastnej výroby priemeru 20mm, neodymového magnetu priemeru 5mm a dĺžkou 5mm, a dvoch micro serv SG90 9G.
    • Princípom efektoru je bezpečne rozpoznať prítomnosť číselného kameňa pomocou bezkontaktného snímania, jeho uchopenie pomocou neodymového magnetu a odloženie na novú pozíciu.
    • Pre bezpečné snímanie a uchopenie bol vytvorený systém vystavenia antény či neodymového magnetu v ose Z smerom ku hráčskemu kameňu.
Arduino sudoku robot - Efektor - uchopenie kameňa

Efektor – uchopenie kameňa

Arduino sudoku robot - Efektor

Efektor

  • Zobrazovacia jednotka
    • Zobrazovacia jednotka je tvorená 3,2 inch TFT LCD displejom. Slúži na zobrazenie hráčskeho poľa a rôznych správ od programového podsystému.
  • Budiče krokových motorov
    • V projekte sú použité budiče krokových motorov typu Microcon SD 20x. Tie obsahujú 8-násobný DIP prepínač pre nastavenie konfigurácie, vstupy Step, Dir a Enable a výstupy A a B. [7]
    • Prepínače 8-6 nastavujú mikrokrokovanie. Bola nastavená konfigurácia Off On On pre delenie kroku 16-timi. Tento variant je zvolený pre zvýšenie plynulosti chodu krokových motorov.
    • Prepínač 5 je rezervovaný a nemá žiadnu funkciu.
    • Prepínače 4-1 nastavujú prúd do krokového motoru. Bola nastavená konfigurácia On Off Off Off pre amplitúdu prúdu 2A.
    • Budič obsahuje dve svorkovnice:
      • vstupná svorkovnica, do ktorej sa privádza signál Step+, Step-, Dir+, Dir-, Enable+, Enable-. Ide o galvanicky oddelené vstupy optočlenmi. Štandardná napäťová úroveň vstupov je 0-24V, preto pre ovládania pomocou Arduina bolo nutné vnútorné odpory LED diód 3K3 nahradiť odpormi 560 Ohm. Vstupy STEP slúžia na krokovanie, DIR na ovládanie chodu vpred/vzad a ENABLE na zapnutie koncového stupňa.
      • výstupná svorkovnica slúži na budenie cievok krokového motora A, /A, B, /B. Ďalej obsahuje prívod vstupného napájania krokových motorov. [7]
  • Krokové motory
    • V projekte boli použité krokové motory Microcon SX23-1414 v bipolárnom paralelnom zapojení. [4][8]
  • Diaľkové ovládanie
    • Diaľkové ovládanie je tvorené IR receiver shield a 38kHz MCU diaľkovým ovládačom. [5]
  • Optické závory
    • Optické závory sú tvorené obvodmi TCST 1103, pomocou ktorých sa stanovuje východzia (reštartovacia) poloha lineárneho polohovacieho systému. [9]
  • Zdroj napájania
    • Zdrojom napájania je 24V 5A adaptér pre polohovací systém a zdroj 5V pre riadiacu jednotku.

Softvérové riešenie

Softvérové riešenie je realizované na platforme Arduino Mega 2560 pomocou C++ knižnice Wiring.

Dátový základ hracieho poľa sa skladá zo štruktúrovaného dátového typu, ktorého obsahom je 4bit dátová premenná  pre uloženie čísla (dosadí sa pomocou herného plánu alebo vypočíta v priebehu hľadania riešenia) a príznakov možných kandidátov v danej bunke (9x1bit). Tento štruktúrovaný typ je uložený v dvojrozmernom poli 9×9.

Dátový základ zásobníka sa skladá zo štruktúrovaného dátového typu, ktorého obsahom je 4bit premenná  pre uloženie čísla kameňa, 4bit číslo riadku a 4bit číslo stĺpca. Tento štruktúrovaný typ je uložený v dvojrozmernom poli 9×9.

Aby bol pri súčasnom pohybe motorov v ose X a Y zachovaný rovnomerný pohyb, bol využitý pre chod motorov preemptívny multitasking s časovým rozložením. Rýchlosť pohybu motorov je programovo riadený.

Programový systém sa skladá z niekoľkých častí (Popis ďalších režimov bude odvodený od funkcií tlačidiel na IR ovládači):

  • Reštart technológie – postavenie lineárnych jednotiek do základnej polohy, od ktorej sa budú odčítať koordináty polohy efektora.
  • Režim C – pri prvom spustení technológie, či pri výmene alebo doplnení chýbajúcich číselných kameňov za nové je nutné skenovať všetky kamene a priradiť k prečítanému kódu RFID vygravírované číslo kameňa. Postup realizácie je taký, že sa číselné kamene uložia do zásobníka – kameň s číslom 1 bude uložený v prvom stĺpci, s číslom 2 v druhom stĺpci,… Následne dôjde k skenovaniu zásobníka, pri ktorom  sa údaje uložia do EEPROM Arduina.
  • Režim Test – skenovanie všetkých číselných kameňov, vypočítanie celkového počtu kameňov a celkového počtu kameňov jednotlivých čísiel. Ak by údaje neboli správne, systém ohlási chybu. Súčasťou testu je aj uloženie čísiel do dátovej štruktúry hráčskeho poľa a zásobníka. V ďalších krokoch už nebude potrebné skenovať prítomnosť / neprítomnosť číselných kameňov na pozícii a skenovať ich hodnotu.
  • Režim Play – hľadanie riešenia sudoku. Výpočet je založený na dvoch základných stratégiách:
    1. Výpočet sudoku pomocou známych pravidiel hry. V prvom rade ide o nájdenie pozícií, kde boli čísla dosadené podľa herného plánu. U týchto čísiel budú vylúčení všetci kandidáti. Následne sa postupne prechádzajú riadky a budú sa vylučovať kandidáti, ktorí sa v daných bunkách nemôžu nachádzať, lebo dané číslo sa v riadku už nachádza. Po vylúčení kandidátov sa otestuje, či v nejakej bunke neostal iba jeden kandidát, alebo ako jediný možný (systém reaguje chybovým hlásením aj na možnosť, kedy v bunke nie je žiadne možné riešenie). Ak ostal jediný možný kandidát, dosadí sa do dátovej štruktúry ako nájdené číslo a uskutoční sa fyzické uloženie kameňa na pozíciu. Táto operácia vylučovania kandidátov sa bude realizovať aj pre stĺpce a bloky. Celý systém vylučovania v riadku/stĺpci/bloku sa bude cyklicky opakovať, pokým sa nedosiahne stav úplného vyriešenia úlohy alebo až do stavu, kedy táto metóda nebude schopná vylúčiť všetkých kandidátov. V takom prípade sa prechádza na druhú stratégiu – výpočet pomocou heuristiky.
    2. Heuristika. Princíp je založený na orientovanom číselnom strome, kde sa v prvom kroku nájde v hernom poli prvá bunka s najmenším počtom kandidátov. Dátové pole sa zazálohuje, dosadí sa prvý kandidát ako „víťaz“ a prevedie sa výpočet podľa pravidiel hry. Ak dôjde ku kolízii, ktorá bráni vyriešeniu úlohy, obnoví sa záloha, kandidát sa vylúči a dosadí sa ďalší kandidát ako „víťaz“. Heuristika reaguje aj na prípad, kedy výber jedného „víťaza“ nevedie na vyriešenie úlohy, lebo niektoré iné bunky môžu mať na výber viac kandidátov. V takom prípade sa bude heuristika vnárať do orientovaného číselného stromu a dosadzovať ďalších „víťazov“. Systém vnorenia je nastavený až do úrovne deväť, čo sa neprekročí ani pri extrémne obťažnom sudoku. Ak je zadanie herného plánu riešiteľné, heuristika ho s istotou nájde. Po vyriešení pomocou heuristiky sa uskutoční fyzické dosadenie zvyšných číselných kameňov zo zásobníka na pozície hernej plochy. 
    3. Režim Späť – tento režim je určený na fyzické odpratanie číselných kameňov z hernej plochy do zásobníka.

Technická realizácia a experimentálne overenie činnosti

Technická realizácia spočívala v prvej fáze na analýze projektu a jeho dekompozícii. Následne sa etapa projektu rozdelila na softvérové a hardvérové riešenie.  Po testovaní jednotlivých častí, softvérových aj hardvérových, prešiel projekt k finalizácii – kompletizácii jednotlivých komponentov a testovanie ich funkčnosti ako celku.

Boli uskutočnené testy zadania sudoku od ľahkých až po extrémne obťažných. V každom prípade softvér bezpečne našiel riešenie, ak existovalo.

Bol uskutočnený test IR ovládača a ten pracuje bezchybne.

Bol uskutočnený test snímania RFID a ten pracuje bezchybne.

Bol uskutočnený test lineárneho polohovacieho systému k overeniu presnosti polohovania efektora. Test preukázal dostatočnú presnosť polohovania. Presnosť lineárneho polohovacieho systému je 0,02mm/mikrokrok pri stanovenom mikrokrokovaní 1/16 pomocou DIP prepínača.

Bol urobený test efektora na bezpečné uchopenie a uloženie číselného kameňa. Test preukázal bezpečné uchopenie a uloženie kameňa.

Záverečné zhodnotenie a sumarizácia výsledkov

Jednotlivé časti robotického sudoku pracujú bezchybne a splnili všetky zadané požiadavky. Softvérový výpočet veľmi obťažného sudoku trvá programu menej ako 2 sekundy. 

Projekt preukázal, že študenti sú schopní pracovať v tíme, nadchnúť sa pre riešenie konkrétneho projektu a podieľať sa na riešení zložitých celkov.

Zariadenie bude slúžiť na propagáciu školy pri rôznych príležitostiach a pre firmu Hennlich na propagáciu lineárnych jednotiek na predvádzacích akciách a na veľtrhoch.

Zoznam použitej literatúry

  1. Zbyšek Voda & tým HW Kitchen, “Průvodce světem Arduina“, Ebook.pdf, 2015
  2. https://playground.arduino.cc/Main/GeneralCodeLibrary
  3. www.microcon.cz
  4. http://www.microcon.cz/zapojenivinuti2012web/zapojenivinutipdf2012/SX23-1414.pdf
  5. http://www.datasheetcafe.com/rdm630-datasheet-pdf/
  6. http://pdf.datasheetcatalog.com/datasheets/90/377379_DS.pdf
  7. 08-10.pdf výkonový stupeň SD20x
  8. NEMA23.pdf krokový motor
  9. dsh.523-275.1.pdf optická závora

Prezentácia: Robotické sudoku


Děkujeme za sdílení velice povedeného projetku. Máte i vy projekt, se kterým se chcete pochlubit? Přečtěte si tento článek.

Zbyšek Voda

Zbyšek Voda

Už nějaký čas se zajímám o věci kolem Internetu věcí a otevřeného hardware a software. Tak jsem se také v roce 2010 dostal k Arduinu, pro které dodnes programuji a taky píšu články o práci s ním. Baví mě vymýšlet, jak staré věci používat novým způsobem.
Zbyšek Voda

Latest posts by Zbyšek Voda (see all)

Napsat komentář