Cảm biến nhiệt độ LM35

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

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.3 Cảm biến nhiệt độ LM35

 LM35 là một cảm biến nhiệt độ Analog (A0 đến A5 trên board Arduino Uno).  LM35 không cần phải canh chỉnh nhiệt độ khi sử dụng.

 LM35 thay đổi nhiệt độ nhanh và chính xác.

Hình 4.10 Cảm biến nhiệt độ LM35

Cảm biến nhiệt độ LM35 là bộ cảm biến nhiệt mạch tích hợp chính xác cao mà điện áp đầu ra của nó tỷ lệ tuyến tính với nhiệt độ theo thang độ Celsius.

4.3.3.1 Thông số kỹ thuật

 Điện áp hoạt động: 4-20V DC.  Công suất tiêu thụ: 60uA.

 Khoảng đo nhiệt độ: -55°C đến 150°C.  Nhiệt độ thay đổi tuyến tính: 10mV/°C.

Cảm biến LM35 hoạt động bằng cách cho ra một giá trị hiệu điện thế nhất định tại chân Vout (chân giữa) ứng với mỗi mức nhiệt độ.

4.3.3.2 Sơ đồ đấu nối

Arduino Uno Cảm biến nhiệt độ LM35

VCC +Vs (4 – 20V)

GND GND

A0 VOUT

Hình 4.11: Sơ đồ đấu nối 4.3.4 Cảm biến độ ẩm đất 4.3.4 Cảm biến độ ẩm đất

Cảm biến độ ẩm đất, trạng thái đầu ra mức thấp (0V), khi đất thiếu nước đầu ra sẽ là mức cao (5V), độ nhạy cao chúng ta có thể điều chỉnh được bằng biến trở. Cảm biến độ ẩm đất có thể sử dung tưới hoa tự động khi khơng có người quản lý khu vườn của bạn hoặc dùng trong những ứng dụng tương tự như trồng cây. Độ nhạy của cảm biến phát hiện độ ẩm đất có thể tùy chỉnh được.

(Bằng cách điều chỉnh chiết áp màu xanh trên board mạch)

Phần đầu đo được cắm vào đất để phát hiện độ ẩm của đất, khi độ ẩm của đất đạt ngưỡng thiết lập, đầu ra DO sẽ chuyển trạng thái từ mức thấp lên mức cao.

Ứng dụng:

+ Đọc độ ẩm đất.

+ Hệ thống tưới tiêu tự động. Thông số kỹ thuật: + Điện áp hoạt động: 3.3V-5V

+ Kích thước PCB: 3cm * 1.6cm

+ Led đỏ báo nguồn vào, Led xanh báo độ ẩm. + IC so sánh : LM393

+ GND: 0V

+ DO: Đầu ra tín hiệu số (0 và 1)

+ AO: Đầu ra Analog (Tín hiệu tương tự) Cảm biến độ ẩm được nối với chân A0

*Nguyên lý hoạt động

Hình 4.12: Sơ đồ nguyên lý

Khi module cảm biến độ ẩm phát hiện, khi đó sẽ có sự thay đổi điện áp ngay tại đầu vào của ic LM393. Ic này nhận biết có sự thay đổi nó sẽ đưa ra một tín hiệu 0V để báo hiệu. và thay đổi như thế nào sẽ được tính tốn để đọc độ ẩm đất. Chi tiết các bạn có thể tham khảo Datasheet LM393.

+ Cảm biến độ ẩm đất rất nhạy với độ ẩm môi trường xung quanh, thường được sử dụng để phát hiện độ ẩm của đất.

+ Khi độ ẩm đất vượt quá giá trị được thiết lập, ngõ ra của module D0 ở mức giá trị là 0V.

+ Ngõ ra D0 có thể được kết nối trực tiếp với vi điều khiển (Arduino, PIC, AVR, STM) để phát hiện cao và thấp, và do đó để phát hiện độ ẩm của đất.

Hình 4.13: Sơ đồ nối dây cảm biến độ ẩm với arduino

Hình 4.14: Cảm biến độ ẩm đất 4.3.5 Relay 12V 4.3.5 Relay 12V

Mô tả:

Relay 5 chân SRD 12VDC là loại linh kiện đóng ngắt điện cơ đơn giản. Nó gồm 2 phần chính là cuộn hút và các tiếp điểm.

Thơng số kỹ thuật:

• Dịng AC max: 10 A • Dịng AC min: 6 A

• Diameter, PCB hole: 1.3 mm • Length / Height, external: 22 mm • Material, contact: Silver alloy

• Cơng suất cuộn dây (coil) DC: 360 mW • Thời gian tác động: 10 ms

• Thời gian nhả hãm: 5 ms

• Điện áp điều khiển cuộn dây (coil): 12 V

Kích thước:

Hình 4.15:Relay 12v

• Chân 1 và chân 2 được nối vào cuộn hút, khi có điện vào cuộn hút sẽ hút tiếp điểm chuyển từ vị trí 4 xuống tiếp điểm 5

• Chân 3: đặt điện áp (nếu là loại Relay 12V thì đặt 12V DC vào đây) • Chân 4, chân 5: tiếp điểm.

Ứng dụng:

• Nhìn chung, công dụng của relay là “dùng một năng lượng nhỏ để đóng cắt nguồn năng lượng lớn hơn”.

• Relay được dùng khá thông dụng trong các ứng dụng điều khiển động cơ và chiếu sáng.

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 quá 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

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

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

(59 trang)