KURZ: Světelný senzor - Možnosti praktického využití

KAPITOLY

MOŽNOSTI PRAKTICKÉHO VYUŽITÍ

Světelný senzor snímá veličiny ve svém okolí. Chování robota tak může být ovlivněno určitou hodnotou. Může být reagováno na nízkou či vysokou intenzitu světla. Následkem může být kupříkladu rozsvícení signalizačních diod, výpis na displej, či jiná reakce robota.
Druhou možností využití je světelného senzoru je při pohybu robota. Může totiž snímat povrch po kterém se pohybuje a vyhodnocovat intenzitu odráženého světla od různě barevných povrchů. Využívá se toho například v úlohách, ve kterých se robot pohybuje po předem vytyčené dráze, která má podobu různě zakřivené černé čáry na světlém porchu. Robot se tedy musí pohybovat kupředu a přitom neustále zjištovat, zda se stále nachází nad černou čárou či nikoliv.

VYUŽITÍ Světelného SENZORU

Praktické využití světelného senzoru si ukážeme právě na příkladu, ve kterém se robot pohybuje po černé čáře. Program by měl být univerzální, aby šel použít na různé dráhy. Použijeme tedy robota, jehož řízení bude zajištěno dvěma motory pohánějícími přední kola. V přední části robota bude umístěn světelný senzor namířený směrem dolů, který bude zjišťovat intenzitu odráženého světla od povrchu dráhy.


NXT-G

Pohyb robota po černé čáře

Během realizace programu budeme muset ošetřit několik situací. Nejprve musíme určit mez intenzity světla, při které se bude měnit chování robota. Robot musí neustále zjišťovat, zda se nachází na černé čáře. Bude tedy provádět jakýsi kmitavý pohyb od jedné strany čáry ke druhé. Jakmile zjistí, že je v místě, kde je okraj černé čáry, vnější kolo zrychlí a robot zamíří zároveň vpřed, ale také ke druhému okraji čáry. Musíme si také uvědomit co vrací světelný senzor při snímání černého a světlého povrchu. Pokud snímá intenzitu světla na světlém povrchu, je hodnota podstatně vyšší, než pokud senzor namíříme na černý povrch.

Krok 1 - Rozlišení intenzity světla

Robot musí při průjezdu vytyčenou dráhou zjišťovat, zda se stále nachází nad černou čárou nebo zda náhodou nevyjel mimo. Toto chování bude rozlišeno intenzitou odráženého světla. Pro rozlišení těchto hodnot použijeme blok podmíněného vykonání Blok Switch Switch. Podmínka bude řízena hodnotou ze senzoru, proto v sekci Control zvolíme možnost Sensor. Typ senzoru bude LightSensorDragged Light Sensor (světelný senzor). Zvolíme příslušný port, ke kterému je připojen a přejdeme k nastavení hodnot. V našem příkladu jsme zvolili jako mezní hodnotu 30%. To znamená, že robot bude zjišťovat, zda je snímaná barva tmavší než 30% či nikoliv (0 = nejtmavší, 100 = nejsvětlejší). Mezní hodnotu můžete nastavit i jinou. Záleží na tom, po jakém povrchu se robot pohybuje. Na lesklejších površích může senzor vracet pro stejný barevný odstín jiné hodnoty než na povrchu matném. Kompletní nastavení podmínky vidíte na obrázku.

Sledovac switch blok

Doporučení: před vytvářením programu si nejprve zjistěte intenzitu odráženého světla povrchů, po kterých se bude robot pohybovat. Použijte světelný senzor a hodnou si vypisujte například na displej řídící jednotky. Snáze tak určíte mezní hodnotu.

 

Krok 2 - Pohyb po čáře

Po zjištění, jaký povrch se nachází pod senzorem je nutné nastavit další chování robota. Robot nyní bude provádět kmitavý pohyb od jedné strany čáry ke druhé. Naším úkolem je zde pouze přiřadit do každé části podmínky přesně opačné chování. Jestliže tedy bude intenzita světla nižší jak 30%, budeme chtít, aby se motor B zastavil a naopak motor C prudce vyrazil vpřed. Použili jsme výkon 75%. Díky tomu robot popojede mírně šikmo vpřed a dojede k okraji čáry. Nyní ale chceme, aby nevyjel mimo, ale natočil se opačně a rozjel se k druhému okraji čáry. Do druhé části podmínky tedy vložíme znovu dva bloky MotorDragged Motor a nastavíme jim opačné chování než v první části podmínky. Motor C se nyní zastaví a motor B vyrazí prudce vpřed. Díky tomu bychom měli zaručit, že robot bude kmitavým pohybem neustále pokračovat v jízdě po čáře, kterou neopustí.

 

