เซนเซอร์ไม่ทำงานตามที่สั่งค่ะ

ตอนนี้คุมอุณหภูมิและความชื้นในดินได้แล้วค่ะ เหลือแค่ควบคุมไฟ แต่ปัญหาคือ ตั้งให้ปิดไฟ 2 ช่วง ตอนเช้า 08.00 - 09.00 และช่วงเย็น 18.00-19.00 แต่ตอนนี้ไฟไม่ยอมปิดตามที่ตั้งไว้ค่ะ ช่วยแนะนำทีค่ะ
อันนี้คือตัวโค้ดค่ะ

//#define BLYNK_PRINT Serial 
#include <ESP8266WiFi.h>
//#include <BlynkSimpleEsp8266.h>
char auth[] = "Yz0iabYc6OYGHCoZW0pNiB3Ar_Mdyen-"; //Token key
char ssid[] = "BTHOME2.4";
char pass[] = "22Bil14Tae";
#include <time.h>
int timezone = 7 * 3600;
int dst = 0;                            //กำหนดค่า Date Swing Time
char ntp_server1[20] = "pool.ntp.org";
char ntp_server2[20] = "time.nist.gov";
char ntp_server3[20] = "time.uni.net.th";

int RelayOnPump = D7; //ปล่อยน้ำ
int RelayOnPump1 = D8; //พัดลม
int RelayOnPump2 = D5; //หลอดไฟ
float sensorValue = 0;
const int Sensor = 0;
int i =0;
#include <ESP8266WiFi.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);


#include "DHT.h"
#define DHTPIN D6
#define DHTTYPE DHT22 
DHT dht(DHTPIN, DHTTYPE);


#include "TSL2561.h"
TSL2561 tsl(TSL2561_ADDR_FLOAT); 
#include <TridentTD_LineNotify.h> //ประกาศไลบารี่ เพื่อสร้าง ไลน์ bot
#define LINE_TOKEN  "FtjcMZ8Cb0IKwr9lHkdS3ObBD6kSkrFQFtg6UrAPt15" // กำหนด Key ที่ได้จาก ไลน์
void setup()
{   

  Serial.begin(115200);
   //Blynk.begin(auth, ssid, pass);
   LINE.setToken(LINE_TOKEN);

  pinMode(RelayOnPump, OUTPUT);
  pinMode(RelayOnPump1, OUTPUT);
  pinMode(RelayOnPump2, OUTPUT);
    digitalWrite(RelayOnPump2, HIGH);
  lcd.begin();
  lcd.backlight();
  dht.begin();  
  pinMode (Sensor, INPUT);
  if (tsl.begin()) {
  Serial.println("Found sensor");
  } else {
  Serial.println("No sensor?");
  while (1);
  }
    tsl.setGain(TSL2561_GAIN_16X);
   tsl.setTiming(TSL2561_INTEGRATIONTIME_13MS);

}

void loop()
{ 

 time_t now = time(nullptr);
  struct tm* p_tm = localtime(&now);
  Serial.print(p_tm->tm_hour); Serial.print(":");
  Serial.print(p_tm->tm_min); Serial.print(":");
  Serial.println(p_tm->tm_sec);
  Serial.println(ctime(&now));

if( p_tm->tm_hour == 6 &&p_tm->tm_min == 00 ) 
  {
   digitalWrite(RelayOnPump2, HIGH);
    LINE.notify("พักหลอดไฟ 6.00 น. ");
  }
  else if( p_tm->tm_hour == 18 &&p_tm->tm_min == 00) 
    {
     digitalWrite(RelayOnPump2, HIGH);
         LINE.notify("พักหลอดไฟ 18.00 น. ");
    }
    else{
       digitalWrite(RelayOnPump2, LOW);
            LINE.notify("เปิดไฟตามปกติ");
      }
 
  uint16_t x = tsl.getLuminosity(TSL2561_VISIBLE);  
  Serial.println(x, DEC);
  uint32_t lum = tsl.getFullLuminosity();
  uint16_t ir, full;
  ir = lum >> 16;
  full = lum & 0xFFFF;
  Serial.print("IR: "); Serial.print(ir);   Serial.print("\t\t");
  Serial.print("Full: "); Serial.print(full);   Serial.print("\t");
  Serial.print("Visible: "); Serial.print(full - ir);   Serial.print("\t");
  Serial.print("Lux: "); Serial.println(tsl.calculateLux(full, ir));
  
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  float f = dht.readTemperature(true);
  sensorValue = analogRead(Sensor);

   Serial.print(F("Humidity: "));
  Serial.print(h);
  Serial.print(F("%  Temperature: "));
  Serial.println(t);
  lcd.begin();
  lcd.setCursor(0, 0);
  lcd.print("sensorValue :"); 
  lcd.print(sensorValue); 
  lcd.setCursor(0, 1);
  lcd.print("::H:"); 
  lcd.print(h);
  lcd.print("::T:"); 
  lcd.print(t);
  lcd.setCursor(0, 2); 
  lcd.print("full :"); 
  lcd.print(full);


 if( t >= 30){
  LINE.notify("อุณหภูมิสูงกว่าค่าที่กำหนด ค่าที่วัดได้"+String(t) );
  digitalWrite(RelayOnPump1, LOW);
  LINE.notify("เปิดพัดลม");
  }else{
  
  digitalWrite(RelayOnPump1, HIGH);

    }
  
  if (sensorValue >= 440){
       LINE.notify("ค่าความชื่นในดินสูงกว่ากำหนด ค่าที่วัดได้"+String(sensorValue) );
       LINE.notify("กำลังปล่อยน้ำ");
   Serial.print("ค่าความชื้น = ");
   Serial.print(sensorValue);
   Serial.println("%");
   digitalWrite(RelayOnPump, LOW);
   delay(5000);
   digitalWrite(RelayOnPump, HIGH);
    LINE.notify("ปิดน้ำ");
  } else {
   Serial.print("ค่าความชื้น = ");
   Serial.print(sensorValue);
   Serial.println("%");
   digitalWrite(RelayOnPump, HIGH);
  }
delay(1000);
    //Blynk.run();

}

เงื่อนไขเหล่านี้เรา print ออกมาเทียบดูแล้วใช่ไหมว่ามันเข้าเงือ่นไข จริงรึป่าว

1 Likes

ค่ะ ลองเทสแล้ว แต่ว่ามันไม่ทริกรีเลย์ตามที่สั่งค่ะ บอกให้ปิดไฟตอน 06.00 ก็ไม่ปิด เลยไม่รู้ว่ามันผิดตรงไหนบ้างค่ะ

p_tm->tm_min == 00

เปลี่ยนเป็น

p_tm->tm_min == 0 ดูครับ

2 Likes