Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Greške
  • Arduino PWM solarni kontroler punjenja. Povoljni uređaj temeljen na Arduinu za slijepe (otvoreni hardver)

Arduino PWM solarni kontroler punjenja. Povoljni uređaj temeljen na Arduinu za slijepe (otvoreni hardver)



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


Ništa manje važni elementi bit će induktori koje možete sami napraviti. Ove jednostavne zavojnice namotane su bakrenim žicama i nazivaju se zavojnice sa zračnom jezgrom. Stvaranje takvog namota za našu svrhu vrlo je jednostavan zadatak. Nađite okrugli cilindar promjera oko 5 centimetara i namotajte žicu oko njega tako da svaki zavoj ne preklapa drugi zavoj, ali istovremeno bude što bliži drugom zavoju. Okrugli cilindar može biti, na primjer, PVC cijev. Možda ćete morati koristiti ljepljivu traku ili traku na 2-3 mjesta kako bi struktura ostala stabilna.


Osim Arduina i induktora, trebat će nam: jedan 2N3055 NPN tranzistor, jedan diodni most od 1A (diodni sklop, imaju četiri izvoda), jedna LED dioda, jedan otpornik od 100 ohma, dva kondenzatora od 47 nF, baterija od 9 V za napajanje Arduina, a po mogućnosti dvije ploče za izradu prototipova. Dijagram povezivanja komponenti za stvaranje uređaja za bežični prijenos podataka prikazan je na donjoj slici.



Krug se može testirati jednostavnim Arduino kodom u nastavku.


void setup() ( pinMode(13,OUTPUT); ) void loop() ( digitalWrite(13,HIGH); delay(0.5); digitalWrite(13,LOW); delay(0.5); )

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




   Zahvaljujemo vam na interesu za stranicu informacijskog projekta.
   Ako želite da zanimljivi i korisni materijali izlaze češće i imaju manje reklama,
   Naš projekt možete podržati 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 s Arduino Pro Mini za 12V postavke izvan mreže. PCB je iste veličine kao Pro mini-ploča, tako da se mogu stegnuti zajedno. PCB planovi za univerzalni prototip ploče.

Spajanje i korištenje ovog Arduino solarnog regulatora punjenja vrlo je jednostavno - postoje 2 ulazna voda od solarne ploče (+ i -) i 2 izlazna voda idu na olovnu bateriju. Baza solarne ploče i baterije su spojene zajedno. Svako opterećenje mora biti spojeno izravno na terminale baterije, a regulator punjenja automatski će se pobrinuti za ostalo.

Arduino redovito mjeri napon olovne i kiselinske baterije 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 snagu iz baterije, kontroler detektira pad napona i odmah ponovno počinje puniti bateriju. Tijekom noći kada solarni panel prestane proizvoditi, upravljač čeka dok panel ponovno ne počne proizvoditi.


Pozitivna žica do solarne ploče treba zaštitnu Schottky diodu montiranu izravno na kabel (omotan u termoskupljajuću cijev). Ovo nije uključeno u glavnu PCB jer olakšava njegovu zamjenu i hlađenje u isto vrijeme. Možete lako napraviti ploču malo dužom da stane u drugu vrstu diode.

Shema i opis funkcija:

Funkcija se temelji na N-kanalnom MOSFET-u IRF3205 na visokoj strani kruga. Ovo zahtijeva napon vrata veći od 12V da bi se ispravno uključio MOSFET. Kako bi se eliminirala potreba za vanjskim MOSFET drajverom, pokreće ga pumpa za punjenje stvorena s diodama, 2 kondenzatora i dva Arduino PWM izlazna pina (3 i 11). Pin A1 mjeri napon baterije, a pin 9 kontrolira MOSFET ON/OFF ciklus. Arduino Pro Mini integrirani LED spojen na pin 13 koristi se za prikaz trenutnog ciklusa PWM signala.

Regulator napona i svi okolni kondenzatori (C6, C5 i C4) mogli bi se izostaviti jer postoji regulator uključen u Arduino Pro Mini. Međutim, budući da sam koristio jeftinu ploču za kloniranje, ne želim se pouzdati u njenu sposobnost podržavanja napona viših od 12 V tijekom dužih vremenskih razdoblja. LP2950 je vrlo jeftin i učinkovit do 30 volti, tako da se isplati imati ga u svakom slučaju.


Popis dijelova: LP2950ACZ-5.0 regulator napona male snage Tranzistori 2N3904 2N3906 x 2 N-kanalni MOSFET IRF3205 Otpornici 82K (1%) 20K (1%) 220K x3 (0,4W je dovoljno) 4K7 (0,4W je dovoljno) Diode 1N4148 x 5 P6KE33CA 90SQ035 (ili bilo koja slična Schottky dioda 35V min 9A) Kondenzatori 47N / 50V x2 keramički 220P / 100V keramički 1M / 50V (1000nF) keramički 4M7 / 10V tantal 1M / 35V tantal x 2

