Experiment
Experiment 1 - Monitor kvality vnitřního klimatu
Časová dotace: 15 min.
Popis experimentu
Ze stavebnice HARDWARIO TOWER si postavíme monitor kvality vnitřního klimatu. Bude měřit koncentraci oxidu uhličitého (CO2) a těkavých organických látek (VOC), teplotu a relativní vlhkost. S počítačem bude komunikovat bezdrátově přes Radio Dongle zasunutý do USB portu. Naměřená data zobrazíme v aplikaci HARDWARIO Playground, přesněji na dashboardu prostředí Node-RED, které je v ní vestavěné.
V rámci experimentu pochopíme:
- že teplý vzduch stoupá a proč
- co je relativní vlhkost, rosný bod a TH index
- že běžná koncentrace CO2 venku je 400 ppm, tedy 0,04 %, že v nevětrané místnosti stoupá a že vyšší koncentrace snižuje naši výkonnost
- že CO2 je těžší než vzduch
- že VOC jsou těkavé organické látky, jejich koncentrace se měří v ppb a přijatelná koncentrace TVOC (celkových VOC) je 500 ppb (0,00005 %)
Kroky experimentu
- Postavení monitorovací jednotky
- Instalace aplikace Playground
- Připojení jednotky k Playgroundu
- Nastavení funkcí monitoringu a zobrazení dat
- Měření teploty, vlhkosti, CO2 a VOC
Postavení monitorovací jednotky

Moduly v sestavě:
- Core Module
- Battery Module
- CO2 Module
- LCD Module
- Barometer Tag
- Humidity Tag
- VOC-LP Tag
Postavte si jednotku podle videonávodu
Instalace aplikace Playground
Stáhněte si aplikaci HARDWARIO Playground a nainstalujte ji do počítače.
Připojení jednotky do Playgroundu
- Na záložce Firmware nahrajte do modulu Core Module firmware
twr-radio-air-quality-monitor(návod) - Zasuňte Radio Dongle do USB portu počítače
- Otevřete aplikaci Playground a přejděte na záložku Devices
- Vyberte svůj Radio Dongle v nabídce USB zařízení a klikněte na Connect
- Klikněte na Start pairing
- Vložte do jednotky baterie. Po spárování se jednotka zobrazí jako
air-quality-monitor:0.
Nastavení funkcí monitoringu a zobrazení dat
- Přepněte se na záložku Functions
- Importujte tento flow:
[{"id":"2c41a2bd.aa36ae","type":"tab","label":"IAQ Monitor","disabled":false,"info":""},{"id":"8203aaee.220c58","type":"mqtt in","z":"2c41a2bd.aa36ae","name":"","topic":"node/air-quality-monitor:0/battery/-/voltage","qos":"2","datatype":"auto","broker":"67fc6ccd.e460d4","nl":false,"rap":false,"inputs":0,"x":330,"y":80,"wires":[["c2882634.6eba68"]]},{"id":"302aef24.2e89a","type":"mqtt in","z":"2c41a2bd.aa36ae","name":"","topic":"node/air-quality-monitor:0/co2-meter/-/concentration","qos":"2","datatype":"auto","broker":"67fc6ccd.e460d4","nl":false,"rap":false,"inputs":0,"x":390,"y":180,"wires":[["4d2b292b.1832b8"]]},{"id":"c20126e0.8e7338","type":"mqtt in","z":"2c41a2bd.aa36ae","name":"","topic":"node/air-quality-monitor:0/thermometer/0:1/temperature","qos":"2","datatype":"auto","broker":"67fc6ccd.e460d4","nl":false,"rap":false,"inputs":0,"x":410,"y":280,"wires":[["38569570.b364ca"]]},{"id":"1a91cdd2.5a6892","type":"mqtt in","z":"2c41a2bd.aa36ae","name":"","topic":"node/air-quality-monitor:0/hygrometer/0:4/relative-humidity","qos":"2","datatype":"auto","broker":"67fc6ccd.e460d4","nl":false,"rap":false,"inputs":0,"x":320,"y":360,"wires":[["52201a4f.691954"]]},{"id":"c2882634.6eba68","type":"ui_gauge","z":"2c41a2bd.aa36ae","name":"","group":"57ff470b.93fdf8","order":6,"width":"3","height":"3","gtype":"gage","title":"Voltage","label":"V","format":"{{value}}","min":0,"max":10,"colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":710,"y":80,"wires":[]},{"id":"4d2b292b.1832b8","type":"ui_gauge","z":"2c41a2bd.aa36ae","name":"","group":"57ff470b.93fdf8","order":1,"width":"3","height":"3","gtype":"gage","title":"CO2 concentration","label":"ppm","format":"{{value}}","min":0,"max":"3000","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":710,"y":180,"wires":[]},{"id":"38569570.b364ca","type":"ui_gauge","z":"2c41a2bd.aa36ae","name":"","group":"57ff470b.93fdf8","order":2,"width":"3","height":"3","gtype":"gage","title":"Temperature","label":"°C","format":"{{value}}","min":0,"max":"40","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":710,"y":280,"wires":[]},{"id":"52201a4f.691954","type":"ui_gauge","z":"2c41a2bd.aa36ae","name":"","group":"57ff470b.93fdf8","order":3,"width":"3","height":"3","gtype":"gage","title":"Humidity","label":"%","format":"{{value}}","min":0,"max":"100","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":720,"y":360,"wires":[]},{"id":"9d36bbee.e2cd08","type":"mqtt in","z":"2c41a2bd.aa36ae","name":"","topic":"node/air-quality-monitor:0/voc-lp-sensor/0:0/tvoc","qos":"2","datatype":"auto","broker":"46ddad92.b27704","nl":false,"rap":false,"inputs":0,"x":360,"y":480,"wires":[["58b50f2f.eedd3"]]},{"id":"58b50f2f.eedd3","type":"ui_gauge","z":"2c41a2bd.aa36ae","name":"","group":"57ff470b.93fdf8","order":0,"width":0,"height":0,"gtype":"gage","title":"TVOC","label":"units","format":"{{value}} ppb","min":0,"max":"200","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":710,"y":480,"wires":[]},{"id":"67fc6ccd.e460d4","type":"mqtt-broker","broker":"127.0.0.1","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"57ff470b.93fdf8","type":"ui_group","name":"Default","tab":"11207769.c31889","order":1,"disp":true,"width":"6","collapse":false},{"id":"46ddad92.b27704","type":"mqtt-broker","name":"","broker":"127.0.0.1","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"11207769.c31889","type":"ui_tab","name":"Home","icon":"dashboard"}]
- Změny potvrďte tlačítkem Deploy
- Přepněte se na záložku Messages. Pokud vše proběhlo správně, uvidíte příchozí zprávy z jednotky.
- Přepněte se na záložku Dashboard. Pokud vše proběhlo správně, uvidíte budíky s aktuálně naměřenou teplotou, vlhkostí, CO2 a VOC.
Pozn.:
- Chcete-li odeslání dat urychlit, dýchněte na jednotku.
- Jednotka měří teplotu a vlhkost každé 2 sekundy, VOC každých 5 sekund a CO2 každou minutu.
- Jednotka odesílá data každých 15 minut.
- Pokud se od posledního odeslání změní teplota alespoň o 0,2 °C, relativní vlhkost alespoň o 5 %, CO2 alespoň o 50 ppm nebo TVOC alespoň o 5 ppb, jednotka odešle data ihned.
Měření teploty, vlhkosti, CO2 a VOC
-
Zasoutěžte si v týmech, kdo dechem vyhřeje senzor na nejvyšší teplotu
Otázka pro tým s nejnižší teplotou
Proč teplý vzduch stoupá? -
Porovnejte mezi týmy naměřenou vlhkost
Otázka pro všechny týmy
Naměřená vlhkost je relativní. Vysvětlete pojmy relativní vlhkost a rosný bod. -
Porovnejte mezi týmy naměřené koncentrace CO2 a VOC
Otázka pro všechny týmy
Čím vysvětlíte rozdíly v naměřených hodnotách?
Experiment 2 - Integrace monitoru kvality ovzduší s Tabulkami Google
Časová dotace: 15 min.
Popis experimentu
Na experiment 1 může navázat propojení s Tabulkami Google. Naměřená data z monitoru kvality vnitřního ovzduší se budou ukládat do tabulky, ze které pak vytvoříme přehledné grafy.
V rámci experimentu pochopíme:
- jak propojit Tabulky Google s aplikací Playground
- jak vytvořit přehledné grafy zobrazující závislost naměřených hodnot na rozvrhu hodin a počtu žáků ve třídě
Kroky experimentu
- Založte si účet Google
- Vytvořte novou tabulku Google, např. přes sheets.new
- Přejmenujte aktuální list z List1 na Data: na tento název budeme v kódu odkazovat
- Do prvního řádku můžete také napsat názvy sloupců. Data budou přicházet v tomto pořadí: CO₂, Teplota, Vlhkost, TVOC
- V nabídce Rozšíření vyberte Apps Script
- Vložte tento skript a uložte ho klávesami Ctrl + S
function doPost(e) {
var sheet;
var rawData = e.parameter.val; // Data arrives in format "CO2;temp;hum;TVOC"
sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data");
var cuttedData = rawData.split(";"); //This cuts arrived data into separated values
sheet.appendRow([cuttedData[0], cuttedData[1], cuttedData[2], cuttedData[3], new Date()]); //Data arrives in this order: "CO2, Temperature, Humidity, TVOC"
}
- Pojmenujte projekt podle svého týmu
- Vpravo nahoře klikněte na tlačítko pro nasazení a vytvořte nové nasazení. Jako typ nasazení zvolte webovou aplikaci.
- Aplikaci nechte spouštět pod svým účtem a přístup k ní povolte komukoli, i bez přihlášení. Pak nasazení potvrďte.
- Udělte projektu přístup ke svému účtu Google. Pokud se zobrazí upozornění, že aplikace není ověřená, otevřete rozšířené možnosti, pokračujte na svůj projekt (označený jako nebezpečný) a přístup povolte.
- Zkopírujte si zobrazenou URL adresu webové aplikace (Ctrl + C), budete ji ještě potřebovat. Pak dialog zavřete.
- V aplikaci Playground přejděte na záložku Functions a importujte tento flow.
[{"id":"1fa190de.6bf34f","type":"mqtt in","z":"2c41a2bd.aa36ae","name":"","topic":"node/air-quality-monitor:0/co2-meter/-/concentration","qos":"2","datatype":"auto","broker":"d0869e74.d39d3","x":230,"y":380,"wires":[["1058eb8d.695774"]]},{"id":"fdb48a87.f1bde8","type":"mqtt in","z":"2c41a2bd.aa36ae","name":"","topic":"node/air-quality-monitor:0/thermometer/0:1/temperature","qos":"2","datatype":"auto","broker":"d0869e74.d39d3","x":240,"y":420,"wires":[["d2a76868.4a1a88"]]},{"id":"ad8c529f.84e79","type":"mqtt in","z":"2c41a2bd.aa36ae","name":"","topic":"node/air-quality-monitor:0/hygrometer/0:4/relative-humidity","qos":"2","broker":"d0869e74.d39d3","x":250,"y":460,"wires":[["92c2dca0.e7b93"]]},{"id":"f011b140.62712","type":"mqtt in","z":"2c41a2bd.aa36ae","name":"","topic":"node/air-quality-monitor:0/voc-lp-sensor/0:0/tvoc","qos":"2","datatype":"auto","broker":"a1e2fc41.c77ce","x":210,"y":500,"wires":[["5d4d663a.f49858"]]},{"id":"f6f1904c.f411e","type":"function","z":"2c41a2bd.aa36ae","name":"Data Parser","func":"msg.payload = flow.get(\"co2\") + \";\" + flow.get(\"temp\") + \";\" +\n flow.get(\"humidity\") + \";\" + flow.get(\"tvoc\");\nmsg.payload = { val: msg.payload,\n type: 'rawData'};\n msg.headers = {'content-type':'application/x-www-form-urlencoded'};\nreturn msg;","outputs":1,"noerr":0,"x":790,"y":440,"wires":[["992d7e0f.3141e"]]},{"id":"1058eb8d.695774","type":"change","z":"2c41a2bd.aa36ae","name":"","rules":[{"t":"set","p":"co2","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":530,"y":380,"wires":[["f6f1904c.f411e"]]},{"id":"d2a76868.4a1a88","type":"change","z":"2c41a2bd.aa36ae","name":"","rules":[{"t":"set","p":"temp","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":530,"y":420,"wires":[["f6f1904c.f411e"]]},{"id":"92c2dca0.e7b93","type":"change","z":"2c41a2bd.aa36ae","name":"","rules":[{"t":"set","p":"humidity","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":540,"y":460,"wires":[["f6f1904c.f411e"]]},{"id":"5d4d663a.f49858","type":"change","z":"2c41a2bd.aa36ae","name":"","rules":[{"t":"set","p":"tvoc","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":530,"y":500,"wires":[["f6f1904c.f411e"]]},{"id":"2e286fc4.213ca","type":"inject","z":"2c41a2bd.aa36ae","name":"","topic":"","payload":"-1","payloadType":"num","repeat":"","crontab":"","once":true,"onceDelay":0.1,"x":130,"y":300,"wires":[["980aadd7.47307","2e69ab31.67fa74","a6a27021.dbb98","7dd059ea.b9bd08"]]},{"id":"980aadd7.47307","type":"change","z":"2c41a2bd.aa36ae","name":"","rules":[{"t":"set","p":"co2","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":390,"y":200,"wires":[[]]},{"id":"2e69ab31.67fa74","type":"change","z":"2c41a2bd.aa36ae","name":"","rules":[{"t":"set","p":"temp","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":390,"y":240,"wires":[[]]},{"id":"a6a27021.dbb98","type":"change","z":"2c41a2bd.aa36ae","name":"","rules":[{"t":"set","p":"humidity","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":400,"y":280,"wires":[[]]},{"id":"7dd059ea.b9bd08","type":"change","z":"2c41a2bd.aa36ae","name":"","rules":[{"t":"set","p":"tvoc","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":390,"y":320,"wires":[[]]},{"id":"992d7e0f.3141e","type":"http request","z":"2c41a2bd.aa36ae","name":"","method":"POST","ret":"txt","paytoqs":false,"url":"","tls":"","persist":false,"proxy":"","authType":"","x":910,"y":280,"wires":[[]]},{"id":"d0869e74.d39d3","type":"mqtt-broker","z":"","broker":"127.0.0.1","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"a1e2fc41.c77ce","type":"mqtt-broker","z":"","name":"","broker":"127.0.0.1","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]
- Ve flow dvakrát klikněte na uzel http request, do pole URL vložte adresu svého projektu, připojte k ní následující úryvek kódu a klikněte na Done
- Horní část flow s uzlem -1 jen nastavuje výchozí hodnoty pro případ, že některé senzory ještě neposlaly žádná data.
?val={{{payload}}}
- Změny potvrďte tlačítkem Deploy
- Otevřete svou tabulku Google: do jednotlivých sloupců by se měly zapisovat naměřené hodnoty.
- Pokud v některém sloupci vidíte hodnotu -1, znamená to, že daný senzor ještě neodeslal žádná data.
- Na konci měření doplňte do tabulky rozvrh hodin a počet žáků a výsledky pak představte ostatním.