Problême avec la gestion de batterie

Un forum dédie à vos questions concernant l'intégration à Domoticz des capteurs et gateway mysensors.org
Répondre
Yannoo
Messages : 3
Enregistré le : 08 mai 2017, 00:50

Problême avec la gestion de batterie

Message par Yannoo »

Bonsoir,

J'ai un problême lorsque j'essaye d'ajouter le suivi des piles 9V alimentant mes nodes communiquant en NRFL401 :(

J'ai crée un pont diviseur avec une résistance R1 de 100K ohms et une resistance R2 de 1M ohms afin de pouvoir avoir une tension d'environ 1V max aux bornes de la résistance R1 lorsque la pile 9V est chargée à bloc
(j'ai 9.75V de tension à vide aux bornes de la pile 9V lorsqu'elle est neuve => la tension aux bornes de la résistance R1 fait alors un peu moins de 1V)

Je voudrais utilser une entrée analogique pour faire la mesure de cette tension et aimerais pouvoir utiliser la fonctionnalité analogReference(INTERNAL) afin de pouvoir travailler en pleine échelle sur ces 1V et non pas sur 5V où les 4/5ièmes des valeurs supérieures ne seront jammais utilisées

Le problême est que j'utilise aussi une autre entrée analogique avec un capteur de luminosité qui lui travaille en pleine échelle sur 5V

=> est-il possible d'utilser la référence analogique INTERNAL de 1.1V uniquement sur certaines entrées analogiques et de laisser la référence analogique à DEFAULT sur d'autres afin de pouvoir travailler en pleine échelle sur 5V sur certaines et en 1.1V sur d'autres ?

Ci-joint le code que j'utilise et qui plante lorsque je décommente les portions gérants le suivi de la consommation de la pile 9V

Code : Tout sélectionner

/**********************************************************/
/* SALON (température + humidité + luminosité)            */
/* TODO : optimize power consommation and battery reports */
/**********************************************************/

/**
 * The MySensors Arduino library handles the wireless radio link and protocol
 * between your home built sensors/actuators and HA controller of choice.
 * The sensors forms a self healing radio network with optional repeaters. Each
 * repeater and gateway builds a routing tables in EEPROM which keeps track of the
 * network topology allowing messages to be routed to nodes.
 *
 * Created by Henrik Ekblad <henrik.ekblad@mysensors.org>;
 * Copyright (C) 2013-2015 Sensnology AB
 * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
 *
 * Documentation: http://www.mysensors.org
 * Support Forum: http://forum.mysensors.org
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * version 2 as published by the Free Software Foundation.
 *
 *******************************
 *
 * REVISION HISTORY
 * Version 1.0 - PROJETS DIY
 * 
 * DESCRIPTION
 * Example sketch showing how to measue light level using a LM393 photo-resistor 
 * http://www.mysensors.org/build/light
 */

// Active le mode debug / Enable debug prints to serial monitor
#define MY_DEBUG 

// Mode Radio / Enable and select radio type attached
#define MY_RADIO_NRF24
//#define MY_RADIO_RFM69

#define MY_RF24_PA_LEVEL RF24_PA_LOW

// Noeud de l'objet / Object Node
#define MY_NODE_ID 16

#include <MySensors.h>
// #include <MyConfig.h>

#include <SPI.h>;
#include <DHT.h>;

#define CHILD_ID_TEMP 0  
#define CHILD_ID_HUM 1
#define CHILD_ID_LIGHT 2
// #define CHILD_ID_BATTERY 3

#define SLEEP_NODE true // Mettre à True pour activer la mise en sommeil (Sleep Mode) / True to activate Sleep Mode
unsigned long SLEEP_TIME = 10 * 1000; // Temps de mise en sommeil (en ms) / Sleep time between reads (in milliseconds)

#define DHTPIN 3        // Broche sur laquelle est branché le DHT / what pin we're connected to
#define DHTTYPE DHT22   // DHT 22  (AM2302), DHT11

#define LIGHT_SENSOR_ANALOG_PIN 0

// #define BATTERY_SENSE_PIN A1

float lastTemp;
float lastHum;
int   lastLightLevel;
// int   lastBatteryPercent;

boolean metric = true; 

MyMessage msgHum(CHILD_ID_HUM, V_HUM);
MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
MyMessage msgLight(CHILD_ID_LIGHT, V_LIGHT_LEVEL);
// MyMessage msgBattery(CHILD_ID_BATTERY, V_VOLTAGE); 

void setup() {
  // analogReference(INTERNAL); 
}

