Professional Documents
Culture Documents
891182.final 0036484851 42 PDF
891182.final 0036484851 42 PDF
2.2.2 Alarmi.................................................................................................................. 15
3
4.2 Usporedba stanja mirovanja ....................................................................................... 25
5. Zaključak ......................................................................................................................... 30
Literatura ............................................................................................................................. 31
Skraćenice............................................................................................................................ 34
4
Uvod
U današnje vrijeme tehnologija je dostupna svakome. Svakog dana u svijetu nastaje
sve više mobilnih uređaja, računala, satova i mnogih drugih uređaja. Svi oni za svoj rad
koriste neki oblik energije, bilo električnu energiju ili neki drugi oblik energije. Zbog velikog
broja takvih uređaja raste potreba za smanjenjem potrošnje energije uređaja koji se ne nalaze
u aktivnom stanju npr. zaslon mobilnog uređaja ne mora biti uključen ukoliko trenutno nitko
ne koristi taj mobilni uređaj i slično.
5
1. O uređaju Arduino
Projekt Arduino je nastao 2003. godine pod nazivom Wiring kojeg je u sklopu svog
diplomskog rada razvio kolumbijski student Hernando Barragán, pod vodstvom Massima
Banzi-a i Caseya Reas-a. Wiring je zamišljen kao program za studente IDII-a (Interaction
Design Institute Ivrea) u Italiji čiji je cilj bio napraviti jeftin i jednostavan alat za razvoj
raznih uređaja koji vrše neki oblik interakcije sa okolinom pomoću senzora (engl. sensors) i
drugih pokretača (engl. actuators) kojeg bi na jednak način mogli koristiti i inženjeri i oni
bez inženjerskih sposobnosti.
6
1.2 Razvojne ploče
Hardverski dio platforme Arduino predstavlja razvojna ploča. Razvojna ploča osim
mikrokontrolera sadrži i druge sklopove kao što su sklop za programiranje mikrokontrolera,
sklop za napajanje, razne priključke i pinove i mnoge druge. Nekoliko Arduino razvojnih
ploča je prikazano na slici (Slika 1).
Sklopove od kojih se sastoji razvojna ploča možemo vidjeti na slici Slika 2 od kojih
ćemo najvažnije kratko opisati u nastavku.
7
1.2.2 Mikrokontroler
Digitalni pinovi Arduino razvojne ploče se mogu koristiti i kao ulazni i kao izlazni.
Kod digitalnih ulaza, program provjerava da li na određenom pinu postoji napon. Svaki pin
8
sadrži interni pull-up otpornik kojeg je moguće uključiti koristeći funkciju digitalWrite() kad
je pin definiran kao ulazni. Maksimalna struja koja može prolaziti kroz pin iznosi 40 mA.
Svaki Arduino ima 13 digitalnih pinova.
Pinovi 2 i 3 su pinovi koji služe za detekciju vanjskih prekida, odnosno mogu se konfigurirati
kako bi obradili prekid kad registriraju nisku ili visoku razinu napona ili pak promjenu u
razini napona. Za obradu prekida moramo prekidu pridružiti prekidni potprogram pomoću
funkcije attachInterrupt().
Pinovi 4,5,6,9,10,11 omogućuju 8-bitni PWM (engl. Pulse Width Modulation – tehnika za
dobivanje analognih rezultata pomoću digitalnih sredstava) izlaz pomoću funkcije
analogWrite().
Pinovi 10,11,12,13 podržavaju SPI (engl. Serial Peripheral Interface) komunikaciju koja,
iako podržana hardverski, još nije uključena u Arduino jezik.
Pinovi 4 (engl. SDA-Serial Data Line) i 5 (engl. SCL-Serial Clock Line) omogućuju I2C
(engl. Inter-Integrated Circuit) komunikaciju koristeći Wire knjižnicu.
9
1.3 Arduino Uno R3
Uno je sam po sebi vrlo jednostavan za korištenje. Može se napajati pomoću USB porta ili
putem DC priključka naponom od 6 V pa do 20 V, uz preporučeni napon između 7 V i 12
V.
10
1.4 Programiranje Arduino uređaja
11
2. RTC modul
RTC (engl. Real Time Clock) je elektronički uređaj koji vrlo precizno prati vrijeme.
Prilikom izrade ovog završnog rada koristit ćemo DS3231 tvrtke Maxim Integrated.
DS3231 (Slika 6) je jeftin a istovremeno vrlo precizan I2C RTC sa ugrađenim TCXO
(engl. Temperature Compensated Crystal Oscillator) što mu daje veću stabilnost prilikom
promjene temperature u rasponu od -40 °C do +85 °C, koju s običnim oscilatorom ne bi
mogli dobiti. Sam RTC sadrži i utor za bateriju što mu omogućuje rad i kad je glavni dovod
energije prekinut.
DS3231 prati sekunde, minute, sate, dan u tjednu, datum: dan u mjesecu, mjesec i
godinu. Kada jednom postavimo vrijeme možemo pratiti kalendar sve do 2100. godine. Sat
12
radi u 24 i 12 satnom formatu, a ima ugrađena i dva programabilna alarma. Modul i kontroler
povezani su preko dvosmjerne I2C komunikacije. Shemu dizajn DS3231 moguće je vidjeti
na slici (Slika 7).
DS3231 ima 6 pinova. Pinovi VCC i GND, koji služe za napajanje modula, se
povezuju sa Arduinovim pinovima 5 V (ili 3.3 V) i GND. Pin SDA se povezuje sa pinom
A4 na uređaju Arduino Uno, dok se pin SCL povezuje sa pinom A5. Pinovi SDA i SCL se
koriste za I2C komunikaciju. Moguć je i alternativan način spajanja jer Arduino Uno R3 ima
posebne SDA i SCL pinove namijenjene za I2C komunikaciju. Opisani način spajanja vidljiv
je na slici (Slika 8).
13
Slika 8 Spajanje DS3231 i Arduino Uno R3
#include <DS3231_Simple.h>
DS3231_Simple Clock;
void setup() {
Serial.begin(9600);
Clock.begin();
}
void loop() {
DateTime MyTimestamp; // Create a variable to hold the data
MyTimestamp.Day = 3;
MyTimestamp.Month = 10;
MyTimestamp.Year = 20;
MyTimestamp.Hour = 14;
MyTimestamp.Minute = 17;
MyTimestamp.Second = 33;
Clock.write(MyTimestamp); // Then write it to the clock
//we will read it back for example...
Serial.print("The time has been set to: ");
Clock.printTo(Serial);
Serial.println();
Serial.print("End Of Program (RESET to run again)");
while (1);
}
14
U primjeru je korištena knjižnica DS3231_Simple koju je napisao James Sleeman i koja nam
pruža osnovne funkcionalnosti DS3231 kao što su postavljanje i čitanje vremena,
postavljanje alarma i bilježenje (engl. logging) podataka.
2.2.2 Alarmi
DS3231 nam omogućuje postavljanje 2 alarma, sa tom razlikom što je razlučivost prvog
alarma u sekundama a drugog u minutama. Postoji nekoliko vrsta alarma ovisno o korištenoj
programskoj knjižnici. Za DS3231_Simple moguće je podesiti alarm :
15
#include <DS3231_Simple.h>
DS3231_Simple Clock;
void setup() {
Serial.begin(9600);
Serial.println();
Clock.begin();
Clock.disableAlarms(); // First we will disable any existing alarms
DateTime MyTimestamp = Clock.read(); // Get an initialized timestamp
MyTimestamp.Second = 30; // We want the alarm at this second
// And now add the alarm to happen when the second matches
Clock.setAlarm(MyTimestamp, DS3231_Simple::ALARM_MATCH_SECOND);
Clock.setAlarm(DS3231_Simple::ALARM_EVERY_MINUTE);
}
void loop() {
uint8_t AlarmsFired = Clock.checkAlarms(); // To check the alarms we just ask the
clock
// check if either alarm is fired by using a "bitwise and"
if (AlarmsFired & 1) {
Clock.printTo(Serial); Serial.println(": First alarm has fired!");
}
if (AlarmsFired & 2) {
Clock.printTo(Serial); Serial.println(": Second alarm has fired!");
}
}
Isječak 2 Postavljanje alarma
16
3. Energetska stanja uređaja Arduino
Uređaju Arduino je za rad potrebna određena količina električne energije. Kako je
Arduino u današnje vrijeme primarno namijenjen kao uređaj za projekte koji kao izvor
energije koriste baterije raznih kapaciteta, jedan od najvećih problema je optimizacija
potrošnje energije za što dulji rad.
Jedan od načina na koji je moguće postići značajne uštede energije jest rastavljanje Arduina
na komponente, tj. odvajanje sklopova sa razvojne pločice. Moguće je potrebne sklopove
povezati bez korištenja razvojne pločice što daje značajne uštede energije. Kako je cilj ovog
rada prikazati energetska stanja uređaja Arduino na razvojnoj ploči, ovaj pristup nije
realiziran već dan samo kao jedan od dodatnih mogućnosti.
Drugi način na koji je moguće postići značajne uštede energije jesu stanja mirovanja (engl.
sleep modes).Za vrijeme kad Arduino ne obavlja nikakav koristan posao moguće je isključiti
određene sklopove kako bi uređaj trošio manje energije. Ovisno o tome kakve uštede želimo
i kakve funkcije treba obavljati naš uređaj moguće je koristiti jedan od nekoliko stanja
mirovanja.
Stanja mirovanja koja su objašnjena i istražena prilikom stvaranja ovog rada su:
Idle
ADC Noise Reduction
Power-save
Standby
Power-down
Kako bi mikrokontroler ušao u idle stanje mirovanja potrebno je bitove SM2, SM1 i
SM0 postaviti na 000. Idle stanje zaustavlja procesor ali i dalje omogućuje korištenje SPI-
17
a, USART-a, analognog komparatora, ADC-a, I2C –a, timera/brojača, Watchdog-a i sustava
prekida. Ovo stanje mirovanja u osnovi zaustavlja clkCPU i clkFLASH.
Mikrokontroler je u ovom stanju mirovanja moguće probuditi koristeći vanjske prekide, kao
i unutrašnje prekide kao što su Timer Overflow i USART Transmit Complete. Dodatno,
ukoliko nam nije potrebno buđenje izazvano od analognog komparatora, istog je moguće
isključiti postavljajući bit ACD u ACSR-u (Analog Comparator Control and Status
Register).
Bitove SM2, SM1 i SM0 potrebno je postaviti na 001 kako bi mikrokontroler ušao u
stanje ADC Noise Reduction prilikom poziva funkcije za mirovanje. U ovom stanju
mirovanja MCU zaustavlja procesor dopuštajući ADC, vanjske prekide, I2C , timer/brojač2
i Watchdog. U osnovi, ovo stanje mirovanja zaustavlja clkI/O, clkCPU i clkFLASH
dopuštajući ostalim satovima da rade.
Bitove u registrima SM2, SM1 i SM0 je potrebno postaviti na 010 kako bi pozivom
funkcije za mirovanje mikrokontroler prešao u stanje power-down. U ovom stanju, vanjski
oscilator se zaustavlja, dok vanjski prekidi, I2C i Watchdog nastavljaju s radom, ukoliko su
omogućeni. Samo vanjski reset, Watchdog reset, Brown-out reset, I2C Address Match prekid
te vanjski prekid na pinovima D2 ili D3 mogu probuditi mikrokontroler. Ovo stanje
mirovanja u osnovi zaustavlja sve generirane satove, dopuštajući rad samo asinkronih
modula.
18
Power-down je stanje mirovanja u kojem se ostvaruju najveće uštede energije. Potrebno je
imati na umu da se za buđenje mikrokontrolera prekidom koristi niska razina te ju je
potrebno zadržati takvom neko vrijeme dok se mikrokontroler ne probudi.
Kod buđenja iz power-down stanja postoji kašnjenje od trenutka kad su zadovoljeni kriteriji
za buđenje do trenutka kad je mikrokontroler ponovno potpuno uporabljiv. To omogućuje
da se sat ponovno pokrene i postane stabilan nakon zaustavljanja.
Ukoliko je timer/brojac2 praćen asinkrono, tj. postavljen je bit AS2 u ASSR, timer/brojač2
će raditi za vrijeme mirovanja. Uređaj je moguće probuditi uz Timer Overflow ili Output
Compare ako su postavljeni odgovarajući bitovi u TIMSK-u (Timer Interrupt Mask Register)
i ako je postavljen bit Global Interrupt Enable u SREG-u (Status Register).
Ovo stanje mirovanja u osnovi zaustavlja sve satove osim clkASY, dopuštajući rad samo
asinkronih modula uključujući timer/brojač2 ukoliko je praćen asinkrono.
Za ulazak u ovo stanje je prije poziva funkcije potrebno postaviti bitove SM2, SM1
i SM0 na 110. Ovo stanje mirovanja je identično power-down stanju uz iznimku što oscilator
ostaje uključen.
Iz standby stanja će mikrokontroleru biti potrebno 6 ciklusa da se probudi što je nešto brže
u odnosu na power-down stanje.
Osim gore navedenih načina za smanjenje potrošnje energije, dodatne uštede moguće
je postići i na druge načine poput promjenom radne frekvencije procesora, što je nešto
složeniji posao od ostalih , ili upravljanjem registrom za smanjenje snage - PRR-om (Power
Reduction Register) što je značajno jednostavnije. PRR je 8 bitni registar pomoću kojeg
19
možemo pojedinačno odabrati sklopove koji su nam potrebni za ostvarenje ciljane
funkcionalnosti. Bitovi u PRR-u su redom:
Za postavljanje pojedinih bitova u PRR postoje i definirane funkcije kako bi nam dodatno
olakšale posao, kao što su power_adc_disable(), power_spi_disable(),
power_usart0_disable(), power_timer0_disable(), power_timer1_disable(),
power_twi_disable()... Potrebno je upamtiti da se PRR primjenjuje samo u aktivnom i idle
stanju, jer su u ostalim stanjima ovi moduli ionako već isključeni, kao što je navedeno u [5].
Još jedan dodatan način uštede je isključivanje sklopa za utvrđivanje naglih promjene
vrijednosti struje (engl. BOD - Brown-out Detection) kojim se postižu vrlo velike uštede
energije, no istovremeno se narušava sigurnost našeg uređaja (Gammon, 2012).
20
4. Implementacija na uređaju Arduino
U ovom poglavlju će biti prikazani jednostavni primjeri buđenja uređaja Arduino iz
stanja mirovanja u određenim vremenskim trenutcima koristeći vanjski sat DS3231,
odnosno njegov alarm, te konkretne vrijednosti struje koju Arduino koristi za svoj rad. Kao
referentna točka, kako bi mogli bolje odrediti uštedu energije, poslužit će nam količina
energije koju Arduino koristi kad ne radi ništa (Isječak 3).Sva mjerenja su obavljena na
otporniku od 5 Ω pomoću osciloskopa/voltmetra i računala kao što je prikazano na slici
(Slika 9).
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}
Prilikom vrćenja gore navedenog koda, Arduinom prolazi struja jakosti 0,6 mA.
Za ostvarivanje ovog rada korištene su AVR programske knjižnice koje nam pružaju
podskup standardnih C knjižnica za ATMEL-ove mikrokontrolere, Wire programska
21
knjižnica koja omogućava I2C komunikaciju koju je napisao Nicholas Zambetti te već ranije
spomenutu DS3231_Simple programsku knjižnicu autora James-a Sleeman-a (Boxall , 2014
; Nedelkovski , 2016 ; Genovese , 2016).
Za lakše oblikovanje i razumijevanje dijelovi koda koji su zajednički za sva stanja mirovanja
su izdvojeni u funkcije. Isječak 4 prikazuje funkciju koja Arduino stavlja u odabrano stanje
mirovanja. Kako je uređaj Arduino moguće probuditi vanjskim prekidom, potrebno je da
razina vanjski signal bude niske razine. Zbog toga prve dvije linije na donjoj slici postavljaju
signal na digitalnom pinu 2 u visoku razinu pomoću unutarnjeg otpornika. U idućoj naredbi
odabiremo željeno stanje mirovanja, jedno od gore navedenih, što postavlja zastavice SM2,
SM1 i SM0 u kontrolnom registru mikrokontrolera. Prije samog stavljanja u stanje
mirovanja, potrebno je također postaviti bit SE u navedenom registru. Kako je moguće da se
nakon postavljanja bita SE, a prije samog stavljanja u stanje mirovanja dogodi prekid,
potrebno je trenutno onemogućiti prekide što radi naredba noInterrupts(). Zatim postavljamo
bit SE (naredba sleepEnable()) i pridružujemo prekidu na digitalnom pinu 2 prekidnu rutinu
wakeUp() (naredba attachInterrupt(pin,rutina,okidač)), koja je prikazana u nastavku
(Isječak 5). Dio koda sa slike koji je zakomentiran služi za isključivanje Brown-out detekcije
kako bi se postigle još veće uštede energije. Zatim je potrebno ponovno omogućiti prekide
naredbom interrupts() i na samom kraju staviti uređaj u stanje mirovanja. Valja napomenuti
da nam naredba interrupts() jamči izvršenje sljedeće naredbe prije dolaska prekida.
void sleepNow() {
digitalWrite(wakePin, HIGH);
pinMode(wakePin, INPUT_PULLUP);
/*
There are 5 different sleep modes:
SLEEP_MODE_IDLE
SLEEP_MODE_ADC
SLEEP_MODE_PWR_SAVE
SLEEP_MODE_STANDBY
SLEEP_MODE_PWR_DOWN
*/
set_sleep_mode(SLEEP_MODE_IDLE);
noInterrupts();
sleep_enable();
// turn off brown-out enable in software
//MCUCR = bit (BODS) | bit (BODSE); // turn on brown-out enable select
//MCUCR = bit (BODS); // this must be done within 4 clock cycles of above
attachInterrupt(digitalPinToInterrupt(wakePin), wakeUp, LOW);
interrupts();
sleep_mode();//here the device is actually put to sleep
}
Isječak 4 Funkcija mirovanja
Isječak 5 nam prikazuje dio koda koji se izvršava kad se pojavi prekid. Prvo što je potrebno
napraviti u prekidnoj rutini je obrisati bit SE u kontrolnom registru mikrokontrolera, što se
22
ovdje obavlja naredbom sleep_disable(). Ono što je još potrebno napraviti u prekidnoj rutini
jest odvojiti prekidnu rutinu od digitalnog pina 2 pomoću funkcije detachInterrupt(pin).
Razlog zbog kojeg je to potrebno jest taj što će, nakon što RTC generira signal niske razine
u funkciji alarma, signal na pinu ostati u niskoj razini, a kako smo definirali da nam se
prekidna rutina izvršava kad je na digitalnom pinu 2 signal niske razine te će se prekidna
rutina stalno pozivati i izvršavati. Ostale linije u ovom kodu služe samo za dodatnu kontrolu.
void wakeUp() {
sleep_disable();
detachInterrupt(digitalPinToInterrupt(wakePin));
Serial.println("External interrupt detected!");
clockInterrupt = true;
}
Isječak 5 Prekidna rutina
Isječak 6 nam prikazuje funkciju setup(). Funkcija setup() se pokreće samo jednom i to
prilikom pokretanja uređaja Arduino. U danim primjerima funkcija setup() će imati ulogu
inicijalizacije alarma. Prvo što je potrebno napraviti kako bismo postavili alarm je
onemogućiti alarme koji su trenutno uključeni kako se neki od njih ne bi aktivirao prije no
što postavimo željeno vrijeme alarma, ili ukoliko mi koristimo samo jedan alarm, a trenutno
su aktivna oba. To se ostvaruje pomoću funkcije disableAlarms(). Ova funkcija ustvari ne
onemogućuje alarme već ih samo postavlja na neki nedohvatljiv datum (moguće je spriječiti
da alarmi generiraju signal niske razine na SQW pinu, no oni i dalje ostaju zapisani u registru
te se stalno uspoređuju sa trenutnim vremenom). Iduća naredba u ovom kodu je naredba
read() koja saznaje trenutno vrijeme RTC-a. Sam alarm postavljamo naredbom
setAlarm(vrijeme, tip alarma) koja postavlja kontrolne bitove i vrijeme alarma u RTC-u.
void setup() {
Serial.begin(9600);
Serial.println();
Clock.begin();
//digitalWrite(wakePin, HIGH);
//pinMode(wakePin, INPUT_PULLUP);
Clock.disableAlarms();
Clock.setAlarm(myTime, DS3231_Simple::ALARM_MATCH_SECOND);
}
Isječak 6 Funkcija setup()
23
Isječak 7 prikazuje funkciju loop() koja se prvi put izvodi nakon funkcije setup() a zatim se
ponavlja. U funkciji loop() izvodimo sve radnje za koje želimo da se ponavljaju. U ovom
primjeru u funkciji loop() pozivamo pomoćnu metodu sleepNow() te provjeravamo koji se
alarm aktivirao pomoću funkcije checkAlarms() za bolju kontrolu izvršenja programa. Dio
koda sa donje slike koji je zakomentiran služi za ostvarivanje dodatnih ušteda energije
korištenjem registra za uštedu energije (power_spi_disable(), power_timer0_disable(),
power_timer1_disable(), power_timer2_disable(), power_twi_disable()...) i isključivanjem
analogno-digitalnog pretvornika (power_adc_disable()). Nakon što se uređaj vrati iz stanja
mirovanja u normalan način rada potrebno je ponovno omogućiti sve onemogućene
sklopove, što je ovdje ostvareno pomoću funkcije power_all_enable(), i obnoviti statusni
registar analogno-digitalnog pretvornika.
void loop() {
noInterrupts();
interrupts();
sleepNow();
//enable all circutry
power_all_enable();
24
4.2 Usporedba stanja mirovanja
Slika 10 prikazuje pad napona na otporu prilikom vrćenja praznog programa. Vidljivo je da
i u slučaju kad nismo u stanju mirovanja pad napona nije velik (oko 3 mV) jer je otpor
otpornika malen prema otporu cijelog kruga.
Slika 11 prikazuje pad napona na otporu kad se Arduino nalazi u idle stanju mirovanja. U
ovom stanju nije došlo do velikog smanjenja potrošnje , pad napona je nešto manji nego u
prethodnom slučaju, no i dalje je oko 3 mV. Kao što je i ranije navedeno, idle stanje nam ne
pruža neke iznimne uštede te sigurno nije najbolja opcija ukoliko želimo smanjiti potrošnju.
Slika 12 prikazuje pad napona na otporniku od 5 Ω u ADC noise reduction stanju mirovanja.
U ovom stanju je pad napona već nešto značajniji u odnosu na idle stanje te ovdje iznosi oko
2 mV. Vidljivo je da je u ovom stanju moguće ostvariti veće uštede nego u prethodnom
primjeru, no i dalje postoje bolje opcije.
Na idućoj slici (Slika 13) prikazan je pad napona kad se Arduino nalazi u stanju standby.
Pad napona je ovdje još manji te iznosi nešto manje od 2mV ( oko 1,8 mV). U odnosu na
pad napona u početnoj situaciji, kad vrtimo prazan program , ovdje se on smanjio za oko 1,2
mV, odnosno on iznosi 60% početne vrijednosti. Ovo stanje je već sasvim dobra opcija za
uštedu energije, no postoje još bolje.
25
Slika 10 Potrošnja praznog programa
26
Slika 12 ADC Noise Reduction stanje
27
Slika 14 se odnosi na pad napona na otporniku kad se Arduino nalazi u power-save stanju.
Na ovoj slici vrijednost napona na otporniku iznosi približno 1,8 mV što je gotovo identično
standby stanju (razlika zasigurno postoji ali je nije moguće detektirati na ovako malenim
vrijednostima i s relativno velikom razlučivošću).
Slika 15 prikazuje pad napona na otporniku kad se Arduino nalazi u power-down stanju. Ovo
je stanje u kojem se postižu najznačajnije uštede energije jer je i najmanje sklopova aktivno.
U našem primjeru pad napona na otporu iznosi oko 1 mV što iznosi 33,3% početne
vrijednosti. Postigli smo smanjenja napona na otporniku za 2 mV, te iako se ono u ovom
primjeru čini relativno maleno, u gotovo svim realnim situacijama uštede bi bile iznimno
velike.
28
Slika 15 Power-down stanje
Tablica 1 prikazuje iznos struje koja prolazi otpornikom u svim stanjima mirovanja. Pošto
je otpor u svim slučajevima isti, jakosti struja se odnose jednako kao i naponi.
Idle 0.6
Standby 0.36
Power-save 0.36
Power-down 0.2
29
5. Zaključak
U ovom radu uspoređena su stanja mirovanja u kojima se uređaj Arduino može
nalaziti. Svako stanje postiže uštede na način da isključuje određene sklopove koji se nalaze
na razvojnoj ploči. Različiti sklopovi koriste različite količine energije te su i uštede različite.
Odabir stanja mirovanja ovisit će o situaciji odnosno projektu za koji ćemo dizajnirati sustav.
S obzirom na uštede postoji 5 stanja mirovanja: idle, ADC noise reduction, standby, power-
save i power-down.
Idle stanje ne pruža neke osobito velike uštede jer isključuje tek nekoliko sklopova
koji nisu izrazito važni za rad većine programa te ono samo po sebi nije vrlo često korišteno.
ADC noise reduction, standby i power-save pružaju nešto značajnije uštede te je njihovu
primjenu moguće naći u projektima kod kojih je potrebna brza reakcija nakon buđenja iz
stanja mirovanja. Ova stanja isključuju veoma velik broj sklopova kako bi postigla tražene
uštede. Power-down stanje pruža izrazito velike uštede energije jer isključuje najveći broj
sklopova na razvojnoj ploči. Ovo stanje je korišteno u projektima koji bi trebali raditi i po
nekoliko godina na baterijama. Malen problem kod ovog stanja je što ima 60 µs duže vrijeme
buđenja što je potrebno imati na umu prilikom dizajniranja sustava.
Ukoliko standardno definirana stanja mirovanja nisu ono što nam je potrebno ,
odnosno nisu dovoljna, moguće je uštedu ostvariti skidanjem sklopova sa razvojne ploče.
Bolje rečeno, moguće je sklopove povezati i bez razvojne ploče bez potrošnje energije na
sklopove koji nisu potrebni.
Uređaj Arduino je korišten zbog jednostavnosti svog korištenja, vrlo dobre podrške
i brojnih drugih mogućnosti, no on nije jedini uređaj koji ima mogućnost uštede energije te
se u ovom radu opisani principi mogu primijeniti i na druge uređaje kako bi se postigla
ušteda energije.
30
Literatura
[1] BOXALL, J. ARDUINO WORKSHOP. San Francisco: William Pollock, 2013.
[2] BOXALL, J. Tutorial- Using DS1307 and DS3231 Real-time Clock Modules with
Arduino, 01.12.2014. , http://tronixstuff.com/2014/12/01/tutorial-using-ds1307-and-
ds3231-real-time-clock-modules-with-arduino/ , 18.03.2017.
[6] NEDELKOVSKI, D. Arduino and DS3231 Real Time Clock Tutorial, 18.08.2016. ,
http://howtomechatronics.com/tutorials/arduino/arduino-ds3231-real-time-clock-tutorial/ ,
18.03.2017.
[8] GENOVESE, R. Build Programmable Time-based Switches Using a Real Time Clock ,
07.04.2016., http://www.instructables.com/id/Real-time-clock-using-DS3231-EASY/ ,
03.05.2017.
31
[13] AGARWAL, T. What are the Different Types of Arduino Boards,
https://www.elprocus.com/different-types-of-arduino-boards/ , 15.5.2017.
32
Upravljanje energetskim stanjima uređaja Arduino
Sažetak
Abstract
Power consumption in today's time grows at incredible speed. One of the reasons for
the increase is the availability of high technology devices. It has caused ever greater
investment in exploring new forms of energy and new ways of saving energy. In order to
reduce power consumption, it is necessary to disable as many of the features of a particular
device at a time when it is not used. In order to understand this principle more clearly, this
work describes the methods for reducing the energy consumption of the Arduino device by
turning off some of the integrated circuits on the development board, and by enabling them
as needed, or as shown in this work depending on the external clock. It is noticeable that
savings in such simple cases are significant so we can conclude that the above principle
could be applied to larger consumers as well.
33
Skraćenice
RTC Real Time Clock sat sa stvarno-vremenskim svojstvima
34