Tải bản đầy đủ (.doc) (27 trang)

NÔNG TRẠI THÔNG MINH (có code và layout)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.02 MB, 27 trang )

ĐỒ ÁN 2

NÔNG TRẠI THÔNG MINH


ĐỒ ÁN 2
Trang 1/26

MỤC LỤC
DANH MỤC CÁC HÌNH VẼ II
CHƯƠNG 1. : TỔNG QUAN VỀ ĐỀ TÀI

1

1.1

TÍNH THỰC TẾ CỦA ĐỀ TÀI 1

1.2

SƠ LƯỢT VỀ HỆ THỐNG VÀ SƠ ĐỒ KHỐI CỦA HỆ THỐNG 1

1.2.1

Sơ lượt về hệ thống.............................................................................................1

1.2.2

Sơ đồ khối...........................................................................................................2

CHƯƠNG 2. : THIẾT KẾ 3


2.1

CHỨC NĂNG CÁC KHỐI 3

2.1.1

Khối cảm biến.....................................................................................................3

2.1.2

Khối điều khiển...................................................................................................4

2.1.2.1

Sơ lược về NodeMCU 4

2.1.2.2

Khối relay 6

CHƯƠNG 3. : KẾT QUẢ MÔ PHỎNG 8
CHƯƠNG 4. : KẾT LUẬN 9
4.1

ƯU ĐIỂM: 9

4.2

NHƯỢC ĐIỂM: 9


4.3

Hướng phát triển

Nông Trại Thông Minh

9


ĐỒ ÁN 2
Trang 2/26

DANH MỤC CÁC HÌNH VẼ
Hình 2. 1 : DHT11....................................................................................................................3
Hình 2. 2 : NodeMCU ESP8266.............................................................................................4
Hình 2. 3 : Sơ đồ chân NodeMCU..........................................................................................5
Hình 2. 4 : Hình thực tế esp8266............................................................................................6
Hình 2. 5 : Module Relay......................................................................................................6

Hình 3. 1 : Mạch in...................................................................................................................8
Hình 3. 2 : Mạch Thực...........................................................................................................9

Nông Trại Thông Minh


ĐỒ ÁN 2
Trang 3/26

CHƯƠNG 1. : TỔNG QUAN VỀ ĐỀ TÀI


GIỚI THIỆU ĐỀ TÀI
1.1 Tính thực tế của đề tài
Trong cuộc sống hiện tại có rất nhiều yếu tố ảnh hưởng đến quá trình sản xuất và
con người. Trong đó nhiệt độ và độ ẩm là yếu tố được đề cập tới rất nhiều, vì thế
mạch đo nhiệt độ và độ ẩm ra đời là sự tất yếu. Với sự phát triển công nghệ như
hiện nay thì việc sản xuất mạch đo độ ẩm đơn giản mà độ chính xác cao là điều khá
đơn giản. Việc áp dụng trong thực tế càng phổ biến hơn khi độ ẩm đóng vai trong
rất lớn cho kết quả sản lượng cây trồng. Về việc phát triển của công nghệ hiện đại
ngày nay, khi internet đang phát triển mạnh mẽ, thì việc áp dụng những ứng dụng
của internet vào nông nghiệp là tất nhiên.
Với đề tài “Nông trại thông minh” ta có thể đo cùng lúc nhiệt độ và độ ẩm rồi gửi
thông tin qua wifi lên web, rồi từ web điều khiển xuống hệ thống tưới nước, nhưng
vì đề tài nằm trong phạm vi là Đồ Án 2 nên còn nhiều hạn chế và độ chính xác của
mạch không cao.
1.2 Sơ lượt về hệ thống và sơ đồ khối của hệ thống
1.2.1 Sơ lượt về hệ thống
Bộ mạch được điều khiển bởi Kit ESP8266 NodeMCU đóng vai trò điều khiển và
nhập xuất dữ liệu từ các thiết bị giao tiếp với nó. Như đề tài này cảm biến nhiệt độ
và độ ẩm được giao tiếp với KIT ESP8266 NodeMCU và xuất nhập dữ liệu đọc độ
ẩm từ cảm biến sau đó giao tiếp với wifi và truyên lên web.

