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

Một phần của tài liệu Thiết kế và thi công mô hình nhà kính điều khiển qua máy tính (Trang 41 - 59)

CHƯƠNG VI : KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI

6.2 Hướng phát triển đề tài

Đề tài cịn nhiều hướng có thể phát triển thêm như sau: - Làm giảm sai số đến mức thấp nhất có thể.

- Giảm kích thước mạch để có thể tích hợp vào các hệ thống yêu cầu sự nhỏ gọn và bảo mật.

TÀI LIỆU THAM KHẢO

1. Tài liệu tham khảo là sách:

 Giáo trình Vi Điều Khiển-Biên soạn: Ths Phạm Quốc Phương,Trường ĐH Công Nghệ TP.HCM

 Giáo trình Kỹ thuật số- Biên soạn: Ths Võ Thị Bích Ngọc và ThS Nguyễn Trọng Hải, Trường ĐH Công Nghệ TP.HCM.

2. Tài liệu tham khảo từ nguồn từ Internet:

 Wikipedia, Hệ thống định vị toàn cầu ( 10/07/2010), ttp://vi.wikipedia.org  dientuvietnam.net,picvietnam.com

 https://linhkien888.vn

 https://dailythietbidien.com

PHỤ LỤC Code lập trình trên phần mềm giao diện:

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.IO.Ports; using System.Text; using System.Windows.Forms; namespace ARDUINO_GTMT {

public partial class Form1 : Form { public Form1() { InitializeComponent(); comboBox1.DataSource = SerialPort.GetPortNames(); }

public int nhietdocd = 0; public int doamcd = 0; public static string s = ""; public string chuoi = "";

private void button1_Click(object sender, EventArgs e) {

nhietdocd++;

if (nhietdocd < 10) lblNhietdothap.Text = "0" + nhietdocd.ToString(); else

lblNhietdothap.Text = nhietdocd.ToString(); }

private void Form1_Load(object sender, EventArgs e) {

}

private void button6_Click(object sender, EventArgs e) { try { if (com.IsOpen == true) { com.Close(); com.PortName = comboBox1.Text; com.Open();

lbltrangthai.Text = comboBox1.Text + " Đang Được Kết Nối"; com.Write("s"); } else { com.PortName = comboBox1.Text; com.Open();

lbltrangthai.Text = comboBox1.Text + " Đang Được Kết Nối"; com.Write("s");

} } catch {

lbltrangthai.Text = "Kết Nối Thất Bại"; }

}

private void button7_Click(object sender, EventArgs e) {

com.Write("e"); com.DiscardInBuffer(); com.Close();

lbltrangthai.Text = " Chưa Kết Nối"; }

private void btgui_Click(object sender, EventArgs e) {

if (int.Parse(textBox1.Text) >= 99 || int.Parse(textBox2.Text) >= 99)

MessageBox.Show("Giá Trị Cài Đặt Không Được Lớn Hơn 99", "THÔNG BÁO", MessageBoxButtons.OK, MessageBoxIcon.Error);

else { com.Write("t" + textBox1.Text); com.Write("c" + textBox2.Text); } }

private void com_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { try { s = com.ReadLine(); Display(s); } catch { } }

private delegate void DlDisplay(string s); private void Display(string s)

{

if (this.InvokeRequired) {

DlDisplay sd = new DlDisplay(Display); this.Invoke(sd, new object[] { s }); }

else {

string[] data = s.Split(' '); lblNhietDo.Text = data[1]; lblNhietdothap.Text = data[2]; lblNhietdocao.Text = data[3]; lblDoam.Text = data[4]; lblDoamcdt.Text = data[5]; lblDoamcdc.Text = data[6]; lblas.Text = data[7]; lblascdt.Text = data[8]; lblascdc.Text = data[9]; } }

private void button4_Click(object sender, EventArgs e) {

doamcd++;

if (doamcd < 10) label3.Text = "0" + doamcd.ToString(); else

label3.Text = doamcd.ToString(); }

private void button5_Click(object sender, EventArgs e) {

doamcd--;

if (doamcd < 10) label3.Text = "0" + doamcd.ToString(); else

private void button3_Click(object sender, EventArgs e) {

com.Write(label3.Text + "h"); }

private void Form1_FormClosed(object sender, FormClosedEventArgs e) {

}

private void button1_Click_1(object sender, EventArgs e) {

if (int.Parse(textBox4.Text) >= 99)

MessageBox.Show("Giá Trị Cài Đặt Không Được Lớn Hơn 99", "THÔNG BÁO", MessageBoxButtons.OK, MessageBoxIcon.Error);

else { com.Write("d" + textBox4.Text); com.Write("p" + textBox5.Text); } }

private void button5_Click_1(object sender, EventArgs e) { try { if (button5.Text == "AUTO") { com.Write("m"); button5.Text = "MANUAL"; button5.BackColor = Color.Lime;

button2.Enabled = button3.Enabled = button4.Enabled = true; button2.BackgroundImage = button3.BackgroundImage = button4.BackgroundImage = Properties.Resources.red;

lblDA.Text = lblND.Text = lblQ.Text = "OFF";

lblDA.BackColor = lblND.BackColor = lblQ.BackColor = Color.Red; } else { com.Write("n"); button5.Text = "AUTO"; button5.BackColor = Color.Red;

button2.Enabled = button3.Enabled = button4.Enabled = false; }

} catch {

MessageBox.Show("Chưa Mở Cổng COM", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Information);

} }

private void button2_Click(object sender, EventArgs e) { if(lblND.Text == "OFF") { lblND.Text = "ON"; lblND.BackColor = Color.Lime; button2.BackgroundImage = Properties.Resources.green; com.Write("h"); } else { lblND.Text = "OFF"; lblND.BackColor = Color.Red; button2.BackgroundImage = Properties.Resources.red; com.Write("i"); } }

private void button3_Click_1(object sender, EventArgs e) { if (lblDA.Text == "OFF") { lblDA.Text = "ON"; lblDA.BackColor = Color.Lime; button3.BackgroundImage = Properties.Resources.green; com.Write("j"); } else { lblDA.Text = "OFF"; lblDA.BackColor = Color.Red; button3.BackgroundImage = Properties.Resources.red; com.Write("k"); } }

private void button4_Click_1(object sender, EventArgs e) {

if (lblQ.Text == "OFF") {

com.Write("f"); } else { lblQ.Text = "OFF"; lblQ.BackColor = Color.Red; button4.BackgroundImage = Properties.Resources.red; com.Write("g"); } }

private void button8_Click(object sender, EventArgs e) {

if (int.Parse(textBox3.Text) >= 99)

MessageBox.Show("Giá Trị Cài Đặt Khơng Được Lớn Hơn 99", "THƠNG BÁO", MessageBoxButtons.OK, MessageBoxIcon.Error);

else { com.Write("l" + textBox3.Text); com.Write("o" + textBox6.Text); } }

private void Form1_FormClosing(object sender, FormClosingEventArgs e) {

if (MessageBox.Show("Bạn Thực Sự Muốn Thốt", "THƠNG BÁO", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { if (com.IsOpen) { com.Write("e"); com.DiscardInBuffer(); } Application.ExitThread(); } }

private void groupBox5_Enter(object sender, EventArgs e) { } } }

Code chương trình điều khiển linh kiện:

#include <LiquidCrystal.h>

#define button_se A3//chon ngõ vào phím bấm cài đặt #define button_de A4//phím tăng

#define button_in A5//phím giảm #define button_ok 5//phim oke

LiquidCrystal lcd(13, 12, 11, 10, 9, 8);//LiquidCrystal lcd(rs, en, d4, d5, d6, d7);//khai báo sử dụng chân đk màn hình lcd 20x4

int16_t Update;

int roleND =4;//chân relay nhiệt độ int roleDA =3;//chân relay độ ẩm int roleQ =2;//chân relay ánh sáng

int nhietdo_t=32,nhietdo_c=35,doam_cdc=60,doam_cdt=50;//biến đệm sét cài đặt nhiệt độ , độ ẩm

float LightValue,LightValueSetting_t = 35, LightValueSetting_c = 50;//biến đệm sét cài đặt ánh sáng

int nhietdo,doam,humi = 0;//biên đệm char data;

int i=0,loaidl=0; int chuc,donvi;

int templateValue = 0 ; boolean start = false; int settingModeValue = 0 ; int mode = 0;

void setup() {//chương chình cài đặt hệ thống ban đầu

Serial.begin(9600); //tốc độ giao tiếp uart chọn mặc định là 9600 pinMode(button_se,INPUT);//chon button là ngõ vào input pinMode(button_in,INPUT);//chon button là ngõ vào input pinMode(button_de,INPUT);//chon button là ngõ vào input

pinMode(roleQ,OUTPUT);//chon relay là ngõ ra output pinMode(roleND,OUTPUT);//chon relay là ngõ ra output pinMode(roleDA,OUTPUT);//chon relay là ngõ ra output digitalWrite(roleQ,LOW);// tắt relay

digitalWrite(roleND,LOW);// tắt relay digitalWrite(roleDA,LOW);// tắt relay

lcd.begin(20, 4);//khơi tạo màn hình lcd bắt đầu chạy }

void loop() { //vòng lặp

if(mode==0)//chế độ điều khiển {

updateValueSensor();//cập nhật sensor AutoMode(); //chế độ tự động

checkSetting();//kiểm tra cài đặt }

else if( mode == 2) { SettingMode();//cho phép cài đặt } if(start == true) { SendData();//gửi data } ReceiveData();//nhận data từ PC } void SettingMode()//cài đặt { if(digitalRead(button_in) == LOW){//đọc phím bấm = 0 templateValue++; // tăng 1 đơn vị

delay(150); // chống dội phím bấm }

templateValue--;// giảm 1 đơn vị delay(150); // chống dội phím bấm }

if(settingModeValue == 0){//sét cài đặt nhiệt độ cao nhietdo_c += templateValue;

if(nhietdo_c >= 99) nhietdo_c = 99; lcd.setCursor(0,0);

lcd.print(" Cai Dat Nhiet Do "); lcd.setCursor(0,1); lcd.print("Muc cao: "); lcd.print(nhietdo_c); lcd.write(B11011111); lcd.print("C"); }

else if (settingModeValue == 1) {//sét cài đặt nhiệt độ thấp nhietdo_t += templateValue;

if(nhietdo_t >= 99) nhietdo_t = 99; lcd.setCursor(0,0);

lcd.print(" Cai Dat Nhiet Do "); lcd.setCursor(0,1); lcd.print("Muc thap: "); lcd.print(nhietdo_t); lcd.write(B11011111); lcd.print("C"); }

else if (settingModeValue == 2) {//sét cài đặt độ ẩm cao doam_cdc += templateValue;

if(doam_cdc >= 99) doam_cdc = 99; lcd.setCursor(0,0);

lcd.print(doam_cdc); lcd.print("%"); }

else if (settingModeValue == 3) {//sét cài đặt độ ẩm thấp doam_cdt += templateValue;

if(doam_cdt >= 99) doam_cdt = 99; lcd.setCursor(0,0);

lcd.print(" Cai Dat Do Am "); lcd.setCursor(0,1);

lcd.print("Muc thap: "); lcd.print(doam_cdt); lcd.print("%"); }

else if (settingModeValue == 4) {//sét cài đặt độ ánh sáng cao LightValueSetting_c += templateValue;

if(LightValueSetting_c >= 99) LightValueSetting_c = 99; lcd.setCursor(0,0);

lcd.print(" Cai Dat Nguong Sang "); lcd.setCursor(0,1);

lcd.print("Muc cao: ");

lcd.print((int)LightValueSetting_c); lcd.print("%");

}

else if (settingModeValue == 5) {//sét cài đặt độ ánh sáng thấp LightValueSetting_t += templateValue;

if(LightValueSetting_t >= 99) LightValueSetting_t = 99; lcd.setCursor(0,0);

lcd.print(" Cai Dat Nguong Sang "); lcd.setCursor(0,1);

lcd.print("Muc thap: ");

lcd.print((int)LightValueSetting_t); lcd.print("%");

}

templateValue = 0;//giá trị phím sét=0 if(digitalRead(button_se) == LOW){ settingModeValue++;

if(settingModeValue >= 6) {//mode 6 lần cài đặt settingModeValue = 0; mode = 0; } lcd.clear();//xóa màn hình while(digitalRead(button_se) == LOW); } if(digitalRead(button_ok) == LOW){ mode = 0; lcd.clear(); delay(150); } }

void updateValueSensor()//chương trình con cập nhật data từ 3 cảm biến {

if(Update>10)//cập nhật 10ms 1 lần {

int tempAdc = analogRead(A1);// tính nhiệt độ lm35 float vol = tempAdc*5.0/1024;

float temp = vol*100.0;

humi = (analogRead(A2) * 100.0)/ 1023.0;// cơng thức tính độ ẩm = giá trị đọc đc từ ADC nhân cho 100% chia cho độ phân giải của adc

LightValue = (analogRead(A0)*100.0)/1023.0;// cơng thức tính cương độ ánh sáng = giá trị đọc đc từ ADC nhân cho 100% chia cho độ phân giải của adc

lcd.setCursor(0,0);//hàng thứ nhất hiển thị nhiệt độ lcd.print("Nhiet do: ");

lcd.print("C ");

lcd.setCursor(0,1);//hàng thứ hai hiển thị độ ẩm lcd.print("Do Am: ");

lcd.print((int)doam1); lcd.print("% ");

lcd.setCursor(0,2);//hàng thứ ba hiển thị cường độ ánh sáng lcd.print("Light: "); lcd.print((int)LightValue); lcd.print("% "); Update=0; } Update++; delay(50); } void AutoMode()//chế độ tự động {

if(nhietdo <= nhietdo_t)//nhiệt độ đo nhỏ hơn nhiệt độ cd thấp thì tắt relay {

digitalWrite(roleND,LOW);//mức 0 tắt relay }

if(nhietdo >= nhietdo_c)//nhiệt độ đo lớn hơn nhiệt độ cd cao thì bật relay {

digitalWrite(roleND,HIGH);//mức cao bật relay } if(doam <= doam_cdt) { digitalWrite(roleDA,HIGH); } if(doam >= doam_cdc) { digitalWrite(roleDA,LOW); }

if(LightValue >= LightValueSetting_c) { digitalWrite(roleQ, LOW); } if(LightValue <= LightValueSetting_t) { digitalWrite(roleQ,HIGH); } }

void checkSetting()//ktra cài đặt { if(digitalRead(button_se) == LOW){ mode = 2; lcd.clear(); while(digitalRead(button_se) == LOW); } }

void SendData()//hàm gửi data lên pc {

String s = "s " +(String)nhietdo + " " + (String)nhietdo_t + " " + (String)nhietdo_c + " " + (String)doam + " " +(String)doam_cdt + " " + (String)doam_cdc + " " + (String)(int)LightValue + " " + (String)(int)LightValueSetting_t + " " + (String)(int)LightValueSetting_c + " e";

Serial.println(s); }

void ReceiveData()//nhận data điều khiển từ pc { while(Serial.available()>0) { data=Serial.read(); if(i==0) {

{

mode=1;//tắt hết ngõ ra khi bật chế độ đk tay digitalWrite(roleQ,LOW);

digitalWrite(roleND,LOW); digitalWrite(roleDA,LOW); }

else if(data=='n')//chế độ auto {

mode=0; }

else if(data=='f'&&mode==1)//nhận data f từ pc gửi xuống thì bật relay {

digitalWrite(roleQ,HIGH);//mức cao bật relay }

else if(data=='g'&&mode==1)//nhận data g từ pc gửi xuống thì tắt relay { digitalWrite(roleQ,LOW);//mức thấp tắt relay } else if(data=='h'&&mode==1) { digitalWrite(roleND,HIGH); } else if(data=='i'&&mode==1) { digitalWrite(roleND,LOW); } else if(data=='j'&&mode==1) { digitalWrite(roleDA,HIGH); } else if(data=='k'&&mode==1) {

digitalWrite(roleDA,LOW); }

else if(data=='t')//data sét cài đặt nhiệt độ từ pc {

i++; loaidl=1; }

else if(data=='c')//data sét cài đặt nhiệt độ từ pc {

i++; loaidl=0; }

else if(data=='d')//data sét cài đặt độ ẩm từ pc {

i++; loaidl=2; }

