Reaali Robootika.COM

NXT robotimaailm ja programmeerimine C-keeles

1. 9 klass 2 õppetundi Robot puldiauto

Tiigrihype_logoSee materjal on loodud Tiigrihüppe Sihtasutuse programmi ProgeTiiger raames.

Tee oma robotist puldiauto, mida saab juhtida lülitite abil. See projekt annab ülevaate, kuidas toimivad while-tsüklid ja if-tingimuslaused koos lülitite ja mootoritega erinevates kombinatsioonides.

 

Alustuseks vaatame erinevaid võimalikke lähenemisi puldiauto juhtimisele. Esimesed on lihtsamad ning järgmised muutuvad keerukamateks.

Ehitada tuleb tavaline baasrobot, mis on võimeline liikuma edasi-tagasi ja keerama paremale-vasakule. Sellele tuleb lisada kõige pikema juhtmega üks või kaks puuteandurit vastavalt ülesandele, mida kasutatakse roboti juhtimiseks.

1.       Puldiauto ühe lülitiga, 2 varianti.

a.        Robot liigub edasi, kui lüliti on vajutatud ning seisab, kui lüliti on lahti lastud.

b.       Robot hakkab liikuma, kui lüliti on alla vajutatud ja lahti lastud (bumped) ning jääb seisma, kui teist korda lüliti alla vajutatakse ja lahti lastakse.

2.       Puldiauto kahe lülitiga, 2 varianti.

a.        Kumbki lüliti juhib ühte mootorit. Lüliti lahti lastud asendis robot seisab, parempoolset lülitit vajutades keerab robot paremale ja vasakpoolsega vasakule. Mõlemat all hoides sõidab robot otse edasi.

b.       Robot hakkab edasi sõitma siis, kui mõlemad lülitid on korraga alla vajutatud ja lahti lastud (bumped). Üksikult kasutades toimivad lülitid roboti paremale-vasakule keeramise juhtimiseks. Teistkordsel üheaegsel vajutamisel (bumped) jääb robot seisma.

Puldiauto ühe lülitiga

Sellel ülesandel on kaks varianti, esimene hästi lihtne ning teine õige pisut keerulisem.

Variant 1. Robot liigub edasi, kui lüliti on vajutatud ning seisab, kui lüliti on lahti lastud.

Programmi käivitudes on esimene käsk SetSensorTouch, mis on vajalik lülitianduri initsialiseerimiseks, st. selle käsuga me ütleme robotile: „Sinu esimeses pordis asub lüliti andur“. Järgmisena käivitub lõpmatu while-tsükkel (lõpmatu, kuna selle tingimuseks on märgitud TRUE). Lõpmatu tsükli sees on if-else tingimuslause. If tingimus kontrollib, kas lüliti on alla vajutatud. Kui lüliti on alla vajutatud, siis käivitub edasisõitmine OnFwd, kui mitte, siis käivitub else ning mootorid lülitatakse välja.

Kuna tegemist on while-tsükliga, siis if-else lauset seal sees täidetakse 10 000 korda sekundis. See tagab, et robot igal juhul nö. märkab lüliti vajutamist ja meil pole võimalust öelda, et „robot ei jõudnud reageerida minu lüliti vajutusele“.


 

Näide. Lihtne puldiauto ühe lülitiga

task main()

{

  SetSensorTouch(S1);

  while(TRUE)

  {

    //kui lüliti on alla vajutatud, sõidab robot edasi

    //kui lüliti on lahti lastud, jääb robot seisma

    if (Sensor(S1))

      OnFwd(OUT_BC, 100);

    else

      Off(OUT_BC);

  }

}

Variant 2. Robot hakkab liikuma, kui lüliti on alla vajutatud ja lahti lastud (bumped) ning jääb seisma, kui lüliti teist korda alla vajutatakse ja lahti lastakse.

Selle programmi while-tsüklid käituvad eelmise variandiga võrreldes täiesti erinevalt. Alguses käivitub esimene lõpmatu while-tsükkel while(TRUE).  Järgmised kaks käsku on samuti while-tsüklid, mille tingimusena kontrollitakse lüliti asendit. Kui lüliti on lahti lastud (nagu alguses on), siis on koheselt käivitunud esimene tsükkel while(!Sensor(S1)), mis käib seni, kuni nupp on lahti lastud asendis. Täpselt nupu alla vajutamisel väljutakse sellest while-tsüklist, kuna nupu väärtus muutus true-ks, mis omakorda while-tsükli jaoks hüüumärgiga vastupidiseks muudeti. Käivitub teine while-tsükkel, millest programm väljub siis, kui kasutaja nupu lahti laseb.

