Tutorial Arduino #28

Sleep mode e risveglio tramite gli interrupt

Sleep mode e risveglio tramite gli interrupt - Tutorial Arduino #28
Tutorial Arduino #27: WiFi ESP8266
Tutorial Arduino #27
WiFi ESP8266
Tutorial Arduino #29: Tastierino alfanumerico
Tutorial Arduino #29
Tastierino alfanumerico

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.

Scarica le risorse

Progetto: Interrupt

Schema

Componenti

Codice

#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;}
scarica il file

Progetto: Sleep mode

Schema

Componenti

Codice

#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();}
scarica il file

Progetto: Consumo in modalità sleep

Schema

Componenti

Codice

#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_BUILTINOUTPUT);  digitalWrite(LED_BUILTINLOW);  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();}
scarica il file

Arduino Software Hero

Vuoi imparare a programmare Arduino, ma non sai da dove cominciare?

Iscriviti al corso online

Libri consigliati


Tutorial consigliati

E-commerce di elettronica

Sul nostro negozio online trovi tutti i componenti usati nei tutorial.
Inoltre hai un'ampia scelta di prodotti tra:

  • Arduino
  • Raspberry Pi
  • Sensori
  • Robotica
  • Componenti elettronici
  • Accessori

Compra online, ricevi comodamente a casa

Visita il negozio