Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Greške
  • Arduino PWM solarni kontroler punjenja. Budžetski uređaj baziran na Arduinu za slijepe (otvoreni hardver)

Arduino PWM solarni kontroler punjenja. Budžetski uređaj baziran na Arduinu za slijepe (otvoreni hardver)



Magnetna indukcija je tehnologija koje se vjerovatno sjećate sa nastave fizike u srednjoj školi. Za bežični prijenos energije potrebne su vam dvije zavojnice: zavojnica odašiljača i zavojnica prijemnika. Izmjenična struja u zavojnici predajnika stvara magnetsko polje koje inducira napon u zavojnici prijemnika. Ovaj napon se može koristiti za napajanje mobilnog uređaja ili za punjenje baterije.


Induktori, koje možete napraviti ručno, bit će podjednako važni elementi. Ovi jednostavni zavojnici su namotani od bakrenih žica i nazivaju se zavojnicama sa zračnim jezgrom. Izrada takvog namotaja za našu svrhu je vrlo jednostavna. Pronađite okrugli cilindar promjera oko 5 centimetara i namotajte žicu oko njega tako da se svaki zavoj ne preklapa s drugim zaokretom, ali istovremeno bude što bliže drugom zavoju. Okrugli cilindar može biti, na primjer, PVC cijev. Možda ćete morati da koristite ljepljivu traku ili traku na 2-3 mjesta kako biste održali strukturu stabilnom.


Pored Arduina i induktora potrebni su nam: jedan NPN tranzistor tipa 2N3055, jedan diodni most 1A (diodni sklop, imaju četiri izvoda), jedan LED, jedan otpornik od 100 oma, dva kondenzatora od 47 nF, baterija od 9 V za napajanje Arduina, a također poželjno dvije ploče za izradu prototipa. Dijagram povezivanja komponenti za kreiranje uređaja za bežični prijenos podataka prikazan je na donjoj slici.



Krug se može testirati jednostavnim Arduino kodom ispod.


void setup () (pinMode (13, OUTPUT);) void loop () (digitalWrite (13, HIGH); kašnjenje (0,5); digitalWrite (13, LOW); kašnjenje (0,5);)

Međutim, jednostavan uređaj za bežični prijenos energije može se napraviti bez Arduina. U osnovi, možemo koristiti samo jedan tranzistor 2N2222. Povežite njegov osnovni vod na prvi kraj zavojnice, a kolektor na drugi kraj zavojnice. Pin emitera je spojen na bateriju. Kao rezultat, takva jednostavna konstrukcija može izgledati ovako:




& nbsp & nbsp & nbsp Hvala vam na interesovanju za web stranicu informativnog projekta.
& nbsp & nbsp & nbsp
& nbsp & nbsp & nbsp Možete podržati naš projekat tako što ćete donirati bilo koji iznos za njegov razvoj.

Arduino PWM solarni kontroler punjenja
Kako napraviti vrlo mali, jednostavan i jeftin PWM solarni kontroler punjenja sa Arduino Pro Mini za 12V off-grid instalacije. PCB je iste veličine kao Pro mini ploča, tako da se mogu stegnuti zajedno. PCB planira univerzalnu prototipnu ploču.

Ožičenje i korištenje ovog Arduino solarnog kontrolera punjenja je vrlo jednostavno - postoje 2 ulazne žice od solarnog panela (+ i -) i 2 izlaza za odlazak do olovne baterije. Baza solarnog panela i baterija su povezani zajedno. Svako opterećenje mora biti spojeno direktno na terminale baterije, a kontroler punjenja će automatski upravljati ostalim.

Arduino redovno mjeri napon baterije olova i kiseline prema određenoj vrijednosti, prebacuje se na MOSFET za punjenje baterije sa solarne ploče i isključuje MOSFET kada je baterija potpuno napunjena. Kada opterećenje crpi energiju iz baterije, kontroler detektuje pad napona i odmah počinje ponovo puniti bateriju. Tokom noći, kada solarni panel prestane proizvoditi, kontroler čeka dok panel ne počne ponovo proizvoditi.


Pozitivna žica do solarne ploče zahtijeva da se Schottky zaštitna dioda instalira direktno na kabel (umotana u termoskupljajuću cijev). Ovo nije uključeno u glavnu PCB jer olakšava zamjenu i hlađenje u isto vrijeme. Možete jednostavno napraviti ploču malo dužu da stane u drugu vrstu diode.

