www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 
Sponsored by SiOL

arduino termostat pomoč

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
sscott
Član
Član



Pridružen-a: Pet 10 Jul 2009 12:11
Prispevkov: 1128
Aktiv.: 9.01
Kraj: Medvode

PrispevekObjavljeno: Čet Maj 23, 2019 5:12 pm    Naslov sporočila:  arduino termostat pomoč Odgovori s citatom

Napisal sem enostaven program za lm335 termostat. (LM35 ni dovolj stabilen)

termostat ima histerezo 5 stopinj, da se ne vklaplja in izklaplja brez veze

na displeju lepo vidim temperaturo, izhod vklaplja in izklaplja solid state rele.(trenutno led dioda)

vse ok do tukaj


Na displaju bi rad indikacijo kdaj je grelec vklopljen (*) in kdaj ne ( ).

Ta znak bi imel pred izmerjeno temperaturo, vendar zadeva ne dela.

Mučim se že par ur, pa ne uspem. Iščem vašo pomoč

LP



IMG_20190523_170019.jpg
 Opis:
 Velikost datoteke:  2.12 MB
 Pogledana:  19 krat

IMG_20190523_170019.jpg


Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
sscott
Član
Član



Pridružen-a: Pet 10 Jul 2009 12:11
Prispevkov: 1128
Aktiv.: 9.01
Kraj: Medvode

PrispevekObjavljeno: Čet Maj 23, 2019 5:13 pm    Naslov sporočila:   Odgovori s citatom

#include <LiquidCrystal.h>
LiquidCrystal lcd(2,3,4,5,6,7);

#define LM335 1 // LM335 input pin is connected to Arduino A0 pin
int relay = 10; // yellow led - thermostar relay
int tempMin = 35; // relay on, histereza 5 stopinje
int tempMax = 40; // relay off, histereza 5 stopinje
int tempC;

void setup() {
pinMode(relay, OUTPUT);
lcd.begin(20,4);

}
void loop()
{
tempC = analogRead(LM335) * 0.489 - 273; // Read analog voltage and convert it to Celsius


if(tempC > tempMax) // if temp is higher than tempMax
{
digitalWrite(relay, LOW); // turn off relay

}
if(tempC < tempMin) // if temp is lower than tempMin
{
digitalWrite(relay, HIGH); // turn on relay
}

lcd.setCursor(0,0); // set cursor to 1 line
lcd.print(" LM335 THERMOSTAT");
lcd.setCursor(0,2); // move cursor to 3 line
lcd.print(" WATER TEMP: ");
lcd.print(tempC); // display the water temp
lcd.print((char)223);
lcd.print("C");
delay(200);
lcd.clear();

}
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3567
Aktiv.: 22.49
Kraj: Krško

PrispevekObjavljeno: Čet Maj 23, 2019 6:19 pm    Naslov sporočila:   Odgovori s citatom

Koda:

#include <LiquidCrystal.h> 
LiquidCrystal lcd(2,3,4,5,6,7); 

#define LM335 1 // LM335 input pin is connected to Arduino A0 pin 
int relay = 10; // yellow led - thermostar relay 
int tempMin = 35; // relay on, histereza 5 stopinje 
int tempMax = 40; // relay off, histereza 5 stopinje 
int tempC; 
byte stanjeOUT; // Stanje izhoda

void setup() { 
pinMode(relay, OUTPUT); 
lcd.begin(20,4); 


void loop() 

  tempC = analogRead(LM335) * 0.489 - 273; // Read analog voltage and
  convert it to Celsius 


  if(tempC > tempMax) // if temp is higher than tempMax 
  { 
    digitalWrite(relay, LOW); // turn off relay 
    stanjeOUT = 0;
  } 
  if(tempC < tempMin) // if temp is lower than tempMin 
  { 
    digitalWrite(relay, HIGH); // turn on relay
    stanjeOUT = 1;
  } 

  lcd.setCursor(0,0); // set cursor to 1 line

  if(stanjeOUT == 1)
  {
    lcd.print(" LM335 THERMOSTAT");
  }
  else
  {
    lcd.print(" LM335 thermostat");
  }

  lcd.setCursor(0,2); // move cursor to 3 line 
  lcd.print(" WATER TEMP: "); 
// sem prestavi celoten if in else z "*" oziroma " " za izpis.
  lcd.print(tempC); // display the water temp 
  lcd.print((char)223); 
  lcd.print("C"); 
  delay(200); 
 // lcd.clear(); 

}
Tisti celoten
if(stanjeOUT == 1) {....} else {....}
prestavi tam, kjer bi rad izpisal zvezdico "*" ob vklopljenem grelcu oziroma presledek " " ob izklopljenem grelcu.

_________________
Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
sscott
Član
Član



Pridružen-a: Pet 10 Jul 2009 12:11
Prispevkov: 1128
Aktiv.: 9.01
Kraj: Medvode

