โปรเจคเรื่องตู้อบกล้วย **ติดปัญหาเรื่องโค้ด blynk

คือตอนนี้ผมเขียนโค้ด
-แสดงอุณหภูมิและความชื้นผ่านจอ LCD เรียบร้อยแล้ว
-วัดค่าอัณหภูมิและความชื้นผ่าน DHT22 เรียบร้อยแล้ว
-ตัวรีเลย์ 4 ช่องเรียบร้อยแล้ว (คือถ้าอุณหภูมิหรือความชื้นเกินกว่าที่กำหนดให้ตัวรีเลย์ทำงานอัติโนมัติ ไม่แน่ใจว่าถูกต้องมั้ยนะครับ)

ที่ติดปัญหาคือ ไม่รู้จะใส่โค้ดเกี่ยวกับโปรแกรม blynk ตรงไหน เคยใส่แล้วไม่สามารถเชื่อมต่อได้ขึ้นว่า offline และใน serial monitor ไม่ขึ้นว่า connect
(จุดประสงค์เกี่ยวกับ blynk คือ แสดงค่าความชื้นและอุณหภูมิได้ และสามารถควบคุมตัว relay ได้ด้วย)
ไม่ทราบว่าผมต้องเพิ่มเติมโค้ดตรงจุดไหนครับ??

#include "DHT.h"
#include <LiquidCrystal_I2C.h>

#define DHTPIN D5
#define DHTTYPE DHT22

int Relay1 = D7;
int Relay2 = D6;
int Relay3 = D3;
int Relay4 = D4;

DHT dht(DHTPIN, DHTTYPE);

LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
  Serial.begin(9600);
  Serial.println(F("DHTxx test!"));
  Serial.println();
  Serial.println("Status\tHumidity (%)\tTemperature (C)\t(F)");
  pinMode (Relay1,OUTPUT);
  pinMode (Relay2,OUTPUT);
  pinMode (Relay3,OUTPUT);
  pinMode (Relay4,OUTPUT);

  dht.begin();
  lcd.begin();

}
void loop() {
  delay(2000);
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  float f = dht.readTemperature(true);
  if (isnan(h) || isnan(t) || isnan(f)) {
  Serial.println(F("Failed to read from DHT sensor!"));
  return;
  }
    if (t >= 60){
    digitalWrite (Relay1,LOW);
    digitalWrite (Relay2,LOW);
    digitalWrite (Relay3,LOW);
  }
  else if (t < 60)
  {
    digitalWrite (Relay1,HIGH);
    digitalWrite (Relay2,HIGH);
    digitalWrite (Relay3,HIGH);
    Serial.println("Relay 1,2,3 HIGH!");
  }
  if (h <= 20){
    digitalWrite (Relay4,LOW);

  }
  else if (h > 20)
  {
    digitalWrite (Relay4,HIGH);
    Serial.println("Relay 4 HIGH!");
  }
  float hif = dht.computeHeatIndex(f, h);
  float hic = dht.computeHeatIndex(t, h, false);
  Serial.print(F("Humidity: "));
  Serial.print(h);
  Serial.print(F("% Temperature: "));
  Serial.print(t);
  Serial.print(F(" C "));
  Serial.print(f);
  Serial.print(F(" F Heat index: "));
  Serial.print(hic);
  Serial.print(F(" C "));
  Serial.print(hif);
  Serial.println(F(" F"));
  lcd.setCursor(0, 0);
  lcd.print("Hum:     ");
  lcd.setCursor(4, 0);
  lcd.print(h);
  lcd.setCursor(9, 0);
  lcd.print("%");
  lcd.setCursor(0, 1);
  lcd.print("Tem:     ");
  lcd.setCursor(4, 1);
  lcd.print(t);
  lcd.setCursor(9, 1);
  lcd.print("C");
  delay(2000);
}

ตัวอย่างโค้ดครับ

อ่านกระทู้แล้วตัดเสริมเข้าไปครับ

ขอบคุณครับ จะลองทำดู ได้ผลยังไงเดี๋ยวมาแจ้งนะครับ

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

ตอนนี้ผมเชื่อมต่อ blynk และวัอุณหภูมิกับควบคุมรีเลย์ได้แล้วครับ **แก้ไขจากโค้ดเดิมประมาณนี้ครับ

#define BLYNK_PRINT Serial
#include "DHT.h"
#include <LiquidCrystal_I2C.h>
#include <SPI.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DHT.h>
#define DHTPIN D5
#define DHTTYPE DHT22


char auth[] = "KOTY9C2PNZsEaJ6khVlr7WwskPuGaa9t";
char ssid[] = "PTT_2.4G";
char pass[] = "nttmi14982317";

int Relay1 = D7;
int Relay2 = D6;
int Relay3 = D3;
int Relay4 = D4;

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
SimpleTimer timer;

