NodeMCU Ultrasonic Sensor - mrolarik/simple-iot GitHub Wiki
- การต่อ Ultrasonic Sensor เข้ากับ NodeMCU แสดงดังรูป
ที่มา https://www.hackster.io/mpho_mphego/automated-standup-desk-640adf
โดย
* VCC --> ไปที่ VU บน NodeMCU
* Trig --> ไปที่ D5 หรือ GPIO 14
* Echo --> ไปที่ D6 หรือ GPIO 12
* GND --> ไปที่ GND/G
- เปิดโปรแกรม
Arduino IDE
และพิมพ์โค้ดดังต่อไปนี้
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
const char* ssid = "<your ssid>";
const char* password = "<your password>";
ESP8266WebServer server(80);
#define TRIGGER_PIN D5 // GPIO14
#define ECHO_PIN D6 // GPIO12
// เพื่อความแม่นยำของ 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);
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();
}
-
โปรแกรมจากเว็บ http://tridenttd-iot.blogspot.com/2016/02/wittynode-esp8266-ultrasonic-sensor-hc.html
-
เมื่อเขียนโปรแกรมข้างต้นเสร็จเรียบร้อยให้ทดสอบโดยการกดที่ปุ่ม
verify
-
หากไม่พบข้อผิดพลาดใด ๆ ให้กดที่ปุ่ม
upload
เพื่อ upload โปรแกรมเข้า NodeMCU -
จากนั้นเปิด
Serial Monitor
เพื่อตรวจสอบการเชื่อมต่อ <รูป serial monitor> -
จาก
Serial Monitor
จะปรากฏหมายเลขip address
ของ NodeMCU ในกรณีนี้จะใช้เป็น Web Server
- ในโปรแกรมได้สร้างฟังก์ชันขึ้นมาใช้งานชื่อ
ultrasonic_distance()
- โดยฟังก์ชันจะ return ค่าระยะความห่างระหว่าง ultrasonic และ Object (วัตถุ)
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;
}
- การเรียกใช้ฟังก์ชันที่สร้างขึ้น
ultrasonic_distance()
สามารถทำได้ดังนี้
long distance = ultrasonic_distance();
- ขั้นตอนต่อมา ให้เปิดเว็บบราวเซอร์ เช่น firefox, chrome และ safari และพิมพ์
ip address
ที่ได้จากขั้นตอนก่อนหน้า
- เว็บบราวเซอร์จะแสดงข้อมูลระยะห่างที่ส่งมาจาก Ultrasonic Sensor
- หากต้องการที่จะวัดระยะห่างให้กด
F5
หรือทำการRefresh
เว็บบราวเซอร์ ค่าใหม่จากUltrasonic sensor
จึงจะถูกส่งมาแสดงในหน้าเว็บบราวเซอร์