Nông Trại Thông Minh


ĐỒ ÁN 2
Trang 4/26

Phần cứng sau khi thi công hoàn thành thì Kit được nạp chương trình qua các lệnh
được thiết kế bằng ngôn ngữ C như những tập lệnh điều khiển vi điều khiển để
mạch hoạt động một cách trơn tru.


1.2.2 Sơ đồ khối

Cảm biến nhiệt

Nguồn

độ, độ ẩm

NodeMCU

WEB

Nông Trại Thông Minh

Relay


ĐỒ ÁN 2
Trang 5/26

CHƯƠNG 2. : THIẾT KẾ
2.1 Chức năng các khối
2.1.1 Khối cảm biến
Cảm biến nhiệt độ và độ ẩm:
Cảm biến nhiệt độ và độ ẩm DHT11 ra đời sau và được sử dụng thay thế cho dòng
SHT1x ở những nơi không cần độ chính xác cao về nhiệt độ và độ ẩm. Cảm biến sử
dụng giao tiếp số theo chuẩn 1 dây.

Hình 2. 1 : DHT11


Nguyên lý hoạt động:
Để có thể giao tiếp với DHT11 theo chuẩn 2 chân vi xử lý thực hiện theo 2 bước:
 Gửi tín hiệu muốn đo (Start) tới DHT11 xác nhận lại.
 Khi giao tiếp được với DHT11, Cảm biến sẽ gửi lại 5 byte dữ liệu và nhiệt
độ đo được

Nông Trại Thông Minh


ĐỒ ÁN 2
Trang 6/26

2.1.2 Khối điều khiển
2.1.2.1

Sơ lược về NodeMCU

Phần cứng:

Hình 2. 2 : NodeMCU ESP8266

Sợ bộ về ESP8266 NodeMCU:
Khả năng hoạt động như một modem wifi:




Có thể quét và kết nối đến một mạng wifi bất kỳ (Wifi Client) để thực hiện
các tác vụ như lưu trữ, truy cập dữ liệu từ server.

Tạo điểm truy cập wifi (Wifi Access Point) cho phép các thiết bị khác kết
nối, giao tiếp và điều khiển.
Là một server để xử lý dữ liệu từ các thiết bị sử dụng internet khác.
Nguồn vào và nguồn ra
ESP8266 NodeMCU nhận nguồn từ cổng micro USB tích hợp sẵn trên mạch, giúp
việc nạp code trở nên dễ dàng hơn. Bên cạnh đó, việc cấp nguồn cho module cũng
linh động hơn vì bạn có thể sử dụng sạc dự phòng thay cho nguồn từ USB trên máy
tính (nguồn cấp tối đa là 5V).
ESP8266 NodeMCU có thể cung cấp nguồn cho tối đa 4 thiết bị: 3 nguồn ra 3.3V
và một nguồn từ chân Vin (điện thế bằng điện thế từ cổng micro USB). Khi sử dụng
các chân cấp nguồn này, hãy luôn kiểm tra để chắc chắn không cắm nhầm chân
dương (trên mạch in là 3v3 và Vin) và chân âm (GND). Tuy nhiên, 3 chân 3.3V đều

Nông Trại Thông Minh


ĐỒ ÁN 2
Trang 7/26

được bảo vệ, khi cắm ngược cực, module sẽ chỉ nóng lên và dừng hoạt động. Chân
Vin thì KHÔNG, cắm ngược cực ở chân này là module bốc khói.

Truyền và nhận tín hiệu
ESP8266 NodeMCU có tổng cộng 13 chân GPIO (General-purpose input/output) –
chân có thể truyền/nhận tín hiệu (trên mạch in từ D0 đến D8 và RX, TX, SD2,
SD3).

