Arduino Uno + LCD Shield - Termostaatti

Pitäisi saada Arduino Unolla ja LCD Shieldillä toteutettua termostaatti, eli LCD Shieldin napeista säädetään haluttu lämpötila ja jos lämpötila on alle asetetun tavoitteen, arduino kytkee pinnin 13 päälle. Koodauskokemusta ei hirveästi vielä ole joten pyytäisin koodin luontiin teidän apuanne ja olisin todella kiitollinen jos voisitte auttaa tässä projektissa. :unamused:

Esimerkki näyttönäkymästä:


|L√§mp√∂tila: 18¬įC |
|Tavoitel√§mp√∂tila: 22¬įC |
|_____________________|

Tämä LCD Shieldi tilauksessa:
dx.com/p/2-6-lcd-keypad-shield-f … ack-161359

Jotain l√§mp√∂tilasensoria voisitte tuolta DealExtremen puolelta suositella, mielell√§√§n saisi n√§ytt√§√§ v√§hint√§√§n 0-30¬įC l√§mp√∂tilat.

Tervehdys.
olen jonkinverran leikkinyt näiden Uunojen kanssa. Tässä olisi pieni esimerkki ja muutamia linkkejä.

[code]// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
/* 2.6" LCD display;
digital outputs : PIN4-DB4 / PIN5-DB5 / PIN6-DB6 / PIN7-DB7 /
PIN8-RS / PIN9-E / PIN10-Backlight;
Green/yellow Backlight, adjustable backlighting
*/
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

#define BL 10 // taustavalo
#define Key A0 // näppäimistön luku, toteutettu
// vastusjaolla, antaa analogia-arvon
// 0…1024 | tarkat arvot saa näytöltä
// testiohjelmalla…
#define Tol 20 // varmistetaan että mitta-arvo on taulualueella
// -20…20, 231…271, 475…515, 655…695, 840…880
// eikä pienet häiriöt pääse vaikuttamaan
int keys[]={100, 0, 251, 495, 675, 860}; //vain ohjearvoja,
// tarvitaan taulukon koon määrittämiseen
// muutetaan kun oikeat arvot on mitattu
// http://auldies.euweb.cz/ard/Ama2.html
int KB; // globaali muuttuja joka sisältää Key-arvon
unsigned int TimeOut, MaxTime=1000;
#define Temp A1 // lämpötilasensorin LM35.n lukema. n.10mV/1"C
// http://www.ti.com/lit/ds/symlink/lm34.pdf
// http://www.kmitl.ac.th/~kswichit/logger3/logger3.html
// http://www.partco.biz/verkkokauppa/popup_image.php?pID=10155&image=2
// http://www.partco.biz/verkkokauppa/product_info.php?products_id=10155
#define MaxT 21 // lämpötila jossa lopetetaan lämmitys
#define MinT 18 // lämpötila jossa lämmitys kytketään
#define Ohjaus 13 // releen tms. ohjaus, voi vaatia
// driverin (transistori/fetti)
//tässähän sitten oli esittelyt, ja eiku koodaamaan

// tärkein meinas unohtua, ennen kun koodia oikeestaan alkaa
// kääntämään sketsiä on valittava ko.
// ‚ÄúLAUTA‚ÄĚ Tools->Board->Arduino Uno

void setup(){
// tähän muutamia alustuksia
TimeOut = 0;
pinMode(Ohjaus, OUTPUT);
pinMode(BL, OUTPUT); //kummatkin alustettu ulostuloksi
//l. ohjaavat lediä/relettä tms.
lcd.begin(16, 2); //16 merkkiä rivillä * 2 riviä
}

boolean KeyPressed(){
boolean Painettu = false;
KB = analogRead(Key);
Painettu = (KB < 710);
return Painettu;
}

int Nappi(){
// if((keys[0] >= KB-10) && (KB+10 <= keys[0])) return 1;//olikin /RES
// siis ei paineta tai ohjelma käynnistyy uudelleen
if((keys[1] >= KB-Tol) && (KB+Tol <= keys[1])) return 2;
if((keys[2] >= KB-Tol) && (KB+Tol <= keys[2])) return 3;
if((keys[3] >= KB-Tol) && (KB+Tol <= keys[3])) return 4;
if((keys[4] >= KB-Tol) && (KB+Tol <= keys[4])) return 5;
if((keys[5] >= KB-Tol) && (KB+Tol <= keys[5])) return 6;
// palauttaa näppäin numeron 2…6 helppoa kun heinänteko
}

