Két celláról semmi gond sincs, millió olyan (kapcsolóüzemű) step-down konverter van, ami (az esetünkben fontos) 5-8.4 voltos tartományból 3.3 voltot csinál. Védett cellák esetében automatikusan megoldott a túláram, túlmerítés és a túltöltés elleni védelem is.
Igazán izgalmas egy cellával lenne. Ott persze le és fel is kellene konvertálnia/szabályoznia (a legtöbb gyártó 2.5 voltig történő kisütés esetére adja meg a kapacitást és a várható élettartamot). Az lehet a probléma, hogy a step-up és a step-down konvertereket is el lehet intézni egy induktivitással és egy kapcsolóelemmel. Ha pedig le és fel is kell konvertálni, akkor praktikusan ellenütemű kapcsolók kellenek pici trafóval. De ez sem lenne művészet, csak a szándék hiányzik. Csak azt tudnám, hogy miért...
az a gond, hogy a liion cella 3.6-4.2V között mozog. Alul az a 0.3V még egy nagyon szuper LDO-nak is nagyon kevés. olyan kellene ami két celláról megy, korrekt step-down de rendesen kezeli a cellát hogy ne süsse túl.
Igen a NodeMCU adja magát egy ilyen megoldásra, de igazad van, hogy az eredő hatásfok (~0,85 * 3,3 /5 = 56%) nem szívderítő. Egy picit jobb lehet sw step-up majd sw step-down konverterrel (0,852 = 72%), de így is van elkerülhető veszteség + bután néz ki. Mindegy, talán kijönnek valamikor egy aranyos, körömnyi méretű modullal.
nem nézted be, szerintem is magától értetődő, és én sem találtam. parasztosan fogtam egy ilyen egycellás telefon vésztöltőt, amiben benne van az 5V stepup, és rádugtam a nodemcu boardra, amiben meg van 3.3 szabályzó. pazarol rendesen...
- a wifit én a LuaLoader-ben konfigolom, az elmenti maradandóra, többet nem kell vele törődni.
- a kód tetején kell beírni hogy melyik pin az 1w busz, meg a thingspeak API kulcsot
- az futás elején kilistázza a buszon talált ds18b20-akat, olyan alakban mint ahogy a kódba be kell tenni. Innen be kell copy-pasteolni a kód tetején az én négy IDm helyére. Az utolsó után nem kell vessző! Amelyik szenzor itt az első, az lesz a field1, és így tovább. A thingspeak asszem 8 fieldet enged. Ha átírtad, utánna újra fel kell tölteni.
Hiányosságok:
- nem sleepel mérések között. mondjuk ha nem elemről megy, nem sok értelme van
- nem kezeli ha a wifi vagy a hálózat leállt. idővel vissza szokott konnektálni nekem
- egyesével olvassa a szenzorokat, nem használ simultaneous conversiont. ahhoz kellene táp is a szenzoroknak, most nekem parasitic power-ben megy
-- search bus for devices ow.setup(pin) count = 0 ow.reset_search(pin) repeat addr = ow.search(pin) if (addr~=nil) then crc = ow.crc8(string.sub(addr,1,7)) if (crc == addr:byte(8)) then if ((addr:byte(1) == 0x10) or (addr:byte(1) == 0x28)) then count = count + 1 print (string.format("{%d,%d,%d,%d,%d,%d,%d,%d},",addr:byte(1,8))) end end end tmr.wdclr() until ((addr==nil) or (count>=10))
getTemp=function(sAddr) ow.reset(pin) ow.select(pin, sAddr) ow.write(pin, 0x44, 1) tmr.delay(1000000) present = ow.reset(pin) ow.select(pin, sAddr) ow.write(pin,0xBE,1) data = nil data = string.char(ow.read(pin)) for i = 1, 8 do data = data .. string.char(ow.read(pin)) end crc = ow.crc8(string.sub(data,1,8)) if (crc == data:byte(9)) then t = (data:byte(1) + data:byte(2) * 256) * 625 t1 = math.floor(t / 10000) t2 = t % 10000 return t1.."."..t2 else return nil end tmr.wdclr() end
sendData=function(d) s="" for i=1,#d do s=s.."&field"..i.."="..(d[i]) end conn=net.createConnection(net.TCP, 0) conn:on("receive", function(conn, payload) if (string.find(payload, "Status: 200 OK") ~= nil) then print("Posted OK"); end end) conn:on("connection", function(conn, payload)
print (s) conn:send("GET /update?api_key="..apiKey..s .. " HTTP/1.1rn" .. "Host: api.thingspeak.comrn" .. "Connection: closern" .. "Accept: */*rn" .. "User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)rn" .. "rn") end) conn:on("disconnection", function(conn, payload) conn:close(); collectgarbage(); end) conn:connect(80,"api.thingspeak.com") end
tmr.alarm(0, 60000, 1, function() results={} for i = 1,#addrList do results[i]=getTemp(addrList[i]) end sendData(results) end )
Nem sürgős, örülök ha meg tudod oldani és meg is osztod velünk!
Teljesen jó, ha a programba kell beírni, de végülis mindegy, mert feltölti mondjuk az első négyre aztán majd úgy lesz berakva a szenzor amelyik azt méri amit szeretnék. Vagy csak egyszerűen utána nevezem el a mezőket amikor látom, hogy melyiket hova tölti fel.
A programba úgyis bele kell írni a wifi csatlakozás miatt és a write kódot is bele kell rakni.
én most tesztelem. 3 napja megy, egyszer volt hogy 20percre valamiért nem tudott konnektálni, de szerintem csak béna a breadboard, mert pont akkor pakolásztam is.
az egyiken dht11 van, az a szenzor egy rakás szar. a másikon egy 18b20. egy 18650 akkuról percenkénti logolással 24-26 órát ment sleep nélkül. most játszom a deep sleeppel, a mai a negyedik nap és még megy.
a 1wire cuccban esp-ileg nem mélyültem el, a nodemcu api elég low level, az alap busz kommandokat tudja. szoftverileg nem látszik problémásnak a több szenzor elkezelése egy buszon. elektromosan viszont van nyűg rendesen. az esp 3.3V és nem is 5V toleráns, a 1wire meg 5V és a busz meghajtásához kell is neki. Egy szenzor rövid dróttal elmegyeget 3.3V-ról, de nem várnék tőle sokat. Vannak a maximnak i2c buszod meghajtói, azok megoldanák a szintillesztést is asszem. van is valahol, csak kopaszon, nincs hozzá breakout boardom.
Minden példa AVR-re, és STM32-re is. Ami azért külön jó, mert egy csomó mindent pont ellentétesen valósítottak meg bennük. (Kell-e interrupt flag-et törölni, hová menti a state-t, stb.)
Foleg amikor az ipafi szabvanyok egymasnak bekavadnak,es egy rendszeren belul esetleg tobb is elofordul. Ekkor jon az hogy ugyanazokat a buszokat sl keĺl kezdeni szetszedni.