Hiện nay, cách mạng công nghiệp 4.0 đang là xu thế phát triển trên thế giới, đi cùng với đó lĩnh vực IOT (Vạn vật internet - Internet of things) là thành phần không thể thiếu. Đối với các nước phát triển, nền công nghiệp của họ đã có thể được quản lý, giám sát và hoạt động hầu hết bằng máy móc mà chỉ tốn rất ít nhân công. Dần dần, lĩnh vực tưởng chừng chỉ phù hợp với các ngành công nghiệp này đã lan sang cả các ngành nông nghiệp. Ở nhiều nước, nền nông nghiệp của họ đã đi theo một hướng phát triển mới đó là nông nghiệp chính xác hoặc canh tác chính xác, đó là kỹ thuật áp dụng đúng số lượng đầu vào (nước, phân bón, thuốc trừ sâu…) vào đúng vị trí và thời điểm để tăng cường sản xuất và nâng cao chất lượng nông sản. Ở Việt Nam, nông nghiệp chủ yếu vẫn phụ thuộc 90% vào thời tiết, khí hậu tức là vẫn thụ động trước những biến cố mà thiên nhiên gây ra cho cây trồng của mình. Nhận thức được vấn đề đó, chúng em đã lựa chọn đề tài “Nghiên cứu, tích hợp hệ thống mạng cảm biến trong nông nghiệp” với hi vọng sẽ có thể sẽ phát triển một hệ thống nông nghiệp thông minh công nghệ cao.
Trang 1ĐẠI HỌC QUỐC GIA HÀ NỘI ĐẠI HỌC CÔNG NGHỆ
BÀI TẬP LỚN
ỨNG DỤNG MÁY TÍNH TRONG ĐO LƯỜNG VÀ ĐIỀU
KHIỂN
ĐỀ TÀI : Giám sát nhiệt độ , độ ẩm môi trường, độ ẩm đất
và điều khiển thiết bị trong nông nghiệp
Sinh viên
thực hiện:
Hà Nội, năm 2021
Trang 2NHIỆM VỤ TỪNG THÀNH VIÊN
thành
Đào Thành Lộc Thiết kế cơ sở dữ liệu, giao diện điềukhiển qua máy tính, lập trình điều
khiển cho thiết bị
100%
Phạm Văn Lực Thiết kế mạch nguyên lý, mạchPCB, đấu nối phần cứng 100%
Nguyễn Thị Nga Thiết kế ứng dụng điều khiển quathiết bị di động (Smartphone) 100%
ĐÁNH GIÁ ĐIỂM TỪNG THÀNH VIÊN
- Điểm giảng viên đánh giá:
- Nhận xét của giảng viên:
- Điểm từng thành viên:
+ Đào Thành Lộc: + Phạm Văn Lực: + Nguyễn Thị Nga:
Giảng viên
Hoàng Văn Mạnh
Trang 3MỤC LỤC
NHIỆM VỤ TỪNG THÀNH VIÊN 2
ĐÁNH GIÁ ĐIỂM TỪNG THÀNH VIÊN 2
LỜI MỞ ĐẦU 5
PHẦN 1: CƠ SỞ LÝ THUYẾT LIÊN QUAN 6
1.1 Vi điều khiển ATMEGA16 6
1.1.1 Kiến trúc vi điều khiển 6
1.1.2 Giới thiệu vi điều khiển Atmega 16 6
1.2 Cơ sở dữ liệu Firebase 7
1.3 Lập trình giao diện với ngôn ngữ C # 8
PHẦN 2: NỘI DUNG THỰC HIỆN 10
2.1 Thành phần hệ thống 10
2.1.1 Vi điều khiển Atmega16 10
2.1.2 Node MCU8266 11
2.1.3 Cảm biến độ ẩm đất và bộ chuyển đổi 12
2.1.4 Cảm biến nhiệt độ, độ ẩm DHT11 13
2.2 Thiết kế mạch hệ thống 14
2.2.1 Khối vi điều khiển 15
2.2.2 Khối nguồn 15
2.2.3 Khối relay 16
2.2.4 Khối nút nhấn 16
2.2.5 Mạch mô phỏng 3D và mạch thực tế: 16
2.3 Chương trình nạp cho Vi điều khiển 18
2.4 Giao diện giám sát và điều khiển trên máy tính: 26
2.5 Code giao tiếp UART giữa Atmega16 với ESP8266 29
2.6 Giao diện giám sát và điều khiển trên điện thoại: 35
PHẦN 3: KẾT LUẬN, ĐÁNH GIÁ ĐỀ TÀI VÀ HƯỚNG PHÁT TRIỂN 37
Trang 43.1 Kết luận 37
3.2 Đánh giá 37
3.2.1 Ưu điểm 37
3.2.2 Nhược điểm 37
3.3 Hướng phát triển thiết bị trong tương lai 37
Trang 5để tăng cường sản xuất và nâng cao chất lượng nông sản.
Ở Việt Nam, nông nghiệp chủ yếu vẫn phụ thuộc 90% vào thời tiết, khí hậu tức là vẫn thụ động trước những biến cố mà thiên nhiên gây ra cho cây trồng của mình Nhậnthức được vấn đề đó, chúng em đã lựa chọn đề tài “Nghiên cứu, tích hợp hệ thống mạng cảm biến trong nông nghiệp” với hi vọng sẽ có thể sẽ phát triển một hệ thống nông nghiệp thông minh công nghệ cao
Trang 6PHẦN 1: CƠ SỞ LÝ THUYẾT LIÊN QUAN1.1 Vi điều khiển ATMEGA16
1.1.1 Kiến trúc vi điều khiển
AVR là họ vi điều khiển 8 bit theo công nghệ mới, với những tính năng rấtmạnh được tích hợp trong chip của hãng Atmel theo công nghệ RISC, nó mạnhngang hàng với các họ vi điều khiển 8 bit khác như PIC, Pisoc Do ra đời muộn hơnnên họ vi điều khiển AVR có nhiều tính năng mới đáp ứng tối đa nhu cầu của người
sử dụng, so với họ 8051 89xx sẽ có độ ổn định, khả năng tích hợp, sự mềm dẻotrong việc lập trình và rất tiện lợi
*Tính năng mới của họ AVR
- Giao diện SPI đồng bộ
- các đường dẫn vào ra (I/O) lập trình được
- Giao tiếp I2C
- Bộ biến đổi ADC10 bit
- Các kênh băm xung PWM
- Các chế độ tiết kiệm năng lương như sleep…
- Một bộ định thời Watchdog
- 3 bộ timer/Counter 16 bit
- 1 bộ so sánh analog
- Bộ nhớ EEPROM
- Giao tiếp USART/VV
1.1.2 Giới thiệu vi điều khiển Atmega 16
Atmelga16 có đầy đủ tính năng của họ AVR, về giá thành so với các loại khácthì giá thành là vừa phải khi nghiên cứu và làm các công việc ứng dụng tới vi điềukhiển Tính năng:
- Bộ nhớ 16 K (flash) – 512 byte (EEPROM) – 1 K (SRAM)
- Đóng vỏ 40 chân , trong đó có 32 chân vào ra dữ liệu chia làm 4 PORT A,B,C,D.Các chân này đều có chế độ pull_up resistors
- Giao tiếp SPI – Giao tiếp I2C – Có 8 kênh ADC 10 bit
- 1 bộ so sánh analog – 4 kênh PWM
Trang 7- 2 bộ timer/ counter 8 bit.1 bộ timer/counter1 16 bit
- 1 bộ định thời WatchDog
- 1 bộ truyền nhận UART lập trình được
Mô tả các chân
- VCC và GND 2 chân cấp nguồn cho vi điều khiển hoạt động
- Reset đây là chân reset cứng khởi động lại mọi hoạt động của hệ thống
- 2 chân XTAL1,XTAL2 các chân tạo bộ dao động ngoài cho vi điều khiển, cácchân này được nối với thạch anh (haysuwr dụng lạo 16 M ), tụ gốm (22p)
- Chân Vret thường nối lên 5V(VCC), nhưng khi sử dụng bộ ADC thì chân nàyđược sử dụng làm điện thế so sánh, khi chân này phải cấp cho nó điện áp cố địnhPhần mềm lập trình Atmelstudio
1.2 Cơ sở dữ liệu Firebase
Cụ thể là những giao diện lập trình ứng dụng API đơn giản Mục đích nhằmtăng số lượng người dùng và thu lại nhiều lợi nhuận hơn
Đặc biệt, còn là dịch vụ đa năng và bảo mật cực tốt Firebase hỗ trợ cả hai nềntảng Android và IOS Không có gì khó hiểu khi nhiều lập trình viên chọn Firebaselàm nền tảng đầu tiên để xây dựng ứng dụng cho hàng triệu người dùng trên toànthế giới
- Firebase Realtime Database:
Khi đăng ký một tài khoản trên Firebase để tạo ứng dụng, bạn đã có một cơ sở
dữ liệu thời gian thực Dữ liệu bạn nhận được dưới dạng JSON Đồng thời nó cũngluôn được đồng bộ thời gian thực đến mọi kết nối client
Đối với các ứng dụng đa nền tảng, tất cả các client đều sử dụng cùng một cơ sở
dữ liệu Nó được tự động cập nhật dữ liệu mới nhất bất cứ khi nào các lập trình viên
Trang 8phát triển ứng dụng Cuối cùng, tất cả các dữ liệu này được truyền qua kết nối antoàn SSL có bảo mật với chứng nhận 2048 bit.
Trong trường hợp bị mất mạng, dữ liệu được lưu lại ở local, vì thế khi có mọi
sự thay đổi nào đều được tự động cập nhật lên Server của Firebase Bên cạnh đó,đối với các dữ liệu ở local cũ hơn với Server thì cũng tự động cập nhật để được dữliệu mới nhất
Hình 1:Reatime Database
- Ưu điểm khi dùng Firebase là gì?
Từ các cách thức hoạt động phía trên, chắc hẳn bạn đã nhận thấy sơ lược những lợiích mà Firebase mang lại cho cộng đồng lập trình nói chung và các lập trình viênxây dựng ứng dụng nói riêng
Cụ thể hơn, các lợi ích này bao gồm:
Triển khai ứng dụng nhanh chóng
Bảo mật
Sự ổn định
- Nhược điểm của Firebase là gì?
“Firebase” chính là phần Realtime Database, đúng hơn chỉ là phần Database
Cơ sở dữ liệu của họ được tổ chức theo kiểu trees, parent-children, không phải làkiểu Table nên những ai đang quen với SQL có thể sẽ gặp khó khăn từ mức đôi chúttới khá nhiều
Trang 91.3 Lập trình giao diện với ngôn ngữ C #
- C# là ngôn lập trình hướng đối tượng được phát triển bởi Microsoft,Microsoftphát triển C# dựa trên C++ và java C# được miêu tả là ngôn ngữ có sự cân bằnggiữa C++.Visual Basic Delphi và java
- C# được thiết kế chủ yếu bởi Anders kiến trúc sư phần mềm nổi tiếng với cácsản phẩm Turbo Pascal, Delphi,J++.WFC
- C# theo một hướng nào đó là ngôn ngữ lập trình phản ánh trực tiếp nhất đếnNET Framework mà tất cả chương trình.NET chạy và nó phụ thuộc mạnh mẽ vàoFramwork này.Mọi dữ liệu cơ sở đều là đối tượng được cấp phát và hủy bỏ bời trìnhdọn rác và nhiều kiểu trừu tượng khác nhau như calss… phản ánh rõ rang những đặctrung của.Net runtime
- So sánh với C và C++ Ngôn ngữ C# bị giới hạn và được nâng cao ở một vàiđặc điểm nào đó , nhưng không bao giờ gồm các giới hạn sau
Các con trỏe chỉ có thể được sử dụng trong các chế độ không an toàn Hầu hếtcác đối tượng được tham chiếu an toàn và các phép tính đề được kiểm tratràn bộ đệm.Các con trỏe được gọi bằng cách tham chiếu
Các đối tượng không thể được giải phóng tường minh
Chỉ có đơn khế thừa, nhưng có thể cài đặt nhiều interface trừu tượng Chứcnăng này làm đơn giản hóa sự thực thi của thời gian thực thi
Trang 10PHẦN 2: NỘI DUNG THỰC HIỆN2.1 Thành phần hệ thống
2.1.1 Vi điều khiển Atmega16
gỡ lỗi Thiết bị hỗ trợ thông lượng của 16 MIPS ở 16 MHz và hoạt động giữa 5,5 volt
4,5-Vi điều khiển ATMEGA16 thực hiện hướng dẫn trong một chu kỳ đồng hồ duynhất, các thiết bị đạt được thông lượng gần 1 MIPS mỗi MHz, cân bằng điện năngtiêu thụ và tốc độ xử lý
Trang 11Hình 2: Sơ đồ chân Atmega16
2.1.2 Node MCU8266
- Giới thiệu Node Mcu8266
ESP8266 là một mạch vi điều khiển có thể giúp chúng ta điều khiển các thiết bị điện
tử Thêm vào đó nó được tích hợp wi-fi 2.4GHz có thể dùng cho lập trình
Hình 3: ESP8266 NODE MCU
Trang 12- Thông số kỹ thuật
WiFi: 2.4 GHz hỗ trợ chuẩn 802.11 b/g/n
Điện áp hoạt động: 3.3V
Điện áp vào: 5V thông qua cổng USB
Số chân I/O: 11 (tất cả các chân I/O đều có Interrupt/PWM/I2C/One-wire, trừchân D0)
Số chân Analog Input: 1 (điện áp vào tối đa 3.3V)
Bộ nhớ Flash: 4MB
Giao tiếp: Cable Micro USB ( tương đương cáp sạc điện thoại )
Hỗ trợ bảo mật: WPA/WPA2
Tích hợp giao thức TCP/IP
Lập trình trên các ngôn ngữ: C/C++, Micropython,…
2.1.3 Cảm biến độ ẩm đất và bộ chuyển đổi
- Cảm biến độ ẩm đất: Hai đầu đo của cảm biến được cắm vào đất để phát hiện độ
ẩm Dùng dây nối giữa cảm biến và module chuyển đổi Thông tin về độ ẩm đất sẽđược đọc về và gởi tới module chuyển đổi
Trang 13Hình 4: Cảm biến độ ẩm đất
- Bộ chuyển đổi: Module chuyển đổi có cấu tạo chính gồm một IC so sánhLM393, một biến trở , 4 điện trở dán 100 ohm và 2 tụ dán Biến trở có chức năng địnhngưỡng so sánh với tín hiệu độ ẩm đất đọc về từ cảm biến Ngưỡng so sánh và tín hiệucảm biến sẽ là 2 đầu vào của IC so sánh LM393 Khi độ ẩm thấp hơn ngưỡng địnhtrước, ngõ ra của IC là mức cao (1), ngược lại là mức thấp (0)
Hình 4: Cảm biến độ ẩm đất
- Đặc điểm:
- Điện áp hoạt động: 3.3V-5V
- Kích thước PCB: 3cm * 1.6cm
- Led báo hiệu
Led đỏ báo nguồn
Led xanh báo mức độ ẩm ở pin DO
Mô tả các pin trên module:
Trang 14Pin Mô tả
AO Đầu ra tín hiệu tương tự
- Ứng dụng: Cảm biến độ ẩm đất có thể được sử dụng cho các ứng dụng nông nghiêp, tưới nước tự động cho các vườn cây khi đất khô, hoặc dùng trong các ứng dụng của hệ thống nhà thông minh
2.1.4 Cảm biến nhiệt độ, độ ẩm DHT11
DHT11 Là cảm biến rất thông dụng hiện nay vì chi phí rẻ và rất dễ lấy dữ liệuthông qua giao tiếp 1-wire (giao tiếp digital 1-wire truyền dữ liệu duy nhất) Cảm biếnđược tích hợp bộ tiền xử lý tín hiệu giúp dữ liệu nhận về được chính xác mà không cầnphải qua bất kỳ tính toán nào
Hình 5: Cảm biến nhiệt độ DHT11
Thông số kỹ thuật
- Điện áp hoạt động: 3V - 5V (DC)
- Dãi độ ẩm hoạt động: 20% - 90% RH, sai số ±5%RH
- Dãi nhiệt độ hoạt động: 0°C ~ 50°C, sai số ±2°C
- Khoảng cách truyển tối đa: 20m
Nguyên lý hoạt động: Để có thể giao tiếp với DHT11 theo chuẩn 1 chân vi xử lýthực hiện theo 2 bước:
- Gửi tin hiệu muốn đo (Start) tới DHT11, sau đó DHT11 xác nhận lại
Trang 15- 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.
2.2 Thiết kế mạch hệ thống
Trong đề tài lần này chúng em sử dụng phần mềm Altium để thiết kế mạch vàtạo file PCB phục vụ cho việc in mạch theo các khối như sau:
Trang 162.2.1 Khối vi điều khiển
Hình 6: Khối vi điều khiển 2.2.2 Khối nguồn
Hình 7: Khối nguồn
Trang 18Altium ngày nay đang là một trong những phần mềm vẽ mạch điện tử mạnh và được ưa chuộng ở Việt Nam.Ngoài việc hỗ trợ tốt cho hoạt động vẽ mạch,Altium còn
hỗ trợ tốt trong việc quản lý mạch,trích xuất file thống kê linh kiện
Altium Designer cung cấp một ứng dụng kết hợp tất cả công nghệ và chức năngcần thiết cho việc phát triển sản phẩm điện tử hoàn chỉnh, như thiết kế hệ thống ở mức
bo mạch và FPGA, phát triển phần mềm nhúng cho FPGA và các bộ xử lý rời rạc, bố trí mạch in (PCB)… Altium Designer thống nhất toàn bộ các quá trình lại và cho phép bạn quản lý được mọi mặt quá trình phát triển hệ thống trong môi trường tích hợp duy nhất Khả năng đó kết hợp với khả năng quản lý dữ liệu thiết kế hiện đại cho phép người sử dụng Altium Designer tạo ra nhiều hơn những sản phẩm điện tử thông minh, với chi phí sản phẩm thấp hơn và thời gian phát triển ngắn hơn
- Mô phỏng mạch 3D:
Trang 19Hình 10: Hình ảnh 3D của mạch điều khiển
Trang 20- Mạch thực tế:
Hình 11: Hình ảnh thực tế của mạch đk
2.3 Chương trình nạp cho Vi điều khiển
#define F_CPU 16000000UL
Trang 21void UART_init( long USART_BAUDRATE )
UCSRB |= (1 << RXEN ) | (1 << TXEN ) | (1<< RXCIE );/* Turn on transmission and reception */
UCSRC |= (1 << URSEL ) | (1 << UCSZ0 ) | (1 << UCSZ1 );/* Use 8-bit
unsigned char UART_RX()
while (!( UCSRA &(1<< RXC )));
return UDR ;
void UART_TxChar( char ch )
while (! UCSRA (1<< UDRE ))); /* Wait for empty transmit buffer*/
void Request() /* Microcontroller send start
pulse/request */
DDRD |= (1<< DHT11_PIN );
PORTD &= ~(1<< DHT11_PIN ); /* set to low pin */
_delay_ms(30); /* wait for 20ms */
Trang 22PORTD |= (1<< DHT11_PIN ); /* set to high pin */
if ( PIND (1<< DHT11_PIN ))/* if high pulse is greater than 30ms */
c <<1)|(0x01); /* then its logic HIGH */
else /* otherwise its logic LOW */
c <<1);
while ( PIND (1<< DHT11_PIN ));
////////////////////////////////////////////////////////////////////////////// ////////////////////////
void ADC_Init()
//DDRA = (1<<PA0); /* Make ADC port as input */
ADCSRA 0x87; /* Enable ADC, fr/128 */
Trang 23int ADC_Read()
ADMUX 0x40; /* Vref: Avcc, ADC channel: 0 */
ADCSRA |= (1<< ADSC ); /* start conversion */
while (( ADCSRA &(1<< ADIF ))==0); /* monitor end of conversion interrupt flag */
ADCSRA |=(1<< ADIF ); /* set the ADIF bit of ADCSRA register */
void controlsw()
if (( PIND &(1<< PIND3 ))==0)
while (( PIND &(1<< PIND3 ))==0);
PORTA ^=(1<< PA5 );
if (( PIND &(1<< PIND4 ))==0)
while (( PIND &(1<< PIND4 ))==0);
PORTA ^=(1<< PA6 );
if (( PIND &(1<< PIND5 ))==0)
while (( PIND &(1<< PIND5 ))==0);
PORTA ^=(1<< PA7 );
if (( PIND &(1<< PIND6 ))==0)
while (( PIND &(1<< PIND6 ))==0);
Trang 24D_RH =Receive_data(); /* store next eight bit in D_RH */
I_Temp =Receive_data(); /* store next eight bit in I_Temp */
D_Temp =Receive_data(); /* store next eight bit in D_Temp */
CheckSum =Receive_data();/* store next eight bit in CheckSum */
int main( void )
Trang 25moisture adc_value *5*100.00)/1023.00; /* Calculate moisture in
Trang 27PORTA |=(1<< PA6 );
break ; case '3':
_delay_ms(50);
PORTA &=~(1<< PA7 );
break ; case '4':
_delay_ms(50);
PORTA |=(1<< PA7 );
break ; case '5':
_delay_ms(50);
PORTD &=~(1<< PD7 );
break ; case '6':
Trang 28TCNT0 130;
dem ++;
dem1 ++;
2.4 Giao diện giám sát và điều khiển trên máy tính:
Hình 14: giao diện máy tính 0- 1
Code giao diện:
Trang 31private async void timer2_Tick( object sender, EventArgs e)
-
this chart1.Series["doammt"].Points.AddXY(DateTime.Now.Minute, obj1.NhietDo);
-
this chart1.Series["doamdat"].Points.AddXY(DateTime.Now.Minute, obj1.DoAmDat);
#define FIREBASE_HOST "loc2020.firebaseio.com"
#define FIREBASE_AUTH "niZWnZkq4bynzwlKi4hpbLGZQEMiR436quRNEUuu"
#define WIFI_SSID "ngangao"
#define WIFI_PASSWORD "meoconconmeo"
char giatrinhietdo1[5];
char giatridoamkk1[5];
Trang 32// put your setup code here, to run once:
Serial.begin(9600); //khởi tạo serial uart
// WiFiManager wifiManager;
// wifiManager.autoConnect("Wireless Sensor Network");
Trang 34kiemtra2 = sscanf(data1, "N2,%d,%d,%d,%d#", &nhietdo2, &doamkhongkhi2,
&doamdat2,&xyz); //Nếu đủ cả 3 thông số thì biến kiemtra1 sẽ được set lên 3, tương tự các biến còn lại
kiemtra1 = sscanf(data1, "N1,%d,%d,%d,%d#", &nhietdo1, &doamkhongkhi1,
&doamdat1,&abc); //đọc dữ liệu từ mảng đã chuyển là "N1,<nhiệt độ tại node 1>,<độ ẩm không khí tại node 1>,<độ ẩm đất>"
if (kiemtra1 == 4) //nếu kiemtra1 = 3 tức là nhận hết các thông số thì thực hiện các câu lệnh bên dưới
Firebase.setString("firebase/Node1/tt1", tt1);
memset( data1, 0, sizeof(data1)); //xóa chuỗi data1
// ESP.restart();
}