KURZ: Vyhledávač IR signálů

KAPITOLY

Vyhledávač IR signálů je senzor, který ve svém okolí detekuje infračervené signály. Návratovou hodnotou senzoru je směr, ze kterého byl signál přijat v podobě čísla sektoru (1-9), do kterých je přijímací plocha senzoru rozdělena. Přijímání infračervených signálů můžeme při použití LEGO Mindstorms NXT využít například pro detekci infračerveného míče, který tento signál vysílá. Pomocí senzoru tak zjistíme, na jaké pozici vůči senzoru se míč nachází a na základě tohoto zjištění poté manipulujeme s robotem.

Druhá verze vyhledávače IR signálů dokáže pracovat ve dvou módech. Prvním je modulovaný AC a druhý nemodulovaný DC. Rozdíl je v typu přijímaných signálů. V AC módu dokáže detekovat pouze modulované signály, které vysílá například infračervený míč. V nemodulovaném DC módu detekuje senzor všechny infračervené signály. Může tak být ovlivňován i slunečním svitem.

PRÁCE S vyhledávačem IR signálů V PROGRAMOVACÍCH PROSTŘEDÍCH

NXT-G

Blok pro ovládání vyhledávače IR signálů

Rozcestník


UMÍSTĚNÍ BLOKU

Vyhledávač IR signálů je v programovacím prostředí NXT-G řízen blokem IRSeekerV2Dragged IRSeeker Sensor V2. Tento blok není součástí základní instalace. Pro jeho použití je nutné jej do prostředí importovat. Návod k importu rozšiřujících modulů naleznete v kapitole Instalace rozšiřujících modulů.

 

IRseekerV2 block

 

POPIS BLOKU

Programový blok vyhledávače IR signálů obsahuje celkem 8 konektorů pro propojení s ostatními bloky.

Port Port - vyjadřuje, ke kterému ze vstupních portů (1-4) je senzor připojen.

IRDirection IRDirection - výstup, který vyjadřuje hodnotu v podobě sektoru, ze kterého byl IR signál přijat.

Mode Mode - konektor, který značí, zda vyhledávač pracuje v módu AC nebo DC.

Boolean Detect - výstup, který v podobě logické hodnoty vyjadřuje, zda byl nebo nebyl detekován IR signál.

Number Strength1označuje hodnotu síly signálu v kanálu 1.

Number Strength2 - označuje hodnotu síly signálu v kanálu 2.

Number Strength3  - označuje hodnotu síly signálu v kanálu 3.

Number Strength4  - označuje hodnotu síly signálu v kanálu 4.

Number Strength5 - označuje hodnotu síly signálu v kanálu 5.

 

PARAMETRY BLOKU

IRseekerV2

Port: vyjadřuje, ke kterému ze vstupních portů je vyhledávač IR signálů připojen.

Mode: značí, zda vyhledávač pracuje v módu AC nebo DC.

RobotC

PŘÍKAZY PRO OVLÁDÁNÍ vyhledávače IR signálů

Rozcestník


NASTAVENÍ SENZORU

Stejně jako u použití jiných senzorů, je i u vyhledávače IR signálů před započetím práce nutné provést deklaraci senzoru. Robotickým prostředím RobotC automaticky generovaný zápis, se skládá z klíčového slova #pragma a příkazu config(), který obsahuje čtyři parametry. První parametr definuje, zda se jedná o deklaraci senzoru či motoru. Druhý parametr definuje, ke kterému vstupnímu portu (S1 - S4) je senzor připojen. Třetí parametr je volitelný, zadávaný uživatelem. Jedná se o název senzoru, který se poté dále používá při vytváření programu. Poslední parametr deklarace je standardizovaný název senzoru (v případě vyhledávače IR signálů = sensorHiTechnicIRSeeker1200).

 
#pragma config(Sensor, S1,     IRvyhledavac,        sensorHiTechnicIRSeeker1200) // Kod je automaticky generovan pruvodcem deklaraci RobotC.
 

