Comme annoncé, ce forum est passé en lecture seule au 1er janvier 2020. Désormais nous vous invitons à vous rendre sur notre nouvelle page communauté :
Image

A très bientôt !

Carte universelle pour nœud MySensor

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 : 642
Inscription : 28 juil. 2014, 18:54
Localisation : Massy (91)

Re: Carte universelle pour nœud MySensor

Message par pipersw » 27 mars 2017, 14:43

Il y a moyen que tu produises une version 3V 8MHz sur pile avec juste le SI7021 et le NRF24L01, sans pont diviseur pour relire la batterie (relecture via la mesure de la ref interne 1.1V) et sans I/O externe ni quartz.....pour consommer le moins possible sur pile et remplacer les sondes thermo Hygro en 433MHz....

Avatar de l’utilisateur
Laregie
Timide
Messages : 243
Inscription : 18 août 2014, 19:17
Localisation : A coté de Toulouse

Re: Carte universelle pour nœud MySensor

Message par Laregie » 27 mars 2017, 14:56

pipersw a écrit :Il y a moyen que tu produises une version 3V 8MHz sur pile avec juste le SI7021 et le NRF24L01, sans pont diviseur pour relire la batterie (relecture via la mesure de la ref interne 1.1V) et sans I/O externe ni quartz.....pour consommer le moins possible sur pile et remplacer les sondes thermo Hygro en 433MHz....
Sa doit être possible, il faut que je regarde cela en essayant de faire la carte la plus petite possible 8-)

Sur ma nouvelle carte, j'utilise le quartz interne à 8Mhz et je peux enlever tout ce que l'on n'a pas besoins pour faire un peu ce que tu demande avec un encombrement plus grand qu'une carte optimisée pour sonde de température et d’humidité.
Dernière édition par Laregie le 27 mars 2017, 15:07, édité 2 fois.

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

Re: Carte universelle pour nœud MySensor

Message par pipersw » 27 mars 2017, 15:04

Laregie a écrit :
pipersw a écrit :Il y a moyen que tu produises une version 3V 8MHz sur pile avec juste le SI7021 et le NRF24L01, sans pont diviseur pour relire la batterie (relecture via la mesure de la ref interne 1.1V) et sans I/O externe ni quartz.....pour consommer le moins possible sur pile et remplacer les sondes thermo Hygro en 433MHz....
Sa doit être possible, il faut que je regarde cela en essayant de faire la carte la plus petite possible 8-)

Sur ma nouvelle carte, j'utilise le quartz interne à 8Mhz et je peux enlever tout ce que l'on n'a pas besoins pour faire un peu ce que tu demande avec un encombrement plus grand qu'une carte optimisée pour sonde de température et d’humidité.
Super !! En repartant de ta UNIVMYS-PIL V2 ca fait une bonne base :mrgreen:

Ah, oui, pour la version pile, c'est possible de mettre un MOS en protection d'inversion de polarité comme sur l'alim du RPI B+ :
https://learn.adafruit.com/introducing- ... wer-supply
Image

Ca protège en cas d'inversion de polarité, et en passant on n'a pas la chute de tension de 0.6V comme avec une diode.
Un IRF ILRML2502 en NMOS ou un ILRML6401 en PMOS en SOT23 ca fait 80 mΩ at 2.7 V.
Dernière édition par pipersw le 27 mars 2017, 15:12, édité 1 fois.

Avatar de l’utilisateur
Laregie
Timide
Messages : 243
Inscription : 18 août 2014, 19:17
Localisation : A coté de Toulouse

Re: Carte universelle pour nœud MySensor

Message par Laregie » 27 mars 2017, 15:08

pipersw a écrit :
Laregie a écrit :
pipersw a écrit :Il y a moyen que tu produises une version 3V 8MHz sur pile avec juste le SI7021 et le NRF24L01, sans pont diviseur pour relire la batterie (relecture via la mesure de la ref interne 1.1V) et sans I/O externe ni quartz.....pour consommer le moins possible sur pile et remplacer les sondes thermo Hygro en 433MHz....
Sa doit être possible, il faut que je regarde cela en essayant de faire la carte la plus petite possible 8-)

