2. Sau khi cài xong các bạn mở Arduino IDE lên, vào phần File->Preferences. Tại phần Additional Boards Manager URLs các bạn thêm đường dẫn: http://arduino.esp8266.com/stable/package_esp8266com_index.json v à ấn OK.
Chạy DEMO ESP8266 Blink.
2.2 Nguyên lí hoạt động, Lắp ráp mạch thực tế 2.2.1 Lắp ráp mạch thực tế
Hình 2.4
Hình 2.6
Cách đấu các chân:
Chân VCC (LCD) nối với chân VIN (NodeMcu V3) Chân GND (LCD) nối với chân G (NodeMcu V3) Chân SDA (LCD) nối với chân D2 (NodeMcu V3) Chân SCL (LCD) nối với chân D1 (NodeMcu V3) ---
Chân VCC (Ultrasonic Sensor) nối với chân 3V (NodeMcu V3) Chân Trig (Ultrasonic Sensor) nối với chân D5 (NodeMcu V3) Chân Echo (Ultrasonic Sensor) nối với chân D6 (NodeMcu V3)
Chân GND (Ultrasonic Sensor) nối với chân G (NodeMcu V3)
2.2.2 Nguyên lí hoạt động
Cảm biến siêu âm hoạt động dựa trên nguyên lý phát sóng và phản xạ sóng. Nguyên lý này tương tự như ở loài dơi. Khi tìm mồi trong đêm, dơi thường phát ra các dạng sóng siêu âm và khi các sóng siêu âm này gặp các vật cản sẽ phản xạ lại sóng và giúp dơi xác định được chướng ngại vật trước mặt.
Đối với cảm biến siêu âm cũng vậy; khi ta cấp nguồn hoạt động, cảm biến sẽ phát ra 1 chùm sóng siêu âm liên tục. Khi các chùm sóng này chạm đến bề mặt vật cản sẽ phản xạ ngược lại cảm biến. Lúc này cảm biến sẽ thu lại các chùm sóng và tính toán khoảng cách từ cảm biến đến vật cản dựa trên thời gian phản xạ và vận tốc của sóng.
Hình 2.7
Khi thu được tín hiệu, sẽ hiển thị lên màn hình LCD và đồng thời gửi tin nhắn về gmail 30 phút một lần.
Hình 2.8
Khi ấn nút trên broad thì sóng sẽ tiếp tục đo mực nước lúc đó rồi gửi về gmail đã được cài đặt trước đó.
CHƯƠNG 3: KẾT QUẢ, HƯỚNG PHÁT TRIỂN 3.1 .1 Kếtquả:
Hình 3.1
3.1.2 Hướng phát triển:
Để phát triển thêm có thể làm kết nối với cảnh báo hoặc vòi bơm nước, để xả nước khi quá nhiều hoặc bơm tự động khi mực nước quá thấp. Cũng có thể kiểm tra các thùng nhiên liệu để biết nhiều ít một cách an toàn.
KẾT LUẬN
Hệ thống thông báo mức nước qua mạng viễn thông đã được áp dụng khá rộng dãi trong đời sống và các ngành trong xã hội, điều đó cho thấy sự cần thiết cũng như phổ biến, lợi ích mà hệ thống mang lại là tốt.
DANH MỤC TÀI LIỆU KHAM KHẢO
Tham khảo Arduino nào có thể gửi mail:
ESP8266 – Wikipedia tiếng Việt
Tham khảo Cảm biến siêu âm là gì :
Cảm biến siêu âm là gì? Cấu tạo và nguyên lý hoạt động? | huphaco.vn (donghodoapsuat.vn)
Tham khảo cách đo mực nước bằng cảm biến siêu âm:
Arduino | Hướng dẫn sử dụng CHI TIẾT cảm biến Siêu Âm HY-SRF05 - YouTube
Mạch đo và hiển thị mực nước sử dụng arduino (dientutuonglai.com) [Arduino Basic #21] Cảm biến siêu âm HC-SR04 - YouTube
Tìm chi tiết sơ đồ chân esp8266:
Sơ đồ chân ESP8266 - Nên sử dụng chân nào (dientutuonglai.com)
Tham khảo cách gửi email từ ESP 8266:
IoT webserver- Gửi thông báo bằng email từ ESP8266 không dùng IFTTT - Lưu và chia sẻ kiến thức robocon, IoT, Embedded... (luuvachiase.net)
ESP8266 NodeMCU Gửi email bằng Máy chủ SMTP: HTML, Văn bản và Tệp đính kèm (Arduino) - Điều khiển & Tự động hoá (hatinh.tech)
Esp8266 send email part 2 / Gửi email đính kèm file các loại - YouTube Esp8266 send email - YouTube
PHỤ LỤC Code:
const int trig = 14; // D5 chân trig của HC-SR04 const int echo = 12; // D6 chân echo của HC-SR04
int gui = 1800000; //30 phút gửi mail 1 lần /Thời gian để gửi mail 1 lần int het = 10;
#include <Wire.h>
#include <LiquidCrystal_I2C.h> //Thêm thư viện đi kèm trong thư mục đi kèm
LiquidCrystal_I2C lcd(0x27,20,4); #include "Arduino.h"
#include <EMailSender.h> #include <ESP8266WiFi.h> int but = D3; //Nút nhấn gửi mail
const char* ssid = "TMQ"; //Tên Wifi
const char* password = "quyetnew123"; //Mật khẩu Wifi long times;
uint8_t connection_state = 0;
uint16_t reconnect_interval = 10000;
EMailSender emailSend("hungdaoduy0703@gmail.com", "Hung0703"); //Mail và mật khẩu mail Gửi tin nhắn.
uint8_t WiFiConnect(const char* nSSID = nullptr, const char* nPassword = nullptr)
{
static uint16_t attempt = 0; Serial.print("Connecting to "); if(nSSID) { WiFi.begin(nSSID, nPassword); Serial.println(nSSID); } uint8_t i = 0;
while(WiFi.status()!= WL_CONNECTED && i++ < 50) { delay(200); Serial.print("."); } ++attempt; Serial.println(""); if(i == 51) {
Serial.print("Connection: TIMEOUT on attempt: "); Serial.println(attempt);
if(attempt % 2 == 0)
Serial.println("Check if access point available or SSID and Password\r\n");
Serial.println("Connection: ESTABLISHED"); Serial.print("Got IP address: "); Serial.println(WiFi.localIP()); return true; } void Awaits() { uint32_t ts = millis(); while(!connection_state) { delay(50);
if(millis() > (ts + reconnect_interval) && !connection_state){ connection_state = WiFiConnect(); ts = millis(); } } } void setup() {
Serial.begin(9600); // giao tiếp Serial với baudrate 9600 lcd.init();
times = millis();
pinMode(trig,OUTPUT); // chân trig sẽ phát tín hiệu pinMode(echo,INPUT); // chân echo sẽ nhận tín hiệu pinMode(but,INPUT_PULLUP);
lcd.setCursor(2,0);
lcd.print("DO MUC NUOC");
connection_state = WiFiConnect(ssid, password); if(!connection_state) // nếu không kết nối với WIFI Awaits(); // sẵn sàng thử lại kết nối
Serial.println("Sending status: "); } void loop() {
unsigned long duration; // biến đo thời gian int distance; // biến lưu khoảng cách
/* Phát xung từ chân trig */
digitalWrite(trig,0); // tắt chân trig delayMicroseconds(2);
delayMicroseconds(5); // xung có độ dài 5 microSeconds digitalWrite(trig,0); // tắt chân trig
/* Tính toán thời gian */
// Đo độ rộng xung HIGH ở chân echo. duration = pulseIn(echo,HIGH);
// Tính khoảng cách đến vật. distance = int(duration/2/29.412);
/* In kết quả ra Serial Monitor */ Serial.print(distance); Serial.println("cm"); lcd.setCursor(0,1); lcd.print("T: Cm"); lcd.setCursor(3,1); lcd.print(distance); delay(200);
if(millis()- times == gui){
EMailSender::EMailMessage message;
message.subject = "HE THONG DO MUC NUOC";
message.message = String("MUC NUOC HIEN TAI LA: ") + String(distance) + String(" Cm ") ;
EMailSender::Response resp = emailSend.send("tranminhquyet20@gmail.com", message); ///Mail nhận tin nhắn
times = millis(); }
if(digitalRead(but) == 0){ delay(300);
Serial.println("DA GUI MAIL");
EMailSender::EMailMessage message;
message.subject = "HE THONG DO MUC NUOC";
message.message = String("NUT NHAN DUOC NHAN <br> MUC NUOC HIEN TAI LA: ") + String(distance) + String(" Cm ") ;//<br>
EMailSender::Response resp =
emailSend.send("tranminhquyet20@gmail.com", message); }
else{}; }