Shemu i kod za ovaj regulator punjenja napisao je Julian Ylett, on je inspiracija iza ove pametne stvari. Sve je to samo sofisticirana dokumentacija i odgovarajući PCB dizajn koji savršeno odgovara Arduino Pro Mini ploči. Dijeli video učinkovitijeg Arduino MPPT regulatora punjenja, ali njegova konstrukcija je mnogo složenija i projekt još nije dovršen. Ako na bilo koji način možete poboljšati kôd ili dizajn, podijelite svoja poboljšanja u komentarima.

Ne samo zanimljiv, već i koristan projekt za Arduino u svakodnevnom životu predstavio je Electro-Labs tim na svom blogu. U ovom projektu razvijen je programibilni štit za Arduino koji služi kao punjač za litijeve baterije. Štit uključuje LCD zaslon i sučelje s tipkama koje korisniku omogućuje podešavanje napona od 2V do 10V i struje od 50mA do 1,1A. Uređaj također pruža mogućnost kontrole procesa punjenja.

Štit se temelji na LT1510 čipu i njime upravlja Arduino Uno. Zaslon koristi jednostavan i pristupačan LCD Nokia 5110. Spaja se preko SPI sučelja i napaja se naponom od 3,3V. Budući da I/O pinovi arduina rade na 5V, preporučuje se povezivanje LCD modula preko otpornika spojenih u seriju na signalne vodove. Dostupna su dva priključka za spajanje Li-Ion baterija. Četiri kontrolne tipke spojene su na Arduino pinove A2-A5. Napon baterije i struja punjenja kontroliraju se preko analognih pinova A0 i A1. Pojedinosti analogno-digitalne pretvorbe objašnjene su u izvornom kodu projekta. Za indikaciju rada uređaja koriste se dvije SMD LED diode.

Shematski dijagram projekta razvijen je u SoloCapture iz paketa SoloPCBtools. Shield može raditi bez kontrole mikrokontrolera. Kada Arduino nije programiran, punjač prema zadanim postavkama ima granični napon od 4,2 V i maksimalnu struju punjenja od 1,1 A. Tiskana ploča je dizajnirana u SoloPSB. Dizajn PCB-a i sam program SoloPSB mogu se preuzeti s electro-labs.com. Dimenzije štita su odabrane za njegov položaj na Arduino Uno. LED diode, sučelje gumba, LCD zaslon i priključci za bateriju nalaze se na vrhu radi praktičnosti. Svi ostali elementi nalaze se na poleđini štita.

LCD zaslon je programiran za prikaz četiri stranice koje korisniku omogućuju unos parametara punjenja i kontrolu procesa punjenja. Na prvoj stranici korisnik može postaviti granični napon i maksimalnu struju punjenja, otići na stranicu statusa baterije i započeti punjenje. Gumbi gore i dolje koriste se za kretanje između opcija, dok se desni i lijevi gumbi 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. Lijevi ili desni gumb na ovoj stranici može zaustaviti proces punjenja i vratiti se na stranicu s postavkama. Kada napon baterije dosegne zadanu vrijednost, punjač se zaustavlja i prikazuje poruku "Charge Complete". Za izlaz pritisnite lijevu tipku.

Arduino i krug punjenja koji mu je dodan mogu se koristiti za nadzor i kontrolu punjenja NiMH baterija, na sljedeći način:

Gotov uređaj

Punjive baterije izvrstan su način za napajanje vaše prijenosne elektronike. Mogu vam uštedjeti mnogo novca kada su pravilno napunjeni. Kako biste maksimalno iskoristili svoje baterije, potrebno ih je pravilno puniti. To znači da vam je potreban dobar punjač. Možete potrošiti mnogo novca kupujući gotov punjač ili se možete zabaviti praveći ga sami. U ovom ćemo članku pogledati kako možete stvoriti Arduino kontrolirani punjač.

Prvo, važno je napomenuti da ne postoji univerzalna metoda punjenja koja je prikladna za sve baterije. Različite vrste baterija koriste različite kemijske procese kako bi radile. Zbog toga se različite vrste baterija moraju različito puniti. U ovom članku ne možemo pokriti sve vrste baterija i načine punjenja. Stoga ćemo se radi jednostavnosti usredotočiti na najčešći tip baterije veličine AA, nikl-metal-hidridnu (NiMH) bateriju.

Pribor

Popis dijelova s ​​lijeva na desno:

  • snažan otpornik od 10 ohma (minimalno 5 vata);
  • otpornik 1 MΩ;
  • kondenzator 1uF;
  • MOSFET tranzistor IRF510;
  • senzor temperature TMP36;
  • napajanje od 5 volti;

