Tải bản đầy đủ (.docx) (31 trang)

Xây dựng giao diện hiển thị và cơ sở dữ liệu cho hệ thống đo thông số nhiệt độ, ánh sáng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.65 MB, 31 trang )

CHƯƠNG 1. PHÂN TÍCH CÔNG NGHỆ THIẾT KẾ
1.1 Yêu cầu công nghệ
1.1.1 Yêu cầu bài toán
ĐỀ BÀI : Xây dựng giao diện hiển thị và CSDL cho hệ thống đo thông số nhiệt độ,

ánh sáng.
1.1.2 Ý tưởng thực hiện
+ Xây dựng giao diện điều khiển thiết bị trên WinForm
+ Ghép nối cảm biến nhiệt độ, cảm biến ánh sáng với vi điều khiển Arduino Uno R3
+ Xây dựng cơ sở dữ liệu trên SQL Sever
+ Viết chương trình điều khiển và lưu dữ liêu điều khiển vào SQL
+ Viết chương trình nhận lệnh và thực thi lệnh cho Arduino
+ Hoàn thành hệ thống


Phần cứng sử dụng
*Hệ thống gồm có :
+ 01 Vi điều khiển Arduino Uno R3
+ 01 Cảm biến nhiệt độ ( LM35 )
+ 01 Cảm biến ánh sáng ( BH1750 )




Tổng quát về vi điều khiển Arduino Uno R3
Giới thiệu về Arduino

Hình 1.1 Arduino Uno R3.
1 Arduino là một board mạch vi xử lý, nhằm xây dựng các ứng dụng tương tác với nhau hoặc
với môi trường được thuận lợi hơn. Phần cứng bao gồm một board mạch nguồn mở được thiết kế



trên nền tảng vi xử lý AVR Atmel 8bit, hoặc ARM Atmel 32-bit. Những Model hiện tại được
trang bị gồm 1 cổng giao tiếp USB, 6 chân đầu vào analog, 14 chân I/O kỹ thuật số tương thích
với nhiều board mở rộng khác nhau.


Được giới thiệu vào năm 2005, Những nhà thiết kế của Arduino cố gắng mang đến một
phương thức dễ dàng, không tốn kém cho những người yêu thích, sinh viên và giới chuyên
nghiệp để tạo ra những thiết bị có khả năng tương tác với môi trường thông qua các cảm
biến và các cơ cấu chấp hành. Những ví dụ phổ biến cho những người yêu thích mới bắt
đầu bao gồm các robot đơn giản, điều khiển nhiệt độ và phát hiện chuyển động. Đi cùng
với nó là một môi trường phát triển tích hợp (IDE) chạy trên các máy tính cá nhân thông
thường và cho phép người dùng viết các chương trình cho Aduino bằng ngôn ngữ C hoặc
C++.



Giá của các board Arduino dao động xung quanh €20, hoặc $27 hoặc 574 468VNĐ, nếu
được "làm giả" thì giá có thể giảm xuống thấp hơn $9. Các board Arduino có thể được đặt
hàng ở dạng được lắp sẵn hoặc dưới dạng các kit tự-làm-lấy. Thông tin thiết kế phần cứng
được cung cấp công khai để những ai muốn tự làm một mạch Arduino bằng tay có thể tự
mình thực hiện được (mã nguồn mở). Người ta ước tính khoảng giữa năm 2011 có trên 300
ngàn mạch Arduino chính thức đã được sản xuất thương mại, và vào năm 2013 có khoảng
700 ngàn mạch chính thức đã được đưa tới tay người dùng.

1.2.1.2 Sơ đồ các chân của Arduino Uno R3
+ Sơ đồ chân của Arduino :

Hình 1.2 Sơ đồ các chân Arduino



+ Sơ đồ nguyên lí của Arduino :

Hình 1.2 Sơ đồ nguyên lý của Arduino
1.2.1.3 Thông số kĩ thuật
Arduino Uno được xây dựng với phân nhân là vi điều khiển ATmega328P sử dụng thạch
anh có chu kì dao động là 16 MHz. Với vi điều khiển này, ta có tổng cộng 14 pin (ngõ) ra /
vào được đánh số từ 0 tới 13 (trong đó có 6 pin PWM, được đánh dấu ~ trước mã số của pin).
Song song đó, ta có thêm 6 pin nhận tín hiệu analog được đánh kí hiệu từ A0 - A5, 6 pin này
cũng có thể sử dụng được như các pin ra / vào bình thường (như pin 0 - 13). Ở các pin được đề
cập, pin 13 là pin đặc biệt vì nối trực tiếp với LED trạng thái trên board.
Trên board còn có 1 nút reset, 1 ngõ kết nối với máy tính qua cổng USB và 1 ngõ cấp
nguồn sử dụng jack 2.1mm lấy năng lượng trực tiếp từ AC-DC adapter hay thông qua ắc-quy
nguồn.
Khi làm việc với Arduino board, một số thuật ngữ sau cần được lưu ý:


Flash Memory: bộ nhớ có thể ghi được, dữ liệu không bị mất ngay cả khi tắt điện. Về vai
trò, ta có thể hình dung bộ nhớ này như ổ cứng để chứa dữ liệu trên board. Chương trình
được viết cho Arduino sẽ được lưu ở đây. Kích thước của vùng nhớ này thông thường


dựa vào vi điều khiển được sử dụng, ví dụ như ATmega8 có 8KB flash memory. Loại bộ
nhớ này có thể chịu được khoảng 10,000 lần ghi / xoá.


RAM: tương tự như RAM của máy tính, sẽ bị mất dữ liệu khi ngắt điện nhưng bù lại tốc
độ đọc ghi xoá rất nhanh. Kích thước nhỏ hơn Flash Memory nhiều lần.




EEPROM: một dạng bộ nhớ tương tự như Flash Memory nhưng có chu kì ghi / xoá cao
hơn - khoảng 100,000 lần và có kích thước rất nhỏ. Để đọc / ghi dữ liệu ta có thể dùng
thư viện EEPROM của Arduino.

Ngoài ra, board Arduino còn cung cấp cho ta các pin khác nhau như pin cấp nguồn 3.3V, pin
cấp nguồn 5V, pin GND...
Thông số kỹ thuật của Arduino board được tóm tắt trong bảng sau:
Vi điều khiển
Điện áp hoạt động
Điện áp vào khuyên dùng
Điện áp vào giới hạn
Digital I/O pin
PWM Digital I/O Pins
Analog Input Pins
Cường độ dòng điện trên mỗi I/O pin
Cường độ dòng điện trên mỗi 3.3V pin
Flash Memory
SRAM
EEPROM
Tốc độ
Chiều dài
Chiều rộng
Trọng lượng

ATmega328P
5V
7-12V
6-20V
14 (trong đó 6 pin có khả năng băm xung)

6
6
20 mA
50 mA
32 KB (ATmega328P)
0.5 KB được sử dụng bởi bootloader
2 KB (ATmega328P)
1 KB (ATmega328P)
16 MHz
68.6 mm
53.4 mm
25 g

1.2.1.4 Hướng dẫn nạp chương trình cho Arduino


Bước 1: Kết nối Arduino UNO R3 vào máy tính

Bước 2: Tìm cổng kết nối của Arduino Uno R3 với máy tính
Khi Arduino Uno R3 kết nối với máy tính, nó sẽ sử dụng một cổng COM (Communication port cổng dữ liệu ảo) để máy tính và bo mạch có thể truyền tải dữ liệu qua lại thông qua
cổng này. Windows có thể quản lí đến 256 cổng COM. Để tìm được cổng COM đang được sử
dụng để máy tính và mạch Arduino UNO R3 giao tiếp với nhau, bạn phải mở chức năng Device
Manager của Windows.
Bạn mở cửa sổ Run và gõ lệnh mmc devmgmt.msc.


Sau đó bấm Enter, cửa sổ Device Manager sẽ hiện lên.

Mở mục Ports (COM & LPT), bạn sẽ thấy cổng COM Arduino Uno R3 đang kết nối



Cổng kết nối ở đây là COM3.
Thông thường, trong những lần kết nối tiếp theo, Windows sẽ sử dụng lại cổng COM3 để kết nối
nên bạn không cần thực hiện thêm thao tác tìm cổng COM này nữa.
Bước 3: Khởi động Arduino IDE

Bước 4: Cấu hình phiên làm việc cho Arduino IDE
Vào menu Tools -> Board -> chọn Arduino Uno


Vào menu Tools -> Serial Port -> chọn cổng Arduino đang kết nối với máy tính. Ở máy của mình
là COM3.


Xác nhận cổng COM của Arduino IDE ở góc dưới cùng bên phải cửa sổ làm việc


Vào menu Tools -> Programmer -> chọn AVR ISP


Bước 5: Mở và nạp mã nguồn chương trình mẫu
Nạp một chương trình mẫu bằng cách vào menu File -> Examples -> 01.Basics -> chọn Blink.

Bạn sẽ thấy Arduino IDE mở một cửa sổ mới chứa mã nguồn Blink. Mã này có chức năng là
điều khiển đèn LED màu cam trên mạch Arduino Uno R3 nhấp nháy với chu kì 1 giây.


Bấm tổ hợp phím Ctrl + U để tải chương trình lên mạch Arduino Uno R3. Bạn sẽ thấy IDE xác
nhận đã lập trình thành công như hình dưới.



1.2.2 : Cảm biến đo nhiệt độ và ánh sáng
Cảm biến nhiệt độ: thông thường thì nhiệt độ bên ngoài môi trường được thiết bị
cảm biến đo được và truyền về kết quả cho người sử dụng là một đại lượng điện nào đó
và độ chính xác của kết quả phụ thuộc vào loại cảm biến bên trong. Trong các ngành
công nghiệp nó thường được ứng dụng để đo nhiệt độ trong không khí, nước, hóa chất,
độ ẩm,...tùy vào nhiệt độ môi trường cần đo là như thế nào để lựa chọn chất liệu và loại
cảm biến cho phù hợp để đảm bảo được độ chính xác và độ bền sản phẩm khi sử dụng.
Cảm biến ánh sáng: các thiết bị chứa đựng cảm biến ánh sáng có nhiều công dụng
trong các ứng dụng khoa học và đời sống hằng ngày. Một cảm biến ánh sáng đơn giản có
thể là một phần của một thiết bị an ninh, thiết bị cảnh báo an toàn, chẳng hạn như một
báo động chống trộm hoặc mở cửa gara. Các thiết bị này thường hoạt động bằng cách
chiếu một chùm ánh sáng phát ra từ một cảm biến này đến cảm biến khác, nếu ánh sáng


bị gián đoạn, một âm thanh báo động hoặc cửa gara sẽ tác động theo đúng yêu cầu cài
đặt
Mô hình cụ thể của hê thống đo thông số nhiệt độ và ánh sáng
.
.
.
.
1.3 Các phần mềm cần thiết
+ Arduino.exe
+ SQL Server Management Studio 2008
+ Visual studio 2010
+ Proteus 7.10


CHƯƠNG 2. THỰC THI THIẾT KẾ SẢN PHẨM

2.1 Mô tả hệ thống
Chức năng : Hệ thống điều khiển các thiết bị điện được sử dụng rộng rãi trong cuộc sống hằng
ngày, chúng ta có thể thấy nó ở rất nhiều nơi như trong nhà, ở trường học, trong các công ty, xí
nghiệp.
* Yêu Cầu:

-

Đảm bảo cho thiết bị làm việc đúng, chắc chắn.
Tác động nhanh vào thiết bị điều khiển
Độ nhạy của các thiết bị điều khiển phải đạt yêu cầu
Tính kinh tế : phải thoả mãn các yêu cầu kỹ thuật, đồng thời phải được lắp đặt sao cho rẻ
nhất đến mức có thể.

2.1.1 Sơ đồ khối

KHỐI NGUỒN

KHỐI CẢM
BIẾN
NHIỆT ĐỘ

KHỐI XỬ LÝ
TRUNG TÂM

MÁY TÍNH

KHỐI CẢM
BIẾN ÁNH
SÁNG



2.1.2 Chức năng từng khối
* Chức năng của khối nguồn : chuyển đồi nguồn từ 220V AC thành 5V DC và cung cấp
nguồn điện cho các khối xử lí trung tâm ,khối cảm biến và khối chấp hành
* Chức năng của khối chấp hành : nhận tín hiệu điều khiển từ Arduino thực hiện quay
sevor theo tín hiệu, và bật tắt còi theo tín hiệu nhận được
* Khối cảm biến : đọc thông số đo được và gửi mã lên khối xử lí trung tâm
* Chức năng của khối xử lí trung tâm :
- Nhận dữ liệu nhiệt độ, ánh sáng từ khối cảm biến gửi lên, xử lí dữ liệu , đóng
gói khung truyền và gửi lên máy tính
- Nhận lệnh điều khiển từ máy tính và thực hiện điều khiển khối chấp hành (động
cơ sevor,đèn led và còi )

* Chức năng máy tính :
- nhận dữ liệu cảm biến được gửi lên từ arduino,phân tích và xử lí dữ liệu
sau đó lưu vào cơ sở dữ liệu
- nhận lệnh điều khiển từ người quản lí, xử lí lệnh điều khiển thực hiện mã
hóa dữ liệu và gửi lệnh điều khiển xuống cho khối xử lí trung tâm
2.2 Phân tích thiết kế hệ thống
2.2.1 Khối nguồn (220V AC-5V DC)
* Mạch nguyên lí


* Nguyên lý hoạt động : mạch điện xoay chiều từ biến áp qua cầu chỉnh lưu thành 1 chiều.sau
khi đi qua 2 con tụ mạch sẽ phẳng sau đó mạch dương đi vào chân 1 của con ổn áp dương
lm7805 và ra chân 3.Điện áp khi ra sẽ ở trong khoảng 5vol.Chân GND được nối với chân âm của
cầu chỉnh lưu.Sau khi ra 5v lại được tụ lọc nguồn và cuối cùng ra điện áp ổn định là 5v
2.2.2 Khối cảm biến nhiệt độ và ánh sáng
*Mạch nguyên lý


*Nguyên lý hoạt động : Khi có nguồn điện cấp vào Arduino, Nguồn điện sẽ truyền thẳng vào
các cảm biến được đọc từ chân A1 và A2 của Arduino. Và khi đó thông số độ ẩm và ánh sáng sẽ
được hiển thị mô phỏng trên Virtual qua 2 chân TXD và RXD nối với Arduino Uno R3.
2.2.3 Khối xử lý trung tâm
*Mạch nguyên lý


Hình 2.2 Mạch nguyên lý khối xử lý trung tâm
*Nguyên lý hoạt động: Arduino Uno được xây dựng với phân nhân là vi điều khiển
ATmega328P sử dụng thạch anh có chu kì dao động là 16 MHz. Với vi điều khiển này, ta có tổng
cộng 14 pin (ngõ) ra / vào được đánh số từ 0 tới 13 (trong đó có 6 pin PWM, được đánh dấu ~
trước mã số của pin). Song song đó, ta có thêm 6 pin nhận tín hiệu analog được đánh kí hiệu từ
A0 - A5, 6 pin này cũng có thể sử dụng được như các pin ra / vào bình thường (như pin 0 - 13).
Ở các pin được đề cập, pin 13 là pin đặc biệt vì nối trực tiếp với LED trạng thái trên board.
Trên board còn có 1 nút reset, 1 ngõ kết nối với máy tính qua cổng USB và 1 ngõ cấp
nguồn sử dụng jack 2.1mm lấy năng lượng trực tiếp từ AC-DC adapter hay thông qua ắc-quy
nguồn
2.2.4 Sơ đồ nguyên lý hệ thống


Hình 2.2.4 Mô phỏng đo thông số nhiệt độ và ánh sáng trên Proteus

Hình 2.2.4 Giao diện hiển thị thông số nhiệt độ ánh sáng trên Visual Studio
*Nguyên lý làm việc :


Trên giao diện hệ thống người sử dụng có thể đo thông số độ ẩm, ánh sáng được gửi về. Chọn
cổng COM, Baud Rate, Data, Stop và Paraty tương ứng với mạch nguyên lý. Khi nhấn kết nối
cổng COM, dữ liệu từ Arduino sẽ thông qua cổng COM truyền và gửi lên Visual dữ liệu Độ Ẩm

và Ánh Sáng đo được. Hơn nữa, sẽ hiển thị thông số đó lên biểu đồ dạng sóng.
2.2.5 Sơ đồ mạch in

Hình 2.2.5 Sơ đồ mạch in
2.3 Thiết kế giao diện


Những đối tượng sử dụng để thiết kế giao diện :
- Các label để hiển thị như : COM, Baud Rate, Data, Stop, Paraty, Nhiệt Độ , Ánh Sáng, Mã,
Thời Gian, Địa Điểm, lbtime


- Các nút bấm button được sử dụng là : Connect, Disconnect, Xóa CSDL, Xác Nhận
- Textbox được sử dụng để hiển thị Mã ,Thời Gian, Nhiệt Độ, Ánh Sáng, Địa Điểm
- các Combobox sử dụng là : cbbcom, cbbbaud, cbbdata, cbbstop, cbbparaty
- Datagridview được sử dụng để hiển thị bảng dữ liệu trong CSDL
- Ngoài ra còn sử dụng timer 1
2.4 Lưu đồ thuật toán Arduino

CHƯƠNG 3. KẾT QUẢ
3.1 Hướng dấn Sử dụng :

- Bước 1: kết nối arduino với máy tính.


Bước 2: Mở phần mềm


- Bước 3: Lựa chọn cổng COM, tốc độ Baud, Data , Stop, Paraty
Sau khi chọn , ta ấn “Kết nối ” để thức hiện kết nối với Arduino


- Bước 4: Thực hiện đo giá trị nhiệt độ, ánh sáng
Giá trị đo được từ cảm biến sẽ hiển thị lên các textbox và biểu đồ rồi lưu vào
cơ sở dữ liệu