Alles nüüd käivitub käsk, mis paneb mootorid liikuma ja roboti edasi sõitma. Kuna ükski käsk mootori sõitmist ei lõpeta, töötavad mootorid seni, kuni kasutaja on teist korda nupu alla vajutanud ja lahti lasknud, et käivituks käsk Off mootorite väljalülitamiseks.

Ja alles seejärel jõuab programm ringiga algusesse tagasi kõige esimesena käivitunud while-tsükli täitmisele.

Näide. Puldiauto koos bumped-lülitiga

task main()

{

  SetSensorTouch(S1);

  while(TRUE)

  {

    //programm ootab nupu vajutamist ja lahti laskmist

    while(!Sensor(S1));

    while(Sensor(S1));

    //robot sõidab edasi

    OnFwd(OUT_BC, 100);

    //programm ootab nupu vajutamist ja lahti laskmist

    while(!Sensor(S1));

    while(Sensor(S1));

    //robot jääb seisma

    Off(OUT_BC);

  }

}

Puldiauto kahe lülitiga

clip_image002[4]Sellel ülesandel on kaks varianti, esimene lihtsam ja teine veidi keerulisem.

Variant 1. Kumbki lüliti juhib ühte mootorit. Lahti lastud asendis robot seisab, parempoolset nuppu vajutades keerab robot paremale ja vasakpoolsega vasakule. Mõlemat all hoides sõidab robot otse edasi.

Järgnevalt on välja toodud selle roboti plokkskeem. Sellel skeemil tähendavad rombid while-tsükleid või if-lauseid ning ristkülikud tegevusi nagu näiteks mootorite liigutamine.

Siin on näha, et alguses käivitub lõpmatu while-tsükkel, mille sees on if-else-if-else tingimuslause.

Esimese if-tingimusega kontrollitakse, kas mõlemad lülitid on korraga vajutatud. Kui tingimus vastab tõele, siis robot sõidab otse edasi, kui mitte, siis minnakse kontrollima järgmist if-tingimust. Järgmises if-tingimuses kontrollitakse, kas lüliti 1 on vajutatud. Kui on, siis käivitub mootoritele käsk, et robot peab paremale pöörama. Sellele järgnevaid tingimusi eiratakse ning tsükkel jõuab uuesti algusesse tagasi ning kontrollib uuesti if-tingimust.

Kui esimene lüliti ei ole vajutatud, liigub programm edasi ja kontrollib järgmise else-if tingimusega, kas teine lüliti on vajutatud. Kui on, siis robot pöörab vasakule. Kui aga kumbki lüliti pole vajutatud, käivitub else-lause ja robot seiskab oma mootorid.

Näide. Robot kahe lülitiga

task main()

{

  SetSensorTouch(S1);

  SetSensorTouch(S2);

 

  while(TRUE)

  {

    //kui mõlemad lülitid korraga vajutatud, sõidab otse

    if (Sensor(S2) && Sensor(S2))

      OnFwd(OUT_BC, 50);

    //kui esimene lüliti vajutatud, keerab robot paremale

    else if (Sensor(S2))

      OnFwdSync(OUT_BC, 50, -10);

    //kui teine lüliti on vajutatud, keerab robot vasakule

    else if(Sensor(S1))

      OnFwdSync(OUT_BC, 50, 10);

    //kui lülitid pole vajutatud, sõidab robot otse

    else

      Off(OUT_BC);

  }

}

clip_image004[4]Variant 2. Robot hakkab edasi sõitma siis, kui mõlemad lülitid on korraga alla vajutatud ja lahti lastud. Üksikult kasutades toimivad lülitid paremale-vasakule keeramisena. Teistkordsel üheaegsel vajutamisel jääb robot seisma.

Pärast esimese lõpmatu tsükli käivitumist jääb programm järgmise while-tsükli sisse while(!Sensor(S1) && !Sensor(S2)). Tsükli tingimuseks on kaks lülitiandurit koos && märgiga, mis tähendab seda, et while-tsükkel peatub alles seejärel, kui mõlemad lülitid on korraga alla vajutatud. Seejärel käivitub järgmine while-tsükkel, mis ootab, kuni mõlemad lülitid on lahti lastud.

Seejärel käivitub while-tsükkel, mille tingimuseks on uuesti nende lülitite olek, kuid selle while-tsükli sees asuvad ka paremale-vasakule-otse sõitmise if-else-tingimuslaused.