Kako puniti NiMH AA baterije

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

Postoji mnogo načina za punjenje NiMH baterija. Koji ćete način koristiti uglavnom ovisi o tome koliko brzo želite napuniti bateriju. Brzina punjenja se mjeri u odnosu na kapacitet baterije. Ako vam je baterija kapaciteta 2500 mAh, a punite je s 2500 mA, onda je punite brzinom od 1C. Ako istu bateriju punite s 250 mA, onda je punite na C/10.

Kada punite bateriju brzo (iznad C/10), morate pažljivo pratiti napon i temperaturu baterije kako je ne biste prepunili. To može ozbiljno oštetiti bateriju. Međutim, kada sporo punite bateriju (brzinom ispod C/10), mnogo je manja vjerojatnost da ćete oštetiti bateriju ako je slučajno prepunite. Stoga se metode sporog punjenja općenito smatraju sigurnijima i pomoći će vam produžiti trajanje baterije. Stoga ćemo u našem kućnom punjaču koristiti brzinu punjenja od C / 10.

krug naboja

Za ovaj punjač osnova je sklop za upravljanje napajanjem pomoću Arduina. Krug se napaja iz izvora od 5 volti, kao što je AC adapter ili napajanje računala. Većina USB priključaka nije prikladna za ovaj projekt zbog trenutnih ograničenja. Izvor od 5 V puni bateriju preko snažnog otpornika od 10 ohma i snažnog MOSFET tranzistora. MOSFET tranzistor kontrolira količinu struje koja teče kroz bateriju. Otpornik je dodan kao jednostavan način za kontrolu struje. Kontrola struje se vrši spajanjem svakog kraja otpornika na Arduino analogne ulazne pinove i mjerenjem napona na svakoj strani. MOSFET tranzistor pokreće Arduino PWM izlazni pin. Filter na otporniku od 1 MΩ i kondenzatoru od 1 μF uglađuje impulse signala širinsko-impulsne modulacije na konstantan napon. Ovaj krug omogućuje Arduinu praćenje i kontrolu struje koja teče kroz bateriju.


senzor temperature

Senzor temperature služi za sprječavanje prekomjernog punjenja baterije i osiguravanje sigurnosti.

Kao dodatna mjera opreza, senzor temperature TMP36 dodan je punjaču za praćenje temperature baterije. Ovaj senzor proizvodi napon koji linearno ovisi o temperaturi. Stoga, za razliku od termistora, ne zahtijeva kalibraciju ili balansiranje. Senzor je montiran u izbušenu rupu u kućištu držača baterije i zalijepljen u rupu tako da bude pritisnut na bateriju kada se ugradi u držač. Pinovi senzora spojeni su na 5V tračnicu, na kućište i na Arduino analogni ulazni pin.

AA držač baterije prije i nakon postavljanja na matičnu ploču

Kod


Kod za ovaj projekt je vrlo jednostavan. Varijable na početku izvornog koda omogućuju vam da prilagodite punjač unosom kapaciteta baterije i točnog otpora otpornika snage. Također su dodane varijable sigurnog praga. Maksimalni dopušteni napon baterije postavljen je na 1,6 volti. Maksimalna temperatura baterije postavljena je na 35 stupnjeva Celzijusa. Maksimalno vrijeme punjenja postavljeno je na 13 sati. Ako se prekorači bilo koji od ovih sigurnosnih pragova, punjač se isključuje.

U tijelu programa možete vidjeti da sustav stalno mjeri napone na izlazima snažnog otpornika. Ovo se koristi za izračunavanje vrijednosti napona na bateriji i struje koja teče kroz nju. Struja se uspoređuje s ciljnom vrijednošću, koja je C/10. Ako se izračunata struja razlikuje od ciljane vrijednosti za više od 10 mA, sustav automatski prilagođava izlaznu vrijednost kako bi je ispravio.

Arduino koristi serijsko sučelje za prikaz svih trenutnih podataka. Ako želite kontrolirati rad svog punjača, Arduino možete spojiti na USB priključak računala, ali to nije potrebno jer se Arduino napaja iz 5V napajanja punjača.