Sur ma nouvelle carte, j'utilise le quartz interne à 8Mhz et je peux enlever tout ce que l'on n'a pas besoins pour faire un peu ce que tu demande avec un encombrement plus grand qu'une carte optimisée pour sonde de température et d’humidité.
Super !! En repartant de ta UNIVMYS-PIL V2 ca fait une bonne base :mrgreen:
Tu as un lien pour expliquer l'histoire de la relecture de la tension batterie via la mesure de la ref interne 1.1V.

Dans mon cas, je me suis basé sur ça: https://www.mysensors.org/build/battery

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

Re: Carte universelle pour nœud MySensor

Message par pipersw » 27 mars 2017, 15:16

Je ne saus plus où j'ai trouvé le code pour la ref interne, je l'ai intégré dans un de mes capteurs :

Code : Tout sélectionner

/**
   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.

 *******************************
   Resources:
   Wire.h (included with Arduino IDE)
   SparkFunTMP102.h

   Development environment specifics:
   Arduino 1.0+
   MySensors 2.0

   DESCRIPTION

   Capteur temperature et humidité sur pile
   capteur I2C TMP102
   Pro mini 8Mhz 3.3V, LDO et LED dessoudé, brown out modifié pour 1.8V
   Alimentation par 2 piles AA
   inversion polarité avec MOS (voir schema raspberry pi B+ sur Adafruit)

*/



// Enable debug prints to serial monitor
#define MY_DEBUG

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

#include <Wire.h>
#include <MySensors.h>
#include "SparkFunTMP102.h"

unsigned long SLEEP_TIME = 900000;  // sleep time between reads (seconds * 1000 milliseconds)

#define RELEASE "1.0"

#define CHILD_ID_TEMP 0
#define CHILD_ID_MULTIMETER 1

int oldBatteryPcnt = 0;
float oldtemperature = 0;

TMP102 sensor0(0x48); // Initialize sensor at I2C address 0x48

// Initialize temperature message
MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
MyMessage msgBatt(CHILD_ID_MULTIMETER, V_VOLTAGE);

void setup()
{
  sensor0.begin();  // Join I2C bus

  // Initialize sensor0 settings
  // These settings are saved in the sensor, even if it loses power

  // set the Conversion Rate (how quickly the sensor gets a new reading)
  //0-3: 0:0.25Hz, 1:1Hz, 2:4Hz, 3:8Hz
  sensor0.setConversionRate(2);

  //set Extended Mode.
  //0:12-bit Temperature(-55C to +128C) 1:13-bit Temperature(-55C to +150C)
  sensor0.setExtendedMode(0);
}

void presentation()
{
  // Send the sketch version information to the gateway and Controller
  sendSketchInfo("TMP102 Temperature Sensor", "1.0");

  //present sensor to controller
  present(CHILD_ID_TEMP, S_TEMP);
  present(CHILD_ID_MULTIMETER, S_MULTIMETER);

}

void loop()
{
#ifndef MY_OTA_FIRMWARE_FEATURE
  clock_prescale_set(clock_div_8); // Switch to 1Mhz internal clock for the reminder of the sketch, save power.
#endif


  //send a heartbeat to the controller (I'm alive !)
  void sendHeartbeat();

  // Turn sensor on to start temperature measurement.
  // Current consumtion typically ~10uA.
  sensor0.wakeup();

  // read temperature data
  float temperature = sensor0.readTempC();

  // Place sensor in sleep mode to save power.
  // Current consumtion typically <0.5uA.
  sensor0.sleep();

  // Measure battery voltage
  long vcc = readVcc();
  float batteryV = float(vcc)/1000.0f;
  
  // Calculate percentage
    vcc = vcc - 1900; // subtract 1.9V from vcc, as this is the lowest voltage we will operate at

    long batteryPcnt = vcc / 14.0;

  if (oldtemperature != temperature) {
    oldtemperature = temperature;
    send(msgTemp.set(temperature, 1));
    send(msgBatt.set(batteryV, 3));
  }

  if (oldBatteryPcnt != batteryPcnt) {
    // Power up radio after sleep
    sendBatteryLevel(batteryPcnt);
    oldBatteryPcnt = batteryPcnt;
  }

  sleep(SLEEP_TIME);
}

/*******************************************
 *
 * Internal battery ADC measuring 
 *
 *******************************************/
