LẬP TRÌNH ĐIỀU KHIỂN

Một phần của tài liệu (Đồ án tốt nghiệp) THIẾT kế CHẾ tạo mô HÌNH hệ THỐNG tưới RAU THÔNG MINH (Trang 54)

4.1 Quy trình cơng nghệ

Đầu tiên ta cấp nguồn cho hệ thống, hệ thống sẽ sử dụng 2 nguồn điện đó là: nguồn 220V AC được lấy từ nguồn điện lưới để cấp điện cho mạch động lực. Và nguồn 12V DC được lấy từ Apdapter để cấp nguồn cho mạch điều khiển. Sau khi ta đã cấp nguồn vào cho mạch điều khiển thì ta sẽ chờ 1 khoảng thời gian ngắn để mạch điều khiển hoạt động. Khi mạch điều khiển đã khởi động xong thì lúc này LCD sẽ hiển thị nhiệt độ cũng như độ ẩm mà các cảm biển đọc được. Đồng thời lúc này mô-đun Sim800L sẽ gửi một tin nhắn với nội dung là “Da san sang”.

Để bắt đầu chọn chế độ tự động và chế độ bằng tay thì ta sẽ sử dụng cơng tắc 3 vị trị mà chúng em đã thiết lập sẵn. Khi chọn chế độ tự động thì mạch điều khiển đọc các giá trị cảm biển của cảm biến nhiệt độ và độ ẩm. Nếu nhiệt độ > 24°C hoặc độ ẩm < 60% làm rơ-le đóng tiếp điểm cấp điện cho Contactor và máy bơm sẽ được bật. Khi máy bơm đã bật nhưng cảm biến mưa lại khơng tác động thì lúc này mạch điều khiển sẽ nhắn về số điện thoại đã được thiệt đặt sẵn với nội dung là “He thong het nuoc” và máy bơm sẽ tắt. Hệ thống sẽ tắt máy bơm khi độ ẩm > 70% hoặc nhiệt độ < 20°C, sau khi đạt được một trong hai điều kiện trên thì mạch điều khiển sẽ điều rơ-le và làm hở mạch từ đó ngắt điện Contactor và máy bơm sẽ tắt. Nếu chưa đạt được điều kiện (độ ẩm > 70% hoặc nhiệt độ < 20°C) thì hệ thống sẽ tiếp tục bơm nước. Nếu đã thỏa mãn điều kiện rồi thì máy bơm mới dừng. Và khi máy bơm tắt thì sẽ gửi về cho chúng ta một tin nhắn với nội dung “may bom tat”

Trong trường hợp mạch điều khiển gặp sự cố thì chúng ta vẫn hồn tồn có thể điều khiển hệ thống bằng chế độ bằng tay. Khi đã chọn chế độ điều khiển bằng tay thì máy bơm sẽ bật cho đến khi nào ta xoay công tắc vào vị trí chính giữa thì máy bơm sẽ tắt

4.2 Lưu đồ thuật toán

Khi hệ thống đã được cấp điện thì lúc này mơ-đun sẽ khởi tạo và đồng thời về với số điện thoại đã được thiết lập sẵn với nội dung “Da san sang”. Sau đó mạch điều khiển sẽ đọc các giá trị được trả về của các cảm biến như: cảm biến độ ẩm và cảm biến nhiệt độ. Sau đó, các giá trị này sẽ hiển thị lên LCD. Ngồi cách nhìn lên LCD để lấy được thông tin của độ ẩm và nhiệt độ của hệ thống thì chúng ta cịn cách đó là chúng ta sẽ gửi một tin nhắn với số điện thoại đã thiết lập với cú pháp là “KT” thì ngay lập tức hệ thống sẽ trả về cho chúng ta thông tin về nhiệt độ và độ ẩm hiện tại của hệ thống. Sau khi hệ

Thiết kế chế tạo mơ hình hệ thống tưới rau thơng minh

thống đã hoạt động thì hệ thống sẽ kiểm tra điều khiển để máy bơm được bật đó là nhiệt độ > 240C hoặc là độ ẩm < 60%. Nếu sai thì hệ thống sẽ đi lại phần đọc giá trị cảm biến. Nếu như máy bơm đã được bật nhưng mà cảm biến mưa khơng được tác động thì lúc này hệ thống đã hết nước và mô-đun Sim800L sẽ gửi về tin nhắn với nội dung là “He thong het nuoc” và “May bom tat”. Còn nếu mà cảm biến mưa được tác động thì máy bơm sẽ dừng khi đạt được một trong hai điều kiện đó là: nhiệt độ dưới 200C và độ ẩm đạt trên 70% thì máy bơm sẽ tắt (xem Hình 4.1)

