Tải bản đầy đủ (.doc) (45 trang)

TỔNG QUAN VỀ NỀN TẢNG ARDUINO

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 (2.1 MB, 45 trang )

ĐẠI HỌC THÁI NGUYÊN
ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
BÁO CÁO
THỰC TẬP CHUYÊN NGÀNH
HỆ THỐNG ĐO NHIỆT ĐỘ MÔI TRƯỜNG DỰA TRÊN NỀN TẢNG
PHẦN CỨNG ARDUINO
Giảng viên hướng dẫn: Hồ Mậu Việt
Sinh viên thực hiện:Trần Thanh Luân
Hà Nam, tháng 12 năm 2013
MỤC LỤC
1
Mục lục
LỜI MỞ ĐẦU 3
CHƯƠNG 1: TỔNG QUAN VỀ NỀN TẢNG ARDUINO 4
1.1.Giới thiệu chung 4
1.2. Cấu trúc phần cứng 7
1.2.1. Cấu trúc chung 7
1.2.2. Khối nguồn 7
1.2.3. Bộ nhớ 8
1.2.4. Chân vào ra 8
1.3. Cấu trúc phần mềm và lập trình 9
1.3.1. Download và cài đặt Arduino IDE 9
1.3.2. Môi trường lập trình Arduino 10
1.3.3.Chương trinh điều khiển LED ở chân 13 11
1.3.4. Cấu trúc một chương trình Arduino 11
1.3.5. Compile và Upload chương trình lên bo 13
1.3.6. Tập lệnh cơ bản của Arduino 13
CHƯƠNG 2: THIẾT KẾ HỆ THỐNG 17
2.1. Vai trò của việc đo nhiệt độ môi trường 17
2.2. Thiết kế chi tiết 17
2.2.1. Mô hình hệ thống 17


2.2.2. Thiết kế phần cứng 19
2.2.3. Lưu đồ thuật toán 27
2.2.4. Sơ đồ mạch nguyên lý của hệ thống 28
Đặt vấn đề 29
PHỤ LỤC 39
NHẬN XÉT CỦA GIÁO VIÊN 44
2
LỜI MỞ ĐẦU
Arduino thực sự đã gây sóng gió trên thị trường người dùng DIY (là
những người tự chế ra sản phẩm của mình) trên toàn thế giới trong vài năm
gần đây, gần giống với những gì Apple đã làm được trên thị trường thiết bị di
động. Số lượng người dùng cực lớn và đa dạng với trình độ trải rộng từ bậc
phổ thông lên đến đại học đã làm cho ngay cả những người tạo ra chúng phải
ngạc nhiên về mức độ phổ biến.
3
Arduino thật ra là một bo mạch vi xử lý được dùng để lập trình tương
tác với các thiết bị phần cứng như cảm biến, động cơ, đèn hoặc các thiết bị
khác. Đặc điểm nổi bật của Arduino là môi trường phát triển ứng dụng cực kỳ
dễ sử dụng, với một ngôn ngữ lập trình có thể học một cách nhanh chóng
ngay cả với người ít am hiểu về điện tử và lập trình. Và điều làm nên hiện
tượng Arduino chính là mức giá rất thấp và tính chất nguồn mở từ phần cứng
tới phần mềm. Chỉ với khoảng $30, người dùng đã có thể sở hữu một bo
Arduino có 20 ngõ I/O có thể tương tác và điều khiển chừng ấy thiết bị.
Arduino ra đời tại thị trấn Ivrea thuộc nước Ý và được đặt theo tên một
vị vua vào thế kỷ thứ 9 là King Arduin. Arduino chính thức được đưa ra giới
thiệu vào năm 2005 như là một công cụ khiêm tốn dành cho các sinh viên của
giáo sư Massimo Banzi, là một trong những người phát triển Arduino, tại
trường Interaction Design Instistute Ivrea (IDII). Mặc dù hầu như không được
tiếp thị gì cả, tin tức về Arduino vẫn lan truyền với tốc độ chóng mặt nhờ
những lời truyền miệng tốt đẹp của những người dùng đầu tiên.

