1. Trang chủ
  2. » Luận Văn - Báo Cáo

Báo cáo môn học đọc nhiệt độ độ ẩm ghi nhận vào máy tính qua mạch arduino

17 1,9K 18

Đ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

Thông tin cơ bản

Định dạng
Số trang 17
Dung lượng 896,6 KB

Nội dung

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.. Vin Voltage Input: Để cấp nguồn ngoài cho Arduino UNO, bạn nối cực dương của ngu

Trang 1

TRƯỜNG ĐẠI HỌC NÔNG LÂM TP HCM

CƠ KHÍ- CÔNG NGHỆ

BÁO CÁO MÔN HỌC : ĐO LƯỜNG ĐIỀU KHIỂN

BẰNG MÁY TÍNH

Đề tài : Đọc nhiệt độ - độ ẩm ghi nhận vào máy tính qua

mạch arduino

SVTH: Huỳnh Văn Phúc

MSSV: 13138154

Lớp: DH13TD

Trang 2

B Giới thiệu:

1.Arduino :

Arduino UNO R3 có thể được cấp nguồn 5V thông qua cổng USB hoặc cấp nguồn ngoài thông qua Adaptor với điện áp khuyên dùng là 7-12V DC và giới hạn là 6-20V Thường thì nên cấp nguồn bằng pin 9V là hợp lý nhất nếu bạn không có sẵn nguồn từ cổng USB

Nếu cấp nguồn vượt quá ngưỡng giới hạn như trên sẽ làm hỏng Arduino UNO R3

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

Trang 3

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 Nó có thể luôn là 5V Chú ý 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: Khi 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Ω

Các chân vào ra của Arduino Uno R3:

Arduino UNO R3 có 14 chân digital dùng để đọc hoặc xuất tín hiệu Chúng chỉ có 2 mức điện áp là 0V và 5V với dòng vào/ra tối đa trên mỗi chân là 40mA Ở mỗi chân đều có các điện trở pull-up từ được cài đặt ngay trong vi điều khiển ATmega328 (mặc định thì các điện trở này không được kết nối)

Một số chân digital có các chức năng đặc biệt như sau:

 2 chân Serial 0 (RX) và 1 (TX): dùng để gửi (Transmit – TX) và nhận (Receive – RX) dữ liệu TTL Serial Arduino Uno có thể giao tiếp với thiết bị khác thông qua 2 chân này Kết nối bluetooth có thể nói là kết nối Serial không dây Nếu không cần giao tiếp Serial bạn không nên

sử dụng 2 chân này nếu không cần thiết

 Chân PWM (~): 3, 5, 6, 9, 10, và 11: Cho phép bạn xuất ra xung PWM với độ phân giải 8bit (giá trị từ 0 → 28-1 tương ứng với 0V → 5V) bằng hàm analogWrite() Nói một cách đơn giản, bạn có thể điều chỉnh được điện áp ra ở chân này từ mức 0V đến 5V thay vì chỉ cố định ở mức 0V và 5V như những chân khác

 Chân giao tiếp SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK) Ngoài các chức năng thông thường, 4 chân này còn dùng để truyền phát dữ liệu bằng giao thức SPI với các thiết bị khác

 LED 13 : trên Arduino UNO có 1 đèn led màu cam (kí hiệu chữ L) Khi bấm nút Reset, bạn sẽ thấy đèn này nhấp nháy để báo hiệu Nó được nối với chân số 13 Khi chân này được người dùng sử dụng, LED sẽ sáng

 Arduino UNO có 6 chân analog (A0 → A5) cung cấp độ phân giải tín hiệu 10bit để đọc giá trị điện áp trong khoảng 0V → 5V Với chân AREF trên board, bạn có thể để đưa vào điện áp tham chiếu khi

sử dụng các chân analog Tức là nếu bạn cấp điện áp 2.5V vào chân này thì bạn có thể dùng các chân analog để đo điện áp trong khoảng từ 0V → 2.5V với độ phân giải vẫn là 10bit

 Đặc biệt, Arduino UNO có 2 chân A4 (SDA) và A5 (SCL) hỗ trợ giao tiếp I2C/TWI với các thiết bị khác

