Мини датчик температуры и влажности (цифровой, батарейный) | MySensors

Berkseo
Сообщения: 56
Зарегистрирован: Вт янв 24, 2017 12:30 am
Благодарил (а): 6 раз
Поблагодарили: 22 раза

Мини датчик температуры и влажности (цифровой, батарейный) | MySensors

Сообщение Berkseo » Пн сен 24, 2018 1:21 pm

Вновь приветствую всех адептов секты Майсенсорс :) на форуме Мажордомо. Решил поделится очередным своим проектиком это Датчик температуры и влажности для сети Майсенсорс, работает от батареек типа cr2430-50-77. Девайс обещает работать на одной батарейки более 2 лет.
Что может этот датчик температуры и влажности:
Прошивка по воздуху.
Работа на всех бутлоадерах.
Настраиваемая отправка показаний датчика на контролер
Лед индикация подключения к сети майсенсорс, отправки показаний
Три варианта держателя батарейки, 2430, 2450, 2477, соответственно разная толщина датчика.
Настройка параметров через контроллер:
-светодиод включен / выключен,
-интервал отправки показаний температуры и влажности 1мин-4 часа,
-интервал отправки заряда аккумулятора 1 час-7 дней.
Отправка остатка заряда батарейки в процентах
Настройка через модуль Майсенсорс в Мажордомо(да впринципе и через любой другой контролер):

Диаметр 35mm.

ATMEGA328_QFN32
SHT20
AT25DF512B(1.7v)
ATSHA204A
NRF24L01
Сrystal oscillator
LED SIDE 1206
ICSP interface (micro, 3х2/1,27)
FTDI interface (micro, 3х2/1,27)
Two side buttons (ресет, юзерская кнопка)


выведены как FTDI так и ICSP, так что полная свобода в манипуляциях над девайсом. Можете использовать мое ПО, можете написать крутое свое. Я как обычно только ЗА!!! Главное выкладывайте.

Приобрести готовый датчик можно тут - https://majordomo.smartliving.ru/forum/ ... =15&t=5726



Скрин страницы датчика движения в модуле Майсенсорс в Мажордомо
555777.png
555777.png (259.33 КБ) 7742 просмотра
Разводка платы под ЛУТ -
temp_bat01_lut.rar
(17.18 КБ) 269 скачиваний
Код тестовой програмы:

Код: Выделить всё

#include <Wire.h>
#include "DFRobot_SHT20.h"
DFRobot_SHT20    sht20; // https://github.com/DFRobot/DFRobot_SHT20

//#define MY_DEBUG
#define MY_DISABLED_SERIAL
#define MY_RADIO_RF24
//#define MY_RADIO_NRF5_ESB
#define MY_OTA_FIRMWARE_FEATURE
//#define MY_SIGNING_ATSHA204
//#define MY_SIGNING_ATSHA204_PIN A3
//#define MY_SIGNING_REQUEST_SIGNATURES

#define TEMP_SENS_ID 1
#define HUM_SENS_ID 2
#define SETTING_LED_SENS_ID 100
#define DELAY_TIME_SENS_ID 101
#define BATTARY_SEND_SENS_ID 102

#define BAT_COOF 3.04
#define BAT_MIN 200
#define BAT_MAX 290
#define ON 1
#define OFF 0

float humd;
float temp;
int oldhumd;
int oldtemp;
uint32_t send_batteryTime;
uint32_t w_battetyTime = 0;
static uint8_t led_pin = 4;
uint32_t delayTime;
int8_t battery;
int8_t old_battery;
uint8_t set_led;
boolean sleep_mode;
boolean first_send_battery = 1;

#include <MySensors.h>

MyMessage msg_temp(TEMP_SENS_ID, V_TEMP);
MyMessage msg_hum(HUM_SENS_ID, V_HUM);
MyMessage msg_setting_led(SETTING_LED_SENS_ID, V_VAR1);
MyMessage msg_delay_time(DELAY_TIME_SENS_ID, V_VAR1);
MyMessage msg_battary_send(BATTARY_SEND_SENS_ID, V_VAR1);

