KURZ: Multiplexer vstupů HiTechnic
- Podrobnosti
- Mgr. Jan Baťko
- Aktualizováno: 25.03.2014
Při vytváření složitého modelu robota může dojít k situaci, že nám již nebudou dostačovat čtyři vstupní porty, které máme k dispozici. Pokud budeme vytvářet robota, který při své orientaci v prostoru, bude snímat více veličin, je velmi pravděpodobné, že tato situace nastane.
V tomto článku se zaměříme na zařízení, které tuto nepříjemnou situaci dokáže řešit. Jedná se o multiplexer určený pro připojení až čtyř senzorů k jedinému vstupnímu portu. Jedná se o multiplexer od společnosti Hitechnic s označením NSX2020. Multiplexer obsahuje čtyři porty. První z nich je označen NXT a slouží k připojení k řídící jednotce NXT (k některému ze vstupních portů S1 - S4). Dále obsahuje čtyři vstupní porty k připojení senzorů, které jsou označené 1-4. Multiplexer vyžaduje pro svůj chod externí napájení. Napětí je přivedeno z přídavného adaptéru, který je k multiplexeru připojen vodičem. Napájení je provedeno pomocí baterie o napětí 9V.
Velkou výhodou multiplexeru je, že podporuje většinu nejčastěji používaných senzorů. Jmenovitě se jedná o následující:
Senzory LEGO
- ultrazvukový senzor,
- světelný senzor,
- dotykový senzor,
- zvukový senzor.
Senzory Hitechnic
- senzor akcelerace,
- senzor měření úhlu natočení,
- barometrický senzor,
- kompasový senzor,
- barevný senzor,
- EOPD senzor,
- gyroskopický senzor,
- vysílač IR signálů,
- přijímač IR signálů,
- přijímač IR signálů V2,
- senzor pro měření magnetického pole.
PRÁCE S multiplexerem V PROGRAMOVACÍCH PROSTŘEDÍCH
NXT-G
Ovládání multiplexeru
Rozcestník
Připojení multiplexeru a senzorů
Pro každé vstupní zařízení existuje v programovacím prostředí NXT-G speciální programový blok. Bloky pro všechny senzory, které multiplexer podporuje, naleznete ke stažení ZDE. Bloky následně naimportujte do programovacího prostředí. Pokud nevíte jak na to, ZDE naleznete návod.
Programové bloky se od těch klasických, liší jen jedním rozdílem. Obsahují volby portů, ke kterým jsou jednolivá zařízení připojena.
NXT -> MUX
Pokud je u bloku aktivní volba připojení z řídící jednotky NXT do multiplexeru (MUX), tak právě volíme, ke kterému vstupnímu portu řídící jednotky NXT je multiplexer připojen.
MUX -> Sensor
Pokud je u programového bloku aktivní volba propojení z multiplexeru (MUX) do senzoru, nastavujeme právě, ke kterému vstupnímu portu multiplexeru je daný senzor připojen.
Přepínání mezi těmito dvěma volbami je realizováno pomocí tlačítka umístěného v pravé části.
Praktické využití
Na obrázku můžete vidět praktické použití multiplexeru vstupních senzorů. Pro ovládání ultrazvukového a světelného senzoru byly použity speciální bloky, které slouží k připojení k multiplexeru. Můžete vidět, že jediné čím se ve svém vzhledu liší od klasických, je označení v levém horním rohu. Je zde umístěna černá ikona multiplexeru a číslo, které označuje, ke kterému ze čtyř portů multiplexeru je senzor připojen. Číslo v pravém horním rohu označuje, ke kterému vstupnímu portu řídící jednotky je připojen multiplexer (port 1). Oba vstupní senzory snímají hodnoty, které následně vypisují na displej řídící jednotky. Stejným způsobem bychom na vstupní port 1 mohli díky multiplexeru připojit další dva senzory.
RobotC
Příkazy pro ovládání multiplexeru
Rozcestník
Deklarace MULTIPLEXERU
Multiplexer vstupů patří mezi rozšiřující zařízení. Pro jeho využívání tak musíme volat vývojovou knihovnu, která obsahuje příslušné ovladače. Pokud není knihovna obsažena ve vaší instalaci programovacího prostředí RobotC, můžete si jí stáhnout společně s ovladači pro další rozšiřující senzory ZDE. Knihovna multiplexeru se nazývá hitechnic-sensormux.h. Její zavolání v programu provedeme následovně:
#include "hitechnic-sensormux.h"
Dále musíme deklarovat jeho připojení k řídící jednotce NXT. Deklarace se skládá z klíčového slova #pragma a příkazu config(), který obsahuje v závorce čtyři parametry. První označuje, o jaké vstupní zařízení se jedná. Jelikož multiplexer slouží pouze k připojení senzorů, první parametr bude vždy Sensor. Druhý vyjadřuje, ke kterému vstupnímu portu řídící jednotky NXT je připojen (S1-S4). Třetí parametr je volitelný. Uživatel si zde volí název připojeného zařízení, který bude poté používat v programu. Poslední parametr je určení typu zařízení. Rozšiřující moduly spadají do skupiny sensorI2CCustom. Standardně je deklaraci možné provádět automaticky pomocí funkce programovacího prostředí RobotC pro konfiguraci motorů a senzorů. Ve výběru připojitelných zařízení ovšem nenalezneme multiplexer vstupů a tak budete muset deklaraci zapsat ručně.
#pragma config(Sensor, S1, HTSMUX, sensorI2CCustom)
Deklarace senzorů připojených k multiplexeru
Nyní již víme, jak v programu deklarovat mutliplexer vstupních zařízení. Musíme ovšem ještě nadeklarovat senzory, které jsou k němu připojeny. Jelikož každý ze senzorů nebude připojen přímo k řídící jednotce, musíme pro něj zavolat speciální ovladače, na jejichž stažení naleznete odkaz výše. Volání vývojové knihovny poté vypadá naprosto stejně jako v případě multiplexeru. Pro úplnost uvedeme příklad volání knihovny pro použití dotykového senzoru.
#include "lego-touch.h"
Abychom mohli senzor připojený k multiplexeru používat, musíme ještě programově zapsat, ke kterému portu multiplexeru je připojen. To se provádí pomocí deklarované konstanty. Konstanta je typu tMUXSensor, což je skupina senzorů připojitelných k multiplexeru. Následuje volitelný název senzoru (v našem příkladu DOTYK). Konstantě poté přiřazujeme označení portu, které je definované ve vývojové knihovně mutiplexeru. Skládá se z výrazu msensor, následuje podtržítko a označení vstupního portu řídící jednotky, ke které je multiplexer připojen (S1-S4). Za označením portu následuje opět podtržítko a označení portu, ke kterému je na multiplexeru senzor připojen (1-4). U zápisu vycházíme z předdefinované knihovny funkcí.
const tMUXSensor DOTYK = msensor_S1_1;
Praktické využití
Použití multiplexeru si ukážeme na krátkém příkladu. V úvodu vidíte jeho deklaraci, po které následuje volání knihoven. K multiplexeru jsou připojeny dva dotykové senzory. Při stisku prvního z nich, který je připojen k 1. portu multiplexeru se na displeji objeví text "Senzor 1". Při stisku druhého "Senzor 2". Program by bylo možné rozšířit klidně na čtyři dotykové senzory. Výhodou je, že ať již jsou dva nebo čtyři, k řídící jednotce jsou díky multiplexeru připojeny pouze k jednomu vstupnímu portu.
// deklarace multiplexeru #pragma config(Sensor, S1, HTSMUX, sensorI2CCustom) // volani knihoven #include "hitechnic-sensormux.h" #include "lego-touch.h" // deklarace pripojenych senzoru const tMUXSensor DOTYK = msensor_S1_1; const tMUXSensor DOTYK2 = msensor_S1_2; task main() { eraseDisplay(); while (true) { // zjistovani, ktere tlacitko bylo stisknuto if (TSreadState(LEGOTOUCH)) nxtDisplayCenteredBigTextLine(3, "Senzor 1"); if (TSreadState(LEGOTOUCH2)) nxtDisplayCenteredBigTextLine(3, "Senzor 2"); wait1Msec(50); } }