Đo độ ẩm không khí dùng Arduino, cảm biến HS1101. Đồ án môn học.Đo độ ẩm không khí bằng Arduino và hiển thị lên máy tính bằng CĐộ ẩm tuyệt đối là hàm lượng hơi nước trong một đơn vị thể tích không khí .Độ ẩm tương đối là tỷ số giữa khối lượng nước trên một thể tích không khíhiện tại so với khối lượng nước trên cùng thể tích đó khi hơi nước bão hòa. Đâylà đại lượng được sử dụng trong thực tế để mô tả mức độ ẩm trong không khíđược biểu diễn theo dạng phần trăm (%), độ ẩm tương đối 100% thể hiện rằngkhông khí chứa đầy hơi nước, tới trạng thái bão hòa.Hướng đi của đề tài. Để đo được độ ẩm của không khí ta sử dụng cảm biến đo độ ẩm, tín hiệu ra củacảm biến sẽ được gửi về vi điều khiển, vi điều khiển sẽ xử lí tín hiệu đó và gửi lênmáy tính thông qua chuẩn truyền thông nối tiếp. Độ ẩm hiện tại được hiển thịtrên máy tính thông qua một phần mềm hiển thị.
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN
********************
Đồ án 1
Đề tài : Thiết kế mạch đo độ ẩm và hiển thị lên máy tính
Họ và tên: Phạm Văn Công MSSV: 20150451
Lớp: TĐH 4 Giảng viên hướng dẫn: TS Nguyễn Hoài Nam
Hà Nội, 6/2018
Trang 2MỤC LỤC
2.1 Tổng quan về cách thức thực hiện đề tài 14
Trang 3• Độ ẩm là gì ?
Độ ẩm tuyệt đối là hàm lượng hơi nước trong một đơn vị thể tích không khí
Độ ẩm tương đối là tỷ số giữa khối lượng nước trên một thể tích không khí
hiện tại so với khối lượng nước trên cùng thể tích đó khi hơi nước bão hòa Đây
là đại lượng được sử dụng trong thực tế để mô tả mức độ ẩm trong không khí
được biểu diễn theo dạng phần trăm (%), độ ẩm tương đối 100% thể hiện rằng
không khí chứa đầy hơi nước, tới trạng thái bão hòa
Hướng đi của đề tài
Để đo được độ ẩm của không khí ta sử dụng cảm biến đo độ ẩm, tín hiệu ra của
cảm biến sẽ được gửi về vi điều khiển, vi điều khiển sẽ xử lí tín hiệu đó và gửi lên
máy tính thông qua chuẩn truyền thông nối tiếp Độ ẩm hiện tại được hiển thị
trên máy tính thông qua một phần mềm hiển thị
Các linh kiện được sử dụng trong đề tài:
Module đo độ ẩm : cảm biến độ ẩm HS1101, NE555, điện trở ( giá: 55 nghìn đồng)
Vi điều khiển: Arduino Nano ( giá: 75 nghìn)
Tổng chi phí thực hiện đề tài là 150 ngàn đồng
Trang 4Chương 1: Lý thuyết tổng quan
1.1 Giới thiệu về vi điều khiển ATmega328p
Vi điều khiển là 1 hệ thống bao gồm vi xử lý, kết hợp với các khối ngoại vi như
bộ nhớ, các module vào/ra, các bộ chuyển đổi ADC, DAC,… tất cả được tích hợp trên 1 chip Vi điều khiển được sử dụng rộng rãi trong các hệ thống nhúng cũng như các thiết bị điện tử thông minh
Vi điều khiển AVR do hãng Atmel ( Hoa Kì ) sản xuất được gới thiệu lần đầu năm
1996 AVR có rất nhiều dòng khác nhau bao gồm dòng Tiny AVR ( như AT tiny
13, AT tiny 22…) có kích thước bộ nhớ nhỏ, ít bộ phận ngoại vi, rồi đến dòng AVR ( chẳn hạn AT90S8535, AT90S8515,…) có kích thước bộ nhớ vào loại trung bình
và mạnh hơn là dòng Mega ( như ATmega32, ,…) và mới nhất là Xmega, với bộ nhớ có kích thước vài Kbyte đến vài trăm Kb cùng với các bộ ngoại vi đa dạng được tích hợp trên chip Tốc độ của dòng Mega cũng cao hơn so với các dòng khác Sự khác nhau cơ bản giữa các dòng chình là cấu trúc ngoại vi, còn nhân thì vẫn như nhau
Hình 1.1: Các dòng AVR của Atmel
❖ Vi điều khiển ATmega328p là một vi điều khiển thuộc dòng Mega Cho nên nó có đầy đủ các đặc điểm của dòng Mega
Trang 5
Hình 1.2 : Vi điều khiển ATmega328p dạng chip cắm và chip dán
❖ Những Tính Năng Chính Của ATmega328p:
• Bộ nhớ chương trình : 32 Kbytes
• SRAM: 2 Kbytes
• EEPROM : 1 Kbytes
• Số lần ghi 10,000 lần đối với Flash ROM, 100,000 lần đối với EEPROM
• Dữ liệu có thể được lưu trữ 20 năm ở 85°C và 100 năm ở 25 °C
• 64 thanh ghi I/O, 160 thanh ghi vào ra mở rộng, 32 thanh ghi đa mục đích
• 3 bộ định thời: 2 bộ 8 bit ( 0 & 2), 1 bô 16 bit ( 1 )
• Bộ định thời watchdog
• 6 kênh PWM 8 bit
• Bộ dao động nội RC tần số 1 MHz, 2 MHz, 4 MHz, 8 MHz
• ADC 8 kênh với độ phân giải 10 bit (Ở dòng Xmega lên tới 12 bit )
• Bộ so sánh tương tự có thể lựa chọn ngõ vào
• Một khối USART lập trình được
• Khối truyền nhận nối tiếp SPI Khối giao tiếp nối tiếp 2 dây TWI
Trang 6Hình 1.3: Sơ đồ chân của ATmega328p
1.2 Giới thiệu về Arduino nano
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 Được giới thiệu vào năm 2005,
Arduino đã và đang được sử dụng rất rộng rãi trên thế giới, và ngày càng chứng
tỏ được sức mạnh của chúng thông qua vô số ứng dụng độc đáo của người dùng
Một mạch Arduino bao gồm một vi điều khiển AVR với nhiều linh kiện bổ sung giúp dễ dàng lập trình và có thể mở rộng với các mạch khác Một khía cạnh quan trọng của Arduino là các kết nối tiêu chuẩn của nó, cho phép người dùng kết nối với CPU của board với các module thêm vào có thể dễ dàng chuyển đổi
Arduino chính thức thường sử dụng các dòng chip megaAVR, đặc biệt là
ATmega8, ATmega168, ATmega328, ATmega1280, và ATmega2560
Arduino NANO với thiết kế tiêu chuẩn sử dụng vi điều khiển ATmega328p làm trung tâm của mọi xử lý tác vụ
Kích thước của Arduino Nano cực kì nhỏ (1.85cm x 4.3cm) vì thế nó thích hợp cho
dự án yêu cầu nhỏ gọn
Trang 7Một vài thông số của Arduino NANO
Điện áp vào khuyên dùng 7-12V – DC
Điện áp vào giới hạn 6-20V – DC
Số chân Digital I/O 14 (6 chân PWM)
Số chân Analog 8 (độ phân giải 10bit)
Dòng tối đa trên mỗi
Trang 8Các chân của Arduino NANO :
Chức năng của các chân được hiển thị chi tiết ở hình 1.5
• GND (Ground): Chân cấp cực âm cho đầu ra
• 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
• 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Ω
Hình 1.5 Chức năng của các chân của Arduino NANO
Trang 9Các chân từ D2-D12 : là các chân vào ra số và có chức năng riêng đối với từng
chân giống như vi điều khiển Atmega328p ngoài ra các chân D3, D5,D6, D9, D10, D12 được sử dụng cho PWM
Các chân từ A0-A7 : là các chân vào ra số đồng thời cũng là các chân tương tự Các chân truyền thông TXD, RXD …
Arduino NANO được lập trình trên phần mềm Arduino IDE, bằng ngôn ngữ C
Độ chính xác nhiệt
độ (°C)
Chuẩn giao tiếp Sensor
Giá tham khảo (VND)
Để đạt tiêu chí kinh tế và độ chính xác tương đối thì HS1101 có thể tốt nhất,
với độ chính xác về độ ẩm 2%RH, HS1101 không thua kém gì SHT1x
Vì vậy trong đề tài này ta sử dụng cảm biến HS1101
HS1101 cơ bản là 1 tụ biến dung theo độ ẩm, giá trị của nó sẽ thay đổi khi độ
ẩm thay đổi Giá trị điện dung của cảm biến theo đổi theo độ ẩm được biểu diến theo công thức:
C=C(55%)*(1.25*10 -7 RH 3 -1.36*10 -5 RH 2 +2.19*10 -3 RH+9.0*10 -1 )
RH: là giá trị độ ẩm ( % )
C(55%): là giá của điện dung ở độ ẩm 55% C(55%) = 180pF
Trang 10Hình 1.6 Giá trị điện dung của cảm biến thay đổi theo độ ẩm
Làm sao để đo được giá trị của điện dung của cảm biến ?
Để đo được giá trị điện dung, trong đề tài này ta sử dụng IC NE555. IC NE555 là
linh kiện dùng để tạo xung vuông và tần số xung ra có thay đổi tùy thích
Hình 1.7 Hình ảnh và sơ đồ chân của NE555
Chân 1 (GND): Chân cho nối masse để lấy dòng
Chân 2 (Trigger): Chân so áp với mức áp chuẩn là 1/3 mức nguồn nuôi
Chân 3 (Output): Chân xung ra
Chân 4 (Reset): Chân xác lập trạng thái nghỉ, khi hoạt động chân này phải kéo lên
dương nguồn
Chân 5 (Control Voltage): Chân làm thay đổi mức áp chuẩn trong IC 555
Chân 6 (Threshold): Chân so áp với mức áp chuẩn là 2/3 mức nguồn nuôi
Chân 7 (Discharge): Chân có khóa điện đóng masse, thường dùng cho tụ xả điện
Chân 8 (VCC): Chân nối vào đường nguồn V+ IC 555 làm việc với mức nguồn từ 3
đến 15V
pF
RH
Trang 11❖ Cấu tạo và nguyên lý hoạt động của IC555
Cấu tạo của IC 555 gồm OP-amp so sánh điện áp, mạch lật và transistor để xả điện Cấu tạo của IC đơn giản nhưng hoạt động tốt Bên trong gồm 3 điện trở mắc nối tiếp chia điện áp VCC thành 3 phần Cấu tạo này tạo nên điện áp chuẩn Điện áp 1/3 VCC nối vào chân dương của Op-amp 1 và điện áp 2/3 VCC nối vào chân âm của Op-amp 2 Khi điện áp ở chân 2 nhỏ hơn 1/3 VCC, chân S = [1] và
FF được kích Khi điện áp ở chân 6 lớn hơn 2/3 VCC, chân R của FF = [1] và FF được reset
Hình 1.8 Sơ đồ nguyên lý của mạch tạo dao động bằng IC555
Nguyên lý hoạt động:
Khởi đầu tụ điện C được nạp điện từ nguồn Vcc, điện áp trên tụ Uc được so sánh với đầu vào đảo 2/3Vcc của Op-amp 1 và 1/3Vcc của Op-amp 2
o Khi Uc <1 /3Vcc đầu ra của Op-amp 1 ở mức thấp, đầu ra của Op-amp 2
ở mức cao ( R=0, S=1) nên đầu ra đảo của FF, 𝑄̅ = 0 Lúc này Transistor
bị khóa tụ tiếp tục được nạp
o Khi Uc = 1 /3Vcc Op-amp 2 lật trạng thái S=0, R = 0 đầu ra đảo 𝑄̅ = 0 Lúc này Transistor vẫn bị khóa tụ tiếp tục được nạp
o Khi Uc = 2 /3Vcc Op-amp 1 lật trạng thái S=0, R = 1 đầu ra đảo 𝑄̅ = 1 Lúc này Transistor mở ,lập tức tụ phóng điện qua điện trở R2 qua
transistor xuống đất
o Khi tụ phóng điện Uc giảm dần và Op-amp 1 R =0 nhưng đầu ra đảo của
FF vẫn giữa nguyên mức logic Nên tụ vẫn tiếp tục phóng
o Khi Uc giảm xuống bằng 1/3Vcc Op-amp 2 lật trạng thái nên khi đó 𝑄̅ = 0 Transistor khóa tụ lại được nạp Như vậy tụ được nạp và phóng giữa 2 mức
điện áp là 1 /3Vcc và 2 /3Vcc
Hằng số thời gian nạp : 𝜏n = ( R1+R2 )*C,
Hằng số thời gian phóng : 𝜏p = R2*C
Trang 12Hình 1.9 Dạng điện áp của Uc và tín hiệu ra
❖ Tính toán tần số của tín hiệu ra
Quá trình nạp tụ:
2/3 Ucc= Ucc +( Ucc/3-Ucc)* 𝑒−𝑡𝑛/𝜏n
→tn = 𝜏n*ln2=ln2*( R1+R2 )*C, Quá trình phóng :
1/3 Ucc= 2Ucc/3* 𝑒−𝑡𝑝/𝜏p
→tp = 𝜏p*ln2=ln2*R2 *C, Chu kì của tín hiệu ra T= tn + tp =( R1+2*R2) *C*ln2 Tần số : f = 1/T = 1/(( R1+2*R2) *C*ln2)
Giá trị điện dung của tụ điện
Trang 13Bảng giá trị độ ẩm tương ứng với tần số
Trang 14Chương 2 Thiết kế và thực hiện đề tài
2.1 Tổng quan về cách thức thực hiện đề tài
Về cơ bản gồm có 3 khối cần phải thiết kế : khối cảm biến để đo độ ẩm, khối xử
lý tín hiệu và khối hiện thị
Như đã bàn ở trên để đo được độ ẩm không khí ta cần đo được giá trị của điện dung của cảm biến, và từ đó chuyển từ việc đo điện dung của tụ điện về đo tần
số của mạch tạo dao động với IC555 Việc đo tần số này được thực hiện khá dễ dàng đối với vi điều khiển Để có thể hiển thị kết quả đo được lên máy tính ta sử dụng chuẩn giao tiếp RS232 giữa vi điều khiển và máy tính
2.2 Khối cảm biến
Sơ đồ nguyên lý được hiển thị hình 2.1
Cảm biến
Khối xử
lý tín hiệu
Hiển thị
Trang 15Hình 2.1 Mạch nguyên lý của bộ phận cảm biến
Giá trị điện trở R2=680 kΩ và R1 =29.9 kΩ, tụ C3 = 1nF
Nguồn cung cấp cho bộ phận này được lấy trực tiếp trên Arduino NANO
2.3 Khối xử lý tín hiệu
Khối xử lý tín hiệu ở đây chính là Arduino NANO
Arduino NANO mang trong mình đầy đủ các tính năng của Atmega328, không những thế trên Arduino NANO còn kết hợp với IC CH340 giúp chuyển đổi chuẩn RS232 trên vi điều khiển sang chuẩn USB ( bởi vì chuẩn RS232 không hỗ trợ trên máy tính ) nên Arduino dễ dàng giao tiếp với máy tính thống qua 1 cáp kết nối USB mini
Hình 2.2 Nguyên lý mạch của chíp CH340 được tích hợp trên Arduino
❖ Bộ truyền nhận dữ liệu nối tiếp trên Arduino
Truyền nhận dữ liệu nối tiếp trên Arduino hoàn toàn giống như trên vi điều khiển Atmega328 Thuật ngữ USART trong tiếng anh là viết tắt của cụm từ: Universal Synchronous & Asynchronous serial Reveiver and Transmitter, nghĩa là bộ truyền nhận nối tiếp đồng bộ và không đồng bộ Cần chú ý rằng khái niệm USART (hay UART nếu chỉ nói đến bộ truyền nhận không đồng bộ) thường để chỉ thiết bị phần cứng (device, hardware), không phải chỉ một chuẩn giao tiếp USART hay UART cần phải kết hợp với một thiết bị chuyển đổi mức điện áp để tạo ra một chuẩn giao tiếp nào đó Ví dụ, chuẩn RS232 (hay COM) trên các máy tính cá nhân
là sự kết hợp của chip UART và chip chuyển đổi mức điện áp Tín hiệu từ chip UART thường theo mức TTL: mức logic high là 5, mức low là 0V Trong khi đó, tín hiệu theo chuẩn RS232 trên máy tính cá nhân thường là -12V cho mức logic high
Trang 16và +12 cho mức low (tham khảo hình 1) Chú ý là các giải thích trong tài liệu này
theo mức logic TTL của USART, không theo RS232
Hình 2.3 Mức điện áp của tín hiệu của chuẩn RS232 và UART
Vi điều khiển Atmega328 có 1 module truyền thông nối tiếp USART Có 3 chân
chính liên quan đến module này đó là chân xung nhịp - XCK (chân số 1), chân
truyền dữ liệu - TxD (Transmitted Data) và chân nhận dữ liệu - RxD (Reveived
Data) Trong đó chân XCK chỉ được sử dụng như là chân phát hoặc nhận xung
giữ nhịp trong chế độ truyền động bộ
Các thanh ghi có liên quan đến đến hoạt động và điều khiển USART
UDR0 : là 1 thanh ghi 8 bit chứa giá trị nhận được và phát đi của USAR
UCSR0A (USART Control and Status Register A): là 1 trong 3 thanh ghi điều
khiển hoạt động của module USART
Thanh ghi UCSRA chủ yếu chứa các bit trạng thái như bit báo quá trình nhận kết
thúc (RXC), truyền kết thúc (TXC), báo thanh ghi dữ liệu trống (UDRE), khung
truyền có lỗi (FE), dữ liệu tràn (DOR),…
UCSR0B(USART Control and Status Register B):
UDR0
UCSR0A
A
Trang 17RXCIE0 là bit cho phép ngắt khi quá trình nhận kết thúc Việc nhận dữ liệu
truyền bằng phương pháp nối tiếp không đồng bộ thường được thực hiện thông qua ngắt, vì thế bit này thường được set bằng 1 khi USART được dung nhận dữ
liệu
UDRIE0 là bit cho phép ngắt khi thanh ghi dữ liệu UDR trống
RXEN0 là một bit quan trọng điều khiển bộ nhận của USART, đề kích hoạt
chức năng nhận dữ liệu bạn phải set bit này lên 1
TXEN0 là bit điều khiển bộ phát Set bit này lên 1 bạn sẽ khởi động bộ phát của
USART
UCSZ02 bit này kết hợp với 2 bit khác trong thanh ghi UCSRC0 quy định độ dài
của dữ liệu truyền/nhận Chúng ta sẽ khảo sát chi tiết khi tìm hiểu thanh ghi
UCSRC
RXB80 gọi là bit dữ liệu 8 USART trong AVR có hỗ trợ truyền dữ liệu có độ dài
tối đa 9 bit, trong khi thanh ghi dữ liệu là thanh ghi 8 bit Do đó, khi có gói dữ
liệu 9 bit được nhận, 8 bit đầu sẽ chứa trong thanh ghi UDR0, cần có 1 bit khác
đóng vai trò bit thứ chín, RXD8 là bit thứ chín này
TXB80 tương tự như bit RXD80, bit TXB80 cũng đóng vai trò bit thứ 9 truyền
thông, nhưng bit này được dung trong lúc truyền dữ liệu
UCSR0C ( USART Control and Status Register 0 C ): thanh ghi này chủ yếu quy
định khung truyền và chế độ truyền
UBRR0L và UBRR0H (USART Baud Rate Register): 2 thanh ghi thấp và cao quy
Trang 19❖ Các bước để sử dụng modue USART
o Cài đặt tốc độ baud thông qua 2 thanh ghi UBRR0L và UBRR0H
o Định dạng khung truyền dữ liệu thông qua thanh ghi UCSR0B và
Trang 20Hình 2.4 Giao hiện thị trên máy tính
Để kết nối Arduino với máy tính trước tiên cần phải cài đặt driver cho IC CH340 Sau đó lựa chọn cổng COM và tốc độ Baud, với tốc độ Baud mặc định cho
Arduino là 19200 bps Để lựa chọn chính xác cổng COM cần giao tiếp vào phần Device Manager của Computer Managerment trên máy tính để biết tên cổng COM đã kết nối
Trang 21Giá trị độ ẩm, tần số đo được, và thời gian đo được lưu lại và hiển thị trên bảng
Ngoài ra còn có giao diện vẽ đồ thị độ ẩm
Trang 23Hình 2.6 Mạch in dang 3D
❖ Kết nối module với Arduino.
Trang 24Hình 2.8 Sản phẩm thu được
Trang 252.6 Chương trình viết cho Ardunio
Lưu đồ thuật toán:
Chương trình chi tiết xem tại phụ lục
Giải thích lưu đồ thuật toán:
➢ Thiết lập các giá trị cần thiết cho các thanh ghi:
o Thiết chân D2 là đầu vào và kéo chân D2 lên trạng thái điện trở treo
o Kích hoạt ngắt ngoài và chọn chế độ ngắt cạnh xuống
o Thiết lập khung truyền, tốc độ truyền cho bộ USART
o Kích hoạt thanh ghi cho phép ngắt toàn cục
Bắt đầu
Thiết lập các giá trị cần thiết cho các thanh ghi, chân của Arduino
Delay(1000);
Ngắt xuất hiện
Chương trình phục vụ ngắt: Tăng biến đếm
z
a=z;
gui(a);
z=0;
Trang 26➢ Chờ trong 1s, trong 1s đó ngắt ngoài xảy ra và mỗi lần xảy ra ngắt thì tăng
giá trị của biến đếm z lên 1,
➢ Sau 1s thì tiến hành gửi giá trị z đó lên máy tính và xóa z về 0 rồi quay lại
Mở rộng đề tài: Có thể sử dụng thêm Module Wifi hoặc bluetooth để gửi dữ
liệu về máy tính từ 1 khoảng cách xa