Cảm biến ánh sáng quang trở

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 31)

CHƯƠNG IV :QUY TRÌNH THIẾT KẾ

4.3 Giới thiệu các linh kiện có trong mạch

4.3.6 Cảm biến ánh sáng quang trở

Cảm biến ánh sáng quang trở có tích hợp sẵn opamps và biến trở so sánh mức tín hiệu giúp giúp cho việc nhận biết tín hiệu trở nên dễ dàng, sử dụng để nhận biết hay bật tắt thiết bị theo cường độ ánh sáng mơi trường.

Hình 4.16 Cảm biến quang trở 4.3.7 Màn hình LCD 20x4

LCD 20x4 là loại màn hình tinh thể lỏng nhỏ dùng để hiển thị chữ hoặc số trong bảng mã ASCII. Mỗi ô của Text LCD bao gồm các chấm tinh thể lỏng, các chấm này kết hợp với nhau theo trình tự “ẩn” hoặc “hiện” sẽ tạo nên các kí tự cần hiển thị và mỗi ơ chỉ hiển thị được một kí tự duy nhất.

LCD 20x4 nghĩa là loại LCD có 4 dịng và mỗi dịng chỉ hiển thị được 20 kí tự. Đây là loại màn hình được sử dụng rất phổ biến trong các loại mạch điện.

Thông số kĩ thuật của LCD 20x4:

- Điện áp: 5V

- Ngõ giao tiếp: 16 chân

- Màu sắc: xanh lá hoặc xanh dương

Hình 4.17:Màn hình LCD 20x4 4.3.8 Giao diện Visual studio 2015

Visual Studio là lựa chọn hàng đầu của nhiều công ty thiết kế website hiện nay, khơng chỉ riêng ở Việt Nam mà cịn trên thế giới, vậy vì sao Visual lại phổ biến như vậy, cùng chúng tơi tìm hiểu những lý do khiến nó trở thành lựa chọn hàng đầu trong các tool lập trình.

– Giúp hỗ trợ lập trình trên nhiều ngơn ngữ như: C#, C/C++, HTML, Visual Basic, JavaScript, CSS.

– Hỗ trợ việc Debug thuận lợi như hỗ trợ debug từng câu lệnh, Break Point, xem giá trị của biến trong q trình chạy.

– Có giao diện dễ sử dụng đối với những người mới biết lập trình.

– Phần mềm Visual Studio hỗ trợ phát triển các ứng dụng: Windows Form, desktop MFC, Windows 10, ứng dụng mobile Windows Phone 8/8.1…

– Có các cơng cụ kéo thả chuyên nghiệp.

– Được nhiều lập trình viên trên thế giới tin tưởng sử dụng

Visual Studio 2015 cho phép lập trình trên ứng dụng di động chạy đa nền tảng như

iOS, Windows Phone, Android bằng ngơn ngữ C# và C++.

Có thể thấy, trong phiên bản Visual Studio 2015 này, Microsoft đã thêm rất nhiều tính năng mới giúp lập trình viên cũng như các cơng ty chun lập trình phần mềm như fptsoftware, astonsoft,… nâng cao hiệu suất làm việc.

4.4 Sơ đồ nguyên lý và hoạt động của mạch

4.4.1 Sơ đồ nguyên lý

Hình 4.1 Sơ đồ nguyên lý 4.4.2 Nguyên lý hoạt động

Khi cấp nguồn vào mạch sẽ hoạt động tự động theo cảm biến được ghi trong mức cài đặt sẵn bên trong , nếu nhiệt độ môi trường cao hơn nhiệt độ được ghi thì bật quạt phun sương làm mát cho đến khi nhiệt độ về mức mát thì tắt quạt phun sương , nếu độ ẩm đất thấp hơn độ ẩm được ghi thì bật bơm cho đến khi đạt độ ẩm cho cây thì tắt bơm, nếu ánh sáng trong vườn yếu hơn mức cài đặt thì bật đèn bù sáng cho đến khi ánh sáng trở về mức trung bình thì tắt đèn.

Đồng thời dữ liệu được gửi lên màn hình hiển thị và gửi qua giao diện trên máy tính để giám sát các thông số mà cảm biến đo được.Trên giao diện máy tính vừa giám sát trực tiếp từ cảm biến và có thể chuyển qua chế độ tay để điều khiển tưới nước và làm mát vườn mà không cần phải đợi cảm biến kích để điều khiển khi xử lý bằng tay trong thì trả về chế độ auto cho cảm biến tự điều khiển như ban đầu.

CHƯƠNG V: THI CÔNG SẢN PHẨM 5.1 Sơ đờ mạch in 5.1 Sơ đờ mạch in

Hình 5.1 Sơ đồ mạch in

5.2 Mạch in thực tế

5.3 Mạch hồn chỉnh

Hình 5.3 Mạch hồn chỉnh

5.4 Phần mềm giám sát

Hình 5.4 Phần mềm giám sát

- Nhiệt độ : đơn vị ⁰C

 38⁰C-40⁰C khoảng nhiệt độ cài đặt  36⁰C nhiệt độ hiện tại hiển thị

- Độ ẩm:đơn vị %

 52%-60%: khoảng độ ẩm cài đặt  62%: độ ẩm hiện tại hiển thị - Ánh sáng: đơn vị % (0%: trời tối )

 35%-50%: khoảng độ ánh sáng cài đặt  37%: độ ánh sáng hiển thị.

5.5 Lưu đồ giải thuật.

Kiểm tra độ ẩm đất Begin

Kiểm tra nhiệt độ

Khởi tạo hệ thống

Kiểm tra sánh sáng

Bật máy bơm

Kiểm tra dưới môc độ ẩm đặt ra Begin Kết thúc Đúng Sai Chương trình độ ẩm Đọc độ ẩm

Bật phun sương Kiểm tra quá môc

nhiệt độ đặt ra Begin Kết thúc Đúng Sai Chương trình nhiệt độ Đọc nhiệt độ

Bật đèn

Kiểm tra dưới môc ánh sáng đặt ra Begin Kết thúc Đúng Sai Chương trình ánh sáng Đọc ánh sáng

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

Sau nhiều tuần thực hiện với nhiều cố gắng và nỗ lực của em cùng với sự tận tình hướng dẫn của thầy Phạm Hùng Kim Khánh đồ án tốt nghiệp cũng đã hoàn thành đúng thời gian qui định theo yêu cầu đặt ra là thiết kế mơ hình nhà kính điều khiển qua máy tính.

6.1 Kết quả

Đã thiết kế và thi cơng thành cơng mơ hình nhà kính điều khiển qua máy tính.  Ưu điểm:

- Sử dụng Arduino Nano nên mạch nhỏ hơn sử dụng Arduino Uno R3 - Hệ thống tự động hoạt động thông qua các cảm biến

- Có thể điều khiển từ xa bằng máy tính - Linh kiện dễ mua và sử dụng

 Khuyết điểm:

- Mạch còn khá lớn, cần thiết kế nhỏ hơn nữa - Cảm biến chạy chưa ổn định cịn có các sai số.

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 31)

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

(59 trang)