void sendSensor()
{
  float h = dht.readHumidity();
  float t = dht.readTemperature(); 

  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  Blynk.virtualWrite(V5, h);
  Blynk.virtualWrite(V6, t);
}
void setup() {
  Serial.begin(9600);
  Blynk.begin(auth, ssid, pass);
  Serial.println(F("DHTxx test!"));
  Serial.println();
  Serial.println("Status\tHumidity (%)\tTemperature (C)\t(F)");
  pinMode (Relay1,OUTPUT);
  pinMode (Relay2,OUTPUT);
  pinMode (Relay3,OUTPUT);
  pinMode (Relay4,OUTPUT);

  dht.begin();
  lcd.begin();
  timer.setInterval(1000L, sendSensor);
}
void loop() {
  delay(2000);
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  float f = dht.readTemperature(true);
  if (isnan(h) || isnan(t) || isnan(f)) {
  Serial.println(F("Failed to read from DHT sensor!"));
  return;
  }
    if (t >= 60){
    digitalWrite (Relay1,LOW);
    digitalWrite (Relay2,LOW);
    digitalWrite (Relay3,LOW);
  }
  else if (t < 60)
  {
    digitalWrite (Relay1,HIGH);
    digitalWrite (Relay2,HIGH);
    digitalWrite (Relay3,HIGH);
    Serial.println("Relay 1,2,3 HIGH!");
  }
  if (h <= 20){
    digitalWrite (Relay4,LOW);

  }
  else if (h > 20)
  {
    digitalWrite (Relay4,HIGH);
    Serial.println("Relay 4 HIGH!");
  }
  float hif = dht.computeHeatIndex(f, h);
  float hic = dht.computeHeatIndex(t, h, false);
  Serial.print(F("Humidity: "));
  Serial.print(h);
  Serial.print(F("% Temperature: "));
  Serial.print(t);
  Serial.print(F(" C "));
  Serial.print(f);
  Serial.print(F(" F Heat index: "));
  Serial.print(hic);
  Serial.print(F(" C "));
  Serial.print(hif);
  Serial.println(F(" F"));
  lcd.setCursor(0, 0);
  lcd.print("Hum:     ");
  lcd.setCursor(4, 0);
  lcd.print(h);
  lcd.setCursor(9, 0);
  lcd.print("%");
  lcd.setCursor(0, 1);
  lcd.print("Tem:     ");
  lcd.setCursor(4, 1);
  lcd.print(t);
  lcd.setCursor(9, 1);
  lcd.print("C");
  delay(2000);
  Blynk.run();
  timer.run();
}

แต่ตอนนี้มีข้อสงสัยทำไมตัวรีเลย์เหมือนไม่ได้ทำงาน ไม่มีเสียงสลับขั้วไฟอะครับ (แต่ไฟสีแดงๆติดนะครับ)

ไฟสีแดงคือไฟ อะไรครับ

ไฟสีแดงๆตรง relay อะครับ ผมไม่แนใจว่าเรียกไฟอะไรครับ

ผมศึกษามาแล้วครับ น่าจะไฟไม่พอครับ เค้าบอกให้ใช้ อะแดปเตอร์ ต่อเข้า รีเลย์โดยตรง แต่ผมไม่รู้ว่าต้อง ต่อยังไงครับ

ถ่ายตรงนี้มาดูชัดๆ ครับ เดียวชี้ให้

แถมใช้ไฟบอร์ด 3.3 กับ 5 Vdc ไม้ได้ด้วย เพราะเป็น relay 12vdc ต้องหา อเดปเตอร์ 12 Vdc มาต่อต่างหากครับ

นี้ครับ คือระบบของผมที่คิดไว้คือ รับแสงจากโซลล่าเซล เก็บไว้ที่แบต และใช้ผ่านแบตครับใช้ อะแดปเตอร์คงไม่ได้ครับ แล้วถ้าเปลี่ยนรีเลย์เป็น 5v จะมีผลอะไรกับการทำงานของรีเลย์มั้ยครับ (รีเลย์จ่ายไฟให้ หลอดไฟ3 พัดลม1) ครับ ขอบคุณครับ

ถ้าตามจริงก็ควรจะลดรีเลย์ลงมาเป็น 5V dc เราก็จะจัดการได้ง่ายขึ้นครับส่วนเรื่องมีผลอะไรนั้นไม่ต่างกันครับแค่ไฟเลี้ยงเปลี่ยนย่าน

ไฟ บวกลบเข้า ก็ตามนี้ครับ

ผมว่าจะต่อวงจรตามนี้ครับ ขอถามความเห็นหน่อยครับว่าดีมั้ย โดยการใฃ้ ต่อเพิ่มกระแสไฟ DCครับ

รู้สึกว่าตรงนี้มันได้เอาไว้ต่อไฟเลี้ยงนะครับ

ลองรีเช็คเรื่องการต่อไฟเลี้ยงใหม่ก่อนครับ

โอเคครับ ขอบคุณที่ให้ำคแนะนำครับ ถ้าได้ผลยังไงเดี๋ยวมาแจ้งอีกทีนะครับ

ถ้าใช้โซล่าเซลชาทแบต เพื่อเอามามาเลี้ยงอุปกรณ์ควบคุมอีกที ผมว่าโอเคอยู่นะ ตัวอุปกรณ์กินไฟไม่เยอะน่าจะจ่ายเพียงพอได้ตลอดทั้งคืนจนเช้า ยังไงก็ต้องทดสอบอีกทีครับว่ามันได้ระดับไหน

เคสนี้มี แบต 12V ในตัวก็ตัดอเดปเตอร์ออกไปเลย ยุ่งยากเปล่าๆ

ใช่ครับ ที่คิดไว้ผมจะใฃ้แบต 12v

free
hit counter