Trang chủSản phẩmSáng chế dụng cụSáng chế dụng cụ210 Hệ thống nhỏ giọt thông minh sử dụng ngôn ngữ lập trình C++Tên sản phẩm: 210 Hệ thống nhỏ giọt thông minh sử dụng ngôn ngữ lập trình C++Tác giả: Vũ Công PhongTên đơn vị: Bắc GiangSố lượt bình chọn: 3Giới thiệu về sản phẩm:BÌNH CHỌNMã xác nhận: Đổi mãChia sẻ với bạn bè qua: Chi tiết sản phẩmSự phát triển của cây tồng không thể thiếu nước, vì nước là thành phần bắt buộc của tế bào sống. Có nhiều nước thực vật mới hoạt động bình thường được. Nhưng hàm lượng nước trong thực vật không giống nhau, thay đổi tùy thuộc loài hay các tổ chức khác nhau của cùng một loài thực vật. Hàm lượng nước còn phụ thuộc vào thời kỳ sinh trưởng của cây và điều kiện ngoại cảnh mà cây sống. Để cây trồng phát triển được ổn định, cung cấp năng suất thu hoạch cao thì yếu tố nước là hàng đầu, việc cung cấp nước đủ, đúng thời điểm là vấn đề khó cho sự phát triển bền vững. Hiện nay, công nghệ tưới nhỏ giọt đang phát triển mạnh mẽ vì tiết kiệm nước, do nước tưới được cấp trực tiếp cho cây trồng, không bị thất thoát do bốc hơi và thấm sâu. Tưới nhỏ giọt còn có khả năng giữ được độ ẩm đồng đều trong tầng đất canh tác góp phần nâng cao năng suất cây trồng. Tưới cây, một việc tưởng chừng đơn giản đã được làm từ thuở nào, nhưng trước nguy cơ cạn kiệt nước và phải đảm bảo gia tăng năng suất với điều kiện tiết kiệm nhất về phân bón, nước tưới, đảm bảo chu kỳ sinh trưởng cây trồng, tiết kiệm nhân lực… đã tạo cơ hội cho công nghệ tưới nhỏ ngày càng hoàn thiện và phát triển. Tuy nhiên, việc điều khiển cung cấp nước cho cây trồng đang là nỗi băn khoăn cho nhiều người nông dân hiện nay. Vi điều khiển Arduino là một nền tảng mã nguồn mở được sử dụng để xây dựng các ứng dụng điện tử. Arduino gồm có board mạch có thể lập trình được ( thường gọi là vi điều khiển) và các phần mềm hỗ trợ phát triển tích hợp IDE (Integrated Development Environment) dùng để soạn thảo, biên dịch code và nạp chương trình cho board. Arduino ngày nay rất phổ biến cho những người mới bắt đầu tìm hiểu về điện tử vì nó đơn giản, hiệu quả và dễ tiếp cận. Không giống như các loại vi điều khiển khác, Arduino không cần phải có các công cụ chuyên biệt để phụ vục việc nạp code, đối với Arduino rất đơn giản, ta có thể kết nối với máy tính bằng cáp USB.Thêm vào đó việc lập trình cho Arduino rất dễ dàng, trình biên dịch Arduino IDE sử dụng phiên bản đơn giản hóa của ngôn ngữ C++. Nghiên cứu về arduino và vai trò của nước đối với sự phát triển của cây trồng, chúng tôi đã tiến hành nghiên cứu đề tài ―HỆ THỐNG NHỎ GIỌT THÔNG MINH SỬ DỤNG NGÔN NGỮ LẬP TRÌNH C++‖ cung cấp cho cây trồng lượng nước thích hợp phù hợp với từng thời kỳ phát triển của cây trồng, và sử dụng công 4 nghệ tưới nước tiết kiệm thông qua hệ thống nhỏ giọt tự động và được điều khiển thông minh trên bo mạch Arduino, với ngôn ngữ lập trình C++.
Trang 1TÁC GIẢ: VŨ CÔNG PHONG
SINH NGÀY 21/ 08/ 1983
Trang 2CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập - Tự do - Hạnh phúc
BẢN ĐỀ XUẤT THAM GIA CHƯƠNG TRÌNH
“TRI THỨC TRẺ VÌ GIÁO DỤC”
Kính gửi: Ban tổ chức chương trình ―TRI THỨC TRẺ VÌ GIÁO DỤC‖
Hưởng ứng cuộc vận động, động viên, cổ vũ tạo môi trường để thanh niên, đặc biệt là tri thức trẻ cống hiến, đóng góp vào sự nghiệp giáo dục của đất nước, tạo cơ hội để tuyên truyền, ứng dụng nhân rộng các công trình sáng kiến góp phần đổi mới phương pháp dạy và học, nâng cao chất lượng giáo dục Tôi xin tham gia chương trình tri thức trẻ vì giáo dục với nội dung như sau:
I LÝ LỊCH TRÍCH NGANG
- Họ và tên: VŨ CÔNG PHONG
- Ngày 21 tháng 08 năm sinh 1983
- Chứng minh thư nhân dân số:121474402 Công an tỉnh Bắc Giang cấp ngày 08 tháng 06 năm 2016
- Quê quán:Phượng Sơn – Lục Ngạn – Bắc Giang
- Chức vụ, đơn vị công tác: Giáo viên trường THCS Quý Sơn số 1
- Hộ khẩu thường trú: Phượng Sơn – Lục Ngạn – Bắc Giang
Trang 3II NỘI DUNG SÁNG KIẾN
1 Giải trình tính cấp thiết của sáng kiến:
Sự phát triển của cây tồng không thể thiếu nước, vì nước là thành phần bắt buộc của tế bào sống Có nhiều nước thực vật mới hoạt động bình thường được Nhưng hàm lượng nước trong thực vật không giống nhau, thay đổi tùy thuộc loài hay các tổ chức khác nhau của cùng một loài thực vật Hàm lượng nước còn phụ thuộc vào thời kỳ sinh trưởng của cây và điều kiện ngoại cảnh mà cây sống Để cây trồng phát triển được ổn định, cung cấp năng suất thu hoạch cao thì yếu tố nước là hàng đầu, việc cung cấp nước đủ, đúng thời điểm là vấn đề khó cho sự phát triển bền vững
Hiện nay, công nghệ tưới nhỏ giọt đang phát triển mạnh mẽ vì tiết kiệm nước, do nước tưới được cấp trực tiếp cho cây trồng, không bị thất thoát do bốc hơi
và thấm sâu Tưới nhỏ giọt còn có khả năng giữ được độ ẩm đồng đều trong tầng đất canh tác góp phần nâng cao năng suất cây trồng Tưới cây, một việc tưởng chừng đơn giản đã được làm từ thuở nào, nhưng trước nguy cơ cạn kiệt nước và phải đảm bảo gia tăng năng suất với điều kiện tiết kiệm nhất về phân bón, nước tưới, đảm bảo chu kỳ sinh trưởng cây trồng, tiết kiệm nhân lực… đã tạo cơ hội cho công nghệ tưới nhỏ ngày càng hoàn thiện và phát triển Tuy nhiên, việc điều khiển cung cấp nước cho cây trồng đang là nỗi băn khoăn cho nhiều người nông dân hiện nay
Vi điều khiển Arduino là một nền tảng mã nguồn mở được sử dụng để xây dựng các ứng dụng điện tử Arduino gồm có board mạch có thể lập trình được ( thường gọi là vi điều khiển) và các phần mềm hỗ trợ phát triển tích hợp IDE (Integrated Development Environment) dùng để soạn thảo, biên dịch code và nạp chương trình cho board
Arduino ngày nay rất phổ biến cho những người mới bắt đầu tìm hiểu về điện tử vì nó đơn giản, hiệu quả và dễ tiếp cận Không giống như các loại vi điều khiển khác, Arduino không cần phải có các công cụ chuyên biệt để phụ vục việc nạp code, đối với Arduino rất đơn giản, ta có thể kết nối với máy tính bằng cáp USB.Thêm vào đó việc lập trình cho Arduino rất dễ dàng, trình biên dịch Arduino IDE sử dụng phiên bản đơn giản hóa của ngôn ngữ C++
Nghiên cứu về arduino và vai trò của nước đối với sự phát triển của cây trồng, chúng tôi đã tiến hành nghiên cứu đề tài ―HỆ THỐNG NHỎ GIỌT THÔNG MINH SỬ DỤNG NGÔN NGỮ LẬP TRÌNH C++‖ cung cấp cho cây trồng lượng nước thích hợp phù hợp với từng thời kỳ phát triển của cây trồng, và sử dụng công
Trang 4nghệ tưới nước tiết kiệm thông qua hệ thống nhỏ giọt tự động và được điều khiển thông minh trên bo mạch Arduino, với ngôn ngữ lập trình C++
II, MỤC TIÊU SÁNG KIẾN
- Nghiên cứu thiết kế mô hình tưới nhỏ giọt thông minh trên cây trồng sử dụng các module điều khiển arduino uno
- Xây dựng mã chương trình điều khiển các mô dun cảm biến và mô đun điều khiển dựa trên ngôn ngữ lập trình C++
- Thiết kế đo lưu lượng độ ẩm của từng cây trồng phù hợp với khoảng thời gian trong từng mùa vụ
- Đánh giá hiệu quả của hệ thống trên mô hình thực tế và triển khai trên thực nghiệm
III, ĐỐI TƯỢNG NGHIÊN CỨU
Bo mạch vi điều khiển Arduino Uno R3 được mua trên thị trường có chức năng điều khiển relay, thu nhận thông tin từ cảm biến
Cảm biến độ ẩm đất có trên thị trường dùng để cung cấp dữ liệu thu được từ môi trường ngoài cung cấp cho bo mạch vi điều khiển arduino
Bộ đóng ngắt mạch điện được điều khiển qua relay trên bo mạch arduino Ngôn ngữ lập trình C++ được thiết kế phù hợp với phần mềm trên arduino
Bộ thu phát wifi ESP8266 cung cấp dữ liệu cho mạng internet và đảm bảo quan sát được hệ thống thông qua wifi
Hệ thống tưới nhỏ giọt tự động được bán trên thị trường có các van điều chỉnh áp lực
Một số cây trồng trong vụ thu đông, là những cây ngắn ngày, nhưng trồng trong điều kiện mùa khô thiếu nước ảnh hưởng tới sự phát triển
IV, PHƯƠNG PHÁP NGHIÊN CỨU
- Xây dựng mô hình tưới nhỏ giọt thông minh và điều khiển thông qua ngôn ngữ lập trình C++
- Đánh giá các giá trị của độ ẩm đất trên cây trồng đối với cây trong từng thời kỳ thích hợp, đảm bảo các giá trị đó phù hợp với độ ẩm cần thiết cho
sự phát triển cây trồng
V KẾT QUẢ NGHIÊN CỨU
1, Xây dựng cảm biến độ ẩm đất với bo mạch Arduino
1.1 Mô tả và nguyên lý hoạt động của cảm biến độ ẩm đất
Trang 5Cảm biến độ ẩm đất, trạng thái đầu ra mức thấp (0V), khi đất thiếu nước đầu
ra sẽ là mức cao (5V), độ nhạy cao chúng ta có thể điều chỉnh được bằng biến trở Phần đầu đo được cắm vào đất để phát hiện độ ẩm của đất, khi độ ầm của đất đạt ngưỡng thiết lập, đầu ra DO sẽ chuyển trạng thái từ mức thấp lên mức cao Nhờ thế, các bạn có thể sử dụng Analog hoặc Digital của Arduino để đọc giá trị từ cảm biến
Ứng dụng + Đọc độ ẩm đất
+ Hệ thống tưới tiêu tự động
Thông số kỹ thuật + Điện áp hoạt động: 3.3V-5V + Kích thước PCB: 3cm * 1.6cm + Led đỏ báo nguồn vào, Led xanh báo độ ẩm
+ IC so sánh : LM393 + VCC: 3.3V-5V + GND: 0V + DO: Đầu ra tín hiệu số (0 và 1) + AO: Đầu ra Analog (Tín hiệu tương tự)
1.2, Nguyên lý hoạt động
Theo sơ đồ mạch nguyên lý dưới:
Trang 6Khi module cảm biến độ ẩm phát hiện, khi đó sẽ có sự thay đổi điện áp ngay tại đầu vào của ic LM393 Ic này nhận biết có sự thay đổi nó sẽ đưa ra một tín hiệu 0V để báo hiệu và thay đổi như thế nào sẽ được tính toán để đọc độ ẩm đất
+ Cảm biến độ ẩm đất rất nhạy với độ ẩm môi trường xung quanh, thường được sử dụng để phát hiện độ ẩm của đất
+ Khi độ ẩm đất vượt quá giá trị được thiết lập, ngõ ra của module D0 ở mức giá trị là 0V
+ Ngõ ra D0 có thể được kết nối trực tiếp với vi điều khiển như (Arduino,PIC,AVR,STM), để phát hiện cao và thấp, và do đó để phát hiện độ ẩm của đất
+ Đầu ra Analog AO có thể được kết nối với bộ chuyển đổi ADC, bạn có thể nhận được các giá trị chính xác hơn độ ẩm của đất
1.3, Sơ đồ nối dây
Trang 7
1.4 Mã Lập trình ngôn ngữ lập trình C++
int relay = 6;
void setup()
{
Serial.begin(9600);//Mở cổng Serial ở mức 9600
pinMode (2, INPUT_PULLUP);
pinMode(A0, INPUT_PULLUP);
pinMode (13, OUTPUT);
pinMode (relay, OUTPUT);
}
void loop()
{
int value = analogRead(A0); // Ta sẽ đọc giá trị hiệu điện thế của cảm biến // Giá trị được số hóa thành 1 số nguyên có giá trị // trong khoảng từ 0 đến 1023
Serial.print("DANG HOAT DONG: ");
Serial.print("Do am dat la: ");
Trang 8int percent = map(value, 0, 1023, 0, 100);
Serial.print(100-percent);
Serial.println('%');
Serial.print("Gia tri cam bien: "); Serial.println(value); //Xuất ra serial Monitor delay(5000);
// Đọc giá trị D0 rồi điều khiển Led 13 Các bạn cũng có thể điều khiển bơm
nước thông qua rơle
if (digitalRead (2) == 100)
{
digitalWrite (13, HIGH);
}
else{
digitalWrite (13, LOW);
}
if (value >= 900) // value = 0-1023
{
digitalWrite (relay, LOW); // relay ON
Serial.println(" => Thieu nuoc, can tuoi cay");
}
else
{
digitalWrite (relay, HIGH); // relay OFF
Serial.println(" = > Cay du nuoc");
}
}
1.5 Kết quả
Trang 9Bảng hiển thị giá trị của cảm biến đo độ ẩm đất
Hệ thống hoạt động: Bao gồm máy tính, vi điều khiển Arduino, hệ thống cung cấp năng lượng mặt trời và hệ thống bơm nước
2, Xây Dựng Kết Nôi wifi ESP8266 với bo mạch Arduino
2.1Giới thiệu
Trang 10ESP8266 là một chip tích hợp cao - System on Chip (SoC), có khả năng xử
lý và lưu trữ tốt, cung cấp khả năng vượt trội để trang bị thêm tính năng wifi cho các hệ thống khác hoặc đóng vai trò như một giải pháp độc lập
Module wifi ESP8266 v1 cung cấp khả năng kết nối mạng wifi đầy đủ và khép kín, bạn có thể sử dụng nó để tạo một web server đơn giản hoặc sử dụng như một access point
2.2 Thông số kỹ thuật
Wifi 802.11 b/g/n
Wifi 2.4 GHz, hỗ trợ WPA/WPA2
Chuẩn điện áp hoạt động 3.3V
Chuẩn giao tiếp nối tiếp UART với tốc độ Baud lên đến 115200
Có 3 chế độ hoạt động: Client, Access Point, Both Client and Access Point
Hỗ trợ các chuẩn bảo mật như: OPEN, WEP, WPA_PSK, WPA2_PSK, WPA_WPA2_PSK
Hỗ trợ cả 2 giao tiếp TCP và UDP
Tích hợp công suất thấp 32-bit CPU có thể được sử dụng như là bộ vi xử lý ứng dụng
SDIO 1.1 / 2.0, SPI, UART
Làm việc như các máy chủ có thể kết nối với 5 máy con
2.3 Sơ đồ chân và các chức năng và nối dây
Trang 11URXD(RX) — dùng để nhận tín hiệu trong giao tiếp UART với vi điều khiển VCC — đầu vào 3.3V
GPIO 0 — kéo xuống thấp cho chế độ upload bootloader
RST — chân reset cứng của module, kéo xuống mass để reset
GPIO 2 — thường được dùng như một cổng TX trong giao tiếp UART để debug lỗi
CH_PD — kích hoạt chip, sử dụng cho Flash Boot và updating lại module, nối với mức cao
GND — nối với mass
UTXD (TX) — dùng để truyền tín hiệu trong giao tiếp UART với vi điều khiển
Sơ đồ lắp đặt mạch Arduino giao tiếp với ESP8266 điều khiển bật tắt LED thông qua wifi
Ở đây tôi sử dụng trực tiếp LED nối với chân D13 được tích hợp sẵn trên board Arduino
Trang 12Môi trường thử nghiệm
Trình duyệt web Mozilla Firefox 48.0.1
Window 10 Pro
Arduino IDE 1.6.4
Module wifi ESP 8266 v1
Board Arduino Uno
Đối với các môi trường khác bạn vui lòng tự điều chỉnh cho phù hợp
Những điểm cần lưu ý khi nạp code cho Arduino Uno để giao tiếp với ESP8266
Arduino Uno nạp code bằng bootloader sử dụng USB UART Arduino Uno gửi lệnh điều khiển (tập lệnh AT) cho ESP8266 cũng bằng giao tiếp UART Tuy nhiên board Arduino chỉ có 1 chân RX và 1 chân TX cho phép thực hiện giao tiếp UART Điều đó dẫn đến 2 sự lựa chọn:
Sử dụng chân RX và TX có sẵn trên Arduino để nạp code sau khi nạp code xong thì mới kết nối 2 chân đó với ESP8266 Với phương pháp này bạn phải thêm một khoảng thời gian delay ở hàm setup() để đảm bảo là sau khi kết nối ESP8266 với Arduino, thì ESP8266 vẫn nhận được đầy đủ các tập lệnh AT từ Arduino Tuy nhiên, bạn không thể debug qua cổng Serial do cổng này đang đóng vai trò kết nối với ESP8266
Sử dụng SoftwareSerial để giả lập thêm 1 cổng Serial nữa để gửi tập lệnh
Trang 13IDE nên bạn không cần phải tải thêm Với cách này thì có thể debug thông qua Serial tuy nhiên code sẽ phức tạp hơn
Ở ví dụ dưới đây tôi chọn phương án thứ nhất và chọn thời gian delay là 5s
để kết nối chân TX và RX của Arduino với chân RX và TX của ESP8266 ngay sau khi nạp code thành công
Code ESP8266 làm web server gửi lệnh bật tắt công tắc Led13
2.4 Mã lập trình trên ngôn ngữ C++
#define LED_PIN 13
#define CMD_SEND_BEGIN "AT+CIPSEND=0"
#define CMD_SEND_END "AT+CIPCLOSE=0"
#define STDIO_PROTOCOL_HTTP 80
#define STDIO_PROTOCOL_HTTPS 443
#define STDIO_PROTOCOL_FTP 21
#define STDIO_PROTOCOL_CURRENT STDIO_PROTOCOL_HTTP
#define STDIO_CHAR_CR 0x0D
#define STDIO_CHAR_LF 0x0A
#define STDIO_STRING_EMPTY ""
#define STDIO_DELAY_SEED 1000
#define STDIO_DELAY_1X (1*STDIO_DELAY_SEED)
#define STDIO_DELAY_2X (2*STDIO_DELAY_SEED)
#define STDIO_DELAY_3X (3*STDIO_DELAY_SEED)
#define STDIO_DELAY_4X (4*STDIO_DELAY_SEED)
#define STDIO_DELAY_5X (5*STDIO_DELAY_SEED)
bool hasRequest = false;
Trang 14void setup()
{
delay(STDIO_DELAY_5X);
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
initESP8266();
}
void loop()
{
while(Serial.available())
{
bufferingRequest(Serial.read());
}
if(hasRequest == true)
{
String htmlResponse = "<!doctype html>"
"<html>"
"<head>"
"<title>HE_THONG_NHO_GIOT_THONG_MINH</title>" "</head>"
"<body>"
"<h1>HE_THONG_NHO_GIOT_THONG_MINH</h1>"
Trang 15"<input type='radio' name='LED' name='STDIO' value='STDIO_ON' /> BAT_MAY ON<br/>"
"<input type='radio' name='LED' name='STDIO' value='STDIO_OFF' /> TAT_MAY OFF<br/>"
"<input type='submit' value='Submit' />"
"</form>"
"</body>"
"</html>";
String beginSendCmd = String(CMD_SEND_BEGIN) + "," + htmlResponse.length();
deliverMessage(beginSendCmd, STDIO_DELAY_1X);
deliverMessage(htmlResponse, STDIO_DELAY_1X);
deliverMessage(CMD_SEND_END, STDIO_DELAY_1X);
hasRequest = false;
}
}
void initESP8266()
{
deliverMessage("AT+RST", STDIO_DELAY_2X);
deliverMessage("AT+CWMODE=2", STDIO_DELAY_3X);
deliverMessage("AT+CWSAP=\"NhogiotthongminhNano\",\"12345678\",1,4", STDIO_DELAY_3X);
deliverMessage("AT+CIFSR", STDIO_DELAY_1X);
deliverMessage("AT+CIPMUX=1", STDIO_DELAY_1X);
deliverMessage(String("AT+CIPSERVER=1,") + STDIO_PROTOCOL_CURRENT, STDIO_DELAY_1X);
}
Trang 16void bufferingRequest(char c)
{
static String bufferData = STDIO_STRING_EMPTY;
switch (c)
{
case STDIO_CHAR_CR:
break;
case STDIO_CHAR_LF:
{
STDIOProcedure(bufferData);
bufferData = STDIO_STRING_EMPTY;
}
break;
default:
bufferData += c;
}
}
void STDIOProcedure(const String& command)
{
hasRequest = command.startsWith("+IPD,");
if(command.indexOf("STDIO_OFF") != -1)
{
digitalWrite(LED_PIN, LOW);
}
else if(command.indexOf("STDIO_ON") != -1)
Trang 17digitalWrite(LED_PIN, HIGH);
}
}
void deliverMessage(const String& msg, int dt)
{
Serial.println(msg);
delay(dt);
}
2.5 Kết quả
Lần lượt thực hiện các bước sau để kiểm tra việc điều khiển bật tắt LED 13 thông qua wifi với module ESP8266
Kết nối đến thiết bị và kiểm tra tín hiệu
Kết nối đến module wifi ESP8266 v1
Mở cmd và gõ lệnh sau để kiểm tra kết nối:
ping 192.168.4.1
Nếu kết nối thành công bạn sẽ nhận được kết quả sau:
Truy cập vào địa chỉ IP của module (mặc định là 192.168.4.1) và kiểm tra tính năng