PrispevekObjavljeno: Čet Maj 23, 2019 6:41 pm    Naslov sporočila:   Odgovori s citatom

super

probam in sporočim če dele
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Jaka57
Moderator
Moderator



Pridružen-a: Ned 12 Dec 2004 21:47
Prispevkov: 5133
Aktiv.: 30.55
Kraj: Grosuplje

PrispevekObjavljeno: Čet Maj 23, 2019 6:48 pm    Naslov sporočila:   Odgovori s citatom

Takole:
(stanjeOUT==1) ? lcd.print("*") : lcd.print(" ") ;

_________________
Lp, Jaka
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
sscott
Član
Član



Pridružen-a: Pet 10 Jul 2009 12:11
Prispevkov: 1128
Aktiv.: 9.01
Kraj: Medvode

PrispevekObjavljeno: Čet Maj 23, 2019 7:08 pm    Naslov sporočila:   Odgovori s citatom

hvala obema

dela tako kot sem želel

pozabil sem seveda

byte stanjeOUT; // Stanje izhoda


Je pa to moj prvo programiranje za arduinotom, tako da, me čaka še veliko učenja Laughing
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3567
Aktiv.: 22.49
Kraj: Krško

PrispevekObjavljeno: Čet Maj 23, 2019 8:48 pm    Naslov sporočila:   Odgovori s citatom

Applause
Za začetek preuči tole:
https://www.arduino.cc/reference/en/

_________________
Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3567
Aktiv.: 22.49
Kraj: Krško

PrispevekObjavljeno: Pet Maj 24, 2019 12:00 am    Naslov sporočila:   Odgovori s citatom

:led:
Shocked Prej sploh nisem gledal slike ...
d'oh! Ledice ne smeš priklopiti direktno na 5 V brez predupora Exclamation
Odspajkaj (A) stran (ko pogledaš ledico od strani, je (A) mala trikotna ploščica, (K) stran pa velika trapezna ploščica) od obeh ledic dol z letvice in dodaj vmes nek upor med 270 in 1k ohm, kar imaš pri roki.
Imaš precejšnjo srečo, da nisi uničil izhoda Pray
:led:

_________________
Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
sscott
Član
Član



Pridružen-a: Pet 10 Jul 2009 12:11
Prispevkov: 1128
Aktiv.: 9.01
Kraj: Medvode

PrispevekObjavljeno: Pet Maj 24, 2019 7:25 am    Naslov sporočila:   Odgovori s citatom

hvala za opozorilo


vem da led rabi predupor, vendar ker vse delam z smd nimam klasičnih uporov pri roki.

verjetno imajo pini iz arduinota neko omejitev toka


LP
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
solomojster
Član
Član



Pridružen-a: Tor 18 Maj 2010 12:26
Prispevkov: 786
Aktiv.: 6.85
Kraj: NOVA GORICA

PrispevekObjavljeno: Pet Maj 24, 2019 1:11 pm    Naslov sporočila:   Odgovori s citatom

Arduino že ima vgrajeno led diodo na pinu 13. Je večkrat uporabljena ravno takrat, ko nimaš uporov

Int relay =13

Kako pa enostavo narediti simbol ,tako da prikaže stanje vrtenja. Recimo obtočne črpalke ? (Ponazoritev vetrnice na enostaven način z črkami ali simboli)
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3567
Aktiv.: 22.49
Kraj: Krško

PrispevekObjavljeno: Pet Maj 24, 2019 9:22 pm    Naslov sporočila:   Odgovori s citatom

Lahko marediš svoje znake za prikaz na 5x7 (išči: Arduino LCD own characters). Za razločevanjem med utripanjem in vrtenjem morajo biti vsaj trije različni znaki. + in x nista dovolj.


Lahko pa se malo sprehodiš po ASCII tabeli in to narediš kot so to počeli nekoč s štirimi znaki:
I / - \ I / - \

Spreminjaš en števec
if(pogoji_so_izpolnjeni)
{
CrpalkaDelaStevec++; // 0, 1, 2, 3, 4, 1, 2, 3, 4, 1, ...
CrpalkaDela = 1;
}
else
{
CrpalkaDelaStevec = 0;
CrpalkaDela = 0;
}
if(CrpalkaDelaStevec > 4) CrpalkaDelaStevec = 1; // 1, 2, 3, 4, 1, 2, ...


in glede na vrednost izpišeš znak:
0x73 (0)
0x73 (1)
0x2F (2)
0x2D (3)
0x5C (4)

_________________
Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
solomojster
Član
Član



Pridružen-a: Tor 18 Maj 2010 12:26
Prispevkov: 786
Aktiv.: 6.85
Kraj: NOVA GORICA

PrispevekObjavljeno: Pet Maj 24, 2019 10:54 pm    Naslov sporočila:   Odgovori s citatom

Hvala Igo.
S tem se še nisem ukvarjal. Sem našel tole. Mogoče bi poskusil s trikotnikom.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 174 dni


Powered by phpBB © 2001, 2005 phpBB Group