void preHwInit()
{
  pinMode(led_pin, OUTPUT);
  digitalWrite(led_pin, OFF);
}

void before()
{
  set_led = loadState(100);
  if (set_led > 1) {
    set_led = 0;
    saveState(100, set_led);
  }
  delayTime = loadState(101);
  if (delayTime > 240) {
    delayTime = 1;
    saveState(101, delayTime);
  }
  send_batteryTime = loadState(102);
  if (send_batteryTime > 168) {
    send_batteryTime = 1;
    saveState(102, send_batteryTime);
  }
  digitalWrite(led_pin, ON);
}


void presentation()
{
  sendSketchInfo("Temp & Hum Sensor", "1.0");
  wait(100);
  present(TEMP_SENS_ID, S_TEMP, "TEMPERATURE DATA");
  wait(100);
  present(HUM_SENS_ID, S_HUM, "HUMIDITY DATA");
  wait(100);
  present(SETTING_LED_SENS_ID, S_CUSTOM, "LED MODE");
  wait(100);
  present(DELAY_TIME_SENS_ID, S_CUSTOM, "DELAY TIME/MIN");
  wait(100);
  present(BATTARY_SEND_SENS_ID, S_CUSTOM, "BATTERY SEND TIME/H");
}

void setup()
{
  digitalWrite(led_pin, OFF);
  wait(50);
  digitalWrite(led_pin, ON);
  wait(200);
  digitalWrite(led_pin, OFF);
  wait(50);
  digitalWrite(led_pin, ON);
  wait(200);
  digitalWrite(led_pin, OFF);
  wait(1000);
  readBatLev();
  wait(1000);
  sht20.initSHT20();
  send_data();
  wait(100);
  send(msg_delay_time.set(delayTime));
  wait(100);
  send(msg_setting_led.set(set_led));
  wait(100);
  send(msg_battary_send.set(send_batteryTime));
  sleep_mode = 1;
}

void loop()
{
  if (sleep_mode == 0) {
    sleep(delayTime * 60 * 1000, false);
  }
  if (sleep_mode == 1) {
    sleep(delayTime * 60 * 1000, true);
    sleep_mode = 0;
  }

  w_battetyTime = w_battetyTime + (delayTime * 60 * 1000);

  if (w_battetyTime >= send_batteryTime * 60 * 60 * 1000) {
    readBatLev();
    sleep_mode = 1;
    w_battetyTime = 0;
  }

  send_data();
}


void receive(const MyMessage & message)
{
  if (message.sensor == SETTING_LED_SENS_ID) {
    if (message.type == V_VAR1) {
      if (message.getByte() <= 1) {
        set_led = message.getBool();
        saveState(100, set_led);
        send(msg_setting_led.set(set_led));
        if (set_led == 0) {
          TRANSPORT_DEBUG(PSTR("MyS: STATUS LED: OFF\n"));
        }
        if (set_led == 1) {
          TRANSPORT_DEBUG(PSTR("MyS: STATUS LED: ON\n"));
          if (set_led == 1) {
            digitalWrite(led_pin, ON);
            wait(50);
            digitalWrite(led_pin, OFF);
          }
        }
      }
    }
  }
  if (message.sensor == DELAY_TIME_SENS_ID) {
    if (message.type == V_VAR1) {
      if (message.getULong() <= 240) {
        delayTime = message.getULong();
        saveState(101, delayTime);
        send(msg_delay_time.set(delayTime));
        TRANSPORT_DEBUG(PSTR("MyS: THE NEW INTERVAL TEMP&HUM SEND VALUE IS SET: %d MIN.\n"), delayTime);
        if (set_led == 1) {
          digitalWrite(led_pin, ON);
          wait(50);
          digitalWrite(led_pin, OFF);
        }
      }
    }
  }
  if (message.sensor == BATTARY_SEND_SENS_ID) {
    if (message.type == V_VAR1) {
      if (message.getULong() <= 168) {
        send_batteryTime = message.getULong();
        saveState(102, send_batteryTime);
        send(msg_battary_send.set(send_batteryTime));
        TRANSPORT_DEBUG(PSTR("MyS: THE NEW INTERVAL BATTERY SEND IS SET: %d HOUR\n"), send_batteryTime);
        if (set_led == 1) {
          digitalWrite(led_pin, ON);
          wait(50);
          digitalWrite(led_pin, OFF);
        }
      }
    }
  }
}