Hình 2. 3 : Sơ đồ chân NodeMCU

Nông Trại Thông Minh



ĐỒ ÁN 2
Trang 8/26

Hình 2. 4 : Hình thực tế esp8266

2.1.2.2

Khối relay

Hình 2. 5 : Module Relay

Thông số kỹ thuật:





Sử dụng điện áp nuôi 5VDC.
Relay đóng ngắt ở điện thế kích bằng 0V nên có thể sử dụng cho cả tín
hiệu 5V hay 3v3 (cần cấp nguồn ngoài), mỗi Relay tiêu thụ dòng khoảng 80mA.
Điện thế đóng ngắt tối đa: AC250V - 10A hoặc DC30V - 10A.
Có đèn báo đóng ngắt trên mỗi Relay.

Nông Trại Thông Minh


ĐỒ ÁN 2
Trang 9/26


Cách thức sử dụng:
Rơ-le bình thường gồm có 6 chân. Trong đó có 3 chân để kích, 3 chân còn lại nối
với đồ dùng điện công suất cao.
1. 3 chân dùng để kích
 +: cấp hiệu điện thế kích tối ưu vào chân này.
 - : nối với cực âm
 S: chân tín hiệu, tùy vào loại module rơ-le mà nó sẽ làm nhiệm vụ kích rơ-le

Nếu bạn đang dùng module rơ-le kích ở mức cao và chân S
bạn cấp điện thế dương vào thì module rơ-le của bạn sẽ được kích,
ngược lại thì không.

Tương tự với module rơ-le kích ở mức thấp.
2. 3 chân còn lại nối với đồ dùng điện công suất cao:
 COM: chân nối với 1 chân bất kỳ của đồ dùng điện, nhưng mình khuyên bạn
nên mắc vào đây chân lửa (nóng) nếu dùng hiệu điện thế xoay chiều và
cực dương nếu là hiệu điện một chiều.
 ON hoặc NO: chân này bạn sẽ nối với chân lửa (nóng) nếu dùng điện xoay
chiều và cực dương của nguồn nếu dòng điện một chiều.
 OFF hoặc NC: chân này bạn sẽ nối chân lạnh (trung hòa) nếu dùng điện
xoay chiều và cực âm của nguồn nếu dùng điện một chiều.

Nông Trại Thông Minh


ĐỒ ÁN 2
Trang 10/26

CHƯƠNG 3. : KẾT QUẢ MÔ PHỎNG


Hình 3. 1 : Mạch in

Nông Trại Thông Minh


ĐỒ ÁN 2
Trang 11/26

Hình 3. 2 : Mạch Thực

Nông Trại Thông Minh


ĐỒ ÁN 2
Trang 12/26

CHƯƠNG 4. : KẾT LUẬN
4.1 Ưu Điểm:
_ Hoạt động trong thời gian dài
4.2 Nhược Điểm:
_ Mạch đo chưa chính xác lắm
_ Hàn mạch chưa được đều
_ Cảm biến nhiệt độ cũng có thể gặp sai sót do môi trường ngoài tác động lên cảm
biến, do vậy cần có những bộ xử lý tín hiệu từ cảm biến
4.3 Hướng phát triển
_ ESP8266 NodeMCU đang phát triển ở việt nam rất mạnh về ứng dụng về IoT
( Internet of Thing)
_ ESP8266 NodeMCU có thể làm được như Nhà Thông Minh, Đồng Hồ Thông
Minh, ...

_ Về đề tài nông trại thông mình của em thì có thể phát triển và ứng dụng trong thực
tế rất cao, chúng ta có thể thêm những cảm biến như cảm biến ánh sáng, cảm biến
độ ẩm đất,... thêm nhiều relay để điều khiển nhiều thứ hơn trong nông nghiệp,...

Nông Trại Thông Minh


ĐỒ ÁN 2
Trang 13/26

TÀI LIỆU THAM KHẢO
WEB :
[1].

/>
Nông Trại Thông Minh


