11184
(น้ำ แข็ง)
1
คือตอนนี้ผมเขียนโค้ด
-แสดงอุณหภูมิและความชื้นผ่านจอ 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);
}
ตัวอย่างโค้ดครับ
Remy_Martin
(Permpol Thanapunnamas)
2
อ่านกระทู้แล้วตัดเสริมเข้าไปครับ
11184
(น้ำ แข็ง)
3
ขอบคุณครับ จะลองทำดู ได้ผลยังไงเดี๋ยวมาแจ้งนะครับ
Remy_Martin
(Permpol Thanapunnamas)
4
เริ่มจากไล่แกะโค้ตที่ให้ไปดูก่อน ว่าส่วนไหนทำงานอะไรบ้างจากนั้นก็จับไปยัดไว้ในโค้ตเราอีกที ติดตรงไหนก็เอามาคุยกันครับ
11184
(น้ำ แข็ง)
5
ตอนนี้ผมเชื่อมต่อ 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();
}
11184
(น้ำ แข็ง)
6
แต่ตอนนี้มีข้อสงสัยทำไมตัวรีเลย์เหมือนไม่ได้ทำงาน ไม่มีเสียงสลับขั้วไฟอะครับ (แต่ไฟสีแดงๆติดนะครับ)
11184
(น้ำ แข็ง)
8
ไฟสีแดงๆตรง relay อะครับ ผมไม่แนใจว่าเรียกไฟอะไรครับ
11184
(น้ำ แข็ง)
9
ผมศึกษามาแล้วครับ น่าจะไฟไม่พอครับ เค้าบอกให้ใช้ อะแดปเตอร์ ต่อเข้า รีเลย์โดยตรง แต่ผมไม่รู้ว่าต้อง ต่อยังไงครับ
Remy_Martin
(Permpol Thanapunnamas)
10
ถ่ายตรงนี้มาดูชัดๆ ครับ เดียวชี้ให้
Remy_Martin
(Permpol Thanapunnamas)
11
แถมใช้ไฟบอร์ด 3.3 กับ 5 Vdc ไม้ได้ด้วย เพราะเป็น relay 12vdc ต้องหา อเดปเตอร์ 12 Vdc มาต่อต่างหากครับ
11184
(น้ำ แข็ง)
12
นี้ครับ คือระบบของผมที่คิดไว้คือ รับแสงจากโซลล่าเซล เก็บไว้ที่แบต และใช้ผ่านแบตครับใช้ อะแดปเตอร์คงไม่ได้ครับ แล้วถ้าเปลี่ยนรีเลย์เป็น 5v จะมีผลอะไรกับการทำงานของรีเลย์มั้ยครับ (รีเลย์จ่ายไฟให้ หลอดไฟ3 พัดลม1) ครับ ขอบคุณครับ
Remy_Martin
(Permpol Thanapunnamas)
13
ถ้าตามจริงก็ควรจะลดรีเลย์ลงมาเป็น 5V dc เราก็จะจัดการได้ง่ายขึ้นครับส่วนเรื่องมีผลอะไรนั้นไม่ต่างกันครับแค่ไฟเลี้ยงเปลี่ยนย่าน
Remy_Martin
(Permpol Thanapunnamas)
14
ไฟ บวกลบเข้า ก็ตามนี้ครับ
11184
(น้ำ แข็ง)
15
ผมว่าจะต่อวงจรตามนี้ครับ ขอถามความเห็นหน่อยครับว่าดีมั้ย โดยการใฃ้ ต่อเพิ่มกระแสไฟ DCครับ
Remy_Martin
(Permpol Thanapunnamas)
16
รู้สึกว่าตรงนี้มันได้เอาไว้ต่อไฟเลี้ยงนะครับ
ลองรีเช็คเรื่องการต่อไฟเลี้ยงใหม่ก่อนครับ
11184
(น้ำ แข็ง)
17
โอเคครับ ขอบคุณที่ให้ำคแนะนำครับ ถ้าได้ผลยังไงเดี๋ยวมาแจ้งอีกทีนะครับ
Remy_Martin
(Permpol Thanapunnamas)
18
ถ้าใช้โซล่าเซลชาทแบต เพื่อเอามามาเลี้ยงอุปกรณ์ควบคุมอีกที ผมว่าโอเคอยู่นะ ตัวอุปกรณ์กินไฟไม่เยอะน่าจะจ่ายเพียงพอได้ตลอดทั้งคืนจนเช้า ยังไงก็ต้องทดสอบอีกทีครับว่ามันได้ระดับไหน
Remy_Martin
(Permpol Thanapunnamas)
19
เคสนี้มี แบต 12V ในตัวก็ตัดอเดปเตอร์ออกไปเลย ยุ่งยากเปล่าๆ
11184
(น้ำ แข็ง)
20
ใช่ครับ ที่คิดไว้ผมจะใฃ้แบต 12v