else if(data=='p')//data sét cài đặt độ ẩm từ pc {

i++; loaidl=3; }

else if(data=='o')//data sét cài đặt cường độ ánh sáng từ pc {

i++; loaidl=4; }

else if(data=='l')//data sét cài đặt cường độ ánh sáng từ pc {

else if(data=='s')//bắt đầu chuỗi= chữ s và kết thúc chuỗi = chữ e start = true; else if(data=='e') start=false; else i=0; } else { if(i==1)chuc=(data-48)*10;//tách lấy chục if(i==2)donvi=data-48; //tách lấy đơn vị

if(loaidl==0 && i==2) {nhietdo_c = chuc+donvi;}

else if(loaidl==1 && i==2) {nhietdo_t = chuc+donvi;}

else if(loaidl==2 && i==2) {doam_cdt = chuc+donvi;}

else if(loaidl==3 && i==2) {doam_cdc = chuc+donvi;}

else if(loaidl==4 && i==2)

{LightValueSetting_t = chuc+donvi;}

else if(loaidl==5 && i==2)

{LightValueSetting_c = chuc+donvi;} i++;

if(i==3)i=0; }

Một phần của tài liệu Thiết kế và thi công mô hình nhà kính điều khiển qua máy tính (Trang 41 - 59)

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

(59 trang)