- เป็น Sensor Node เน้นราคาประหยัด
ด้วยอุปกรณ์เพียง WittyNode ESP8266 และ Ultrasonic Sensor HC-SR04
ราคารวมเพียง 300-400บาท
- สามารอ่านระยะห่างได้ถึง 3 เมตร Ultrasonic Sensor HC-SR04 (ประมาณ70บาท)
เอาไปอ่านระยะห่างของวัตถุ หรือ ระยะน้ำในถังได้ (ความแม่นยำใช้งานจริง +/- 1-2 cm)
- สามารถทำเป็น Sensor Node Cloud ออกไปได้เรื่อยๆ
ผ่านทางสัญญาณ WiFi ได้ด้วยชิป ESP-12F ที่สัญญาณดีขึ้น 30% จาก ESP-12E
- ทำเป็น HTTP Web Server เพื่อทำให้ Computer, Notebook หรือ มือถือสามารถติดต่อเข้ามา
จากที่ไหนๆก็ได้ เพื่ออ่านค่า Sensor เมื่ออยู่ภายในเครื่อข่าย WiFi/LAN เดียวกันก็ได้
การต่อสาย
เนื่องจาก Ultrasonic Sensor HC-SR04 นั้นต้องใช้ไฟเลี้ยง +5VDC
ในขณะที่ WittyNode ESP8266 นั้นทำงานบนไฟ 3.3VDC
ดังนั้น เราจึงต้องต่อ Vcc ของ WittyNode ESP8266 Cloud ซึ่งจะมีค่าไฟ +5VDC
(ตามแหล่งจ่ายไฟจาก microUSB) ไปยัง Vcc ของ sensor
โดยการต่อสาย เพื่อไม่ให้สายระโยงระยาง เราจะต่อสายตามภาพดังนี้
(ตามแหล่งจ่ายไฟจาก microUSB) ไปยัง Vcc ของ sensor
โดยการต่อสาย เพื่อไม่ให้สายระโยงระยาง เราจะต่อสายตามภาพดังนี้
การ Sketch โปรแกรม ด้วย ArduinoIDE
กำหนด WittyNode ESP8266 สำหรับ ArduinoIDE ให้ติดตั้งเหมือน NodeMCU 1.0
โดยให้เลือก board ด้วย NodeMCU 1.0
จากนั้น ให้ sketch file นี้ ลงสู่ WittyNode ESP82666 ตามโคดดังนี้
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
const char* ssid = "............."; //กำหนดเครื่อข่าย WiFi ของคุณ
const char* password = ".........."; //กำหนด password ของเครือข่าย WiFi
ESP8266WebServer server(80);
#define TRIGGER_PIN D7 // GPIO13
#define ECHO_PIN D6 // GPIO12
#define GND_PIN D5 // GPIO14
// เพื่อความแม่นยำของ Ultrasonic
// จะคำนวนระยะให้ 10 รอบ แล้วตัดค่าที่มากสุด น้อยสุดออกไปแล้วเฉลี่ย8 ค่า
long ultrasonic_distance(){
long duration[10], distance[10];
long dist_min, dist_max, dist_sum=0;
for(int i=0; i<10; i++){
distance[i]=600;
while(distance[i]>300){
digitalWrite(TRIGGER_PIN, LOW); // Added this line
delayMicroseconds(2); // Added this line
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10); // Added this line
digitalWrite(TRIGGER_PIN, LOW);
duration[i] = pulseIn(ECHO_PIN, HIGH);
distance[i] = (duration[i]/2) / 29.1;
delayMicroseconds(10); // Added this line
}
if(i==0){
dist_min= distance[i];
dist_max= distance[i];
}else{
dist_min = (distance[i]<dist_min)? distance[i] : dist_min;
dist_max = (distance[i]>dist_max)? distance[i] : dist_max;
}
dist_sum += distance[i];
}
return (dist_sum-dist_min-dist_max)/8;
}
void handleRoot() {
long distance= ultrasonic_distance(); // รับค่าระยะที่อ่านได้จาก Ultrasonic Sensor
server.send(200, "text/html", "<H1>"+(String)distance+" cm</H1>"); // แสดงผลคืนให้แก่ Web Client ที่ติดต่อเข้ามา
Serial.println(distance);
}
void setup() {
Serial.begin (115200);
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(GND_PIN, OUTPUT); digitalWrite(GND_PIN,LOW);
WiFi.begin(ssid, password);
Serial.println("");
// Wait for connection
while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); }
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
server.on("/", handleRoot);
server.begin();
Serial.println("HTTP server started");
}
void loop() {
server.handleClient();
}
------------------------------------------------------------------------------------
จากนั้น กดปุ่ม Ctrl+Shift + M เพื่อเปิดหน้าต่าง Serial Monitor ดูค่าต่างๆตามที่ได้โปรแกรม
WittyNode จะทำการติดต่อเข้าไปเครือข่าย WiFi ตามที่กำหนด
และแสดงค่า IP ของ WittyNode ที่หลังจาก connect เข้าสู่เครือข่าย WiFiแล้ว
(ในทีนี้คือ เครือข่ายชื่อ ZenCAT )
เราจะใช้ค่า IP ของ WittyNode นี้ในการเปิด Web Browser ต่อไป
ตัวอย่างค่า IP ของ WittyNode หลังต่อเข้าเครือข่าย WiFi แล้ว ในที่นี้คือ 192.168.43.53
หลังจากนั้นก็เข้า Web Browser อะไรก็ได้เช่น Chrome
จาก Computer หรือ Notebook หรือ มือถือ ฯลฯ
ที่อยู่ภายในเครือข่าย WiFi เดียวกันนี้ ( ในที่นี้คือ ZenCAT)
โดยเมื่อใส่ค่า IP ที่ได้มาในช่อง url
จะทำให้ Web Browser จะติดต่อไปยัง WittyNode เพื่อขอให้อ่านค่า Ultrasonic Sensor ให้แสดงผลค่าคืนกลับมา
ตัวอย่างผลที่เรียกจาก Web Browser เมื่อติดต่อไปยัง WittyNode เพื่อขออ่านค่า Ultrasonic Sensor
(หมายเหตุ ตัวอย่างนี้ จะแสดงแบบง่ายๆ ต้อง reflesh หน้า Web Browser เอาเพื่อเรียกอ่านแต่ละครั้ง)
ใชh ESP8266-01 สีดำ ได้มั้ยครับ ขอบคุณครับ
ตอบลบแล้วถ้าจะให้มันขึ้นค่าเป็นแบบออโต้โดยที่เราไม่ต้องกดรีเฟรชตลอดเวลาที่ดูค่า นี่เราต้องใช้โค้ดอะไรหรอคะ
ตอบลบ