Reaali Robootika.COM

NXT robotimaailm ja programmeerimine C-keeles

3. 9 klass 1 õppetund: Pöördenurga ja teepikkuse arvutamine

Tiigrihype_logo

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

Ülesande eesmärk

Robot peab sõitma täisnurkse kolmnurga hüpotenuusi ühest tipust teise (külg c), kusjuures teada on vaid kaatetite pikkused (küljed a ja b) ja robot asub alguses kolmnurga tipus paralleelselt kaatetiga.

Alljärgneval joonisel on näidatud roboti algne asukoht ja lõpp-positsioon.

 

Roboti kolmnurga sõitmise ülesanne

Ülesande tingimused

Robot peab iseseisvalt lahendama nurga ja teepikkuse arvutamise. Kusjuures robot peab olema võimalikult sõltumatu rataste suurusest ja rataste omavahelisest kaugusest.

Robot peab olema sõltumatu kolmnurga külgede pikkustest. Selle saab tagada võttega, et programmi alguses küsib robot kasutaja käest lõikude a ja b pikkuseid, mille annab ette õpetaja. Peale lõikude sisestamist käivitub programm mis pöörab robotit vajaliku hulga kraade ning robot sõidab nõutud teepikkuse jõudes kolmnurga teise tippu.

NB! Õpilastel võiksid olla sellised robotid, millel saab kerge vaevaga rattaid vahetada suuremate-väiksemate vahel kuna see mõjutab otseselt programmi käitumist. Ratta suurus võib olla samuti alguse küsimus, mida kasutajalt küsitakse programmi käivitamisel. Alljärgnevas programminäites seda tehtud pole, kuid olemasoleva koodi analoogia põhjal on see kergesti teostatav.

Ülesande lahendamine

Ülesanne baseerub lihtsal matemaatikal ning teada on tarvis kahte valemit.

Tähistame tundmatud nimedega PöördeNurk ja teepikkus ehk c.

1)      Pöördenurga arvutamiseks on valem: pöördenurga arvutamine

2)      Teepikkuse arvutamiseks on Pythagorase teoreem Pythagorase teoreem hüpotenuusi leidmine

Lahendus

Tunni läbiviimise metoodika.

Anda õpilastele kätte ülesanne ja tingimused. Kogu edasise võiksid olla nad suutelised ise välja mõelda.

Kui tarvis siis järgmise asjana võib tahvlile kirjutada pöördenurga arvutamise valemi ja Pythagorase teoreemi juhuks kui need kohe meelde ei tule.

Kogu edasine protsess peaks olema nende enda looming. Alljärgnev on üks võimalik lahendus käesolevale ülesandele.

Muutujatena on kirjeldatud ratta diameeter ning rataste telje vahe. Kogu ülejäänud matemaatika toimub programmi siseselt.

 

//Robot peab sõitma täisnurkse kolmnurga hüpotenuusi ühest tipust teise (külg c),

//kusjuures teada on vaid kaatetite pikkused (küljed a ja b)

//ja robot asub alguses kolmnurga tipus paralleelselt lähiskaatetiga.

//

 

float WheelDiameter = 56; //ratta diameeter

float Wheel;              //ratta ümbermõõt

float TeljeVahe = 110;    //rataste telje vahe

float a=30;               //külg a sentimeetrites

float b=40;               //külg b sentimeetrites

float TeePikkus;

float PoordeNurk;

 

task main(){

 

Wheel = WheelDiameter * PI;

 

//järgmine tsükkel võimaldab kasutajal valida kolmnurga lähiskülje pikkuse

//algne pikkus 30cm, seda saab suurendada/vähendada 10 cm kaupa

while (TRUE){

        TextOut(0, LCD_LINE2, "Sisesta lahiskylg");

        NumOut(30, LCD_LINE3, a);

        if(ButtonPressed(BTNCENTER, FALSE))

               {

               while(ButtonPressed(BTNCENTER, FALSE));

               break;

               }

        if(ButtonPressed(BTNRIGHT, FALSE))

               a += 10;

        while(ButtonPressed(BTNRIGHT, FALSE));

        if(ButtonPressed(BTNLEFT, FALSE))

               a -= 10;

        while(ButtonPressed(BTNLEFT, FALSE));

        Wait(MS_100);

        ClearScreen();

        }

 

//järgmine tsükkel võimaldab kasutajal valida kolmnurga vastaskülje pikkuse

//algne pikkus 40cm, seda saab suurendada/vähendada 10 cm kaupa

while (TRUE){

        TextOut(0, LCD_LINE2, "Sisesta vastaskylg");

        NumOut(30, LCD_LINE3, b);

        if(ButtonPressed(BTNCENTER, FALSE))

               {

               while(ButtonPressed(BTNCENTER, FALSE));

               break;

               }

        if(ButtonPressed(BTNRIGHT, FALSE))

               b += 10;

        while(ButtonPressed(BTNRIGHT, FALSE));

        if(ButtonPressed(BTNLEFT, FALSE))

               b -= 10;

        while(ButtonPressed(BTNLEFT, FALSE));        

        Wait(MS_100);

        ClearScreen();

        }

 

ClearScreen();

 

//ekraanil kuvatakse valitud lähiskülje ning vastaskülje pikkused

NumOut(70, LCD_LINE1, a);

NumOut(70, LCD_LINE2, b);

TextOut(0, LCD_LINE1, "Lahiskylg:");

TextOut(0, LCD_LINE2, "Vastaskylg:");

 

//arvutatakse välja pöördenurk ja teepikkus

PoordeNurk = atan2d(b, a);

TeePikkus = sqrt(b*b+a*a);

 

//pöördenurk ja teepikkus kuvatakse ekraanil

TextOut(0, LCD_LINE3, "Poordenurk:");

TextOut(0, LCD_LINE4, "Teepikkus:");

NumOut(70, LCD_LINE3, PoordeNurk);

NumOut(70, LCD_LINE4, TeePikkus);

 

//Pöördenurk ja teepikkus teisendatakse robotile arusaadavateks ühikuteks

//pöördenurk saab uue väärtuse väljendades roboti jaoks seda

//mitu kraadi peab rattaid pöörama et robot keeraks soovitud hulga kraade

PoordeNurk = (PoordeNurk * TeljeVahe) / WheelDiameter;

 

//teepikkus saab uue väärtuse väljendades roboti jaoks seda

//mitu kraadi peab rattaid pöörama, et robot läbiks vajaliku teepikkuse

TeePikkus = TeePikkus * 10 / Wheel * 360;

 

//robot pöörab vajaliku nurga

RotateMotorEx(OUT_BC, 50, PoordeNurk, -100, TRUE, TRUE);

Wait(MS_100);

 

//robot sõidab edasi vajaliku teepikkuse

RotateMotorEx(OUT_BC, 75, TeePikkus, 0, TRUE, TRUE);

 

//programm jääb lõpus ootama, kuni kasutaja vajutab nuppu

//senikaua kuvatakse ekraanil roboti poolt välja arvutatud numbrid

while(!ButtonPressed(BTNRIGHT, FALSE));

 

}

Add comment

Loading