Avant toute chose merci de (re)prendre connaissance de la charte et de la respecter.
Pour résumer :
- Avant de poser une question, je cherche si la réponse existe
- Je suis poli, courtois et je respecte tout un chacun sur le forum
- Si un post m'agace : je m'en éloigne plutôt que de répondre d'une façon qui pourrait être mal interprétée


Il n'est jamais du luxe que de rappeler des choses simples :
Courtoisie, amabilité, politesse et bonne humeur sont les maîtres mots pour un forum sympathique, bienveillant et accueillant :)

Toute la communauté vous remercie

[Tuto]Capteur température et humidité solaire sans batterie

Retrouvez ici des sujets concernant le protocole mySensors et les modules domotiques de type mySensors utilisés avec JEEDOM
/!\ Plugin mySensors non officiel
pipersw
Actif
Messages : 638
Inscription : 28 juil. 2014, 18:54
Localisation : Massy (91)

[Tuto]Capteur température et humidité solaire sans batterie

Message par pipersw » 02 mai 2018, 18:54

J'en avais marre de changer les piles des sondes Oregon sur le balcon tous les 6 mois, et du coup Madame m'a dit "mais pourquoi
tu ne fais pas une sonde sans pile ?". Pas bête, surtout que j'ai déjà de bons résultats avec un capteur MySensors sur 2xAA.

J'ai donc fais un cahier des charges:
- le capteur ne doit pas avoir de piles à changer
- autonomie de plusieurs jours si pas de soleil ou neige sur le panneau
- si possible pas sur batterie

Un DCDC classique a un bon rendement, mais il ne se déconnecte pas si la tension d'entrée passe sous un certain seuil, et il se met à consommer.
Je veux pouvoir utiliser une supercap à la place d'une batterie Lithium, car le nombre de cycles de charge/décharge est illimité.

Je m'oriente donc vers un Energy Harvester, qui est un DCDC spécifiquement concu pour grapiller la moindre parcelle d'énergie d'un panneau solaire,d'un piezo ou autre champ magnétique, bref d'une source très peu puissante, et qui déconnecte la sortie du DCDC si la tension d'entrée devient trop faible.

Le LTC3588 se trouve facilement pour pas trop cher, et il accepte une supercap en sortie et un panneau solaire de 5V à 16V, et peut fournir 100mA en sortie.
La tension de sortie est réglable (1.8V, 2.5V, 3.3V, 3.6V) par 2 broches D0 et D1.

Au niveau du panneau solaire, il faut avoir une petite taille et fournir du 5V. Je prends donc un 5V 1W pour mes essais.
Je pense que ca doit marcher avec une puissance plus faible sans soucis, par contre il faut au minimum 5V.

Au niveau de la supercap, celles en 5.5V ne sont pas prévues pour des courants supérieurs à une dizaine de microamperes, il faut donc partir sur des 2.7V qui supportent des courants plus élevées. Cela impose donc une tension de sortie de 2.5V.

Je pourrais partir sur une tension de sortie de 3.3V en mettant 2 capa en série, mais on a une capa 2x plus faible pour 5.5V et moins d'énergie stockée du coup (1x capa 10F x 2.5V = 25C au lieu de 2x capa 10F soit 5F x 3.3V = 16.5C) et ca prends plus de place.

Ensuite l'Arduino Pro Mini 3.3V 8Mhz avec régulateur et LED supprimé (cf https://www.mysensors.org/build/battery), avec changement de frequence interne à 1MHz avec un BOD 1.8V (on peut se mettre jusqu'à 4MHz à 1.8V sur l'arduino)(cf viewtopic.php?f=35&t=34755 ou viewtopic.php?t=5489).

Programmer le avant de le connecter à la supercap, sinon vous risquez de la faire exploser.

La broche A0 est utilisé pour relire la tension d'alimentation avec un pont diviseur 1Mo/680Ko.
La broche A1 est utilisé pour relire la tension du panneau solaire avec un pont diviseur 1Mo/220Ko.

