NordicOffGrid´ Logo
Off-grid solcellssystem.
I Nordiskt klimat!
 by Bosse
By AutonomTech.se Frittliv webbplats

 Webbsidan är senast uppdaterad:  

Nordic Clima FanControl

Speciella behov utifrån Nordiskt kli­mat & sol­energi

Webbsidan skapad 2021-11-28
Kommer uppdatera lite oregelbundet här efterhand som projektet framskrider.

Projekt: Konstruktion av klimatstyrning för varvtalsreglering av 12V PM-ventilationsfläkt.
En mikroprocessorstyrd termohygrostat klimatregulator.
Är ett hobbyprojekt utan tidplan, med oregelbunda framsteg.
Köpte de första delarna redan 2014, men så kom flytt och en del annat ivägen och projektet hamnade på undantag samt körde fast lite på att jag inte var nöjd med det Arduino Motor Shield jag köpt samt att det krockade med utgångar till dåvarande LCD-displayen. Så när jag 2020 bestämde mig för att bygga en egen buck converter motordrive började jag aktivera projektet lite igen, och nu är det aktivt på riktigt igen! Fick även en experimentell medicinsk behandlig för min bråkande kropp hösten 2021, vilket gett mig lite mer energi, ork och uthållighet.

Bakgrund funktion:
Det Nordiska klimatet med långa kyliga vintrar då hög luftfuktighet råder gör att mycket fukt buffras upp i allt organiskt material (tyg, trä, etc) inomhus vid kallställda off-grid fritidshus / husvagn. Vid uppvärmning frigörs då mycket fukt som behöver ventileras ut, mest första dygnet och märkbart under tre dygn. För att göra detta så energisnålt som möjligt bör en ventilationsfläkt styras utifrån fukt-temp-givare för inkommande luft samt för rumsluft, så man hela tiden bara ventilerar precis så mycket som behövs för detta. Med fukt-temp-givare kan man räkna ut luftens absoluta fuktinnehåll och daggpunkt för bra styrning av fläktvarvtal, oavsett utetemperatur. Så kan då styra på en kombination av hur mycket högre absoluta fuktighen är inne än ute, daggpunkten inne vs utetemp samt på relativa fuktigheten inomhus. Kanske typ daggpunkt < (Tin - Tout)/2? I husvagn suger fläkten in den svala luften under husvagnen.
På sommaren styrs enheten av temperatur och försöker hålla innetemperaturen under önskad nivå genom att fläkta in så sval luft det går utifrån, lite som en sorts fusk-AC. Varvtalstyrs så den fläktar bara precis så mycket som behövs för att hålla önskad temperatur. Kan även styra på relativ fuktighet, då det är aktuellt. Varvtalsstyrning ger strömsnål drift och jämn temperatur.
Vid riktigt liten stuga eller liten husvagn ökar snabbt relativa fuktigheten inne vid matlagning (kokning) och då kan fläkten även få öka i varvtal för att hålla nere den fukthalten på lagom nivå, lite som en automatisk köksfläkt styrd av fukt-temp-givarna. I en husvagn har man oftast så stora ventilationsöppningar i takluckan så där spelar det ingen roll om man blåser in eller suger ut luften, men i stuga bör man vinterhalvåret helst suga ut luften för att inte få övertryck inne som kan tvinga ut fukt i ytterväggar, golv och tak.
Är samma om man torkar hängd tvätt inne eller kommer in med blöta ytterkläder.
Varvtalsstyrd fläktventilering som bara ventilerar precis så mycket som behövs spar energi för uppvärmningen, samt spar ström. En grundventilering behövs dock alltid för bra inomhusluft så inte CO2 nivån blir för hög eller föroreningar i luften, kanske som självdrag då.
Arduino Uno R3
Bygger den kring ett Arduino Uno R3 mikro­kontroller­kort som kodas i C++ och får utgöra "intelli­gensen" som styr fläkt­varv­talet och läser av givare.
Visar då driften på en liten LCD-skärm, där man även kan göra inställningar.
Så kommer ha ett litet menysystem där man kan välja tyst AC-funktion när man är inne med begränsat max fläktvarvtal, AC-drift där fullt varvtal tillåts när man är ute, ett ventileringläge, etc.