Siinkohal toimib see programm täpselt samamoodi nagu esimene variant kahe lülitiga robotist.

Kui mõlemad lülitid on korraga alla vajutatud, muutub selle while-tsükli tingimus mittetõeseks ning väljutakse tsüklist. Mootorid seisatakse ja programmis käivitub viimane while-tsükkel, mille sees omakorda uuesti kontrollitakse nende kahe lüliti olekut ja oodatakse, kuni kasutaja need lahti laseb.

See viimane kontroll on vajalik selleks, et programm ei suunduks koheselt järgmisele ringile, vaid ootaks enne ära nuppude lahtilaskmise.

Näide. Robot kahe lülitiga ja bumped funktsiooniga

task main()

{

  SetSensorTouch(S1);

  SetSensorTouch(S2);

  while(TRUE)

  {

    //programm ootab vajutust

    while(!Sensor(S1) && !Sensor(S2));

    //programm ootab nupu lahti laskmist

    while(Sensor(S1) && Sensor(S2));

   

    //kui mõlemad nupud koos vajutatud,

    //väljutakse while-tsüklist

    while(!Sensor(S1) || !Sensor(S2))

    {

      //kui esimene lüliti on vajutatud, keerab paremale

      if (Sensor(S2))

        OnFwdSync(OUT_BC, 50, -10);

      //kui teine lüliti on vajutatud, keerab vasakule

      else if(Sensor(S1))

        OnFwdSync(OUT_BC, 50, 10);

      //kui lülitid pole vajutatud, sõidab robot otse

      else

        OnFwd(OUT_BC, 50);

    }

    //pärast while tsüklist väljumist seisatakse mootorid

    Off(OUT_BC);

    //programm ootab nupu lahti laskmist, see on vajalik,

    //et programm ei suunduks automaatselt uuele ringile

    while(Sensor(S1) && Sensor(S2));

  }

}

Eesti informaatikaolümpiaadi eelvooru tulemused

Põhikooli õpilaste tulemused.

 

Nimi Kool Klass Punkte kokku
Roland Perli Vanalinna Hariduskolleegium  9 96
Rao Zvorovski Tallinna Reaalkool  8 93
Ramses Sepp Tallinna 21. Kool 7 10
Kristofer Sokk Tallinna Reaalkool  7 8
Indrek Anissimov  Viljandi Kesklinna Kool 7 2
Leonid Manieiev  Haabersti Vene Gümnaasium 9 2
Markus Rene Pae Tallinna Reaalkool  9 2

 

Alates kolmandast kohast on punktide hüpe mäekõrgune, kuid edu kõigile kes osalesid!

FLL läbi kohtunikupilgu

Niipalju kui kohtuniku aeg võimaldas, klõpsutasin mõned pildid:

http://sdrv.ms/VcZzNn

Väga lahedad tiimid olid kõik!

FLL karikad

___

Mõned lõbusad seigad:

“Kas olete stardiks valmis “ - “Jah” ja siis kohe “eiiii, meil pole mootorit” ning juba saadeti tiimikaaslane mootorit tooma.

___

“Kas teie robot on stardiks valmis” - “jah on”, siis vaatasid koos robotit ja teatasid “ikka ei ole veel”.

Robotil olid nimelt absoluutselt kõik mootorite ja andurite juhtmed lahti, mida hakati siis koos suvalstesse portidesse toppima. Natuke omavahelist vaidlemist kas sai õigesti, teatasd nad et “nüüd oleme valmis”. Õnneks taipas üks neist veelkord robotit vaadata ja juba ta hüüdiski “aga meil pole ju valgusandurit”. Ja saadetigi tiimikaaaslane valgusandurit otsima.

Sai siis see andur sinna külge ja ka mingisse porti.

Start.

Robot sõitis väga naljakalt ja muidugi tõsteti see kohe baasi tagasi ja hakati juhtmeid ümber tõstma ja siis uuesti proovima

Väga lõbus tiim.

___

Küsisin et mitu ülesannet plaanite et robot teeb? Vastati, et “meie robot sõidab ainult platvormile ja teeb seda senikaua kuni peale saab”

Kolm korda said nad proovida, siis oli robot platvormi täiesti risti ajanud ja ise ka külili. Poisid arvasid et järgmisel voorul proovivad uuesti.

___

Pit-Areas, enne viimast, kolmandat vooru.