Poznámka: Deklaraci lze provést ručním zapsáním deklarace v příkladu nebo v menu programovacího prostředí RobotC. Postup je uveden v kapitole Deklarace motorů a senzorů.


NASTAVENÍ TYPU SENZORU

Deklarace senzoru pomocí průvodce není jediná možnost. Druhou variantou deklarace je pomocí příkazu SensorType[]. Parametrem tohoto příkazu je název senzoru, který musí být nejprve nadeklarován pro třídu tSensors, která definuje rozšiřující moduly v prostředí RobotC. Pro úplnost zápisu musíme k příkazu přiřadit standardizovaný název senzoru (vyhledávač IR signálů = sensorHiTechnicIRSeeker1200).

Tento typ deklarace je doporučeno provádět zkušenějším uživatelům. Začátečníkům se doporučuje deklarovat moduly pomocí Deklarace motorů a senzorů v horní liště menu.

 
tSensors IRvyhledavac;
SensorType[IRvyhledavac] = sensorHiTechnicIRSeeker1200;
 

Práce s hodnotou snímanou senzorem

Vyhledávač IR signálů vrací výstupní hodnotu, která je rovna číslu od 1 do 9. Toto číslo vyjadřuje směr kolem senzoru, ze kterého byl infračervený signál přijat. Naše zařízení nebo robot tak může podle tohoto zjištění reagovat. Můžeme například vytvořit program, ve kterém se bude robot opatřený IR vyhledávačem natáčet za zdrojem infračervených signálů.

Hodnotu zjištěnou senzorem vyjadřujeme pomocí příkazu SensorValue[]. Jeho parametrem v závorce je název senzoru, který jsme si nadefinovali v úvodní deklaraci. Možný zápis příkazu vidíte níže.

 
SensorValue[IRvyhledavac] == 5;
SensorValue[IRvyhledavac] > 5
 

Využití předdefinovaných metod

Stejně jako u ostatních rozšiřujících modulů, tak i u vyhledávače IR signálů nalezneme buďto v instalačních souborech programového prostředí RobotC nebo na stránkách výrobce (můžete si ji stáhnout ZDE) vývojovou knihovnu obsahující ovladače pro senzor. Knihovnu ovšem musíme nejprve v programu zavolat. Provedeme to v jeho úvodu následovně:

 
#include "drivers/hitechnic-irseeker-v2.h"
 

Úkolem vyhledávače infračervených signálů je vracet číslo, které označuje sektor vyjadřující směr přijetí signálu. Ve vývojové knihovně nalezneme k tomuto účelu dvě předdefinované funkce. Jejich návratový typ je v obou případech datového typu integer. První funkce se nazývá HTIRS2readDCDir(). Vrací nám číslo od 0 do 9, označující sektor, ze kterého byl signál přijat v nemodulovaném DC módu. Druhá se nazývá HTIRS2readACDir(). Její funkce je naprosto totožná jako u předchozí. Ovšem tato funkce vrací hodnotu zjištěnou v modulovaném AC módu. Parametrem uváděným v závorce je u obou volitelný název senzoru, který si uživatel definuje při deklaraci senzoru.


MOŽNOSTI PRAKTICKÉHO VYUŽITÍ

Vyhledávač infračervených signálů slouží k detekci směru, ze kterého vychází zdroj vysílání infračerveného signálu. Můžeme ho proto využít v úlohách, ve kterých budeme mít takovýto zdroj k dispozici. Nejčastěji se ovšem tento modul využívá v robotickém fotbale. Ten se hraje se speciálním infračerveným míčem, který obsahuje vysílač infračervených signálů. Robot tak díky vyhledávači IR signálů detekuje směr, odkud signál přichází a může reagovat na změnu pozice míče. Jeho úkolem je poté vsítit soupeři branku. Pro robotický fotbal se samozřejmě nepoužívá pouze vyhledávač IR signálů. Při řešení této úlohy je důležité zohlednit i další aspekty. Například směr k soupeřově brance, který určujeme kompasovým senzorem. Detekce stěn hracího pole pomocí ultrazvukového senzoru a podobně.

