HOW TO: Arduino mjerač kapaciteta Li-Po baterije - Programiranje

HOW TO: Arduino mjerač kapaciteta Li-Po baterije - Programiranje

Kako uz pomoć Arduina napraviti mjerač kapaciteta Li-Po baterija

Punjive baterije, glavna komponenta svakog prijenosnog uređaja. Punjive baterije neizostavan su dio svakog prijenosnog uređaja.

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. 

arduino

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

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.

shema

 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. 

napon

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.

OLED ekran i Li Po baterija 500mAh

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

(Stranica 3 od 4)
« Prev All Pages Next » (Stranica 3 od 4)
Ocijeni sadržaj
(0 glasova)

Vezani sadržaj:

  • VIDI doktor: PCB (Printed Circuit Board) dizajniranje

    Poštovana VIDI redakcijo,

    Dugogodišnji sam vjerni čitatelj VIDI časopisa te me baš vesele novi tekstovi iz kojih svašta mogu naučiti iz vaših brojnih i raznolikih tema.

  • SineStack, visoko integrirani baterijski sustav Rimac Energy, spreman je za isporuku u Colchester, Velika Britanija

    Rimac Energy, pionir u visoko integriranim sustavima za pohranu energije, najavio je isporuku svog prvog SineStack sustava na lokaciju u Colchesteru, UK.

  • Je li vrijeme za novi laptop?

    Pozdrav, Vidijevci!

    Vaša sam čitateljica dugi niz godina. Sada sam naišla na problem te se nadam da mi možete uputiti neki savjet.

  • (Ne)zgodni emotikoni

    Pozdrav doktore,

    Imam jedan neobičan problem.

  • Pregrijavanje procesora

    Pregrijavanje procesora

    Pozdrav doktore,
    prije nekoliko godina kupio sam dobar gaming PC koji i dan-danas bez problema vrti najnovije naslove. Kada je izašao, odmah sam kupio i7 7700K procesor te ga upario sa solidnim 280 mm AiO hladnjakom kojim ga mogu solidno i „overclockati“ jednom kada budu potrebne ekstra performanse. Jedina komponenta koju sam nadogradio je grafička kartica, kako bi sve radilo i na novim RayTracing naslovima. No, u zadnje vrijeme temperature procesora počele su značajno skakati do razine da cijeli komp onda koči dok ne ugasim sve. Mislim da nema problema s hladnjakom jer matična pokazuje da se vrte ventilatori, kao i pumpa. -Silvio

// možda će vas zanimati

Newsletter prijava


Kako izgleda naš posljednji newsletter pogledajte na ovom linku.

Copyright © by: VIDI-TO d.o.o. Sva prava pridržana.