Hướng phát triển của đề tài

Một phần của tài liệu Nghiên cứu, xây dựng hệ thống tích hợp đa cảm biến hỗ trợ giám sát các thông số môi trường nước lợ tại trang trại nuôi tôm khu vựcTp. Hồ Chí Minh (Trang 72 - 87)

Chương 6 Kết luận

6.2. Hướng phát triển của đề tài

Với kết quả đã đạt được, nhóm nghiên cứu nhận thấy hệ thống cần thêm một số cải tiến về ứng dụng quả lý giám sát và cảnh bảo qua tin nhắn SMS, khi có thơng số ơ nhiểm vượt để bà con nuôi tôm kịp thời xử lý. Hệ thống cần thêm một số cải tiến trong thiết kế cơ khí để tăng độ cứng độ bề, và có thể sản xuất và gia công bán ra thị trường với giá cả rẻ bằng ½ giá trị ngoại nhập.

Trên cơ sở kết quả đã đạt được, đề tài có thể phát triển rộng ra trong lĩnh vực ni trồng thủy sản và nơng nghiệp cơng nghệ caọ Tồn bộ hệ thống trang trại được điều khiển và giám sát tự động hóa hồn tồn. Với mơ hình là một hệ thống điều khiển khép kín bao gồm các khâu từ giám sát online, xử lý tuần hồn mơi trường nước cho đến khâu cho ăn tự động thích nghi với từng giai đoạn tăng trưởng của tôm. Dữ liệu của toàn hệ thống được lưu trữ trên Cloud, hỗ trợ cho việc quản lý, điều khiển và truy xuất nguồn gốc thức ăn, tơm giống, qui trình ni cho đến các gia đoạn tăng trưởng của tôm. Đây là cơ sở để phát triển hiện đại hóa ngành ni trồng thủy sản, ứng dụng cơng nghệ cao I4.0 cho sản phẩm tôm Việt Nam để hướng tới đáp ứng các chỉ tiêu xuất khẩu ra thị trường thế giớị

58 -

TÀI LIỆU THAM KHẢO

[1]. Tổng cục Thủy sản - Bộ Nông Nghiệp Và Phát Triển Nông Thôn, “Dự án quan trắc môi trường phục vụ nuôi trồng thủy sản từ 2015 đến 2020”.

[2]. Bộ Nông nghiệp và Phát triển nông thôn - Viện Nghiên Cứu Nuôi Trồng Thủy Sản 1, “Đề án kiểm sốt ơ nhiễm mơi trường ni trồng thủy sản (Tôm, Cá Tra) Đến Năm 2020”, Bắc Ninh, 2013.

[3]. Nguyễn Đình Trung, “Quản lý chất lượng nước trong nuôi trồng thủy sản”, NXB Nông Nghiệp, 2004

[4]. Chanratchakool P., et al. “Health management in shrimp ponds”. (1995).

[5]. Whetstone, Jack M., et al. “Opportunities and constraints in marine shrimp farming”. SRAC, USDA, USA (2002).

[6]. Trương Quốc Phú, “Một số nguyên lý và kỹ thuật ứng dụng trong nuôi trồng thủy sản”, NXB Nông Nghiệp, 2012

[7]. Phạm Thị Tuyết Ngân, và Trương Quốc Phú. “Biến động các yếu tố môi trường trong ao nuôi tôm sú (Penaeus monodon) thâm canh tại Sóc Trăng”. Tạp chí Khoa học Đại học Cần Thơ 15a (2010): 179-188.

[8]. Claude Ẹ Boyd, (Trương Quốc Phú & Vũ Ngọc Út biên dịch), “Quản lý chất lượng nước trong ao nuôi thủy sản”, NXB ĐH Cần Thơ.

[9]. Https://emin.vn/thiet-bi-do-moi-truong-chat-long-thuc-pham-may-do-do-man- 225/pc.html [10]. Https://emin.vn/thiet-bi-do-moi-truong-chat-long-thuc-pham-may-do-do-duc- 195/pc.html [11]. Https://emin.vn/thiet-bi-do-moi-truong-chat-long-thuc-pham-may-do-do-ph- 197/pc.html [12]. Https://emin.vn/thiet-bi-do-moi-truong-chat-long-thuc-pham-may-do-oxy-hoa-tan- do-205/pc.html [13]. Https://cenintec.com/e-aqua [14]. Https://ad.teslateq.vn/