VYUŽITÍ vyhledávače IR signálů

Na jednoduchém příkladu si ukážeme, jak by robot mohl pomocí vyhledávače IR signálů reagovat na změnu polohy infračerveného míče v robotickém fotbale. Pokusíme se vytvořit program, díky kterému se robot v případě, že se infračervený míč bude nacházet přímo před ním, krátce, ale prudce rozjede a posune tak míč směrem k soupeřově brance.

NXT-G

Detekce polohy míče

Při vytváření programu je nejprve důležité si rozmyslet, co všechno musíme ošetřit. Robot se musí pohybovat tak, aby zjistil, kde se nachází míč. Jakmile se míč bude nacházet přímo před ním, tedy ve výseči číslo 5 vyhledávače, musí zareagovat. Adekvátní reakcí bude prudký pohyb vpřed, kterým se pokusí "kopnout" do míče.

Krok 1 - Vyhledávání míče

První krok, který zrealizujeme, bude to, aby robot dokázal rozlišit, jestli se před ním nachází míč či nikoliv. Zjišťovat bude tuto skutečnost tak, že se bude točit kolem své osy. Nejprve použijeme dva bloky MotorDragged Motor. Jeden pro motor A a druhý pro motor B. Zvolíme příslušné porty, ke kterým jsou připojeny a každému z nich nastavíme opačné otáčení. Jeden se bude otáčet vpřed a druhý vzad. Rychlost otáčení jsme zvolili 50%. Tento pohyb bude prováděn stále dokola.

Dále musí robot zjistit, jestli se před ním nenechází infračervený míč. Použijeme tedy blok IRSeekerV2Dragged IR Seeker Sensor v2. Nyní budeme ověřovat, zda se míč nenachází přímo před senzorem, tedy v sektoru číslo 5. Ověříme, jakou hodnotu vrací senzor na výstupu IRDirection IRDirection. Tento výstup přivedeme na vstup bloku FPNumericComparisonDragged Compare, kde budeme porovnávat, zda je tato hodnota rovna 5.

V současné situaci by ověření proběhlo pouze jednou a program by skončil. My ale chceme, aby ověřování probíhalo neustále. Všechny čtyři bloky tak umístíme do cyklu LoopBig Loop. Jeho řízení bude prováděno pomocí hodnoty logického datového typu (Logic). Ukončení tohoto cyklu tak bude závislé na splnění podmínky uvnitř (IRDirection = 5). Pokud bude splněna podmínka, cyklus se ukončí a program pokračuje dále. Výstup Result bloku FPNumericComparisonDragged Compare tak přivedeme na konektor cyklu. 

detekce mice vyhledavani

 
Krok 2 - Reakce

Náš robot už nyní dokáže zjistit, zda se před ním nachází infračervený míč či nikoliv. Nyní musí pouze zareagovat, pokud bude míč přímo před ním. Při splnění podmínky musí "kopnout" do míče. Použijeme blok MoveDragged Move, zvolíme příslušné motory, směr vpřed a pohyb trvající půl vteřiny. Ještě před tento blok ale umístíme dva bloky MotorDragged Motor, které budou zastavovat motory A a B. Při okamžitém přechodu z rotačního pohybu v prudký pohyb vpřed by se totiž mohlo stát, že robot díky setrvačnosti v pohybu infračervený míč mine.

Aby robot i po prvním "kopnutí" pokračoval v hraní fotbalu, musíme ještě všechny bloky umístit do cyklu LoopBig Loop, u kterého nastavíme nekonečné provádění.

 

Výsledný program

Po správné realizaci jednotlivých kroků by měl program vypadat tak, jak vidíte na obrázku. Tento program není kompletním řešením pro realizaci robotického fotbalu. Pro správné řešení bychom museli použít i další moduly a vyřešit mnoho dalších situacích. Tento program slouží pouze jako demonstrace funkce vyhledávače IR signálů

