#include <WiFi.h>
#include <WiFiClient.h>
#define SSID "Wokwi-GUEST"
#define PASSWORD ""
#include <TridentTD_LineNotify.h> // เรียกใช้ไลบรารี่สำหรับ Line Notify
#define LINE_TOKEN "70sXubIFuzZpMgdlQ1UeCkchhL78Ns8UUtNOo8lsT1q"
const int Trig = 19; // กำหนดขา Trig ของโมดูล Ultrasonic วัดระยะทาง
int Echo = 18; // กำหนดขา Echo ของโมดูล Ultrasonic วัดระยะทาง
long duration, distance, water_level; // ประกาศตัวแปร duration, distance ไว้สำหรับคำนวณระยะทาง
int LED_Green = 13; // กำหนดขา Pin LED
int LED_Yellow = 12; // กำหนดขา Pin LED
int LED_Red = 14; // กำหนดขา Pin LED
void setup()
{
pinMode(Trig, OUTPUT);
pinMode(Echo, INPUT);
Serial.begin(9600); // ตั้งค่า Baud rate Serial Port
delay(2000);
Serial.println("########################################");
Serial.println("# #");
Serial.println("# NodeMCU ESP8266 Run #"); // แสดงข้อความออก Serial Port
Serial.println("# #");
Serial.println("########################################");
pinMode(LED_Green, OUTPUT);
pinMode(LED_Yellow, OUTPUT);
pinMode(LED_Red, OUTPUT);
WiFi.begin(SSID, PASSWORD); // WiFi เริ่มทำงาน
Serial.printf("WiFi connecting to %s\n", SSID);
while (WiFi.status() != WL_CONNECTED) // check การเชื่อมต่อ WiFi วนลูปจนกว่าจะต่อ WiFi ได้
{
Serial.print(".");
delay(400);
}
Serial.printf("\nWiFi connected\nIP : ");
Serial.println(WiFi.localIP()); // แสดงค่า IP Address ที่ต่อ WiFi ได้ ออกทาง Serial Port
Serial.println(LINE.getVersion()); // แสดง Line Version ออก Serial Port
LINE.setToken(LINE_TOKEN); // ตั้งค่า Line Token ที่ใช้
LINE.notify("ระบบแจ้งเตือน < ชู้ทางไลน์ > เริ่มทำงาน"); // แจ้งเตือนไลน์ ว่าเซนเซอร์อุณหภูมิเริ่มทำงาน
Serial.println("Start your Engine");
}
void loop()
{
digitalWrite(Trig, LOW); // กระบวนการ Trig High Low โมดูล Ultrasonic เพื่อเริ่มวัดระยะทาง
delayMicroseconds(2);
digitalWrite(Trig, HIGH);
delayMicroseconds(5);
digitalWrite(Trig, LOW);
duration = pulseIn(Echo, HIGH); // วัดค่าเวลาคลื่นส่งไปกลับใส่ตัวแปร distance
distance = microsecondsToCentimeters(duration); // คำนวณระยะทางเก็บใส่ตัวแปร distance
Serial.print("Distance: ");
Serial.print(distance); // แสดงระยะจากขอบบ่อออกทาง Serial Port ความเร็ว 9600
Serial.println(" cm");
delay(100);
String SendData;
if (distance > 30)
{
Serial.println("\nStatus --> Detect Object\n");
SendData = "\n\tประตูได้ถูกเปิดออก!!!";
LINE.notify(SendData); // ส่งข้อความไปยัง Line
}
else
{
Serial.println("\nStatus --> Normal\n");
}
delay(500);
}
long microsecondsToCentimeters(long microseconds)
{
// ความเร็วเสียงในอากาศประมาณ 340 เมตร/วินาที หรือ 29 ไมโครวินาที/เซนติเมตร
// ระยะทางที่ส่งเสียงออกไปจนเสียงสะท้อนกลับมาสามารถใช้หาระยะทางของวัตถุได้
// เวลาที่ใช้คือ ระยะทางไปกลับ ดังนั้นระยะทางคือ ครึ่งหนึ่งของที่วัดได้
return microseconds / 29 / 2;
}