Skip to content

Blynk Ultrasonic Sensor and LCD Display

mrolarik edited this page Aug 3, 2018 · 1 revision
* VCC --> ไปที่ VU บน NodeMCU
* Trig --> ไปที่ D5 หรือ GPIO 14
* Echo --> ไปที่ D6 หรือ GPIO 12
* GND --> ไปที่ GND/G

ตัวอย่าง Application Blynk

Blynk-LCD

  • จากตัวอย่างจะมี Widget ชื่อ LCD ปรากฎใน Application Blynk โดยจะมีข้อความแสดงระยะที่วัดได้จาก Ultrasonic Sensor มีค่าเป็นเซ็นติเมตร (cm.)
  • วิธีการสร้าง Application Blynk ตั้งแต่เริ่มต้นสามารถอ่านได้จากลิงก์ Blynk-LED

การเพิ่ม Widget LCD

LCD Display

  • จากตัวอย่างให้เพิ่ม Widget LCD และทำการกำหนดค่า PIN ให้เป็นแบบ Virtual และกำหนดให้มีค่าเป็น V1 ดังนี้
    LCD Config

โปรแกรมที่ใช้ควบคุม

#define BLYNK_PRINT Serial

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

#define TRIGGER_PIN       D5    // GPIO14
#define ECHO_PIN          D6   // GPIO12

#define LED1              D0
#define LED2              D1

char auth[] = "<blynk token>";

const char* ssid = "<ssid>";
const char* password = "<password>";
const char* server = "<server ip address>";
const int port = 8080;

WidgetLCD lcd(V1);

// เพื่อความแม่นยำของ 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 setup(){
  
  Serial.begin(115200);

  pinMode(TRIGGER_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  
  Blynk.begin(auth, ssid, password, server, port);

  lcd.clear(); //Use it to clear the LCD Widget
  lcd.print(0, 0, "Distance in cm"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
  // Please use timed events when LCD printintg in void loop to avoid sending too many commands
  // It will cause a FLOOD Error, and connection will be dropped
}

void loop(){
  
  lcd.clear();
  lcd.print(0, 0,"Distance in cm"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
  delay(1500);
  long distance = ultrasonic_distance();
  
  Serial.print(distance);
  Serial.println("cm");
  lcd.print(0, 1, distance);
  Blynk.run();

  delay(3500);

}

ส่วนของโปรแกรมดัดแปลงมาจากลิงก์

Local Blynk Server & Blynk Server

  • หากใช้ Local Blynk Server ที่ติดตั้งขึ้นมาใช้งานเอง ให้กำหนดค่าในการติดต่อ Local Blynk Server ดังนี้
char auth[] = "<blynk token>";
  
const char* ssid = "<ssid>";
const char* password = "<password>";
const char* server = "<server ip address>";
const int port = 8080;
  
Blynk.begin(auth, ssid, password, server, port);
  • หากเชื่อมต่อกับ Blynk Server ทั่วไป ให้กำหนดค่า ดังนี้
char auth[] = "<blynk token>";
  
const char* ssid = "<ssid>";
const char* password = "<password>";
  
Blynk.begin(auth, ssid, password);

การควบคุมหลอด LED

  • จากตัวอย่างข้างต้น ได้เพิ่มหลอด LED เข้าไปจำนวน 2 หลอด โดยใช้ pin หมายเลข D0 และ D1 โดยกำหนด ดังนี้
#define LED1              D0
#define LED2              D1
  • ทำการ setup ค่าของ LED ทั้ง 2 ดังนี้
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
Clone this wiki locally