Не вичитувався давач температури і вологості SHT21 на метеостанція через перегнивший кабель живлення, тож вирішив заодно розповісти про мою метеостанцію за вікном. Для чого метеостанція: робота із великими даними, тестування каналів передачі інформації, робота із hardware, веб розробка.
Переглянути актуальні дані по погоді можна за лінком. Опис програмної оболонки буде опубліковано пізніше.
Щоб дані були вірні потрібно правильно підібрати сенсори.
Інтерфейс: I2C, живлення: 2.1..3.0..3.6V; Температура: -40..125°C, розширення: 0.01°C, точність: ±0.3°C; Вологість: 0..100%RH, розширення: 0.04%RH, точність: ±2%RH.
Можна взяти HDC1080.
Інтерфейс: I2C, живлення: 1.8..2.5..3.6V; Температура: -40..85°C, розширення: 0.1°C, точність: ±1.0°C (±2.0°C max); Тиск: 300..1100 hPa (+9000..-500 m над рівнем моря), розширення: 0.01 hPa, точність: ±1.5 hPa (±4.0 hPa max).
Інтерфейс: 1wire, живлення: 3.0..5.5V; Температура: -55..125°C, розширення: 0.1°C, точність: ±0.5°C. При розробці програм треба враховувати що дачткик інколи може видати температуру 85 градусів.
Інтерфейс: I2C, живлення: 1.71..2.5..3.6V; Температура: -40..85°C. Даташит.
Зазвичай використовується механічний сенсор у вигляді каретки.
Фото і анімація Lana Sator.
На даний час на станції розміщено датчики температури, вологості і тиску (SHT21 і BMP085).
Для цього використовують захисні екрани (radiation shield). В мене вийшов такий, із підставок під вазонки.
Схема.
За рік часу ззовні і всередині пластик обростає дуже мілким пилом.
На дні розміщено штекер для оперативного зняття і обслуговування.
Колись накидав такий малюнок як має усе працювати.
Використав TL-MR3020 (це мініроутер із 400 мгц процесором, локальною мережею і Wi-Fi): додав UART на SP3223, додав I2C на GPIO 7 і 29. Вивів все гарно на DB9 конектор (1-5V;2-TX;3-RX;4-NC;5-GND;6-3.3V;7-LGND;8-SCL;9-SDA).
Ігсталював модулі для роботи із i2c, бінарники для роботи.
Лістинг meteo.sh
#!/bin/sh #SHT21 RAWTEMP=$(i2cget -y 0 0x40 0xe3 w) Q=$(echo "$RAWTEMP"|sed -r 's/0x([0-9a-f]{2})([0-9a-f]{2})/\2\1/') RAWHUMI=$(i2cget -y 0 0x40 0xe5 w) W=$(echo "$RAWHUMI"|sed -r 's/0x([0-9a-f]{2})([0-9a-f]{2})/\2\1/') #BMP085 i2cset -y 0 0x77 0xf4 0x2e sleep 1 T=$(i2cget -y 0 0x77 0xf6 w) T=$(echo "$T"|sed -r 's/0x([0-9a-f]{2})([0-9a-f]{2})/\2\1/') i2cset -y 0 0x77 0xf4 0xf4 sleep 1 P=$(i2cget -y 0 0x77 0xf6 w) P=$(echo "$P"|sed -r 's/0x([0-9a-f]{2})([0-9a-f]{2})/\2\1/') PD=$(i2cget -y 0 0x77 0xf8) PD=$(echo "$PD"|sed -r 's/0x([0-9a-f]{2})/\1/') if [ -z "$Q" ]; then Q="----" fi if [ -z "$W" ]; then W="----" fi if [ -z "$T" ]; then T="----" fi if [ -z "$P" ]; then P="----" fi if [ -z "$PD" ]; then PD="--" fi # echo 'Q='$Q' W='$W' T='$T' P='$P' PD='$PD /usr/bin/wget -q -O /dev/null 'http://meteo.uaid.net.ua/P/****/'$Q$W$T$P$PD
Шоб перевірити список пристроїв на i2c шині використовуємо команду i2cdetect 0. 40 адреса SHT, 77 – BMP.
WARNING! This program can confuse your I2C bus, cause data loss and worse! I will probe file /dev/i2c-0. I will probe address range 0x03-0x77. Continue? [Y/n] Y 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- 77
Тут інженери зробили дуже “легку” метематику. Опис математики.
Помилка на сторінці 5 Derived Calibration Data має бути 0,000004
Помилка у формулі y2 на сторінці 2, додатково поділив на 40 000 щоб дані співпали із тестовими. Математика в GoogleSheet.
Дуже сподобався віджет на андроїд: Universal Widget.
Вказавши “Data privider URL” meteo.uaid.net.ua/uv отримуємо дані із станції.
Якщо є вільний постійно включений компютер із лінуксом на борту і вільним COM (serial) портом, то можна знімати дані таким скриптом. В мене він жив пару років доки роль роутера виконував комп’ютер із PfSense.
#!/bin/sh temp=`/usr/local/bin/digitemp_DS9097 -t 0 -q -o%.2C -s /dev/cuau1 -с /usr/local/etc/digitemp.conf` /usr/local/bin/wget -q -O /dev/null 'http://meteo.uaid.net.ua/sensor.php?SID=*&T='$temp
і закидуємо у cron щохвилини
* * * * * root /bin/sh /usr/local/etc/put.sh
При перщому виконанні потрібно створити конфіг файл.
/usr/local/bin/digitemp_DS9097 -i -s /dev/cuau1 DigiTemp v3.6.0 Copyright 1996-2007 by Brian C. Lane GNU Public License v2.0 - http://www.digitemp.com Turning off all DS2409 Couplers . Searching the 1-Wire LAN 28FA1686020000DC : DS18B20 Temperature Sensor ROM #0 : 28FA1686020000DC Wrote .digitemprc
Був підключений 18 метровим екранованим сигнальним кабелем 4*0,22. Працював як на паразитному так і на додатковому живленні.
Перехідник RS-232-1Wire.
При довгому кабелі із біметалу не вичитувало сенсор
digitemp_DS9097 -a DigiTemp v3.6.0 Copyright 1996-2007 by Brian C. Lane GNU Public License v2.0 - http://www.digitemp.com CRC Failed. CRC is 63 instead of 0x00 CRC Failed. CRC is 63 instead of 0x00 CRC Failed. CRC is 63 instead of 0x00 Mar 10 14:51:42 Sensor 1 C: 10.12 F: 50.23
При короткому кабелі все ок:
digitemp_DS9097 -a DigiTemp v3.6.0 Copyright 1996-2007 by Brian C. Lane GNU Public License v2.0 - http://www.digitemp.com Mar 10 13:43:16 Sensor 0 C: 40.12 F: 104.22 Mar 10 13:43:17 Sensor 1 C: 9.44 F: 48.99
Схема метеостанції яку хочу виконати на компонентах із industrial діапазоном температу:
Контакти площадки сенсорів: (+, -, int, scl, sda).
Робимо кулі до анемоментра: кулька 44,5 мм вага 361г із підшибника + молоток + мідь і маємо півсфери. Потемніли після відпалу.
Юрій Р. ◯ 0009-0005-3702-9223. (2017). Метеостанція. Блог UA ID. Взято з: https://blog.uaid.net.ua/meteostation/embed
Скопіюйте та вставте це посилання до свого WordPress сайту, щоби вставити
Скопіюйте та вставте цей код собі на сайт, щоби вставити