Ovladaní vetráku dle teploty a displeye

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Ovladaní vetráku dle teploty a displeye

Příspěvek od Kony » 24 říj 2020, 18:16

Ahoj, chtel bych ovladat pres Arduino rele na které budou připojeny dva větráky. tyto větráky budou regulovat teplotu ve skříni 3D tiskárny.
Nyní mám na MEGU DHT22 a displey.
Chtěl bych pomoci tlačítek nastavovat aktuální teplotu ve skříni a dle toho aby se spouštěly větráky a regulovaly teplotu.
Mohl by mi prosim někdo pomoct ?
jedná se mi o to:
Mít dvě tlačítka (mikrospínače)
Jedním přidávat teplotu a druhým ubírat teplotu a dle toho aby se udržovala teplota ve skříni
zatím mám toto :

Kód: Vybrat vše

#include <DHT.h>
#include <LiquidCrystal.h>

// inicializace pinu, lze vyměnit za jiné volné
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

#define pinDHT 8
DHT mySensor(pinDHT, DHT22);


void setup()
{
  Serial.begin(115200);
  lcd.begin(16,2);
  lcd.setCursor(0,0);
  lcd.print("Aktualni:");
  lcd.setCursor(0,1);
  lcd.print("Nastaveni: ");
}

void loop()
{
  float tep = mySensor.readTemperature();
  lcd.setCursor(10,0);
  lcd.print("    ");
  lcd.setCursor(10,0);
  lcd.print(tep);
  Serial.println(tep);
  lcd.setCursor(14,0);
  lcd.print((char)223);
  lcd.print("C");
  delay(500);
}

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: Ovladaní vetráku dle teploty a displeye

Příspěvek od Kony » 24 říj 2020, 18:58

nyní jsem přidal tlačítko, kterým bych nastavoval teplotu o 5 stupnu, ale ne a ne fungovat... porad to vypisuje promenou 0

Kód: Vybrat vše

#include <DHT.h>
#include <LiquidCrystal.h>

// inicializace pinu, lze vyměnit za jiné volné
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

#define pinDHT 8
DHT mySensor(pinDHT, DHT22);
int tlacPinPlus = 52;
int stavTlacPlus = 0;
int teplota;

void setup()
{
  Serial.begin(115200);
  lcd.begin(16,2);
  lcd.setCursor(0,0);
  lcd.print("Aktualni:");
  lcd.setCursor(0,1);
  lcd.print("Nastaveni: ");
  pinMode(tlacPinPlus, INPUT);
}

void loop()
{
   if (stavTlacPlus == HIGH) {
    teplota = (teplota + 5);
  }
  else {
    teplota = (teplota - 5);
  }
  float tep = mySensor.readTemperature();
  Serial.println(stavTlacPlus);
  lcd.setCursor(10,0);
  lcd.print("    ");
  lcd.setCursor(10,0);
  lcd.print(tep);
  Serial.println(tep);
  lcd.setCursor(14,0);
  lcd.print((char)223);
  lcd.print("C");
  delay (1000);
}
zapojeno tlačítko z Pinu 52 přes tlačítko do +

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: Ovladaní vetráku dle teploty a displeye

Příspěvek od Kony » 24 říj 2020, 19:26

nyní mám toto :

Kód: Vybrat vše

#include <DHT.h>
#include <LiquidCrystal.h>

// inicializace pinu, lze vyměnit za jiné volné
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

#define pinDHT 8
DHT mySensor(pinDHT, DHT22);
int teplota;

void setup()
{
  Serial.begin(115200);
  lcd.begin(16,2);
  lcd.setCursor(0,0);
  lcd.print("Aktualni:");
  lcd.setCursor(0,1);
  lcd.print("Nastaveni: ");
  pinMode(52, INPUT);   // pin 52  nastaven jako vstup
}

void loop()
{
  if (digitalRead(52) == HIGH){
    Serial.print("aaaa");
  } 
  Serial.println(teplota);
  float tep = mySensor.readTemperature();
  lcd.setCursor(10,0);
  lcd.print("    ");
  lcd.setCursor(10,0);
  lcd.print(tep);
  Serial.println(tep);
  lcd.setCursor(14,0);
  lcd.print((char)223);
  lcd.print("C");
  delay (1000);
}
a pořád to vypisuje nesmysli...... ikdyž nedržím tlačítko tak to vypisuje

Kód: Vybrat vše

