Propagátor na klíčení semen
Napsal: 31 pro 2019, 16:05
Ahoj,
pustil jsem se do stavby propagátoru na klíčení semen. Jde o krabici s řízeným vnitřním prostředím (teplota, vlhkost). Celkem mám 4 aktory - ventilátor pro větrání, když je moc vlhko, dále vytápění pro regulaci teploty, "mlhu" což je ultrazvukový vyvíječ mlhy pro zvýšení vlhkosti v propagátoru a pak zálivku (ale tu nemám zatím po hardware stránce dokončenou).
S hardware problém nebyl, ale narazil jsem u software. Vycházel jsem z kódu, kde se řešilo pouze spínání topného tělesa na základě teploty s možností hystereze. Vzal jsem tedy tu část kódu a dal ji třikrát pod sebe (pro ventilátor, mlhu a topení). Ale zřejmě to takto nejde, protože po nahrání programu se mi sepne rovnou větrák, topení a mlha i když by dle nastavených hodnot ventilátor vůbec neměl jet. A když čidlo zahřeju a mělo by vypnout topení, tak se nic neděje. Jsem začátečník, nikdy jsem neprogramoval a učím se metodou pokus omyl, ale s tímhle už se trápím týden a nemohu se pohnout z místa. Je tu někdo zkušený kdo mě posune dál? Moc díky a vše nej do nového roku.
Zde je kód :
const int mlha = 2;
boolean mlhaZapnuto = false;
const int vytapeni = 3;
boolean vytapeniZapnuto = false;
//const int zalivka = 4;//
//boolean zalivkaZapnuto = false;//
const int ventilator = 5;
boolean ventilatorZapnuto = false;
#include <Wire.h>
#include "DHT.h"
#define pinDHT 6
#define typDHT11 DHT11
DHT mojeDHT(pinDHT, typDHT11);
void setup() {
pinMode(ventilator, OUTPUT);
pinMode(mlha, OUTPUT);
pinMode(vytapeni, OUTPUT);
//pinMode(zalivka, OUTPUT);//
Serial.begin(9600);
mojeDHT.begin();
}
void loop() {
float tep = mojeDHT.readTemperature();
float vlh = mojeDHT.readHumidity();
// kontrola, jestli jsou načtené hodnoty čísla pomocí funkce isnan
if (isnan(tep) || isnan(vlh)) {
// při chybném čtení vypiš hlášku
Serial.println("Chyba při čtení z DHT senzoru!");
} else {
// pokud jsou hodnoty v pořádku,
// vypiš je po sériové lince
Serial.print("Teplota: ");
Serial.print(tep);
Serial.print(" stupnu Celsia, ");
Serial.print("vlhkost: ");
Serial.print(vlh);
Serial.println(" %");
}
if (((mojeDHT.readHumidity() ) > 80) && (ventilatorZapnuto))
{
(digitalWrite(ventilator, HIGH));
ventilatorZapnuto = true;
}
else if (((mojeDHT.readHumidity() ) < 75) && (!ventilatorZapnuto))
{
(digitalWrite(ventilator, LOW));
ventilatorZapnuto = false;
}
if (((mojeDHT.readHumidity() ) < 65) && (mlhaZapnuto))
{
(digitalWrite(mlha, HIGH));
mlhaZapnuto = true;
}
else if (((mojeDHT.readHumidity() ) > 70) && (!mlhaZapnuto))
{
(digitalWrite(mlha, LOW));
mlhaZapnuto = false;
}
if (((mojeDHT.readTemperature() ) < 26) && (vytapeniZapnuto))
{
(digitalWrite(vytapeni, HIGH));
vytapeniZapnuto = true;
}
else if (((mojeDHT.readTemperature() ) > 27) && (!vytapeniZapnuto))
{
(digitalWrite(vytapeni, LOW));
vytapeniZapnuto = false;
}
delay(1000);
}
pustil jsem se do stavby propagátoru na klíčení semen. Jde o krabici s řízeným vnitřním prostředím (teplota, vlhkost). Celkem mám 4 aktory - ventilátor pro větrání, když je moc vlhko, dále vytápění pro regulaci teploty, "mlhu" což je ultrazvukový vyvíječ mlhy pro zvýšení vlhkosti v propagátoru a pak zálivku (ale tu nemám zatím po hardware stránce dokončenou).
S hardware problém nebyl, ale narazil jsem u software. Vycházel jsem z kódu, kde se řešilo pouze spínání topného tělesa na základě teploty s možností hystereze. Vzal jsem tedy tu část kódu a dal ji třikrát pod sebe (pro ventilátor, mlhu a topení). Ale zřejmě to takto nejde, protože po nahrání programu se mi sepne rovnou větrák, topení a mlha i když by dle nastavených hodnot ventilátor vůbec neměl jet. A když čidlo zahřeju a mělo by vypnout topení, tak se nic neděje. Jsem začátečník, nikdy jsem neprogramoval a učím se metodou pokus omyl, ale s tímhle už se trápím týden a nemohu se pohnout z místa. Je tu někdo zkušený kdo mě posune dál? Moc díky a vše nej do nového roku.
Zde je kód :
const int mlha = 2;
boolean mlhaZapnuto = false;
const int vytapeni = 3;
boolean vytapeniZapnuto = false;
//const int zalivka = 4;//
//boolean zalivkaZapnuto = false;//
const int ventilator = 5;
boolean ventilatorZapnuto = false;
#include <Wire.h>
#include "DHT.h"
#define pinDHT 6
#define typDHT11 DHT11
DHT mojeDHT(pinDHT, typDHT11);
void setup() {
pinMode(ventilator, OUTPUT);
pinMode(mlha, OUTPUT);
pinMode(vytapeni, OUTPUT);
//pinMode(zalivka, OUTPUT);//
Serial.begin(9600);
mojeDHT.begin();
}
void loop() {
float tep = mojeDHT.readTemperature();
float vlh = mojeDHT.readHumidity();
// kontrola, jestli jsou načtené hodnoty čísla pomocí funkce isnan
if (isnan(tep) || isnan(vlh)) {
// při chybném čtení vypiš hlášku
Serial.println("Chyba při čtení z DHT senzoru!");
} else {
// pokud jsou hodnoty v pořádku,
// vypiš je po sériové lince
Serial.print("Teplota: ");
Serial.print(tep);
Serial.print(" stupnu Celsia, ");
Serial.print("vlhkost: ");
Serial.print(vlh);
Serial.println(" %");
}
if (((mojeDHT.readHumidity() ) > 80) && (ventilatorZapnuto))
{
(digitalWrite(ventilator, HIGH));
ventilatorZapnuto = true;
}
else if (((mojeDHT.readHumidity() ) < 75) && (!ventilatorZapnuto))
{
(digitalWrite(ventilator, LOW));
ventilatorZapnuto = false;
}
if (((mojeDHT.readHumidity() ) < 65) && (mlhaZapnuto))
{
(digitalWrite(mlha, HIGH));
mlhaZapnuto = true;
}
else if (((mojeDHT.readHumidity() ) > 70) && (!mlhaZapnuto))
{
(digitalWrite(mlha, LOW));
mlhaZapnuto = false;
}
if (((mojeDHT.readTemperature() ) < 26) && (vytapeniZapnuto))
{
(digitalWrite(vytapeni, HIGH));
vytapeniZapnuto = true;
}
else if (((mojeDHT.readTemperature() ) > 27) && (!vytapeniZapnuto))
{
(digitalWrite(vytapeni, LOW));
vytapeniZapnuto = false;
}
delay(1000);
}