void presentation()  {
  // Présenttion du sketch / Send the sketch version information to the gateway and Controller
  sendSketchInfo("Sonde Temp/Hum DHT22 + Lumens", "1.0");

  // Déclaration des capteurs attachés au noeud
  present(CHILD_ID_TEMP, S_TEMP);
  present(CHILD_ID_HUM, S_HUM);
  present(CHILD_ID_LIGHT, S_LIGHT_LEVEL);
  // present(CHILD_ID_BATTERY, S_MULTIMETER);
}

void loop()      
{    
  DHT dht(DHTPIN, DHTTYPE,3); // Creation d'un objet dht dans la loop sinon les valeurs ne sont pas mesurées au réveil

  float temperature = dht.readTemperature();
  float humidity = dht.readHumidity();
  int16_t lightLevel = (1023-analogRead(LIGHT_SENSOR_ANALOG_PIN))/10.23; 

  // int     batterySensor =  analogRead(BATTERY_SENSE_PIN);
  // float   batteryV;
  // int     batteryPcnt;
  
  if (isnan(temperature)) {
      Serial.println("Impossible de lire la temperature sur le DHT");
  } else {
    if (temperature != lastTemp) {
      lastTemp = temperature;
      if (!metric) {
        temperature = dht.readTemperature(true);
      }
      
      Serial.print("T: ");
      Serial.print(temperature);
      Serial.print(" | H: ");
      Serial.println(humidity);
      send(msgTemp.set(temperature, 1));
      send(msgHum.set(humidity, 1));
    } else {
      Serial.println("Temperature identique => on force l'envoi");  
      Serial.print("T: ");
      Serial.print(temperature);
      Serial.print(" | H: ");
      Serial.println(humidity);
      send(msgTemp.set(temperature, 1));
      send(msgHum.set(humidity, 1));
    }
  }  

  Serial.println(lightLevel);
  if (lightLevel != lastLightLevel) {
      send(msgLight.set(lightLevel));
      lastLightLevel = lightLevel;
  }

  // Serial.print("Battery sensor : ");
  // Serial.println(batterySensor);

  // batteryV = batterySensor / 105;
 
  // Serial.print("Battery voltage : "); 
  // Serial.println(batteryV);
  // Serial.println("V");
  // send(msgBattery.set(batteryV, 1));

/*
  batteryPcnt = batterySensor / 10;

  Serial.print("Battery percent : ");
  Serial.print(batteryPercent);
  Serial.println("%");

  if( batteryPercent != oldBatteryPercent )
  {
    SetBatteryLevel(batteryPercent);
    oldBatteryPercent = batteryPercent; 
  }
*/
  
  if (SLEEP_NODE) {
    Serial.println("Sleep");
    sleep(SLEEP_TIME);
  } else {
    delay (SLEEP_TIME);
  }
}
II y a aussi un pb lorsque j'augmente la valeur du SLEEP_TIME de 10 secondes à 60 secondes et je ne vois pas trop d'où ça pourrait provenir


@+
Yannoo

domdom
Messages : 64
Enregistré le : 20 mai 2016, 10:48
Localisation : Ille-et-Vilaine

Re: Problême avec la gestion de batterie

Message par domdom »

Le mieux pour trouver la source de tes problèmes est à mon avis de supprimer tout le code qui ne sert à rien (DHT, etc...) et de revenir à un truc qui fait la fonction de base (= mesurer la tension batterie). Une fois que ça fonctionne correctement, rajouter la mesure de la seconde tension. Si ça continue à fonctionner correctement, ajouter la mise en veille, etc...
A la fin, tu devrais pouvoir beaucoup mieux isoler ce qui ne fonctionne pas.

Par contre, si tu veux qu'on arrive à t'aider, il faudrait que tu décrives tes problèmes : "ça plante" ou "il y a un problème" n'est pas très parlant...

Bon courage

PS : quand je dis supprimer, c'est vraiment supprimer, pas mettre en commentaire, car c'est le meilleur moyen pour oublier un bout de code quelque part entre des commentaires...

hbachetti
Messages : 74
Enregistré le : 03 févr. 2018, 12:44
Localisation : Besançon
Contact :

Re: Problême avec la gestion de batterie

Message par hbachetti »

Salut.
Des éléments de réponse ICI ?
https://easydomoticz.com/forum/viewtopi ... 330#p48971
Voir ma réponse du 3 février.

Gilles BILLARD
Messages : 31
Enregistré le : 09 oct. 2017, 09:34
Localisation : 45km sud Paris

Re: Problême avec la gestion de batterie

Message par Gilles BILLARD »

Hello,
Le lien donné ci-dessus renvoie vers le même soucis.
J'ai expliqué comment je l'ai résolu:
-Pont réalisé avec un potentiomètre multitours de 10k;
-Retour a la masse du dit pont via une sortie numérique de l'Arduino pour diminuer la conso.
-Utilisation de la bibliothèque <avr/sleep.h>
-Optimisation des registres de l'Arduino.

Répondre