Indice
Descrizione
Puoi ridurre il consumo energetico di Arduino attivando la modalità sleep. In questo modo il microcontrollore ferma tutte le attività e interrompe l'esecuzione dello sketch.
Usando degli interrupt puoi risvegliare la scheda e farle riprendere il normale funzionamento dal punto in cui si è fermata.
Seguendo questo video tutorial impari a mettere in pratica tutte queste tecniche e ridurre il consumo di corrente della tua scheda. Inoltre scopri alcuni consigli per modificare il circuito e risparmiare ulteriormente energia.
#define BUTTON_PIN 2#define LED_PIN 9 volatile byte flag = 0; void setup() { Serial.begin(9600); pinMode(BUTTON_PIN, INPUT); pinMode(LED_PIN, OUTPUT); attachInterrupt(digitalPinToInterrupt(BUTTON_PIN), callback, RISING);} void loop() { if (flag) { Serial.println("Cambio"); digitalWrite(LED_PIN, !digitalRead(LED_PIN)); delay(200); flag = 0; } Serial.println("..."); delay(500);} void callback() { flag = 1;}#include <avr/sleep.h> #define SLEEP_PIN 3#define WAKEUP_PIN 2#define LED_PIN 9 volatile byte flag = 0; void setup() { Serial.begin(9600); pinMode(SLEEP_PIN, INPUT); pinMode(WAKEUP_PIN, INPUT); pinMode(LED_PIN, OUTPUT); digitalWrite(LED_PIN, HIGH); attachInterrupt(digitalPinToInterrupt(SLEEP_PIN), sleepCallback, RISING);} void loop() { if (flag) { Serial.println("Sleep mode attivato"); digitalWrite(LED_PIN, LOW); sleep(); digitalWrite(LED_PIN, HIGH); Serial.println("Sleep mode terminato"); } Serial.println("..."); delay(500);} void sleepCallback() { flag = 1;} void wakeupCallback() { flag = 0;} void sleep() { Serial.flush(); sleep_enable(); set_sleep_mode(SLEEP_MODE_PWR_DOWN); detachInterrupt(digitalPinToInterrupt(SLEEP_PIN)); attachInterrupt(digitalPinToInterrupt(WAKEUP_PIN), wakeupCallback, RISING); delay(200); sleep_cpu(); // codice eseguito dopo il risveglio detachInterrupt(digitalPinToInterrupt(WAKEUP_PIN)); attachInterrupt(digitalPinToInterrupt(SLEEP_PIN), sleepCallback, RISING); sleep_disable();}#include <avr/sleep.h> #define SLEEP_PIN 3#define WAKEUP_PIN 2 volatile byte flag = 0; void setup() { pinMode(SLEEP_PIN, INPUT); pinMode(WAKEUP_PIN, INPUT); pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, LOW); attachInterrupt(digitalPinToInterrupt(SLEEP_PIN), sleepCallback, RISING);} void loop() { if (flag) { sleep(); } delay(10);} void sleepCallback() { flag = 1;} void wakeupCallback() { flag = 0;} void sleep() { sleep_enable(); set_sleep_mode(SLEEP_MODE_PWR_DOWN); detachInterrupt(digitalPinToInterrupt(SLEEP_PIN)); attachInterrupt(digitalPinToInterrupt(WAKEUP_PIN), wakeupCallback, RISING); delay(200); sleep_cpu(); // codice eseguito dopo il risveglio detachInterrupt(digitalPinToInterrupt(WAKEUP_PIN)); attachInterrupt(digitalPinToInterrupt(SLEEP_PIN), sleepCallback, RISING); sleep_disable();}In qualità di Affiliato Amazon riceviamo un guadagno dagli acquisti idonei