Nhứng ứng dụng nổi bật của Arduino là: máy in 3D, robot, thiết bị bay
không người lái UAV, game tương tác, điều khiển ánh sáng, kích hoạt chụp
ảnh tốc độ cao. Đó là những hệ thống tương đối phức tạp, nhưng với mức độ
tìm hiểu, thì đề tài “Thiết kế hệ thống và điều khiển nhiệt độ sử dụng nền
tảng Arduino”, cụ thể là cho một trang trại gà vừa có ý nghĩa thực tiễn vừa,
vừaphù hợp với những người mới bắt đầu tìm hiểu về Arduino.
CHƯƠNG 1: TỔNG QUAN VỀ NỀN TẢNG ARDUINO
1.1.Giới thiệu chung
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 trong cộng đồng nguồn mở (open-source). Tuy nhiên tại Việt
Nam Arduino vẫn còn chưa được biết đến nhiều.
4
Hình 1.1. Hình ảnh một Arduino
Arduino cơ bản là một nền tảng tạo mẫu mở về điện tử (open-source
electronics prototyping platform) được tạo thành từ phần cứng lẫn phần mềm.
Về mặt kĩ thuật có thể coi Arduino là 1 bộ điều khiển logic có thể lập trình
được. Đơn giản hơn, Arduino là một thiết bị có thể tương tác với ngoại cảnh
thông qua các cảm biến và hành vi được lập trình sẵn. Với thiết bị này, việc
lắp ráp và điều khiển các thiết bị điện tử sẽ dễ dàng hơn bao giờ hết. Một điều
không hề dễ dàng cho những ai đam mê công nghệ và điều khiển học nhưng
là người ngoại đạo và không có nhiều thời gian để tìm hiểu sâu hơn về về kĩ
thuật lập trình và cơ điện tử.
Hiện tại có rất nhiều loại vi điều khiển và đa số được lập trình bằng
ngôn ngữ C/C++ hoặc Assembly nên rất khó khăn cho những người có ít kiến
thức sâu về điện tử và lập trình. Nó là trở ngại cho mọi người muốn tạo riêng
cho mình một món đồ mang tính công nghệ. Do vậy đó là lí do Arduino được
phát triển nhằm đơn giản hóa việc thiết kế, lắp ráp linh kiện điện tử cũng như
lập trình trên vi xử lí và mọi người có thể tiếp cận dễ dàng hơn với thiết bị
điện tử mà không cần nhiều về kiến thức điện tử và thời gian. Sau đây là

nhưng thế mạnh của Arduino so với các nền tảng vi điều khiển khác:
- Chạy trên đa nền tảng: Việc lập trình Arduino có thể thể thực hiện
trên các hệ điều hành khác nhau như Windows, Mac Os, Linux trên
Desktop, Android trên di động.
5
- Ngôn ngữ lập trình đơn giản dễ hiểu.
- Nền tảng mở: Arduino được phát triển dựa trên nguồn mở nên phần
mềm chạy trên Arduino được chia sẻ dễ dàng và tích hợp vào các
nền tảng khác nhau.
- Mở rộng phần cứng: Arduino được thiết kế và sử dụng theo dạng
module nên việc mở rộng phần cứng cũng dễ dàng hơn.
- Đơn giản và nhanh: Rất dễ dàng lắp ráp, lập trình và sử dụng thiết bị.
- Dễ dàng chia sẻ: Mọi người dễ dàng chia sẻ mã nguồn với nhau mà
không lo lắng về ngôn ngữ hay hệ điều hành mình đang sử dụng.
Arduino có rất nhiều module, mỗi module được phát triển cho một ứng
dụng. Về mặt chức năng, các bo mạch Arduino được chia thành hai loại: loại
bo mạch chính có chip Atmega và loại mở rộng thêm chức năng cho bo mạch
chính. Các bo mạch chính về cơ bản là giống nhau về chức năng, tuy nhiên về
mặt cấu hình như số lượng I/O, dung lượng bộ nhớ, hay kích thước có sự khác
nhau. Một số bo có trang bị thêm các tính năng kết nối như Ethernet và
Bluetooth. Các bo mở rộng chủ yếu mở rộng thêm một số tính năng cho bo
mạch chính. Ví dụ như tính năng kết nối Ethernet, Wireless, điều khiển động
cơ.
Arduino được chọn làm bộ não xử lý của rất nhiều thiết bị từ đơn giản
đến phức tạp. Trong số đó có một vài ứng dụng thực sự chứng tỏ khả năng
vượt trội của Arduino do chúng có khả năng thực hiện nhiều nhiệm vụ rất
phức tạp. Sau đây là danh sách một số ứng dụng nổi bật của Arduino như
trong công nghệ in 3D, robot dò đường theo hướng có nguồn nhiệt, tạo một
thiết bị nhấp nháy theo âm thanh và đèn laser hay là một thiết bị báo cho
khách hàng biết khi nào bánh mì ra lò.