[15]. Satya Nandlal and Timothy Pickering, “Freshwater prawn Macrobrachium rosenbergii farming in Pacific Island countries”, Vol. 1, the University of the South Pacific, 2015.

[16]. Michael B. New, “Farming freshwater prawns, a manual for the culture of the giant river prawn (Macrobrachium rosenbergii)”, FAO Fisheries Technical Paper.

[17]. Mauricio Emerenciano et.al. “Biofloc Technology (BFT): A review for Aquaculture Application and Animal Food Industry”, Intech open sciencẹ

[18]. Https://www.atlas-scientific.com/product_pages/probes/industrial_ph_probẹhtml [19]. Https://www.atlas-scientific.com/product_pages/probes/do_probẹhtml

59 [20]. Https://www.atlas-scientific.com/product_pages/probes/ec_k0-1.html

[21]. Https://wikịdfrobot.com/Turbidity_sensor_SKU__SEN0189 [22]. Https://iotmaker.vn/cam-bien-nhiet-do-probe-ds18b20.html

60

PHỤ LỤC Phần mềm giám sát và quản trị cơ sở dữ liệu trung tâm của trang trại nuôi tôm

ứng dụng IoT

Ạ1. Chương trình trên Arduino UNO điều khiển cho cơ cấu chấp hành

/* This BTS1 program is designed by Bui Thu Cao, Industrial University of Ho Chi Minh city, 10/06/2019 */

/* Controlling program for BTS1- Actuators*/ #include <SoftwareSerial.h> #include <Servọh> #include <Wirẹh> #include <avr/sleep.h> #define interruptPin 2 SoftwareSerial BTSSerial(4,7); Servo myServo; #define INA 12 #define INB 13 #define ENA 5 String gprs_data = ""; String instSerial, instBTS, res; String const good = "OK"; String const wrong ="Error";

boolean input_serialBTS_complete, input_serial_complete, wakeupflag, RCservofirst, SaFlag;

unsigned long start, times; int angle;