Le NRF24L01 se cable classiquement (cf https://www.mysensors.org/build/connect_radio), ainsi que le capteur SI7021.

Ci dessous la photo du montage: le prototype actuel n'a plus qu'une seule supercap bleue.
Image

Le schéma:
schema.PNG
schema.PNG (906.87 Kio) Consulté 913 fois
Ne pas oublier de déplacer les ponts de soudure sur D0 et D1.
widget.PNG
widget.PNG (16.17 Kio) Consulté 912 fois
Test réalisé avec une supercap de 40F, mais une 10F doit suffire:
Image

Le code: https://github.com/pipersw/MySensorSI7021Solar
widget.PNG
widget.PNG (16.17 Kio) Consulté 912 fois
Image
Dernière édition par pipersw le 13 mai 2018, 13:06, édité 15 fois.

Avatar de l’utilisateur
Kermitlagrenouille
Actif
Messages : 1420
Inscription : 07 juin 2017, 20:46
Localisation : Alsace

Re: [Tuto]Capteur température et humidité solaire sans batterie

Message par Kermitlagrenouille » 02 mai 2018, 21:08

Bravo :shock: 8-)
Domotique Atlantique Concept depuis 1998 et toujours à la recherche d’autre utilisateur de ce système
Fan d'Apple & Homebridge

pipersw
Actif
Messages : 638
Inscription : 28 juil. 2014, 18:54
Localisation : Massy (91)

Re: [Tuto]Capteur température et humidité solaire sans batterie

Message par pipersw » 03 mai 2018, 00:58

mis à jour du code, pour les mesures de tension.

banban2211
Timide
Messages : 15
Inscription : 15 juin 2015, 22:34

Re: [Tuto]Capteur température et humidité solaire sans batterie

Message par banban2211 » 03 mai 2018, 08:07

Salut intéressant!
Tu envoi un message tous les combiens de temps ?

Envoyé de mon SM-A510F en utilisant Tapatalk


pipersw
Actif
Messages : 638
Inscription : 28 juil. 2014, 18:54
Localisation : Massy (91)

Re: [Tuto]Capteur température et humidité solaire sans batterie

Message par pipersw » 03 mai 2018, 09:15

Le réveil est fait toutes les 15minutes et seule les données qui ont changé sont envoyées.

Envoyé de mon FRD-L09 en utilisant Tapatalk


sansors
Timide
Messages : 24
Inscription : 24 sept. 2017, 16:23

Re: [Tuto]Capteur température et humidité solaire sans batterie

Message par sansors » 03 mai 2018, 11:07

Belle réalisation, merci pour le tuto :D

pipersw
Actif
Messages : 638
Inscription : 28 juil. 2014, 18:54
Localisation : Massy (91)

Re: [Tuto]Capteur température et humidité solaire sans batterie

Message par pipersw » 03 mai 2018, 11:48

Ca fonctionne aussi, vous pouvez faire ce que vous voulez avec l'Arduino, vous aurez juste les 2 capteurs à gérer.
Par contre il faudra retirer le LDO sur le GY-21P pour alimenter en direct les capteurs.
Et activer le sleep mode dans le BMP280.

pipersw
Actif
Messages : 638
Inscription : 28 juil. 2014, 18:54
Localisation : Massy (91)

Re: [Tuto]Capteur température et humidité solaire sans batterie

Message par pipersw » 03 mai 2018, 13:58

Tu peux passer sur une supercap 10f ca suffit. Sinon c'est bon

Envoyé de mon FRD-L09 en utilisant Tapatalk


pipersw
Actif
Messages : 638
Inscription : 28 juil. 2014, 18:54
Localisation : Massy (91)

Re: [Tuto]Capteur température et humidité solaire sans batterie

Message par pipersw » 04 mai 2018, 11:27

Petit ajout de courbes tension panneau solaire vs altitude du soleil.
La tension max adc pour le panneau solaire est 6.1V donc ca passe pile poil.

Envoyé de mon FRD-L09 en utilisant Tapatalk


pipersw
Actif
Messages : 638
Inscription : 28 juil. 2014, 18:54
Localisation : Massy (91)

