16.3.14

Tunnid vaheajal

Tunnid toimuvad tunniplaani järgi. TEISIPÄEVAL roboteid ei ehita vaid läheme direktori jutule. Seega tavalist tundi ei tule!

6.3.14

Arduinoga alustamine

Kuna Lego roboteid on kodus ainult 1 õpilasel siis kodutöödest loobumine osutus teistel justkui põhjendatuks. Arutasime olukorda ja asume Arduino robotiseeria kallale. Eelmisest aastast on olemas 4 Arduino Leonardo plaati. lisaks püüan juurde hankida Arduino Unosid ja mootorite kontrollereid. Mõlemaid saaks olemasoleva raha eest 2 tk. Panen siia lingid mis asjad need on:
Arduino Leonardo eelmise õppeaasta tutvustus ja Arduino UNO selleks aastaks. Mootorite juhtimise moodul võimaldab ühendada 2 alalisvoolu mootorit või ühe sammumootori. Seega saaks teha liikuva roboti. Kes soovib omada isiklikke plaate/mooduleid siis vajalikum on põhiplaat.



Pilt mootorite juhtplokist


Tarkvara on vabavara ning leidub palju koodijuppe ja foorumeid kust saab lisaks abi ja juhendamist. Arduino koduleht http://www.arduino.cc/
Tarkvara saab allalaadida http://arduino.cc/en/Main/Software



2.3.14

Reketi liigutamise programm

Kuna otsustasime tutvuda kuidas tehakse lihtsamat mängu, siis proovisime Ping-Pongi ühele. Näide on raamatust Robootika? ... See on imelihtne! Nagu ikka ei hakka endast lugu pidav koodijupp kohe tööle. Olen reede õhtust pusinud ja mõnda kohta omatahtsi ringi teinud. Panen siia esialgse variandi, mida saab veel ringis kohendada.
Peamiseks probleemiks on reketi paremale liikumisel jääv pikk saba. Vahetasin katsetamise käigus värava ehk reketi "AA" deks. Siis oli parem jälgida. Mingi konks on veel sellega kui reket jõuab paremasse nurka. Alustamisel ei teki värav ka päris keskele.

//Reketi liikumine
task main()
{
  int Dash;
  long alg;
  long Mootor;
  alg=MotorRotationCount(OUT_A);
 
  while(TRUE)
  {
    Mootor=MotorRotationCount (OUT_A)/5;
    Dash=(alg-Mootor)+DISPLAY_WIDTH/2;
    if (Dash<0)
    {
      alg=Mootor-DISPLAY_WIDTH/2;
      Dash=0;
    }
    if (Dash>DISPLAY_WIDTH-12)
    {
      alg=Mootor+DISPLAY_WIDTH/2-12;
      Dash=DISPLAY_WIDTH-12;
    }
   TextOut(Dash, LCD_LINE8,"AA",DRAW_OPT_CLEAR_LINE);
   Wait(100);
   ClearScreen();
   }
}


25.2.14

Andurite lugemine

Iga anduri korral on vaja vähemalt 3 rida.
1. rida, mis ütleb milline andur millises augus on;
2. mõõtjale nime ja tüübi andmine;
3. andmete lugemine.

Spikrid on Teile välja jagatud ja sealt leiate Andurite lõigust:
1. rea jaoks Set Sensor... ja mis edasi peab olema kirjutatud ning millise anduri puhul. Juttu oli mis need S1 ja S2 ja S5 on.
2. rea jaoks oli vajalik ainult see, et puuteanduri mõõtja tüüp on bool ja teistel byte. Nimi võiks olla normaalne ning et oleks teistele arusaadav võiks kasutada näiteks PuuteAndur jne. Halvad nimed on Sensor1 ja Mait3. Need kaks rida on eraldi kirjeldatud spikri lehel 2.
3. rida algab mõõtjanimi =Sensor(S1);  Mõõtjanime andsite eelmisel real ise, näiteks PuuteAndur kui on puuteanduriga tegu. S1 ei pea olema kui 1. real ütlesite et on agus S2 siis peab siin ka olema S2.