long readVcc() {
  // Read 1.1V reference against AVcc
  // set the reference to Vcc and the measurement to the internal 1.1V reference
  #if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
    ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  #elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
    ADMUX = _BV(MUX5) | _BV(MUX0);
  #elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
    ADcdMUX = _BV(MUX3) | _BV(MUX2);
  #else
    ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  #endif  

  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

}
C'est la fonction ReadVcc.
Je crois qu'on retrouve cette fonction dans le code de ESPEASY. Ca marche très bien.

Edit : je met à jour le code ce soir : il faut désactiver le ADC avant le sleep, et le réactiver au réveil. Comme cela on gagne en conso
Dernière édition par pipersw le 27 mars 2017, 15:25, édité 1 fois.

Avatar de l’utilisateur
Laregie
Timide
Messages : 243
Inscription : 18 août 2014, 19:17
Localisation : A coté de Toulouse

Re: Carte universelle pour nœud MySensor

Message par Laregie » 27 mars 2017, 15:22

pipersw a écrit :Je ne saus plus où j'ai trouvé le code pour la ref interne, je l'ai intégré dans un de mes capteurs :

Code : Tout sélectionner

/**
   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.

 *******************************
   Resources:
   Wire.h (included with Arduino IDE)
   SparkFunTMP102.h

   Development environment specifics:
   Arduino 1.0+
   MySensors 2.0

   DESCRIPTION

   Capteur temperature et humidité sur pile
   capteur I2C TMP102
   Pro mini 8Mhz 3.3V, LDO et LED dessoudé, brown out modifié pour 1.8V
   Alimentation par 2 piles AA
   inversion polarité avec MOS (voir schema raspberry pi B+ sur Adafruit)

*/



// Enable debug prints to serial monitor
#define MY_DEBUG

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

#include <Wire.h>
#include <MySensors.h>
#include "SparkFunTMP102.h"

unsigned long SLEEP_TIME = 900000;  // sleep time between reads (seconds * 1000 milliseconds)

#define RELEASE "1.0"

#define CHILD_ID_TEMP 0
#define CHILD_ID_MULTIMETER 1

int oldBatteryPcnt = 0;
float oldtemperature = 0;

TMP102 sensor0(0x48); // Initialize sensor at I2C address 0x48

// Initialize temperature message
MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
MyMessage msgBatt(CHILD_ID_MULTIMETER, V_VOLTAGE);

void setup()
{
  sensor0.begin();  // Join I2C bus

  // Initialize sensor0 settings
  // These settings are saved in the sensor, even if it loses power

  // set the Conversion Rate (how quickly the sensor gets a new reading)
  //0-3: 0:0.25Hz, 1:1Hz, 2:4Hz, 3:8Hz
  sensor0.setConversionRate(2);

  //set Extended Mode.
  //0:12-bit Temperature(-55C to +128C) 1:13-bit Temperature(-55C to +150C)
  sensor0.setExtendedMode(0);
}

void presentation()
{
  // Send the sketch version information to the gateway and Controller
  sendSketchInfo("TMP102 Temperature Sensor", "1.0");

  //present sensor to controller
  present(CHILD_ID_TEMP, S_TEMP);
  present(CHILD_ID_MULTIMETER, S_MULTIMETER);

}

void loop()
{
#ifndef MY_OTA_FIRMWARE_FEATURE
  clock_prescale_set(clock_div_8); // Switch to 1Mhz internal clock for the reminder of the sketch, save power.
#endif


  //send a heartbeat to the controller (I'm alive !)
  void sendHeartbeat();

  // Turn sensor on to start temperature measurement.
  // Current consumtion typically ~10uA.
  sensor0.wakeup();

  // read temperature data
  float temperature = sensor0.readTempC();

  // Place sensor in sleep mode to save power.
  // Current consumtion typically <0.5uA.
  sensor0.sleep();

  // Measure battery voltage
  long vcc = readVcc();
  float batteryV = float(vcc)/1000.0f;
  
  // Calculate percentage
    vcc = vcc - 1900; // subtract 1.9V from vcc, as this is the lowest voltage we will operate at

    long batteryPcnt = vcc / 14.0;

  if (oldtemperature != temperature) {
    oldtemperature = temperature;
    send(msgTemp.set(temperature, 1));
    send(msgBatt.set(batteryV, 3));
  }

  if (oldBatteryPcnt != batteryPcnt) {
    // Power up radio after sleep
    sendBatteryLevel(batteryPcnt);
    oldBatteryPcnt = batteryPcnt;
  }

  sleep(SLEEP_TIME);
}