void send_data()
{
  humd = sht20.readHumidity();
  temp = sht20.readTemperature();
  int t_humd = (int)humd;
  int t_temp = (int)temp;
  if (oldtemp != t_temp) {
    oldtemp = t_temp;
    send(msg_temp.set(temp, 1));
    //wait(1000, C_SET, V_TEMP );
    if (set_led == 1) {
      digitalWrite(led_pin, ON);
      wait(50);
      digitalWrite(led_pin, OFF);
    }
  }
  wait(100);
  if (oldhumd != t_humd) {
    oldhumd = t_humd;
    send(msg_hum.set(humd, 1));
    //wait(1000, C_SET, V_HUM );
    if (set_led == 1) {
      digitalWrite(led_pin, ON);
      wait(50);
      digitalWrite(led_pin, OFF);
    }
  }
  TRANSPORT_DEBUG(PSTR("MyS: SEND DATA - TEMPERATURE: %d, HUMIDITY %d\n"), t_temp, t_humd);
}


void readBatLev() {
  ADMUX = _BV(REFS1) | _BV(REFS0) | _BV(MUX0);
  wait(100);
  RF24_startListening();
  wait(500);
  ADCSRA |= _BV(ADSC);
  while (bit_is_set(ADCSRA, ADSC));
  uint8_t low  = ADCL;
  uint8_t high = ADCH;
  long temp = (high << 8) | low;
  float vcc = temp * 1.1 / 1023 * BAT_COOF * 100;
  battery = map((int)vcc, BAT_MIN, BAT_MAX, 0, 100);
  if (battery < 0) {
    battery = 0;
  }
  if (battery > 100) {
    battery = 100;
  }
  TRANSPORT_DEBUG(PSTR("MyS: BATTERY LEVEL: %d, PREVIUS BATTERY LEVEL: %d\n"), battery, old_battery);
  TRANSPORT_DEBUG(PSTR("MyS: BATTERY LEVEL ADC: %d\n"), temp);
  if (first_send_battery == 1) {
    first_send_battery = 0;
    sendBatteryLevel(battery);
    TRANSPORT_DEBUG(PSTR("MyS: SEND BATTERY LEVEL\n"));
    old_battery = battery;
  } else {
    if (old_battery != battery) {
      if (battery < old_battery) {
        old_battery = battery;
        sendBatteryLevel(battery);
        TRANSPORT_DEBUG(PSTR("MyS: SEND BATTERY LEVEL\n"));
      } else {
        battery = old_battery;
      }
    }
  }
}
Фотки:
1537749136071-111.jpg
1537749136071-111.jpg (60.35 КБ) 7742 просмотра
IMG_2504.JPG
IMG_2504.JPG (496.2 КБ) 7742 просмотра
IMG_2505.JPG
IMG_2505.JPG (427.17 КБ) 7742 просмотра
IMG_2508.JPG
IMG_2508.JPG (384.05 КБ) 7742 просмотра
IMG_2372.jpg
IMG_2372.jpg (74.65 КБ) 7742 просмотра
IMG_2374.jpg
IMG_2374.jpg (66.67 КБ) 7742 просмотра
IMG_2375.jpg
IMG_2375.jpg (55.25 КБ) 7742 просмотра
IMG_2376.jpg
IMG_2376.jpg (62.76 КБ) 7742 просмотра
За это сообщение автора Berkseo поблагодарил:
olehs (Ср сен 26, 2018 11:31 am)
Рейтинг: 1.16%
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Мини датчик температуры и влажности (цифровой, батарейный) | MySensors