Tuli üks tiim minu juurde ja teatas et nad tegid nüüd enne kolmandat vooru oma roboti TÄIESTI ümber (40 minutiga). Kõik programmid kirjutati uuesti ja võeti palju uusi ülesandeid juurde ning nad proovisid, et nad saavad nüüd palju rohkem punkte kui varem  (lõpptulemust kahjuks ei tea)

___

Üks tiim sai platsilt kätte ainult tooli ja tõi selle baasi.

Rohkem nende robot punkte ei teinud. Kui hakkasime punkte kokku lugema, selgus, et tool oli küll baasis aga parandamata. Ütlesin, et selle eest punkte ei saa. Aga kui nad siis ilusti palusid, et “me parandame kohe ära, palun anna ikka selle eest punkte” siis muidugi läks kohtunikusüda härdaks ja andis neile tooli eest punkti (kuna see oli ka ainus asi mida nende robot tegi).

Kolmnurga trigonomeetria: robotiprogrammeerija raudvara

See teema kulub igal robotiprogrammeerijal marjaks ära. Järgmine tund seletan need lihtsad kuid väga võimsad funktsioonid lahti.

AC=23 AB=55 BC=50

Teooria

Matemaatika

NXC

Excel

Mathe-

matics

sin, cos, tan leidmine

clip_image002[4]

 

clip_image004[4]

 

clip_image006[4]

 

clip_image008[13]

 

clip_image010[4]

 

clip_image012[4]

 

sind(65)

 

cosd(65)
 
tand(65)

 

 

=SIN(RADIANS(65))

 

=COS(RADIANS(65))

 

=TAN(RADIANS(65))

 

sin(65)

 

cos(65)

 

tan(65)

Kraadide leidmine

arcsin, arccos, arctan

clip_image020[4]

 

clip_image022[4]

 

clip_image024[4]

clip_image026[4]

 

clip_image028[4]

 

clip_image030[4]

 

 

asind(50/55)

 

acosd(23/55)
 
atand(50/23)

 

 

=DEGREES(ASIN(50/55))

 

=DEGREES(ACOS(23/55))

 

=DEGREES(ATAN(50/23))

arcsin(50/55)

 

arccos(23/55)

 

arctan(50/23)

image

Robotexi FLL-i võistluse võitis Robootika.COM

Tiim Robootika.COM

Tiim oli supertubli !

Palju õnne kõigile eduka esinemise eest terve päeva vältel !!!

Robotexi FLL-i võistluse võitis Robootika.COM

Robotexi raames toimunud põhikooliõpilastele suunatud võistluse FLL (FIRST LEGO League) võitis huviringi Robootika.COM võistkond.

FLL-i võistlus koosneb kolmest osast: robotiehitus, uurimustöö/projekt ja meeskonnatöö. Tänavune võistlus oli teemal „Lahendused eakatele“ (Senior Solutions).

„Hindan tiimi juures väga kõrgelt seda, et võistluseks ettevalmistamise perioodil tegeleti võrdselt tugevalt kõigi kolme etapiga ning kindlasti oligi see meie edu üks alus,“ ütles Robootika.COM juhendaja Leivo Sepp.

Kõige vaatemängulisem on võistluse juures robot, mis peab täitma spetsiaalsel väljakul kahe ja poole minuti jooksul iseseisvalt hulga ülesandeid. Robootika.COM robot sai edukalt hakkama vanuritele tekkide kohaletoimetamisega, ravimi toomisega, ümberkukkunud tooli põrandalt koristamisega.

Uurimustöö raames tuli valida eakate inimestega seotud probleem ning sellele innovaatiline lahendus välja pakkuda. Robootika.COM ideeks oli interaktiivne ravimikapp, mis aitab eakatele meelde tuletada ravimite võtmise või protseduuride aega ning on ühtlasi ühenduses apteegiga, et vajalikul ajal ravimeid operatiivselt juurde tellida.

Meeskonnatöö osas hinnatakse FLL-i põhiväärtusi, mis aitavad arendada õpilasi koos töötama ja ühiselt probleemidele lahendusi otsida.

Robotexi raames toimus FLL-i Põhja-Eesti voor. Lõuna-Eesti voor toimub 1.detsembril Tartus ning mõlema vooru kümme parimat võistkonda kohtuvad omavahel kevadisel koolivaheajal, et võistelda FLL-i Eesti meistri tiitlile ning õigusele esindada Eestit FLLi Euroopa meistrivõistlustel.