Nytt: 2021-11-29
Display:
Har hittat och utvärderat en bra liten LCD-display med 2x16 teckens visning, med bra tillgänglighet hos flera webbshoppar. Med god läsbarhet vid enbart omgivningsljus samt med bakgrundsbelysning vid behov. Vid lcdSetBlacklight(0) har den fortfarande en mikroskopisk belysning aktiverad, så den går att läsa i nattmörker utan att direkt uppfattas som bakgrundsbelyst.
Olimex Shield-LCD 16x2 Olimex Shield-LCD 16x2 med fyra tryck­knappar som styrs via I2C-bussen. Har även 10st GPIO på kortet, också åt­kom­liga via I2C. Samt man kan styra ljus­styrk­an via sin kod inom 0-155, där jag nu använder lcdSetBlacklight(85) för lagom bak­grunds­belys­ning dvs bara 1/3-del av ljus­styrkan.
Har även kodat en skärms­läckare, som släcker bak­grunds­belys­ningen efter X antal minuter utan knapp­tryck­ning.

Har provat både på Arduino Uno R3 och ESP32 Uno, med samma goda resultat. Dock tar I2C kommu­nika­tionen en hel del tid, typ drygt 640ms för att skriva alla de 2x16 tecknen vid I2C buss­hastig­het 100kHz som är max den klarar.
Har gått ned till 80kHz, då displayen hängt sig ett par gånger under långvarig drift.
Funderar på att koda en Display­Handler som bara skickar över de ändrade tecknen av de 2x16st, för att göra det snabbare.


Nytt: 2021-11-29
Komponenter:

  • 1st Arduino Uno R3
  • 1st Olimex Shield-LCD 16x2 display.
  • 2st Temp/fuktsensor – RHT03 / (DHT22)
    Mätbart område: 0 – 100% RH, Noggrannhet (RH): ±2%, Arbetstemperatur: -40 till +80°C, Noggrannhet (temp): ±0.5°C.
    Powerdata: Matning: 3.3-5V, Ström mätning: <1.5mA, Ström standby: <50µA, Avläsningsintervall nya värden: 2s, Kodexekvering nya värden: <4ms, Kodexekvering idle: <1ms. DHT-biblioteket (GitHub) till RHT03 / DHT22 har funktion för "Heat index (HI)", hur temperaturen upplevs vs Rh, så kan styra innetemperatur mot det vid AC-drift!
  • 1st INA219 High Side DC Current Sensor för mätning av fläktmotorns effektförbrukning. Är mest för att testa / lära inför nästa projekt (Nordisk PWM-solladdregulator).
  • Diverse elektronikkomponenter för att bygga själva motorstyrningens kraftelektronik i form av en energieffektiv Buck converter (egenkonstruerad). Finns även färdiga Arduino Motor Shield av lite olika sort för varierande max ström att köpa, men hittade inget jag kände mig nöjd med till min rätt kraftiga fläkt. Körde fast lite där tills jag bestämde mig att konstruera en egen.
    Jag är självlärd inom elektronik, så blir som det blir men brukar ändå bli bra.
  • Motorumsfläkt typ radialfläkt. Radialfläktar påverkas minimalt av turbulent insugningsluft, är ofta tystare samt klarar lite bättre mottryck. Tre bra egenskaper vid min användning!
    Data: 12V ca 3A, 2,5m3/min (150m3/hr). Min off-grid husvagn är på ca 11m3, så kommer kunna byta all luft var 5:e minut vid max varvtal. Bör bli en effektiv fusk-AC funktion!
  • 1st Adafruit Data Logger Shield för bygge av en temporär datalogger för att logga fukt-temp-beteendet när den buffrade fukten i all inredning torkas ur när den kallställda husvagnen värms upp. Som indata i utvecklingen av algoritmen att styra ventilationen då. Se nedan
  • Arduino IDE, gratis programvara att koda Arduino med i datorspråket C++, som inte direkt är ett nybörjarspråk. Men jag är självlärd och gillar C++ :-)