/*******************************************
 *
 * Internal battery ADC measuring 
 *
 *******************************************/
long readVcc() {
  // Read 1.1V reference against AVcc
  // set the reference to Vcc and the measurement to the internal 1.1V reference
  #if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
    ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  #elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
    ADMUX = _BV(MUX5) | _BV(MUX0);
  #elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
    ADcdMUX = _BV(MUX3) | _BV(MUX2);
  #else
    ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  #endif  

  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

}
C'est la fonction ReadVcc.
Je crois qu'on retrouve cette fonction dans le code de ESPEASY. Ca marche très bien.
Ok merci, je vais regarder cela de plus près ainsi que la protection d'inversion de polarité.

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

Re: Carte universelle pour nœud MySensor

Message par pipersw » 27 mars 2017, 16:40

Au cas où: dernier code à jour avec mise en sommeil de l'ADC

Code : Tout sélectionner

/**
   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.

 *******************************
   Resources:

   Wire.h (included with Arduino IDE)
   SparkFunTMP102.h

   Development environment specifics:
   Arduino 1.0+
   MySensors 2.0

   DESCRIPTION

   Capteur temperature sur pile
   capteur I2C TMP102
   Pro mini 8Mhz 3.3V modifié en 1MHz interne, LDO et LED dessoudé
   Alimentation par 2 piles AA
   inversion polarité avec MOS (voir schema raspberry pi B+ sur Adafruit)

  Source pour descendre l'arduino a 1.8V et 1MHz en interne : https://forum.pimatic.org/topic/383/tips-battery-powered-sensors/2

  Ajouter dans Arduino\hardware\arduino\avr\boards.txt:

## Arduino Pro or Pro Mini (1.8V, 1MHz) w/ ATmega328
## --------------------------------------------------
pro.menu.cpu.1MHzatmega328=Optiboot internal 1MHz noBOD 9600baud

pro.menu.cpu.1MHzatmega328.upload.maximum_size=32256
pro.menu.cpu.1MHzatmega328.upload.maximum_data_size=2048

pro.menu.cpu.1MHzatmega328.upload.speed=9600

pro.menu.cpu.1MHzatmega328.bootloader.low_fuses=0x62
pro.menu.cpu.1MHzatmega328.bootloader.high_fuses=0xde
pro.menu.cpu.1MHzatmega328.bootloader.extended_fuses=0x07
pro.menu.cpu.1MHzatmega328.bootloader.file=optiboot/optiboot_atmega328_pro_1MHz.hex

pro.menu.cpu.1MHzatmega328.build.mcu=atmega328p
pro.menu.cpu.1MHzatmega328.build.f_cpu=1000000L

copier le contenu suivant dans un fichier optiboot_atmega328_pro_1MHz.hex sous 
/bootloaders/optiboot/:

  In this file add these hex codes and save it:

:107E0000112484B714BE81FFE6D085E08093810001
:107E100082E08093C00088E18093C10086E0809377
:107E2000C2008CE08093C4008EE0BFD0259A86E02B
:107E300023EC3FEF91E0309385002093840096BBC4
:107E4000B09BFECF1D9AA8958150A9F7EE24FF2480
:107E5000AA24A394B5E0CB2EA1E1BA2EF3E0DF2E45
:107E600098D0813461F495D0082FA5D0023829F13B
:107E7000013811F485E001C083E083D07FC08234F3
:107E800011F484E103C0853419F485E09CD076C0F8
:107E9000853579F47ED0E82EFF247BD0082F10E0C2
:107EA000102F00270E291F29000F111F84D07801E1
:107EB00065C0863521F484E086D080E0DECF84364C
:107EC00009F040C066D065D0082F63D080E0E81686
:107ED00080E7F80618F4F701D7BEE895C0E0D1E0D6
:107EE00058D089930C17E1F7F0E0EF16F0E7FF06A2
:107EF00018F0F701D7BEE8955ED007B600FCFDCFBD
:107F0000A701A0E0B1E02C9130E011968C9111977F
:107F100090E0982F8827822B932B1296FA010C0160
:107F2000A7BEE89511244E5F5F4FF1E0A038BF0770
:107F300051F7F701C7BEE89507B600FCFDCFB7BE05
:107F4000E8951CC0843761F424D023D0082F21D0B9
:107F500032D0F70185917F0114D00150D1F70EC0C6
:107F6000853739F428D08EE10CD085E90AD08FE02E
:107F700084CF813511F488E018D01DD080E101D084
:107F80006FCF982F8091C00085FFFCCF9093C600E3
:107F900008958091C00087FFFCCF8091C00084FDD0
:107FA00001C0A8958091C6000895E0E6F0E098E150
:107FB000908380830895EDDF803219F088E0F5DF4B
:107FC000FFCF84E1DECF1F93182FE3DF1150E9F7D5
:107FD000F2DF1F910895282E80E0E7DFEE27FF27CC
:027FE000099402
:027FFE0000057C
:0400000300007E007B
:00000001FF


pour programmer le bootloader, telecharger le sketch ArduinoISP sur un Uno, et programmer le mini pro
connecté au Uno en SPI en choisissant le programmateur Arduino as ISP

  */




// Enable debug prints to serial monitor
#define MY_DEBUG

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

#include <Wire.h>
#include <MySensors.h>
#include "SparkFunTMP102.h"
//#include <avr/power.h>

unsigned long SLEEP_TIME = 900000;  // sleep time between reads (seconds * 1000 milliseconds)

#define RELEASE "1.0"
#define CHILD_ID_TEMP 0
#define CHILD_ID_MULTIMETER 1

int oldBatteryPcnt = 0;
float oldtemperature = 0;

TMP102 sensor0(0x48); // Initialize sensor at I2C address 0x48

// Initialize temperature message
MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
MyMessage msgBatt(CHILD_ID_MULTIMETER, V_VOLTAGE);

void setup()
{
  sensor0.begin();  // Join I2C bus

  // Initialize sensor0 settings
  // These settings are saved in the sensor, even if it loses power
  // set the Conversion Rate (how quickly the sensor gets a new reading)
  //0-3: 0:0.25Hz, 1:1Hz, 2:4Hz, 3:8Hz
  sensor0.setConversionRate(2);

  //set Extended Mode.
  //0:12-bit Temperature(-55C to +128C) 1:13-bit Temperature(-55C to +150C)
  sensor0.setExtendedMode(0);
}

void presentation()
{
  // Send the sketch version information to the gateway and Controller
  sendSketchInfo("TMP102 Temperature Sensor", "1.0");

  //present sensor to controller
  present(CHILD_ID_TEMP, S_TEMP);
  present(CHILD_ID_MULTIMETER, S_MULTIMETER);
}

void loop()
{
  //send a heartbeat to the controller (I'm alive !)
  void sendHeartbeat();

  // Turn sensor on to start temperature measurement.
  // Current consumtion typically ~10uA.
  sensor0.wakeup();

  // read temperature data
  float temperature = sensor0.readTempC();

  // Place sensor in sleep mode to save power.
  // Current consumtion typically <0.5uA.
  sensor0.sleep();

  // Measure battery voltage
  float batteryV = readVcc();

  //convert to percent
  int MIN_V = 1800; //minimum battery voltage in mV
  int MAX_V = 3300; //maximum batterie voltage in mV
  int batteryPcnt = min(map(batteryV, MIN_V, MAX_V, 0, 100), 100);

  if (oldtemperature != temperature) {
    oldtemperature = temperature;
    send(msgTemp.set(temperature, 1));
    send(msgBatt.set(batteryV, 3));
  }

  if (oldBatteryPcnt != batteryPcnt) {
    // Power up radio after sleep
    sendBatteryLevel(batteryPcnt);
    oldBatteryPcnt = batteryPcnt;
  }

  //begin to sleeping cpu:
  ADCSRA &= ~(1 << ADEN); // adc off

  // go to sleep cpu
  sleep(SLEEP_TIME);

  //wake up cpu:
  ADCSRA |= (1 << ADEN); // adc on
}

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

   Internal battery ADC measuring

 *******************************************/
long readVcc() {

  // Read 1.1V reference against AVcc
  // set the reference to Vcc and the measurement to the internal 1.1V reference
#if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
  ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
#elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
  ADMUX = _BV(MUX5) | _BV(MUX0);
#elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
  ADcdMUX = _BV(MUX3) | _BV(MUX2);
#else
  ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
#endif

  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
}
Edit 19/04/2017: mise à jour du code
Dernière édition par pipersw le 19 avr. 2017, 09:57, édité 1 fois.

rol-rider
Actif
Messages : 5097
Inscription : 10 août 2014, 23:50

Re: Carte universelle pour nœud MySensor

Message par rol-rider » 27 mars 2017, 21:19

Je crois que pour la surveillance des piles/batterie, c'était ça.
viewtopic.php?f=35&t=2051
Avec deux solutions, celle par pont résistif et l'autre.

Envoyé de mon Nexus 7 en utilisant Tapatalk
RPI3 avec mSATA
RFXcom; RFLink; Z-Wave; Mysensors; ESPEasy
Noeuds MySensors-téléinfo-Température-Distance-Baromètre-relais
Noeuds ESPEasy-open-garage-relais-PIR-Station Météo

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

Re: Carte universelle pour nœud MySensor

Message par pipersw » 19 avr. 2017, 12:29

Laregie a écrit :
pipersw a écrit :Il y a moyen que tu produises une version 3V 8MHz sur pile avec juste le SI7021 et le NRF24L01, sans pont diviseur pour relire la batterie (relecture via la mesure de la ref interne 1.1V) et sans I/O externe ni quartz.....pour consommer le moins possible sur pile et remplacer les sondes thermo Hygro en 433MHz....
Sa doit être possible, il faut que je regarde cela en essayant de faire la carte la plus petite possible 8-)

Sur ma nouvelle carte, j'utilise le quartz interne à 8Mhz et je peux enlever tout ce que l'on n'a pas besoins pour faire un peu ce que tu demande avec un encombrement plus grand qu'une carte optimisée pour sonde de température et d’humidité.
Laregie, tu as pu regarder un peu ?
Tu fais le PCB sous Kicad ou sous une ancienne version de EagleCad (maintenant payante depuis le rachat) ?

Avatar de l’utilisateur
Laregie
Timide
Messages : 243
Inscription : 18 août 2014, 19:17
Localisation : A coté de Toulouse

Re: Carte universelle pour nœud MySensor

Message par Laregie » 20 avr. 2017, 00:18

pipersw a écrit :
Laregie a écrit :
pipersw a écrit :Il y a moyen que tu produises une version 3V 8MHz sur pile avec juste le SI7021 et le NRF24L01, sans pont diviseur pour relire la batterie (relecture via la mesure de la ref interne 1.1V) et sans I/O externe ni quartz.....pour consommer le moins possible sur pile et remplacer les sondes thermo Hygro en 433MHz....
Sa doit être possible, il faut que je regarde cela en essayant de faire la carte la plus petite possible 8-)

Sur ma nouvelle carte, j'utilise le quartz interne à 8Mhz et je peux enlever tout ce que l'on n'a pas besoins pour faire un peu ce que tu demande avec un encombrement plus grand qu'une carte optimisée pour sonde de température et d’humidité.
Laregie, tu as pu regarder un peu ?
Tu fais le PCB sous Kicad ou sous une ancienne version de EagleCad (maintenant payante depuis le rachat) ?
Je n'ai pas trop eu le temps pour l'instant.
Dès que j'ai du temps (et c'est rare en ce moment :( ) j'essaie de terminer mon Lametric DIY 8-)
J'utilise l'ancienne version de Kicad (celle avant la V4)

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

Re: Carte universelle pour nœud MySensor

Message par pipersw » 03 mai 2017, 17:22

Je confirme que la mesure de la tension via la référence interne (sans résistance externe) fonctionne bien c'est juste un peu moins précis mais ça consomme rien. Du coup j'ai découvert que mon ftdi avec choix de la tension 3.3v 5v delivre tout le temps 5v

vandenbusschel
Timide
Messages : 40
Inscription : 07 déc. 2015, 10:34

Re: Carte universelle pour nœud MySensor

Message par vandenbusschel » 09 mai 2017, 13:47

Bonjour

Est-il encore possible d'acheter des cartes 3v 8mhz sur pile ?
Ce serait pour une livraison vers la Belgique.

Merci

Lionel

Avatar de l’utilisateur
Laregie
Timide
Messages : 243
Inscription : 18 août 2014, 19:17
Localisation : A coté de Toulouse

Re: Carte universelle pour nœud MySensor

Message par Laregie » 09 mai 2017, 19:55

vandenbusschel a écrit :
09 mai 2017, 13:47
Bonjour

Est-il encore possible d'acheter des cartes 3v 8mhz sur pile ?
Ce serait pour une livraison vers la Belgique.

Merci

Lionel
Oui,
Je t'ai envoyé un mail

YannickF
Timide
Messages : 50
Inscription : 21 déc. 2014, 11:30

Re: Carte universelle pour nœud MySensor

Message par YannickF » 12 août 2017, 12:53

Salut

J'ai créé une carte plus ou moins universelle. Elle fonctionne avec 2 piles AA, oscillateur interne, la lecture de la tension se fait sans pont diviseur.
Je n'ai pas forcément cherché à miniaturiser au maximum.
https://oshpark.com/shared_projects/R4BmslTZ

Il y a juste un petit défaut pour les mises à jour du firmware via le port USB/Série : il manque un condensateur le long de la ligne Reset, et ça bloque le transfert. Il faut donc déconnecter la ligne RESET à la main dans la seconde qui suit le "téléversement".

Je vais mettre en ligne une version corrigée (celle là s'appelle corrigée car il y avait une erreur de sérigraphie)

ludoarchi
Timide
Messages : 41
Inscription : 30 janv. 2015, 12:57

Re: Carte universelle pour nœud MySensor

Message par ludoarchi » 13 oct. 2017, 01:06

salut
j ai malheureusement inversé les branchements alim sur ma carte UNIVMYS-5V V2
qui sent maintenant le grille !
est ce que je peux la recuperer en changeant 2 ou 3 composant?

@Laregie : est ce qu une version V3 et prevu en 5V ?

Merci

Avatar de l’utilisateur
Laregie
Timide
Messages : 243
Inscription : 18 août 2014, 19:17
Localisation : A coté de Toulouse

Re: Carte universelle pour nœud MySensor

Message par Laregie » 14 oct. 2017, 17:07

ludoarchi a écrit :
13 oct. 2017, 01:06
salut
j ai malheureusement inversé les branchements alim sur ma carte UNIVMYS-5V V2
qui sent maintenant le grille !
est ce que je peux la recuperer en changeant 2 ou 3 composant?

@Laregie : est ce qu une version V3 et prevu en 5V ?

Merci
La carte doit être récupérable.
Dis moi par où tu l'as alimenté ?

Pourquoi pas une version UNIVMYS-5V V3
Ça serait intéressant de savoir quelles améliorations à apporter par rapport à la V2.

ludoarchi
Timide
Messages : 41
Inscription : 30 janv. 2015, 12:57

Re: Carte universelle pour nœud MySensor

Message par ludoarchi » 17 oct. 2017, 15:06

Par les bornes oVdc et Vin ...
Ce serait peu etre une amelioration pour une V3 la protection d inversion d alimentation !
Ainsi qu un capteur humidité température intégré. ..
Merci

Avatar de l’utilisateur
Laregie
Timide
Messages : 243
Inscription : 18 août 2014, 19:17
Localisation : A coté de Toulouse

Re: Carte universelle pour nœud MySensor

Message par Laregie » 21 oct. 2017, 16:28

ludoarchi a écrit :
17 oct. 2017, 15:06
Par les bornes oVdc et Vin ...
Ce serait peu etre une amelioration pour une V3 la protection d inversion d alimentation !
Ainsi qu un capteur humidité température intégré. ..
Merci
Ça doit être le régulateur de tension qui à cramé.
Je vais regarder pour faire une UNIVMYS-5V V3 avec tes remarques.

ludoarchi
Timide
Messages : 41
Inscription : 30 janv. 2015, 12:57

Re: Carte universelle pour nœud MySensor

Message par ludoarchi » 23 oct. 2017, 14:30

👍👍👍

ludoarchi
Timide
Messages : 41
Inscription : 30 janv. 2015, 12:57

Re: Carte universelle pour nœud MySensor

Message par ludoarchi » 23 oct. 2017, 14:30

👍👍👍

Répondre

Revenir vers « [Plugin Tiers] MySensors »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 2 invités