Сообщение nick7zmail » Ср сен 26, 2018 6:20 am

Агонь)) цена вопроса?
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: Мини датчик температуры и влажности (цифровой, батарейный) | MySensors

Сообщение skysilver » Ср сен 26, 2018 10:01 am

nick7zmail писал(а):
Ср сен 26, 2018 6:20 am
Агонь)) цена вопроса?
Автор указал ))
Приобрести готовый датчик можно тут - https://majordomo.smartliving.ru/forum/ ... =15&t=5726
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
smart_g
Сообщения: 292
Зарегистрирован: Вт окт 17, 2017 11:29 am
Откуда: Украина, Киев
Благодарил (а): 15 раз
Поблагодарили: 33 раза

Re: Мини датчик температуры и влажности (цифровой, батарейный) | MySensors

Сообщение smart_g » Ср сен 26, 2018 1:18 pm

Более гуманная цена на Xiaomi Aqara Smart Air Pressure Temperature Humidity Environment Sensor
https://ru.aliexpress.com/item/Xiaomi-A ... Title=true
Как по мне под mysensors надо городить что то экзотическое, чего нет в промышленных масштабах.
Ubuntu Server 16.04 LTS, OpenWRT 1-wire, SonOFF, MYSensors, MiHome, Yeelight, MiFlower
Berkseo
Сообщения: 56
Зарегистрирован: Вт янв 24, 2017 12:30 am
Благодарил (а): 6 раз
Поблагодарили: 22 раза

Re: Мини датчик температуры и влажности (цифровой, батарейный) | MySensors

Сообщение Berkseo » Ср сен 26, 2018 1:37 pm

smart_g писал(а):
Ср сен 26, 2018 1:18 pm
Более гуманная цена на Xiaomi Aqara Smart Air Pressure Temperature Humidity Environment Sensor
https://ru.aliexpress.com/item/Xiaomi-A ... Title=true
Как по мне под mysensors надо городить что то экзотическое, чего нет в промышленных масштабах.
Срок службы на одной батарейке. Всегда знаем сколько осталось в батарейке. Настраиваемые интервалы отправки. Возможность програмирования, прошивки по воздуху. Френдли РФ для майсенсорс. Ну и по мелочи, точка россы, настраиваемый светодиод, юзерская кнопка. Но тут как быкаждому свое, кому то комплект ксяоми, кому то иное. А вообще задолбали с ксяоми сравнивать, мне конечно приятно, при чем здесь оно..

Вот простая ситуация, у вас когда очередная сд сдохнет, еще что то случится, вообщем контролер будет офлайн, обновитесь из китайсого облака неудачно, гейт ваш с интегрированным ночником подвиснет, роутер жена шваброй заденет, а вы датчик движения температуры на отопление завязали, ну и как говорится пошел нафиг с новым годом))). Я у меня на моем датчике который именно под майсенсорс, внутри которого майсенсорс можно и без контролера передать че надо, и без гейта напрямую легко

И в планах именно простые устройства и буду делать дальше, эта батарейная серия: движение, температура, двери, окна , выключатели кнопочные, выключатели сенсорные, протечка, счетчики импульсов, термостаты и тп и тд,


Боюсь спросить, а эта моя разработка подходит под ваши критерии экзотичности - https://www.openhardware.io/view/609/Te ... nk-display ??
smart_g
Сообщения: 292
Зарегистрирован: Вт окт 17, 2017 11:29 am
Откуда: Украина, Киев
Благодарил (а): 15 раз
Поблагодарили: 33 раза

Re: Мини датчик температуры и влажности (цифровой, батарейный) | MySensors

Сообщение smart_g » Ср сен 26, 2018 2:21 pm

