Uživatelské nástroje

Nástroje pro tento web


start

Vřes

je platformou pro nelineární interaktivní příběhy v lese a nejen v něm. Umožňuje vytvářet hry pro děti ve volné přírodě a motivovat je k aktivitám i mimo virtuální svět počítačových her.

Každá hra je souborem stanovišť mezi kterými se hráč pohybuje. Počítá se s tím, že jednotlivá stanoviště jsou fyzicky vzdálená tak, že neexistuje přímá nepřetržitá komunikace mezi nimi. Přesto je možná výměna informací mezi stanovišti např. prostřednictvím mobilního telefonu hráče, v němž je uložen stav hry z předchozích stanovišť, které navštívil.

Pořadí návštěv jednotlivých stanovišť může být zavislé na rozhodování hráče a hra je tedy obecně nelineární a pro různé hráče může být jiná. A to např. i v závislosti na vybrané obtížnosti, věku apod.

Role a postavy

  • Tvůrce hry - kdokoliv může vymyslet příběh a instalovat svoji hru na nějaké vhodné trase. Zařízení pro instalaci si buď vyrobí sám podle návodů na těchto stránkách nebo si je objedná od někoho jiného už připravené.
  • Hráč, resp. skupina - kdokoliv, kdo se zaregistruje v mobilní aplikaci k vybrané hře v daném termínu

Nápady na úkoly / stanoviště

Ukázková hra

Implementace hry

Každé stanoviště hry sestává z několika druhů fyzicky nepropojených zařízení, provozovaných na baterie, které mezi sebou komunikují bezdrátově:

  • Čidlo (senzor) - neobsahuje žádnou řídicí logiku stanoviště, pouze bezdrátově odesílá informaci o lokální změně stavu, např. PIR čidlo, spojení/rozpojení kontaktu (tlačítko, jazýčkový kontakt), intenzita světla, teplotní/vlhkostní čidlo. Zprávy z čidla jsou obvykle odesílány bez potvrzování jejich přijetí, ale počítá se i s možnou implementací potvrzovaných událostí
  • Akční člen (aktuátor) - fyzicky reaguje na aktuální stav hry. Je ovládán vnitřní logikou, která může být přímo ovlivněna příchozími zprávami ze senzorů nebo z centrály. Obvyklejší je ale implementace, která počítá s reakcí na příkazy centrály. Dokáže i poslat zprávu centrále, např. potvrzení provedení příkazu, zprávu o svém stavu apod. Příklady aktuátorů: led pásek, větráček, rotační papírový displej, pípák, mlýnek
  • Centrální řídící jednotka - obsahuje řídící logiku hry na stanovišti, ale umožňuje i reagovat na dosavadní průběh hry z jiných stanovišť
  • Mobilní telefon hráče - je spolu s nainstalovanou aplikací přenášen mezi jednotlivými stanovišti a může umožnit připojení k Internetu (volitelně) a také přenášet data o průběhu hry do řídících jednotek jednotlivých stanovišť. Současně může být použit jako senzor hry (GPS, náklon, kamera) i aktuátor (zobrazení obrázku, přehrání zprávy, spuštění interaktivní aplikace např. s nějakou úlohou na kterou stanoviště reaguje. Mobilní telefon komunikuje výhradně s centrálou přes WIFI nebo prostřednictvím MQTT brokeru na serveru.

Komunikace prvků hry

Počítá se s implementací dvou komunikačních vrstev. V pásmu na RF 433 MHz a v pásmu 2,4 GHz (ESPNow, WIFI). Komunikace na RF 433 MHz je velmi jednoduchá, nenáročná na energii, ale nespolehlivá. Je vhodná pro zařízení napájená bateriemi, ale vyžaduje zajištění spolehlivosti přenosu dat.

Komunikační vrstva v pásmu 2,4 GHz je spolehlivá, ale energeticky náročná. Počítá se s implementací protokolů ESPNow od firmy Espressif a WIFI.

Komunikační protokol ESPNow se používá pro potvrzování řídících zpráv směrem od aktuátorů do centrály, k přeposílání zpráv ze senzorů do centrály (gateway z 433 MHz), případně na přímé posílání zpráv od senzorů, pokud implementují ESPNow. Výhodou tohoto protokolu je nižší spotřeba energie oproti WIFI. Na sestavení komunikace stačí cca 200 ms a tedy vysílač (ESP-01) není potřeba mít aktivní dlouho.

WIFI komunikace je rezervována pouze pro centrálu, případně ve fázi vývoje hry i u jednotlivých aktuátorů.

čidlo - ATTINY + vysilac 433 MHz + alkalicka baterka - neni OTA, neni potvrzovani prijeti zpravy. Alternativne misto vysilace 433 MHz lze osadit ESP-01 a zpravu posilat do centraly pres ESPNow.

Akční člen (aktuator) / 433 MHz gateway - ATTINY + prijimac 433 MHz + alkalicka baterka (burty) + ESP-01. Program v ATTINY obsahuje lokalni ridici logiku, ktera reaguje na prichozi komunikaci po 433 MHz nebo ESP-01. Pokud neni aktivni hra, prijimac je odpojen a ESP-01 spi a probouzi se v pravidelnych intervalech (cca jednou za 10 minut), aby zjistil, jestli v okoli neni definovana WIFI sit (specifickeho jmena) nebo neni aktivni centrala. V prubehu hry je ATTINY stale na prijmu na 433 MHz a ESP-01 vetsinou spi. Pokud prijme zpravu na 433 MHz, ktera je od jednoho z cidel, probudi si ESP-01 (pokud zprava neni kriticka, muze vyckat par sekund, jestli zprav neprijde vice) a po ESPNow tuto zpravu preposle ridici jednotce, pripadne synchronizuje stav, je-li to potreba a ESP-01 se zase uspi.

Pokud prijme zpravu na 433 MHz od centraly, ktera je urcena tomuto ridicimu prvku, potom probouzi ESP-01 a take volitelne potvrzuje prijeti zpravy na ESPNow. Cizi zpravy na 433 MHz od ridici jednotky jsou ignorovany a ESP-01 se neprobouzi.

Pozn. POZOR NA komunikacnim pinu mezi ESP-01 a ATTINY musi byt pullup na 3.,3 V, jinak deep sleep zasekne na komunikaci poke ATTINY

Poznamky k ESPNow

ESP32 ma dve rozhrani AP a STA s ruznymi mac adresami. Pro prijem zprav na ESP32 je potreba pouzit Mac adresu rozhrani AP - WiFi.softAPmacAddress() - posledni byte MAC adresy byva lichy.

Vse musi komunikovat na kanalu 1 (kvuli ESP8266, ktery ma kanal 1 pro ESPNow).

Inicializace na ESP8266:

  WiFi.mode(WIFI_AP_STA);
  WiFi.begin(STASSID, STAPSK, 1);
  while (WiFi.waitForConnectResult() != WL_CONNECTED)
  {
    delay(5000);
    ESP.restart();
  }
  esp_now_init();
  esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER);
  esp_now_register_send_cb(OnDataSent);