Re: [Tuto]Capteur température et humidité solaire sans batterie

Message par pipersw » 04 mai 2018, 15:03

Edit: mise à jour du montage avec une supercap de 10F pour voir la différence.
IMG_20180504_145637.jpg
IMG_20180504_145637.jpg (216.86 Kio) Consulté 882 fois
Le dernier pic à droite est la chute de tension avec une 10F:
chart10F.jpeg
chart10F.jpeg (67.73 Kio) Consulté 866 fois
Ca tient bien pour 1 nuit, mais c'est la valeur minimum à prendre en capacité.

Avatar de l’utilisateur
MmX
Timide
Messages : 285
Inscription : 03 mars 2015, 23:09
Localisation : Rodez

Re: [Tuto]Capteur température et humidité solaire sans batterie

Message par MmX » 05 mai 2018, 22:12

Salut,

Je sais que c'est un peu tôt :) , mais j'aimerais connaitre le cycle sur une année entière avec les longues nuit du mois de décembre ainsi que les semaines pluvieuses d'hiver. Là ça va ! les jours rallongent, le ciel est clair ... Je pense qu'avec les 40F du début tu n'étais pas loin de la vérité.
Je ne sais pas si tu as calculé en fonction du taux d'ensoleillement de chez toi, de la conso de la station météo et du panneau solaire, ça doit être intéressant de faire un rapprochement calcul/réalité.

Il existe la librairie RunningAverage pour optimiser les envoies de messages des nœud sur batterie, si ça te dit je peu te donner un exemple avec MySensors.
je te laisse regarder...

Dans tout les cas ton projet m’intéresse, car j'en ai un similaire en cours d'étude. ;)

pipersw
Actif
Messages : 638
Inscription : 28 juil. 2014, 18:54
Localisation : Massy (91)

Re: [Tuto]Capteur température et humidité solaire sans batterie

Message par pipersw » 06 mai 2018, 08:52

MmX a écrit :Salut,

Je sais que c'est un peu tôt :) , mais j'aimerais connaitre le cycle sur une année entière avec les longues nuit du mois de décembre ainsi que les semaines pluvieuses d'hiver. Là ça va ! les jours rallongent, le ciel est clair ... Je pense qu'avec les 40F du début tu n'étais pas loin de la vérité.
Je ne sais pas si tu as calculé en fonction du taux d'ensoleillement de chez toi, de la conso de la station météo et du panneau solaire, ça doit être intéressant de faire un rapprochement calcul/réalité.

Il existe la librairie RunningAverage pour optimiser les envoies de messages des nœud sur batterie, si ça te dit je peu te donner un exemple avec MySensors.
je te laisse regarder...

Dans tout les cas ton projet m’intéresse, car j'en ai un similaire en cours d'étude. ;)
Je continuerai a poster tout au long de l'année le suivi des tensions.
Je n'ai pas bien compris à quoi sert ta librairie. Je veux bien que tu postes un exemple pour comprendre.

Envoyé de mon FRD-L09 en utilisant Tapatalk


pipersw
Actif
Messages : 638
Inscription : 28 juil. 2014, 18:54
Localisation : Massy (91)

Re: [Tuto]Capteur température et humidité solaire sans batterie

Message par pipersw » 06 mai 2018, 08:55

Avec la 40F il y a eu de la neige et des nuages donc c'est validé avec 40F. Je veux voir avec 10F.

Avec la 10F je chute de 0,2V en 11h, soit 41h pour atteindre 1,8V.

Avec la 80F je chute de 0,02V en 17h soit 670h pour atteindre 1,8V.

C'est bizarre c'est pas linéaire. Mais la résistance interne est plus faible si la capacité augmente.

Envoyé de mon FRD-L09 en utilisant Tapatalk






Dernière édition par pipersw le 06 mai 2018, 08:55, édité 1 fois.

Avatar de l’utilisateur
MmX
Timide
Messages : 285
Inscription : 03 mars 2015, 23:09
Localisation : Rodez

Re: [Tuto]Capteur température et humidité solaire sans batterie

