báo cáo bài tập lớn kỹ thuật lập trình trong cơ điện tử đề tài smart home

19 0 0
Tài liệu đã được kiểm tra trùng lặp
báo cáo bài tập lớn kỹ thuật lập trình trong cơ điện tử đề tài smart home

Đ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

Hệ thống này có khả năng ứng dụng để cảnh báo rò rỉ khí gas, thu th p và bi u di n ậểễbằng đồ thị các chỉ số về nhiệt độ - độ ẩm, đồng thời điều khiển được các thi t b qua giao ế ịdiện..

Trang 1

ĐẠI H C BÁCH KHOA HÀ N I ỌỘTRƯỜNG CƠ KHÍ

Môn: K thu t lỹậ ập trình trong Cơ điện tử Đề tài: Smart Home

Giáo viên hướng dẫn: TS Dương Văn Lạc Nhóm sinh viên th c hiựện: Nhóm 2

Trang 2

Phân chia công vi c ệ

hợp, chỉnh sửa

Hoàn thành

Trang 3

Mục l c ụ

Chương 1: Đặ ấn đềt v

1.1 Gi i thiớệu chung

1.2 Các yêu cầu cơ bản

1.3 Phương pháp, phạm vi và gi i h n nghiên cớ ạứu

Chương 2: Linh kiện và ph n cầứng

Chương 3: Giao tiếp gi a các linh kiữện

Chương 4: Winforms và Code lập trình

Chương 5: Sản phẩm và ứng dụng

Trang 4

2 Chương 1: Đặt vấn đề

1.1 Gi ới thi u chung ệ

Ngày nay, các c m t "nhà thông minh" và "Internet v n vụừạật kết nối" thường xuyên được nhắc đến như là một xu hướng tiên tiến, hướng con người đến với cuộc s ng ti n nghi ốệvà tho i mái do công ngh mang lảệại Đó không còn là những thứ trong tương lai xa mà đã hiện di n khệ ởắp nơi trên thế ớ gi i và ngay cả ở Việt Nam cũng đang có một thị trường c c ựkỳ sôi động

Áp d ng nh ng ki n thụữếức đã học vào th c tự ế, nhóm chúng em đã lựa chọn đề tài: “Smart Home” Hệ thống này có khả năng ứng dụng để cảnh báo rò rỉ khí gas, thu th p và bi u di n ậểễbằng đồ thị các chỉ số về nhiệt độ - độ ẩm, đồng thời điều khiển được các thi t b qua giao ế ịdiện

1.2 Các yêu cầu cơ bản

Hệ th ng phù h p v i nhu c u cốợớầủa người tiêu dùng, hướng đến đối tượng là h ộgia đình

Hệ thống đảm bảo được độ chính xác Giá thành phù h p, kợết cấu nhỏ ọ g n

Hoạt động ổn định trong các điều kiện khác nhau

Tham khảo các mô hình trên Internet để ả c i ti n thi t k và mếế ếục đích sử ụ d ng

1.3.2 Phạm vi đề tài và gi i hớ ạn nghiên cứu

Được s dử ụng trong các hộ gia đình, có thể ứng dụng trong công nghiệp để ph c v an ụụtoàn và ti n l i cho các hoệ ợạt động t xa ừ

2.1 Linh ki n ệ

2.1.1 Arduino Uno R3

Trang 5

Thông số cần lưu ý:

Chip điều khiển

chính ATmega328 h 8bitọNguồn nuôi mạch 5V từ cổng USB

Trang 6

4 GND (Ground): c c âm c a nguựủồn điện c p cho Arduino UNO Khi b n dùng các ấạ

thiết bị sử d ng nhụững nguồn điện riêng bi t thì nh ng chân này ph i ệữả được n i ốvới nhau

5V: cấp điện áp 5V đầu ra Dòng tối đa cho phép ở chân này là 500mA 3.3V: cấp điện áp 3.3V đầu ra Dòng tối đa cho phép ở chân này là 50mA VIN (Voltage Input) : để ấ c p ngu n ngoài cho Arduino UNO, b n n i cồạố ực dương

của ngu n vồới chân này và c c âm c a ngu n v i chân GND ựủồớ

IOREF : điện áp hoạt động của vi điều khi n trên Arduino UNO có thểể được đo ởchân này Và dĩ nhiên nó luôn là 5V Mặc dù vậy bạn không được lấy ngu n 5V ồtừ chân này để sử dụng b i chởức năng của nó không ph i là c p ngu n ảấồ

RESET: vi c nh n nút Reset trên ệấboard để reset vi điều khiển tương đương với việc chân RESET được nối với GND qua 1 điện trở 10K.

2.1.2 C m bi n DHT11 ảế

Các đặc tính k thuỹật quan tr ng: ọNguồn điện 3,5v đến 5v Mức tiêu thụ hiện tại 2,5mA Tín hiệu đầu ra kỹ thuật số Phạm vi nhiệt độ từ 0ºC đến 50ºC

Độ chính xác để đo nhiệt độ ở 25ºC, dao động khoảng 2ºC Độ phân giải để đo nhiệt độ là 8-bit, 1ºC

Độ ẩm có thể đo từ 20% RH đến 90% RH Độ ẩm chính xác 5% RH cho nhiệt độ từ 0-50ºC

Độ phân giải là 1% RH, nó không thể nhận các biến thể dưới mức đó Các chân của DHT11:

Gồm 2 chân cấp nguồn (VCC, GND) và 1 chân tín hiệu (DATA) Công dụng:

Dùng để đo nhiệt độ và độ ẩm với độ tin cậy và độ ổn định cao 2.1.3 Cảm biến MQ2

Trang 7

Ngoài ra, module được tích hợp bộ so sánh lm393 để đưa ra điện áp mức 0 hoặc mức 1 Bi n trếở điều chỉnh độ nh y c a c m bi n, khi tín hi u tạủảếệ ừ chân A0 vượt quá giá trị mà ta cài đặt ở biến trở Module sẽ đưa ra mức 1 ở chân DO

2.1.4 Màn hình LCD 16x2 (I2C)

Trang 8

6 Thông s k thu t: ố ỹậ

LCD 16×2 có 16 chân trong đó 8 chân dữ liệu (D0 – D7) và 3 chân điều khiển (RS, RW, EN)

5 chân còn lại dùng để cấp nguồn và đèn nền cho LCD 16×2

Các chân điều khiển giúp ta dễ dàng cấu hình LCD ở chế độ lệnh hoặc chế độ dữ liệu Chúng còn giúp ta cấu hình ở chế độ đọc hoặc ghi.

LCD 16×2 có th s d ng chể ử ụởế độ 4bit ho c 8bit tùy theo ng dặứụng ta đang làm 2.2 Sơ đồ khối và sơ đồ thuật toán

Sơ đồ khối:

Khối x lý trung tâm ử

Giao di n ệ

Trang 9

Sơ đồ hoạt động:

Cảm bi n ế

Biểu di n s ễốliệu và đồ thị Biểu di n s ễố

liệu trên màn hình LCD

So sánh với n ng ồ

độ gas cho phép

Còi Lớn hơn

Nhỏ hơn

Cổng Serial Cổng Serial HIGH

LOW

HIGH Điều khiển

đèn, quạt

Trang 10

8 Sơ đồ nối mạch:

Trang 11

Chương 3: Giao tiếp giữa Module I2C và Arduino Uno R3

Hoạt động

I2C s d ng 2 dây giao ti p là SCL và SDA Dây SCL (vi t t t c a Serial Clock Data) là ử ụếế ắ ủdây truy n xung clock phát t thi t b master ng b v i vi c truy n dềừế ịđồộ ớệềữ li u Dây SDA ệ(Serial Data) là dây truy n d li u ềữ ệ

Mạch v t lý I2C là mậạch c c thu hựở, do đó để ạng I2C có th ho mểạt động được, cần tối thiểu 2 cặp điện trở pull-up như trên hình, thông thường các giá trị điện trở 4k7 ho c ặ1k2 được sử dụng, tùy thu c vào tộốc độ truy n và kho ng cách truy n ềảề

Truyền nhận bit trong I2C

Các d liữ ệu được truy n trong I2C d ng các chu i 8 bit Sau khi bit ềạỗStart đầu tiên được truyền, 8 bit ti p theo chếứa thông tin về địa chỉ c a thi t bủế ị sẽ được truy n tiềếp Sau đó, một bit ACK ẽ được truy sền để xác nh n vi c truy n bit thành công Sau khi truy n ậệềềbit ACK, 8 bit ti p theo chếứa thông tin địa chỉ thanh ghi n i c a thi t b slave sộ ủế ịẽ được truyền Sau khi hoàn t t viấệc định địa chỉ với 8 bit này, một bit ACK ữ ẽ n a s được truy n ềđể xác nhận Sau đó, 8 bit Data sẽ được truy n ti p theo Cu i cùng, quá trình truy n kềếốềết thúc v i 1 bit ớACK và 1 bit Stop xác nh n vi c truy n dậệềữ li u k t thúc ệế

Trang 12

10

Với màn hình LCD 16x2 có h tr chu n giao ti p I2C thì s có 2 chân có tên SCL và ỗ ợẩếẽSDA, tương ứng với 2 dây SCL, SDA cho giao ti p I2C V i board Arduino Uno, chân ếớA4 là chân SDA và chân A5 là chân SCL, 2 chân A4, A5 này cũng được nối tới 2 chân SDA, SCL tương ứng ở header sử dụng với OLED c a board Arduino Uno V i các IC ủớvà vi điều khiển được sản xuất ngày nay đều có hỗ trợ điện tr nở ội kéo lên do đó trong việc k t nế ối dây không cần thêm điện tr nở ội kéo lên V i các module h tr I2C ch có 1 ớỗ ợỉtính năng như OLED SSD1306, LCD 1602 hi n th , c m bi n AM2315 để ểị ảếđể đọc nhi t ệđộ, độ ẩm của môi trường,… thường hoạt động chởế độ slave và có 4 chân: SDA, SCL, GND và VCC

Trang 13

Chương 4: Winforms và code lập trình Code Arduino:

#include <MQ2.h> #include <DHT.h> #include <LiquidCrystal_I2C.h> #include <Wire.h>

LiquidCrystal_I2C lcd(0X27,16,2); const int DHTPIN = 2; const int DHTTYPE = DHT11; const int pin = A3; int led1 =3; int led2 =5; int coi =4; int val; int tt1=0; int tt2=0;

DHT dht(DHTPIN, DHTTYPE); MQ2 mq2(pin);

