Siin on abiks üks väike arduino Nano või Mini, MQ-2 gaasi detektor ja relee,
mis aitab väljatõmbeventilaatori (katuseventilaator) käima ajada kui need õiges järjekorras kokku kruvida ja veidi "koodi" peale lugeda.
Kuna see oli üks esimesi kindla rakendusega projekt siis olin usin ka kommentaare kirjutama.
Komponendid:
1. Arduino Nano (5V)
2. Toiteplokk 5V DC
3. MQ-2 gaasi andur
4. 220 V relee (hea kui ESP1S sisendiga)
5. Installatsiooni materjalid
Vilkuv roheline: CO gaasi konsentratsiooni kontroll töötab ja tase on alla lubatava taseme.
Vilkuv punane: CO tase on ületatud ja ventilaator on sisse lülitatud.
Kui vajutada nuppu < 3 sek automaat reziimis siis süsteemi paus 3 min siis taastub autmaatreziim.
Kui vajutada nuppu > 3 sek siis süsteem seiskub (hea kasutada puude katlasse lisamisel, et alarõhk ei tõmbaks suitsu katlast ruumi).
Kui vajutada nuppu < 3 sek seisu reziimis siis taastub autmaatreziim.
Hiljem asendasin relee mooduli ESP-relee mooduliga ja lisandus võimalus telefonist (app Blynk) ventilaatori siise / välja lülitamiseks.
Serveris töötav Node red saab infot muuhulgas ka maja sise / välis temperatuuri kohta ja on seadistatud manual / auto reziimidel ventilaatorit juhtima.
1. Automaat reziim:
a) kui (toa temp. > seadistus temp (25 C) & toatemp > õue temp) siis lülita vent. siisse <- hoiab toaõhu jaheda
b) ventilaatori juhtimine vastavalt ajakavale
2. Manual reziim: app Blynk käsitsi siise / välja lülitamine
MQ2 suitsuanduri käsk on priorteetne auto/manual reziimi suhtes (suitsu sattumise oht eluruum) ja lülitab vent. vajadusel sisse / välja.
/* GAS Sensor MQ-2
This sensor detects flammable gasses
connect AO to Arduino analog pin A0
connect Gnd to Arduino Gnd
connect Vcc to Arduino 5 volts+
Arduino NANO
Nupp1 - +5v
Nupp2 - 10k - GND
Nupp2 - pin10
LED(roheline)- pin8
LED(rohelin)- 220k - GND
LED(punane)- pin6
LED(punane) - 220k - GND
*/
const int analogInPin = A0; // Analog input pin MQ2 sensor
const int ledPin = 13; // LED connected to digital pin 13
const int relee = 12; // relee väljund
const int nupp = 10; // Nupp to digital pin 10
const int ledRo = 8; // LED (roheline)connected to digital pin 8
const int ledPu = 6; // LED (punane)connected to digital pin 6
const int alarm = 210; // alarm value 210
int sensorValue = 0; // value read from the sensor
long tsukkel = 1000; // kontroll tsükli pikkus
long paus = 3 * 60 * tsukkel; // min vent tööaeg 3min*60s*tsukkel 1000ms
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT); // sets the digital pin as output
pinMode(ledRo, OUTPUT); // sets the digital pin as output
pinMode(ledPu, OUTPUT); // sets the digital pin as output
pinMode(nupp, INPUT); // sets the digital pin as input
pinMode(relee, OUTPUT); // set rreel as output
digitalWrite(relee, HIGH);
digitalWrite(ledRo, LOW); // sets LED (roheline) off
digitalWrite(ledPu, LOW); // sets LED (punane) on
}
void loop()
{
a:
if(digitalRead(nupp)==HIGH){ // kui nuppu vajutada
digitalWrite(ledPu, HIGH); // punane led kustub
digitalWrite(ledRo, HIGH); // roheline led kustub
delay(3000); // paus 3 s
if (digitalRead(nupp)==LOW){ // kui nupp vajutatud vähem kui 3s siis
Serial.println(F("PAUS !")); // paus
digitalWrite(relee, HIGH); // vent stopp
for (int i=3*60 ; i>0 ; i--){ // pausi aeg 3 min
Serial.println(i); // serial print sek
if(digitalRead(nupp)==HIGH){ // kui vajutada uuesti nuppo siis
digitalWrite(ledPu, LOW); // punane led kustub
digitalWrite(ledRo, LOW); // roheline led kustub
delay(3000);
goto a; // tagasi algusesse
}
delay(1000);
}
digitalWrite(ledPu, LOW);
digitalWrite(ledRo, LOW);
}
else {
Serial.println(F("TOTAL STOPP !")); //kui nupp surutud kauem kui 3 sek siis seiskab ventilaatori
digitalWrite(ledPu, LOW);
digitalWrite(ledRo, LOW);
digitalWrite(relee, HIGH);
delay(10000);
while(digitalRead(nupp)!=HIGH){} //kuni nuppu uuesti vajutada läheb algusesse /lõputu tsükkel
digitalWrite(ledPu, HIGH);
digitalWrite(ledRo, HIGH);
delay(1000);
digitalWrite(ledPu, LOW);
digitalWrite(ledRo, LOW);
delay(3000);
goto a;
}
}
sensorValue = analogRead(analogInPin); // read the analog in value:
delay(tsukkel);
digitalWrite(ledPu, LOW); // sets LED (roheline) off
delay(tsukkel);
if (sensorValue > alarm) // determine alarm status
{
// TÖÖTAB
digitalWrite(relee, LOW); // sets relee on
digitalWrite(ledPu, HIGH); // sets LED (roheline) on
digitalWrite(ledRo, LOW); // sets LED (punane) off
Serial.println(F("Tootab"));
}
else
{
digitalWrite(ledPu, LOW); // sets LED (roheline) off
digitalWrite(ledRo, HIGH); // sets LED (punane) on
delay(tsukkel);
digitalWrite(ledRo, LOW); // sets LED (punane) off
if (paus <= 0)
{
// SEISAB
digitalWrite(relee, HIGH); // sets relee on
Serial.println(F("Seisab"));
}
}
Serial.print(F("sensor (alarm: "));
Serial.print (alarm);
Serial.print(") = "); // jadapordi monitor - sensor
Serial.println(sensorValue);
Serial.print(F("Paus (s) = " )); // jadapordi monitor - pausi pikkus
Serial.println(paus);
if (paus <= 0) {
paus = 3 * 60 * tsukkel; //reset timer
}
paus = paus - tsukkel; // pausi vähendus tsükkli võrra
}