One se razlikuju po naponima, kapacitetima, ali i materijalima od kojih su izrađene. Li-ion, Li-Po, NiMH, olovne itd. Svaka vrsta baterije ima svoje prednosti i mane. Nove vrste punjivih baterija poput Li-Po mogu dati veliku količinu električne energije u usporedbi s njenom težinom (a to se zove gustoća energije), dok kod olovnih akumulatora najčešće nije tako. Li-Po baterije su osjetljive na visoke i niske temperature, dok olovni akumulatori nemaju takvih problema, također mogu u kratkom periodu isporučiti veliku struju koja je potrebna za pokretanje motora s unutarnjim izgaranjem, stoga se olovni akumulatori upotrebljavaju u vozilima.
Gotovo svi prijenosni uređaji koje smo izgradili uz pomoć Arduina napajali su se pomoću Li-Po baterija raznih kapaciteta u ovisnosti o potrebama uređaja, poput dimenzija i autonomije rada. Arduino Mini Pro možemo napajati s 3.3V, pa nam korištenje Li-Po baterije nazivnog napona 3.7V neće predstavljati problem. Kod korištenja drugih pločica koje inzistiraju na naponu većem od 5V, potrebno je spojiti dvije Li-Po baterije u seriju kako bismo dobili napon 7.2V. Bitno je napomenuti da 3.7V nije maksimalan napon baterije. Napon pune baterije doseže vrijednost 4.2V, ali kod pločica poput Uno ne morate se brinuti za „višak“ napona jer pločica sadrži stabilizator koji podržava ulazni napon od 12V.
Izvedbe TP4056 pločice za punjenje Li-Po baterija.
Punjenje baterija nije tako jednostavno i ne radi se tako da dovedemo stabilizirani izvor nazivnog napona baterije. Kao što je i spomenuto, ako je baterija nazivnog napona 3.7V, napon pune baterije iznosit će cca 4.2V. Za punjenje takve baterije potrebno je imati izvor napona većeg od 4.2V jer u suprotnom neće doći do punjenja nego pražnjenja. Kao pločicu za punjenje koristili smo TP4056. Ta se pločica napaja putem micro USB kabela i na sebi sadrži sklop koji štiti bateriju od kratkog spoja, prepunjenosti i sadrži izvode koje smo upotrijebili za mjerenje trenutnog napona na bateriji. Postoje dvije varijante TP4056 pločice, obje služe za punjenje Li-Po baterija, ali ne može se pratiti napon baterije s obje. Po vizualnom obliku je moguće vidjeti da jedna varijanta sadrži 4 priključna pina, 2 za bateriju i 2 za očitavanje napona.
Spajanje
Za mjerenje kapaciteta baterije koristili smo Arduino Mini Pro jer može raditi na naponu 3.3V i nižem taktu procesora, što rezultira manjom potrošnjom energije i malih je dimenzija pa se lako može ugurati u minijaturno kućište. TP4056 pločica za punjenje Li-Po baterije i mjerenje njezinog napona. OLED zaslon 128x32px IIC komunikacije. Također smo koristili i naponsko dijelilo zbog ograničenosti analognih pinova na Arduinu.
Shema spajanja mjerača kapaciteta baterije
Naponsko dijelilo u suštini radi tako da se napon između dva otpornika spojena u seriju dijeli prema njihovom omjeru otpora. Npr. ako u seriji imamo spojena dva otpornika od 10kΩ, napon će se dijeliti 50:50, ako je priključeno 5V na seriju, svaki od njih će dobiti 2.5V. Napone veće od maksimalne vrijednosti ulaza analognog pina ne možemo direktno mjeriti, nego ćemo ih smanjiti u nekom određenom omjeru koji nam je poznat i kasnije u programskom kodu upotrijebiti tu vrijednost kako bismo dobili stvarnu vrijednost tog napona koji se mjeri. Omjer je konstantan cijelo vrijeme i isključivo ovisi o omjeru serijski spojenih otpornika. Iako nam je najbitniji omjer, dosta je bitna i vrijednost samih otpornika. Zašto? Ohmov zakon kaže da je struja = napon / otpor. Ako koristimo manje otpornike veličine 1kΩ, struja će biti cca 4mA, a ako koristimo otpornike veličine 10kΩ, struja će biti 0.4mA. Veličinom otpornika reguliramo veličinu struje koja prolazi tim krugom i samim time određujemo gubitke. Spajanjem serije otpornika na izvor dobivamo čiste gubitke i njih želimo smanjiti jer nam troše električnu energiju, što rezultira bržim pražnjenjem baterije. Zaključak je da kod odabira otpornika, osim njihovog omjera trebamo uzeti što veće otpornike, reda 10-ak ili 100-ak kΩ. Cilj je dobiti omjer 1:4 otpornika kako bi napon na mjerenom otporniku iznosio 1/5 od napona baterije jer priključivanje napona manjeg od 1.1V na analogni pin ne miješa se s napajanjem.
Ispitivanje sklopa na Li-Po 500mAh bateriji
U našem primjeru koristili smo otpornike 10kΩ i 2.5kΩ. Ako kojim slučajem imate hrpu otpornika vrijednosti 10kΩ koji se koriste kao pull-up za spajanje tipkala s Arduinom, spajanjem četiri takva otpornika u paralelu dobit ćete četvrtinu otpora jednog, što je 2.5kΩ. Spoj između serije otpornika spojen je na analogni pin A0 na kojemu ćemo očitavati vrijednost napona. OLED zaslon 128x32px komunicira putem IIC i troši malo električne energije jer OLED tehnologija uključuje samo piksele koji su potrebni za ispisivanje željene poruke. Kod LCD tehnologije je potrebno pozadinsko osvjetljenje koje osvjetljava cijeli zaslon, neovisno ispisujemo li poruku ili ne. Stoga je OLED zaslon bolje rješenje za prijenosne uređaje kojima je bitna autonomija rada. Također je moguće pronaći OLED zaslon 128x64 piksela.
OLED zaslon 128x32px
Arduino Mini Pro sadrži pin „raw“ na koji se priključuje izvor napajanja te on može biti veći od 3.3V. Prilikom spajanja USB kabla za prenošenje koda na Arduino, potrebno je otpojiti baterijsko napajanje. Napajanje OLED zaslona može se izvesti i preko VCC pina koji nudi stabilnih 3.3V, ali također se može spojiti i direktno na baterijski jer zaslon može raditi 3.3 ili 5V te u sebi sadrži stabilizator napona.
Programiranje
Biblioteku za OLED zaslon pronašli smo na internetu i već smo u nekoliko prijašnjih brojeva pokazali kako se zaslon spaja s Arduinom te kako se ispisuju poruke na zaslonu. Potrebno je uključiti biblioteku na početku programa, kao i sve ostale potrebne biblioteke. Korištene varijable su tipa float jer predstavljaju očitanu vrijednost, napon, pomoćnu varijablu „X“ i konstantu „Pom“ koja predstavlja koeficijent za pretvaranje izmjerenog napona u stvarni.
U void setupu se definira početak rada s OLED zaslonom s naredbom „u8g2.begin();“.
Void loop: Prije početka ispisivanja na zaslonu poželjno je očistiti njegovu unutarnju memoriju u koju se upisuju podaci za ispis, a to se vrši naredbom „u8g2.clearBuffer();“ . Prije početka ispisivanja podataka potrebno je odrediti font ispisivanja. Razne fontove možete pronaći na internetu, a oni osim oblika slova i brojki sadrže i veličinu fonta. U našem primjeru korišten je font veličine 14px. Zašto 14? Visina OLED zaslona je 32px, a uz dva reda ispisa i razmak od 4px preostaje 14px za font. Naredbom „u8g2.drawStr(2,15,”Napon”);“ ispisujemo tekst „Napon“ na lokaciji 2px počevši od lijeve strane i 15px počevši od donje strane. Orijentacija zaslona je vodoravna, tako da se priključni pinovi nalaze s lijeve strane ako je zaslon okrenut prema nama. Za ispisivanje vrijednosti varijabli koristi se naredba „u8g2.print(napon);“. No ta naredba nema mogućnost pozicioniranja početka pisanja, tako da prije ispisa vrijednosti varijable moramo definirati mjesto na kojem želimo da se ispiše na zaslonu, koristeći naredbu „u8g2.setCursor(73,15);“. Pozicioniranje mjesta pisanja, tj. pokazivača (eng. cursor): prva vrijednost je mjesto u redu, a druga vrijednost mjesto u stupcu, kako smo već objasnili. 73 je vrijednost počevši od lijeve strane, a 15 je vrijednost počevši od dna zaslona. Varijabli „ocitano“ pridružujemo očitanu vrijednost analognog signala na A0. Očitanu vrijednost dijelimo s 1023 i množimo s konstantom „pom“ i 4 kako bismo dobili stvarnu vrijednost napona.
Prikaz OLED zaslona i Li-Po baterije
U ovisnosti o vrijednosti napona, uređaj će ispisivati preostali kapacitet baterije u obliku postotka. Naredbom „u8g2.sendBuffer();“ šaljemo poruku zaslonu kako bi ju ispisao. Ispitivanje kapaciteta baterije nije potrebno često vršiti jer se neće isprazniti u roku od nekoliko minuta, već nekoliko sati ili dana.
Napomena:
Mjerač kapaciteta baterije testiran je i radi. Potrebno je izvršiti umjeravanje (baždarenje) jer su prilikom izračuna vrijednosti uzete kao idealne, otpornici imaju svoje odstupanje, a žice gubitke. Uređaj je konceptualno ispravan, a korigiranjem vrijednosti napona, mjerenjem stvarnih vrijednosti otpora i konstanti možemo dobiti vrlo precizan uređaj.
Programski kod
#include “Wire.h”
#include “Arduino.h”
#include “U8g2lib.h”
#include “SPI.h”
float Pom = 1.05;
float ocitano, X, napon;
U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0);
void setup() {
u8g2.begin();
}
void loop() {
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_profont22_tr);
u8g2.drawStr(2,15,”Napon”);
ocitano = analogRead(A0);
X = ocitano/1023;
napon = X*Pom*4;
u8g2.setCursor(73,15);
u8g2.print(napon);
if(napon > 0 && napon < 3.5){
u8g2.drawStr(4,30,”0%”);
}
if(napon > 3.5 && napon < 3.75){
u8g2.drawStr(4,30,”<25%”);
}
if(napon > 3.75 && napon < 3.85){
u8g2.drawStr(4,30,”<50%”);
}
if(napon > 3.85 && napon < 4.1){
u8g2.drawStr(4,30,”<75%”);
}
else{
u8g2.drawStr(4,30,”<100%”);
}
u8g2.sendBuffer();
delay(30000);
}
Cijeli kod možete potražiti na Github stranici Vidilaba: https://github.com/VidiLAB-com/Arduino