Opis šeme i funkcije:

Funkcija je bazirana na N-kanalnom MOSFET-u IRF3205 na visokoj strani kola. Ovo zahtijeva napon kapije veći od 12V da bi se MOSFET ispravno otvorio. Kako bi se eliminirala potreba za eksternim MOSFET drajverom, pokreće ga punjenje pumpe stvoreno diodama, 2 kondenzatora i dva Arduino PWM izlazna pina (3 i 11). Pin A1 mjeri napon baterije, a pin 9 kontrolira ciklus MOSFET ON/OFF. Arduino Pro Mini integrirani LED spojen na pin 13 koristi se za prikaz trenutnog ciklusa PWM signala.

Regulator napona i svi kondenzatori okolo (C6, C5 i C4) bi mogli biti eliminisani jer postoji regulator uključen u Arduino Pro Mini. Međutim, pošto sam koristio jeftinu ploču za kloniranje, ne želim da se oslanjam na njenu sposobnost da podržava napone veće od 12V tokom dužeg vremenskog perioda. LP2950 je vrlo jeftin i efikasan do 30 volti, tako da ga u svakom slučaju vrijedi imati.


Lista dijelova: LP2950ACZ-5.0 Tranzistori regulatora napona male snage 2N3904 2N3906 x 2 N-kanalni MOSFET IRF3205 Otpornici 82K (1%) 20K (1%) 220K x3 (0,4W je dovoljno) 4K7 (0.4W je dovoljno) 4K7 (0.4W je dovoljno) 4K7 (0.4 Diodes) P6KE33CA 90SQ035 (ili bilo koja slična Schottky dioda 35V minimalno 9A) Kondenzatori 47N / 50V x2 keramika 220P / 100V keramika 1M / 50V (1000nF) keramika 4M7 / um tal 5V 10V

Šema i kod ovog kontrolera punjenja je Julian Ilette, on je inspiracija iza ove pametne stvari. Sve ovo je samo sofisticirana dokumentacija i prikladan dizajn PCB-a koji savršeno odgovara Arduino Pro Mini ploči. On dijeli video o efikasnijem Arduino MPPT regulatoru punjenja, ali njegova konstrukcija je mnogo komplikovanija i projekat još nije završen. Ako možete poboljšati kod ili konstrukciju na bilo koji način, podijelite svoja poboljšanja u komentarima.

Electro-Labs tim je predstavio ne samo zanimljiv, već i koristan u svakodnevnom životu projekat za Arduino. U ovom projektu razvijen je programabilni štit za Arduino, koji služi kao punjač za litijumske baterije. Štit uključuje LCD displej i interfejs sa dugmetom koji omogućava korisniku podešavanje napona od 2V do 10V i struje od 50mA do 1.1A. Uređaj također pruža mogućnost praćenja procesa punjenja.

Štit je baziran na LT1510 čipu i kontrolira ga Arduino Uno. Jednostavan i pristupačan Nokia 5110 LCD se koristi kao ekran. Povezuje se preko SPI interfejsa i napaja se od 3.3V napona. Pošto I/O pinovi arduina rade na 5V, preporučuje se povezivanje LCD modula preko otpornika spojenih serijski na signalne linije. Dostupna su dva konektora za povezivanje Li-Ion baterija. Četiri kontrolna dugmeta su povezana na pinove A2-A5 Arduina. Napon baterije i struja punjenja se prate preko analognih pinova A0 i A1. Detalji A/D konverzije objašnjeni su u izvornom kodu projekta. Za indikaciju rada uređaja koriste se dvije SMD LED diode.

Šematski dijagram projekta je razvijen u SoloCaptureu iz paketa SoloPCBtools. Štit može raditi bez kontrole mikrokontrolera. Kada Arduino nije programiran, punjač ima zadani napon prekida od 4,2 V i maksimalnu struju punjenja od 1,1 A. PCB je dizajnirao SoloPSB. Dizajn PCB-a i sam program SoloPSB mogu se preuzeti sa electro-labs.com. Dimenzije štita su usklađene s njegovom lokacijom na Arduino Uno. LED diode, interfejs tastera, LCD ekran i konektori za baterije nalaze se na vrhu radi praktičnosti. Svi ostali elementi nalaze se na stražnjoj strani štita.