6
1.2. Cấu trúc phần cứng
1.2.1. Cấu trúc chung
Hình 1.2. Cấu trúc phần cứng của Arduino Uno
Arduino Uno là một bo mạch vi điều khiển dựa trên chip Atmega328.
Nó co 14 chân vào ra bằng tín hiệu số, trong đó có 6 chân có thể sử dụng để
điều chế đô rộng xung. Có 6 chân đầu vào tín hiệu tương tự cho phép chúng
ta kết nối với các bộ cảm biến bên ngoài để thu thập số liệu, sứ dụng một dao
động thạch anh tần số dao động 16MHz, có một cổng kết nối bằng chuẩn
USB để chúng ta nạp chương trình vào bo mạch và một chân cấp nguồn cho
mạch, một ICSP header, một nút reset. Nó chứa tất cả mọi thứ cần thiết để hỗ
trợ các vi điều khiển, nguồn cung cấp cho Arduino có thể là từ máy tính thông
qua cổng USB hoặc là từ bộ nguồn chuyên dụng được biến đổi từ xoay chiều
sang một chiều hoặc là nguồn lấy từ pin.
1.2.2. Khối nguồn
Arduino có thể được hỗ trợ thông qua kết nối USB hoặc với một nguồn
cung cấp điện bên ngoài. Các nguồn năng lượng được lựa chọn tự động. Hệ
thống vi điều khiển có thể hoạt động bằng một nguồn cung cấp bên ngoài từ
6V đến 20V. Tuy nhiên, nếu cung cấp với ít hơn 7V, chân 5V có thể cung cấp
ít hơn 5V và hệ thống vi điều khiển có thể không ổn định. Nếu cấp nhiều hơn
12V, bộ điều chỉnh điện áp có thể quá nóng và gây nguy hiểm cho bo mạch.
Phạm vi khuyến nghị là 7V đến 12V.
7
+ Chân Vin: Điện áp đầu vào Arduino khi chúng ta dùng nguồn điện
bên ngoài (khác với nguồn 5V lấy từ USB hoặc nguồn thông qua jack cắm
nguồn riêng). Chúng ta có thể cung cấp nguồn thông qua chân này.
+ Chân 5V: Cung cấp nguồn vi điều khiển và các bộ phận khác trên bo
mạch và cung cấp nguồn cho các thiết bị ngoại vi khi kết nối tới bo mạch.
+ Chân 3,3V: Cung cấp nguồn cho các thiết bị cảm biến.
+ Chân GND: Chân nối đất.

+ Chân Aref: Tham chiếu điện áp đầu vào analog.
+ Chân IOREF: Cung cấp điện áp cho các vi điều khiển hoạt động.
Một shield được cấu hình đúng có thể đọc điện áp chân IOREF và lựa chọn
nguồn thích hợp hoặc kích hoạt bộ chuyển đổi điện áp để là việc ở mức 5V
hoặc 3,3V.
1.2.3. Bộ nhớ
Chip Atmega328 có 32KB (với 0,5KB sử dụng cho bootloader). Nó
còn có 2KB SRAM và 1KB EEPROM.
1.2.4. Chân vào ra
Aduino Uno có 14 chân digital (chân 0 – 13) và 6 chân analog (chân
A0 – A5).
Các chândigital chúng ta có thể cấu hình để làm chân nhần dữ liệu vào
từ các thiết bị ngoại vi hoặc làm chân để truyền tín hiêu ra các thiết bị ngoại
vi. Bằng cách sử dụng các hàmpinMode(), digitalWrite() và digitalRead().
Mỗi chân có thể cung cấp hoặc nhận một dòng điện tối đa 40mA và có một
điện trở kéo nội (mặc định không nối) 20-50 kOhms. Ngoài ra có một số chân
có chức năng đặc biệt:
+ Chân 0 (Rx): Chân được dùng để nhận dữ liệu nối tiếp.
+ Chân 1 (Tx): Chân được dùng để truyền dữ liệu nối tiếp.
8
+ Chân 2 và 3: Chân ngắt ngoài.
+ Chân 3, 5, 6, 9, 10 và 11: Chân vào/ra số hoặc để điều chế độ rộng
xung (chân 13 được nối với một LED đơn, sáng tắt tương ứng với mức logic
của chân này).
+ Chân 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK): Chuẩn giao tiếp
SPI.
Các chân analog có độ phân giải 10 bit (tương ứng với 1024 mức giá trị
khác nhau) ứng với mức từ 0 – 5V. Ngoài ra một số chân có các chức năng
đặc biệt:
+ Chân A4 (SDA) và A5 (SCL): Hỗ trợ truyền thông TWI.

