MỤC LỤC 1.1 Arduino là gì?..............................................................................................................................3 1.2 Phần cứng....................................................................................................................................3 1.3 Shield...........................................................................................................................................4 1.4 Phần mềm....................................................................................................................................5 1.5 Các loại bo mạch Arduino...........................................................................................................6 1.6 Arduino Uno R3..........................................................................................................................7 1.7 Cảm biến đo nhiệt độ, đô ẩm. ̣ ......................................................................................................8 1.8 Tổng quan về LCD......................................................................................................................9 1.8.1 Chức năng các chân...........................................................................................................10 1.8.2 Các tâp lê ̣ nh của LCD ̣ ........................................................................................................11 1.8.3 Giao tiếp với LCD.............................................................................................................12 1.8.4 Khởi tạo LCD....................................................................................................................13 1.9 Module giải mã cho LCD..........................................................................................................14 1.10 Modoule RTC............................................................................................................................15 2 Yêu cầu phần cứng............................................................................................................................16 2.1 Sơ đồ khối..................................................................................................................................16 2.2 Chức năng các khối....................................................................................................................16 2.2.1 Khối cảm biến....................................................................................................................16 2.2.2 Khối hiển thị......................................................................................................................16 2.2.3 Khối thời gian thực (RTC : Real Time Clock)...................................................................16 2.2.4 Board arduino Uno R3 (Hệ thống – Bộ xử lí trung tâm)....................................................17 3 Sản phẩm hoàn thiện.........................................................................................................................17 3.1 Hiển thị RTC.............................................................................................................................18 3.2 Hiển thì nhiệt độ, độ ẩm.............................................................................................................19 4 Code phần cứng.................................................................................................................................21 5 Mục tiêu phát triển............................................................................................................................26 6 Kết quả đạt được...............................................................................................................................27 7 Hạn chế và hướng phát triển.............................................................................................................27 2 1 Tổng quan về Arduino. 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. Vậy Arduino là “cái” gì
Trang 1LỜI CẢM ƠN
Nhóm thực hiện đề tài xin gửi lời cảm ơn đến quý Thầy, Cô trong Khoa Điện –
Điện tử, đặc biệt là quý Thầy, Cô trong bộ môn Điện Tử Viễn Thông đã giảng dạy và
truyền đạt kiến thức chuyên ngành để giúp nhóm trong thời gian thực hiện đề tài
Đặc biệt nhóm xin gửi lời cảm ơn chân thành đến thầy Nguyễn Lê Nhật Viễn, người đã
tận tình hướng dẫn, chỉ bảo, giúp đỡ về mặt chuyên môn cũng như tạo điều kiện thuận lợi
để nhóm thực hiện và hoàn thành đề tài
Nhóm thực hiện đồ án cũng gửi lời cảm ơn tới các bạn trong lớp đã giúp đỡ, góp ý
để nhóm thực hiện hoàn thành đề tài này tốt hơn và đúng thời hạn
Trong quá trình thực hiện đề tài không thể tránh khỏi những sai sót, kính mong quý Thầy,
Cô góp ý và chỉ dẫn thêm để nhóm thực hiện tốt hơn trong các đề tài, đồ án tiếp theo
Xin chân thành cảm ơn!
Nhóm thực hiện đề tài
Võ Văn HuyPhạm Văn HuyTrần Quốc Vũ
Trang 2MỤC LỤC
1.1 Arduino là gì? 3
1.2 Phần cứng 3
1.3 Shield 4
1.4 Phần mềm 5
1.5 Các loại bo mạch Arduino 6
1.6 Arduino Uno R3 7
1.7 Cảm biến đo nhiệt độ, đô ̣ ẩm 8
1.8 Tổng quan về LCD 9
1.8.1 Chức năng các chân 10
1.8.2 Các tâ ̣p lê ̣nh của LCD 11
1.8.3 Giao tiếp với LCD 12
1.8.4 Khởi tạo LCD 13
1.9 Module giải mã cho LCD 14
1.10 Modoule RTC 15
2 Yêu cầu phần cứng 16
2.1 Sơ đồ khối 16
2.2 Chức năng các khối 16
2.2.1 Khối cảm biến 16
2.2.2 Khối hiển thị 16
2.2.3 Khối thời gian thực (RTC : Real Time Clock) 16
2.2.4 Board arduino Uno R3 (Hệ thống – Bộ xử lí trung tâm) 17
3 Sản phẩm hoàn thiện 17
3.1 Hiển thị RTC 18
3.2 Hiển thì nhiệt độ, độ ẩm 19
4 Code phần cứng 21
5 Mục tiêu phát triển 26
6 Kết quả đạt được 27
7 Hạn chế và hướng phát triển 27
Trang 31 Tổng quan về Arduino.
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 Vậy Arduino là “cái” gì?
1.1 Arduino là gì?
Arduino là một nền tảng điện tử
mã nguồn mở, với phần cứng và phầnmềm linh hoạt, dễ dàng sử dụng Nódành cho nghệ sĩ, nhà thiết kế, người cósở thích và bất cứ ai quan tâm đến việctạo các đối tượng tương tác với nhauhoặc với môi trường
Arduino thường gồm một boardmạch điện tử có vi xử lý, có thể kết nốivới máy tính thông qua cổng USB Bằngphần mềm Arduino trên máy tính, ngườidùng có thể viết và nạp chương trìnhxuống board, để thực hiện các tác vụnhư mong muốn Người dùng có thể ứngdụng Arduino để lập trình tương tác vớiđèn, động cơ, cảm biến hoặc các thiết bịkhác
Mô hình Arduino thì đơn giản vậy, nhưng sự phổ biến và nổi tiếng của nó thì thật
là kinh ngạc
1.2 Phần cứng
Một bảng mạch Arduino bao gồm một bộ vi điều khiển Atmel AVR 8-bit và các
thành phần bổ sung để tạo điều kiện lập trình và tích hợp cách mạch điện khác với bảng
mạch Arduino Một khía cạnh quan trọng của Arduino dựa trên tiêu chuẩn kết nối thống
nhất, cho bo mạch CPU được kết nối với một loạt mô-đun chuyển đổi tiện ích bổ sung
Hình 1.1 Logo Arduino
Trang 4được gọi là shield (bộ chắn) Một số shield giao tiếp bo mạch Arduino trực tiếp từ các
chân nối khác nhau, nhưng shield được định địa chỉ riêng biệt thông qua bus kết nối nối
tiếp I² C, cho phép shield được xếp chồng lên nhau và được sử dụng song song nhau
Arduino chuẩn sử dụng megaAVR là tổ chợp chip, đặc biệt là ATmega8 , Atmega168,
ATmega328, ATmega1280, và ATmega2560 Một số ít các bộ vi xử lý khác đã được sử
dụng tương thích chuẩn Arduino Hầu hết bo mạch bao gồm một bộ điều áp tuyến tính
5V và một bộ dao động tinh thể 16 MHz (hoặc cộng hưởng gốm trong một số biến thể
dao động), mặc dù một số thiết kế như LilyPad chạy ở 8 MHz và chia sẻ bộ điều áp trên
bo mạch do hạn chế thông số định dạng thể Bộ vi điều khiển của Arduino cũng được lập
trình trước nhờ một bộ nạp khởi động theo cách đơn giản là tải lên các chương trình vào
bộ nhớ flash trên chip, so với các thiết bị khác thường cần một lập trình viên bên ngoài hỗ
trợ khi sử dụng
Ở cấp độ khái niệm, khi sử dụng xếp chồng phần mềm Arduino, tất cả bo mạch
được lập trình nhờ kết nối nối tiếp RS-232, nhưng cách này được thực hiện khác nhau
theo từng phiên bản của phần cứng Bảng mạch Arduino nối tiếp chứa một mạch dịch
cấp để chuyển đổi giữa tín hiệu cấp-RS-232 và cấp-TTL Bảng mạch Arduino hiện nay
được lập trình thông qua cổng USB, cài đặt này sử dụng chip chuyển đổi USB-sang-nối
tiếp như FTDI FT232 Một số biến thể, chẳng hạn như Arduino Mini và Boarduino không
chính thức, sử dụng một bảng mạch có thể tháo rời chuyển đổi USB-sang-nối tiếp hoặc
cáp, Bluetooth hoặc các phương pháp khác (Khi được sử dụng với các công cụ vi điều
khiển truyền thống thay vì Arduino IDE, lập trình AVR ISP chuẩn phải được sử dụng.)
Bảng mạch Arduino luôn cho thấy hầu hết các chân nối I/O pins của vi điều khiển
để sử dụng bởi các mạch khác Các Diecimila, Duemilanove , và Uno hiện tại cung cấp
14 chân I/O số, sáu trong số đó có thểtạo tiến hiệu điều biến độ rộng xung, và sáu đầu vào
tương tự Các chân nằm ở mặt trên bo mạch, thông qua đầu chân cái 0.10-inch (2,5 mm)
Một số shield ứng dụng nhúng plug-in cũng đã có ở dạng thương mại
Bo mạch Arduino Nano và Bare Bones tương thích Arduino có thể cung cấp các
chân cắm đực ở mặt duwois của bo mạch để kết nối các bo mạch khác không cần hàn
Có rất nhiều bo mạch tương thích Arduino và bo mạch dẫn xuất từ Arduino Một
số có chức năng tương đương với Arduino và có thể được sử dụng thay thế lẫn cho nhau
Phần lớn là Arduino cơ bản với việc bổ sung các trình điều khiển đầu ra phổ biến, thường
sử dụng trong giáo dục cấp trường để đơn giản hóa việclắp ráp các xe đẩy và robot nhỏ
Những biến thể khác là tương đương về điện nhưng thay đổi tham số dạng (form-factor),
đôi khi cho phép tiếp tục sử dụng các Shield, đôi khi không Một số biến thể sử dụng bộ
vi xử lý hoàn toàn khác, với mức độ khác nhau về tính tương thích
1.3 Shield
Arduino và bảng mạch Arduino tương thích sử dụng các shiel - bo mạch mạch
điện được cắm vào bo mạch Arduino chính thường thông qua các đầu chân cắm trên bo
mạch Arduino chủ Shiel có thể cung cấp chức năng điều khiển động cơ, GPS, kết nối
Trang 5mạng ethernet, màn hình LCD, hoặc bảng mạch khung (tạo mẫu) Một số shield cũng có
thể được chế tạo để thực hiện DIY
1.4 Phần mềm
Môi trường phát triển tích hợp (IDE) Arduino là một ứng dụng đa nền tảng được
viết bằng Java, và được dẫn xuất từ IDE cho ngôn ngữ lập trình xử lý và các dự án lắp
ráp Nó được thiết kế để làm nhập môn lập trình cho các nhà lập trình và những người
mới sử dụng khác không quen thuộc với phát triển phần mềm Nó bao gồm một trình
soạn thảo mã với các tính năng như làm nổi bật cú pháp, khớp dấu ngặc khối chương
trình, và thụt đầu dòng tự động, và cũng có khả năng biên dịch và tải lên các chương trình
vào bo mạch với một nhấp chuột duy nhất Một chương trình hoặc mã viết cho Arduino
được gọi là "sketch"
Chương trình Arduino được viết bằng C hoặc C++ Arduino IDE đi kèm với một
thư viện phần mềm được gọi là "Wiring" từ dự án lắp ráp ban đầu, cho hoạt động đầu
vào/đầu ra phổ biến trở nên dễ dàng hơn nhiều Người sử dụng chỉ cần định nghĩa hai
hàm để thực hiện một chương trình điều hành theo chu kỳ :
setup( ) : hàm chạy một lần duy nhất vào lúc bắt đầu của một chương trình dùng để khởi
tạo các thiết lập
loop( ) : hàm được gọi lặp lại liên tục cho đến khi bo mạch được tắt đi.
Khi các bạn bật điện bảng mạch Arduino, reset hay nạp chương trình mới, hàm setup() sẽ
được gọi đến đầu tiên Sau khi xử lý xong hàm setup(), Arduino sẽ nhảy đến hàm loop()
và lặp vô hạn hàm này cho đến khi bạn tắt điện bo mạch Arduino Chu trình đó có thể mô
tả trong hình dưới đây:
Hình 1.2 Lưu đồ chương trình
Arduino IDE sử dụng GNU toolchain và AVR libc để biên dịch chương trình, và
sử dụng avrdude để tải lên các chương trình vào bo mạch chủ
Trang 6Do nền tảng Arduino sử dụng vi điều khiển Atmel, môi trường phát triển của
Atmel, AVR Studio hoặc Atmel Studio mới hơn, cũng có thể được sử dụng để phát triển
phần mềm cho các Arduino
1.5 Các loại bo mạch Arduino
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 (thường được
gọi là shield)
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ơ v.v…
Hình 1.3 Các loại Board Arduino
Trang 71.6 Arduino Uno R3
Hình 1.4 Board Arduino Uno R3
Hình trên là cận cảnh con Arduino Uno Đối với chúng ta lập trình cho Arduino thì trước
tiên quan tâm những thành phần được đánh số ở trên:
(1) Cổng USB (loại B): đây là cổng giao tiếp để ta upload code từ PC lên vi điểu
khiển Đồng thời nó cũng là giao tiếp serial để truyền dữ liệu giữa vi điểu khiển
với máy tính
(2) Jack nguồn: để chạy Arduino thì có thể lấy nguồn từ cổng USB ở trên, nhưng
không phải lúc nào cũng có thể cắm với máy tính được Lúc đó, ta cần một nguồn
9V đến 12V
(3) Hàng Header: đánh số từ 0 đến 13 là hàng digital pin, nhận vào hoặc xuất ra các
tín hiệu số Ngoài ra có một pin đất (GND) và pin điện áp tham chiếu (AREF)
(4) Hàng header thứ hai: chủ yếu liên quan đến điện áp đất, nguồn
(5) Hàng header thứ ba: các chân để nhận vào hoặc xuất ra các tín hiệu analog Ví dụ
như đọc thông tin của các thiết bị cảm biến
Trang 8(6) Vi điều khiển AVR: đây là bộ xử lý trung tâm của toàn bo mạch Với mỗi mẫu
Arduino khác nhau thì con chip này khác nhau Ở con Arduino Uno này thì sử
1.7 Cảm biến nhiệt dộ, đô ̣ ẩm
DHT11 Là cảm biến nhiệt độ, độ ẩm rất thông dụng hiện nay vì chi phí rẻ và rất dễ lấy dữ
liệu thông qua giao tiếp 1-wire (giao tiếp digital 1-wire truyền dữ liệu duy nhất) Cảm
biến được tích hợp bộ tiền xử lý tín hiệu giúp dữ liệu nhận về được chính xác mà không
cần phải qua bất kỳ tính toán nào
Trang 9Khi 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ự như
hình
Trang 10Hình 1.7 Sơ đồ chân LCD
1.8.1 Chức năng các chân
GND của mạch điều khiển
với VCC=5V của mạch điều khiển
logic “0” (GND) hoặc logic “1” (VCC) để chọn thanh ghi
+ Logic “0”: Bus DB0-DB7 sẽ nối với thanh ghi lệnh IR của LCD (ở chế độ “ghi” - write) hoặc nối với bộ đếm địa chỉ của LCD (ở chế độ “đọc” - read)
+ Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ liệu
DR bên trong LCD
logic “0” để LCD hoạt động ở chế độ ghi, hoặc nối với logic “1” để LCD ở chế độ đọc
lên bus DB0-DB7, các lệnh chỉ được chấp nhận khi có 1
Trang 11xung cho phép của chân E.
+ Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào(chấp nhận) thanh ghi bên trong nó khi phát hiện một xung (high-to-low transition) của tín hiệu chân E
+ Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0-DB7 khi phát hiện cạnh lên (low-to-high transition) ở chân E
và được LCD giữ ở bus đến khi nào chân E xuống mức thấp
7-14 DB0 - DB7 Tám đường của bus dữ liệu dùng để trao đổi thông tin
với MPU Có 2 chế độ sử dụng 8 đường bus này :+ Chế độ 8 bit : Dữ liệu được truyền trên cả 8 đường, vớibit MSB là bit DB7
+ Chế độ 4 bit : Dữ liệu được truyền trên 4 đường từ DB4 tới DB7, bit MSB là DB7
Bảng 1.8 Chức năng các chân LCD
1.8.2 Các tâ ̣p lê ̣nh của LCD
Trước khi tìm hiểu tập lệnh của LCD, sau đây là một vài chú ý khi giao tiếp với LCD:
Tuy trong sơ đồ khối của LCD có nhiều khối khác nhau, nhưng khi lập trình điều
khiển LCD ta chỉ có thể tác động trực tiếp được vào 2 thanh ghi DR và IR thông
qua các chân DBx, và ta phải thiết lập chân RS, R/W phù hợp để chuyển qua lại
giữ 2 thanh ghi này
Với mỗi lệnh, LCD cần một khoảng thời gian để hoàn tất, thời gian này có thể khá
lâu đối với tốc độ của MPU, nên ta cần kiểm tra cờ BF hoặc đợi (delay) cho LCD
thực thi xong lệnh hiện hành mới có thể ra lệnh tiếp theo
Địa chỉ của RAM (AC) sẽ tự động tăng (giảm) 1 đơn vị, mỗi khi có lệnh ghi vào
RAM (Điều này giúp chương trình gọn hơn)
Các lệnh của LCD có thể chia thành 4 nhóm như sau :
Các lệnh về kiểu hiển thị VD : Kiểu hiển thị (1 hàng / 2 hàng), chiều dài dữ liệu
(8 bit / 4 bit), …
Chỉ định địa chỉ RAM nội
Nhóm lệnh truyền dữ liệu trong RAM nội
1.8.3 Giao tiếp với LCD
Đặc tính điện làm việc điển hình:
(Đo trong điều kiện hoạt động Vcc = 4.5V đến 5.5V, T= -30 đến +75C)
Trang 12Chân cấp nguồn Vcc-GND: 2.7V đến 5.5V
Điện áp ra mức cao (DB0-DB7): Min 2.4V (khi IOH = -0.205mA)
Điện áp ra mức thấp (DB0-DB7): Max 0.4V (khi IOL = 1.2mA)
Dòng điện cấp nguồn ICC: 350uA(typ.) đến 600uA
Tần số dao động nội fOSC: 190kHz đến 350kHz (điển hình là 270kHz)
Hình 1.9 Giản đồ LCD chế độ ghi
Trang 13Hình 1.10 Giản đồ LCD chế độ đọc
1.8.4 Khởi tạo LCD
Khởi tạo là việc thiết lập các thông số làm việc ban đầu Đối với LCD, khởi tạo giúp
ta thiết lập các giao thức làm việc giữa LCD và MPU Việc khởi tạo chỉ được thực hiện 1
lần duy nhất ở đầu chương trình điều khiển LCD và bao gồm các thiết lập sau :
Display clear : Xóa/không xóa toàn bộ nội dung hiển thị trước đó
Function set : Kiểu giao tiếp 8bit/4bit, số hàng hiển thị 1hàng/2hàng, kiểu kí tự
Mạch khởi tạo bên trong chip HD44780
Mỗi khi được cấp nguồn, mạch khởi tạo bên trong LCD sẽ tự động khởi tạo cho nó
Và trong thời gian khởi tạo này cờ BF bật lên 1, đến khi việc khởi tạo hoàn tất cờ BF còn
giữ trong khoảng 10ms sau khi Vcc đạt đến 4.5V (vì 2.7V thì LCD đã hoạt động) Mạch
khởi tạo nội sẽ thiết lập các thông số làm việc của LCD như sau:
Display clear: Xóa toàn bộ nội dung hiển thị trước đó
Function set: DL=1 : 8bit; N=0 : 1 hàng; F=0 : 5x8
Display on/off control: D=0 : Display off; C=0 : Cursor off; B=0 : Blinking off
Entry mode set: I/D =1 : Tăng; S=0 : Không dịch
Như vậy sau khi mở nguồn, bạn sẽ thấy màn hình LCD giống như chưa mở nguồn do
toàn bộ hiển thị tắt Do đó, ta phải khởi tạo LCD bằng lệnh
Khởi tạo bằng lệnh
Trang 141.9 Module giải mã cho LCD
Hình 1.11 Module giao tiếp LCD theo chuẩn I2C
Giúp chuyển đổi giao tiếp nhiều đường của màn hình LCD16x02/20x04 thành giao
tiếp IIC/I2C (2 đường), giúp tiết kiệm cổng, điện áp hoạt động: 5V
Hỗ trợ giao tiếp IIC/I2C
jumper: on/off đèn nền của LCD
Biến trở: điều khiển độ tương phản của LCD
Địa chỉ IIC/I2C mặc định: 0x20 ; có thể mở rộng đến 8 LCD bằng cách ngắn mạch
các chân A0, A1, A2 để thiết lập các địa chỉ IIC/I2C tương ứng
Trang 151.10 Module RTC
Module Thời Gian Thực RTC DS3231 là IC thời gian thực giá rẻ, rất chính xác với
thạch anh tích hợp sẵn có khả năng điều chỉnh nhiệt IC có đầu vào cho pin riêng, tách
biệt khỏi nguồn chính đảm bảo cho việc giữ thời gian chính xác Thạch anh tích hợp sẵn
giúp tăng độ chính xác trong thời gian dài hoạt động và giảm số lượng linh kiện cần thiết
khi làm board
Thời gian trong IC được giữ ở dạng: giờ, phút, giây, ngày, thứ, tháng, năm Các tháng có
ít hơn 31 ngày sẽ tự động được điều chỉnh, các năm Nhuận cũng được chỉnh đúng số
ngày Thời gian có thể hoạt động ở chế độ 24h hoặc 12h AmPM IC còn có chức năng
báo động, có thể cài đặt 2 thời gian báo và lịch, có tín hiệu ra là xung vuông Giao tiếp
với IC được thực hiện thông qua I2C bus
Trong chip có mạch điện áp chuẩn dùng để theo dõi trạng thái của nguồn VCC, phát hiện
lỗi nguồn, tự động chuyển nguồn khi có vấn đề Có tín hiệu Reset xuất ra cho mạch
ngoài, MCU khi nguồn điện phục hồi trạng thái Ngoài ra trong IC còn có sẵn cảm biến
Clock: high-precision clock on chip DS3231
Clock Accuracy: 040 °C range, the accuracy 2ppm, the error was about 1 minute
Thông tin Thời gian: giờ, phút, giây, ngày, thứ, tháng, năm, đến 2100
Cảm biến nhiệt trên IC có độ chính xác ± 3 °C
I2C bus có tốc độ tối đa 400Khz
Kèm thêm pin sạc được CR2032
Kèm thêm memory IC AT24C32 (32k bits)
Hình 1.12 Module RTC
DS3231