LCD je programiran da prikazuje četiri stranice koje omogućavaju korisniku da unese parametre punjenja i prati proces punjenja. Na prvoj stranici korisnik može podesiti napon prekida i maksimalnu struju punjenja, otići na stranicu statusa baterije i započeti punjenje. Dugmad gore i dolje se koriste za navigaciju kroz opcije, a desno i lijevo dugme se koriste za promjenu parametara i odabir opcija. Druga stranica prikazuje status baterije. U njemu možete vidjeti trenutni napon na bateriji. Treća stranica prikazuje napon i struju punjenja. Pomoću lijevog ili desnog gumba na ovoj stranici možete zaustaviti proces punjenja i vratiti se na stranicu za podešavanje parametara. Kada napon baterije dostigne postavljenu vrijednost, punjač se zaustavlja i prikazuje poruku “Punjenje je završeno”. Da izađete, pritisnite levi taster.

Arduino i dodatno kolo za punjenje mogu se koristiti za praćenje i kontrolu punjenja NiMH baterija, na primjer:

Gotov uređaj

Punjive baterije su odličan način za napajanje vaše prijenosne elektronike. Mogu vam uštedjeti mnogo novca kada se pravilno napune. Da biste maksimalno iskoristili svoje baterije, potrebno ih je pravilno napuniti. To znači da vam je potreban dobar punjač. Možete potrošiti tone novca kupujući gotov punjač ili možete uživati ​​u izradi jednog. U ovom članku ćemo pogledati kako možete kreirati Arduino kontrolirani punjač.

Prvo, važno je napomenuti da ne postoji univerzalni način punjenja koji radi za sve baterije. Različite vrste baterija koriste različite hemijske procese da bi mogle da rade. Kao rezultat toga, različite vrste baterija moraju se puniti na različite načine. U ovom članku nećemo moći pokriti sve vrste punjivih baterija i načina punjenja. Stoga ćemo se, radi jednostavnosti, fokusirati na najčešći tip punjive baterije veličine AA, nikl metal hidridnu (NiMH) bateriju.

Komponente

Lista dijelova s ​​lijeva na desno:

  • snažan otpornik 10 Ohm (minimalno 5 vati);
  • 1 MΩ otpornik;
  • kondenzator 1 μF;
  • MOSFET tranzistor IRF510;
  • senzor temperature TMP36;
  • Napajanje od 5 volti;

Kako napuniti NiMH AA baterije

Povećanje brzine punjenja povećava rizik od oštećenja baterije.

Postoji mnogo načina za punjenje NiMH baterija. Metoda koju koristite uglavnom zavisi od toga koliko brzo želite da punite bateriju. Brzina punjenja se mjeri u odnosu na kapacitet baterije. Ako vaša baterija ima kapacitet od 2500mAh i punite je sa 2500mA, onda je punite brzinom od 1C. Ako istu bateriju punite sa 250mA, onda je punite brzinom od C/10.

Prilikom brzog punjenja baterije (iznad C/10), potrebno je pažljivo pratiti napon i temperaturu baterije kako biste izbjegli prekomjerno punjenje. To može ozbiljno oštetiti bateriju. Međutim, kada bateriju punite polako (ispod C/10), mnogo je manja vjerovatnoća da ćete oštetiti bateriju ako je slučajno napunite. Stoga se metode sporog punjenja općenito smatraju sigurnijim i pomoći će vam da produžite vijek trajanja baterije. Stoga ćemo u našem DIY punjaču koristiti stopu punjenja C / 10.

Krug punjenja

Za ovaj punjač, ​​osnova je sklop za kontrolu napajanja pomoću Arduina. Kolo se napaja iz izvora napona od 5 volti kao što je AC adapter ili napajanje računara. Većina USB portova nije pogodna za ovaj projekat zbog trenutnih ograničenja. Napajanje od 5V puni bateriju preko snažnog otpornika od 10 oma i snažnog MOSFET-a. MOSFET postavlja količinu struje koja teče kroz bateriju. Otpornik je dodat kao jednostavan način za kontrolu struje. Praćenje struje se vrši spajanjem svakog pina otpornika na pinove analognog ulaza Arduina i mjerenjem napona na svakoj strani. MOSFET pokreće PWM izlazni pin Arduina. Impulsi modulacije širine impulsa se izglađuju do konstantnog napona pomoću filtera na otporniku od 1 MΩ i kondenzatoru od 1 μF. Ovaj krug omogućava Arduinu da prati i kontrolira struju koja teče kroz bateriju.


