Stránka 1 z 4

Ovladaní vetráku dle teploty a displeye

Napsal: 24 říj 2020, 18:16
od Kony
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);
}

Re: Ovladaní vetráku dle teploty a displeye

Napsal: 24 říj 2020, 18:58
od Kony
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 +

Re: Ovladaní vetráku dle teploty a displeye

Napsal: 24 říj 2020, 19:26
od Kony
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

Re: Ovladaní vetráku dle teploty a displeye

Napsal: 24 říj 2020, 19:45
od AstroMiK
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.

Re: Ovladaní vetráku dle teploty a displeye

Napsal: 24 říj 2020, 19:46
od Kony
muzes mi to pleas vysvetlit ??? nechapu zapojeni a nastaveni

Re: Ovladaní vetráku dle teploty a displeye

Napsal: 24 říj 2020, 19:56
od AstroMiK
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/

Re: Ovladaní vetráku dle teploty a displeye

Napsal: 24 říj 2020, 20:01
od Kony
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);
}

Re: Ovladaní vetráku dle teploty a displeye

Napsal: 24 říj 2020, 20:36
od Kony
snazim se dle teploty urcovat sepnuti rele

Kód: Vybrat vše

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

Re: Ovladaní vetráku dle teploty a displeye

Napsal: 24 říj 2020, 20:42
od AstroMiK
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);


Re: Ovladaní vetráku dle teploty a displeye

Napsal: 24 říj 2020, 20:59
od AstroMiK
... 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í...