7.9.17

Load balancing TP4056

I have a set of small, 6V solar panels.
Both are able to produce ~300mA in near-perfect conditions (600mA combined).
The problem is such output is available only in extremely positive conditions.
Majority of the time, the panels produce around 100-200mA.
And the problem is the settings of the TP4056 - it allows charging of the battery by up to 1A (consuming 1.1A at 5V in such conditions).

There is an Rprog resistor that sets the charging current.
When set too high, the load will cause the solar panel to severely decrease the power output. The voltage will drop close to 4V which makes the charger only "trickle" charge the battery. The result is slow but severe decline in battery power and even on sunny days almost no charging.
When set tool low, it works in majority of conditions, but when sunny, one is wasting a lot of energy - e.g. panels deliver 600mA, but you can only use 120mA out of it.

I wanted to do something similar to MPPT (maximum power point tracking).
To do so, I installed INA219 power sensor on the power line of the panel - by that I know how much power do I get to the system.

I de-soldered the 1.2k resistor and soldered a lead to PIN2 of the TP4056. The resistance is set against the ground.

I made simple measurements and discovered, that any resistor above 11k results in charging current of ~70mA. Good enough.
Lowering the resistance had direct impact on the current, the voltage was always 4.28V during the main charging cycle.
I decided to use 3 N-channel MOSFETs (BS170) to connect another 3 resistors in parallel. I used values of 22k, 12k and 6.8k. The resistance of BS170 is negligible (around 5 ohms as far as I remember).
Using these 4 resistors, I can modify the resistance in a range between 12k to 2.78k. The highest resistance results in 70mA charging current, the lowest results in approx. 460mA. Good enough.
I need 3 data lines from the ESP8266 to drive the MOSFETs. I used 2.2k resistor to drive the gates from the data pins.
I had insufficient pins available, so I used everything available (IO0, IO14 and IO15).
The only problem was that I was connecting the data lines to the resistors in the night and had no idea which one is which.

So, in the code I initially drive all the outputs low, therefore the resistance is 12k. This was enough to partially charge the battery, but despite very sunny day I wasted most of the energy.

I thought about opening the box again and looking at the connection, but I was lazy - so I came with a workaround.
Every 3 minutes the ESP does a "measuring exercise". It walks through all the possible resistor combinations, waits 1 second to stabilize the power output and then measures the power using the INA219 sensor.
It takes 8 seconds to do so, afterwards the code selects the best power combination and sets it as a resistance output for next 3 minutes.

I am testing it now for a first day - so far it's extremely cloudy comparing to yesterday, but the battery is charged better than yesterday. I can see in the logs that the resulting resistance is constantly adjusted. So far I am very happy with it.

Next step is to replace this "rough" solution with digital potentiometer with Up/Down or i2c protocol. This will allow me to change the resistance 1 step at a time and do better power approximations over time. It might be done constantly, not every 3 minutes, potentially grabbing even more solar energy. I already have MCP4018T-103E, but the SO-70 package make it useless for me - I have to order something through-hole or at least bigger than this.

Still, I am very happy with the setup and will continue to do comparative measurements.

19.8.16

Orange Pi ONE and camera

I bought Orange Pi One to drive my 3D printer.
The plan was to use OctoPrint, connect printer using USB, connect network using the on-board Ethernet and use the Orange Pi Camera board to have video.

19.1.15

Svajc, den 0

Dnes (18.1.2015) to bolo relativne narocne.
Najskor velmi (VELMI) vela soferovania.
Okolo 860 km dokopy, s nejakymi malymi odbockami (pumpa, toalety, letisko).
Cesta krasna, akurat draha - mal som genialnu myslienku usetrit za naftu a netankovat doma, ale radsej v Rakusku. Akurat som akosi zabudol na priepastne rozdiely, ktore tam maju pre pumpy v meste a pumpy popri dialnici - nie, ze by som o tom nevedel, ved som tam 8 mesiacov pracoval, akurat som na to zabudol.

30.3.14

Polievatko - verzia III.

Momentálne polievatko, ktoré som postavil s I2C adaptérom a relátkami má jednu zásadnú nevýhodu - umiestnenie.
Musí byť relatívne blízko k PC (maximálna dĺžka USB je niekde okolo 5 metrov), výstupy na jednotlivé ventily tiež nesmú byť nejako veľmi vzdialené. A tu je problém - polievam momentálne 5 vecí a tým pádom mi ide od čerpadla celkom 5 hadíc. A to je bordel, nepraktické a hlavne škaredé.