Message par MmX » 06 mai 2018, 22:29

Bon, j'ai rien inventé, c'est juste un sketch existant que je me suis approprié. La lib Average Running sert juste à faire une moyenne glissante sur les valeurs d'humidité et en fonction d'un seuil, envoie la valeur. Cela évite d'avoir un message envoyé pour 1% de différence. Je ne sais pas si je me suis bien exprimé, mais tu comprendra en regardant le sketch.

Dans le sketch, le sleep est de 5 mn, si les valeurs ont un écart supérieur ou inférieur du seuil (par ex: pour la tempétature 0.3°), le message est envoyé, sinon rien. Si au bout de 3 heures aucuns send n'est fait, le node envoie les valeurs un peu comme un heartbeat.
Pour la valeur de la référence interne, celle ci est envoyé 1 fois par semaine.

J'utilise ce sketch pour mes nodes à piles à base de 328P @1Mhz et SI7021 pour une conso de 10uA.
Pour exemple, le plus vieux date du 21 août 2017 et le niveau est à 93%. Je pense que les piles seront périmées avant d'être vides. :P

Code : Tout sélectionner

/* Sketch with Si7021 and battery monitoring.
  by m26872, 20151109
*/
#define MY_RADIO_NRF24

#include <MySensors.h>
#include <Wire.h>
#include <SI7021.h>
#include <SPI.h>
#include <RunningAverage.h>

//#define DEBUG

#ifdef DEBUG
#define DEBUG_SERIAL(x) Serial.begin(x)
#define DEBUG_PRINT(x) Serial.print(x)
#define DEBUG_PRINTLN(x) Serial.println(x)
#else
#define DEBUG_SERIAL(x)
#define DEBUG_PRINT(x)
#define DEBUG_PRINTLN(x)
#endif

//#define NODE_ID 132             // <<<<<<<<<<<<<<<<<<<<<<<<<<<   Enter Node_ID
#define CHILD_ID_TEMP 0
#define CHILD_ID_HUM 1
// #define SLEEP_TIME 15000 // 15s for DEBUG
#define SLEEP_TIME 300000   // 5 min
#define FORCE_TRANSMIT_CYCLE 36  // 5min*12=1/hour, 5min*36=1/3hour 
#define BATTERY_REPORT_CYCLE 2880   // Once per 5min   =>   12*24*7 = 2016 (one report/week)
#define VMIN 1900
#define VMAX 3300
#define HUMI_TRANSMIT_THRESHOLD 3.0  // THRESHOLD tells how much the value should have changed since last time it was transmitted.
#define TEMP_TRANSMIT_THRESHOLD 0.3
#define AVERAGES 2

int batteryReportCounter = BATTERY_REPORT_CYCLE - 1;  // to make it report the first time.
int measureCount = 0;
float lastTemperature = -100;
int lastHumidity = -100;

RunningAverage raHum(AVERAGES);
SI7021 humiditySensor;


MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP); // Initialize temperature message
MyMessage msgHum(CHILD_ID_HUM, V_HUM);

void setup() {
  DEBUG_SERIAL(4800);    // <<<<<<<<<<<<<<<<<<<<<<<<<< Note BAUD_RATE in MySensors.h
  DEBUG_PRINTLN("Serial started");

  DEBUG_PRINT("Voltage: ");
  DEBUG_PRINT(readVcc());
  DEBUG_PRINTLN(" mV");
  /*
    delay(500);
    DEBUG_PRINT("Internal temp: ");
    DEBUG_PRINT(GetInternalTemp()); // Probably not calibrated. Just to print something.
    DEBUG_PRINTLN(" *C");
  */
  delay(500); // Allow time for radio if power useed as reset


  DEBUG_PRINT("Node and "); DEBUG_PRINTLN("2 children presented.");

  raHum.clear();

}

void presentation()
{
  sendSketchInfo("SI7021", "1.0");
  present(CHILD_ID_TEMP, S_TEMP);   // Present sensor to controller
  present(CHILD_ID_HUM, S_HUM);
}

