Страница 1 из 1

Батарейная нода для мониторинга влажности и температуры

Добавлено: 04 июл 2017, 16:06
Sergey2055

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

#define MY_RADIO_NRF24
#define MY_NODE_ID 32
#include <MySensors.h>
#include <SPI.h>
#include <Wire.h>
#include <SHT2x.h>
#include <avr/wdt.h>

#define NODE_IDT 1
#define NODE_IDH 2
#define NODE_IDV 3
#define NODE_Time 4
#define NODE_Prog 5

unsigned long SLEEP_TIME = 30000;
float T, H;
int ADCin=3, prog = 3;
int BatteryPcnt;
byte flag = 0, flagProg;

MyMessage msgT(NODE_IDT, V_TEMP);
MyMessage msgH(NODE_IDH, V_HUM);
MyMessage msgbatt(NODE_IDV, V_VAR1);
MyMessage msgTime(NODE_Time, V_VAR2);
MyMessage msgProg(NODE_Prog, V_VAR5);


void presentation()
{
sendSketchInfo("Temp sensor", "V1.0_19062017"); 
//present(NODE_IDH, S_HUM);
present(NODE_IDT, S_TEMP, "Temp");
present(NODE_IDH, S_HUM, "humidity");
present(NODE_IDV, S_CUSTOM, "Battery");
present(NODE_Time, S_CUSTOM, "Time sleep");
present(NODE_Prog, S_CUSTOM, "Set programm");



}
void setup(){
  wdt_disable(); 
  Wire.begin();
  analogReference(INTERNAL);
  pinMode(ADCin, INPUT);
  pinMode(prog, INPUT);
  digitalWrite(prog, LOW);
  if(digitalRead(prog)==1)
  flag=1;
  else
  flag=0;
  int L = loadState(3);
  if((L) > 0 && (L)< 255)
  SLEEP_TIME=L*60000;
  send(msgProg.set(0));
  flagProg=0;
}

void loop()
{

 T = (SHT2x.readT());
    send(msgT.set(T, 2));  //value переменная 2-указываеьт сколько знаков после запятой выводить.

 H = (SHT2x.readRH());
    send(msgH.set(H, 2));  //value переменная 2-указываеьт сколько знаков после запятой выводить.
 
    if(flag == 1){
      int s = analogRead(ADCin);
    saveState(1, lowByte(s));
    saveState(2, highByte(s));
    send(msgbatt.set(s));  //value переменная 2-указываеьт сколько знаков после запятой выводить.
    delay(10000);
    }
    else{     
int a = analogRead(ADCin);
int sl = loadState (1);
int sh = loadState (2);
int battconst = word(sh, sl);
int batt3V = (30*battconst)/42;
int b = battconst - batt3V;
if((a - batt3V)>0){
 BatteryPcnt = ((a - batt3V)*100)/b;  // 293=1023=100%=4.2V
}
else
BatteryPcnt = 0;

    send(msgbatt.set(BatteryPcnt));  //value переменная 2-указываеьт сколько знаков после запятой выводить.

    send(msgTime.set((SLEEP_TIME)/60000));
    
     if(flagProg){
 delay(10000);
 send(msgProg.set(10));
 }
 else{
   send(msgProg.set(0));
    smartSleep(SLEEP_TIME);
 }

    }
}


//********************************************************

void receive(const MyMessage &message) {
    
    if (message.type==V_VAR2) { 
      if((message.getInt())<255){
    saveState(3, message.getInt());
    SLEEP_TIME = (loadState(3)*60000);
    send(msgTime.set((SLEEP_TIME)/60000));
      }
   }

    if (message.type==V_VAR5) { 
      if((message.getInt())<255){
    SLEEP_TIME = message.getInt();
    if (SLEEP_TIME == 52)
    flagProg = 1;
      }
   }     
   
}

Re: Батарейная нода для мониторинга влажности и температуры

Добавлено: 10 май 2019, 05:21
MEHANICUS
Подскажите-на сколько хватает заряда аккумулятора?

Re: Батарейная нода для мониторинга влажности и температуры

Добавлено: 17 июн 2019, 04:58
Sergey2055
Все зависит от качества аккумулятора и доработки схемы на плате ардуино. Аналогичная конструкция у меня уже второй год трудится без подзарядки.

Re: Батарейная нода для мониторинга влажности и температуры

Добавлено: 01 авг 2019, 16:43
iwizard7
От какой батареи она питается ? и какой датчик используете? SHT-21?

Re: Батарейная нода для мониторинга влажности и температуры

Добавлено: 05 авг 2019, 06:07
Sergey2055
Датчик SHT20, питается от любого акб от сотового телефона. Я взял от нокиа, 800ма.

Re: Батарейная нода для мониторинга влажности и температуры

Добавлено: 05 авг 2019, 06:09
Sergey2055
В уличной ноде применен тот же принцип. Работает уже 2 года без перезарядки. viewtopic.php?f=3&t=18

Re: Батарейная нода для мониторинга влажности и температуры

Добавлено: 25 июл 2020, 02:40
MEHANICUS
При компиляции кода-вылезла такая ошибка для этого и уличного датчика Изображение