Video om synchronous buck converter, som är det jag bygger som drivsteg för fläktmotorn med samma IR2184 MOSFET driver (webb) jag använder (new version 2ED2184S06F replacing IR2184), samt flera jättebra källhänvisningar:
SMPSChart.pdf
Power Topologies Handbook
Synchronous or Nonsynchronous Topology?, Boost System Performance with the Right DC-DC Converter
What are Buck Converters - Discontinuous Mode vs. Continuous Mode
The Difference between CCM and DCM Explained
IEEE TOPOLOGY REVIEW OF DC/DC CONVERTERS
LMQ61460-Q1 Automotive 3-V to 36-V, 6 A, Low EMI Synchronous Step-Down Converter
AN-1197 Selecting Inductors for Buck Converters
Dual Synchronous Buck Converter
LM62460 6-A Buck Converter Optimized for Power Density and Low EMI
JLCPCB, PCB´s used in the video
Zero crossing detection using comparator circuit
Zero Crossing Detection Circuits Examples
Hybrid linjär LDO regulator och DC-DC switchregulator, Adding an LDO for Increased Standby Mode Efficiency Reference Design. För låg strömförbrukning i strömsparläge.


Nytt: 2021-11-30
I2C kommunikationen Arduino Uno => Olimex Shield-LCD 16x2:
När jag skickar 2x15 tecken via I2C vid 100kHz bussklockfrekvens tar det 616ms exekveringstid! Känns långt och rätt extrem.
Gick in och analyserad biblioteket LCD16x2 till Olimex-displayen och hittade då en delay(20) för varje tecken som skickas, vilket ger 2x15x20ms=600ms dvs där är orsaken till det långsamma. Då är frågan varför finns den där? Övrigt tar då ca 0,5ms/tecken.
Ur LCD16x2.cpp:
Olimex Shield-LCD 16x2  len = strlen(string);               
 for(int i = 0; i < len; i++){
    Wire.beginTransmission(ADDRESS);
    Wire.write(LCD_WR);
    Wire.write(y);
    Wire.write(x);
    Wire.write(string[i]);
    Wire.endTransmission();
    x++;
    if(x > 15){
      x = 0;
      y++;
      if(y > 2)
        return;
    }
    delay(20);
 }

Testade med delay(10) men då låser sig display / I2C, så går inte att snabba på så!
Får koda en DisplayHandler som bara skickar över de ändrade tecknen av de 2x16st, för att göra det snabbare. Lite synd den kommunikationen är så seg. I övrigt känns displayen bra.
Kan läsas med släckt bakgrunds­belys­ning i omgivande ljus, bra kontrast och tydlig, bra läsvinkel samt man kan justera bak­grunds­belys­ningens ljusstyrka 0-155 innifrån sin egen kod.

Nytt: 2021-12-13
DisplayHandler:
Har nu kodat färdigt en fin liten DisplayHandler i C++ som effektiviserar skrivningen till Olimex Shield-LCD 16x2 displayen. Gör i snitt skrivandet till displayen mycket snabbare.
Olimex Shield-LCD 16x2 Då varje skrivet tecken till displayen kräver en delay(20) i drivrutinen, så exekverar programkoden effektivare när bara de förändrade tecknen sedan sist skrivs till displayen.
Dvs bara det som behöver uppdateras skickas via I2C-bussen. Överst i bilden syns att skrivning av alla 2x16 tecken tar 659ms, medan i nedre bilden med DisplayHandler bara de siffror som förändrats skrivs och det då i snitt tar 43ms beroend på hur många siffror som förändrats.
Tiden 44ms där är totala exekveringstiden för hela programmets kod.
Mäter man temperaturen och mätvärdet är 22,4°C och nästa mätvärde blir 22,3°C så blir det bara siffran 3 som skrivs till displayen via I2C med min DisplayHandler. Det frigör även kapacitet på I2C-bussen för avläsning av givare.
Själva DisplayHandler bidrar försumbart till exekveringstiden har jag mätt upp.

