Outils pour utilisateurs


Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
diy:projetdomo:jeedom:noeudspersos:mailboxnode [2015/10/11 17:45]
admin [Le fonctionnement]
diy:projetdomo:jeedom:noeudspersos:mailboxnode [2019/11/26 12:26] (Version actuelle)
admin
Ligne 23: Ligne 23:
 ==== Code ==== ==== Code ====
  
 +source : forum JEEDOM
 +<​code>​
 +//          mySensors - Noeud alimenté par piles
 +// °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
 +// sketch 2/2 (lancer d'​abord le sketch 1/2 pour la calibration)
 +// sketch à completer en fonction du capteur utilisé
 +// (uniquement la partie gestion des piles est développée)
 +//​---------------------------------------------------------------
  
 +
 +// Enable debug prints
 +#define MY_DEBUG
 +
 +// Enable and select radio type attached
 +#define MY_RADIO_NRF24
 +
 +// INCLUDES
 +#include <​MySensors.h>​
 +#include <​SPI.h>​
 +#include <​Vcc.h>​
 +
 +// Initialisations MySensors
 +#define ID_BatPcnt 1
 +#define ID_Bat 2
 +
 +#define DIGITAL_INPUT_SENSOR 3   // The digital input you attached your motion sensor. ​ (Only 2 and 3 generates interrupt!)
 +#define CHILD_ID 0   // Id of the sensor child
 +
 +
 +// Initialisations pour la gestion des piles
 +// Tension mini en-dessous de laquelle le hardware ne fonctionne plus :
 +// La limite est de 1.8V pour les piles alcalines, 1.9V pour le module nRF24L01+
 +// 1.8V pour l'​ATMega328 en 4 MHz (et moins) et 2.4V en 8MHz :
 +const float VccMin ​  = 2.4;             // Vcc mini attendu, en Volts.
 +const float VccMax ​  = 3.85;           // Vcc Maximum attendu, en Volts (2 piles AA neuves)
 +const float VccCorrection = 3.80/3.83; // calibration : Vcc mesuré au multimètre / Vcc mesuré par l'​Arduino par vcc.Read_Volts() dans sketch 1/2
 +Vcc vcc(VccCorrection);​
 +
 +// Initialisations générales
 +// Durée de sommeil entre deux mesures, en millisecondes
 +unsigned long SLEEP_TIME = 86400000; // 1 fois par jour 
 +
 +MyMessage msg(CHILD_ID,​ V_TRIPPED);
 +MyMessage msgBAT_PCNT(ID_BatPcnt,​V_VAR1);​ // on utilise le type V_VAR1 pour le % de charge des piles
 +MyMessage msgBAT(ID_Bat,​V_VAR2); ​         // on utilise le type V_VAR2 pour la tension des piles// Initialize motion message
 +
 +
 +
 +void presentation()
 +{
 +  // Send the sketch version information to the gateway and Controller
 +  sendSketchInfo("​BAL",​ "​1.0"​);​
 +  ​
 +  // Register all sensors to gw (they will be created as child devices)
 +  present(CHILD_ID,​ S_MOTION);
 +  present(ID_BatPcnt,​ S_CUSTOM); ​ // type S_CUSTOM pour le capteur "% de charge"​
 +  present(ID_Bat,​ S_CUSTOM); ​     // type S_CUSTOM pour le capteur "​tension"​
 +}
 +
 +
 +
 +void loop()
 +
 +  // PARTIE BATTERIE
 +    // mesure de Vcc
 +  float v = vcc.Read_Volts();​
 +  // calcul du % de charge batterie
 +  float p = 100 * ((v - VccMin) / (VccMax - VccMin));
 +  // On envoie les données des capteurs et de l'​état de la batterie au Gateway
 +  //​gw.sendBatteryLevel(p); ​ // Inutile...
 +  send(msgBAT_PCNT.set(p,​ 1)); // 1 décimale
 +  send(msgBAT.set(v,​ 3));      // 2 décimales
 +
 +  // PARTIE OUVERTURE BAL
 +  send(msg.set(1));​
 +  delay(5000);​
 + // Changement de l'​horloge interne : 8 MHz --> 1 MHz (voir datasheet ATMEL section 9.12.2)
 +  //int oldClkPr = CLKPR; ​ // sauvegarde du registre de prescaler d'​horloge CLKPR
 +  //CLKPR = 0x80;          // bit 7 de CLKPR à 1 et les autres à 0 pour indiquer un chagement de prescaler
 +  //CLKPR = 0x03;          // division par 8 de l'​horloge 8MHz --> 1MHz
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 + // on se met en sommeil
 +  sleep(digitalPinToInterrupt(DIGITAL_INPUT_SENSOR),​ HIGH, SLEEP_TIME);​
 + // Restauration de la fréquence originale à la sortie du mode veille
 +  //CLKPR = 0x80;          // bit 7 de CLKPR à 1 et les autres à 0 pour indiquer un chagement de prescaler
 +  //CLKPR = oldClkPr; ​     // on restore l'​ancien facteur prescaler
 +}
 +</​code>​