1.3. Cấu trúc phần mềm và lập trình
1.3.1. Download và cài đặt Arduino IDE
Để có thể lập trình cho bo Arduino, trước hết ta cần download và cài
môi trường viết chương trình cho Arduino.
Download tại: />Hướng dẫn cài đặt cho người dùng Windows(người sử dụng hệ điều
hành Mac thì không cần phải cài driver).
- Kết nối bo Arduino với máy tính, và để máy tính tự động cài đặt
driver USB. Tuy nhiên việc tự động cài driver sẽ có thể không thành công.
- Nếu không thành công thì: Mở Device Manager của Windows trên
Control Panel
- Ở mục Ports (COM & LPT) bạn sẽ thấy mục Arduino UNO
(COMxx)
- Nhấp phải vào mục Arduino UNO (COMxx) và chọn Update
Driver Software.
- Trên cửa sổ hiện ra, chọn Browse my computer for driver software.
9
1.3.2. Môi trường lập trình Arduino
Thiết kế bo mạch nhỏ gọn, trang bị nhiều tính năng thông dụng mang
lại nhiều lợi thế cho Arduino, tuy nhiên sức mạnh thực sự của Arduino nằm ở
phần mềm. Môi trường lập trình đơn giản dễ sử dụng, ngôn ngữ lập trình dễ
hiểu và dựa trên nền tảng C/C++ rất quen thuộc với người làm kỹ thuật. Và
quan trọng là số lượng thư viện code được viết sẵn và Chia sẻ bởi cộng đồng
nguồn mở là cực kỳ lớn.
Hình 1.3. Môi trường lập trình cho Arduino
Giao diện môi trường lập trình Arduino gồm có các menu, thanh
toolbar và phần soạn chương trình. Chương trình điều khiển Arduino được
gọi là "sketch".
Trong menu File\Examples có rất nhiều chương trình ví dụ. Một trong
những chương trình đơn giản nhất để thử nghiệm bo Arduino là "Blink" trong
File\Examples\01.Basics. Chương trình này chỉ làm nhấp nháy đèn LED trên

bo (nối với chân 13).
10
1.3.3.Chương trinh điều khiển LED ở chân 13
/* Nhấp nháy led với chu kì 2 giây, 1 giây tắt, 1 giây sáng */
// Pin 13 được kết nối với 1 led đơn
// đặt cho nó một tên
int led = 13;
// chương trình con setup chạy một lần khi bắt đầu hoặc nhấn reset
void setup()
{
// thiết lập ngõ ra digital
pinMode(led, OUTPUT);
}
// vòng lặp chạy vô tận
void loop()
{
digitalWrite(led, HIGH); //led sáng (mức áp cao)
delay(1000); // chờ một giây
digitalWrite(led, LOW); // tắt led bằng cách hạ mức áp xuông mức thấp
delay(1000); // chờ một giây
}
1.3.4. Cấu trúc một chương trình Arduino
Qua ví dụ trên ta có thể thấy cấu trúc của một chương trình Arduino
gồm có các phần sau:
11
Hình 1.4. Vòng đời của chương trình Arduino
Phần 1: Khai báo biến và các const.
VD: int led = 13;
Phần 2: Setup
Phần này chỉ được gọi một lần duy nhất sau khi chạy chương