4.3 Chương trình điều khiển [4]

4.3.1 Các chương trình con

 Chương trình con cho hệ thống đã sẵn sàng.

Chương trình này có nhiệm vụ chính là sẽ gửi một tin nhắn về số điện thoại mà ta đã thiệt lập với nội dung là “Da san sang”.

Chương trình về hệ thống đã sẵn sàng

void sansang() {

mySerial.println("AT+CMGS=\"+84357770321\""); delay(500);

mySerial.print("Da san sang"); delay(500);

mySerial.write(26);

Serial.print("Da gui tin nhan\n");

 Chương trình con về việc máy bơm tắt.

Chương trình con này có nhiệm vụ là nhắn tin về số điện thoại đã được thiết đặt với nội dung tin nhắn là “May bom da tat”

Chương trình con về máy bơm đã bật

void maybomtat() {

delay(500);

mySerial.println("AT+CMGS=\"+84357770321\""); delay(500);

mySerial.print("May bom da tat"); delay(500);

mySerial.write(26);

}

Thiết kế chế tạo mơ hình hệ thống tưới rau thơng minh

Chương trình này sẽ báo đến số điện thoại được thiết đặt với nội dung là “He thong het nuoc”

Chương trình con về máy bơm lỗi

{

delay(500);

mySerial.println("AT+CMGS=\"+84357770321\""); delay(500);

mySerial.print("He thong het nuoc"); delay(500);

mySerial.write(26); }

 Chương trình con về việc máy bơm đã bật

Chương trình con này sẽ gửi tin nhắn về số điện thoại đã được thiết lập với nội dung là “ May bom da bat”.

Chương trình về máy bơm đã bật

{

delay(500);

mySerial.println("AT+CMGS=\"+84357770321\""); delay(500);

mySerial.print("May bom da bat"); delay(500);

mySerial.write(26); }

 Chương trình con về đọc giá trị cảm biến

Ở chương trình con này sẽ có nhiệm vụ đọc các giá trị của cảm biến nhiệt độ và độ ẩm và hiển thị lên LCD. Ở cảm biến độ ẩm ta cần phải phải tính tốn và chuyển đổi giá trị ảo của cảm biến thành giá trị thật để hiện lên LCD. Nếu khơng chuyển đổi thì kết quả hiển thị độ ẩm đất lên LCD sẽ bị ngược.

void cambien() { sensors.requestTemperatures(); lcd.setCursor(0,0); lcd.print("Nhietdo: "); lcd.setCursor(9,0); nhietdo = sensors.getTempCByIndex(0); lcd.print(sensors.getTempCByIndex(0)); // vì 1 ic nên dùng 0 lcd.write(1); lcd.print("C"); ////////////////////////

for(int i=0;i<=9;i++) /*Chúng ta sẽ tạo một hàm for để đọc 10 lần giá trị cảm biến,sau đó lấy giá trị trung bình để được giá trị chính xác nhất.*/

{

doc_cb += analogRead(cb); }

TBcb=doc_cb/10; //Tính giá trị trung bình

int phantramao = map(TBcb, 0, 1023, 0, 100); //Chuyển giá trị Analog thành giá trị %

int phantramthuc = 100 - phantramao; //Tính giá trị phần trăm thực, chuyển điện thế khô thành ẩm doam = phantramthuc; lcd.setCursor(11, 1); lcd.print(phantramthuc); if (phantramthuc < 100) { lcd.setCursor(13, 1); lcd.print(' ');

Thiết kế chế tạo mơ hình hệ thống tưới rau thơng minh } else if (phantramthuc < 10) { lcd.setCursor(12, 1); lcd.print(' '); } lcd.print('%'); delay (500); doc_cb=0;

 Chương trình con về kiểm tra tin nhắn.

Chương trình con này có nhiệm vụ là sẽ kiểm tra tin nhắn đến. Nếu tin nhắn đến có nội dung là “KT” thì hệ thống sẽ trả về tin nhắn với nội dung nhiệt độ và độ ẩm hiện tại của hệ thống. Ngồi ra, khơng nhất thiết là ghi in hoa nội dung tin nhắn gửi đi là “KT”. Vì trong chương trình chúng em đã viết 1 lệnh là sẽ in hoa các kí tự từ tin nhắn gửi đến. Để tránh trường hợp ghi sai cứ pháp và làm cho hệ thống không gửi các giá trị của cảm biến về điện thoại.

Chương trình kiểm tra tin nhắn

void CheckSMS() { if(mySerial.available()>0) { delay(100); while(mySerial.available()) { incomingByte = mySerial.read(); inputString += incomingByte; } delay(10); Serial.println(inputString);

inputString.toUpperCase(); if (inputString.indexOf("KT") > -1) { delay(1000); Serial.println("Sending SMS..."); delay(500); mySerial.println("AT+CMGS=\"+84777967757\""); delay(500); mySerial.print("Nhiet do:"); mySerial.print(nhietdo, 1); mySerial.print(" degreeC"); mySerial.println(" ,"); mySerial.print("Do am:"); mySerial.print(doam, 1); mySerial.print(" %"); delay(500); mySerial.write(26); Serial.println("Sent!"); } inputString = ""; delay(1000); } } 4.3.2 Chương trình chính

Chương trình chính thì sẽ các nhiệm vụ sau:

 Bật máy bơm khi nhiệt độ và độ ẩm ở dưới ngưỡng quy định.

Điều kiện để máy bơm được bật đó là phải đạt các điều kiện đó là: Nhiệt độ > 240C hoặc độ ẩm < 50 và máy bơm không bị lỗi và máy bơm đang ở trạng thái tắt.

Thiết kế chế tạo mơ hình hệ thống tưới rau thơng minh

Chương trình máy bơm bật:

if(((nhietdo>24) || (doam<60)) && !Error && !maybom )// {

digitalWrite(12, 1); time1 = millis(); maybombat(); maybom=1;

Serial.println("Bat may bom, cho 10s");

 Tắt máy bơm sau khi máy bơm đã bật và độ ẩm đạt ngưỡng quy định.

Sau khi máy bơm đã được bật thì máy bơm sẽ dừng cho tới khi được các điều kiện đó là: Nhiệt độ < 200C hoặc độ ẩm > 65 và trạng thái máy bơm đang được bật. Khi đủ các điều kiện này thì máy bơm sẽ tắt.

Chương trình máy bơm tắt:

}