Trang 4

2.Cảm biến đo nhiệt độ,độ ẩm ( DHT11 ):

DHT11 là cảm biến nhiệt độ và độ ẩm phức tạp với một đầu ra tín hiệu kỹ thuật

số hiệu chỉnh Kỹ thuật và công nghệ cảm biến nhiệt độ và độ ẩm, nó đảm bảo độ tin cậy cao và ổn định lâu dài tuyệt vời Cảm biến nhiệt độ và độ ẩm Nó ra đời sau

và được sử dụng thay thế cho dòng SHT1x ở những nơi không cần độ chính xác cao về nhiệt độ và độ ẩm

DHT11 có cấu tạo 4 chân như hình Nó sử dụng giao tiếp số theo chuẩn 1 dây

a) Thông số kỹ thuật :

o Do độ ẩm: 20% 95%

o Nhiệt độ: 0-50ºC

o Sai số độ ẩm ±5%

o Sai số nhiệt độ: ±2ºC

Trang 5

b) Nguyên lý hoạt động:

- Sơ đồ kết nối vi xử lý:

- Nguyên lý hoạt động:

Để có thể giao tiếp với DHT11 theo chuẩn 1 chân vi xử lý thực hiện theo 2 bước:

o Gửi tin hiệu muốn đo (Start) tới DHT11, sau đó DHT11 xác nhận lại

o Khi đã giao tiếp được với DHT11, Cảm biến sẽ gửi lại 5 byte dữ liệu

và nhiệt độ đo được

+ Bước 1: gửi tín hiệu Start

Trang 6

o MCU thiết lập chân DATA là Output, kéo chân DATA xuống 0 trong khoảng thời gian >18ms Trong Code mình để 25ms Khi đó DHT11

sẽ hiểu MCU muốn đo giá trị nhiệt độ và độ ẩm

o MCU đưa chân DATA lên 1, sau đó thiết lập lại là chân đầu vào

o Sau khoảng 20-40us, DHT11 sẽ kéo chân DATA xuống thấp Nếu

>40us mà chân DATA ko được kéo xuống thấp nghĩa là ko giao tiếp được với DHT11

o Chân DATA sẽ ở mức thấp 80us sau đó nó được DHT11 kéo nên cao trong 80us.Bằng việc giám sát chân DATA, MCU có thể biết được có giao tiếp được với DHT11 ko Nếu tín hiệu đo được DHT11 lên cao, khi đó hoàn thiện quá trình giao tiếp của MCU với DHT

+ Bước 2: đọc giá trị trên DHT11

- DHT11 sẽ trả giá trị nhiệt độ và độ ẩm về dưới dạng 5 byte Trong đó:

- Byte 1: giá trị phần nguyên của độ ẩm (RH%)

- Byte 2: giá trị phần thập phân của độ ẩm (RH%)

- Byte 3: giá trị phần nguyên của nhiệt độ (TC)

- Byte 4 : giá trị phần thập phân của nhiệt độ (TC)

- Byte 5 : kiểm tra tổng

- Nếu Byte 5 = (8 bit) (Byte1 +Byte2 +Byte3 + Byte4) thì giá trị độ

Trang 7

ẩm và nhiệt độ là chính xác, nếu sai thì kết quả đo không có nghĩa.

o Đọc dữ liệu:

Sau khi giao tiếp được với DHT11, DHT11 sẽ gửi liên tiếp 40 bit 0 hoặc 1 về MCU, tương ứng chia thành 5 byte kết quả của Nhiệt độ và

độ ẩm

§ Bit 0:

§ Bit 1:

Trang 8

Sau khi tín hiệu được đưa về 0, ta đợi chân DATA của MCU được DHT11 kéo lên Nếu chân DATA là 1 trong khoảng 26-28 us thì là 0, còn nếu tồn tại 70us là 1 Do đó trong lập trình ta bắt sườn lên của chân DATA, sau đó delay 50us Nếu giá trị đo được là 0 thì ta đọc được bit 0, nếu giá trị đo được là 1 thì giá trị đo được là Cứ như thế

ta đọc các bit tiếp theo

Vi điều khiển (sử dụng arduino uno R3)

+ code arduino :

1 #include "DHT.h"

2.

3 const int DHTPIN = 2; //Đọc dữ liệu từ DHT11 ở chân 2 trên mạch Arduino

4 const int DHTTYPE = DHT11 ; //Khai báo loại cảm biến, có 2 loại là DHT11 và DHT22

5.

6 DHT dht ( DHTPIN , DHTTYPE );

7.

8 void setup () {

9 Serial begin (9600);

10 dht begin (); // Khởi động cảm biến

11 }

Trang 9

13 void loop () {

14 int doam;

15 int nhietdo;

// dieu khien và nhận tín hiệu từ arduino :

16 byte kt;

17 kt=Serial.read();

18 if(kt=='1'){

19 nhietdo = dht.readTemperature();

20 Serial.print(nhietdo);

}

21 if (kt=='0'){

22 doam = dht.readHumidity();

23 Serial.print(doam);

}

24 delay(900);

}

3.lập trình điều khiển với visual basic 6.0

a. Lập trình kết nối CSDL

Có 3 phương pháp lập trình trên VB kết nối CSDL:

+ DAO – các đối tượng truy cập dữ liệu + RDO – các đối tượng truy cập dữ liệu từ xa

Trang 10

+ ADO- các đối tượng dữ liệu ActiveX

• Ở đây em sử dụng kỹ thuật DAO :

- DAO được dùng chủ yếu để thao tác trên dữ liệu trong một CSDL

đã có Thi hành truy vấn, cập nhập mẫu tin và thi hành các hoạt động bảo trì

Mặc dù mô hình đối tượng DAO rất rộng, ta có thể thiết lập giải pháp dùng DAO ngay khi ta chỉ mới hiệu một vài thuộc tính và phương thức của những đối tượng quan trọng nhất đối với DAO: Database, Recordset, field

- Dùng đối tượng Database để kết nối với một CSDL

- Để thực hiện, ta thực hiện theo các bước sau:

1. Từ menu Project, chọn References

2. Hộp thoại References xuất hiện, chọn “Microsoft DAO 3.51/3.6

Object Library”Nhấn OK

Cây phân cấp lớp các đối tượng DAO được

thể hiện như sau:

Workspaces

Databases

RecordSets

Trang 11

TableDefs

Relations

Trong đó:

• Workspaces – định nghĩa tập hợp các

vùng làm việc

• Databases - định nghĩa tập hợp các

CSDL Access cần làm việc trên một dự

án;

• RecordSets- định nghĩa các tập hợp bản

ghi (Records) cần làm việc;

• QueryDefs - định nghĩa tập hợp các

Query để làm việc Querydefs và

• Recordsets là khả năng truy xuất, xử lý dữ liệu (Data Manipulation) của

• DAO;

• TableDefs - định nghĩa tập hợp các bảng

(Table) cần làm việc Đây là khả năng định nghĩ dữ liệu (Data-Definition Language);

• Relations - định nghĩa tập hợp các quan

hệ (Relationship) cần làm việc;

- Databases sẽ bao gồm tất cả các CSDL

đang được mở trong vùng làm việc hiện

tại;

- RecordSets sẽ bao gồm tập hợp tất cả các Recordset đang được mở trên CSDL hiện

tại

Code :

Dim db As Database

Dim rs As Recordset

Private Sub cmdAdd_Click()

Data1.Recordset.AddNew

End Sub

Private Sub cmdDelete_Click()

'this may produce an error if you delete the last 'record or the only record in the recordset Data1.Recordset.Delete

Data1.Recordset.MoveNext

End Sub

Trang 12

Private Sub cmdRefresh_Click()

'this is really only needed for multi user apps

Data1.Refresh

End Sub

Private Sub cmdUpdate_Click()

Data1.UpdateRecord

Data1.Recordset.Bookmark = Data1.Recordset.LastModified

End Sub

Private Sub cmdClose_Click()

Unload Me

End Sub

Private Sub Data1_Error(DataErr As Integer, Response As Integer) 'This is where you would put error handling code

'If you want to ignore errors, comment out the next line

'If you want to trap them, add code here to handle them

MsgBox "Data error event hit err:" & Error$(DataErr)

Response = 0 'throw away the error

End Sub

Private Sub Data1_Reposition()

Screen.MousePointer = vbDefault

On Error Resume Next

'This will display the current record position

'for dynasets and snapshots

Data1.Caption = "Record: " & (Data1.Recordset.AbsolutePosition + 1) 'for the table object you must set the index property when

'the recordset gets created and use the following line

'Data1.Caption = "Record: " & (Data1.Recordset.RecordCount * (Data1.Recordset.PercentPosition * 0.01)) + 1

End Sub

Private Sub Data1_Validate(Action As Integer, Save As Integer)

'This is where you put validation code

'This event gets called when the following actions occur

Select Case Action

Trang 13

Case vbDataActionMoveFirst

Case vbDataActionMovePrevious Case vbDataActionMoveNext

Case vbDataActionMoveLast

Case vbDataActionAddNew

Case vbDataActionUpdate

Case vbDataActionDelete

Case vbDataActionFind

Case vbDataActionBookmark

Case vbDataActionClose

End Select

Screen.MousePointer = vbHourglass End Sub

B, chương trình chính của visual basic 6.0 Code :

Dim db As Database

Dim rs As Recordset

Dim doam As Integer

Dim nhietdo As Integer

Private Sub Cmdthuchien_Click()

'Timer1.Enabled = True

Timer2.Enabled = False

Timer1.Enabled = True

Timer1.Interval = 100

End Sub

Trang 14

Private Sub cmdketnoi_Click()

'Timer1.Interval = 1000

'MSComm1.CommPort = 4

MSComm1.Settings = "9600,n,8,1"

MSComm1.InputMode = comInputModeText

'MSComm1.PortOpen = True

MSComm1.RThreshold = 1

MSComm1.InputLen = 1

If Cmdketnoi.Caption = "ket noi" Then

Cmdketnoi.Caption = "huy ket noi"

MSComm1.PortOpen = True

'Timer1.Enabled = True

'Timer2.Enabled = True

Set db = OpenDatabase("E:\phuc13td\codevb\ketquado2.mdb")

MsgBox " Da ket Noi Thanh voi bo mach va co so du lieu " & db.Name Set rs = db.OpenRecordset("giatrinhanduoc")

Else

Cmdketnoi.Caption = "ket noi"

MSComm1.PortOpen = False

'MSComm1.CommPort = 1

Timer1.Enabled = False

Timer2.Enabled = False

MsgBox " Da Huy ket Noi voi bo mach va co so du lieu " & db.Name End If

'MSComm1.CommPort = 4

'MSComm1.InBufferSize = 16

MSComm1.InputLen = 10

MSComm1.DTREnable = False

'MSComm1.PortOpen = True

End Sub

Private Sub Cmddoam_Click()

'Timer2.Enabled = True

Timer1.Enabled = False

Timer2.Enabled = True

Timer2.Interval = 1000

End Sub

Trang 15

Private Sub Cmdthoat_Click()

End

End Sub

Private Sub Cmdxemketqua_Click()

frmgiatrinhanduoc.Show

End Sub

Private Sub Timer1_Timer()

'Set rs = db.OpenRecordset("ketqua") rs.AddNew

rs.Fields("nhiet do") = nhietdo

rs.Update

If Cmdketnoi.Caption = "huy ket noi" Then MSComm1.Output = "1"

If MSComm1.InBufferCount <> 0 Then nhietdo = MSComm1.Input

List2.AddItem nhietdo & "*C"

End If

End If

Timer1.Enabled = False

Timer2.Enabled = True

Timer2.Interval = 900

End Sub

Private Sub Timer2_Timer()

rs.AddNew

rs.Fields("do am") = doam

rs.Update

If Cmdketnoi.Caption = "huy ket noi" Then MSComm1.Output = "0"

If MSComm1.InBufferCount <> 0 Then doam = MSComm1.Input

List1.AddItem doam & "%"

Timer2.Enabled = False

Timer1.Enabled = True

Timer1.Interval = 100

End If

Trang 16

End If

End Sub

Kêt quả nhận được :

Ngày đăng: 18/05/2016, 20:09

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w