trình trên Arduino.
Nhiệm vụ của nó là gán các giá trị ban đầu cho các biến, và các
lệnh setup khác như định nghĩa ngõ vào/ra hoặc setup thông số cho
cổng serial v.v
void setup()
{
// thiết lập ngõ ra digital
pinMode(led, OUTPUT);
}
Phần 3: Vòng lặp chính loop.
Đây là phần chính của chương trình. Tất cả nội dung trong phần
này sẽ được lập lại đến khi tắt nguồn của bo Arduino.
void loop()
12
{
digitalWrite(led, HIGH); //led sáng (mức áp cao)
delay(1000); // chờ một giây
digitalWrite(led, LOW); // tắt led bằng cách hạ mức áp
xuống
// mức thấp
delay(1000); // chờ một giây
}
1.3.5. Compile và Upload chương trình lên bo
- Chọn loại bo (ví dụ Arduino Uno) ở menu Tools\Boards\Arduino.
- Chọn cổng COM ở menu Tools\Serial Port.
- Nhấn nút Upload trên thanh toolbar để bắt đầu compile và upload
chương trình lên bo.
Hình 1.5. Chạy chương trình ví dụ Blink
1.3.6. Tập lệnh cơ bản của Arduino
1.3.6.1. Lệnh điều khiển cấu trúc

 if
if (<điều kiện>) {
13
// Lệnh thực thi nếu điều kiện đúng
}
 if … else
if (<điều kiện>) {
// Lệnh thực thi nếu điều kiện đúng
} else {
// Lệnh thực thi nếu điều kiện sai
}
 for
for (<giá trị khởi tạo>; <điều kiện>; <thay đổi giá trị>){
// Lệnh thực thi nếu điều kiện đúng
}
 switch case