void setup() { Serial.begin(57600); lcd.init(); lcd.backlight(); pinMode(led1,OUTPUT); pinMode(coi,OUTPUT); pinMode(led2,OUTPUT); pinMode(6,INPUT_PULLUP); //led1 pinMode(7,INPUT_PULLUP); //led2 dht.begin();

mq2.begin(); } void loop() { int bled1=digitalRead(6); int bled2=digitalRead(7); while (Serial.available()) { val = Serial.read(); }

if(bled1 == LOW ) { if(tt1 == 0) {tt1 = 1;

digitalWrite(led1,HIGH); }

else {

digitalWrite(led1,LOW); tt1=0;

} }

if(bled2 == LOW ) { if(tt2 == 0) {tt2 = 1;

digitalWrite(led2,HIGH); }

else {

digitalWrite(led2,LOW); tt2=0;

} }

if (val == '1' ) { tt1 = 0;

digitalWrite(led1, LOW); } else if (val == '2' ) { tt1 = 1;

digitalWrite(led1, HIGH); }

if (val == '3') { digitalWrite(led2, LOW); } else if (val == '4') { digitalWrite(led2, HIGH); }

float t = dht.readTemperature(); float h = dht.readHumidity(); float ppm = mq2.readSmoke()/20000;

if(ppm > 0.005) digitalWrite(coi,HIGH); else digitalWrite(coi,LOW);

lcd.setCursor(0,0); lcd.print("Nhiet Do:"); lcd.print(t); lcd.print(" C"); lcd.setCursor(0,1); lcd.print("Do am: "); lcd.print(h); lcd.print(" %RH"); lcd.write(1);

delay(500);

Trang 14

publicpartialclassForm1 : Form //Xây dựng class trên nhi u form v t lí ề ậ { //khai báo các biến

double temperature = 0, humidity = 0, ppm = 0; bool updateData = false;

bool led = false; bool fan = false; double tt1; double tt2; public Form1() {

InitializeComponent(); //khởi tạo các đối tượng trên form }

private void Form1_Load(object sender, EventArgs e) {

button_open.Enabled = true; // khai báo true cho button open button_close.Enabled = false; // khai báo false cho button close

chart1.Series["Temperature"].Points.AddXY(1, 1); //Lấy dữ li u tệ ừ Tampertature cho đồ ị th

chart1.Series["Humidity"].Points.AddXY(1, 1); //Lấy dữ li u t Humidity cho ệ ừđồ ị th

chart1.Series["PPM"].Points.AddXY(1, 1); }

private void comboBox_portLists_DropDown(object sender, EventArgs e) // T o chân ạPort

{

string[] portLists = SerialPort.GetPortNames(); comboBox_portLists.Items.Clear(); comboBox_portLists.Items.AddRange(portLists); }

private void button_open_Click(object sender, EventArgs e) // Khi n nút k t nấ ế ối {

try {

serialPort1.PortName = comboBox_portLists.Text;

serialPort1.BaudRate = Convert.ToInt32(comboBox_baudRate.Text);

Trang 15

button_open.Enabled = false; button_close.Enabled = true;

chart1.Series["Temperature"].Points.Clear(); chart1.Series["Humidity"].Points.Clear(); chart1.Series["PPM"].Points.Clear(); MessageBox.Show("Kết nối thành công !"); }

catch (Exception error) {

MessageBox.Show(error.Message); }

}

private void button_close_Click(object sender, EventArgs e) // Khi n nút ng t k t ấ ắ ếnối

{ try {

serialPort1.Close(); button_open.Enabled = true; button_close.Enabled = false; MessageBox.Show("Ngắt kết nối !"); }

catch (Exception error) {

MessageBox.Show(error.Message); }

}

private void Form1_FormClosing(object sender, FormClosingEventArgs e) {

try {

serialPort1.Close(); }

catch (Exception error) {

MessageBox.Show(error.Message); }

Trang 16

string str_temperature = data.Substring(indexOf_startDataCharacter + 1, (indexOfA - indexOf_startDataCharacter) - 1); //láy d liữ ệu từ dãy mã hóa string str_humidity = data.Substring(indexOfA + 1, (indexOfB - indexOfA) - 1);

string str_ppm = data.Substring(indexOfB + 1, (indexOfC - indexOfB) - 1);

temperature = Convert.ToDouble(str_temperature); humidity = Convert.ToDouble(str_humidity); ppm = Convert.ToDouble(str_ppm); updateData = true;

}

catch (Exception) {

} } else {

updateData = false; }

}

private void label3_Click(object sender, EventArgs e){} private void button1_Click(object sender, EventArgs e) {

(led == if false) {

serialPort1.Write("2"); button1.Text = "ON"; button1.BackColor = Color.Lime; led = true;

} else {

serialPort1.Write("1");

Trang 17

button1.BackColor = Color.Red; led = false;

} }

private void button2_Click(object sender, EventArgs e) {

(fan == if false) {

serialPort1.Write("4"); button2.Text = "ON"; button2.BackColor = Color.Lime; fan = true;

} else {

serialPort1.Write("3"); button2.Text = "OFF"; button2.BackColor = Color.Red; fan = false;

} }

private void label_temperature_Click(object sender, EventArgs e){} private void chart1_Click(object sender, EventArgs e){} private void label_humidity_Click(object sender, EventArgs e){} private void label5_Click(object sender, EventArgs e){}

private void comboBox_baudRate_SelectedIndexChanged(object sender, EventArgs e) {

} } }

Trang 18

16

Sản ph m: ẩ

Trang 19

Ứng d ng: ụ

Sản phẩm được dùng để điều khiển các thiết bị trong nhà, c nh báo rò rảỉ khí gas, điều khiển đèn và quạt qua màn hình, … giúp cho cuộc sống c u mảỗi gia đình trở nên thông minh và hiện đại hơn, tạo cho người sử dụng cảm giác ti n nghi và tho i mái ệả

Ngày đăng: 13/06/2024, 16:32