Tuesday 19 January 2016

Auton esilämmityksen ajastus ESP8266:lla.

Älä missään nimessä kopioi mitään mitä tulet lukemaan. Virityksessä käytetään 230V verkkojännitettä joka on vaarallista ja tappavaa.
Ihan oikeesti. ÄLÄ!

Suomen kylmät talvet, jopa Helsingin korkeudella pakkanen laskee välillä -25°C ja sen alapuolelle. Näissä lämpötiloissa autot tykkäävät esilämmityksestä. Jo +5°C lähtien. Esilämmitys vähentää polttoaineen kulutusta sekä moottorin kulumista. Lisäksi sisätilanlämmitin sulattaa ikkunat jäästä ja muutenkin mukavampi istua lämpimään autoon.


Tähän asti minulla ei ollut mitään kummempaa ajastinta tai muuta säätääkseeni lämmitysaikaa. Käytännössä keittiön nurkassa oli töpseli josta meni jatkojohto ulos autolle. Joskus kyseinen johto unohtuu laittaa seinään, tai jää seinään liian pitkäksi aikaa. Kumpikaan ei ole hyvä. Toinen tarkoittaa kylmällä moottorilla ajoa ja toinen ylimärääräistä sähkönkulutusta. Ylimääräinen moottorin lämmitys myös kuivattaa moottorin sisäpinnat öljystä, jolloin voitelu on alkuun todella heikkoa.

Totesin, että automaatio tähän olisi loistava. Käytän autoa suhteellisen satunnaisesti, joskus aamulla ja joskus illalla ei mekaaninen tai digitaalinen ajastin olisi toimiva ratkaisu. Lisäksi jotain minkä pystyy kytkemään päälle sängystä juuri herättyä olisi loistava. Päätin rakentaa oman ajastimen ESP8266-E12 moduulilla ja parilla releellä.




Sekava piirustus EAGLE:lla. Täytyy vähän vielä harjoitella siistien piirtämistä.


 

Ja PCB sekä komponenttien asettelu piirille.
 

Selvisin yhdellä hyppykaapelilla. Olisin saanut vedettyä tuon tracen myös releen jalkojen välistä, mutta halusin pitää sen mahdollisimman kaukana 230V traceista.

Kun PCB näytti hyvältä ja siistiltä ajoin sen pcb gcoden läpi saadakseni gcoden jyrsimelle ja tein siihen muokkaukset Cambamilla.


Jyrsintä 0.1mm 60asteen kaiverrusterällä. 


Valmis piirilevy. Poistin kuparit verkkojännitteisten alueiden ympäriltä pitääkseni mahdolliset valokaaret poissa. Lisäksi releen tracejen ympärillä on suojavälit. Moduulin alle tuli pala Kapton teippiä suojaamaan sitä oikosuluilta kupariin. Alareunasta yksi trace meni vähän rikki koska levy ei ollut täysin suorassa alustalla. Korjasin sen palalla johtoa ja tinaa rikkinäisen kohdan päälle.



Moduuli paikallaan ja verkkojännitteiset tracet tinattuna virranjohdon parantamiseksi.

Kaikki komponentit laudalla ja juotettuna. Testin aika.
 
Ja se toimii. Releet naksahtaa päälle ja ledi syttyy. Sitten olikin aika koodata. Moduuliin olin flashannyt ESP8266BASIC firmwaren, joka omasta mielestäni on paras näiden moduulien ohjelmointiin. Jos et ole jo mokomaa kokeillut niin suosittelen sitä vakavasti. Kerran firmiksen flashattyä ei ole enään tarvettä kytkeä moduulia tietokoneeseen, vaan se ohjelmoidaan internetin yli. Tarvittaessa vaikka toiselta puolelta maapalloa! Puhelimella!