1 ja 2 rida võiksid kohe task main() all. Kuhu andur on pandud ja muutuja nime suudab aju meeles pidada aga lugemise paneme kordama, sest siis näeme tulemust pidevalt.

Nüüd NXT sees peaks anduri loetaud arv olemas olema. See muutub heli, valguse ja sonari puhul kogu aeg, sest tingimused muutuvad. Et see arv teada saada trükime selle ekraanile. Selleks paneme while(TRUE) käsuga korduva tegevuse käima. Järgnev osa peab olema loogelistes sulgudes, et programm teaks mida korrata. Seega, peale kordamise alustamist loeme oma andurit, mille olime ühendanud.  Siia tuleb kirjutada oma valitud anduri lugemise rida. See on eespool mainitud rida 3. Valgusanduri puhul näiteks ValgusAndur=Sensor(S1); Vaata spikrist teiste andurite lugemine. Nüüd teeme rea 2 puhtaks, et sinna tulemus kirjutada. Vaata juhendist kuidas rida 2 puhastada. Tunnis otsustasime tegeleda helianduri, sonari ja valgusanduriga siis nende väljund on numbriline ja saame trükkimiseks kasutada käsku trüki number NumOut(10,LCD_LINE2,ValgusAndur); Vaadake ja uurige mis see 10 on! Ning viimaseks paneme väikese viite Wait(MS_100); ning loogelised sulud kinni.

ONGI LIHTNE!

Kuidas see harjutus Teil tehtud saab, kui mainitud spikrid on pea kõik Kullos mööda klassi laiali aga eks IT mehed ise teavad!

Õpetaja Mait lubas selle programmi kodus järgi proovida ja rabas andurid ning mootori kaasa. Aju aga jättis Kullosse laua peale! Kahju kui õpetaja ajud lohakile jätab ja unustab lubadused!




22.2.14

Nupu programm

Oli küsimusi, et valgusanduri programmi ja puuteanduri (nupu) programmi ei saanud tööle. Tegin ise programmi läbi ja see töötab. Kuna mul kodus valgusandurit ei ole siis seda kontrollida ei saa aga juhendan, mida tuleks muuta. Programm on siis selline:

//Nupukas
task main()
{
SetSensorTouch(S1); //pistame lyliti auku 1
bool Puuteandur; //ytleb, et lyliti saab olla õige või vale
while(TRUE)  //paneb tegevuse korduma
   {
   Puuteandur = Sensor(S1); //käsib ajul lülitit kontrollida
   ClearLine(LCD_LINE2); //Teeb ekraani puhtaks
   if (Puuteandur)  //kontrollib muutujat nimega Puuteandur
   TextOut(0,LCD_LINE2,"Nupp all"); //kui on õige tee seda
   else   //kui on vale
   TextOut(0,LCD_LINE2,"Nupp yleval");  //tee seda
   Wait(MS_100);   //oota, et ekraani lugeda jõuaks
   }
}

Lisan siia video:




Teeme eelmise programmi ringi valguse mõõtmiseks.

1 rida Valgusanduri puhul paneme programmile uue nime
4 rida SetSensorLight(S1);//Ühendame silma aukku 1, kui tahame 2 siis sulgudesse S2
5 rida byte ValguseAndur; //anname valguse suurusele nime ja ütleme, et see on positiivne arv
8 rida ValguseAndur=Sensor(S1);//Vaatab palju valgust on anduril augus S1, (sama S mis real 4)
9 rida NumOut(10,LCD_LINE2,ValguseAndur);//Peaks trükkima valguse näidu. 0 on pime ja 100 on valge
if ja teksti käske ei ole vaja aga ootama peaks panema.

Head katsetamist!