Inicializace na ESP32:

    void ICACHE_FLASH_ATTR handle_esp_message(const uint8_t *mac, const uint8_t *buf, int count) {}
    
    esp_now_init();
    esp_now_register_recv_cb(handle_esp_message);

Varianty

  • Senzor ATTINY, vysilac RF 433 - pouze vysilac. Pouziti pro jednoduche senzory, napr. PIR s ATTINY13.
  • Senzor ATTINY, vysilac RF 433 + ESP01 - OTA, potvrzeni prijeti zpravy odeslane po 433
  • Reakcni prvek ATTINY + prijimac RF433 + ESP01 - OTA (obsahuje ridici logiku), potvrzuje prijeti zpravy, napajeni - alkalicke burty - vyzaduje vice energie (motor, ledky, …). ESP-01 je vetsinu doby v deepsleepu. Budi se jen pri vyvoji (prichozi RF433 zpravou) nebo pri potvrzeni (via ESPNow) prijeti kriticke 433 zpravy.
  • Centrala / Gateway - ESP32 + vysilac RF 433 + prijimac RF433, napajeni powerbankou - aktivni po celou dobu hry na prijmu RF433. Muze obsahovat synchronizacni cast ridici logiky hry v SQLite DB. Logovani prichozich zprav. Odesilani ridicich zprav na RF433. Zapinani WIFI pri komunikaci s mobilnim telefonem anebo pri vyvoji.