Softa moduulilta. Ei mitenkään optimoitu, saatika siisti koodi. Toimiva kuitenkin.

 cls  
 state = Off  
 po 13, 0  
 po 14, 0  
 heatingTime = 0  
 heatingTimeMin = 0  
 humanTime = 0  
 interrupt 12, [phyButton]  
 timer 1000, [timerSec]  
 css ulkoasu.css  
 wprint |<meta name="viewport" content="width=device-width, initial-scale=1" />|  
 wprint |<meta http-equiv='refresh' content='5;URL=/input?'></head>|  
 wprint |<center><b>|  
 wprint "Heater: "  
 wprint htmlvar(state)  
 wprint "<br> Heating time left: "  
 wprint htmlvar(humanTime)  
 wprint "<br><br>"  
 button "On for 2H" [onTwoH]  
 wprint "<br><br>"  
 button "On for 1H 30min" [onOneHalf]  
 wprint "<br><br>"  
 button "On for 1H" [onOneH]  
 wprint "<br><br>"  
 button "On for 30min" [onHalf]  
 wprint "<br><br>"  
 button "Off" [turnOff]  
 wprint "<br><br>"  
 wait  
   
 [onTwoH]  
 heatingTime = 7200  
 goto [turnOn]  
 wait  
   
 [onOneHalf]  
 heatingTime = 5400  
 goto [turnOn]  
 wait  
   
 [onOneH]  
 heatingTime = 3600  
 goto [turnOn]  
 wait  
   
 [onHalf]  
 heatingTime = 1800  
 goto [turnOn]  
 wait  
   
 [turnOn]  
 po 13, 1  
 po 14, 1  
 state = On  
 wait  
   
 [turnOff]  
 po 13, 0  
 po 14, 0  
 state = Off  
 heatingTime = 0  
 interrupt 12, [phyButton]  
 wait  
   
 [phyButton]  
 interrupt 12  
 plusheatingTime = heatingTime + 1800  
 if plusheatingTime < 7200 then goto [addTime]  
 if plusheatingTime > 7200 then goto [turnOff]  
 wait  
   
 [addTime]  
 heatingTime = heatingTime + 1800  
 goto [blinkLed]  
 wait  
   
 [blinkLed]  
 blinkTimes = heatingTime / 1800  
 blinkTimes = left(blinkTimes,1)  
 for x = 1 to blinkTimes  
 po 14, 0  
 delay 100  
 po 14, 1  
 next x  
 interrupt 12, [phyButton]  
 goto [turnOn]  
 wait  
   
 [timerSec]  
 plusheatingTime = 0  
 heatingTime = heatingTime - 1  
 heatingTimeMin = heatingTime / 60  
 if heatingTime > 3600 then heatingTimeMin = heatingTimeMin - 60  
 let heatingTimeMin = left(heatingTimeMin,2)  
 let heatingTimeMin = replace(heatingTimeMin,".","")  
 if heatingTime > 3600 then humanTime = "1h "  
 if heatingTime > 3600 then humanTime = humanTime & heatingTimeMin  
 if heatingTime > 3600 then humanTime = humanTime & "min"  
 if heatingTimeMin <= 0 then heatingTimeMin = 0  
 if heatingTime < 3600 then humanTime = heatingTimeMin & "min"  
 if heatingTime <= 0 then goto [turnOff]  
 wait  

Käyttöliittymässä on 5 nappia joista saa valittua ajan puolen tunnin välein 30min - 2h sekä painike lämmityksen katkaisuun. Pinniin 12 onkytketty fyysinen painonappi, josta kerran painamalla lämmitys kytkeytyy päälle 30 minuutiksi ja ledi syttyy. Toisella painalluksella tunniksi ja ledi välähtää kaksi kertaa jne. Viidennellä painalluksella lämmitys kytkeytyy pois päältä.

CSS-tiedosto ulkoasuun.

 button, input[type="button"], input[type="submit"] {   
      background-color:#000000;  
      border:4px solid #000000;  
      display:inline-block;  
      cursor:pointer;  
      color:#ffffff;  
      font-family:Arial;  
      font-size:20px;  
      text-decoration:none;  
      width:80%;  
      height:50px;  
      max-width:500px;  
 }   

Tuottaa seuraavanlaisen näkymän:

 
Joke skaalautuu hienosti myös puhelimen ruudulle.
 
Kun elektroniikka ja koodi toimi, oli aika koteloida projeti.  BILTEMA:sta löysin muovisen kytkentälaatikon hintaan 4.99€.

Kytkinrasia 
Perus tapa neliön reijän tekoon boksiin. Pora, pihdit ja viila.
 
 
 

Vähän putsausta ja töpseli sopii lootaan kuin valettu. On muuten myös BILTEMA:sta parilla eurolla.
  
Piirilevy sopii sisälle boksiin nätisti. Pohjassa oli vielä muutama korotettu muovikohta reijillä, joihin tuo piirilevy sopi kuin valettu.
 

Näkkäri painonapille ja ledille tulee kiinni kanteen parilla ruuvilla.
 
Ja sitten oli aika kytkeä kaikki yhteen. Painonappi ja ledi moduuliin. 230V kaapeli releisiin ja siitä töpseliin. Laatikon sisälle tuli vielä Nokian 5V laturi josta ESP moduuli saa virran. 3.3V Regun kautta tietenkin. Vähän testailua ja kaikki vaikuttaa toimivan. Valmiina käyttöön.

Tänään oli ensimmäinen kunnon testi. 2h lämmitystä ja ajastin toimi loistavasti. Jatkoa ajatellen ideana on lisätä tuohon vielä automaattiset ajastukset, sekä OLED näyttö etupaneeliin kertomaan tarkempia tietoja esim jäljellä olevan lämmitysajan.
- Jokke

No comments:

Post a Comment