void TESTI(){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("PAINA NAPP 1…6 ");
lcd.setCursor(0, 1);
lcd.print(‚ÄúArvo=‚ÄĚ); lcd.print(analogRead(Temp));
delay(300); // kirjoita painetun näppäimen arvo muistiin,
// ja korvaa ko. arvoilla keys[]={100, 200, 300, 400, 500, 600};
// |3| näppäinkuvio
// |1| |2| |5| |6|
// |4|
}
void Menu(){
digitalWrite(BL, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Lampotila = "); lcd.print(5.0/1.024*.02*analogRead(Temp));
lcd.setCursor(0, 0);
lcd.print("Tavoite = "); lcd.print(MaxT);
delay(1000);
}
void loop(){
TESTI(); // poista tai kommentoi tämä rivi kun arvot on ok
// ja tähän sitten mitä ikinä oletkin ajatellut, koko ohjelma pyörii vain tässä
if(KeyPressed()) Menu;
if(TimeOut <= MaxTime) TimeOut++;
else {TimeOut = 0; digitalWrite(BL, LOW);}
}[/code]

toivottavasti näistä on jotain hyötyä. En laiskuuttani viitsinyt tilata/rakentaa ko kytkentää, mutta luulisin että toimii… Joten eiku kokeileen. Hauskoja kesäiltoja homman kanssa :smiley:

Kiitos, pitää nyt vaan odotella että kusti polkee kiinasta niin pääsee testaileen :slight_smile:

tällänen lämpötilasensori lähti tilaukseen!
dx.com/p/arduino-digital-tempera … ule-121350

Olen käytetellyt joissain virityksissäni DHT22-mallia, joka on hiukka kalliimpi ja
tarkempi kuin DHT11; samaten transistorin tapainen LM35 (halpa) käy mainiosti,
jos ei halua mitata miinusasteita eikä kosteutta - se on analoginen toisin kuin
DHT-mallit. Hyvä puoli LM35:ssa on, että sen saa valettua epoksiliiman sisälle,
jolloin ulkokestävyys ei ole ongelma.

LCD:n kanssa en ole antureita käytellyt.

Tuosta ulkoasennuksesta olen miettinyt. Millä ihmeen tavalla olet saanut epoksin toimiin?

Joko epoksit kutistuvat liikaa tai sitten ovat liian elastisia ja päästävät veden johdon välistä tai sitten ovat kovia ja katkaisevat johdon.

Tällä hetkellä oma suosikki on pätkä sähköputkea ja tarpeeksi saniteettisilikonia, mutta en oikein usko siihen.

Laitoin myös LM35 tilaukseen.

Itse olen parhaaksi todennut kutistesukan vedon anturin päälle, sitten silikonia, kuumaliimaa tms sukan sisään ja kutistellaan tiiviiksi. Tällä tavalla tehty on kestänyt nyt kolmisen vuotta jo pihalla (ei tosin suorassa sateessa tms).

Epoksiliiman lyhyt oppimäärä:

  1. Mene Biltemaan tms. vaikka markettiin ja osta putkilot
    Super epoxya.
  2. Juota tarvittavat 3 johtoa TO92 -koteloiseen trankkuun
    (vaikka LM35)
  3. Tee epoksiliimasta mälli, sormeenpään kokoinen läjä
    molempia liimoja ja sekoita hyvin vaikka tulitikulla
  4. Pyörittele LM35 massassa

Tärkeä osuus: pyörittele kerran minuutissa. Epoksiliima
kuivuu noin 5-10 minuutissa sellaiseksi jähmeäksi, joten
on tärkeää, että kierittelet/lähmit liimaa silloin kun se on
jotain juoksevan ja kuivuneen väliltä. Kun anturisi on
karvoineen kokonaan liiman alla, niin tuloksena on epoksiliiman
sisällä oleva pisaran muotoinen objekti, joka kestää kiehuvan
veden ja jäät sekä tuiskut.

Harmi ettei nyt ole laittaa kuvaa valmiista ‚Äútekeleest√§‚ÄĚ.

Mulla on näköjään yksi LM35 epoksoimatta, voin tarvittaessa
ottaa kuvat ‚Äúvalmistusprosessista‚ÄĚ. Vaikka ihan sikayksinkertaista
tämä on: kaupasta nopeasti kuivuvaa epoksiliimaa, sekoitus,
parin minuutin odotus, ja sen jälkeen läämimään liimaa
trankkuun niin että sitä pyörittelee koko ajan pitäen mötikkää
johdoista kiinni ilmassa.

Comprende?

onko toi vaihe tarpeellinen jos anturi tulee mökin sisälle jossa on kyllä on talvisin pakkasta, jos ei ole ketään ole paikalla?

Ei anturia tarvitse liimata tai suojata, ellei sitä laita ulos.

DHT-anturia ei saa liimailla, sillä ainakin kosteuden mittaus
on sen jälkeen historiaa.

Nyt on osat saapuneet ja kytkentä kasattu mutta näytöllä näkyy pelkkää mustaa?

Onko toi ASCII vai graffa näyttö.

Toinen sitte onko tossa ns. invertoitu noi pixelit eli kirkkaat pixelit.
Kuitenkin ilman mitään alustuksia ASCII näytössä pitäs aktivoitua characterit. Eli iman konffia voi jo säätää contrastin kohtiille.

Saisko kuvaa millanen se näyttö on virrat päällä ilman alustusta.

eli jos koodi on sisällä niin näyttö on kuin ei olisi päällä ja sitten jos ei ole koodia niin näyttössä kyllä palaa taustavalo.

tämä näyttö: dx.com/p/2-6-lcd-keypad-shield-f … ack-161359

HDjotain yhteensopiva mallihan tuo on. Sininen potikka voipi olla ratkaisu näkymättömyyteen.

Itsellä ainakin on tullut yläriville aktivoidut palikat läriville ja alariville ei ole tullut mitään jos näyttö on revästy vain virtoihin.

dfrobot.com/index.php?route= … duct_id=51 Sama tuote ja enempi dataa. kaivoin dx:n kommenteista.

Mitäs muuta vielä muistaisi? Osa noista näytöistä kestää hillitöntä vauhtia. Paukuttelin näyttöä assemblerilla atmelilla 20MHz:llä ja mitään ongelmia ei ollut. Eli arduino voi odotella ja aiheuttaa siitä mieliharmeja jos aika loppuu muulta hommalta.

ja kun nyt sisään survotusta koodista ei ole mitään tietoa, se kannattanee ensin testata sillä dfropotin koodilla niin menee ainakin elciidiin ohjaukset oikein …

tämä koodi toimi mutta esim. Hello world ei aukea jostain syystä?

Etsin muuta tietoa ja törmäsin seuraavaan, liekö tästä jotain hyötyä?
Nick Gammonin sivut ovat hyviä, koodiesimerkit kääntyvät yleensä laakista.

gammon.com.au/forum/?id=10940