3 -> 21.90
19:26:36.406 -> aaaa0
19:26:36.406 -> 21.90
19:26:37.438 -> 0
19:26:37.717 -> 21.90
19:26:38.700 -> 0
19:26:38.700 -> 21.90
19:26:39.733 -> 0
19:26:40.015 -> 21.90
19:26:40.999 -> 0
19:26:40.999 -> 21.90
19:26:42.012 -> aaaa0
19:26:42.294 -> 21.90
19:26:43.281 -> aaaa0
19:26:43.281 -> 21.90
19:26:44.316 -> 0
19:26:44.551 -> 21.80
19:26:45.574 -> 0
19:26:45.574 -> 21.80
19:26:46.557 -> aaaa0
19:26:46.840 -> 21.80
19:26:47.870 -> aaaa0
19:26:47.870 -> 21.80
19:26:48.852 -> 0
19:26:49.134 -> 21.80
19:26:50.164 -> 0
19:26:50.164 -> 21.80
19:26:51.146 -> 0
19:26:51.428 -> 21.80
19:26:52.413 -> 0
19:26:52.413 -> 21.80
19:26:53.444 -> aaaa0
19:26:53.725 -> 21.80

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: Ovladaní vetráku dle teploty a displeye

Příspěvek od AstroMiK » 24 říj 2020, 19:45

Lepší je spínat pin proti GND a v sekci setup mít nastaveno pinMode na INPUT_PULLUP.
Potom je sepnuté tlačítko čteno jako LOW a rozepnuté jako HIGH.
Naposledy upravil(a) AstroMiK dne 24 říj 2020, 19:48, celkem upraveno 1 x.

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: Ovladaní vetráku dle teploty a displeye

Příspěvek od Kony » 24 říj 2020, 19:46

muzes mi to pleas vysvetlit ??? nechapu zapojeni a nastaveni

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: Ovladaní vetráku dle teploty a displeye

Příspěvek od AstroMiK » 24 říj 2020, 19:56

Pin 52 zapojit přes tlačítko do GND.
V sekci setup()
změnit řádku:

Kód: Vybrat vše

pinMode(52, INPUT);
na:

Kód: Vybrat vše

pinMode(52, INPUT_PULLUP);

Tím se na pin připojí vnitřní odpor proti +5V, takže i rozpojené tlačítko se bude číst jako logická "1" (HIGH).
Když se tlačítko sepne, tak se pin zkratuje do GND a tím se "přebije" původní HIGH na LOW.

Vysvětlení je na internetu spousta. Našel jsem přes Google třeba tenhle obrázek:
Obrázek

zdroj: http://elextutorial.com/learn-arduino/a ... -resistor/

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: Ovladaní vetráku dle teploty a displeye

Příspěvek od Kony » 24 říj 2020, 20:01

Uz i hodnoty jedou

Kód: Vybrat vše

#include <DHT.h>
#include <LiquidCrystal.h>

// inicializace pinu, lze vyměnit za jiné volné
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

#define pinDHT 8
DHT mySensor(pinDHT, DHT22);
int teplota;

void setup()
{
  Serial.begin(115200);
  lcd.begin(16,2);
  lcd.setCursor(0,0);
  lcd.print("Aktualni:");
  lcd.setCursor(0,1);
  lcd.print("Nastaveni: ");
  pinMode(52, INPUT_PULLUP);   // pin 52  nastaven jako vstup
  pinMode(53, INPUT_PULLUP);   // pin 52  nastaven jako vstup
}

void loop()
{
  float tep = mySensor.readTemperature();
  lcd.setCursor(10,0);
  lcd.print("    ");
  lcd.setCursor(10,0);
  lcd.print(tep);
  Serial.println(tep);
  lcd.setCursor(14,0);
  lcd.print((char)223);
  lcd.print("C");
     if (digitalRead(52) == LOW){
   teplota = (teplota+5);
   Serial.println(teplota);
  } 
       if (digitalRead(53) == LOW){
   teplota = (teplota-5);
   Serial.println(teplota);
  } 
  delay (500);
}

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: Ovladaní vetráku dle teploty a displeye

Příspěvek od Kony » 24 říj 2020, 20:36

snazim se dle teploty urcovat sepnuti rele

Kód: Vybrat vše

   if (tep>teplota){
    digitalWrite(50) == LOW);
    else
    digitalWrite(50) == HIGH);
   }

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: Ovladaní vetráku dle teploty a displeye

Příspěvek od AstroMiK » 24 říj 2020, 20:42

Přidej hysterezi, aby ti to kolem té nastavené teploty nekmitalo:

Kód: Vybrat vše

if (tep > (teplota + 2)) digitalWrite(50, LOW);
if (tep < (teplota - 2)) digitalWrite(50, HIGH);


AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: Ovladaní vetráku dle teploty a displeye

Příspěvek od AstroMiK » 24 říj 2020, 20:59

... a máš v setupu nastaveno:

Kód: Vybrat vše

pinMode(50, OUTPUT);

Než stačím odpovědět, tak tvoje příspěvky mizí...

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 20 hostů