IR seeker priklad

 

Program ke stažení

Stažení ve formátu .rbt

RobotC

DETEKCE POLOHY MÍČE

Při řešení programu v programovacím prostředí RobotC musíme nejprve deklarovat vyhledávač IR signálů. Následně je důležité programově zapsat konstrukt, díky kterému robot detekuje infračervený míč. Na závěr musí robot provést "kopnutí" do míče.

Krok 1 - Deklarace senzoru

Stejně jako v jiných úlohách, ve kterých použijeme některý ze senzorů, tak i v tomto musíme nejprve vyhledávač IR signálů nadeklarovat. Deklaraci je možné zapsat buďto ručně nebo pomocí průvoce deklarací. Deklarace se skládá klíčového slova #pragma a příkazu config(), který obsahuje čtyři parametry. První označuje, že se jedná o senzor (Sensor). Druhý označuje port, ke kterému je senzor připojen (S1-S4). Třetí parametr je volitelný a uživatel si zde volí název senzoru, který bude posléze používat v programu. Poslední je standardizovaný název senzoru (sensorHiTechnicIRSeeker1200).

 
#pragma config(Sensor, S1, vyhledavac, sensorHiTechnicIRSeeker1200)
 
 
Krok 2 - Reakce

Nyní již můžeme začít s vytváření programu. Nejprve musíme zajistit, aby robot dokázal rozlišit, zda se před ním nachází infračervený míč či nikoliv. Konkrétně musí být umístěn ve výseči číslo 5 přímo před senzorem. Použijeme podmínku if(), jejíž parametr v závorce bude, že hodnota zjištěná senzorem bude rovna 5 (SensorValue(vyhledavac) == 5). V tomto okamžiku musí ustat veškerý pohyb robota, to znamená, že oběma motorům přiřadíme nulovou rychlost. Tento úkon jsme nastavili pouze na krátký časový úsek (200 milisekund). Následně se prudce rozjede kupředu. Vteřinu pojedou oba motory vpřed rychlostí 75%.

 
if (SensorValue(vyhledavac) == 5)
 {
   motor[motorA]=0;
   motor[motorB]=0;
   wait1Msec(200);
   motor[motorA]=75;
   motor[motorB]=75;
   wait1Msec(1000);
 }
 
 
Krok 3 - Detekce míče

Po zjištění, že se před robotem nachází infračervený míč, do něj musí robot "kopnout". Kopnutí jsme provedli příkazem motor[]. Podobným způsobem provedeme i detekci míče. Robot se bude při detekování otáčet kolem své osy tak dlouho, dokud míč nenajde. Za podmínku if() vložíme else a použijeme opět dva příkazy motor[] pro motory A a B. Oběma nastavíme rychlost 20% pro otáčení, ovšem každému opačným směrem.

 
 motor[motorA]=20;
 motor[motorB]=-20;
 

 

Výsledný program

Po správné realizaci jednotlivých kroků byste měli dojít k úspěšnému vytvoření úlohy. Nesmíme zapomenout na to, že celý kód musí být umístěný v nekonečném cyklu while(). Hotový program můžete vidět níže.

 
#pragma config(Sensor, S1, vyhledavac, sensorHiTechnicIRSeeker1200)
// deklarace senzoru
 
task main()
{
while(true)
{
 // otaceni a detekce mice
 if (SensorValue(vyhledavac) == 5)
 {
   motor[motorA]=0;
   motor[motorB]=0;
   wait1Msec(200);
   motor[motorA]=75;
   motor[motorB]=75;
   wait1Msec(1000);
 }
 else
 {
   motor[motorA]=20;
   motor[motorB]=-20;
 }
}
}
 

 

Program ke stažení

Stažení ve formátu .c

1 1 1 1 1 1 1 1 1 1 Hodnocení 0.00 (0 hodnocení)

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