-
Notifications
You must be signed in to change notification settings - Fork 0
Home
je program řídící za pomoci Arduina veškeré akce v aréně. Arénomat je napsán v JavaScriptu a běží na Node.js. Arduino zajištuje komunikaci s reálným světem, na něj jsou připojena vstupní čidla a výstupy typu krmítko, otáčení stolu, …
Podporovaným prohlížečem je aktuálně Chrome.Program je rozdělen na tři záložky:
- Experiment - pro uložení a nahrání experimentu a pro export sezení
- Logic - definice ovládací logiky pomocí vizuálního programování (Blockly od Google)
- Camera - kreslení zón, nastavení kamery Logitech HD Pro Webcam C920
V Arénomatu jsou dvě entity:Experiment - šablona, zadání experimentu a Session - jednotlivá sezení.
Veškeré Sessions se okamžitě automaticky ukládají. Následně je lze z databáze vyexportovat pomocí menu Experiment / Export session.
Ukládání Experimentu a Session se řídí jménem definovaným v bloku Session. Textové pole je k nalezení v menu vlevo (záložka Text) a je to jediný povinný údaj pro start experimentu.
Volba Export session, vyexportuje záznam sezení z databáze do CSV souboru.
Kliknutím na nadpis sekce (Zones, Frames..) se sekce sbalí nebo rozbalí. Může se hodit pro menší monitory.
Brightness - je světlost obrazu (většinou není třeba měnit, ale podle osvětlení se může hodit). Nemá vliv na Treshold, protože se mění světlost všech barev, tedy rozdíl okolních barev je zůstává stejný.
Exposure - jeden z nejdůležitějších parametrů - délka expozice/závěrky, určuje rychlost snímání a světlost/velikost snímaného bodu.
Saturation - barevnost, 0 = černobílé
Sharpness - ostrost obrazu (maximum je dobrou volbou, avšak zvyšuje šum)
Gain - úrovně hodnot, zlepšuje světlost (většinou není třeba)
Contrast - kontrast barev (128 je dobrá volba)
Focus - zaostření (0 je správně)
Threshold - úroveň rozdílu světlosti bodu a jeho okolí, který se již považuje za trackovanou IR diodu
Subject blob area - rozmezí velikosti světelné plochy, které se považuje za IR diodu potkana
Robot blob area - rozmezí velikosti světelné plochy, které se považuje za IR diodu robota
Tento panel zobrazuje parametry, jako uběhnutá trasa, počet šoků, .. a uživatelské proměnné které je možné nadefinovat pomocí bločku Output v sekci Session.
Panel se seznamem jednotlivých zón. Kliknutím na zónu se stane aktivní a lze ji upravovat. Červenou ikonou vpravo je možné zónu vymazat. Tlačítkem Add zone naopak přidat.
Zóny jsou pojaty jako polygony. Jednotlivé vrcholy polygonu se přidávají a posunují levým tlačítkem myši, pravé tlačítko myši body maže. Táhnutím myši a současným stiskem Shift lze posunout zónu jako celek (viz také anglické popisky v programu).
Zde se definuje veškerá logika řídícího automatu. Jednotlivé bločky do sebe zapadají jako puzzle a jsou organizovány v sekcích.
Hlavním blokem je blok Session, který obsahuje informace o sezení, není-li přítomen, program nemá co spustit. Povinný parametr je jméno sezení.
Do bloku Session lze zanořit dva bloky dalšího kódu.
- setup - tato část se spustí jednou, na začátku programu
- loop - bloky v této části se provádí s každým snímkem, neustále až do ukončení programu
V této sekci jsou bloky nastavující hodnotu proměnné a naopak blok, který obsah vrací.
Proměnné obsahují hodnoty tří typů:
- text
- číslo
- boolean - logická hodnota (pravda/nepravda, 0/1, true/false)
Takto lze například zajistit postupné přičítání jedničky k proměnné počítadlo.
Obsahuje bloky pro řízení běhu programu.
Nejpoužívanější konstrukcí je If, případně If - else.
If je podmiňovací blok. Část do se stane, pouze je-li podmínka v if, pravdivá. Do části if jde napojit pouze proměnné, konstanty a výstupy funkcí typu boolean (logická hodnota - true/false).
V tomto příkladu se spustí blok Feeder (krmítko) v pouze v případě, že je proměnná počítalo vyšší než 10.
Blok If-else funguje stejně, jen přidává možnost spustit blok v případě, že podmínka není pravdivá.
Sekce Control obsahuje také bloček Repeat. Ten zajištuje spouštění jeho vnořeného obsahu podle nastavené časové periody.
Takovýto blok vložený do sekce Loop vyhodí jednu granulku z krmítka každý 20 sekund.
Tato sekce obsahuje bloky, které zprostředkovávají komunikaci s reálným světem.
Vyhodí jednu granulku z krmítka
Po zadaný čas rozsvítí světelný stimul.
Udělí šok po zadanou dobu (300ms) s intenzitou danou posuvníkem v horní části obrazovky. Minimální doba mezi začátky šoků je 1s. Tedy 300ms šok, 700ms nic.
Tento blok již obsahuje zabudovaný Repeat, pro ochranu zvířete, vždy je nastavena nějaká "doba hájení", program nedovolí kratší dobu mezi šoky než 500ms.
Roztočí arénu po směru hodinových ručiček, rychlostí jedna otáčka za minutu.
CW - clockwise - po směru hodinových ručičekCCW - counter-clockwise - proti směru hodinových ručiček
Tato sekce obsahuje bloky pro ovládání zvuku.
Přehraje MP3 soubor whitenoise.mp3
Dále tato sekce obsahuje blok pro generování zvuku o zadané délce. Vstupem tohoto bloku může být jakákoli proměnná typu číslo, od -1 … 1
Pro jednoduché užití jsou předpřipravené bloky, které lze rovnou zapojit do Sound generatoru. A to Sine wave - tón o zadané frekvenci a pak White, Pink a Brown noise - generátory šumů.
Přehraje 5 sekund bílého šumu.
Přehraje 20 sec komorního A - 440 Hz.
Za pomoci bloků lze vygenerovat vlastně jakýkoli zvuk, který lze matematicky popsat.
Ve smyčce (loop) je zde vidět nastavení krmítka. Tzn příkaz "opakovaně každých 20 sekund vyhoď granulku"
Každé dvě minuty se definovaná zóna stává jediným bezpečným místem arény a zároveň běží výstražný zvuk. Je-li potkan mimo zónu, dostává každou sekundu šok v trvání 500ms. Další dvě minuty je bezpečná celá aréna a nic se neděje. V průběhu celého pokusu také každých 20 sec dostává granulku.
Tzn. při zapnutí se proměnná změna nastaví na true, avšak ihned je nastavením ve smyčce přeměněna na false. První dvě minuty je tedy celá arénka pro zvíře bezpečná. Pak se změna promění na true a v tuto chvíli zvíře v zóně dostává šoky a zároveň celou dobu běží bílý šum. Toto se neustále po 2 minutách opakuje.
Sekce Setup:
-zde je nastavena pravdivost podmínky s názvem změna- tato akce se provede jen jednou na začátku pokusu
Sekce Loop:
-je zde krmítko (detailněji popsáno v předchozí části)
-dále je tu nastavení změny proměnné změna- z true na false a naopak- to se opakuje každých 120 sec a udává nám pravdivost (a tedy i funkčnost) dalšího nastavení. Také se zde při platnosti (true) proměnné změna spouští na 120 sec bílý šum
-toto nastavení je především závislé na tom, jestli je v danou chvíli označena proměnná změna jako pravdivá (true). Pokud ano, tak platí podmínka, že pokud je potkan v zóně 0, tak dostane šok o délce 500 ms v intervalu 1 sec
Předpokládá se jedna definovaná zóna (např výseč - trojúhelník). Ta se rotací každé dvě minuty překlápí (rotuje o 180 stupňů). Prvních 20sec z každého cyklu je pauza (aby zvíře mohlo přeběhnout), potkan žádné šoky nedostává i když je v zóně. Na začátku pokusu jsou 2 minuty pauzy, než se aktivuje zóna, která se pak bude překlápět, jak je popsáno výše.
Sekce Setup:
-nastaví se zde pro začátek pokusu proměnná čas a čas1 na čas reálný, dále se zde nastaví proměnná start na nulu
Sekce Loop:
-toto nastavení nám udává pauzu 120 sec na začátku- poté co tento čas uběhne (to nám udává rozdíl Time mínus čas1) se proměnná start změní z 0 na 1 a může tedy platit podmínka dále
-jakmile platí podmínka start = 1, začne se každých 140 sec nastavovat proměnná čas na čas reálný (používá se v další části- viz níže), také se nám překlápí zóna a je generovaný zvuk (vždy u překlopení běží 20 sec, kdy je ještě bezpečná zóna- pauza)
-tato část udává šoky- vždy když se proměnná čas vynuluje (viz předchozí bod), běží rozdíl času až do 20 sec (tedy pauza pro potkana mezi přeměnou zón)- jen co tento rozdíl doběhne, tak potkan dostává v zóně 0 šoky o délce 500 ms v intervalu 1 sec
Proměnná tiktak se každých 120 sekund mění z true (=pravda) na false (=nepravda) a zároveň se proměnná cas nastaví na aktuální čas.
Lze si to představit jako přesýpací hodiny, každých 120 sekund se otočí.
Jakoby se vynuluje a znovu běží ten rozdíl {Time - cas), až do dalších 120 sec. Když je rozdíl časů větší jak 20 sekund, tak se teprve něco děje - to je ta pauza.
Pak se porovnává je-li potkan v zóně a zároveň je zóna označená za nebezpečnou (tiktak = true) a potkan v ní je. A nebo naopak zóna je označena za bezpečnou (tiktak = false) a krysa v ní není. V takových případech dostane každých 5 sekund šok.
Rány se případně opakují každých 5 sec.
Jako hlavní se před zapnutím pokusu musí nastavit jméno (name) pokusu- bez toho se experiment nespustí. Také je třeba se ujistit, zda funguje jak kamera, tak zapojení a šoky- zjistí se zeleným rozsvícením daných ikonek na horní liště (nefunkční= ikonky jsou černé).
Image: Vyplnění dalších údajů je již na uživateli a jeho požadavcích. Dále se nastaví (a případně tedy i hned uloží) či nahraje nastavení daného pokusu. Vyplnění různých číselných hodnot je u length (délka pokusu) v minutách, u ostatních údajů v sekundách. Trackování potkana (jeho dráha, odlesky, vstupy, šoky...) se při každém zapnutí vynuluje.
Po spuštění pokusu na horní liště ubíhá čas. Je možné libovolně přepínat mezi kamerou a nastavením pokusu, avšak u nastavení pokusu je možné změnit jen sílu šoku (s okamžitou odezvou) jakákoliv změna jiných hodnot se projeví až u začátku dalšího pokusu.
U kamery se dá nastavení měnit kdykoliv. V sekci Camera se také ukazují aktuální data jako jsou vstupy, šoky, dráha...
Po uběhnutí nastavené doby program uživatele upozorní vyskakovacím oknem, avšak sezení běží dál. Vyskakovací okno se jednoduše zavře kliknutím kamkoliv v programu. Sezení se automaticky ukládá podle předvyplněných údajů, jako je name, subject apod. Údaje jako jsou šoky či dráha zůstávají zobrazené až do začátku dalšího pokusu. V případě, že před začátkem dalšího pokusu uživatel zapomněl změnit údaje a ponechal je stejné jako u předchozího, sezení se uloží znovu pod stejnými údaji, avšak s jiným časem (tedy nepřepíše se).