Kapacitet unutarnje baterije = 2500; // vrijednost kapaciteta baterije u mAh otpor plovka = 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 stupnjevima C) //float cutoffTemperatureF = 95; // maksimalna temperatura baterije koja se ne smije prekoračiti (u stupnjevima F) long cutoffTime = 46800000; // maksimalno vrijeme punjenja od 13 sati, koje se ne smije prekoračiti int outputPin = 9; // izlazna žica spojena na digitalni pin 9 int outputValue = 150; // PWM izlazna vrijednost int analogPinOne = 0; // prva naponska sonda spojena na analogni pin 0 float valueProbeOne = 0; // varijabla za pohranu vrijednosti na analogPinOne float voltageProbeOne = 0; // izračunati napon na analogPinOne int analogPinTwo = 1; // druga sonda napona spojena 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ća naponska sonda spojena na analogni pin 2 float valueProbeThree = 0; // varijabla za pohranu vrijednosti na analogPinThree float tmp36Voltage = 0; // izračunati napon na analognomPinThree float temperatureC = 0; // izračunata temperatura senzora u stupnjevima C // temperatura plovka F = 0; // izračunata temperatura senzora u stupnjevima F float voltageDifference = 0; // razlika između napona na analogPinOne i analogPinTwo float batteryVoltage = 0; // izračunati napon baterije float current = 0; // izračunata struja koja teče kroz opterećenje u (mA) float targetCurrent = batteryCapacity / 10; // ciljana izlazna struja (u mA) postavljena je na // C/10 ili 1/10 kapaciteta baterije float currentError = 0; // razlika između ciljane i stvarne struje (u mA) void setup() ( Serial.begin(9600); // postavljanje serijskog sučelja pinMode(outputPin, OUTPUT); // postavljanje pina kao izlaza) void loop() ( analogWrite ( outputPin, outputValue); // zapišite izlaznu vrijednost na izlazni pin Serial. print("Output: "); // prikažite izlazne vrijednosti za kontrolu na računalu Serial. println(outputValue); valueProbeOne = analogRead(analogPinOne ); // očitajte ulaznu vrijednost na prvoj sondi naponProbeOne = (valueProbeOne*5000)/1023 // izračunajte napon na prvoj sondi u milivoltima Serial.print("Voltage Probe One (mV): "); // pokažite napon na prvoj sondi Serial.println(voltažProbeOne); valueProbeTwo = analogRead(analogPinTwo); // očitajte ulaznu vrijednost na drugoj sondi naponProbeTwo = (valueProbeTwo*5000)/1023; // izračunajte napon na drugoj sondi u milivoltima Serial.print("Voltage Probe Two (mV): " ); // prikaži napon na drugoj sondi Serial.println(voltageProbeTwo); napon baterije = 5000 - naponProbeTwo; // izračunavanje napona baterije Serial.print("Napon baterije (mV): "); // prikaži napon baterije Serial.println(batteryVoltage); struja = (voltageProbeTwo - voltageProbeOne) / otpor; // izračunaj struju punjenja Serial.print("Ciljna struja (mA): "); // prikaži trenutni cilj Serial.println(targetCurrent); Serial.print("Struja baterije (mA): "); // prikaži stvarnu trenutnu Serial.println(trenutni); currentError = targetCurrent - trenutni; // razlika između ciljne i izmjerene struje Serial.print("Trenutna pogreška (mA): "); // prikaži grešku trenutne postavke Serial.println(currentError); valueProbeThree = analogRead(analogPinThree); // očitajte ulaznu vrijednost treće sonde, tmp36Voltage = valueProbeThree * 5. 0; // pretvaranje u napon tmp36Voltage /= 1024.0; temperaturaC = (tmp36Napon - 0,5) * 100 ; // pretvorba temeljena na 10 mV po stupnju s pomakom od 500 mV // ((napon - 500 mV) puta 100) Serijski. print("Temperatura (stupnjevi C)"); // prikaži temperaturu u stupnjevima Celzija Serial.println(temperatureC); /* temperaturaF = (temperaturaC * 9,0 / 5,0) + 32,0; //pretvori u Fahrenheit Serial.print("Temperatura (stupnjevi F) "); Serial.println(temperatureF); */ Serial.println(); // dodatni prazni redovi za lakše čitanje podataka prilikom otklanjanja pogrešaka Serial.println(); if(abs(currentError) > 10) // ako je pogreška trenutne postavke dovoljno velika, prilagodite 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); // zapišite novu izlaznu vrijednost ) if(temperatureC > cutoffTemperatureC) // zaustavite punjenje ako temperatura baterije prijeđe sigurni prag ( outputValue = 0; Serial.print("Max Temperature Exceeded"); ) /* if(temperatureF > cutoffTemperatureF) / / zaustavite punjenje ako temperatura baterije prijeđe sigurni prag ( outputValue = 0; ) */ if(batteryVoltage > cutoffVoltage) // zaustavite punjenje ako napon baterije prijeđe sigurni prag ( outputValue = 0; Serial.print("Max Voltage Exceeded" ); ) ako (millis() > cutoffTime) // zaustavi punjenje ako vrijeme punjenja premaši prag ( outputValue = 0; Serial.print("Max Charge Time Exceeded"); ) delay(10000); // odgoda od 10 sekundi prije sljedeće iteracije petlje )

Verziju izvornog koda za preuzimanje možete pronaći na donjoj poveznici.

Najpopularniji povezani članci