Bonjour !
Je bosse en ce moment sur l'optimisation d'un circuit. En gros : j'ai déjà fini un exemplaire qui répond à ce qu'on lui demande sauf... Qu'il consomme trop (ça va tourner sur batterie) et qu'il est trop gros.
Donc : nouveau design de carte, mise à jour du code pour mettre l'ATmega en veille le plus souvent et sélection de composants qui consomment que dalle.
Maintenant ma demande d'aide : j'ai lu un énorme pavé sur les économies d'énergie avec l'arduino, mais c'est un peu pointu sur certains points et j'aurais besoin d'aide pour appliquer tout ça.
Mon besoin est le suivant : mettre l'arduino en veille, et si on appui sur un bouton, l'arduino se réveille pour effectuer une action, avant de se rendormir mais j'ai besoin que ce soit réactif (1ms max).
J'ajouterais un diagramme pour expliquer ça plus en détail.
Il y a bien un code donné sur ce magnifique article, mais je ne vois absolument pas comment l'implémenter dans mon code et... je ne le comprend pas.
Si vous pouvez me donner des pistes / m'expliquer ce fameux code ce serais vraiment sympa
#include <avr/sleep.h>
const byte LED = 9;
void wake ()
{
// cancel sleep as a precaution
sleep_disable();
// precautionary while we do other stuff
detachInterrupt (0);
} // end of wake
void setup ()
{
digitalWrite (2, HIGH); // enable pull-up
} // end of setup
void loop ()
{
pinMode (LED, OUTPUT);
digitalWrite (LED, HIGH);
delay (50);
digitalWrite (LED, LOW);
delay (50);
pinMode (LED, INPUT);
// disable ADC
ADCSRA = 0;
set_sleep_mode (SLEEP_MODE_PWR_DOWN);
sleep_enable();
// Do not interrupt before we go to sleep, or the
// ISR will detach interrupts and we won't wake.
noInterrupts ();
// will be called when pin D2 goes low
attachInterrupt (0, wake, FALLING);
EIFR = bit (INTF0); // clear flag for interrupt 0
// turn off brown-out enable in software
// BODS must be set to one and BODSE must be set to zero within four clock cycles
MCUCR = bit (BODS) | bit (BODSE);
// The BODS bit is automatically cleared after three clock cycles
MCUCR = bit (BODS);
// We are guaranteed that the sleep_cpu call will be done
// as the processor executes the next instruction after
// interrupts are turned on.
interrupts (); // one cycle
sleep_cpu (); // one cycle
} // end of loop
Source : Bible de l'Arduinécolo
Aussi, es-ce possible de piloter un mosfet comme j'en met la datasheet ci-dessous avec 3.3v ? En sachant que la tension à contrôler est de 5v et que le courant atteindra environ 1A en pic. Suis encore novice dans le décryptage de datasheet... J'ai un peu peur de la valeur qu'ils avancent (2.5v ?? Vraiment ?)
Merci !!
AO3401.pdf (498 KB)