switch (<biến>) {
case <giá trị 1>:
// Lệnh thực thi nếu <biến> bằng <giá trị 1>
Break;
case <giá trị 2>:
// Lệnh thực thi nếu <biến> bằng <giá trị 2>
Break;

case <giá trị n>:
// Lệnh thực thi nếu <biến> bằng <giá trị n>
Break;
[default:
// Lệnh thực thi nếu <biến> không bằng giá trị nào]
}

 while
while (<điều kiện>) {
// Lệnh thực thi nếu <điều kiện> đúng
}
 do … while
do {
// Lệnh thực thi
While (<điều kiện>)
Ngoài ra còn một số lệnh khác như continue, break, return, goto…
1.3.6.2. Toán tử đại số
= Phép gán bằng
+ Phép cộng
- Phép trừ
* Phép nhân
14
/ Phép chia lấy phần nguyên
% Phép chưa lấy phần dư
1.3.6.3. Toán tử so sánh
== So sánh bằng
!= So sánh khác
< So sánh nhỏ hơn
> So sánh lớn hơn
<=
So sánh nhỏ hơn hoặc
bằng
>= So sánh lớn hơn hoặc bằng
1.3.6.4. Toán tử logic
&& AND
|| OR
! NOT

1.3.6.5. Kiểu dữ liệu
Ngôn ngữ lập trình cho Arduino hỗ trợ rất nhiều kiểu dữ liệu như: void,
boolean, char, unsigned char, byte, int, unsigned int, word, long, unsigned
long, short, float, double, string – mảng char, string – đối tượng, mảng.
1.3.6.6. Hàm vào ra số
 pinMode(pin, mode): cấu hình chân là vào hay ra.
pin: số chân digital.
mode: INPUT, OUTPUT, hoặc INPUT_PULLUP.
 digitalWrite(pin, value): xuất giá trị mức cao hoặc thấp ra chân I/O số.
pin: số chân digital.
value: HIGH, LOW.
 digitalRead(pin): đọc giá trị chân (HIGH hoặc LOW).
1.3.6.7. Hàm vào ra tương tự
 analogReference(type): Định cấu hình điện áp tham chiếu được sử
dụng cho đầu vào tương tự.
type: DEFAULT, INTERNAL, INTERNAL1V1, INTERNAL2V56,
EXTERNAL.
 analogRead(pin): đọc giá trị từ chân tương tự.
pin: số chân analog.
 analogWrite(pin, value): xuất giá trị tới chân analog (PWM).
pin: số chân analog.
15
Value: độ rộng xung (0 - 255).
1.3.6.8. Hàm vào ra nâng cao
 tone()
 noTone()
 shiftOut()
 shiftIn()
 pulseIn()
1.3.6.9. Hàm thời gian

 millis()
 micros()
 delay()
 delayMicroseconds()
Ngoài những hàm kể trên, Arduino còn một số hàm khác và cách sử dụng
từng hàm trong phần Help/Reference.Và để có thể giao tiếp dễ dàng hơn với
các thiết bị ngoại vi, ta có thể sử dụng các thư viện bổ trợ được chia sẻ rộng
rãi trên trang chủ />16
CHƯƠNG 2: THIẾT KẾ HỆ THỐNG
2.1. Vai trò của việc đo nhiệt độ môi trường
Ngày này, điều khiển tự động đã trở thành một nhu cầu không thể thiếu
được trong hệ thống công nghiệp. Một trong các yếu tố được điều khiển nhiều
trong hệ thống công nghiệp đó là nhiệt độ. Nhiệt độ được đo, điều khiển theo
nhu cầu sử dụng ví dụ như trong các hệ thống nhiệt của nồi hơi, các lò ấp, các
lò sấy… Các hệ thống đo và điều khiển nhiệt hiện nay xuất hiện nhiều trên thị
trường với nhiều phương pháp đo và điều khiển khác nhau. Mỗi phương pháp
đều có ưu và nhược điểm riêng. Để giải quyết các vấn đề đó, với những kiến
thức đã học về kĩ thuật điện, điện tử cùng sự tìm hiểu thêm về kĩ thuật vi điều
khiển, em đã tính toán và đưa ra giải pháp điều khiển nhiệt độ ứng dụng vi xử
lý với mạch thiết kế đơn giản dễ dàng thiết kế và nâng cấp. Trong thực tế
chúng ta thấy việc đo nhiệt độ môi trường là rất cần thiết và thông qua việc đo
nhiệt đọ đó chúng ta ứng dụng vào việc điều khiển bật tắt thiết bị điện hoặc
ứng dụng vào các lĩnh vực khác.
2.2. Thiết kế chi tiết
2.2.1. Mô hình hệ thống
Mô hình hệ thống gồm một khối xử lý trung tâm là Arduino Uno đóng
vai tiếp nhận và xử lý toàn bộ các thông tin mà các thiết bị ngoại vi gửi về,
đồng thời gửi các lệnh điều khiển ngược trở lại đến các thiết bị ngoại vi. Khôi
xử lý trung tâm được kết nối với cảm biến nhiệt độ để thu thập thông nhiệt độ
môi trường đưa về khối xử lý trung tâm xử lý và hiện thị giá trị nhiệt độ lên

màn hình hiện thị LCD. Bài toán thiết kế ở đây là ứng dụng việc đo nhiệt độ
môi trường vào để điều khiển bật tắt một số thiết bị điện và điều khiển quạt.
17
Hình 2.1. Sơ đồ khối hệ thống
18
2.2.2. Thiết kế phần cứng
Hình 2.2. Sơ đồ nguyên lý
Hệ thống của chúng ta gồm các khối chính sau:
- Khối xử lý trung tâm: Arduino Uno.
- Khối cảm biến: Cảm biến nhiệt độ DS18B20.
- Khối hiển thị: LCD 16x2.
- Khối quạt mát.
- Khối đèn sưởi.
- Khối nguồn: lấy từ USB hoặc nguồn ngoài.
Nguyên lý hoạt động:
Cảm biến nhiệt độ có nhiệm vụ đo nhiệt độ của chuồng và gửi về cho
khối xử lý trung tâm. Khi nhiệt độ vượt quá mức T
H
hoặc thấp hơn T
L
được
thiết lập trước thì ta tương ứng sẽ kích hoạt hệ thống quạt mát hay đèn sưởi.
19
Nhiệt độ hiện tại của chuồng được hiển thị lên LCD để ta có thể quan sát,
điều chỉnh ngưỡng nhiệt độ sao cho hợp lý.
2.2.1.1.Khối cảm biến: Cảm biến nhiệt độ DS18B20.
 Tìm hiểu cảm biến nhiệt độ DS18B20
Cảm biến đo nhiệt độ DS18b20 sử dụng chuẩn giao tiếp 1 WIRE (Sử
dụng duy nhất 1 chân để truyền dữ liệu), đường dẫn tín hiệu và đường dẫn
điện áp nguồn nuôi có thể dùng chung trên một dây dẫn. Ngoài ra, nhiều cảm

biến có thể dùng chung trên một đường dẫn (Rất thích hợp với các ứng dụng
đo lường đa điểm).
Các đặc điểm kỹ thuật của cảm biến DS1820 có thể kể ra một cách tóm
tắt như sau:
 Dải đo nhiệt độ -55
0
C đến 125
0
C, từng bậc 0,5
0
C, có thể đạt độ chính
xác đến 0,1
0
C bằng việc hiệu chỉnh qua phần mềm.
 Độ phân giải do người dùng lựa chọn từ 9-12 bit.
 Điện áp nguồn nuôi có thể thay đổi trong khoảng rộng (từ 3,0V -
5,5V).
 Dòng tiêu thụ tại chế độ nghỉ cực nhỏ.
 Thời gian lấy mẫu và biến đổi thành số tương đối nhanh, không quá
200ms.
 Mỗi cảm biến có một mã định danh duy nhất 64 bit chứa trong bộ
nhớ ROM trên chip (on chip).
 Cấu tạo
Hình 2.3. Hình ảnh thực tế và sơ đồ chân
20
Với kiểu chân TO-92 ta có chức năng các chân như sau:
+ Chân 1 (GND): Chân nối đất.
+ Chân 2 (DQ): Chân dữ liệu vào/ra.
+ Chân 3 (V
DD

): Chân nguồn.
Hình 2.4. Mối quan hệ giữa nhiệt độ và dữ liệu
Hình 2.5. Sơ đồ khối
 Cấp nguồn: DS18b20 có thể được cấp bởi nguồn ngoài ở chân V
DD
hoặc
có thể hoạt động ở chế độ “ký sinh”.
21
Hình 2.6. Cấp nguồn cho DS18B20
Mỗi cảm biến DS18B20 có một dãy mã 64 bit duy nhất được lưu trong
bộ nhớ ROM từ khi sản xuất bằng kỹ thuật laze.
Dãy mã này được chia thành 3 nhóm:
- 8 bit đầu tiên là mã định danh của họ một dây, mã của DS18B20 là
28h.
- 48 bit tiếp theo là mã số xuất xưởng duy nhất.
- 8 bít có ý nghĩa nhất là mã kiểm tra CRC.
 Tập lệnh của DS18B20
- READ ROM (33h): Cho phép đọc ra 64 bit mã đã khắc bằng laser
trên ROM, bao gồm: 8 bit mã định tên linh kiện (10h), 48 bit số xuất xưởng, 8
bit kiểm tra CRC. Lệnh này chỉ dùng khi trên bus có 1 cảm biến DS1820, nếu
không sẽ xảy ra xung đột trên bus do tất cả các thiết bị tớ cùng đáp ứng.
- MATCH ROM (55h): Lệnh này được gửi đi cùng với 64 bit ROM
tiếp theo, cho phép bộ điều khiển bus chọn ra chỉ một cảm biến DS1820 cụ
thể khi trên bus có nhiều cảm biến DS1820 cùng nối vào. Chỉ có DS1820 nào
có 64 bit trên ROM trung khớp với chuỗi 64 bit vừa được gửi tới mới đáp ứng
lại các lệnh về bộ nhớ tiếp theo. Còn các cảm biến DS1820 có 64 bit ROM
không trùng khớp sẽ tiếp tục chờ một xung reset. Lệnh này được sử dụng cả
22
trong trường hợp có một cảm biến một dây, cả trong trường hợp có nhiều cảm
biến một dây.

- SKIP ROM (CCh): Lệnh này cho phép thiết bị điều khiển truy nhập
thẳng đến các lệnh bộ nhớ của DS1820 mà không cần gửi chuỗi mã 64 bit
ROM. Như vậy sẽ tiết kiệm được thời gian chờ đợi nhưng chỉ mang hiệu quả
khi trên bú chỉ có một cảm biến.
- SEARCH ROM (F0h): Lệnh này cho phép bộ điều khiển bus có thể
dò tìm được số lượng thành viên tớ đang được đấu vào bus và các giá trị cụ
thể trong 64 bit ROM của chúng bằng một chu trình dò tìm.
- ALARM SEARCH (ECh): Tiến trình của lệnh này giống hệt như
lệnh Search ROM, nhưng cảm biến DS1820 chỉ đáp ứng lệnh này khi xuất
hiện điều kiện cảnh báo trong phép đo nhiệt độ cuối cùng. Điều kiện cảnh báo
ở đây được định nghĩa là giá trị nhiệt độ đo được lớn hơn giá trị TH và nhỏ
hơn giá trị TL là hai giá trị nhiệt độ cao nhất và nhiệt độ thấp nhất đã được đặt
trên thanh ghi trong bộ nhớ của cảm biến.
Sau khi thiết bị chủ (thường là một vi điều khiển) sử dụng các lệnh
ROM để định địa chỉ cho các cảm biến một dây đang được đấu vào bus, thiết
bị chủ sẽ đưa ra các lệnh chức năng DS1820. Bằng các lệnh chức năng thiết bị
chủ có thể đọc ra và ghi vào bộ nhớ nháp (scratchpath) của cảm biến DS1820.
khởi tạo quá trình chuyển đổi giá trị nhiệt độ đo được và xác định chế độ cung
cấp điện áp nguồn. Các lệnh chức năng có thể được mô tả ngắn gọn như sau:
- WRITE SCRATCHPAD (4Eh): Lệnh này cho phép ghi 2 byte dữ
liệu vào bộ nhớ nháp của DS1820. Byte đầu tiên được ghi vào thanh ghi TH
(byte 2 của bộ nhớ nháp) còn byte thứ hai được ghi vào thanh ghi TL (byte 3
của bộ nhớ nháp). Dữ liệu truyền theo trình tự đầu tiên là bit có ý nghĩa nhất
và kế tiếp là những bit có ý nghĩa giảm dần. Cả hai byte này phải được ghi
trước khi thiết bị chủ xuất ra một xung reset hoặc khi có dữ liệu khác xuất
hiện.
- READ SCRATCHPAD (BEh): Lệnh này cho phép thiết bị chủ đọc
nội dung bộ nhớ nháp. Quá trình đọc bắt đầu từ bit có ý nghĩa nhấy của byte 0
và tiếp tục cho đến byte rhứ 9 (byte 8 – CRC). Thiết bị chủ có thể xuất ra một
23

xung reset để làm dừng quá trình đọc bất kỳ lúc nào nếu như chỉ có một phần
của dữ liệu trên bộ nhớ nháp cần được đọc.
- COPYSCRATCHPAD (48h): Lệnh này copy nội dung của hai thanh
ghi TH và TL (byte 2 và byte 3) vào bộ nhớ EEPROM. Nếu cảm biến được sử
dụng trong chế dộ cấp nguồn l bắt đầu việc đo.
- CONVERT T (44h): Lệnh này khởi động một quá trình đo và
chuyển đổi giá trị nhiệt độ thành số (nhị phân). Sau khi chuyển đổi giá trị kết
quả đo nhiệt độ được lưu trữ trên thanh ghi nhiệt độ 2 byte trong bộ nhớ nháp
Thời gian chuyển đổi không quá 200 ms, trong thời gian đang chuyển đổi nếu
thực hiện lệnh đọc thì các giá trị đọc ra đều bằng 0.
- READ POWER SUPPLY (B4h): Một lệnh đọc tiếp sau lệnh này sẽ
cho biết DS1820 đang sử dụng chế độ cấp nguồn như thế nào, giá trị đọc
được bằng 0 nếu cấp nguồn bằng chính đường dẫn dữ liệu và bằng 1 nếu cấp
nguồn qua một đường dẫn riêng.
 Ứng dụng: DS18B20 có rất nhiều ứng dụng, nổi bật là:
+ Điều khiển nhiệt độ (Thermostatic controls).
+ Hệ thống công nghiệp (Industrial systems).
+ Sản phẩm tiêu dùng (Consumer products).
+ Hay bất cứ hệ thống nhạy cảm với nhiệt độ nào.
2.2.1.2.Khối xử lý: Arduino Uno
Tham khảo mục 1.2.
2.2.1.3.Khối hiển thị: LCD 16x2
 Hình dáng và kích thước
Có rất nhiều loại LCD với nhiều hình dáng và kích thước khác nhau,
trên hình 1 là loại LCD thông dụng.
24
Hình 2.7. LCD 16x2
Khi sản xuất LCD, nhà sản xuất đã tích hợp chíp điều khiển (HD44780)
bên trong lớp vỏ và chỉ đưa các chân giao tiếp cần thiết. Các chân này được
đánh số thứ tự và đặt tên như hình sau:

Hình 2.8. Sơ đồ chân của LCD
- Chức năng các chân
Chân Ký hiệu Mô tả
1 V
SS
Đất
2 V
DD
+5V
3 V
EE
Nguồn điều khiển tương phản
4 RS
RS = 0: chọn thanh ghi lệnh
RS = 1: chọn thanh ghi dữ liệu
5 R/W
R/W = 0: ghi
R/W = 1: đọc
6 E Cho phép
7 D0 Dữ liệu
8 D1 Dữ liệu
9 D2 Dữ liệu
10 D3 Dữ liệu
11 D4 Dữ liệu
12 D5 Dữ liệu
13 D6 Dữ liệu
25

×