ĐỒ ÁN 2
Trang 14/26

PHỤ LỤC
Code hiển thị và nút nhấn :
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <DHT.h>
#define DHTPIN D6
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

const char* ssid = "wifi 101";
const char* password = "donamtrung456";
int _auto = 0;
int _relay = 0;
String myIp = "";
int relayPin = 14;

// mã GPIO của chân D5

ESP8266WebServer server(80);

// khai báo server

void hamhienthihtml(int temp, int hum){
String _activeAutoOn = "";
String _activeAutoOff = "active";
if ( _auto == 1) { _activeAutoOn = "active"; _activeAutoOff = "";}

Nông Trại Thông Minh


ĐỒ ÁN 2
Trang 15/26

String _activeRelayOn = "";
String _activeRelayOff = "active";
if ( _relay == 1) { _activeRelayOn = "active"; _activeRelayOff = "";}
// code HTML cho phần giao diện điều khiển
String s;
s = "<!DOCTYPE html>"

"<html>"
"<head><style>"
"html, body {height:100%}"
"a {text-decoration:none;}"
".css

{display:block;height:50%;color:white;font-size:50px;

width:

50%;float: left;}"
".on {background-color:#8BC34A}"
".off {background-color:#F44336}"
".active {border: 15px solid #f1fb5a;}"
"</style><head>"
"<body>"
"

IP "+myIp+"

"
"

Nhiet do: " + String(temp) + "

"
"

Do am: " + String(hum) + "

"
"

AUTO DO NHIET DO VA DIEU KHIEN

"
"<a href='AUTOOn'>"
"<button type='button' class='" + _activeAutoOn + " css on'>ON</button>"
"</a>"
"<a href='AUTOOff'>"
"
type='button'

off'>OFF</button>"


Nông Trại Thông Minh

class='"

+

_activeAutoOff

+

"

css


ĐỒ ÁN 2
Trang 16/26

"</a></b></b>"
"

DIEU KHIEN TAY

"
"<a href='LEDOn'>"
"<button type='button' class='"+_activeRelayOn+" css on'>ON</button>"
"</a>"
"<a href='LEDOff'>"
"<button type='button' class='"+_activeRelayOff+" css off'>OFF</button>"
"</a>"
"</body>"
"<script>"
"setInterval(function(){


window.location.href

'http://'+window.location.host; }, 1000);"
"</script>"
"</html>";
server.send(200, "text/html", s);
}
void handleRoot() {

// tạo giao diện Web server

float temp = dht.readTemperature();
float hum = dht.readHumidity();
hamhienthihtml(temp, hum);
}
void handleLedOn() {
_relay = 1;
_auto = 0;
float temp = dht.readTemperature();
float hum = dht.readHumidity();

Nông Trại Thông Minh

=


ĐỒ ÁN 2
Trang 17/26

digitalWrite(relayPin, HIGH);


// gửi tín hiệu LOW đến relay để bật đèn

hamhienthihtml(temp, hum);

// cập nhật lại giao diện

}
void handleLedOff() {
_relay = 0;
_auto = 0;
float temp = dht.readTemperature();
float hum = dht.readHumidity();
digitalWrite(relayPin, LOW);
hamhienthihtml(temp, hum);
}
void handleLedAutoOn() {
_auto = 1;
float temp = dht.readTemperature();
float hum = dht.readHumidity();
hamhienthihtml(temp, hum);
}
void handleLedAutoOff() {
_auto = 0;
handleLedOff();
}

Nông Trại Thông Minh



ĐỒ ÁN 2
Trang 18/26

