Arduino Gamepad Shield je přídavný modul, s kterým můžeme proměnit Arduino v herní ovladač. Tento shield obsahuje velké množství vstupních prvků, mezi které patří tlačítka, analogový joystick a několik konektorů pro další zařízení. Co se týká zmíněných tlačítek, tak se na shieldu nachází čtyři větší tlačítka s barevnými hmatníky, dvě menší tlačítka a speciální tlačítko, které je aktivované stiskem kloboučku analogového joysticku. Analogový joystick pak funguje na principu změny odporu v osách X a Y. A jak bylo zmíněno, na Gamepad Shieldu se nachází taktéž konektor pro připojení displeje Nokia 5110, komunikačního modulu nRF24LN01 a Bluetooth modulu společně s propojovacími piny. Na modrých propojovacích pinech tak máme přístup ke sběrnici I2C a na žlutých pinech máme vyvedena všechna tlačítka a joystick. Posledním prvkem na modulu je přepínač použitého napětí, kdy můžeme volit mezi 5 a 3,3 V. Toto je důležité v závislosti na použité desce, kdy já pro Arduino UNO používám napětí 5V, ale například pro desku Wemos D1 bychom přepnuli na napětí 3,3 V.
Pro úspěšné propojení Gamepad Shieldu s Arduinem stačí tento shield zapojit do Arduino desky a zvolit správné napájecí napětí podle použité desky.
Ukázkový kód obsahuje ukázku využití všech dostupných tlačítek a joysticku. Na jeho začátku se nachází nastavení čísel všech propojovacích pinů pro tlačítka a osy joysticku. V podprogramu setup nejprve nastavíme rychlost komunikace po sériové lince a následně nastavíme všechny vstupy. V nekonečné smyčce loop si vždy na začátku vytvoříme proměnnou, podle které se bude řídit délka pauzy po každém běhu. Následně provedeme kontrolu stavu digitálního vstupu pro každé tlačítko. V případě detekce stisku jakéhokoliv z tlačítek pak vypíšeme příslušnou zprávu a zároveň nastavíme proměnnou pro změnu délky pauzy. Po kontrole všech tlačítek načteme stav analogových vstupů do příslušných proměnných a poté provedeme jejich přemapování na jiný rozsah. Pro dosažení středu na souřadnicích [0, 0] byl zvolen takový postup, že celý rozsah analogového vstupu nejprve zmenšíme na rozsah 0 až 51 a poté odečteme polovinu. Tím získáme střed v nule a maxima -25 a +25. Po přepočtení souřadnic tyto informace vypíšeme na sériovou linku a na konci programu zkontrolujeme délku pauzy před novým během smyčky. Pokud bylo stisknuto alespoň jedno tlačítko, zahájíme pauzu o délce 200 milisekund pro eliminaci zákmitů tlačítek, v opačném případě pak pauza trvá pouze 100 milisekund.
// Gamepad Shield
// nastavení čísel propojovacích pinů
#define tlacitkoA 2
#define tlacitkoB 3
#define tlacitkoC 4
#define tlacitkoD 5
#define tlacitkoE 6
#define tlacitkoF 7
#define tlacitkoK 8
#define joystickX A0
#define joystickY A1
void setup() {
// komunikace po sériové lince rychlostí 9600 baud
Serial.begin(9600);
// inicializace všech vstupů
pinMode(tlacitkoA, INPUT);
pinMode(tlacitkoB, INPUT);
pinMode(tlacitkoC, INPUT);
pinMode(tlacitkoD, INPUT);
pinMode(tlacitkoE, INPUT);
pinMode(tlacitkoF, INPUT);
pinMode(tlacitkoK, INPUT);
pinMode(joystickX, INPUT);
pinMode(joystickY, INPUT);
}
void loop() {
// proměnná, podle které se řídí délka pauzy
int stiskPauza = 0;
// kontrola pro každé tlačítko, kdy při
// jeho stisknutí vypíšeme hlášku
// a nastavíme pauzu
if (!digitalRead(tlacitkoA)) {
Serial.println("Stisknuto tlacitko A.");
stiskPauza = 1;
}
if (!digitalRead(tlacitkoB)) {
Serial.println("Stisknuto tlacitko B.");
stiskPauza = 1;
}
if (!digitalRead(tlacitkoC)) {
Serial.println("Stisknuto tlacitko C.");
stiskPauza = 1;
}
if (!digitalRead(tlacitkoD)) {
Serial.println("Stisknuto tlacitko D.");
stiskPauza = 1;
}
if (!digitalRead(tlacitkoE)) {
Serial.println("Stisknuto tlacitko E.");
stiskPauza = 1;
}
if (!digitalRead(tlacitkoF)) {
Serial.println("Stisknuto tlacitko F.");
stiskPauza = 1;
}
if (!digitalRead(tlacitkoK)) {
Serial.println("Stisknuto tlacitko K.");
stiskPauza = 1;
}
// načtení stavu analogových pinů do proměnných
int osaX = analogRead(joystickX);
int osaY = analogRead(joystickY);
// přepočet z celého rozsahu na rozsah -25 až 25,
// pro větší rozsah nulové pozice je zvolen
// přepočet na lichý počet čísel a odečtení poloviny
int souradniceX = map(osaX, 0, 1024, 0, 51) - 25;
int souradniceY = map(osaY, 0, 1024, 0, 51) - 25;
// vytištění informací o přepočtené souřadnici joysticku
Serial.print("X: ");
Serial.print(souradniceX);
Serial.print(" | Y: ");
Serial.print(souradniceY);
Serial.println();
// pokud bylo stisknuto alespoň jedno tlačítko,
// nastav delší pauzu, v opačném případě jen 100 ms
if (stiskPauza) {
delay(200);
} else {
delay(100);
}
}
Po nahrání programu do Arduino desky s připojeným Gamepad Shieldem dostaneme například tento výsledek:
X: 0 | Y: 0
X: 0 | Y: 0
Stisknuto tlacitko B.
X: 0 | Y: 0
Stisknuto tlacitko B.
Stisknuto tlacitko C.
X: -12 | Y: 25
Stisknuto tlacitko A.
Stisknuto tlacitko D.
X: 21 | Y: 25
Stisknuto tlacitko A.
Stisknuto tlacitko D.
X: 25 | Y: -3
Arduino Gamepad Shield je pěkný vstupní modul, který nám umožňuje vytvořit z Arduino desky ovladač pro různé aplikace. Například můžeme vytvořit bezdrátový herní ovladač s využitím konektoru na modul nRF24L01 nebo si připojit displej Nokia 5110 a nahrát přímo do Arduina nějakou hru. Ale samozřejmě můžeme využít všechny prvky na shieldu nejen na hry, ale také třeba jako ovladač v menu zařízení či kontrolér pro robota. Velkou výhodou je pak také přítomný přepínač mezi napětími 3,3 a 5 Voltů, díky čemuž můžeme Gamepad Shield připojit na velké množství Arduino desek.
Motorizovaný kulový ventil. Má široké uplatnění v různých průmyslových a obytných instalacích. Může být integrován do automatických systémů řízení, kde je možné ovládat průtok dálkově nebo automatizovaně podle předem nastavených podmínek.
Motorizované kulové vently s obvodem CR01, CR02, CR03 nebo CR04 je poměrně jednoduché po elektrické stránce správně zapojit. U ventilu s obvodem CR05 je tomu ale trochu jinak - ventil si sám nehlídá krajní polohy otevření, nebo zavření. Z toho důvodu vznikl tento článek, ukazující některé výhody, použití a především správné zapojení ventilu s obvodem CR05.