TODO:

  • Powerbanka - vypina se pri malem odberu, zkusit ji ruzne potahat za komunikacni kabliky v USB
  • Pridat CRC pro 433 komunikaci
  • Pravidelne probouzet WIFI a zjistovat seznam dostupnych siti - detekce zacatku hry - kolik energie to stoji?
  • Čidly a reakčními prvky, které budou umístěny na jednotlivých stanovištích hry
  • Gateway, která obsahuje řízení logiky hry na stanovišti, ale umožňuje i reagovat na dosavadní průběh hry z jiných stanovišť
  • Mobilní telefon hráče, který je spolu s nainstalovanou aplikací přenašen mezi jednotlivými stanovišti a může umožnit připojení k Internetu (volitelně nikoliv povinně) a také přenáší data o průběhu hry do řídících jednotek jednotlivých stanovišť

Senzory

Reakční prvky

Mobilní telefon hráče

Každý účastník hry se musí registrovat v mobilní aplikaci, ideálně si i rezervovat termín, aby nebyl rušen jiným týmem. Mobilní telefon se potom stane dalším senzorem a reakčním prvkem hry.

Funkce mobilního telefonu hráče:

  • Registrace a aktivace stanoviště přípojením k centrální řídicí jednotce
  • Oznámení dosavadního průběhu hry na předhcozích stanovištích (může mít vliv na řízení)
  • Senzory mobilního telefonu - vibrace, poloha, otáčení, kamera, apod.
  • Přehrání zvuku nebo videa
  • Offline AI, např. OCR, QR kód, detekce objektů v obrazu, detekce polohy těla
  • Spuštění přidružené aplikace - hádanka, nápověda apod.
  • Přípojení stanoviště k internetu, je-li to potřeba a hráč k tomu dá souhlas
  • Administrace hry - aktualizace firmware v zařízeních, stav prvků hry (baterie, apod.)

Jak si postavit vlastní stanoviště

Minimalistický návod, jak si vše postavit sám jen ze základních komponent. Budeme potřebovat:

  • ATTINY84A (cca 30 Kč) - jeden pro každé čidlo nebo reakční prvek
  • ESP-01 (pozor ne verzi ESP-01S) (cca 30 Kč) - jeden pro každé čidlo nebo reakční prvek
  • Převodník USB na UART na 3.3 V pro první aprogramování ESP-01 (cca 30 Kč) - potřebujeme jen jeden na všechny čidla.
  • Kondenzátor alespoň 3300 uF (cca 4 Kč) - jeden pro každé čidlo nebo reakční prvek
  • Lineární regulátor HT7333 (cca 2 Kč) a baterii nebo jakýkoliv jiný zdroj 3.3 V - jeden pro každé čidlo nebo reakční prvek
  • Breadboard, drátky

Bez baterie, krabičky a nákladů na zapojení přijde tedy základ čidla nebo reakčního prvku stanoviště na cca 66 Kč.

S výše uvedeným můžeme postavit základ univerzálního čidla, jehož řídící logika poběží na mikrokontroleru ATTINY a příležitostně si bude probouzet ESP-01 pro komunikaci s řídicí jednotkou stanoviště.

Postup naprogramování:

  • Nejprve nahrajeme jednorázově program do ESP-01 pomocí napájení 3.3 V a převodníku USB na UART. Tento krok je také jediný, kdy bude nějaké zařízení přímo připojeno k Vašemu PC
  • Dále nahrajeme již vzdáleně pomocí programu v ESP-01 bootloader OWL do mikrokontroleru ATTINY. Toto zapojení budeme potřebovat pouze jednou, resp. pro každý nově zakoupený mikrokontrolér
  • Vytvoříme už finální zapojení ESP-01 a mikrokontroleru ATTINY. Ke komunikaci a programování již stačí jediný pin.

Nyní máme hotový základ čidla, kde jak ESP-01, tak i mikrokontrolér můžeme už bez dalšího přepojování pohodlně programovat vzdáleně.

Realizace

Použitý hardware

Software

Zdrojové kódy: https://bitbucket.org/goedelsro/site

  • tiny84 - testovaci aktuator - jen led blikatko
  • tinylib - knihovna pro aktuator - komunikace s centralou (1wire), prijem a odesilani sifrovanych zprav na 433 MHz
  • tiny13 - senzor v ASM - odesila zmenu na definovanych GPIO v pasmu 433 MHz jako sifrovanou zpravu
  • esp32python - centrala implementovana v pythonu, navrh ridici logiky nad knihovnou asyncio, firmware server pro aktualizaci rizeni pri restartu

Vyroba DPS

Zdroje a literatura

Kontakt

Martin.Halama [zavinac] goedel.cz

start.txt · Poslední úprava: autor: martin

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki