Archív

Příspěvek oštítkován ‘DS18B20’

Zprovoznění měření teploty

Další z možností, jak využít router s OS Linux je například ke sledování teploty. Výborně použitelná jsou digitálních čidla DS18B20 připojená přes rozhraní RS232 a pomocí redukce USB/RS232 připojená k routeru. Čidla DS18B20 jsou jednoznačně adresovatelná a lze jich tak použít velké množství.

K sestavení měřícího řetězce budete potřebovat:

  • redukce USB/RS232 (vzhledem k tomu, že na routeru běží jádro / kernel 2.4.20 je důležité dát pozor při výběru této redukce, obecně jsou doporučovány redukce s čipem Prolific PL2303)
  • čidla DS18B20 (digitální teploměr Dallas 9-12bit +/-0,5°C -55/+125°C TO92 (rozlišení 0,5; 0,25; 0,125; 0,0625°C)) – lze použít i identické DS1820/DS18S20/DS1920
  • 2x zenerova dioda 5V1 (BZX83V005.1 – DO35 0.5W ZPD 5.1V)
  • 2x schottky BAT46 (schottky dioda 100V/150mA/6pF DO-35)
  • 1x odpor 1k5 (Rezistor s kovovou vrstvou 0,6W 1% 50ppm, velikost 0207)
  • 1x Canon konektor 9 pinů samice
  • 1x pouzdro velikosti krabičky od zápalek

Pořizovací cena součástek je při koupi 2 čidel cca 200Kč. Počet čidel je libovolný, další čidla se zapojují paralelně k prvnímu. Každé čidlo má vlastní sériové číslo a je ovladačem přímo adresováno. Schéma zapojení je v příloze.

zapojení

zapojení

Nezapomeňte spojit konektory čidla GND a V. Ukázka konkrétního zapojení je v galerii teploměr.

Připojte kabel USB/RS232 do routeru a zavedeme ovladače např. v telnetu: insmod usbserial a insmod pl2303

Překontrolujete log routeru /usr/tmp/syslog.log  , zda se v něm objevili následující řádky:

kernel: usb.c: registered new driver serial
kernel: usbserial.c: USB Serial support registered for Generic
kernel: usbserial.c: USB Serial Driver core v1.4
kernel: usbserial.c: USB Serial support registered for PL-2303
kernel: usbserial.c: PL-2303 converter detected
kernel: usbserial.c: PL-2303 attached to ttyUSB0 (or usb/tts/0 for devfs)
kernel: pl2303.c: Prolific PL2303 USB to serial adaptor driver v0.11

tímto se ubezpečíte, že adaptér byl bezpečně rozeznán a bude spolupracovat. V opačném případě adaptér obsahuje nerozpoznaný čip a je nepoužitelný.

Pokud chcete inicializovat adaptér ihned po startu, zapište do opt/init.usb následující:

insmod usbserial
insmod pl2303

Nainstalujte software, který umí komunikovat s čidly: ipkg install digitemp

Po instalaci se rovnou dotážeme čidel: /opt/bin/digitemp_DS9097 -i -s /dev/usb/tts/0 -o "%b %d %H:%M:%S Sensor %s C: %.2C F: %.2F" -c /opt/etc/digitemp.conf

Pokud jsou čidla správně detekována, vygeneruje se konfigurační soubor s parametry měření a sériovými čísly čidel. Následné měření již může být podstatně rychlejší: /opt/bin/digitemp_DS9097 -aq -c /opt/etc/digitemp.conf

Program vrátí následující výsledek:
Aug 14 23:28:03 Sensor 0 C: 25.88 F: 78.57
Aug 14 23:28:04 Sensor 1 C: 18.44 F: 65.19
Aug 14 23:28:05 Sensor 2 C: 24.69 F: 76.44

Zabezpečte automatické měření pomocí CRONu, proto do souboru /opt/etc/crontab vložte řádek s úlohou, která každou minutu provede měření, výsledek uloží do souboru a ten přesune do jiného souboru. Přesouvá se z důvodu zpoždění zápisu hodnot do souboru a některé hodnoty mohou být nekompletní.

*/1 * * * * admin /opt/bin/digitemp_DS9097 -aq -c /opt/etc/digitemp.conf > /opt/var/log/temperature.log && mv /opt/var/log/temperature.log /opt/var/log/digitemp.txt

Vytvořte potřebné adresáře:

mkdir /opt/etc/tempsensor && mkdir /opt/share/www/lighttpd/temperature && mkdir /opt/var/log/digitemp_rrd && chmod 777 /opt/var/log/digitemp_rrd

Následně upravte konfigurační soubor /opt/etc/tempsensor/config.php dle průvodce, ukázkový soubor naleznete v příloze

Do souboru /opt/etc/crontab přidejte řádky pro načítání dat do databáze a vykreslení grafu každých 5 minut:

*/5 * * * * admin php /opt/etc/tempsensor/logdata.php
*/5 * * * * admin php /opt/etc/tempsensor/graphdata.php

Pro otestování a odladění můžeme spustit načtení dat ručně: php /opt/etc/tempsensor/logdata.php

Překontrolujte vytvoření souborů v adresáři /opt/share/www/lighttpd/temperature/. Tímto je ověřena funkčnost měření a zápisu do databáze. Grafy, nebo jiné výstupy jsou již na dalším vlastním vývoji.

Je nutné mít nainstalované obslužné nástroje rrdtool (API pro generování grafů),bc (balíček pro přesné výpočty) a bash (shell): ipkg install rrdtool && ipkg install bc && ipkg install bash

Soubory digitemp – ukázka načtení parametrů senzorů a lite.php, který používám jako osekaný graphdata.php aby se ulevilo procesoru a kreslil jen krátkodobé grafy, měsíční a roční se kreslí jen jednou denně.

Pokud nefunguje připojení RS232-USB převodníku, zkuste přidat příkaz rmmod ehci-hcd

Optimalizace CRONu:
Vzhledem k tomu, že měření, zápis a vykreslení nám zbytečně zaplňuje syslog -který můžeme průběžně sledovat příkazem tail -f /tmp/syslog.log, je dobré optimalizovat nastavení CRONu a to tak, že stávající pravidla přesuneme do samostatného skriptu a jeho celé spouštění zabezpečíme jedním řádkem v cronu a následně i v logu.
*/5 * * * * admin /opt/etc/tempsensor/teplota
skript /opt/etc/tempsensor/teplota s parametry 0755 (spustitelný chmod +x 0755 /opt/etc/tempsensor/teplota) pak obsahuje přenesené řádky:
#!/bin/sh
#merici skript na mereni teploty
#mereni
/opt/bin/digitemp_DS9097 -aq -c /opt/etc/digitemp.conf > /opt/var/log/temperature.log && mv /opt/var/log/temperature.log /opt/var/log/digitemp.txt
#zapsani do DB
php /opt/etc/tempsensor/logdata.php
#vykresleni jednoducheho grafu
php /opt/etc/tempsensor/lite.php
#kopie souboru s obrazkem
cp /opt/share/www/lighttpd/temperature/all_day.png /opt/share/www/lighttpd/temperature/all_day_graph.png

Kopii obrázku provádím kvůli zajištění jeho neustálé dostupnosti.

Jsou sice součástí instalace a v adresáři /opt/etc/tempsensor, ale pro jistotu uvádím graphdata.php a logdata.php. A po úpravách jejich současné verze jako zálohu komplet adresáře /opt/etc/tempsensor/.