void loop() {

  measureCount ++;
  batteryReportCounter ++;
  bool forceTransmit = false;

  if (measureCount > FORCE_TRANSMIT_CYCLE) {
    forceTransmit = true;
  }
  sendTempHumidityMeasurements(forceTransmit);
  /*
    // Read and print internal temp
    float temperature0 = static_cast<float>(static_cast<int>((GetInternalTemp()+0.5) * 10.)) / 10.;
    DEBUG_PRINT("Internal Temp: "); DEBUG_PRINT(temperature0); DEBUG_PRINTLN(" *C");
  */
  // Check battery
  if (batteryReportCounter >= BATTERY_REPORT_CYCLE) {
    long batteryVolt = readVcc();
    DEBUG_PRINT("Battery voltage: "); DEBUG_PRINT(batteryVolt); DEBUG_PRINTLN(" mV");
    uint8_t batteryPcnt = constrain(map(batteryVolt, VMIN, VMAX, 0, 100), 0, 255);
    DEBUG_PRINT("Battery percent: "); DEBUG_PRINT(batteryPcnt); DEBUG_PRINTLN(" %");
    sendBatteryLevel(batteryPcnt);
    batteryReportCounter = 0;
  }

  sleep(SLEEP_TIME);
}

// function for reading Vcc by reading 1.1V reference against AVcc. Based from http://provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-voltage/
// To calibrate reading replace 1125300L with scale_constant = internal1.1Ref * 1023 * 1000, where internal1.1Ref = 1.1 * Vcc1 (per voltmeter) / Vcc2 (per readVcc() function)
long readVcc() {
  // set the reference to Vcc and the measurement to the internal 1.1V reference
  ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  delay(2); // Wait for Vref to settle
  ADCSRA |= _BV(ADSC); // Start conversion
  while (bit_is_set(ADCSRA, ADSC)); // measuring
  uint8_t low  = ADCL; // must read ADCL first - it then locks ADCH
  uint8_t high = ADCH; // unlocks both
  long result = (high << 8) | low;
  result = 1125300L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000
  return result; // Vcc in millivolts
}
// function for reading internal temp. From http://playground.arduino.cc/Main/InternalTemperatureSensor
double GetInternalTemp(void) {  // (Both double and float are 4 byte in most arduino implementation)
  unsigned int wADC;
  double t;
  // The internal temperature has to be used with the internal reference of 1.1V. Channel 8 can not be selected with the analogRead function yet.
  ADMUX = (_BV(REFS1) | _BV(REFS0) | _BV(MUX3));   // Set the internal reference and mux.
  ADCSRA |= _BV(ADEN);  // enable the ADC
  delay(20);            // wait for voltages to become stable.
  ADCSRA |= _BV(ADSC);  // Start the ADC
  while (bit_is_set(ADCSRA, ADSC));  // Detect end-of-conversion
  wADC = ADCW;   // Reading register "ADCW" takes care of how to read ADCL and ADCH.
  t = (wADC - 88.0 ) / 1.0;   // The default offset is 324.31.
  return (t);   // The returned temperature in degrees Celcius.
}

/*********************************************
 * * Sends temperature and humidity from Si7021 sensor
   Parameters
   - force : Forces transmission of a value (even if it's the same as previous measurement)
 *********************************************/
void sendTempHumidityMeasurements(bool force) {
  bool tx = force;

  si7021_env data = humiditySensor.getHumidityAndTemperature();

  float temperature = data.celsiusHundredths / 100.0;
  DEBUG_PRINT("T: "); DEBUG_PRINTLN(temperature);
  float diffTemp = abs(lastTemperature - temperature);
  DEBUG_PRINT(F("TempDiff :")); DEBUG_PRINTLN(diffTemp);
  if (diffTemp > TEMP_TRANSMIT_THRESHOLD || tx) {
    send(msgTemp.set(temperature, 1));
    lastTemperature = temperature;
    measureCount = 0;
    DEBUG_PRINTLN("T sent!");
  }

  int humidity = data.humidityPercent;
  DEBUG_PRINT("H: "); DEBUG_PRINTLN(humidity);
  raHum.addValue(humidity);
  humidity = raHum.getAverage();  // MA sample imply reasonable fast sample frequency
  float diffHum = abs(lastHumidity - humidity);
  DEBUG_PRINT(F("HumDiff  :")); DEBUG_PRINTLN(diffHum);
  if (diffHum > HUMI_TRANSMIT_THRESHOLD || tx) {
    send(msgHum.set(humidity));
    lastHumidity = humidity;
    measureCount = 0;
    DEBUG_PRINTLN("H sent!");
  }

}
Perso je pense que ça peu être utile, à toi d'en juger ;)

