Mikrokontrollerid ja praktiline robootika (MHK0011) Teeme ise 2011 Aruanne

Seotud dokumendid
(loeng3-ohtlikud_koodiloigud)

Andmed arvuti mälus Bitid ja baidid

1. Edisoni raamat

Tartu Ülikool

loeng2

Mida räägivad logid programmeerimisülesande lahendamise kohta? Heidi Meier

Microsoft Word - essee_CVE ___KASVANDIK_MARKKO.docx

Funktsionaalne Programmeerimine

Sissejuhatus mehhatroonikasse MHK0120

1 / loeng Tekstitöötlus Sisend/väljund Teksti lugemine Sõnad

Microsoft Word - 56ylesanded1415_lõppvoor

HWU_AccountingAdvanced_October2006_EST

Excel Valemite koostamine (HARJUTUS 3) Selles peatükis vaatame millistest osadest koosnevad valemid ning kuidas panna need Excelis kirja nii, et

NR-2.CDR

Microsoft Word - ref - Romet Piho - Tutorial D.doc

(10. kl. I kursus, Teisendamine, kiirusega, kesk.kiirusega \374lesanded)

Abiarstide tagasiside 2016 Küsimustikule vastas 137 tudengit, kellest 81 (60%) olid V kursuse ning 56 (40%) VI kursuse tudengid. Abiarstina olid vasta

Pimeda ajal sõitmine

IFI6083_Algoritmid_ja_andmestruktuurid_IF_3

E-arvete juhend

Microsoft Word - Vorm_TSD_Lisa_1_juhend_2015

Infix Operaatorid I Infix operaatorid (näiteks +) ja tüübid (näiteks ->) kirjutatakse argumentide vahele, mitte argumentide ette. Näiteks: 5 + 2, 2*pi

Pythoni Turtle moodul ja Scratchi värvilisem pool Plaan Isikukoodi kontrollnumbri leidmine vaatame üle lahenduse kontrollnumbri leimiseks. Pythoni joo

PHP

Microsoft Word - Vx610 EMV KASUTUSJUHEND.doc

Juhend nutiterminali seadistamiseks ja kaardimaksete vastuvõtmiseks Ingenico Link/2500 ja icmp

Kuidas ärgitada loovust?

PÄRNU TÄISKASVANUTE GÜMNAASIUM ESITLUSE KOOSTAMISE JUHEND Pärnu 2019

Praks 1

ArcGIS Online Konto loomine Veebikaardi loomine Rakenduste tegemine - esitlus

raamat5_2013.pdf

Microsoft PowerPoint - IRZ0020_praktikum4.pptx

Praks 1

KASUTUSJUHEND

12. Marek Kolk, Kõrgem matemaatika, Tartu Ülikool, Algfunktsioon ja määramata integraal Sisukord 12 Algfunktsioon ja määramata integraal 1

Microsoft Word - Keypad-controller-manual-new_1.docx

Projekt: Sööbik ja Pisik Tartu Lasteaed Piilupesa Koostajad: Merelle Uusrand ja Ülle Rahv Sihtgrupp: 4 5aastased lapsed Periood: veebruar märts 2017 P

Tõlkija poolne märkus: Ma leidsin 2 kohta, kus oli selle mustri parandusi üleval. Esimene neist ametlik VK koduleht. Sealt leitud täiendused ei ole õi

SQL

PowerPointi esitlus

MTAT Operatsioonisüsteemid - Turvalisus

DIGITAALTEHNIKA DIGITAALTEHNIKA Arvusüsteemid Kümnendsüsteem Kahendsüsteem Kaheksandsüsteem Kuueteistkü

Kiekim mees kirjeldus.docx

Robootika ringi tööplaan Sven Hendrikson - Tartu Kivilinna Kool Heilo Altin - MTÜ Robootika 1. klass Ringitunni kestus: üks 60-minutiline tund nädalas

MOOCi „Programmeerimise alused“ ülesannete lahenduste analüüs

ДЕЛОВОЕ ОБЩЕНИЕ

I Generaatori mõiste (Java) 1. Variantide läbivaatamine Generaator (ehk generaator-klass) on klass, milles leidub (vähemalt) isendimeetod next(). Kons

Failiotsing: find paljude võimalustega otsingukäsk find kataloog tingimused kataloog - otsitakse sellest kataloogist ja tema alamkataloogidest tingimu

Robomadin 2019 Sumo võistluse reeglid 1. Tutvustus Käesolev dokument sätestab reeglid Mini Sumo, LEGO Sumo ja mbot Sumo robotitele. Reeglid tulenevad

1

efo09v2pke.dvi

loogikaYL_netis_2018_NAIDISED.indd

Microsoft Word - Referaat.docx

Microsoft Word - Karu 15 TERMO nr 527.doc

Microsoft Word - Toetuste veebikaardi juhend

Operatsioonisüsteemide ehitus

VL1_praks2_2009s

VL1_praks6_2010k

Programmeerimiskeel APL Raivo Laanemets 17. mai a.

Algoritmid ja andmestruktuurid

Scala ülevaade 1 Meetodid, muutujad ja väärtused. Süntaks 2 Lihtsad tüübid ja väärtused. 3 OOP, case-klassid ja mustrisobitus. 4 Puhta Scala väärtusta

Tartu Kutsehariduskeskus IKT osakond Merlis Karja-Kännaste ASUTUSE DOKUMENDIREGISTRI AVALIK VAADE Analüüs Juhendaja Mirjam-Merike Sõmer Tartu 2015

Euroopa Liidu Nõukogu Brüssel, 24. september 2015 (OR. en) 12353/15 ADD 2 ENV 586 ENT 199 MI 583 SAATEMÄRKUSED Saatja: Kättesaamise kuupäev: Saaja: Eu

Mehhatroonikainstituut Mehhatroonikasüsteemide õppetool MHK40LT Lauri Leemet ANDMEHÕIVESÜSTEEM PURJELAUALE Bakalaureusetöö Autor taotleb tehnikateadus

Antennide vastastikune takistus

MTAT Operatsioonisüsteemid - Turvalisus

vv05lah.dvi

Word Pro - digiTUNDkaug.lwp

Tants on loodud 1985.aasta tantsupeoks Muusika Lepo Sumra Koreograafia Helju Mikkel koostöös Lille- Astra Arraste ja "Sõlesepad" tantsurühma meestega.

PIKSELOITS Täpsustused 15.oktoobri 2018 seisuga Tants on loodud 1985.aasta tantsupeoks Muusika Lepo Sumra Koreograafia Helju Mikkel koostöös Lille- As

Microsoft Word - TM70_SP-MG_kasutusjuhend.docx

untitled

ARENGUVESTLUSED COACHINGU PRINTSIIPE SILMAS PIDADES Arendava vestluste printsiibid: Eneseanalüüs, keskendumine tugevustele, julgustamine, motiveeriv e

ELUPUU Eestikeelne nimi Harilik elupuu, levinud ka hiigelelupuu Ladinakeelne nimi Thuja occidentalis ja thuja plicata Rahvapärased nimed Ilmapuu, tule

Kom igang med Scratch

MAKSETERMINALI KASUTUSJUHEND

Tõstuksed Aiaväravad Tõkkepuud Automaatika KÄIGUUKSED Käiguuksed on paigaldatavad kõikidele sektsioonuste tüüpidele. Käiguukse saab varustada kas tava

6 tsooniga keskus WFHC MASTER RF 868MHz & 4 või 6 tsooniga alaseade SLAVE RF KASUTUSJUHEND 6 tsooniga WFHC RF keskus & 4 või 6 tsooniga alaseade SLAVE

Õppematerjalide esitamine Moodle is (alustajatele) seminar sarjas Lõunatund e-õppega 12. septembril 2017 õppedisainerid Ly Sõõrd (LT valdkond) ja Dian

E-õppe ajalugu

Väärtusta oma vabadust. Eesti Yale Seifide Kasutusjuhend Mudelid: YSB/200/EB1 YSB/250/EB1 YSB/400/EB1 YLB/200/EB1 YSM/250/EG1 YSM/400/EG1 YSM/520/EG1

SEPTIKU JA IMBVÄLAJKU KASUTUS-PAIGALDUS JUHEND 2017

Praks 1

SQL

B120_10 estonian.cdr

TTÜ Robotiklubi

Sissejuhatus Informaatikasse Margus Niitsoo

EELNÕU

PowerPoint Presentation

Microsoft Word - P6_metsamasinate juhtimine ja seadistamine FOP kutsekeskharidus statsionaarne

Automaatjuhtimise alused Automaatjuhtimissüsteemi kirjeldamine Loeng 2

Pealkiri

KAASAV PROGRAMMEERIMINE ETTEVÕTETELE JA TEADUSASUTUSTELE 1

Kfloppy vormindamistööriista käsiraamat

Tehniline andmeleht Sadulventiilid (PN 16) VRG 2 2-tee ventiil, väliskeermega VRG 3 3-tee ventiil, väliskeermega Kirjeldus Ventiilid on kasutatavad ko

Microsoft Word - RM_ _17lisa2.rtf

Tallinna patsient valikute ristmikul

EESTI MEISTRIVÕISTLUSED PONIDE TAKISTUSSÕIDUS 2005

G OSA A VARIANT RESPONDENDILE ISE TÄITMISEKS

Väljavõte:

Tallinna Tehnikaülikool Mehhatroonikainstituut Mikrokontrollerid ja praktiline robootika (MHK0011) Teeme ise 2011 Aruanne Joan Lääne 25.05.2011 Tallinn 2011

Sisukord 1. Sissejuhatus...3 2. Robotist endast...3 3. Lühike ülevaade õpitust...3 4. Lõpuülesanne - labürindi läbimine...4 4.1 Ülesande püstitus...4 4.2 Esimesed ideed...4 4.3 PID i integreerimine...5 4.4 Lahendusalgoritm...6 5. Kokkuvõte...7 2

1. Sissejuhatus Paar aastat tagasi (tegelikult juba varem) tekkis huvi selle vastu, kuidas koos tööle panna hammasrattad ja arvuti. Tavaline raadioteel juhitav auto ei olnud enam piisavalt põnev, tahtsin teha nii, et auto teeks ka midagi oma peaga. Enne ülikooli tulekut ei õnnestunud mul see. Kui ma sain teada, et TTÜ Robotiklubi hakkab kevadel läbi viima koolitust, kus tuleb juttu praktilisest robotite programmeerimisest, teadsin, et see on mu võimalus teha seda, mis on huvi pakkunud juba aastaid. Sellepärast valisingi selle vabaaine. 2. Robotist endast Iga tunni algul saime grupi peale (3 inimest) ühe Pololu 3π roboti ja selle programmeerija (SparkFun PocketProgrammer). Robot ise on väike, ümbermõõtu on tal ainult 3π d, nagu nimigi seda ütleb. Robotil on kaks mootorit, mille otsas on rattad. Lisaks mootoritele on ka ekraan, buzzer (genereerib erinevaid noote ja sagedusi), mõned nupud, IR - sensorid ja LED-id. Kõik need on programmeeritavad läbi C keele või assembleri. Meie keskendusime koolituse vältel rohkem C- keelele, kuigi natuke õppisime ka assemblerit. 3. Lühike ülevaade õpitust Kursuse vältel jõudsime õppida päris palju. Peale sissejuhatavaid loenguid oli esimeseks ülesandeks lihtne LED-i vilgutamine. Kuigi see oleks olnud ühe rea ülesanne Pololu teekidega, realiseerisime meie seda aga riistvaralähedase programmeerimisega. Nimelt pidime uurime andmelehelt kuhu on ühendatud antud LED, siis kirjutama koodi, mis tegeles registrite muutmisega. Näiteks LED-i vilgutamine seisnes selles, et oli vaja vastav LED-i viik (ingl. k pin) muuta kord madalaks ja kord kõrgeks. Lisaks selle uurisime ka kuidas töötavad erinevad sensorid 3π robotil. Roboti all on olemas rida peegeldussensoreid (reflectance sensor). Sellega sai uurida, kas pind on hele või tume. Esimene katse, mis meie grupp sellega tegi, oli see, et robot pidi jääma musta joone ees seisma. Natuke muudatust koodis ja järgmisel hetkel juba robot pendeldas kahe musta joone vahel. Seda oli juba päris lõbus vaadata võrreldes lihtsa LED-i vilgutamisega. Ühes tunnis tutvusime ka infrapuna kaugussensoriga Sharp. See kujutas endast kahte IR-LED-i, kus üks saatis signaali välja ja teine proovis selle kinni püüda. Kui signaal jõudis tagasi, oli mingi objekt kiire ees. Sensori testimiseks kirjutasime sellise koodi, kus robot jäi 10 cm enne takistust seisma. Järgmises tunnis selgitati meile PID kontrolleri põhimõtet ja joonejärgimist. PID kontroller koosneb kolmest komponendist (Proportional, Integral, Derivative), millega saab juhtida mootorite kiirusi. Kui robot hakkab üle joone minema, siis arvutatakse välja viga ja PID kontroller korrigeerib 3

