2 3.1 ĐIỀU KHIỂN, GIÁM SÁT MÔ HÌNH NHÀ YẾN BẰNG ĐIỆN THOẠI
5.4.3 Giao diện mô hình hệ thống thông qua Website
Bên cạnh việc điều khiển các thiết bị trong mô hình nhà yến bằng điện thoại thì nhóm thực hiện còn thiết kế 1 website dung để điều khiển thiết bị. Kết quả thu được thể hiện như hình dưới đây.
Chương 5. KẾT QUẢ, NHẬN XÉT VÀ ĐÁNH GIÁ
Hình 5.10 Giao diện trang điều khiển.
Kết quả điều khiển từ website tới các thiết bị ngoại vi cũng như cập nhật thông tin về các thông số trong nhà yến được thực hiện nhanh chóng. Vì vậy website đáp ứng hoàn toàn để điều khiển các thiết bị trong mô hình nhà yến.
5.4.5 Cơ sỡ dữ liệu
Cơ sở dữ liệu id14475443_ductrong
Cấu trúc bảng cho bảng dataphp
Cột Kiểu Null Mặc định
STT int(11) Không
nhietdo varchar(100) Có NULL doam varchar(100) Có NULL lux varchar(100) Có NULL loa varchar(100) Có NULL quat varchar(100) Có NULL suoi varchar(100) Có NULL phunsuong varchar(100) Có NULL servo varchar(100) Có NULL
Chương 5. KẾT QUẢ, NHẬN XÉT VÀ ĐÁNH GIÁ
Đang đổ dữ liệu cho bảng dataphp
STT nhietdo doam lux loa quat suoi phunsuong servo 1502 33 87 3 OFF OFF OFF OFF ON 1503 33 87 3 OFF OFF OFF OFF ON 1504 33 87 3 OFF OFF OFF OFF ON 1505 33 87 3 OFF OFF OFF OFF ON 1506 33 86 3 OFF OFF OFF OFF ON 1507 34 87 3 OFF OFF OFF OFF ON 1508 33 86 3 OFF OFF OFF OFF ON 1509 33 86 3 OFF OFF OFF OFF ON 1510 33 86 0 OFF OFF OFF OFF ON 1511 33 86 0 OFF OFF OFF OFF ON 1512 33 86 3 OFF OFF OFF OFF ON 1513 34 85 3 OFF OFF OFF OFF ON 1514 33 86 3 OFF OFF OFF OFF ON 1515 34 85 3 OFF OFF OFF OFF ON 1516 33 85 3 OFF OFF OFF OFF ON 1517 33 86 3 OFF OFF OFF OFF ON 1518 33 85 3 OFF OFF OFF OFF ON 1519 33 86 3 OFF OFF OFF OFF ON 1520 33 85 3 OFF OFF OFF OFF ON 1521 33 86 3 OFF OFF OFF OFF ON 1522 33 86 3 OFF OFF OFF OFF ON
Chương 5. KẾT QUẢ, NHẬN XÉT VÀ ĐÁNH GIÁ 5.4.5 Mô hình hoàn thiện
Kết quả mô hình hoàn thiện được thể hiện như hình bên dưới.
Hình 5.11 Mô hình hoàn thiện mặt trên.
Chương 5. KẾT QUẢ, NHẬN XÉT VÀ ĐÁNH GIÁ 5.5ƯU ĐIỂM, NHƯỢC ĐIỂM
5.5.1Ưu điểm
Từ kết quả đạt được, nhóm thực hiện rút ra được những ưu điểm như sau:
- Phần cứng đáp ứng tốt khi chạy các chế độ bằng tay và tự động. Thời gian đáp ứng rất nhanh, hệ thống chạy ổn định trong thời gian dài.
- Khối hiển thị rõ ràng, cập nhật liên tục các thông số thực tế về nhiệt độ, độ ẩm và ánh sáng chính xác nhất.
- Các khối cảm biến, khối xử lí trung tâm, khối thời gian thực hoạt động ổn định và đo được các thông số chính xác nhất.
- Kết nối giữa phần cứng với điện thoại và website đáp ứng rất nhanh, thời gian đáp ứng trong khoảng thời gian từ 1 – 2 giây.
- Có thể điều khiển thiết bị trong nhà nuôi chim yến bằng Google Assistant. Bên cạnh đó có thể điều khiển và nắm bắt thông số trong ngôi nhà yến mọi lúc mọi nơi khi kết nối internet.
- Trang web trình bày rõ ràng, dễ dàng điều khiển cho người sử dụng.
5.5.2.Nhược điểm
Bên cạnh những ưu điểm thì vẫn còn tồn tại những nhược điểm, bao gồm: - Tên Wifi và mật khẩu để kết nối là cố định trong code Arduino và chỉ có thể
thay đổi khi nạp lại chương trình vào Arduino Mega 2560. - Động cơ sử dụng công suất lớn nên phát ra tiếng ồn.
- Mạch hoạt động ổn nhưng đôi lúc xảy ra lỗi kết nối dữ liệu từ mô hình lên web và server Blynk do yếu tố mạng dữ liệu không ổn định.
Chương 6. KẾT LUẬN, HƯỚNG PHÁT TRIỂN
Chương 6. KẾT LUẬN, HƯỚNG PHÁT TRIỂN
6.1KẾT LUẬN
Sau thời gian thực hiện đề tài “Thiết kế và thi công hệ thống quản lý nhà yến sử dụng công nghệ IoT”, nhóm thực hiện đã học hỏi được nhiều kiến thức mới và trau dồi nhiều kinh nghiệm. Bên cạnh đó còn được thực hành, nghiên cứu thiết kế ra mạch điều khiển, thiết kế website để áp dụng vào thực tế giúp ích rất nhiều cho người nuôi chim yến.
Kết quả đạt được của nhóm đúng với mục tiêu đề ra ban đầu. Nhóm đã thiết kế thành công hệ thống quản lý nhà yến có các chức năng như đo nhiệt độ, độ ẩm, cường độ ánh sang. Thiết bị có 2 chế độ điều khiển bao gồm chế độ điều khiển tự động và chế độ điều khiển bằng tay. Với chế độ tự động thì thiết bị có thể tự điều chỉnh các thông số đáp ứng điều kiện sống lí tưởng của chim. Bên cạnh đó người dùng có thể tự mình điều khiển tùy chỉnh các thông số bằng tay. Dữ liệu và các thông số về nhiệt độ, độ ẩm sẽ được gửi lên website và qua ứng dụng điện thoại để người dùng dễ dàng nắm bắt.
Đánh giá hệ thống hoạt động ổn định, không bị treo. Bên cạnh đó có màn hình hiển thị trực quan giúp cho việc sử dụng và theo dõi trong quá trình hoạt động được thuận tiện. Website giao diện thân thiện đơn giản dễ sử dụng. Các thông số về thời gian, nhiệt độ, độ ẩm, ánh sáng luôn được cập nhật nhanh và chính xác nhất. Có thể điều khiển thiết bị ở bất cứ đâu bằng điện thoại hoặc laptop chỉ cần thiết bị này có kết nối internet.
Qua quá trình thực hiện nhóm cũng đã được tìm hiểu sâu hơn về mảng thiết kế website như viết trang điều khiển, giao diện website và cơ sở dữ liệu. Tìm hiểu các ngôn ngữ thiết kế website như HTML, PHP, SQL, CSS.
6.2HƯỚNG PHÁT TRIỂN
Từ đề tài đã hoàn thành, có thể phát triển và mở rộng khả năng hoạt động của mô hình như sau:
- Thêm cảm biến nhận diện số lượng chim bay vào ra trong khoảng thời gian gọi đàn. Qua đó xác định chính xác tổng số chim trong nhà yến.
- Sử dụng kết hợp với camera giám sát và gửi dữ liệu lên website giúp người dùng xem được từ xa.
- Kết hợp thêm các cảm biến hồng ngoại để nhận diện và cảnh báo các yếu tố tác động đến mô hình nhà yến.
TÀI LIỆU THAM KHẢO
Tài liệu online
[1] Lê Cúc, “Thực trạng và tiềm năng nghề nuôi yến”, tên Web Báo Quân đội Nhân Dân online, 2019.
[2] “Kĩ thuật nuôi chim yến sử dụng công nghệ mới Malaysia”, tên Web vuayen.vn, 2016.
[3] “Nuôi yến trong nhà: 9 yếu tố giúp bạn thành công”, tên Web Farmvina.com, 2015.
[4] Thạc sỹ Lê Hữu Hoàng, “Một số đặc điểm sinh học của chim yến nhà tại Khánh Hòa”, tên Web Nongnghiep.vn, 2013.
[5] “Arduino Mega 2560”, tên Web Arduinokit.vn.
[6] Trung Ngo, “Đồng bộ giữa điều khiển bằng tay và từ xa sử dụng ứng dụng Blynk”, tên Web Tapit.vn, 2018.
[7] “Điều khiển thiết bị bằng giọng nói thông qua Google Assistant Tiếng Viết sử dụng ESP8266, Blynk và IFTTT”, tên Web Arduinokit.vn, 2019.
[8] “Phần mềm vẽ mạch trực quan Fritzing”, tên Web Chosangtao.com, 2020. [9] Phạm Như Sang, Huỳnh Lê Công Tú, “Thiết kế và thi công mô hình nhà nuôi
chim yến điều khiển và giám sát từ xa, tên Web slideshare.net.
Sách tham khảo
[10] Nguyễn Đình Phú, “Giáo trình vi xử lý II”, NXB ĐH Quốc Gia Tp.HCM, 2007.
[11] Nguyễn Đình Phú, Nguyễn Trường Duy, “Giáo Trình: Kỹ Thuật Số, Xuất bản ĐH Quốc Gia”, Tp.HCM, 2013.
[12] TS. Phan Văn Ca – Ths. Trương Quang Phúc, “Giáo trình Cơ sở ứng dụng Internet Of Things”, Đại Học Quốc Gia TP. Hồ Chí Minh, Tp.HCM, 2017.
PHỤ LỤC
Chương trình cho nút nhấn bằng tay
if (digitalRead(btn_quat) == LOW) { lastMsg = millis(); while (1) { lastMsg = millis(); if (digitalRead(btn_quat) == HIGH) { bien_quat++; if (bien_quat % 2 == 1) { Serial.println(">>Btn ON quat"); digitalWrite(rl_quat, LOW); trangthai_quat = 1; lastMsg = millis(); break; } else {
Serial.println(">>Btn OFF quat"); digitalWrite(rl_quat, HIGH); trangthai_quat = 0; lastMsg = millis(); break; } } }
BLYNK_WRITE(V2) { int btn2 = param.asInt(); if (chedo == 1) { if (btn2 == 1) { mySerial.println("V2A1B"); Serial.println("V2A1B"); } if (btn2 == 0) { mySerial.println("V2A0B"); Serial.println("V2A0B"); } } } void Sosanh() {
if (nhietdo >= 31 && nhietdo <= 34 && doam >= 70 && doam <= 85) {
//OFF quạt , suoi , phunsuong digitalWrite(rl_quat, HIGH); digitalWrite(rl_suoi, HIGH); digitalWrite(rl_phunsuong, HIGH); trangthai_quat = 0; trangthai_suoi = 0; trangthai_phunsuong = 0; } else
Chương trình cho nút nhấn blynk
Chương trình so sánh bật tắt thiết bị
{
// kiểm tra giờ để ON OFF loa
if ( (gio >= 5 && gio <= 6) || (gio >= 17 && gio <= 19)) { // ON Loa digitalWrite(rl_loa, LOW); trangthai_loa = 1; } else { // OFF Loa digitalWrite(rl_loa, HIGH); trangthai_loa = 0; }
if (nhietdo < 31 && doam < 70) {
//OFF quạt , ON suoi ,ON phunsuong digitalWrite(rl_quat, HIGH); digitalWrite(rl_suoi, LOW); digitalWrite(rl_phunsuong, LOW); trangthai_quat = 0; trangthai_suoi = 1; trangthai_phunsuong = 1; }
if (nhietdo < 31 && doam >= 70 && doam <= 85) {
//OFF quạt , ON suoi ,OFF phunsuong digitalWrite(rl_quat, HIGH);
digitalWrite(rl_suoi, LOW);
digitalWrite(rl_phunsuong, HIGH); trangthai_quat = 0;
trangthai_phunsuong = 0; }
if (nhietdo < 31 && doam > 85 ) {
//ON quạt ,ON suoi ,OFF phunsuong digitalWrite(rl_quat, LOW); digitalWrite(rl_suoi, LOW); digitalWrite(rl_phunsuong, HIGH); trangthai_quat = 1; trangthai_suoi = 1; trangthai_phunsuong = 0; }
if (nhietdo >= 31 && nhietdo <= 34 && doam < 70 ) {
//OFF quạt ,OFF suoi ,ON phunsuong digitalWrite(rl_quat, HIGH); digitalWrite(rl_suoi, HIGH); digitalWrite(rl_phunsuong, LOW); trangthai_quat = 0; trangthai_suoi = 0; trangthai_phunsuong = 1; }
if (nhietdo >= 31 && nhietdo <= 34 && doam > 85 ) {
//ON quạt ,ON suoi ,OFF phunsuong digitalWrite(rl_quat, LOW); digitalWrite(rl_suoi, LOW); digitalWrite(rl_phunsuong, HIGH); trangthai_quat = 1; trangthai_suoi = 1; trangthai_phunsuong = 0;
if (nhietdo > 34 && doam < 70 ) {
//ON quạt ,OFF suoi ,ON phunsuong digitalWrite(rl_quat, LOW); digitalWrite(rl_suoi, HIGH); digitalWrite(rl_phunsuong, LOW); trangthai_quat = 1; trangthai_suoi = 0; trangthai_phunsuong = 1; }
if (nhietdo > 34 && doam >= 70 && doam <= 85) {
//ON quạt ,OFF suoi ,OFF phunsuong digitalWrite(rl_quat, LOW); digitalWrite(rl_suoi, HIGH); digitalWrite(rl_phunsuong, HIGH); trangthai_quat = 1; trangthai_suoi = 0; trangthai_phunsuong = 0; }
if (nhietdo > 34 && doam > 85) {
//ON quạt , OFF suoi ,OFF phunsuong digitalWrite(rl_quat, LOW); digitalWrite(rl_suoi, HIGH); digitalWrite(rl_phunsuong, HIGH); trangthai_quat = 1; trangthai_suoi = 0; trangthai_phunsuong = 0; }
void SendEsp() {
bien++; biensend = 1; DataSendEsp = "";
DataSendEsp = A + chedo + B + nhietdo + C + doam + D + dolux + E + trangthai_loa + F + trangthai_quat
+ G + trangthai_suoi + H + trangthai_phunsuong + J + trangthai_servo + K + mucservo + L;
// A[chedo]B[nhiệt độ]C[độ ẩm]D[độ lux]E[trạng thái loa]F[trạng thái quạt] //G[trạng thái sưởi]H[trạng thái phun sương]J[trạng thái servo]K[mức servo]L Serial.print(bien); Serial.print(".DataSendEsp = "); Serial.println(DataSendEsp); Serial1.println(DataSendEsp); Serial1.flush(); delay(100); Serial2.println(DataSendEsp); Serial2.flush(); delay(100); biensend = 0; } void Read_Uart() { while (mySerial.available()) {
char inChar = (char)mySerial.read(); inputString += inChar;
if (inChar == '\n') {
Chương trình truyền dữ liệu ESP8266
Chương trình truyền nhận UART ESP8266 với blynk
stringComplete = true; } if (stringComplete) { -1; bien++; Serial.print(bien); Serial.print(".Data Mega = "); Serial.println(inputString);
// A[chedo]B[nhiệt độ]C[độ ẩm]D[độ lux]E[trạng thái loa]F[trạng thái quạt] //G[trạng thái sưởi]H[trạng thái phun sương]J[trạng thái servo]K[mức servo]L
int TimA, TimB, TimC, TimD, TimE , TimF , TimG , TimH , TimJ , TimK , TimL =
TimA = inputString.indexOf("A"); TimB = inputString.indexOf("B"); TimC = inputString.indexOf("C"); TimD = inputString.indexOf("D"); TimE = inputString.indexOf("E"); TimF = inputString.indexOf("F"); TimG = inputString.indexOf("G"); TimH = inputString.indexOf("H"); TimJ = inputString.indexOf("J"); TimK = inputString.indexOf("K"); TimL = inputString.indexOf("L");
if (TimA >= 0 && TimD >= 0 && TimH >= 0 && TimL >= 0 ) {
String ChuoiA, ChuoiB, ChuoiC, ChuoiD, ChuoiE , ChuoiF , ChuoiG , ChuoiH , ChuoiJ , ChuoiK = "";
ChuoiA = inputString.substring(TimA + 1 , TimB ); ChuoiB = inputString.substring(TimB + 1 , TimC ); ChuoiC = inputString.substring(TimC + 1 , TimD ); ChuoiD = inputString.substring(TimD + 1 , TimE ); ChuoiE = inputString.substring(TimE + 1 , TimF );
void Read_Uart() {
while (mySerial.available()) {
char inChar = (char)mySerial.read(); inputString += inChar;
if (inChar == '\n')
Chương trình truyền nhận UART với web
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 71
ChuoiF = inputString.substring(TimF + 1 , TimG ); ChuoiG = inputString.substring(TimG + 1 , TimH ); ChuoiH = inputString.substring(TimH + 1 , TimJ ); ChuoiJ = inputString.substring(TimJ + 1 , TimK ); ChuoiK = inputString.substring(TimK + 1 , TimL );
// A[chedo]B[nhiệt độ]C[độ ẩm]D[độ lux]E[trạng thái loa]F[trạng thái quạt] // G[trạng thái sưởi]H[trạng thái phun sương]J[trạng thái servo]K[mức servo]L chedo = ChuoiA.toInt(); // tin hieu V0 auto / man
Blynk.virtualWrite(V0, ChuoiA); // tin hieu V1 Loa Blynk.virtualWrite(V1, ChuoiE); // tin hieu V2 Quat Blynk.virtualWrite(V2, ChuoiF); // tin hieu V3 Sưởi
Blynk.virtualWrite(V3, ChuoiG); // tin hieu V4 Phun sương Blynk.virtualWrite(V4, ChuoiH); // tin hieu V5 Servo Blynk.virtualWrite(V5, ChuoiJ); // tin hieu V6 ánh sáng Blynk.virtualWrite(V6, ChuoiD); // tin hieu V7 nhiệt độ Blynk.virtualWrite(V7, ChuoiB); // tin hieu V8 độ ẩm Blynk.virtualWrite(V8, ChuoiC); // tin hieu servo Blynk.virtualWrite(V10, ChuoiK);// trang thai servo } inputString = ""; stringComplete = false; } } }
{ stringComplete = true; } if (stringComplete) { dem++; Serial.print(dem); Serial.print(".Data Mega = "); Serial.println(inputString);
int TimA , TimB , TimC , TimD , TimE , TimF, TimG , TimH , TimJ , TimK , TimL = -1; TimA = inputString.indexOf("A"); TimB = inputString.indexOf("B"); TimC = inputString.indexOf("C"); TimD = inputString.indexOf("D"); TimE = inputString.indexOf("E"); TimF = inputString.indexOf("F"); TimG = inputString.indexOf("G"); TimH = inputString.indexOf("H"); TimJ = inputString.indexOf("J"); TimK = inputString.indexOf("K"); TimL = inputString.indexOf("L");
if (TimA >= 0 && TimF >= 0 && TimL >= 0 ) {
// A[chedo]B[nhiệt độ]C[độ ẩm]D[độ lux]E[trạng thái loa]F[trạng thái quạt]
// G[trạng thái sưởi]H[trạng thái phun sương]J[trạng thái servo]K[mức servo]L String ChuoiA, ChuoiB, ChuoiC , ChuoiD, ChuoiE, ChuoiF, ChuoiG , ChuoiH , ChuoiJ , ChuoiK = "";
ChuoiA = inputString.substring(TimA + 1 , TimB); ChuoiB = inputString.substring(TimB + 1 , TimC); ChuoiC = inputString.substring(TimC + 1 , TimD); ChuoiD = inputString.substring(TimD + 1 , TimE);
ChuoiE = inputString.substring(TimE + 1 , TimF); ChuoiF = inputString.substring(TimF + 1 , TimG); ChuoiG = inputString.substring(TimG + 1 , TimH); ChuoiH = inputString.substring(TimH + 1 , TimJ); ChuoiJ = inputString.substring(TimJ + 1 , TimK); ChuoiK = inputString.substring(TimK + 1 , TimL);
// A[chedo]B[nhiệt độ]C[độ ẩm]D[độ lux]E[trạng thái loa]F[trạng thái quạt] // G[trạng thái sưởi]H[trạng thái phun sương]J[trạng thái servo]K[mức servo]L chedo = ChuoiA.toInt(); nhietdo = ChuoiB.toInt(); doam = ChuoiC.toInt(); dolux = ChuoiD.toInt(); trangthai_loa = ChuoiE.toInt(); trangthai_quat = ChuoiF.toInt(); trangthai_suoi = ChuoiG.toInt(); trangthai_phunsuong = ChuoiH.toInt(); trangthai_servo = ChuoiJ.toInt(); mucservo = ChuoiK.toInt();
ChuoiGhep = A + chedo + B + nhietdo + C + doam + D + dolux + E + trangthai_loa + F + trangthai_quat + G + trangthai_suoi + H + trangthai_phunsuong + J + trangthai_servo + K + mucservo + L;
for (byte len = 1; len <= ChuoiGhep.length() + 1; len++) { ChuoiGhep.toCharArray(ChuoiEspSendMQTT, len); delay(3); } client.publish("ESP1", ChuoiEspSendMQTT); } inputString = ""; stringComplete = false; }
Chương trình PHP lấy dữ liệu trạng thái các cảm biến và thiết bị <?php if( !isset($aResult['error']) ) { $Rx_nhietdo = $_POST['phpnhietdo']; $Rx_doam= $_POST['phpdoam']; $Rx_lux = $_POST['phplux']; $Rx_loa = $_POST['phploa']; $Rx_quat = $_POST['phpquat']; $Rx_suoi = $_POST['phpsuoi']; $Rx_phunsuong= $_POST['phpphunsuong']; $Rx_servo= $_POST['phpservo']; $dbServername = "localhost"; $dbUsername = "root"; $dbPassword = ""; $dbName = "dataductrong";
$conn = new mysqli ($dbServername , $dbUsername , $dbPassword , $dbName) ; if(mysqli_connect_error())
{
die('Connect error ('.mysqli_connect_errno().')'.mysqli_connect_error()); }
else {
// save data mysql
$sql = "insert into dataphp(nhietdo , doam , lux , loa , quat, suoi, phunsuong , servo) value ('$Rx_nhietdo','$Rx_doam','$Rx_lux', '$Rx_loa' , '$Rx_quat','$Rx_suoi','$Rx_phunsuong', '$Rx_servo' )";
if($conn->query($sql)) {
echo "New record is inserted sucessfully"; }
{
echo "Error: ".$sql ."<br>".$conn->error; }
$conn->close(); }