- Modalità di sospensione di Arduino
- Componenti richiesti
- Amperometro USB
- Schema elettrico
- Spiegazione del codice
Il consumo di energia è un problema critico per un dispositivo che funziona continuamente per un lungo periodo senza essere spento. Quindi, per superare questo problema, quasi tutti i controller sono dotati di una modalità di sospensione, che aiuta gli sviluppatori a progettare gadget elettronici per un consumo energetico ottimale. La modalità Sleep mette il dispositivo in modalità di risparmio energetico spegnendo il modulo inutilizzato.
In precedenza abbiamo spiegato la modalità di sospensione profonda in ESP8266 per il risparmio energetico. Oggi impareremo le modalità di sospensione di Arduino e dimostreremo il consumo di energia utilizzando l'amperometro. Una modalità di sospensione di Arduino è anche denominata modalità di risparmio energetico di Arduino o modalità di standby di Arduino.
Modalità di sospensione di Arduino
Le modalità di sospensione consentono all'utente di interrompere o spegnere i moduli inutilizzati nel microcontrollore, riducendo in modo significativo il consumo di energia. Arduino UNO, Arduino Nano e Pro-mini sono forniti con ATmega328P e ha un rilevatore di Brown-out (BOD) che monitora la tensione di alimentazione al momento della modalità sleep.
Ci sono sei modalità di sospensione in ATmega328P:
Per entrare in una qualsiasi delle modalità di sospensione, è necessario abilitare il bit di sospensione nel registro di controllo della modalità di sospensione (SMCR.SE). Quindi i bit di selezione della modalità sleep selezionano la modalità sleep tra Idle, riduzione del rumore ADC, Power-Down, Power-Save, Standby e External Standby.
Un Arduino interno o esterno interrompe o un Reset può riattivare Arduino dalla modalità sleep.
Modalità stand-by
Per accedere alla modalità di sospensione inattiva, scrivere i bit SM del controller "000". Questa modalità arresta la CPU ma consente il funzionamento di SPI, interfaccia seriale a 2 fili, USART, Watchdog, contatori e comparatore analogico. La modalità inattiva sostanzialmente arresta la CPU CLK e CLK FLASH. Arduino può essere riattivato in qualsiasi momento utilizzando interrupt esterno o interno.
Codice Arduino per la modalità di sospensione inattiva:
LowPower.idle (SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF, SPI_OFF, USART0_OFF, TWI_OFF);
C'è una libreria per impostare varie modalità a basso consumo in arduino. Quindi prima scarica e installa la libreria dal link indicato e usa il codice sopra per mettere Arduino in modalità di sospensione. Usando il codice sopra, Arduino entrerà in uno stato di sospensione di otto secondi e si sveglierà automaticamente. Come puoi vedere nel codice che la modalità inattiva spegne tutti i timer, SPI, USART e TWI (interfaccia a 2 fili).
Modalità di riduzione del rumore ADC
Per utilizzare questa modalità sleep, scrivere il bit SM su "001". La modalità arresta la CPU ma consente il funzionamento di ADC, interrupt esterno, USART, interfaccia seriale a 2 fili, watchdog e contatori. La modalità di riduzione del rumore ADC arresta sostanzialmente la CPU CLK, CLK I / O e CLK FLASH. Possiamo riattivare il controller dalla modalità di riduzione del rumore ADC con i seguenti metodi:
- Reset esterno
- Ripristino del sistema watchdog
- Watchdog Interrupt
- Ripristino Brown-out
- Corrispondenza dell'indirizzo dell'interfaccia seriale a 2 fili
- Interrupt di livello esterno su INT
- Interruzione del cambio pin
- Interruzione timer / contatore
- Interruzione pronta per SPM / EEPROM
Modalità di spegnimento
La modalità Power-Down arresta tutti i clock generati e consente solo il funzionamento dei moduli asincroni. Può essere abilitato scrivendo i bit SM su "010". In questa modalità, l'oscillatore esterno si spegne, ma l'interfaccia seriale a 2 fili, il watchdog e l'interrupt esterno continuano a funzionare. Può essere disabilitato solo con uno dei metodi seguenti:
- Reset esterno
- Ripristino del sistema watchdog
- Watchdog Interrupt
- Ripristino Brown-out
- Corrispondenza dell'indirizzo dell'interfaccia seriale a 2 fili
- Interrupt di livello esterno su INT
- Interruzione del cambio pin
Codice Arduino per la modalità periodica di spegnimento:
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
Il codice viene utilizzato per attivare la modalità di spegnimento. Usando il codice sopra, Arduino entrerà in uno stato di sospensione di otto secondi e si sveglierà automaticamente.
Possiamo anche utilizzare la modalità di spegnimento con un interrupt, in cui Arduino andrà in sleep ma si riattiva solo quando viene fornito un interrupt esterno o interno.
Codice Arduino per la modalità di interruzione dello spegnimento:
void loop () { // Consenti al pin di attivazione di attivare l'interruzione su basso. attachInterrupt (0, wakeUp, LOW); LowPower.powerDown (SLEEP_FOREVER, ADC_OFF, BOD_OFF); // Disabilita l'interruzione del pin esterno al risveglio. detachInterrupt (0); // Fai qualcosa qui }
Modalità risparmio energetico
Per entrare nella modalità di risparmio energetico dobbiamo scrivere il pin SM su "011". Questa modalità di sospensione è simile alla modalità di spegnimento, solo con un'eccezione: se il timer / contatore è abilitato, rimarrà in stato di funzionamento anche al momento dello spegnimento. Il dispositivo può essere riattivato utilizzando l'overflow del timer.
Se non si utilizza il contatore / tempo, si consiglia di utilizzare la modalità di spegnimento invece della modalità di risparmio energetico.
Modalità standby
La modalità standby è identica alla modalità Power-Down, l'unica differenza tra loro è l'oscillatore esterno che continua a funzionare in questa modalità. Per abilitare questa modalità scrivere il pin SM su "110".
Modalità standby estesa
Questa modalità è simile alla modalità di risparmio energetico solo con un'eccezione che l'oscillatore continua a funzionare. Il dispositivo entrerà in modalità Standby esteso quando scriviamo il pin SM su "111". Il dispositivo impiegherà sei cicli di clock per riattivarsi dalla modalità standby estesa.
Di seguito sono riportati i requisiti per questo progetto, dopo aver collegato il circuito come da schema elettrico. Carica il codice della modalità di sospensione in Arduino utilizzando l'IDE di Arduino. Arduino entrerà in modalità di sospensione inattiva. Quindi controllare il consumo di corrente nell'amperometro USB. Altrimenti, puoi anche usare una pinza amperometrica per lo stesso.
Componenti richiesti
- Arduino UNO
- Sensore di temperatura e umidità DHT11
- Amperometro USB
- Breadboard
- Collegamento dei cavi
Per saperne di più sull'utilizzo di DHT11 con Arduino, segui il link. Qui stiamo usando l'amperometro USB per misurare la tensione consumata da Arduino in modalità sleep.
Amperometro USB
L'amperometro USB è un dispositivo plug and play utilizzato per misurare la tensione e la corrente da qualsiasi porta USB. Il dongle si collega tra l'alimentatore USB (porta USB del computer) e il dispositivo USB (Arduino). Questo dispositivo ha una resistenza da 0,05ohm in linea con il pin di alimentazione attraverso il quale misura il valore della corrente assorbita. Il dispositivo è dotato di quattro display a sette segmenti, che visualizzano istantaneamente i valori di corrente e tensione consumati dal dispositivo collegato. Questi valori cambiano a intervalli di tre secondi.
Specifica:
- Intervallo di tensione di funzionamento: da 3,5 V a 7 V.
- Massima corrente nominale: 3A
- Dimensioni compatte, facile da trasportare
- Nessuna alimentazione esterna necessaria
Applicazione:
- Test dei dispositivi USB
- Verifica dei livelli di carico
- Debug dei caricabatterie
- Fabbriche, prodotti elettronici e uso personale
Schema elettrico
Nella configurazione sopra per dimostrare le modalità di sospensione profonda di Arduino, Arduino è collegato all'amperometro USB. Quindi l'amperometro USB viene collegato alla porta USB del laptop. Il pin dati del sensore DHT11 è collegato al pin D2 di Arduino.
Spiegazione del codice
Alla fine viene fornito il codice completo per il progetto con un video.
Il codice inizia includendo la libreria per il sensore DHT11 e la libreria LowPower . Per scaricare la libreria Low Power seguire il link. Quindi abbiamo definito il numero del pin di Arduino a cui è collegato il pin dati del DHT11 e creato un oggetto DHT.
#includere
Nella funzione void setup , abbiamo avviato la comunicazione seriale usando serial.begin (9600), qui 9600 è il baud rate. Stiamo usando il LED integrato di Arduino come indicatore per la modalità di sospensione. Quindi, abbiamo impostato il pin come output e la scrittura digitale bassa.
void setup () { Serial.begin (9600); pinMode (LED_BUILTIN, OUTPUT); digitalWrite (LED_BUILTIN, LOW); }
Nella funzione void loop , stiamo rendendo il LED integrato ALTO e la lettura dei dati di temperatura e umidità dal sensore. Qui, DHT.read11 (); il comando sta leggendo i dati dal sensore. Una volta calcolati i dati, possiamo controllare i valori salvandoli in qualsiasi variabile. Qui, abbiamo preso due variabili di tipo float "t" e "h" . Quindi, i dati di temperatura e umidità vengono stampati in serie sul monitor seriale.
void loop () { Serial.println ("Ottieni dati da DHT11"); ritardo (1000); digitalWrite (LED_BUILTIN, HIGH); int readData = DHT.read11 (dataPin); // DHT11 galleggiante t = DHT.temperature; galleggiante h = DHT.humidity; Serial.print ("Temperature ="); Serial.print (t); Serial.print ("C -"); Serial.print ("Humidity ="); Serial.print (h); Serial.println ("%"); ritardo (2000);
Prima di abilitare la modalità sleep stiamo stampando "Arduino: - Vado a fare un pisolino" e facendo il LED integrato basso. Dopo di che la modalità di sospensione di Arduino viene abilitata utilizzando il comando indicato di seguito nel codice.
Il codice sottostante abilita la modalità di sospensione periodica inattiva di Arduino e fornisce una sospensione di otto secondi. Trasforma ADC, timer, SPI, USART, interfaccia a 2 fili nella condizione OFF.
Quindi riattiva automaticamente Arduino dalla sospensione dopo 8 secondi e stampa "Arduino: - Ehi, mi sono appena svegliato".
Serial.println ("Arduino: - Vado a fare un pisolino"); ritardo (1000); digitalWrite (LED_BUILTIN, LOW); LowPower.idle (SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF, SPI_OFF, USART0_OFF, TWI_OFF); Serial.println ("Arduino: - Ehi, mi sono appena svegliato"); Serial.println (""); ritardo (2000); }
Quindi utilizzando questo codice Arduino si sveglierà solo per 24 secondi in un minuto e rimarrà in modalità sleep per il resto dei 36 secondi, il che riduce notevolmente la potenza consumata dalla stazione meteorologica Arduino.
Pertanto, se utilizziamo Arduino con la modalità sleep, possiamo approssimativamente raddoppiare l'autonomia del dispositivo.