mootorite kiirusi nii, et robot püsiks joonel. PID konstantite leidmine oli natuke tülikas, aga see tasus end ära. Tulemuseks oli see, et 3π robot oskas juba kenasti joonel sõita. 4. Lõpuülesanne - labürindi läbimine 4.1 Ülesande püstitus Ühes viimastes tundides saime teada oma viimase ülesande labürindi läbimine. Oli vaja kirjutada kood, mis aitaks robotil labürindi edukalt läbida. Alguseks oli siis suvaline labürindi punkt ja lõpuks oli must ristkülik (Pilt paremal, Allikas: http://www.robotiklubi.ee/kursused/teeme_ise/2011). 4.2 Esimesed ideed Alustada soovitati sellest, et kirjutada kood, millega robot jääks ristmikul seisma. Mõeldud tehtud. Hiljem täiendasime seda nii, et robot oskaks ka kuhugi pöörata. Nimelt valisime labürindi läbimise strateegiaks vasak käsi seinal, ehk saabudes ristmikule, pöörab robot alati vasakule. Pärast väikest muudatust nägi see koodijupp välja selline: void follow_segment() int16_t speed_dif; while(1) linesensors_read(); speed_dif = pid(); drive(60, speed_dif); print("forwd"); if(linesensor[1] < 100 && linesensor[2] < 100 && linesensor[3] < 100) // Tupik, pööra 180 kraadi print("d_end"); return; else if(linesensor[0] > 200 linesensor[4] > 200) // Ristmik, pöörame 90 kraadi vasakule print("ristm"); return; 4

4.3 PID i integreerimine Nagu näha, siis eelmises funktsioonis kasutan alamfunktsiooni pid();. See on pärit sellest tunnist, kui õppisime PID-i. Kuna see oli olemas, siis selle saime lihtsalt sisse kopeerida. PID hoolitseb selle eest, et robot oleks mustal joonel ja ei kalduks rajast kõrvale. Funktsioon pid() hoolitseb selle eest, et arvutab välja igal ajahetkel uued P, I ja D konstantide väärtused. Pid() ise kasutab veel alamfunktsiooni error(), mis tegeleb vea arvutamisega. Idee seisneb seal selles, et leitakse sensor, mis on kõige tumedam. See tagastab selle sensori nurga. Roboti all on 5 QTR Reflectance sensorit paigutatud nii, et nad on erinevate nurkade all (Joonis 1 (Allikas: http://www.pololu.com/picture/view/0j828)) Selle teabega saab arvutada vea välja ning funktsioonile pid() edasi anda. int8_t error() uint8_t i; uint8_t darkest = 0; int8_t angles[] = 45, 15, 0, -15, -45; for (i=1; i<5; i++) if (linesensor[i] > linesensor[darkest]) darkest = i; return angles[darkest]; int16_t pid () proportional = (float) error(); integral += proportional; derivative = proportional - last_proportional; last_proportional = proportional; //arvutame uued Kp, Ki, Kd väärtused välja return (Kp*proportional + Ki*integral + Kd*derivative); 5

4.4 Lahendusalgoritm Main funktsioonist lähme kohe üle alamfunktsiooni m_solve(), milles toimub lahenduse otsimine. Esiteks sõidab robot senikaua otse, kuni tuleb ristmik. Ristmik on siis, kui kumbki kõige äärmistest sensoritest on must. Edasi teeb 3π kindlaks, mis tüüpi ristmik on ja kuhu saab pöörata. Ristmiku tüüp olemas, sõidame veel nii palju edasi, et robot oleks täpselt ristmiku keskel. Nüüd kontrollime veel kahte olukorda: esiteks, kas on võimalus edasi sõita ja teiseks, kas oleme juba lõpuristkülikul. Kui kõik andmed olemas, jääb üle ainult pöörata õigele poole (eelistatult vasakule), kui selleks vajadus. void m_solve() // Tsüklis, kuni labürint on läbitud while(1) follow_segment(); //Sõidame natuke otse set_motors(50,50); delay_ms(50); //Muutujad, mis peavad järge, kus poolt on joont näha unsigned char found_left=0; unsigned char found_straight=0; unsigned char found_right=0; // Loeme sensoreid ja kontrollime ristmiku tüüpi unsigned int linesensor[5]; linesensors_read(); // Kontrollime, kas saab vasakule - paremale pöörata if(linesensor[0] > 100) found_left = 1; if(linesensor[4] > 100) found_right = 1; // Sõidame natuke veel edasi, piisavalt, et ristmiku keskele end seada. set_motors(40,40); delay_ms(200); // Kontrollime, kas saab otse sõita linesensors_read(); if(linesensor[1] > 200 linesensor[2] > 200 linesensor[3] > 200) print("otse"); found_straight = 1; // Kontrollime, kas oleme laburindi lõpus // S.t kui kõik 3 keskmist sensorid on tumedad, // siis oleme lõpuristküliku peal if(linesensor[1] > 600 && linesensor[2] > 600 && linesensor[3] > 600) print("solved"); while(1); break; unsigned char dir = select_turn(found_left, found_straight, found_right); //Pöörame, eelistatult vasakule. 6

turn(dir); 5. Kokkuvõte Kokkuvõtteks oskan TTÜ Robotiklubi mikrokontrollerite koolituse kohta ainult head öelda. Tunnid olid sisukad oli nii kuulamist, kirjutamist klaviatuuril kui ka nuputamist. Koduülesanded aitasid kinnistada ja taaskasutada tunnis olnud teemasid. Antud kursus motiveeris mind veel nii palju, et otsustasin ka ise endale mikrokontrolleri ja paar sensorit osta. Eks varsti näen ka kodus midagi joonel sõitmas või midagi veel põnevamat tegemas. Sest kontrollerit ostes mõtlesin nii võimalused on lõputud. Kõik, mida suudan välja mõelda peaks saama ka teostada. Olen rahul, et valisin selle vabaine. See aitas mul alustada tegelemist sellega, millest olin unistanud juba ammu. 7