Robootika.COM on üks 36 tehnoloogia huviringist, kes tänavu valiti Vaata Maailma SA, EMT, Elioni ja Microsofti Nutilabori projekti. Samuti on Robootika.COM pälvinud tiitli „Eesti Parim Robootikakool 2012“.

Robootika.COM FLL-i tiimi kuuluvad Rao Zvorovski (Tallinna Reaalkool), Tomi-Andre Priimets, Karl Jakob Levin, Kirte Katrin Sarevet, Petra Brit Põhjakas (kõik Tallinna Tehnikagümnaasiumi õpilased), Ramses Sepp, Peter Alex Mahhov, Marko-Raul Peetersoo, Raimond Lume (kõik Tallinna 21.Koolist) ja Jaan Roop (Nõmme Põhikool).

Vaadake meie Senior Solutions projekti !

Pilt001

 

 

Pilt002

 

 

Pilt003

image

 

Ravimikapp tuletab meelde, millal on vaja rohtu võtta, kui palju on vaja võtta ning annab kõrvale ka vett juua.

Sisse on ehitatud turvaline süstimissüsteem.

Kapiga on kaasas ka käekell, mis mõõdab pulssi jms.

Kapiga saab videokõne abil arstiga ühendust võtta.

Kapi ravimivarudele pääseb ligi vaid spetsialist, kes käib iga kuu kappi kontrollimas ja ravimivaru vaatamas.

Ekraan on kasutajasõbraliku interface’iga.

 

 

image

Nutilabor alustas üle Eesti 36 huvikoolis

Nutilabori välja kuulutamine Enn SaarMicrosoft, EMT ja Elion toetasid Vaata Maailma algatust soodustada tehnoloogiaalase huviringide õpet Eestis.

Enn Saare käima lükatud projekt sai avapaugu 5. oktoobril 2012 ning on äärmiselt toreda nimega – Nutilabor.

Nutilabori projekti käigus arendatakse 2012-2013. õppeaastal noorte infotehnoloogia-alast huvitegevust Eestis, et pakkuda suuremale hulgale noortele infotehnoloogiaga seotud huviringides osalemise võimalust ning kasvatades seeläbi nende huvi antud eriala õppimise vastu.

Suur aitäh. Ka huvikool Robootika.COM on saanud tuult tiibadesse.

Nutilabor Robootika.COM

 

 

EMT Valdo KalmNutilabori avamisele saatis President oma tervituse, mille luges ette EMT peadirektor Valdo Kalm.

Kõrvalolevad fotod võetud Nutilabori avamisel tehtud pildipangast.

Meie Nutilabori tiim otsustas teha Presidendile vastutervituse, mille panime avalikult üles Youtube kanalisse.

Nutilabori partner Robootika.COM Leivo SeppTehnoloogia huviharidust edendava Nutilabori projekti eestvedajad ja partnerid tänavad Presidenti Toomas Hendrik Ilves südamliku tervituse eest, mille ta saatis Nutilabori avamisele 5.oktoobril 2012.

Tänavuse aasta Eesti parima robootikakooli Robootika.COM õpilased saadavad allolevas videos Presidendile Nutilabori nimel vastutervituse ning esitlevad Presidendi Robotit, mille nad Nutilabori avaürituseks Presidendi jaoks ehitasid.

Nutilabor saadab tervituse Presidendile

 

Leivo Sepp
Robootika.COM juhendaja, Nutilabori partner

Robootika FLL-i hooaeg sai avatud !

Loomulikult oli päeva nael FLL-i laua kokkupanek.

FLL Senior Solutions laua kokkupanek

 

Alljärgnevalt olulisi viiteid FLL-ga seoses.

Meie tiimi veebileht: http://robootika.com
Facebooki leht: http://www.facebook.com/RobootikaCOM (laikige ja jagage seda)
Twitteri konto: @RobootikaCOM (follow that)
 
FLL-iga seotud teemad:
 
Eesti FLL-i lehekülg
Lehele ilmub varsti eestikeelne sisu.
 
FLL Senior Solutions leht
 
Laadige endale alla see dokument ja lugege läbi paar lehekülge mis räägivad projektist ja reeglitest:
 
Robotimängu reeglite ametlikud täiendused/muudatused
 
FLL foorum, seda tasub lugeda nii mängu kui projekti suhtes kuna sealt saab palju häid ideid
 
TechBrick lehekülg. Tasub lugeda, päris hea materjal FLL-i kohta

 

Viimane seis tiimide osas on järgmine:
Tallinn, 23 november, 17 võistkonda
Tartu, 1 detsember, 14 võistkonda