pipersw
Actif
Messages : 638
Inscription : 28 juil. 2014, 18:54
Localisation : Massy (91)

Re: [Tuto]Capteur température et humidité solaire sans batterie

Message par pipersw » 14 mai 2018, 15:09

C'est un boitier pour sonde météo.
https://www.universmeteo.com/d...re-sc- ... hygro.html

Envoyé de mon FRD-L09 en utilisant Tapatalk


Dernière édition par pipersw le 14 mai 2018, 15:09, édité 1 fois.

pipersw
Actif
Messages : 638
Inscription : 28 juil. 2014, 18:54
Localisation : Massy (91)

Re: [Tuto]Capteur température et humidité solaire sans batterie

Message par pipersw » 14 mai 2018, 16:08

Sur mon montage il faut mettre un interrupteur pour déconnecter la supercap de l'arduino, car sinon quand on branche le ftdi on envoit du 3.3V.

Envoyé de mon FRD-L09 en utilisant Tapatalk


pipersw
Actif
Messages : 638
Inscription : 28 juil. 2014, 18:54
Localisation : Massy (91)

Re: [Tuto]Capteur température et humidité solaire sans batterie

Message par pipersw » 14 mai 2018, 16:09

Sur mon montage il faut mettre un interrupteur pour déconnecter la supercap de l'arduino, car sinon quand on branche le ftdi on envoit du 3.3V.

Envoyé de mon FRD-L09 en utilisant Tapatalk


pipersw
Actif
Messages : 638
Inscription : 28 juil. 2014, 18:54
Localisation : Massy (91)

Re: [Tuto]Capteur température et humidité solaire sans batterie

Message par pipersw » 14 mai 2018, 18:44

Tu n'auras aucun soucis.
Partage ton sketch quand il tournera.

Envoyé de mon FRD-L09 en utilisant Tapatalk


pipersw
Actif
Messages : 638
Inscription : 28 juil. 2014, 18:54
Localisation : Massy (91)

Re: [Tuto]Capteur température et humidité solaire sans batterie

Message par pipersw » 15 mai 2018, 22:28

C'est un condensateur 100nF pour filtrer le signal sur A0.

J'ai ajouté un interrupteur pour déconnecter l'arduino de la supercap pour le reprogrammer avec le ftdi (dommage que l'OTA ne soit pas pris en charge).

Un fil relit la broche EN (en vrai le powergood) à la broche 3 de l'arduino pour relire l'état pour un test. Ca ne sert à rien c'est juste pour remonter l'état sous Jeedom sous forme d'un relai fictif.

Envoyé de mon FRD-L09 en utilisant Tapatalk



sansors
Timide
Messages : 24
Inscription : 24 sept. 2017, 16:23

Re: [Tuto]Capteur température et humidité solaire sans batterie

Message par sansors » 17 mai 2018, 01:13

Merci encore pour ce tuto bien expliqué, après avoir regardé un peu les différents board avec le ltc, aucunes ne semble suivre le schéma préconisé dans le datasheet pour une utilisation solaire, du coup j'ai fait un pcb ^^

Dès que je reçois tout ca je tenterais de réaliser également mon installation, puis voir pour porter le tout sur du nrf5.

Pour le LTC, le moins cher fdpin est chez Arrow, ou alors il faut en prendre une belle quantitée pour être au franco chez mouser.

Répondre

Revenir vers « [Plugin Tiers] MySensors »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité