1. Trang chủ
  2. » Giáo Dục - Đào Tạo

BÁO cáo bài tập lớn kỹ thuật lập trình trong cơ điện tử đề tài hệ thống cảnh báo nhiệt độ

32 7 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

TRƯỜNG CƠ KHÍ ĐẠI HỌC BÁCH KHOA HÀ NỘI - BÁO CÁO BÀI TẬP LỚN Kỹ thuật lập trình Cơ điện tử Hệ thống cảnh báo nhiệt độ Giảng viên hướng dẫn: Ts Dương Văn Lạc Nhóm thực hiện: Nhóm 11 Hà lục MỞ ĐẦU TIEU LUAN MOI download : skknchat123@gmail.com moi nhat PHẦN I : LẬP KẾ HOẠCH THỰC HIỆN PHẦN MỀM I LẬP KẾ HOẠCH Khởi tạo dự án Phân tích tính khả thi II LỊCH BIỂU DIỄN CÔNG VIỆC Thành viên .5 Thời gian tổng thể PHẦN 2: PHÂN TÍCH HỆ THỐNG SƠ ĐỒ THIẾT KẾ LINH KIỆN SỬ DỤNG .7 Sơ Đồ Kết Nối Của Màn Hình LCD1602: 11 LẬP TRÌNH ADRUINO 13 LẬP TRÌNH GIAO DIỆN C# 17 PHẦN 3: THỬ NGHIỆM VÀ KẾT LUẬN 19 THỬ NGHIỆM 19 KẾT LUẬN 20 Phần 4: Bài học kinh nghiệm: .20 Về triển khai kế hoạch tập lớn 20 Về thiết kế hệ thống .20 Về lập trình Arduino 20 Về lập trình GUI 21 LỜI CẢM ƠN .22 Không tìm thấy mục nhập nao của bang hình minh họa TIEU LUAN MOI download : skknchat123@gmail.com moi nhat LỜI MỞ ĐẦU Những năm gần đây, khoa học công nghệ phát triển nhanh vũ bão, đặc biệt lĩnh vực cơng nghệ thơng tin Có thể nói, công nghệ thông tin len lỏi vào hầu hết tất lĩnh vực sống Trong đó, cơng nghệ phần mềm ln ln đóng vai trị tiên phong, dẫn đầu q trình Các phần mềm ứng dụụ̣ng ngày nhiều công việc sống thường ngày người Nắm bắt xu hướng đó, khn khổ nội dung chương trình học học phần Kĩ thuật lập trình Cơ điện tử, nhóm chúng em định tìm hiểu xây dựng đề tài đơn giản gần gũi với thực tế: Hệ thống quản lí tiền điện xã Qua trình tìm hiểu xây dựng phần mềm thực tế, với kiến thực học giảng đường, chúng em thực cảm nhận khó khăn xây dựng phát triển phần mềm hồn chỉnh Để xây dựng phần mềm hồn thiện, khơng đơn lập trình, mà cịn nhiều cơng việc khác cần phải thực Các công việc xếp pha với trình tự hợp lí, khoa học Phần mềm nhóm em xây dựng nhằm hỗ trợ cho người sử dụụ̣ng nhanh chóng dễ dàng việc cập nhật tình hình nhiệt độ, độ ẩm mơi trường xác định thời gian thực cách nhanh chóng dễ dàng lưu trữ thông số đo đạt với độ xác cao mà tiện lợi Đây phần mềm mà nhóm em xây dựng nên khơng thể tránh khỏi hạn chế thiếu sót, kính mong giáo bạn bổ sung, góp ý để phần mềm ngày hoàn thiện thực hữu ích với người sử dụụ̣ng Chúng em xin chân thành cảm ơn! TIEU LUAN MOI download : skknchat123@gmail.com moi nhat PHẦN I : LẬP KẾ HOẠCH THỰC HIỆN PHẦN MỀM I LẬP KẾ HOẠCH Khởi tạo dự án Mong muốn có sản phẩm quản lí nhiệt độ, độ ẩm nhằm nâng cao hiệu quản lý để đạt yêu cầu đầu đối tượng, nhóm sinh viên chúng em nghiên cứu xây dựng đề tài X để hỗ trợ người quản lý nhân viên họ công việc quản lý nhiệt độ, độ ẩm cách đại chuyên nghiệp Sản phẩm giúp tiết kiệm lượng lớn thời gian đo đạc thủ cơng thống kê khảo sát tình hình mơi trường thời gian thực Phân tích tính khả thi 2.1 Tính khả thi mặt kỹ thuật Sản phẩm phát triển dựa công cụụ̣ C# Adruino công cụụ̣ hỗ trợ thông dụụ̣ng, mạnh để lập trình giao diện lập trình vi điều khiển - Sản phầm thiết kế chạy window đảm bảo phù hợp với đa số người dùng - - Linh kiện khơng q phức tạp 2.2 Tính khả thi mặt kinh tế - Linh kiện không khó để tìm kiếm khơng đắt đỏ 2.3 Tính khả thi mặt tổ chức Phần mềm sau hoàn thành dễ dàng sử dụụ̣ng, thân thiện với người dung, người - AI LỊCH BIỂU DIỄN CÔNG VIỆC Thành viên STT 4 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat Phạm Mạnh Tuấn 20134328 KT ĐT-TT 06 K58 Thời gian tổng thể Tổng thời gian dự kiến 1517 tuần (kéo dài thời gian học) hoàn thành trước thời hạn bàn giao phần mềm tuần phân bổ sau: + + L ập trình, kiểm thử Phân tích thiết kế hệ thống phần mềm : 4-5 tuần c c h ệ t h ố n g p h ầ n m ề m , s a l ỗ i , n ộ p b o c o TIEU LUAN MOI download : skknchat1 23@gmail com moi nhat PHẦN 2: PHÂN TÍCH HỆ THỐNG SƠ ĐỒ THIẾT KẾ LINH KIỆN SỬ DỤNG a) Adruino Uno R3 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat Thông số kỹ thuật Adruino Uno R3 Vi điều khiển Điện áp hoạt động Tần số hoạt động Dòng tiêu thụụ̣ Điện áp vào giới hạn Số chân Digital I/O Số chân Analog Dòng tối đa chân I/O Dòng tối đa ( 5V ) Dòng tối đa ( 3.3 ) Bộ nhớ Flash SRAM EEPROM Khối lượng TIEU LUAN MOI download : skknchat123@gmail.com moi nhat b) Cảm biến nhiệt độ, độ ẩm DHT11 Cảm biến nhiệt độ, độ ẩm DHT11 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat Thông số kỹ thuật Cảm biến nhiệt độ độ ẩm DHT 11 Nguồn: -> VDC Dòng sử dụụ̣ng: 2.5mA max (khi truyền liệu) Khoảng đo độ ẩm: 20%-90% RH (sai số 5%RH) Khoảng đo nhiệt độ: 0-50°C (sai số 2°C) Tần số lấy mẫu tối đa: 1Hz (1 giây / lần) Kích thước 15mm x 12mm x 5.5mm Cảm biến độ ẩm nhiệt độ DHT11 Temperature Humidity Sensor cảm biến thông dụụ̣ng chi phí rẻ dễ lấy liệu thông qua giao tiếp wire (giao tiếp digital dây truyền liệu nhất) Bộ tiền xử lý tín hiệu tích hợp cảm biến giúp bạn có liệu xác mà khơng phải qua tính tốn So với cảm biến đời DHT22 DHT11 cho khoảng đo độ xác nhiều c) Màn hình LCD 16x2 giao tiếp I2C TIEU LUAN MOI download : skknchat123@gmail.com moi nhat LỜI CẢM ƠN Chúng em xin chân thành cảm ơn thầy Dương Văn Lạc tận tình hướng dẫn , giải đáp thắc mắc bảo nhóm em suốt thời gian nhóm em hoàn thành tập lớn Mặc dù cố gắng hoàn thành đề tài tốt thời gian kiến thức cịn có hạn nên chúng em khơng thể tránh khỏi thiếu sót định, mong nhận cảm thông, chia sẻ tận tình đóng góp bảo thầy bạn 17 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat CODE lập trình arduino Phần code Arduino: #include #include const int DHTPIN = 7; const int DHTTYPE = DHT11; DHT dht(DHTPIN, DHTTYPE); #include #include #include LiquidCrystal_I2C lcd(0x27,16,2); byte degree[8] = { 0B01110, 0B01010, 0B01110, 0B00000, 0B00000, 0B00000, 0B00000, 0B00000 }; int state = 0; long time_now = 0; long time_start = 0; float gettemp(); float data = 0; 18 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat void setup() { Serial.begin(9600); dht.begin(); lcd.init(); lcd.backlight(); lcd.print("Nhiet do: "); lcd.setCursor(0,1); lcd.print("Do am: "); lcd.createChar(1, degree); pinMode(2,OUTPUT); } void loop() { / Điều khiển Arduino qua giá trị biến state if(Serial.available()) { char temp = Serial.read(); if(temp == '0') state = 0; if(temp == '1') state = 1; if(temp == '2') state = 2; } / Thực thi trường hợp với giá trị biến state 19 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat switch(state) { / state = 0: dừng Arduino case 0: break; case 1: gettemp(); Serial.print(time_now); Serial.print("|"); Serial.println(round(data)); break; / state = 2: Reset liệu thời gian case 2: data = 0; time_now = 0; state = 0; break; } float h = dht.readHumidity(); float t = dht.readTemperature(); if (t > 33) { digitalWrite(2,HIGH); digitalWrite(3,LOW); } else { digitalWrite(2,LOW); 20 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat digitalWrite(3,HIGH); } if (isnan(t) || isnan(h)) { } else { lcd.setCursor(10,0); lcd.print(round(t)); lcd.print(" "); lcd.write(1); lcd.print("C"); lcd.setCursor(10,1); lcd.print(round(h)); lcd.print(" %"); } } float gettemp() { time_start = millis(); data = dht.readTemperature(); delay(100); time_now = time_now + millis() - time_start; } 21 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat Code lập trình giao diện using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; using System.IO.Ports; using System.Xml; using ZedGraph; namespace GraphRealTime { public partial class Form1 : Form { string SDatas = String.Empty; // Khai báo chuỗi để lưu liệu cảm biến gửi qua Serial string SRealTime = String.Empty; // Khai báo chuỗi để lưu thời gian gửi qua Serial int status = 0; // Khai báo biến để xử lý kiện vẽ đồ thị double realtime = 0; //Khai báo biến thời gian để vẽ đồ thị double datas = 0; //Khai báo biến liệu cảm biến để vẽ đồ thị public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { 22 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat comboBox1.DataSource = SerialPort.GetPortNames(); // Lấy nguồn cho comboBox tên cổng COM comboBox1.Text = Properties.Settings.Default.ComName; // Khởi tạo ZedGraph GraphPane myPane = zedGraphControl1.GraphPane; myPane.Title.Text = "Đồ thị liệu theo thời gian"; myPane.XAxis.Title.Text = "Thời gian (s)"; myPane.YAxis.Title.Text = "Dữ liệu"; RollingPointPairList list = new RollingPointPairList(60000); LineItem curve = myPane.AddCurve("Dữ liệu", list, Color.Red, SymbolType.None); myPane.XAxis.Scale.Min = 0; myPane.XAxis.Scale.Max = 30; myPane.XAxis.Scale.MinorStep = 1; myPane.XAxis.Scale.MajorStep = 5; myPane.YAxis.Scale.Min = -100; myPane.YAxis.Scale.Max = 100; myPane.AxisChange(); } / Hàm Tick bắt kiện cổng Serial mở hay không private void timer1_Tick(object sender, EventArgs e) { if (!serialPort1.IsOpen) { progressBar1.Value = 0; } else if (serialPort1.IsOpen) 23 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat { progressBar1.Value = 100; Draw(); Data_Listview(); status = 0; } } / Hàm lưu lại cổng COM chọn cho lần kết nối private void SaveSetting() { Properties.Settings.Default.ComName = comboBox1.Text; Properties.Settings.Default.Save(); } / Nhận xử lý string gửi từ Serial private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) { try { string[] arrList = serialPort1.ReadLine().Split('|'); // Đọc dòng Serial, cắt chuỗi gặp ký tự gạch đứng SRealTime = arrList[0]; // Chuỗi lưu vào SRealTime SDatas = arrList[1]; // Chuỗi thứ hai lưu vào SDatas double.TryParse(SDatas, out datas); // Chuyển đổi sang kiểu double double.TryParse(SRealTime, out realtime); realtime = realtime / 1000.0; // Đối ms sang s status = 1; // Bắt kiện xử lý xong chuỗi, đổi starus để hiển thị liệu ListView vẽ đồ thị 24 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat } catch { return; } } / Hiển thị liệu ListView private void Data_Listview() { if (status == 0) return; else { ListViewItem item = new ListViewItem(realtime.ToString()); // Gán biến realtime vào cột ListView item.SubItems.Add(datas.ToString()); listView1.Items.Add(item); // Gán biến datas vào cột ListView / Khơng nên gán string SDatas xuất liệu sang Excel dạng string, không thực phép toán listView1.Items[listView1.Items.Count - 1].EnsureVisible(); // Hiện thị dòng gán gần ListView, tức cuộn ListView theo liệu gần } } / Vẽ đồ thị private void Draw() { if (zedGraphControl1.GraphPane.CurveList.Count xScale.Max - xScale.MajorStep) { xScale.Max = realtime + xScale.MajorStep; xScale.Min = xScale.Max - 30; } // Tự động Scale theo trụụ̣c y if (datas > yScale.Max - yScale.MajorStep) { yScale.Max = datas + yScale.MajorStep; } else if (datas < yScale.Min + yScale.MajorStep) { yScale.Min = datas - yScale.MajorStep; 26 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat } zedGraphControl1.AxisChange(); zedGraphControl1.Invalidate(); zedGraphControl1.Refresh(); } / Xóa đồ thị, với ZedGraph phải khai báo lại hàm Form1_Load, không không hiển thị private void ClearZedGraph() { zedGraphControl1.GraphPane.CurveList.Clear(); // Xóa đường zedGraphControl1.GraphPane.GraphObjList.Clear(); // Xóa đối tượng zedGraphControl1.AxisChange(); zedGraphControl1.Invalidate(); GraphPane myPane = zedGraphControl1.GraphPane; myPane.Title.Text = "Đồ thị liệu theo thời gian"; myPane.XAxis.Title.Text = "Thời gian (s)"; myPane.YAxis.Title.Text = "Dữ liệu"; RollingPointPairList list = new RollingPointPairList(60000); LineItem curve = myPane.AddCurve("Dữ liệu", list, Color.Red, SymbolType.None); myPane.XAxis.Scale.Min = 0; myPane.XAxis.Scale.Max = 30; myPane.XAxis.Scale.MinorStep = 1; myPane.XAxis.Scale.MajorStep = 5; myPane.YAxis.Scale.Min = -100; myPane.YAxis.Scale.Max = 100; 27 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat zedGraphControl1.AxisChange(); } / Hàm xóa liệu private void ResetValue() { realtime = 0; datas = 0; SDatas = String.Empty; SRealTime = String.Empty; status = 0; // Chuyển status } / Hàm lưu ListView sang Excel private void SaveToExcel() { Microsoft.Office.Interop.Excel.Application xla = new Microsoft.Office.Interop.Excel.Application(); xla.Visible = true; Microsoft.Office.Interop.Excel.Workbook wb = xla.Workbooks.Add(Microsoft.Office.Interop.Excel.XlSheetType.xlWorksheet); Microsoft.Office.Interop.Excel.Worksheet ws = (Microsoft.Office.Interop.Excel.Worksheet)xla.ActiveSheet; // Đặt tên cho hai ô A1 B1 "Thời gian (s)" "Dữ liệu", sau tự động dãn độ rộng Microsoft.Office.Interop.Excel.Range rg = (Microsoft.Office.Interop.Excel.Range)ws.get_Range("A1", "B1"); ws.Cells[1, 1] = "Thời gian (s)"; ws.Cells[1, 2] = "Dữ liệu"; 28 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat rg.Columns.AutoFit(); / Lưu từ dịng thứ 2, tức ô A2 int i = 2; int j = 1; foreach (ListViewItem comp in listView1.Items) { ws.Cells[i, j] = comp.Text.ToString(); foreach (ListViewItem.ListViewSubItem drv in comp.SubItems) { ws.Cells[i, j] = drv.Text.ToString(); j++; } j = 1; i++; } } private void btConnect_Click(object sender, EventArgs e) { if (serialPort1.IsOpen) { serialPort1.Write("2"); //Gửi ký tự "2" qua Serial, tương ứng với state = serialPort1.Close(); btConnect.Text = "Kết nối"; btExit.Enabled = true; SaveSetting(); // Lưu cổng COM vào ComName } else { serialPort1.PortName = comboBox1.Text; // Lấy cổng COM 29 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat serialPort1.BaudRate = 9600; // Baudrate 9600, trùng với baudrate Arduino try { serialPort1.Open(); btConnect.Text = "Ngắt kết nối"; btExit.Enabled = false; } catch { MessageBox.Show("Không thể mở cổng" + serialPort1.PortName, "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } private void btExit_Click(object sender, EventArgs e) { DialogResult traloi; traloi = MessageBox.Show("Bạn có muốn thốt?", "Thốt", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning); if (traloi == DialogResult.OK) { Application.Exit(); // Đóng ứng dụụ̣ng } } private void btSave_Click(object sender, EventArgs e) { DialogResult traloi; traloi = MessageBox.Show("Bạn có muốn lưu số liệu?", "Lưu", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning); if (traloi == DialogResult.OK) { 30 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat SaveToExcel(); // Thực thi hàm lưu ListView sang Excel } } private void btRun_Click(object sender, EventArgs e) { if (serialPort1.IsOpen) { serialPort1.Write("1"); //Gửi ký tự "1" qua Serial, chạy hàm tạo Random Arduino } else MessageBox.Show("Bạn chạy chưa kết nối với thiết bị", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error); } private void btPause_Click(object sender, EventArgs e) { if (serialPort1.IsOpen) { serialPort1.Write("0"); //Gửi ký tự "0" qua Serial, Dừng Arduino } else MessageBox.Show("Bạn dừng chưa kết nối với thiết bị", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error); } private void btClear_Click(object sender, EventArgs e) { if (serialPort1.IsOpen) { DialogResult traloi; traloi = MessageBox.Show("Bạn có muốn xóa?", "Xóa liệu", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning); 31 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat ... skknchat123@gmail.com moi nhat b) Cảm biến nhiệt độ, độ ẩm DHT11 Cảm biến nhiệt độ, độ ẩm DHT11 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat Thông số kỹ thuật Cảm biến nhiệt độ độ ẩm DHT 11 Nguồn: ->... nghiệp đo nhiệt độ, độ ẩm môi trường khép kín - Thêm thiết bị điều khiển nhiệt độ, độ ẩm máy sưởi, quạt, máy phun sương để đạt yêu cầu nhiệt độ độ ẩm mong muốn - Thay cảm biến tốt để tăng tốc độ xử... kiện hệ thống rẻ, dễ dàng mua - Hệ thống Cơ điện tử hoàn thiện - Giao diện thiết kế thông qua Visual Studio dựa theo kiến thức học - Sản phẩm chạy bình thường theo yêu cầu đề Khó khăn: - c Độ nhạy

Ngày đăng: 02/11/2022, 04:14

Xem thêm:

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w