Bước 5: Xóa dữ liệu và ngắt kết nối
Chọn một giá trị cần xóa rồi ấn " Xóa CSDL " và ấn " Xác Nhận "
Sau khi xóa xong ta ấn " Disconnect " để kết thúc

PHỤ LỤC
using
using
using
using
using
using
using
using
using
using
using
using
using

System;
System.Collections.Generic;
System.ComponentModel;
System.Data;
System.Drawing;

System.Linq;
System.Text;
System.Threading.Tasks;
System.Windows.Forms;
System.Data.SqlClient;
System.IO;
System.IO.Ports;
System.Xml;

namespace detai2
{
public partial class Form1 : Form
{
float[] arr = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
float[] arr1 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
SerialPort port = new SerialPort(); //khai báo một cổng nối tiếp mới
string indata = string.Empty; // khai báo một biến indata để chứa dữ kiệu
SqlConnection conn = new SqlConnection(@"Data Source=WINET05901LS6D\SQLEXPRESS;Initial Catalog=detai;Integrated Security=True"); // khởi tạo đối tượng
delegate void SetTextCallback(string text); // khai báo delegate SetTextCallBack với tham số
string
public Form1()
{
InitializeComponent();


this.port.DataReceived += new
System.IO.Ports.SerialDataReceivedEventHandler(this.DataReceived);
string[] ports = SerialPort.GetPortNames();
// mảng port chứa các cổng com trên máy
tính

cbbcom.Items.AddRange(ports);
// thêm các cổng com vào cbbcom
string[] baud = { "1200", "2400", "4800", "9600", "19200", "38400", "57600",
"115200" }; // thêm mảng chứa tốc độ baud
cbbbaud.Items.AddRange(baud);
// thêm các tốc độ baud vào combobox baud
rate
string[] data = { "7", "8", "9" };
// thêm mảng chứa data
cbbdata.Items.AddRange(data);
// thêm các data vào cbbdata
string[] stop = { "1", "1.5", "2" };
// thêm mảng chứa stop
cbbstop.Items.AddRange(stop);
// thêm các biến stop vào cbbstop
string[] paraty = { "none", "old", "even" }; // thêm mảng chứa paraty
cbbparaty.Items.AddRange(paraty);
// thêm các paraty vào cbbparaty
}
private void hienthi()
// hàm hiển thị
{
conn.Open();
// mở cổng com
string hienthi = "select * from detai2";
// cho phép chọn các dữ liệu cần thiết từ cột
SqlDataAdapter data = new SqlDataAdapter(hienthi, conn);
// khai báo và khởi tạo đối
tượng DataAdapter
DataTable dt = new DataTable();

// khởi tạo DataTable mới
data.Fill(dt);
// điền dữ liệu vào đối tượng đt
dataGridView1.DataSource = dt;
// lấy dữ liệu từ đối tượng đt để truyền vào
dataGridView1
//chart1.DataSource = dt;
//chart1.Series["Nhiệt Độ"].YValueMembers = "nhietdo";
//chart1.Series["Ánh Sáng"].YValueMembers = "anhsang";
//chart1.Series["Nhiệt Độ"].Points.ResumeUpdates();
//chart1.Series["Ánh Sáng"].Points.ResumeUpdates();
conn.Close();
}
private void them(string nhietdo, string anhsang) // hàm thêm để tự động thêm dữ liệu
truyền vào dataGridView1
{
conn.Open();
// mở cổng com
string them = "them";
// khai báo biến thêm
SqlCommand sql = new SqlCommand(them, conn); // khởi tạo truyền phát dữ liệu thêm
vào đối tượng SqlCommand
sql.CommandType = CommandType.StoredProcedure;
sql.Parameters.Add(new SqlParameter("m", SqlDbType.Char)).Value =
DateTime.Now.ToString("MMHHmmss");
sql.Parameters.Add(new SqlParameter("tgian", SqlDbType.DateTime)).Value =
DateTime.Now;
sql.Parameters.Add(new SqlParameter("nhiet", SqlDbType.NVarChar)).Value = nhietdo;
sql.Parameters.Add(new SqlParameter("sang", SqlDbType.NVarChar)).Value = anhsang;
sql.Parameters.Add(new SqlParameter("dia", SqlDbType.NVarChar)).Value = "Thái

Nguyên";
sql.ExecuteNonQuery();
conn.Close();
lbnhietdo.Text = nhietdo;
lbanhsang.Text = anhsang;
hienthi();
}
private void cbcom_SelectedIndexChanged(object sender, EventArgs e)
{
if (port.IsOpen) port.Close();


×