30.8.12

i2c boduje

Ako som pisal v minulom clanku, postavil som i2c usb adapter. Dalsia meta bola pripojit k nemu relatka. Rozhodol som sa, ze z dovodu co najvyssej spolahlivosti postavim i2c usb adapter a aj relatka na jednu dosku.
Nepouzil som 23008 (8 bitov I/O), rozhodol som sa pre cip 23016 - za tip nan vdacim clankom o Raspberry Pi - ma 16 I/O vystupov.
8 pouzijem na relatka a 8 necham vyhradenych na dalsie vstupy alebo vystupy - potencionalne cidlo vlhkosti pody, vysky hladiny vody, zistovanie, ci prsi a podobne. Uvidime...
Zistil som, ze existuje zaujimavy program - eagleCAD. Je free s nejakymi obmedzeniami - velkost dosky, pocet vrstiev PCB a podobne. Mne ale tie obmedzenia nejako neprekazali, dokazal som sa s nimi popasovat. Je jedna vec navrhnut dosku a uplne ina ju vyrobit. A to je celkom problem. Nasiel som zaujimavy navod na youtube. Postup je to sice skvely, ale moc sa mi nedaril - 3x som nazehlil tu dosku a 3x som ju musel zmazat. Nikdy sa mi nepodarilo nazehlit okraje. Stred bol viac-menej OK, ale to je k nicomu. Nakoniec som to skusil po stvrty krat a vyleptal - nebol to dobry napad. Polovica dosky sa zle vyleptala a preleptala aj spoje tam, kde mali byt. A co je horsie, vsetky okrajove linky sa proste nevyleptali - cokolvek malo ist niekde pri kraji zmizlo. Musel som ist do GME kupit novy plosak. A tento krat som si dal zalezat - od Moki som si ukradol laserovu tlaciaren domov, v ovladaci som nastavil kvalitu tlace na Dark (co najviac toneru). Prekreslil som aj plosak tak, aby v nom boli hrubsie linky - nech je vacsia sanca, ze aj ked sa nepodaria, tak budu dostatocne dobre na fungovanie. Opat boli 2 pokusy o nazehlenie, ale tento krat som uz ten 2. pokus povazoval za dost dobry. Skoda, ze som nemal nejaku olejovu fixku na opravenie tych okrajovych liniek - musim si kupit. Vyleptal som to, nevyzeralo to tak zle, ako som si myslel. Nakoniec sa nepodarili asi 4 linky + dalsie asi 4 boli nevyrazne. Tie nevyrazne som prebehol cinom (pre istotu) a tie poskodene som proste nahradil kuskami odstrihnutych noziciek z rezistorov. Vrtanie 0.6mm vrtakom je blbost - ani samotne rezistory mi do tych dierok nesli vocpat. Takze som to nakoniec prevrtal este raz 0.8mm vrtakom, niektore diery (na konektory pre silove kable) som musel riadne zvacsit a rozvrtat. Podarilo sa - az na maly detail. Znicil som jeden z konektorov. Nevadi - kedze momentalne mam len 4 realne vystupy z cerpadla, zapojim len tie a na to mam konektorov dost.
Kazdopadne, tu je doska. Musim uznat, ze ta schema je prasacka, ale vznikla spojenim existujucej schemy pre i2c-tiny-usb a mojho navrhu. Nepodarilo sa mi prepojit korektne zem a 5V napajania, takze som to musel polinkovat dratmi. Musim sa s tym naucit poriadne robit. Nasiel som vynikajuci navod na pouzitie EagleCADu na youtube.
Sice je to dlhe (vela casti) a obcas zdlhavo vysvetlovane, ale nakoniec to bolo presne to, co som potreboval - naucil som sa otacat tie suciastky, vyrabat spoje, optimalizovat prepojenia, menit sirku ciary a podobne. Podarilo sa mi s vynimkou jedineho spoja vyrobit dosku na jednej vrstve. Drobny problem toho navrhu bol, ze som mal v povodnej scheme chybu - prehodil som data a hodiny z i2c do 23016 - cim sa zapojenie, samozrejme, stalo nefunkcnym. V navrhu tu uz je to opravene, ale len za cenu, ze su tam 2 spoje (nevedel som preskocit datovu linku). Ale to nie je az taka tragedia.
No v konecnom dosledku som uz mal vyrobenu dosku podla povodneho navrhu, to znamenalo, ze som musel trosicku vrtat, rozskriabat datove a hodinove spoje a zletovat to rucne. Problem vyrieseny ;) Kedze spoje sa musia nazehlovat opacne, tak som sem prihodil aj obraz dosky v pozitive, pripraveny na nazehlovanie. Dosku som po vyvrtani este natrel vrstvou kolofonie, rozdrvenej v alpe - je to finta od profesora, co nas na zakladke ucil letovat. Finta je to skvela - je to zaroven vrstva proti oxidacii a este k tomu to zjednodusuje letovanie. Jedina nevyhoda je, ze to lepi pri vrtani, ale to sa da prezit. Pretrel som to par krat, aby som si bol isty, ze to je kvalitne (a hlavne preto, ze som toho roztoku spravil prilis vela).
Dosku som s vynimkou spomenuteho konektora naletoval, ozivil, opravil tie spoje a hotovo - relatka cvakaju tak, ako maju. Uznavam, ze do presneho vrtania alebo rovneho letovania mam co dohanat, ale ucel to splnilo - doska funguje na 100%, dokonca som odskusal aj ten RJ11 vystup, ktory som si tam dal - na pripadne rozsirenie o dalsie dosky s i2c zbernicou - toto je len tak na pobavenie, kedze este stale mam na tej doske 8 I/O portov.
Trosku ma potrapili tie WAGO svorky - naletovane boli OK, ale nevedel som, ako do nich vlastne vtrepat kable. Ukazalo sa, ze vlastne velmi jednoducho - do jednej dierky clovek silno zatlaci srobovakom, tym sa v druhom otvore spravi dierka medzi pritlacnymi plechmi a da sa tam efektne vlozit drotik. Akonahle som vybral srobovak, zubky sa zavreli a extremne pevne uzavreli drotik - parada.
Otestovane, pracujuce zariadenie som zobral na zahradu - pripojil som 12V adapter, ventily a zacal sa hrat - cvakal som cidlami tak rychlo, ze to doslova stihlo vystreknut 3 kvapky - extremne super.
Pripojil som aj 220V vstupu a aj vystup pre cerpadlo, odskusal som aj to a bolo - vsetko fungovalo, ako ma.
Zostal posledny problem - samotnemu zariadeniu moc nevonia voda. Takze som zobral krabicu na potraviny, spravil som dozadu dierku na srob, ktorym som to vonku prichytil o konstrukciu, v ktorej je aj cerpadlo. Pripojil som USB, vsetky kable som pospajal rychlosvorkami a pozatvaral - hotovo.
Pripojil som Alix. Zmenil som v podstate len par riadkov v polievacom programe - namiesto vystupu na USB-bit-whacker som posielal vystup na i2c.
Rozdiel voci 23008, o ktorej som pisal minule, bol v tom, ze bolo treba nastavit 2 registre (0x00 a 0x01 - jeden ovlada prvych 8 bitov a druhy ostatnych 8, vsetko na vystup) a hodnoty sa posielaju na ine porty (0x12 a 0x13, opat rozdelene po 8 bitov na vystup).
V Alix-e som prehodil system. Z Voyage som presiel radsej na OpenWRT - mam ho radsej a hlavne malo uz skompilovany modul pre i2c-tiny-usb :)
Webserver zostal na lighttpd tak, ako bol na Voyage predtym.
Akurat som prehodil par riadkov - pridal som ficuru, ktora zabezpeci, ze ked sa vypina vystup, tak sa najskor vypne cerpadlo a az 2 sekundy na to sa vypne samotny okruh - aby tam zbytocne nezostala natlakovana voda.
No a pridal som na poziadavku uzivatelov (Lusimta) moznost napisat si vlastny program polievania - takze ked clovek zada povedzme 30 5 7 30 10 5 5 10, tak sa bude polievat v tomto poradi:

  • 30 minut platan
  • 5 minut visna
  • 7 minut ceresna
  • 30 minut jablon
  • 10 minut opat platan
  • 5 minut visna
  • 5 minut ceresna
  • a nakoniec 10 minut jablon
Samozrejme sa da ktorekolvek polievatko preskocit - ak chcem napriklad len 10 minut polievat ceresnu, staci napisat do programu 0 0 10 - prve 2 sa preskocia a 10 minut sa bude polievat ceresna.
Myslim, ze v tomto momente som s polievatkom skoncil - funguje uz 3 tyzdne absolutne spolahlivo, takze som spokojny - zadanie sa podarilo.
Snad tento navod pomoze aj niekomu inemu - podobne slahnutemu, ako ja :)