if(digitalRead(12))

if(((nhietdo<20) || (doam>70)) && maybom )// {

digitalWrite(12, 0);

Serial.println("Dat do am, tat may"); maybom=0;

maybomtat(); }

 Hệ thống bị lỗi sẽ báo về điện thoại là hệ thống hết nước

Hệ thống nhận biết được hệ thống bị lỗi bằng cách sẽ kiểm tra cảm biến mưa và trạng thái của máy bơm. Nếu cảm biến mưa không được tác động và trạng thái máy bơm là bật thì lúc này hệ thống sẽ tắt máy bơm và gửi tin nhắn về điện thoại với nội dung hệ thống hết nước.

CheckRainSensor();///chú ý CheckSMS();

if(digitalRead(12))

if((millis()-time1)>10000)

if(!CheckRainSensor() && maybom) {

Error=1;

digitalWrite(12,0);

Serial.println("Da tat may bom"); maybom=0;

maybomloi();

 Hiển thị lên màn hình máy tính các giá trị về độ ẩm, nhiệt độ và trạng thái máy bơm và cảm biến mưa (On hay Off)

Các lệnh hiển thị này sẽ hiển thị các giá trị của cảm biến và trạng thái của máy bơm từ để chúng ta có thể xem được các cảm biến hay máy bơm có hoạt động ổn định hay khơng. Nếu phần tử nào hư hay không hoạt động ta có thể biết được và tiến hành thay thế hay sửa chữa

Chương trình hiển thị lên màn hình máy tính:

cambien(); Serial.print("Nhiet do: "); Serial.print(nhietdo); Serial.print(" "); Serial.print("D o am: "); Serial.print(doam); Serial.print(" "); Serial.print("May bom ");

if(digitalRead(12)) Serial.print("ON"); else Serial.print("OFF"); Serial.print(" ");

Thiết kế chế tạo mơ hình hệ thống tưới rau thông minh

Serial.print("CB mua: ");

if(!digitalRead(6)) Serial.print("ON"); else Ser;ial.println("OFF");

4.3.3 Chương trình tổng quát #include <LiquidCrystal_I2C.h> #include <LiquidCrystal_I2C.h> #include <SoftwareSerial.h> #include <OneWire.h> #include <DallasTemperature.h> #include <Wire.h> byte degree[8] = { 0B01110, 0B01010, 0B01110, 0B00000, 0B00000, 0B00000, 0B00000, 0B00000, };

// Chân nối với Arduino #define ONE_WIRE_BUS 9 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); LiquidCrystal_I2C lcd(0x27,16,2); SoftwareSerial mySerial(3, 2);//tx,rx int relay = 12;

int cb = A2; //Chân cảm biến ở chân Analog: A0 int doc_cb, TBcb;

int luu; int mua= 11; float nhietdo=0; float doam=0; int time1; bool Error=0; bool maybom=0; String inputString; char incomingByte; void setup() { Serial.begin(9600); Serial.println("Initializing..."); mySerial.begin(9600);//SIM mySerial.println("AT"); delay(100); updateSerial(); mySerial.println("AT+CMGF=1"); // Configuring TEXT mode updateSerial();

mySerial.println("AT+CNMI=1,2,0,0,0");

// Decides how newly arrived SMS messages should be handled mySerial.println("AT+CMGDA=\"DEL ALL\"");

updateSerial(); Serial.print("\n");

Serial.println("HE THONG DA SAN SANG!"); sansang();

Thiết kế chế tạo mơ hình hệ thống tưới rau thông minh

pinMode (cb, INPUT); //Tín hiệu vào từ cảm biến pinMode (mua, INPUT); pinMode (relay, OUTPUT); //Tín hiệu xuất ra từ relay digitalWrite (relay, LOW); lcd.init(); // khoi tao lcd lcd.backlight(); // bat den lcd lcd.print("Nhiet do: "); // in ra man nhietdo

lcd.createChar( 1,degree) ; lcd.setCursor(0,1);

// thiết lập vị trí con trỏ ở hàng đầu tiên lcd.print("Do am : "); } void sansang() { mySerial.println("AT+CMGS=\"+84357770321\""); delay(500);

mySerial.print("Da san sang"); delay(500);

mySerial.write(26);

Serial.print("Da gui tin nhan\n"); }

{

delay(500);

while (Serial.available()) {

mySerial.write(Serial.read());

//Forward what Serial received to Software Serial Port }

while(mySerial.available()) {

Serial.write(mySerial.read());

//Forward what Software Serial received to Serial Port } } void maybomtat() { delay(500); mySerial.println("AT+CMGS=\"+84357770321\""); delay(500);

mySerial.print("May bom da tat"); delay(500); mySerial.write(26); } void maybomloi() { delay(500); mySerial.println("AT+CMGS=\"+84357770321\""); delay(500);

Thiết kế chế tạo mơ hình hệ thống tưới rau thơng minh

mySerial.print("He thong het nuoc"); delay(500); mySerial.write(26); } void maybombat() { delay(500); mySerial.println("AT+CMGS=\"+84357770321\""); delay(500);

mySerial.print("May bom da bat"); delay(500); mySerial.write(26); } void cambien() { sensors.requestTemperatures(); lcd.setCursor(0,0); lcd.print("Nhietdo: "); lcd.setCursor(9,0); nhietdo = sensors.getTempCByIndex(0); lcd.print(sensors.getTempCByIndex(0)); // vì 1 ic nên dùng 0 lcd.write(1); lcd.print("C"); for(int i=0;i<=9;i++)

//*Chúng ta sẽ tạo một hàm for để đọc 10 lần giá trị cảm biến,sau đó lấy giá trị trung bình để được giá trị chính xác nhất.*/

doc_cb += analogRead(cb); }

TBcb=doc_cb/10; //Tính giá trị trung bình int phantramao = map(TBcb, 0, 1023, 0, 100); //Chuyển giá trị Analog thành giá trị %

int phantramthuc = 100 - phantramao;

//Tính giá trị phần trăm thực, chuyển điện thế khơ thành ẩm doam = phantramthuc; lcd.setCursor(11, 1); lcd.print(phantramthuc); if (phantramthuc < 100) { lcd.setCursor(13, 1); lcd.print(' '); } else if (phantramthuc < 10) { lcd.setCursor(12, 1); lcd.print(' '); } lcd.print('%'); delay (500); doc_cb=0; } bool CheckRainSensor() {

Thiết kế chế tạo mơ hình hệ thống tưới rau thông minh } void CheckSMS() { if(mySerial.available()>0) { delay(100); while(mySerial.available()) { incomingByte = mySerial.read(); inputString += incomingByte; } delay(10); Serial.println(inputString); inputString.toUpperCase(); if (inputString.indexOf("KT") > -1) { delay(1000); Serial.println("Sending SMS..."); delay(500); mySerial.println("AT+CMGS=\"+84357770321\""); delay(500); mySerial.print("Nhiet do:"); mySerial.print(nhietdo, 1); mySerial.print(" degreeC"); mySerial.println(" ,"); mySerial.print("Do am:"); mySerial.print(doam, 1);

mySerial.print(" %"); delay(500); mySerial.write(26); Serial.println("Sent!"); } inputString = ""; delay(1000); } } void loop() { CheckRainSensor();///chú ý CheckSMS(); if(digitalRead(12)) if((millis()-time1)>10000)

if(!CheckRainSensor() && maybom) {

Error=1;

digitalWrite(12,0);

Serial.println("Da tat may bom"); maybom=0; maybomloi(); } cambien(); Serial.print("Nhiet do: "); Serial.print(nhietdo); Serial.print(" ");

Thiết kế chế tạo mơ hình hệ thống tưới rau thông minh

Serial.print("Do am: "); Serial.print(doam); Serial.print(" ");

Serial.print("May bom ");

if(digitalRead(12)) Serial.print("ON"); else Serial.print("OFF"); Serial.print(" ");

Serial.print("CB mua: ");

if(!digitalRead(6)) Serial.print("ON"); else Serial.println("OFF"); if(((nhietdo>24) || (doam<60)) && !Error && !maybom )

{

digitalWrite(12, 1); time1 = millis(); maybombat(); maybom=1;

Serial.println("Bat may bom, cho 10s"); }

if(digitalRead(12))

if(((nhietdo<20) || (doam>70)) && maybom ) {

digitalWrite(12, 0);

Serial.println("Dat do am, tat may"); maybom=0;

maybomtat(); }

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

Kết luận

Sau thời gian nổ lực học tập, tìm hiểu dưới sự hướng dẫn của GVHD: Ths. Phạm Duy Dưởng, đồ án “ Thiết kế chế tạo mơ hình hệ thống tưới rau thơng minh” đã hồn thành đúng thời gian qui định, giải quyết được các yêu cầu đặt ra lúc ban đầu:

 Tìm hiểu về mơ-đun Sim800L.  Tìm hiểu về cảm biến mưa.  Tìm hiểu về cảm biến độ ẩm.  Tìm hiểu về cảm biến nhiệt độ.  Tìm hiểu về LCD.

 Thiết kế mạch in.

 Chương trình điều khiển.  Báo cáo.

 Mơ hình thực tế.  Ưu điểm của đề tài:

Đề tài hệ thống tưới rau thơng minh có khó nhiều ưu điểm và có thể nói đến 2 ưu điểm nổi trội nhất và được nhiều người quan tâm hiện nay đó là:

 Tiết kiệm được nguồn nước từ đó giúp bảo vệ được môi trường.

 Hạn chế được công sức của con người và tiết kiệm được thời gian cho con người. Ngồi ra cịn nâng cao được năng suất của vườn rau.

Ngồi ra hệ thống cịn có các ưu điểm khác như:  Mạch nhỏ gọn.

 Sóng điện thoại bao phủ khắp nơi nên có thể điều khiển ở bất kỳ đâu.  Có độ ổn định và độ tin cậy cao hơn các phương pháp điều khiển khác.  Có thể giám sát được hệ thống dễ dàng thông qua tin nhắn.

 Hạn chế

Thiết kế chế tạo mơ hình hệ thống tưới rau thông minh

 Những nơi khơng có sóng điện thoại thì mơ-đun sim khơng nhận được tín hiệu.  Chưa diệt được sâu bện và tự bón phân cho cây trồng.

 Thiết kế và chế tạo mơ hình nên các thiết bị vẫn chỉ ở mức là mơ hình nên chưa được thật sự tối ưu về đề tài.

 Khi hệ thống hết tiền thì sẽ khơng gửi được tin nhắn.  Hướng khắc phục các hạn chế:

 Đăng ký sử dụng các gói ưu đãi tin nhắn theo tháng của các nhà mạng như Viettel, Mobifone, Vinaphone … Từ đó giảm được chi phí nạp thẻ cào vào sim.

 Nên tìm hiểu và hồn chỉnh mơ hình để tối ưu nhất có thể và đưa vào thực tiễn.

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

- Mơ hình có thể được nâng cấp, tùy chỉnh và ứng dụng để xây dựng trong một hệ thống tưới rau lớn, tưới cây cảnh,…

- Có thể áp dụng vào hệ thống báo cháy và tự chữa cháy bằng cách kết hợp với các cảm biến khói và nhiệt độ.

- Có thể sử dụng cảm biến độ ẩm để đưa ra các cảnh báo ở những kho chứa lương thực, thuốc men khi độ ẩm vượt quá mức qui định.

- Thiết kế ngôi nhà thông minh với các thiết bị được điều khiển các thiết bị thông qua tin nhắn điện thoại.

- Có thể kết hợp giữa điều khiển qua mơ-đun Sim800L với điều khiển qua mạng

Một phần của tài liệu (Đồ án tốt nghiệp) THIẾT kế CHẾ tạo mô HÌNH hệ THỐNG tưới RAU THÔNG MINH (Trang 54)