Krok 3 - Dokončení programu

Potřebujeme, aby se program vykonával neustále dokola, proto celou podmínku umístíme do nekonečného cyklu LoopBig Loop.

 

Výsledný program

Tento styl řešení průjezdu bludištěm po čáře pomocí světelného senzoru patří k těm nejjednodušším. Na obrázku můžete vidět kompletní program.

Sledovac cary komplet

 

Program ke stažení

Stažení ve formátu .rbt

RobotC

POHYB ROBOTA PO ČERNÉ ČÁŘE

Realizace příkladu projetí robota po černé čáře v programovém prostředí RobotC není příliš náročná. Musíme si uvědomit, jak požadujeme, aby se robot v různých situacích choval a na čem jeho chování závisí.

Krok 1 - Deklarace senzoru

Jelikož v programu využijeme světelný senzor, musíme si jej, jako v každém příkladu, kde senzory používáme, nadeklarovat. Deklaraci provedeme pomocí průvodce deklarací v sekci Robot > Motors and Sensors Setup. Výsledný zápis deklarace vidíte níže.

 
#pragma config(Sensor, S1, svetelny, sensorLightActive)
 
 
Krok 2 - Rozlišení intenzity odráženého světla

Robot se při průjezdu po čáře bude orientovat na základě hodnoty zjištěné intenzity světla odrážené od podložky. Bude se jinak chovat pokud zjistí, že je nižší než nastavená mez a jinak pokud bude vyšší. Jako pomyslnou mez jsme si pro potřeby našeho programu zvolili hodnotu 30%. Světelný senzor vrací hodnotu v rozmezí 0 - 100. Hodnota 0 odpovídá černé barvě a 100 bílé barvě. Robot tedy nejprve zjistí, na porvchu jaké barvy se nachází a následně udělá šikmý pohyb vpřed až narazí na okraj čáry. Zde zjistí, že je na okraji, kde už se nachází podklad jiné barvy, a tak vykoná šikmý pohy na opačnou stranu. Tímto kmitavým pohybem ze strany na stanu projede po celé délce čáry.

Doporučení: před vytvářením programu si nejprve zjistěte intenzitu odráženého světla povrchů, po kterých se bude robot pohybovat. Použijte světelný senzor a hodnou si vypisujte například na displej řídící jednotky. Snáze tak určíte mezní hodnotu.

 
Krok 3 - Pohyb po čáře

Nyní již přejdeme k samotnému zápisu kódu. Potřebujeme ošetřit dvě nastalé situace. Použijeme tedy podmínku if(). Jejím parametrem bude skutečnost, kdy hodnota zjištěná světelným senzorem bude nižší než 30. Hodnotu ze senzoru vyjadřujeme příkazem SensorValue(). Zápis tedy bude vypadat takto: SensorValue(svetelny) < 30. V těle podmínky se bude vykonávat samotný pohyb robota. Použijeme tedy příkaz motor[]. Jednomu z motorů nastavíme, aby stál (výkon = 0) a druhý se musí pohybovat vpřed (výkon = 75). Tím jsme ošetřili první možnost, kdy je hodnota intenzity nižší, než je stanovená mez. Zbývá vyřešit druhou možnost. Za podmínku tedy napíšeme slovo else (jinak - druhá možnost podmíněného vykonávání) a doplníme opět příkazy pro ovládání motorů, ovšem s přesně opačnými hodnotami výkonu. Díky tomu zajistíme kmitavý pohyb robota i v opačném směru.

 
 if(SensorValue(svetelny) < 30)
 {
   motor[motorB] = 0;
   motor[motorC] = 75;
 } 
 else
 {
   motor[motorB] = 75;
   motor[motorC] = 0;
 }
 
 
Krok 4 - Dokončení programu

Program by byl takto vykonán pouze jednou a skončil by. Musíme zajistit jeho neustále provádění. Celý programový zápis tedy umístíme do nekonečného cyklu while().

 
Výsledný program
 
#pragma config(Sensor, S1, svetelny, sensorLightActive)
 
task main()
{
while(true)
{
 if(SensorValue(svetelny) < 30)
 {
   motor[motorB] = 0;
   motor[motorC] = 75;
 }
 else
 {
   motor[motorB] = 75;
   motor[motorC] = 0;
 }
}
 
}
 

 

Program ke stažení

Stažení ve formátu .c

1 1 1 1 1 1 1 1 1 1 Hodnocení 4.00 (1 hodnocení)

Nemáte oprávnění přidat komentář.
Komentáře mohou přidávat pouze registrovaní uživatelé, kteří neporušují pravidla diskuze.