"Vieno laido" termometrai Dallas DS18B20

Atėjo šildymo sezonas, noriu valdyti šilumą patalpose elektrinių vožtuvų pagalba. Naudoju 1-wire temperatūros jutiklius DS18B20. Patogu, nes jungiama dviem - trim laidais, daviklių kiekis neribotas. Temperatūros diapazonas -55°C to 125°C.

"Vieno laido" termometrai Dallas DS18B20

1-wire funkcijos atyvavimas Raspberry Pi

Pirmas testas - ant stalo. Termometrus jungiu į pirmą io-hat plokštės įejimą - in1.

Raspberry-pi pakeitimai

sudo vim /boot/config.txt
dtoverlay=w1-gpio,gpiopin=18

Po kiekvieno config.txt redagavimo reikia perkrauti RPi:

sudo reboot

Konfigūravimo tikrinimas

# ar moduliai aktyvūs?
lsmod | grep w1

Rezultatas turi būti:

w1_therm               28672  0
w1_gpio                16384  0
wire                   36864  2 w1_gpio,w1_therm

Jeigu rezultatas ne toks, moduliai aktyvuojami komandomis:

sudo modprobe w1_gpio
sudo modprobe w1_therm

Raspberris pats detektuoja prijungtus termometrus ir failų sistemoje jie atsiranda adresu /sys/bus/w1/devices kataloguose kurių pavadinimai prasideda 28-:

Temperatūros tikrinimas:

$ cat /sys/bus/w1/devices/28-3c01d075482c/w1_slave
7e 01 55 05 7f a5 81 66 84 : crc=84 YES
7e 01 55 05 7f a5 81 66 84 t=23875

Taigi ant stalo viskas veikia puikiai. Du termometrai detektuoti, temperatūras rodo.

connection

Kaip nesisekė realioje situacijoje

Ant stalo viskas paprasta ir maniau greit susisuksiu bet... Eilinį kartą supratau, kad pirmiausia reikia paskaityti gamintojo rekomendacijas ir tik tada imtis darbo. Bet aš juk protingesnis už gamintoją ir kam tie manualai reikalingi!

Daviklius sujungiau žvaigždės principu. Atskiri kabeliai iki 4 termometrų ir kabelių ilgiai smarkiai skiriasi. Galuose prilitavau daviklius, tada viską sujungiau spintoje - neveikia. Atjungiau visus daviklius galuose palikdamas vieną - tikrinu - neveikia. Ištraukiau kabelius iš RPi ir pajunginėju po vieną atskirai - po vieną visus detektuoja ir rodo temperatūrą. Pajungiu bet kuriuos du kartu - nebeveikia. Teko palikti kitai dienai.

Prisiskaičiau rekomendacijų forumuose (gamintojo manualą vis dar ignoruoju). io-hat plokštės inputai užpullupinti 10k varžomis. Gamintojas rekomenduoja pullupinti 4.7k. Padarau su 4.7k - veikia po du bet ne daugiau. Prisipirkau kondensatorių po 100nF ir varžų visokių pagal 100 rekomendacijų forumuose.

Kaip pavyko

Perjungiu signalo laidą į kitą io-hat įėjimą, kuris be pullupo, pakoreguoju config.txt į dtoverlay=w1-gpio,gpiopin=7, pullupinu/užtrumpinu signalo laidą ir 5 V su 2.2k varža, jungiu visus termometrus - visi VEIKIA!

Kaip integruoti į node-red

Apačioje nuoroda į waveshare straipsnelį su pavyzdžiais kaip nuskaityti temperatūras keliomis programavimo kalbomis.

Node-red aš įdiegiau "node-red-contrib-ds18b20-sensor" nodą bet vėliau pastebėjau, kad kol vyksta temperatūros reikšmių atnaujinimas visi kiti node-red procesai užšąla. Užšaliumas trunka kelias sekundes ir jeigu tuo momentu pvz įjunginėji vonioje šviesą - nieks nereaguoja. Pasinaudodamas waveshare pavyzdžiais pasirašiau golang servisą, kuris nuskaito visų sistemoje rastų termometrų reikšmes ir publikuoja jas MQTT protokolu.

Kas toliau?

Dabar matau realią situaciją name - kiek temperatūros duoda saulė, kada galima uždaryti/atidaryti vožtuvus. Kol kas valdau tik pirmą ir trečia aukštus, liko ali prisipirkti el. pavarų visiems likusiems vožtuvams.

Sujunginėju node-red makaronus, dabartinis rezultatas:

2021-10-08_14-14

Nuorodos