senzor temperature

Senzor temperature služi za sprječavanje prekomjernog punjenja baterije i osigurava sigurnost.

Kao dodatna mjera opreza, senzor temperature TMP36 je dodat u punjač za praćenje temperature baterije. Ovaj senzor stvara napon koji je linearan s temperaturom. Stoga, za razliku od termistora, ne zahtijeva kalibraciju ili balansiranje. Senzor se ugrađuje u izbušenu rupu na kućištu držača baterije i zalijepi u rupu tako da se pritisne uz bateriju kada se ugradi u držač. Pinovi senzora se povezuju na 5V šinu, na kućište i na analogni ulazni pin Arduina.

Držač AA baterija prije i nakon ugradnje na matičnu ploču

Kod


Kod za ovaj projekat je prilično jednostavan. Varijable na početku izvornog koda omogućavaju vam da podesite punjač unosom vrijednosti za kapacitet baterije i tačan otpor otpornika napajanja. Dodane su i varijable sigurnog praga. Maksimalni dozvoljeni napon baterije je postavljen na 1,6 volti. Maksimalna temperatura baterije je postavljena na 35 stepeni Celzijusa. Maksimalno vrijeme punjenja je postavljeno na 13 sati. Ako je bilo koji od ovih sigurnosnih pragova prekoračen, punjač se isključuje.

U tijelu programa možete vidjeti da sistem konstantno mjeri napone na terminalima snažnog otpornika. Ovo se koristi za izračunavanje napona na bateriji i struje koja teče kroz nju. Struja se poredi sa ciljnom vrednošću, koja je C/10. Ako se izračunata struja razlikuje od ciljne vrijednosti za više od 10 mA, sistem će automatski prilagoditi izlaznu vrijednost kako bi je ispravio.

Arduino koristi serijski interfejs za prikaz svih trenutnih podataka. Ako želite da kontrolišete rad svog punjača, možete povezati Arduino sa USB portom vašeg računara, ali to nije neophodno, jer se Arduino napaja putem 5V napajanja punjača.