void setup() {

// put your setup code here, to run once: BTSSerial.begin(9600);

Serial.begin(9600); // use for SIM com pinMode(interruptPin, INPUT_PULLUP); Wirẹbegin(); // Join i2c bus delay(1000);

61 Wirẹwrite(0x0F); // Send register ađress (alarm1 seconds)

Wirẹwrite(0); // Write 0 to alarm1 seconds

WirẹendTransmission(); // Stop transmission and release the I2C bus delay(500);

pinMode(10, OUTPUT);

digitalWrite(10, LOW); // Power on for BTS2 pinMode(11, OUTPUT); digitalWrite(11, LOW); pinMode(9, OUTPUT); digitalWrite(9, LOW); pinMode(8, OUTPUT); digitalWrite(8, LOW); delay(2000); instSerial = ""; instBTS = ""; input_serialBTS_complete = false; input_serial_complete = false; wakeupflag = true; SaFlag = false; angle = 0; RCservofirst = true; start = millis();

attachInterrupt(digitalPinToInterrupt(interruptPin), wakeUp, FALLING); delay(500); } void wakeUp(){ sleep_disable(); wakeupflag = true; } void loop() { if (wakeupflag) { // Clear alarm flag

WirẹbeginTransmission(0x68); // Start I2C protocol with DS3231 ađress Wirẹwrite(0x0F); // Send register ađress (alarm1 seconds)

62 Wirẹwrite(0); // Write 0 to alarm1 seconds

WirẹendTransmission(); // Stop transmission and release the I2C bus wakeupflag = false;

// Enable time for loop start = millis();

delay(5000);

digitalWrite(10, HIGH); // Power on for BTS2 delay(2000);

digitalWrite(11, HIGH); // Power RC Servo on delay(2000); myServọattach(3); //======= Setup actuation============ delay(20000); BTSSerial.print("AT R\r\n"); }

// Read instruction from BTS2 if (BTSSerial.available()){ char ch = BTSSerial.read(); instBTS += String(ch); if (ch=='\n') {

input_serialBTS_complete = true;

//BTSSerial.print(instBTS); Use for testing from BTS2 //Serial.print(instBTS); //Use for testing from BTS2 } } if (Serial.available()){ char ch = Serial.read(); instSerial += String(ch); if (ch=='\n') { input_serial_complete = true; //Serial.print(instSerial); } }

63 if (input_serial_complete){ //use for testing BTS1

// Processing instruction from Serial.port char cid = instSerial.charAt(3);

switch (cid) {

case 'B':

digitalWrite(11, HIGH); // Power RC Servo on myServọattach(3); controlRCservo(instSerial); myServọdetach(); break; case 'C': // Control DC motor

digitalWrite(10, HIGH); // Power on for BTS2 delay(4000);

BTSSerial.print("AT A,1,11\r\n"); //Power on for Salinity sensor readBTS(1000); //Clear recieved buffer

delay(1000);

DC_rolling(instSerial);

delay(1000);

digitalWrite(10, LOW); // Power on for BTS2 delay(1000);

break; case 'P':

digitalWrite(11, HIGH); // Power RC Servo on myServọattach(3);

delay(2000);

controlRCservo("AT B,120,03\r\n"); //Rotate to point test (2) //ok delay(1000);

myServọdetach(); delay(5000);

64 delay(4000);

BTSSerial.print("AT A,1,11\r\n"); //Power on for Salinity sensor readBTS(1000);

delay(3000);

DC_rolling("AT C,0,5000\r\n"); // Rolling down to test point (3) //ok delay(4000);

BTSSerial.print("AT R\r\n"); // Send read BTS2 (4) readBTS(25000); gprs_data = res; Serial.print(res); delay(2000); DC_rolling("AT C,1,8000\r\n"); //(5) //+1000 delay(1000);

digitalWrite(10, LOW); // Power on for BTS2

myServọattach(3); delay(2000);

controlRCservo("AT B,000,03\r\n"); //Go to point test (6) //ok myServọdetach();

delay(5000);

digitalWrite(10, HIGH); // Power on for BTS2 delay(2000);

BTSSerial.print("AT A,1,11\r\n"); //Power on for Salinity sensor readBTS(1000);

DC_rolling("AT C,0,3500\r\n"); // Rolling down to water can (7) delay(2000);

digitalWrite(10, LOW); // Power on for BTS2 delay(7000);

65 DC_rolling("AT C,1,7000\r\n"); // Rolling down to water can (8) //ok

delay(3000);

myServọattach(3); delay(2000);

controlRCservo("AT B,090,03\r\n"); //Go to point test (9) myServọdetach();

delay(5000);

digitalWrite(10, LOW); // Power on for BTS2 delay(1000);

break;

default:

res = "Wrong command"; break; } instSerial = ""; input_serial_complete = false; Serial.print(res); } if (input_serialBTS_complete){

// Processing instruction from BTSSerial.port char cid = instBTS.charAt(3);

switch (cid) { case 'R':

digitalWrite(8, HIGH); // Power SIM on delay(15000); gprs_data = instBTS.substring(5)+"\r\n"; SetupIP(); SetupHTTPS(); LoadD(gprs_data); HTTPS_post(2000); delay(15000);

66 digitalWrite(10, LOW); // Power off for BTS2

default:

res = "Wrong command"; break;

}

instBTS = "";

input_serialBTS_complete = false;

//BTSSerial.println(res); //Use for testing from BTS2 }

times = millis()-start;

if (times>=3600000) { // 1 hour measurement a time start = millis(); wakeupflag = true; } /* if (times>=50000) { //BTSSerial.print("AT D,R\r\n");

BTSSerial.println("Go to sleep mode!"); delay(1000); gotoSleep(); } */ } void gotoSleep() { sleep_enable(); set_sleep_mode(SLEEP_MODE_PWR_DOWN); delay(1000); sleep_mode(); }

67 {

unsigned long startTimes = millis(); // Start timer

// Send command to SIM

int L = cmd.length(); for (int i=0; i<=L; i++) { Serial.print(cmd.charAt(i)); }

// Receivec respond from SIM res = "";

while((millis()- startTimes)< timeout) { // Read until timeout if(Serial.available()) { // If there is data available

char ch = Serial.read(); // Read serial port and save the data in a local buffer res += String(ch); } } } void SetupIP(){

//Reference AT Commands for IP Application

sendC("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"\r\n", 500); //_BTS2Serial.println(res);

sendC("AT+SAPBR=3,1,\"APN\",\"m-wap\"\r\n", 1000); //_BTS2Serial.println(res);

// Open bearer, AT+SAPBR=1,1,\r\n"; //_BTS2Serial.println("AT+SAPBR=1,1.."); sendC("AT+SAPBR=1,1\r\n", 2000); //_BTS2Serial.println(res);

68 }

/*

String IPconnectionAdress(){

//Query bearer, AT+SAPBR=2,1\r\n";

String res = sendCmdAndWaitForResp("AT+SAPBR=2,1\r\n",2000); return res;

} */

// Function to set our Azure account parameters void SetupHTTPS(){ String sendstring; // Enable HTTP initation sendC("AT+HTTPINIT\r\n", 500); //_BTS2Serial.print(res+"1");

// Set bearer profile identifier

sendC("AT+HTTPPARA=\"CID\",1\r\n", 2000); //_BTS2Serial.print(res+"3");

delay(2000); // Set the URL

sendC("AT+HTTPPARA=\"URL\",\"https://IoThubCaọazure-

devices.net/devices/BTS1/messages/events?api-version=2018-06-30\"\r\n", 1000); //_BTS2Serial.print(res+"4");

// Set the Shared Access Signature

sendC("AT+HTTPPARA=\"USERDATA\",\"authorization: SharedAccessSignature sr=xxxxxxx, 2000);

//_BTS2Serial.print(res+"5");

// Set Content-Type field in the HTTP header

sendC("AT+HTTPPARA=\"CONTENT\",\"application/json\"\r\n", 500); //_BTS2Serial.print(res+"6");

}

69 String sendstring;

// Set Data length

sendstring = "AT+HTTPDATA="; sendstring += gprs_datạlength(); sendstring += ",2000\r\n"; sendC(sendstring, 1000);

// Load the JSON String data to HTTPDATA sendC(gprs_data, 5000);

//_BTS2Serial.println(res); }

void HTTPS_post(int timeout){

sendC("AT+HTTPACTION=1\r\n", timeout); //_BTS2Serial.println(res);

}

void controlRCservo(String inst) { String cmd, timedelay;

int i, rotation;

if (inst.substring(3,4)=="B") {

if (inst.length()==13) { //check lenght of the command cmd = inst.substring(5,8); rotation = cmd.toInt(); if ((rotation>=0)&&(rotation<=180)) { if (angle<=rotation) { for (i=angle;i<=rotation;i++){ myServọwrite(i); delay(100); } } else { for (i=angle;i>=rotation;i--){ myServọwrite(i); delay(100); } }

70 delay(4000);

angle = rotation; res = good; } else res = wrong; } else res = wrong; } else res = wrong; }

void DC_rolling(String inst) { char cid, cmd, ch;

String timedelay, instsa, sa; int timess, delta, L;

//String inst = "AT C,1,xxxx\r\n"; if (inst.length()==13) { cid = inst.charAt(3); cmd = inst.charAt(5); timedelay = inst.substring(7,11); timess = timedelaỵtoInt(); delta = 20; delay(1000); digitalWrite(9, HIGH);

pinMode(INA, OUTPUT); // set INA out; pinMode(INB, OUTPUT); // set INB out; pinMode(ENA, OUTPUT); // set ENA out; switch (cmd) { case '0': digitalWrite(INA, HIGH); digitalWrite(INB, LOW); digitalWrite(ENA, HIGH); while (timess>0) { L = res.length(); sa = res.substring(5,L-2); Serial.println(res); timess -= delta; if (sạtoInt()>2) {

71 digitalWrite(ENA, LOW); break; } }; delay(2000); break; case '1': digitalWrite(INA, LOW); digitalWrite(INB, HIGH); digitalWrite(ENA, HIGH); delay(timess); digitalWrite(ENA, LOW); break; } digitalWrite(ENA, LOW);

pinMode(INA, INPUT_PULLUP); // set off output;

pinMode(INB, INPUT_PULLUP); // set off output; pinMode(ENA, INPUT_PULLUP); // set off output; digitalWrite(9, LOW);

} }

void readBTS(int timedelay){ unsigned long startTime, timesi; char ch; res = ""; startTime = millis(); timesi = 0; do { if (BTSSerial.available()) { ch = BTSSerial.read();

72 res += ch; //if (ch =='\n') break; } timesi = millis()-startTime; } while (timesi<timedelay); //if (timesi>=timedelay) res = "E"; }

Một phần của tài liệu Nghiên cứu, xây dựng hệ thống tích hợp đa cảm biến hỗ trợ giám sát các thông số môi trường nước lợ tại trang trại nuôi tôm khu vựcTp. Hồ Chí Minh (Trang 72 - 87)

Tải bản đầy đủ (PDF)

(183 trang)