void setup() {
delay(1000);
Serial.begin(115200);
dht.begin();
WiFi.softAP(ssid, password);

// tạo AP

IPAddress apip = WiFi.softAPIP();

// lấy địa chỉ IP của AP để truy cập

myIp = ""+apip;
Serial.println("/n Open browser and access to this IP: " + apip);
server.on("/", handleRoot);

// tải giao diện khi vào IP

server.on("/LEDOn", handleLedOn);

// nhận sự kiện từ web server và

gọi hàm tương ứng
server.on("/LEDOff", handleLedOff);
server.on("/AUTOOn", handleLedAutoOn);

// nhận sự kiện từ web


server và gọi hàm tương ứng
server.on("/AUTOOff", handleLedAutoOff);
server.begin();

// mở server

Serial.println("HTTP server beginned");
Serial.println(WiFi.softAPIP());
//pinMode(LED_BUILTIN, OUTPUT);
dụng
pinMode(relayPin, OUTPUT);

Nông Trại Thông Minh

// khai báo chân pin cần sử


ĐỒ ÁN 2
Trang 19/26

//digitalWrite(LED_BUILTIN, LOW);

// gửi tín hiệu mặc định khi

khởi động
digitalWrite(relayPin, LOW);
}
void loop() {
float temp = dht.readTemperature();

float hum = dht.readHumidity();
if (_auto == 1){
if(temp > 31){
digitalWrite(relayPin, HIGH);
} else {
digitalWrite(relayPin, LOW);
}
}
server.handleClient();

// chờ bắt sự kiện từ web server

}

Code hiển thị trên ubidot ( có đồ thị ) :

#include <DHT.h>
#include <ESP8266WiFi.h>

Nông Trại Thông Minh


ĐỒ ÁN 2
Trang 20/26

#define errorPin 16
#define relayPin 14

#define DHTPIN D6
#define DHTTYPE DHT11


DHT dht(DHTPIN, DHTTYPE);

const int sleep_time = 20;

WiFiClient client;

String variable_id1 = "59c7871ac03f9777d5a63f10";
String variable_id2 = "59c73bdec03f973980a2b688";

String token = "A1E-sBBmfAvnNKj1qsadBkpWRAhgMxlRN1";

const char* ssid = "WIFI 101";
const char* password = "donamtrung456";

Nông Trại Thông Minh


ĐỒ ÁN 2
Trang 21/26

void ubiSave_value(String, String);

void setup()
{
pinMode(errorPin, OUTPUT);
pinMode(relayPin, OUTPUT);

for (int i=0;i<4; i++)
{

digitalWrite(errorPin ,HIGH);
delay(200);
digitalWrite(errorPin ,LOW);
delay(200);
}

Serial.begin(115200);

dht.begin();
delay(10);

Nông Trại Thông Minh


ĐỒ ÁN 2
Trang 22/26

Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);

int n = WiFi.scanNetworks();

Serial.println("scan done");
if (n == 0)
{
Serial.println("no networks found");
Serial.println("Going into sleep");
// ESP.deepSleep(sleep_time * 1000000);

}

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED)
{
delay(500);

Nông Trại Thông Minh


ĐỒ ÁN 2
Trang 23/26

Serial.print(".");
}

Serial.println("");
Serial.println("Wi-Fi connected");
}

void loop()
{
// Read the current temperature and humidity measured by the sensor
float temp = dht.readTemperature();
float hum = dht.readHumidity();
ubiSave_value(String(variable_id1), String(temp));
ubiSave_value(String(variable_id2), String(hum));

Serial.println("Ubidots data");

Serial.println("temperature: "+String(temp));

if ( temp > 31 ) {
digitalWrite (relayPin, HIGH); // bat den

Nông Trại Thông Minh


ĐỒ ÁN 2
Trang 24/26

} else {
digitalWrite (relayPin, LOW); // tat den
}

Serial.println("humidity: "+String(hum));
Serial.println(" Going to Sleep for a while !" );

delay(sleep_time*100);
}

void ubiSave_value(String variable_id, String value)
{
String var = "{\"value\": " + value +"}"; // We'll pass the data in JSON format
String length = String(var.length());

// If we get a proper connection to the Ubidots API
if (client.connect("things.ubidots.com", 80))
{
Serial.println("Connected to Ubidots...");

delay(100);

Nông Trại Thông Minh


×