Dans le cadre d'un projet de thermomètre Int/Ext j'utilise comme thermomètre Ext , une carte arduino nano, une sonde ds18b20 et un transmetteur 433 Mhz, tout fonctionne sans soucis, mon problème vient de la consommation du module Ext qui se fait via 6 piles 1.2 V AA.
Afin de réduire la consommation de la carte arduino Nano, j'ai utiliser un code qui normalement passe celle-ci est veille profonde pendant 60s, puis envoi température au récepteur via 433 Mhz, puis de nouveau veille,etc..
J'ai mesurer le courant utiliser par la nano est j'ai 6 mA en veille et une 20 de mA au réveil durant 1s pour transmission température, je suis étonné par la valeur de 6 mA en veille , car je pensé avoir bien moins , que faire pour réduire cette valeur, car j'ai lu sur plusieurs sites internet que l'on pouvait avoir des courant très faible en veille profonde ?.
Avez des pistes de solutions ou d' idées ?
Merci
[code]
#include <VirtualWire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <avr/sleep.h>
#include <avr/wdt.h>
int Nombre = 0;
long temps;
char Message[VW_MAX_MESSAGE_LEN];
#define ONE_WIRE_BUS 6
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
char str_temp[6];
ISR (WDT_vect)
{
wdt_disable(); //désactive le watchdog
}
void mywatchdogenable()
{
MCUSR = 0;
WDTCSR = _BV (WDCE) | _BV (WDE);
WDTCSR = _BV (WDIE) | _BV (WDP3) | _BV (WDP0); //délai de 8 secondes
wdt_reset();
ADCSRA = 0; //désactive ADC
set_sleep_mode (SLEEP_MODE_PWR_DOWN);
sleep_enable();
MCUCR = _BV (BODS) | _BV (BODSE);
MCUCR = _BV (BODS);
sleep_cpu();
sleep_disable();
}
void setup()
{
Serial.begin(9600);
vw_setup(2000); // Bits par seconde
sensors.begin();
temps=millis();
}
void loop()
{
sensors.requestTemperatures();
float temp=sensors.getTempCByIndex(0);
dtostrf(temp,5, 2, str_temp);
Serial.println(str_temp);
vw_send((uint8_t *)str_temp, strlen(str_temp));
vw_wait_tx(); // On attend la fin de la transmission
temps=millis();
for (int i=0; i < 8; i++)
{
mywatchdogenable();
}
}
La nano n'est pas la meilleure candidate pour faire une carte économe.
Il vaut mieux partir d'une pro-mini. Celle-ci ne possède pas de convertisseur USB<-->Série ce qui diminue sa consommation. Tu peux trouver des versions 8MHz au lieu de 16Hz ce qui réduit encore la consommation globale de la carte. Pour lire un capteur de température cela n'aura pas d'incidence.
De plus il faut supprimer tout ce qui est inutile (comme les LEDs par exemple)
Dans le setup, il faut supprimer les périphériques que tu n'utilises pas dans ton application (ADC, comparateur, ...).
Avant la mise en veille, il faut désactiver les périphériques que tu utilises mais qui n'ont pas d'utilité pendant la veille.
Tu peux consulter le site de Nick Gammon pour avoir une analyse complète du problème de la veille.
Je vais aller voir le site que tu donne , par contre la LED power de la nano est désactiver (retirer) ce qui ma permis de gagner 3 mA, les 6 mA sont LED retirer.
Concernant la pro-mini il faut un convertisseur Serie -USB, lequel choisir, car j'ai lu que la version basic, nécessite une manipulation pour téléverser le code.
Salut,
la manipulation pour téléverser le code est des plus simples... Il suffit de relâcher (se qui implique de l'avoir enfoncer avant^) le bouton reset lorsque l'IDE commence le téléversement vers l'µc. Les convertisseurs USB/TTL "moins basic" font ce reset automatiquement.
Le faite de baisser la fréquence permet de baisser la consommation comme dit plus haut. Je rajouterai qu'as cette fréquence (plus basse), tu pourra aussi baisser la tension d'alimentation qui fera encore baisser la consommation... De mémoire la mini-pro a son µc a 5V contre 3.3V pour la mini.
Et que pour baisser la fréquence système il existe une configuration des fuses qui introduit un diviseur par 8. Avec le même résonnateur on passe la fréquence système de 16 à 2 MHz.
Si la précision d'un résonnateur n'est pas nécessaire il est possible d'utiliser l'oscillateur interne à 8MHz (toujours avec les fuses) ce qui couplé au diviseur par 8 donne une fréquence système à 1MHz.
Pourquoi baisser la fréquence fait baisser la comsommation ?
Les micro sont en techno CMOS (Mos complémentaires) où un seul des transistors est conducteur. Pendant les états stables 1 ou 0 aucun courant ne circule.
La consomation a lieu pendant les changements d'états : pendant un temps très court les deux transistors sont simultanément passant (l'un se ferme, l'autre s'ouvre).
Donc plus la fréquence est élevée plus il y a de changement d'état et plus il y a de courant consommé.
Cela ne servira a rien d'avoir un micro qui consomme quelques micro ampere en mode sleep alors que le module radio quant a lui en consomme mille fois plus.
La question porte sur la consommation de l'arduino. Rien ne te permet de supposer qu'il n'y a pas une solution déjà envisagée (voir appliquée) concernant l'émetteur.
Le post est une question qui suppose que l'arduino consomme trop en mode sleep, mais peut être que le problème ne vient pas de la carte arduino mais des périphériques autour.
En fouillant légèrement sur internet on remarque que le module radio consomme de 3 a 5mA en Quiescent Current.
Débrancher le module radio et faire une mesure du courant permettra de savoir si j'ai tort ou pas.
Je doit refaire des mesures, mais je crois que même sans le module 433, j'avais une conso de 6 mA, donc c’était la nono qui consomme le plus vis à vis du reste, ce que l'on retrouve bien quand celle ci est en veille.