Срок службы у меня пока датчик aqara с нового года 100% уровень батареи. По моему у всех на этом форуме xiaomi gate давно отвязан от китайского облака. И вопрос в коммерческом разделе был задан правильно " где корпус?". Все поделки в итоге упираются в конечный вид. И если цена нутра (пусть и с некоторыми наворотами по отношению к xiaomi) больше и еще не известно во что станет корпус, то вопрос остается открытым. У меня тоже есть устройства mysensors. Но это управление вентзаслонками на сервоприводе. Да есть в природе, но цена конская. Есть TFT модуль с тачем. Тоже вроде есть промышленные, но цены. Никто не против чтобы вы это делали, но вопрос цены будет возникать всегда.
Ubuntu Server 16.04 LTS, OpenWRT 1-wire, SonOFF, MYSensors, MiHome, Yeelight, MiFlower
Аватара пользователя
nightwind
Сообщения: 333
Зарегистрирован: Вс июн 26, 2016 4:42 pm
Откуда: Барановичи
Благодарил (а): 28 раз
Поблагодарили: 52 раза
Контактная информация:

Re: Мини датчик температуры и влажности (цифровой, батарейный) | MySensors

Сообщение nightwind » Сб окт 06, 2018 6:33 pm

Отличная разработка! Основополагающий плюс системы майсенсорс - это ее открытость. делай как хочешь, и что хочешь. сяоми же закрытая полностью, и как бы не писали тут про отвязку от китайского облака, как говорится - блажен кто верует. не может такого быть, чтобы китайцы не оставили себе возможности управления. ну и все эти отвязки и привязки - костыль на костыле. вроде работает, но и перестать может в любой момент. купил я себе для теста несколько aqara, свисток свой прошил, отправляют они что-то, но половина непонятна, изменить ничего нельзя.

Топикстартер - закинь в личку цену 5 устройств с отправкой в беларусь в USD.
Berkseo
Сообщения: 56
Зарегистрирован: Вт янв 24, 2017 12:30 am
Благодарил (а): 6 раз
Поблагодарили: 22 раза

Re: Мини датчик температуры и влажности (цифровой, батарейный) | MySensors

Сообщение Berkseo » Пт янв 18, 2019 8:13 pm

Апдейт темы, ..приступил к разработке корпуса для данного девайса. прототип готов
WhatsApp Image 2019-01-18 at 14.15.40.jpeg
WhatsApp Image 2019-01-18 at 14.15.40.jpeg (42.92 КБ) 6968 просмотров
WhatsApp Image 2019-01-18 at 14.15.54.jpeg
WhatsApp Image 2019-01-18 at 14.15.54.jpeg (35.88 КБ) 6968 просмотров
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Мини датчик температуры и влажности (цифровой, батарейный) | MySensors

Сообщение nick7zmail » Сб янв 19, 2019 7:43 pm

"Задолбали с сяоми сравнивать" сказал автор, и сделал корпус один в один как у сяоми =DD
А вообще хорошая альтернатива сяоми на самом то деле (без стёба, серьезно). Для DIY проектов это редкость.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Berkseo
Сообщения: 56
Зарегистрирован: Вт янв 24, 2017 12:30 am
Благодарил (а): 6 раз
Поблагодарили: 22 раза

Re: Мини датчик температуры и влажности (цифровой, батарейный) | MySensors

Сообщение Berkseo » Пн янв 21, 2019 3:05 am

nick7zmail писал(а):
Сб янв 19, 2019 7:43 pm
"Задолбали с сяоми сравнивать" сказал автор, и сделал корпус один в один как у сяоми =DD
А вообще хорошая альтернатива сяоми на самом то деле (без стёба, серьезно). Для DIY проектов это редкость.
Ниразу непохож,даже не думал о ксяомях пока воркерил в Солиде :)

Вот даже в чате (скайп) сравнивали
1547643977820.JPEG
1547643977820.JPEG (72.06 КБ) 6907 просмотров
Ответить