เราทำระบบรดน้ำ กับพัดลม แบบอัตโนมัติ

เราทำระบบรดน้ำ กับพัดลม แบบอัตโนมัติ แต่เราอยากจะให้ สามารถกดเปิดปิดด้วยตัวเองเองได้ด้วย ต้องทำไงคะ

#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

#include "DHT.h"
#define DHTPIN D2   
#define DHTTYPE DHT22   

char auth[] = "Paj1PW3CchLB17V194UWKgB_uAKB9WEk";
char ssid[] = "vivo 1935";
char pass[] = "kaaj080341";

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  Blynk.begin(auth, ssid, pass,"oasiskit.com",8080);
  dht.begin();
}

void loop() {
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  float hic = dht.computeHeatIndex(t, h, false);
  if ( t <= 28) {//เงื่อนไขความชื้น
        digitalWrite(2, 1);//ปั๊มน้ำ  //digitalWrite(relay1,LOW ); //ปั๊มน้ำ 
        digitalWrite(0, 1);//พัดลม  //digitalWrite(relay2,LOW );//พัดลม
        Serial.println("พัดลม และ น้ำหยุด ทำงาน");
        }
    else {
        digitalWrite(2, 0);//digitalWrite(relay1, HIGH); //ปั๊มน้ำ
        digitalWrite(0, 0);//digitalWrite(relay2, HIGH); //พัดลม 
        Serial.println("พัดลม และ น้ำหยด ทำงาน");
          }   
               
  Serial.print(F("Humidity: "));
  Serial.print(h);
  Serial.print(F("%  Temperature: "));
  Serial.print(t);
  Serial.println(F("°C "));
  
 Blynk.virtualWrite(V5,t);
 Blynk.virtualWrite(V6,h);

 Serial.println();
 delay(500); 
}

ขยายความหน่อยครับ เช่น ?

เช่น เมื่อ sensor DHT22 วัดอุณหภูมิได้มากกว่า 28 ขึ้นไป ระบบเปิดน้ำและพัดลมอัตโนมัติ แต่หาก วัดอุณหภูมิได้น้อยกว่าหรือเท่ากับ 28 ให้ ระบบปิดน้ำและพัดลมอัตโนมัติ
นอกจากระบบจะสามารถ เปิด/ปิด อัตโนมัติแล้วอยากให้มีการคอนโทรนด้วยตัวเราเองด้วย คือ เราสามารถสั่งเปิด/ปิด ระบบน้ำและพัดลมได้ด้วยตัวเราเอง โดยการกดปุ่ม เปิด/ปิด ได้ด้วย โดยที่ไม่ต้อง สนอุณหภูมิจะเท่าไหร่ก็ตาม เพื่อใช้ทดสอบระบบของเรา และเพื่อทดสอบให้คนอื่นได้เห็น เวลาอธิบายงาน เราจึงสามารถ เปิด/ปิด ให้คนอื่นดูได้เข้าใจและง่ายขึ้น

ก็ใช้คำสั่ง digitalWrite(พินที่ต้องการสั่ง, สถานะ); ธรรมดานี้แหละครับเพิ่มเข้าไปได้เลยใน void loop()

ลักษณะการต่อก็แบบนี้เลย แต่เลือกพินที่เป็นของ ESP8266 ถ้าใช้ 8266

ส่วนโค้ตก็แบบนี้

#define BUTTON_PIN    2
#define LAMP_PIN      5
 
bool lampState = false;
//  we made a variable which shows us the current state of lamp.
bool wasButtonDown = false;
// this variable show us the previous state of button.when before the button was pressed or not.
 
void setup()
{
    pinMode(BUTTON_PIN, INPUT);
    pinMode(LAMP_PIN, OUTPUT);
}
 
void loop()
{
	bool isButtonDown = digitalRead(BUTTON_PIN);
  // we are reading the current state of the button.
	if (isButtonDown && !wasButtonDown) {
        lampState = !lampState;
    	delay(10);
	// if the button is pressed,it will gives us high and invert the "wasButtonDown" will also gives us high so
    // the condition will be true and lampstate will become invert means from low to high.
      //delay is good to give to well read the button.
    }
 
    wasButtonDown = isButtonDown;
  //m above line is very tricly... wasButtonDown will have high value when the moment button is pressed but 
  //when we release the button it will again have low value because the isButtonDown will become low.
  // so next time when we press the button,the wasButtonDown value will again be LOW.
    digitalWrite(LAMP_PIN, lampState);
}

Simulation

ใช้การ กด ปุ่ม ในblynk ค่ะพี่

ที่ทำมันได้แค่แปบเดียว

อ่อประคือร้องต้องทำให้ 2 บรรทัดนี้ทำงานแค่ครั้งเดียวครับ ไม่งั้นมันจะวนกลับมาปิดทุกครั้ง

วิธีการ lock ค่า ผมสอนไว้ใน live Ep.3 ครับ

ไล่ดูช่วงที่ผมสอนส่งค่าผ่าน line แล้วเข้าใจมากขึ้นครับ