Int kapacitet baterije = 2500; // vrijednost kapaciteta baterije u mAh float otpor = 10,0; // izmjereni otpor otpornika snage int cutoffVoltage = 1600; // maksimalni napon baterije (u mV) koji ne smije biti prekoračen float cutoffTemperatureC = 35; // maksimalna temperatura baterije koja se ne smije prekoračiti (u stepenima C) // float cutoffTemperatureF = 95; // maksimalna temperatura baterije koja ne smije biti prekoračena (u stepenima F) long cutoffTime = 46800000; // maksimalno vrijeme punjenja od 13 sati, koje se ne smije prekoračiti int outputPin = 9; // žica izlaznog signala je spojena na digitalni pin 9 int outputValue = 150; // vrijednost izlaznog PWM signala int analogPinOne = 0; // prvi senzor napona je spojen na analogni pin 0 float valueProbeOne = 0; // varijabla za pohranjivanje vrijednosti na analogPinOne float voltageProbeOne = 0; // izračunati napon na analogPinOne int analogPinTwo = 1; // drugi senzor napona je povezan na analogni pin 1 float valueProbeTwo = 0; // varijabla za pohranjivanje vrijednosti na analogPinTwo float voltageProbeTwo = 0; // izračunati napon na analogPinTwo int analogPinThree = 2; // treći senzor napona je spojen na analogni pin 2 float valueProbeThree = 0; // varijabla za pohranjivanje vrijednosti na analogPinThree float tmp36Voltage = 0; // izračunati napon na analognoj PinThree float temperaturiC = 0; // izračunata temperatura senzora u stepenima C // temperatura plutanja F = 0; // izračunata temperatura senzora u stepenima F float voltageRazlika = 0; // razlika između napona na analogPinOne i analogPinTwo float baterijiVoltage = 0; // izračunati napon baterije float current = 0; // izračunata struja koja teče kroz opterećenje u (mA) float targetCurrent = baterijaCapacity / 10; // ciljna izlazna struja (u mA) je postavljena na // C / 10 ili 1/10 kapaciteta baterije float currentError = 0; // razlika između ciljne i stvarne struje (u mA) void setup () (Serial.begin (9600); // postavljanje serijskog sučelja pinMode (outputPin, OUTPUT); // postavlja pin kao izlaz) void loop () (analogWrite (outputPin, outputValue); // upisuje izlaznu vrijednost na izlazni pin Serial.print ("Output:"); // prikazuje izlazne vrijednosti za kontrolu na računalu Serial.println (outputValue); valueProbeOne = analogRead ( analogPinOne); // čitanje ulazne vrijednosti na prvoj sondi voltageProbeOne = (valueProbeOne * 5000) / 1023; // izračunati napon na prvoj sondi u milivoltima Serial.print ("Napon sonde jedan (mV):"); // prikaži napon na prvoj sondi Serial.println (voltProbeOne); valueProbeTwo = analogRead (analogPinTwo); // pročitaj ulaznu vrijednost druge sonde voltageProbeTwo = (valueProbeTwo * 5000) / 1023; // izračunaj napon na drugoj sondi u milivoltima Serial.print ("Naponska sonda dva (mV):" ); // prikazuje napon na drugoj sondi Serial.println (voltageProbeTwo); BaterijaNapon = 5000 - VoltageProbeTwo; // izračunati napon na bateriji Serial.print ("Napon baterije (mV):"); // prikazuje napon baterije Serial.println (batteryVoltage); struja = (voltageProbeTwo - voltageProbeOne) / otpor; // izračunati struju punjenja Serial.print ("Target Current (mA):"); // prikazuje trenutni cilj Serial.println (targetCurrent); Serial.print ("Struja baterije (mA):"); // prikazuje trenutni Serial.println (trenutni); currentError = targetCurrent - trenutno; // razlika između ciljne i izmjerene struje Serial.print ("Current Error (mA):"); // prikazuje grešku trenutne postavke Serial.println (currentError); valueProbeThree = analogRead (analogPinThree); // čitanje ulazne vrijednosti treće sonde, tmp36Voltage = valueProbeThree * 5. 0; // pretvaranje u napon tmp36Voltage / = 1024.0; temperaturaC = (tmp36Napon - 0,5) * 100; // transformacija zasnovana na zavisnosti od 10 mV po stepenu sa pomakom od 500 mV // ((napon - 500 mV) pomnožen sa 100) Serial.print ("Temperatura (stepeni C)"); // prikazuje temperaturu u stupnjevima Celzijusa Serial.println (temperatureC); / * temperaturaF = (temperaturaC * 9,0 / 5,0) + 32,0; // pretvoriti u stupnjeve Fahrenheita Serial.print ("Temperatura (stepeni F)"); Serial.println (temperaturaF); * / Serial.println (); // dodatni prazni redovi kako bi se olakšalo čitanje podataka prilikom otklanjanja grešaka Serial.println (); if (abs (currentError)> 10) // ako je greška trenutne postavke dovoljno velika, onda podesite izlazni napon (outputValue = outputValue + currentError / 10; if (outputValue< 1) // выходное значение никогда не может быть ниже 0 { outputValue = 0; } if(outputValue >254) // izlazna vrijednost nikada ne može biti veća od 255 (outputValue = 255;) analogWrite (outputPin, outputValue); // upisuje novu izlaznu vrijednost) if (temperatureC> cutoffTemperatureC) // zaustavlja punjenje ako je temperatura baterije premašila sigurni prag (outputValue = 0; Serial.print ("Max Temperature Exceeded");) / * if (temperatureF> cutoffTemperatureF) / / zaustavljanje punjenja ako temperatura baterije prijeđe siguran prag (izlaznaValue = 0;) * / ako (batteryVoltage> cutoffVoltage) // zaustavi punjenje ako napon baterije premaši siguran prag (outputValue = 0; Serial.print ("Max Voltage Exceeded") );) if (milis ()> cutoffTime) // zaustavljanje punjenja ako je vrijeme punjenja premašilo prag (outputValue = 0; Serial.print ("Max Charge Time Exceeded");) kašnjenje (10000); // kašnjenje 10 sekundi prije sljedeće iteracije petlje)

Verzija izvornog koda za preuzimanje može se pronaći na linku ispod.

Top srodni članci