NodeMCU Ultrasonic Sensor - mrolarik/simple-iot GitHub Wiki

* VCC --> ไปที่ VU บน NodeMCU
* Trig --> ไปที่ D5 หรือ GPIO 14
* Echo --> ไปที่ D6 หรือ GPIO 12
* GND --> ไปที่ GND/G

ตัวอย่างโปรแกรมควบคุม Ultrasonic และ NodeMCU

  • เปิดโปรแกรม 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

การสร้างฟังก์ชัน (Function)

  • ในโปรแกรมได้สร้างฟังก์ชันขึ้นมาใช้งานชื่อ 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;
}

การเรียกใช้ฟังก์ชัน (Calling Function)

  • การเรียกใช้ฟังก์ชันที่สร้างขึ้น ultrasonic_distance() สามารถทำได้ดังนี้
long distance = ultrasonic_distance();

แสดงตัวอย่างหน้าเว็บไซต์

  • ขั้นตอนต่อมา ให้เปิดเว็บบราวเซอร์ เช่น firefox, chrome และ safari และพิมพ์ ip address ที่ได้จากขั้นตอนก่อนหน้า
    Web Server
  • เว็บบราวเซอร์จะแสดงข้อมูลระยะห่างที่ส่งมาจาก Ultrasonic Sensor
  • หากต้องการที่จะวัดระยะห่างให้กด F5 หรือทำการ Refresh เว็บบราวเซอร์ ค่าใหม่จาก Ultrasonic sensor จึงจะถูกส่งมาแสดงในหน้าเว็บบราวเซอร์

วีดีโอแสดงวิธีการทำงานเพื่อแสดงค่าจาก Ultrasonic ผ่านทางเว็บไซต์

Ultrasonic
คลิกที่รูปเพื่อดูวีดีโอ

รายละเอียดเพิ่มเติม

⚠️ **GitHub.com Fallback** ⚠️