Nytt: 2021-12-21
2st RHT03 testade med Arduino Uno R3:
Olimex Shield-LCD 16x2 Kopplat upp 2st RHT03 (DHT22) funkt-/temp-givare till mitt Arduino Uno R3 kort nu och det ser jäkla bra ut :-) Rh skiljer bara 0,5% mellan de två sensorerna och temperaturen 0,1°C! Har två till RHT03 jag ska testa där lite senare.
Är till min termohygrostat jag håller på att utveckla för klimatstyrning av en ventilationsfläkts varvtal i off-grid husvagnen. Kan även få fram heat index där, vilket är upplevd temperatur i förhållande till Rh, typ vid 30°C är det en jäkla skillnad vid Rh=90% och Rh=50%!
Ska nog styra på det vid AC-fläktdrift i sommarvärmen.
Daggpunkten ska jag troligen styra på då jag kommer till kall husvagn och mycket av den buffrade fukten i trä och tyg torkas ut vid uppvärmning och behöver ventileras ut för att undvika kondens i vinterväder. Jag räknar fram daggpunkten där ur Rh + Temp!

Givarna är fabrikskalibrerade, så tror jag kan lita på deras värden :-)
Värdena stämmer även bra med den termohygrometer av bättre kvalitet jag har på skrivbordet nära dessa vid denna test, som visar för inneluften här.
Kanske verifierar jag dem med en salkalibrering senare.

Funderar på att bygga detta först som en tillfällig mätdator för lite mätdatainsamling i husvagnen hur fukt- och temperatur-förloppet ser ut där nu denna årstiden när jag kommer dit och värmer upp husvagnen från kallställt.
Så får jag lite data för hur jag ska göra själva klimatregleringen för fukten där.
Typ funderar på att styra fläktvarvtalet så daggpunkten inne inte går över medel-temperaturen mellan ute- och inne-temp. Men om det ska vara precis mitt emellan de temperaturerna kunde jag då få bra data på!
Tog mig flera dygn att lösa så Arduino IDE kan kompilera funktionen sprintf() så den fungerar med float-tal, men är nu löst så jag kan formatera texten snyggt på 2x16 LCD-displayen här.
RHT03 datablad
Heat index temperature
Dew point from Rh & temperature
2021-12-22
Fukt-/temp-sensorerna reagerar snabbt även om de bara uppdaterar sina värden 1ggr/2s (som synes), så ska gå bra att styra fläktvarvtalet utifrån dem! Här höll jag mot den ena av de två intill varandra en svagt fuktad tumme utanpå en kort stund med snabb Rh-respons:

Kurvdiagram
Rh reaktionsrespons / stegsvar för RHT03 fukt-/temp-givare
X-axel: antal programloopar á 1s
Har provat alla mina 4st RHT03 (DHT22) fukt-/temp-sensorerna nu, och de ligger alla väl inom ±0,5% för Rh och ±0,1°C för temp mellan sig, så är riktigt imponerande tycker jag! Blir bra ingångsdata för regleringen! Samt värdena stämmer med en termohygrometer av bra kvalitet jag hade stående precis intill på bordet.

Nytt: 2022-01-02
Data logger shield:
Arduino IDE Serial monitor data
Arduino IDE Serial monitor data
Fått kontakt med SD-kortet på Adafruit Data Logger Shield. Hade ett sådant liggande så bygger nu först en temporär datalogger så jag kan logga fukt-temp-beteendet när den buffrade fukten i all inredning torkas ur när den kallställda husvagnen värms upp. Så jag kan få bra data på hur relativa fuktigheten / daggpunkten inne ska styras med fläktvarvtalet. Skrev lite funderingar kring det i föregående stycke, om dess tänkta algoritm.
Även dess RTC (Real Time Clock) har jag fått att fungera, förutom att dess kommunikation över I2C-bussen stör ut LCD-displayens kommunikation över I2C! Så försöker hitta en lösning...
Mitt data-logger-shield är en äldre version som inte är helt kompatibelt med Arduino Uno R3, så har beställt den nya versionen så får jag se om det funkar direkt med den ihop med LCD-displayen, innan jag gör en djupare felsökning!
2022-01-03
Nu fungerar min Arduino datalogger med att logga temp/fukt-data till SD-kortet!
SD-card log data
RHT03 Temp/Fukt-data loggad till SD-kort (test)
Kom på att jag behöver inte tidsstämpla med realtid utan räcker med löpande tid bara, så slapp jag konflikten mellan RTC och LCD-display. Skriva till SD-kortet gav ingen konflikt.
Är ett litet detektivarbete att hitta OK bibliotek. Det första SD-biblioteket jag provad tog för mycket SRAM så Arduino låste sig efter ett tag, samt det var långsamt.
Det Adafruit / SdFat bibliotek jag har nu funkar bra och snabbt! Se även Adafruit / SdFat GitHub samt original SdFat (SdFat GitHub).
Här drygt 3hr loggande nu ikväll var 6:e minut. Lade en fuktigt papperstuss intill ena temp/fukt-givaren efter en dryg 1/2-timme, som flyttades mellan dem efter drygt 2,5hr.
Loggat till en CSV-fil som jag sedan tagit in i LibreOffice Calc och gjort diagrammet.
Nästa test är att löda in ett par meter signalkabel till den ena temp/fukt-givaren och se om det funkar OK, sedan lite finputsning i koden så kan jag åka till husvagnen och logga.
Ska bli väldigt intressant att få den datan loggad över förloppet när den buffrade fukten torkas ut vid uppvärmning från kallställt!
Kan driva den från min powerbank i närmre 7 dygn och har tänkt logga 2-3 dygn :-)
2022-01-05
Har nu stoppat hela fukt/temp-dataloggern i frysen och kört en längre stund där för att testa så det fungerar i vinterkyla också. Hann kylas ned till -16°C.
SD-card log data
RHT03 Temp/Fukt-data loggad till SD-kort (köldtest)
Det fungerade om än med en siraps­seg LCD-display i den kylan, samt beräk­ningen av dagg­punkt fung­erade "bara" ned till runt -45°C graders värde sedan spårade den ur mate­matiskt och blev ej beräk­nings­bar med de formler jag använder. Men bör ju räcka i prak­tiken ändå för mitt ändamål. Så får lägga in i koden att det (NaN) detek­teras och då sätter dagg­punkten till -45°C - så bra utfall från testet. Data samplat 1ggr/60s.
Allt ser bra ut och de båda temp/fukt-mätarna av typ RHT03 följs bra åt, vilket indikerar att de fungerar OK i dessa temperaturer. Värdena ser rimliga ut också och hela Arduino Uno R3 paketet inkl SD-kortet fungerade i kylan, strömförsörjt via min powerbank.
Känns skoj!

Att Rh-värderna stiger successivt under tiden i frysen beror på att sensorn kyls ned under den tiden, och så länge sensorn är varmare än luften i frysen värms luften precis intill den upp vilket ger lägre Rh! Så vid snabba temperatur­förändringar finns den fördröjningen helt naturligt.

Vid 0,4hr öppnade jag frysdörren och kollade till dataloggern, vid 0,53hr tog jag ut dataloggern förvarad i en frysask och satte på locket för att undvika kondens, samt vid 0,8hr öppnade jag locket och tog ut dataloggern. Därav de olika påverkan på de loggade värden.
Mellan ca 0,15hr - 0,58hr funkade inte beräkningen för daggpunkt.
Kurvorna DewP... är beräknad daggpunkt.
Kurvorna HeatInd... är beräknad heat-index temperatur.

Bara att löda in den lite längre signal­kabeln jag har till den ena RHT03-givaren, så kan jag någon lämplig dag snart åka till husvagnen och logga hela upp­värmnings­förloppet där ifrån kallställt.

Solcellsström vid svagt ljus är ett viktig tillskott!
Webpage: server time: 76.0 ms, (incl. log: 57.7 ms) ||