Tải bản đầy đủ (.docx) (34 trang)

Thiết kế mạch đo nhiệt độ và thực hiện điều khiển thông qua kết nối Ethernet bằng tay hoặc điều tự động.

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.37 MB, 34 trang )

MỤC LỤC
Trang


LỜI MỞ ĐẦU
Ngày nay cùng với sự phát triển của khoa học công nghệ,
đặc biệt là cuộc cách mạng 4.0 đã mở ra cho chúng ta nhiều
thành quả và thách thức trên lĩnh vực này. Một trong những
thành quả và thách thức đó là thiết bị thông minh điều khiển và
giám sát từ xa được tạo ra và đang trên đà cải tiến, trong đó có
IOT (Internet of thing) gọi là internet kết nối vạn vật.
Dựa trên kiến thức được học về môn vi xử lý và điều khiển,
kết hợp với thực tế công nghệ, tài nguyên có sẵn, chúng em đã
nghiên cứu và thiết kế ra được mạch đo nhiệt độ và thực hiện
điều khiển thông qua kết nối Ethernet bằng tay hoặc điều tự
động.
Nội dung thực hiện:
- Sử dụng bảng mạch trung tâm Adruino.
- Miêu tả chức năng hoạt động:
+ Thực hiện giao diện điều khiển với thiết bị điện lưới 220V.
+ Đo đạc thông số nhiệt độ giám sát trên máy tính kết nối
trong mạng LAN.
+ Cấu hình ngưỡng tự động điều khiển theo nhiệt độ.
+ Thực hiện điều khiển từ xa qua mạng LAN sử dụng giao
diện điều khiển trên PC.

2


CHƯƠNG 1: CƠ SỞ LÝ THUYẾT ỨNG DỤNG
1.1.



Tổng quan về cấu trúc phần cứng board mạch
arduino R3

Hình 1.1: Arduino UNO R3
1.1.1. Một vài thông số của Arduino UNO R3
Vi điều khiển

ATmega328P họ 8bit

Điện áp hoạt động

5V DC (chỉ được cấp qua cổng
USB)

Điện áp vào khuyên dùng

7-12V DC

Điện áp vào giới hạn

6-20V DC

Tần số hoạt động

16 MHz

Dòng tiêu thụ

khoảng 30mA


Số chân Digital I/O

14 (6 chân hardware PWM)

Số chân Analog

6 (độ phân giải 10bit)

Dòng tối đa trên mỗi chân I/O

30 mA
3


Dòng ra tối đa (5V)

500 mA

Dòng ra tối đa (3.3V)

50 mA

Bộ nhớ flash

32 KB (ATmega328) với 0.5KB
dùng bởi bootloader

SRAM


2 KB (ATmega328)

EEPROM

1 KB (ATmega328

1.1.2. Vi điều khiển
Arduino UNO có thể sử dụng 3 vi điều khiển họ 8bit AVR là
ATmega8, ATmega168, ATmega328. Bộ não này có thể xử lí
những tác vụ đơn giản như điều khiển đèn LED nhấp nháy, xử lí
tín hiệu cho xe điều khiển từ xa, làm một trạm đo nhiệt độ - độ
ẩm và hiển thị lên màn hình LCD,… hay những ứng dụng khác...
1.1.3. Năng lượng
Arduino UNO có thể được cấp nguồn 5V thông qua cổng
USB hoặc cấp nguồn ngoài với điện áp khuyên dùng là 7-12V
DC và giới hạn là 6-20V. Thường thì cấp nguồn bằng pin vuông
9V là hợp lí nhất nếu 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 trên, sẽ làm hỏng Arduino
UNO.
1.1.4. Các chân năng lượng
• 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
4


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Ω.
1.1.5. Bộ nhớ
Vi điều khiển Atmega328 tiêu chuẩn cung cấp cho người
dùng:
• 32KB bộ nhớ Flash: những đoạn lệnh lập trình sẽ được
lưu trữ trong bộ nhớ Flash của vi điều khiển. Thường thì sẽ có
khoảng vài KB trong số này sẽ được dùng cho bootloader nhưng
đừng lo, hiếm khi nào cần quá 20KB bộ nhớ này đâu.
• 2KB cho SRAM (Static Random Access Memory): giá trị
các biến khai báo khi lập trình sẽ lưu ở đây. Khai báo càng nhiều
biến thì càng cần nhiều bộ nhớ RAM. Tuy vậy, thực sự thì cũng
hiếm khi nào bộ nhớ RAM lại trở thành thứ phải bận tâm. Khi
mất điện, dữ liệu trên SRAM sẽ bị mất.
• 1KB cho EEPROM (Electrically Eraseble Programmable
Read Only Memory): đây giống như một chiếc ổ cứng mini – nơi
có thể đọc và ghi dữ liệu của mình vào đây mà không phải lo bị
mất khi cúp điện giống như dữ liệu trên SRAM.
1.1.6. Các cổng vào ra
Arduino UNO 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 thường thấy nói nôm na chính là kết nối Serial không
dây. Nếu không cần giao tiếp Serial, 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 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,
5


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, ta 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 (0 → 210-1) để đọc giá trị điện áp trong
khoảng 0V → 5V. Với chân AREF trên board, 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 cấp
điện áp 2.5V vào chân này thì ta 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.
1.1.7. Lập trình cho Arduino
Các thiết bị dựa trên nền tảng Arduino được lập trình bằng
ngôn riêng. Ngôn ngữ này dựa trên ngôn ngữ Wiring được viết
cho phần cứng nói chung. Và Wiring lại là một biến thể của
C/C++. Một số người gọi nó là Wiring, một số khác thì gọi là C
hay C/C++. Riêng mình thì gọi nó là “ngôn ngữ Arduino”, và đội
ngũ phát triển Arduino cũng gọi như vậy. Ngôn ngữ Arduino bắt
nguồn từ C/C++ phổ biến hiện nay do đó rất dễ học, dễ hiểu.
Để lập trình cũng như gửi lệnh và nhận tín hiệu từ mạch
Arduino, nhóm phát triển dự án này đã cũng cấp đến cho người
dùng một môi trường lập trình Arduino được gọi là Arduino IDE
(Intergrated Development Environment)

6


1.2. Một số khối chức năng của Atmega328 được sử
dụng trong đề tài
1.2.1. Khối truyền thông SPI

Hình 1.2: Khối truyền thông SPI
Các chân giao tiếp SPI trên ATMega328 lần lượt là:
• SS - chân số 14
• MOSI - chân số 15
• MISO - chân số 16
• SCK - chân số 17
Các chân giao tiếp SPI trên Arduino Uno lần lượt là:

• SS - chân số 10
• MOSI - chân số 11
7


• MISO - chân số 12
• SCK - chân số 13
1.2.2. Khối ADC

Hình 1.3: Khối ADC
Các chân giao tiếp ADC trên ATMega328 lần lượt là:
• ADC0 - chân số 23
• ADC1 - chân số 24
• ADC2 - chân số 25
• ADC3 - chân số 26
• ADC4 - chân số 27
• ADC5 - chân số 28
Các chân giao tiếp ADC trên Arduino Uno lần lượt là:
• ADC0 - chân số A0
• ADC1 - chân số A1
• ADC2 - chân số A2
8


• ADC3 - chân số A3
• ADC4 - chân số A4
• ADC5 - chân số A5
1.3. Các khối ngoại vi trong ứng dụng
Khối ngoại vi sử dụng trong đề tài là Arduino Ethernet
Shield

1.3.1. Cấu tạo

Hình 1.4: Cấu tạo Arduino Ethernet Shield

9


1.3.2. Cách thức ghép nối

Hình 1.5: Cách thức ghép nối Arduino Ethernet Shield
- Chân nguồn 5V và chân GND của Arduino Ethernet Shield
nối lần lượt với chân nguồn 5V và chân GND của Arduino UNO
R3
- Các chân 10, 11, 12, 13 của Arduino Ethernet Shield nối
lần lượt với các chân 10, 11, 12, 13 của Arduino UNO R3 thông
qua giao tiếp SPI
- Chân số 4 của Arduino Ethernet Shield nối với chân số 4
của Arduino UNO R3 dùng để kết nối thẻ nhớ.

10


CHƯƠNG 2: THIẾT KẾ CHẾ TẠO MẠCH
2.1. Sơ đồ khối và cấu tạo
2.1.1. Sơ đồ khối
Hình 2.1: Sơ
đồ khối
2.1.2
Cấu tạo:
2.1.2.1.

Arduino UNO
R3
a) Tổng
quan
Nhắc tới
dòng mạch Arduino dùng để lập
trình, cái đầu tiên mà người ta thường nói tới
chính là dòng Arduino UNO. Arduino UNO R3 là phiên bản mới
nhất của dòng Arduino UNO, đây là dòng phổ biến và dễ sử
dụng nhất trong các dòng Arduino hiện nay cũng như tương
thích với nhiều loại Arduino Shield nhất.
Arduino UNO có thể sử dụng vi điều khiển ATmega328. Bộ
não này có thể xử lí những tác vụ đơn giản như điều khiển đèn
LED nhấp nháy, xử lí tín hiệu cho xe điều khiển từ xa, làm một
trạm đo nhiệt độ - độ ẩm và hiển thị lên màn hình LCD,… và rất
nhiều ứng dụng khác. Nó có 14 chân đầu vào / ra Digital (trong
đó 6 chân có thể được sử dụng làm đầu ra PWM), 6 đầu vào
Analog, tinh thể thạch anh 16 MHz, kết nối USB, giắc cắm
nguồn, ICSP header và nút RESET. Nó chứa mọi thứ cần thiết để
hỗ trợ cho vi điều khiển. Chỉ cần kết nối nó với máy tính bằng
cáp USB hoặc cấp nguồn cho nó bằng bộ chuyển đổi AC-DC
hoặc pin là có thể sử dụng.

11


Hình 2.2: Arduino UNO R3
b) Thông số kỹ thuật
Vi điều khiển
Điện áp hoạt động

Tần số hoạt động
Điện áp đầu vào khuyên
dùng
Điện áp vào giới hạn
Số chân Digital I/O
Số chân Analog
Dòng tối đa trên mỗi
chân I/O
Dòng ra tối đa (3.3V)
Bộ nhớ flash
SRAM
EEPROM
Tần số hoạt động
Hằng số LED_BUILTIN

ATmega328P(8bits)
5V
16 MHz
7VDC - 12VDC
6-20V DC
14 (6 chân đầu ra xung PWM)
6 (độ phân giải 10bit)
20 mA
50 mA
32 KB (ATmega328) với 0.5KB
dùng bởi bootloader
2 KB (ATmega328)
1 KB (ATmega328)
16 MHz
13


1.1.2.2. Ethernet Shield Wiznet W5100
a) Tổng quan
12


Arduino Ethernet Shield cho phép một bảng mạch
Arduino kết nối với internet . Nó sử dụng chip W5100 cho tốc độ
và khả năng kết nối ổn định nhất, bộ thư viện đi kèm và phần
cứng với cách kết nối dễ dàng khiến cho việc kết vối Arduino với
Ethernet đơn giản hơn bao giờ hết, thích hợp để làm các ứng
dụng điều khiển thiết bị qua Ethernet, Ethernet Controller.
IC điều khiển W5100 có thể thực hiện truyền dữ liệu thông
qua cả 2 giao thức là TCP và UDP. Số đường truyền dữ liệu song
song tối đa là 4. Đây chính là điểm mạnh của W5100 so với
Microchip ENC28J60. Khả năng truyền song song cùng lúc 4
luồng dữ liệu giúp board có khả năng nhận dữ liệu với tỉ lệ lỗi
thấp hơn.

Hình 2.3: Ethernet Shield Wiznet W5100
Ethernet Shield Wiznet W5100 có trang bị sẵn khe cắm
microSD card. Khe cắm microSD card trên bo mạch có thể được
sử dụng để lưu trữ các tệp phục vụ cho việc kết nối và điều
khiển qua mạng. Nó tương thích với Arduino Uno và Mega (sử
dụng thư viện Ethernet). Có thể truy cập vào khe cắm thẻ SD
trên bo mạch bằng thư viện SD có trong các ngôn ngữ lập trình
Arduino. Arduino giao tiếp với khe cắm microSD thông qua các
chân SPI và chân select là chân số 4. Vì vậy, khi sử dụng
Ethernet Shield, Arduino không thể dùng 2 chân số 10 và số 4
do 2 chân này được Ethernet Shield sử dụng.


13


Hình 2.4: microSD card
b) Thông số kỹ thuật







Để sử dụng phải có board mạch Arduino đi kèm.
Hoạt động tại điện áp 5V (được cấp từ mạch Arduino).
Chip Ethernet: W5100 với bộ nhớ đệm 16KB.
Tốc độ kết nối: 10/100Mb.
Kết nối với mạch Arduino qua cổng SPI (Chân số 10).
Thư viện và code mẫu có sẵn trong chương trình Arduino.
1.1.2.3. Cảm biến LM35
a) Tổng quan
Cảm biến nhiệt độ LM35 là một loại cảm biến tương tự.
Với ưu điểm như hoạt động khá chính xác với sai số ít, kích
thước nhỏ và giá thành thấp, IC cảm biến nhiệt độ LM35 là một
trong những cảm biến tương tự được sử dụng rất nhiều trong
các ứng dụng đo nhiệt độ thời gian thực với điện áp đầu ra tỷ lệ
tuyến tính với Độ C. Cảm biến LM35 có lợi thế hơn các cảm biến
nhiệt độ tuyến tính được hiệu chỉnh ở Kelvin, vì người dùng
không cần phải trừ một điện áp không đổi lớn từ đầu ra để có
được tỷ lệ thuận tiện. Trở kháng đầu ra thấp, đầu ra tuyến tính

và hiệu chuẩn vốn có của thiết bị LM35 khá ổn định làm cho
việc can thiệp vào mạch đọc hoặc điều khiển đặc biệt dễ dàng.
Vì thiết bị LM35 chỉ sử dụng 60 µA từ nguồn cung cấp, nên nó
có khả năng tự làm nóng rất thấp dưới 0,1°C trong điều kiện
bình thường. Cấu tạo của cảm biến gồm 3 chân, chân VCC, chân
GND và chân thứ ba còn lại cung cấp một đầu ra tương tự.

14


Hình 2.5: Cảm biến LM35
b) Thông số kĩ thuật
Điện áp hoạt động: 4 ~ 30VDC
Điện áp đầu ra: -1 ~ 6VDC
Công suất tiêu thụ: 60uA
Khoảng đo nhiệt độ: -55°C đến 150°C
Nhiệt độ thay đổi tuyến tính: 10mV/°C
Độ chính xác thực tế: 1/4°C ở nhiệt độ phòng và 3/4°C
ngoài khoảng 2°C tới 150°C
• Kiểu chân: TO92
• Kích thước: 4.30mm × 4.30mm
1.1.2.4. Xây dựng giao diện điều khiển với HTML
a) Tổng quan về HTML
HTML (tiếng Anh, viết tắt cho HyperText Markup
Language, hay là "Ngôn ngữ Đánh dấu Siêu văn bản") là một
ngôn ngữ đánh dấu được thiết kế ra để tạo nên các trang web
với các mẩu thông tin được trình bày trên World Wide Web.
Cùng với CSS và JavaScript, HTML tạo ra bộ ba nền tảng kỹ
thuật cho World Wide Web. HTML được định nghĩa như là một
ứng dụng đơn giản của SGML và được sử dụng trong các tổ chức

cần đến các yêu cầu xuất bản phức tạp. HTML đã trở thành một
chuẩn Internet do tổ chức World Wide Web Consortium (W3C)
duy trì.
HTML là ngôn ngữ markup, nó rất trực tiếp dễ hiểu, dễ học,
được đánh giá là đơn giản và tất cả mọi người mới đều có thể
bắt đầu học nó để xây dựng website. Mọi trang web, mọi trình
duyệt web đều có thể hiển thị tốt ngôn ngữ HTML. Hiện nay,
phiên bản mới nhất của HTML là HTML 5 với nhiều tính năng tốt
và chất lượng hơn so với các phiên bản HTML cũ.







15




Hình 2.6: HTML
HTML, theo đúng nghĩa của nó, là một loại ngôn ngữ đánh
dấu siêu văn bản, thế nên các chức năng của nó cũng xoay
quanh yếu tố này. Cụ thể, HTML giúp cấu thành các cấu trúc cơ
bản trên một website (chia khung sườn, bố cục các thành phần
trang web) và góp phần hỗ trợ khai báo các tập tin kĩ thuật số
như video, nhạc, hình ảnh.
Thế mạnh của HTML là khả năng xây dựng cấu trúc và
khiến trang web đi vào quy củ một hệ thống hoàn chỉnh. Nếu

bạn mong muốn sở hữu một website có cấu trúc tốt có mục đích
sử dụng nhiều loại yếu tố trong văn bản, hãy hỏi HTML. Nhiều ý
kiến cho rằng tùy theo mục đích sử dụng mà lập trình viên hay
người dùng có thể lựa chọn ngôn ngữ lập trình riêng cho
website của bạn, tuy nhiên thực chất HTML chứa những yếu tố
cần thiết mà dù website của bạn có thuộc thể loại nào, giao tiếp
với ngôn ngữ lập trình nào để xử lý dữ liệu thì nó vẫn phải cần
đến ngôn ngữ HTML để hiển thị nội dung cho người truy cập.
Nói đúng hơn, dù website của bạn được xây dựng như thế
nào, trên nên tảng nào thì nó cũng cần đến sự hỗ trợ của HTML,
dù ít dù nhiều. Đối với các lập trình viên hay nhà phát triển web,
họ đều phải học HTML như một loại ngôn ngữ cơ bản trước khi
bắt tay vào thiết kế trang web nào.
Như bất kỳ ngôn ngữ nào khác, HTML có những ưu và
khuyết điểm riêng của nó:
Ưu điểm:
• Ngôn ngữ được sử dụng rộng lớn này có rất nhiều
nguồn tài nguyên hỗ trợ và cộng đồng sử dụng cực
lớn.
16












Sử dụng mượt mà trên hầu hết mọi trình duyệt.
Có quá trình học đơn giản và trực tiếp.
Mã nguồn mở và hoàn toàn miễn phí.
Markup gọn gàng và đồng nhất.
Chuẩn chính của web được vận hành bởi World Wide
Web Consortium (W3C).
Dễ dàng tích hợp với các ngôn ngữ backend như PHP
và Node.js.

Khuyết điểm:
• Được dùng chủ yếu cho web tĩnh. Đối với các tính
năng động, bạn cần sử dụng JavaScript hoặc ngôn
ngữ backend bên thứ 3 như PHP.
• Nó có thể thực thi một số logic nhất định cho người
dùng. Vì vậy, hầu hết các trang đều cần được tạo
riêng biệt, kể cả khi nó sử dụng cùng các yếu tố, như
là headers hay footers.
• Một số trình duyệt chậm hỗ trợ tính năng mới.
• Khó kiểm soát cảnh thực thi của trình duyệt (ví dụ,
những trình duyệt cũ không render được tag mới)
Với sự phát triển mạnh mẽ của công nghệ số mà trong đó
các trang web ngày càng đóng vai trò chủ đạo, việc sở hữu một
trang web hoàn thiện từ yếu tố bên ngoài cho đến nội dung bên
trong là yếu tố cần thiết đối với mọi người lập trình, và các
trang web được viết bởi HTML hay có hỗ trợ HTML là lựa chọn
khôn ngoan dù thực hiện một công trình hay đề tài nào đi chăng
nữa.
b) Giao diện điều khiển đã xây dựng
Hình ảnh giao diện điều khiển được xây dựng bằng HTML


17


Hình 2.7: Giao diện điều khiển
Các chức năng chính trong giao diện điều khiển là hiển thị
nhiệt độ phòng theo thời gian thực, cài đặt giá trị ngưỡng nhiệt
độ và điều khiển các thiết bị trong phòng máy.
Khi truy cập vào địa chỉ trang web của giao diện điều khiển
trong trình duyệt web bất kỳ sẽ xuất hiện giao diện điều khiển
trên. Nhiệt độ hiện tại của phòng máy sẽ được hiển thị theo thời
gian thực. Nhiệt độ sẽ được hiển thị dưới dạng Độ C và được cập
nhật liên tục 1s/lần.
Phần Giá trị nhiệt độ ngưỡng hiển thị ngưỡng nhiệt độ tối
đa của phòng máy trước khi các thiết bị có chức năng cảnh báo
và làm mát phòng là chuông báo, quạt… hoạt động. Các thiết bị
này sẽ tự động tắt khi nhiệt độ phòng giảm xuống dưới nhiệt độ
ngưỡng được thiết lập. Và ta có thể thay đổi ngưỡng nhiệt độ
này bằng cách nhập giá trị ngưỡng cần thay đổi vào ô Thiết lập
nhiệt độ ngưỡng sau đó Click vào nút CẬP NHẬT. Khi đó ngưỡng
nhiệt độ sẽ được thay đổi.
2.2. Nguyên lí hoạt động
2.2.1. Nguyên lí tổng quan
Arduino là bo mạch chủ, sau khi được nạp code sẽ thực
hiện giao tiếp với các khối chức năng trong sơ đồ khối. Theo sơ
đồ khối Arduino sẽ nhận dữ liệu của LM35 thông qua chân
Analog của nó, truyền dữ liệu nhiệt độ lên Module Ethernet
shield, nhận lệnh từ Module Ethernet shield để điều khiển Thiết
bị điện thông qua các cổng vào ra số.
18



Module Ethernet shield kết nối với thẻ SD, trong thẻ SD
chứa file HTM để tạo ra trang web. Arduino tạo ra một địa chỉ IP
cho Module Ethernet shield, đọc dữ liệu từ thẻ SD.
Kết nối máy tính với Module Ethernet shield qua dây mạng
RJ 45, vào web qua địa chỉ IP được tạo từ Arduino, giao diện web
sẽ hiển thị được thông số nhiệt độ, điều khiển được thiết bị và
thiết lập mức nhiệt độ ngưỡng (Mức nhiệt độ mà nếu vượt quá
sẽ thực hiện tự động bật thiết bị).
2.2.2. Nguyên lí từng phần
2.2.2.1. Đọc nhiệt độ từ cảm biến LM35
Cảm biến nhiệt độ LM35 là một loại cảm biến tương tự rất
hay được ứng dụng trong các ứng dụng đo nhiệt độ thời gian
thực. Vì nó hoạt động khá chính xác với sai số nhỏ, đồng thời
với kích thước nhỏ và giá thành rẻ là một trong những ưu điểm
của nó. Vì đây là cảm biến tương tự (analog sensor) nên ta có
thể dễ dàng đọc được giá trị của nó bằng hàm analogRead().
Nhiệt độ được xác định bằng cách đo hiệu điện thế ngõ ra
của LM35.
→ Đơn vị nhiệt độ: °C.
→ Nhiệt độ thay đổi tuyến tính: 10mV/°C

Hình 2.8: Sơ đồ chân LM35
LM35 không cần phải canh chỉnh nhiệt độ khi sử dụng.
Độ chính xác thực tế: 1/4°C ở nhiệt độ phòng và 3/4°C
ngoài khoảng 2°C tới 150°C.
19



LM35 có hiệu năng cao, công suất tiêu thụ là 60uA
Cảm biến LM35 hoạt động bằng cách cho ra một giá trị
hiệu điện thế nhất định tại chân Vout (chân giữa) ứng với mỗi
mức nhiệt độ.
Như vậy, bằng cách đưa vào chân bên trái của cảm biến
LM35 hiệu điện thế 5V, chân phải nối đất, đo hiệu điện thế ở
chân giữa bằng các pin A0 trên arduino (giống y hệt cách đọc
giá trị biến trở), nhiệt độ tính bằng bằng công thức:
float temperature = (5.0*analogRead(A0)*100.0/1024.0);

Hình 2.9: Sơ đồ kết nối với LM35
2.2.2.2. Arduino giao tiếp với Ethernet shield
Arduino giao tiếp với cả hai module Ethernet shield và thẻ
SD bằng cách sử dụng chuẩn SPI (thông qua cổng ICSP), trên
các chân 11, 12, và 13 của board arduino Uno R3, chân số 10
được sử dụng để chọn W5100 và chân số 4 cho SD card. Các
chân này không thể được sử dụng cho chức năng i/o , nếu sử
dụng cả 2 module cùng lúc thì chân số 10 trên board arduino
Uno R3 phải được để trống nếu không thì board sẽ không thể
hoạt động được.

20


Hình 2.10: Sơ đồ kết nối với Ethernet Shield
Module Ethernet shield kết nối với thẻ SD, trong thẻ SD
chứa file HTM để tạo ra trang web. Arduino tạo ra một địa chỉ IP
cho Module Ethernet shield, đọc dữ liệu từ thẻ SD.
Sau khi trình duyệt web đã yêu cầu và tải trang web từ
máy chủ web Arduino, JavaScript trong trang web sẽ gửi yêu

cầu Ajax cho dữ liệu từ Arduino mỗi giây.
Trang web được lưu trữ bởi Arduino Web Server
Arduino sẽ đáp ứng mọi yêu cầu của Ajax bằng cách gửi
một tệp XML trở lại trình duyệt web. Tệp XML chứa các giá trị từ
bốn đầu vào tương tự của Arduino (A0), trạng thái của led(các
cổng vào ra số).
Khi đèn LED được bật từ trang web bằng cách chọn nhấn
bật, JavaScript sẽ gửi trạng thái của nhấn (gửi hướng dẫn để bật
đèn LED) với yêu cầu Ajax tiếp theo. Điều tương tự sẽ xảy ra
nếu đèn LED bị tắt hoặc nếu một trong các nút được sử dụng để
bật hoặc tắt đèn LED.
2.2.2.3. Arduino với cổng vào ra số điều khiển Rơ le và
thiết bị điện
* Nguyên lý hoạt động của rơ le. Khi nguồn điện đi qua
cuộn cảm sẽ tạo ra một từ trường hút hoặc đẩy để đóng ngắt
công tắc của rờ le để điều khiển thiết bị. Để cho rờ le hoạt động
ta chỉ cần:
- Nối nguồn vào chân của công tắc rơ le và nguồn đi vào
cuộn cảm thông qua một bộ điều khiển ( ví dụ công tắc, nút
nhấn ...).
21


- Chân còn lại của cuộn cảm đi ra mát và chân dương chờ
của công tắc đi đến thiết bị cần điều khiển.
* Khi đầu ra của một cổng vào ra số ở mức cao thì cho
phép bật thiết bị, ngược lại khi đầu ra của cổng vào ra số ở mức
thấp thì cho phép tắt thiết bị.
2.3. Thuật toán thực hiện


2.3.1. Sơ đồ khối thực hiện thuật toán

Hình 2.11: Sơ đồ khối thực hiện thuật toán
Địa chỉ IP của Ethernet Shield :
1, 8);
Khởi tạo thẻ nhớ SD :
22

IPAddress ip(192, 168,


Serial.println(F("Initializing SD card..."));
if (!SD.begin(4)) {
Serial.println(F("ERROR - SD card initialization
failed!"));
return;
}
Serial.println(F("SUCCESS - SD card initialized."));

2.3.2. Lưu đồ thuật toán thực hiện hiển thị nhiệt độ

Hình 2.12: Lưu đồ thuật toán thực hiện hiển thị nhiệt độ
Đọc dữ liệu từ cảm biến LM35:
void XML_response(EthernetClient cl)
{
int reading = analogRead(2);
float voltage = reading * 5.0 / 1024.0;
float temp = voltage * 100.0;
cl.print("<analog>");
cl.print(temp);

cl.println("</analog>");}
23


Xuất nhiệt độ ra giao diện Web:
document.getElementById("analog") .innerHTML =
this.responseXML.getElementsByTagName('analog')
[0].childNodes[0].nodeValue;
<b>T =</b> <span id="analog">...</span> <label>
Độ C </label>
2.3.3. Lưu đồ thuật toán thực hiện điều khiển thiết bị

Hình 2.13: Lưu đồ thuật toán thực hiện điều khiển thiết
bị
Code Arduino:
void SetLEDs(void)
{
// LED 1 (pin 2)
if (StrContains(HTTP_req, "LED1=1"))
{
LED_state[0] = 1;
digitalWrite(2, HIGH);
}
}
void XML_response(EthernetClient cl)
{
cl.print(F("<LED>"));
24



if (LED_state[0]) {
cl.print(F("on"));
}
else {
cl.print(F("off"));
}
cl.println(F("</LED>"));
}
Code websever:
if (this.responseXML.getElementsByTagName('LED')
[0].childNodes[0].nodeValue === "on") {
document.getElementById("LED1").innerHTML = "TẮT";
LED1_state
= 1;
document.getElementById("State_LED1").innerHTML =
"BẬT";
}
else {
document.getElementById("LED1").innerHTML = "BẬT";
LED1_state
= 0;
document.getElementById("State_LED1").innerHTML =
"TẮT";
}
function GetButton1()
{
if (LED1_state === 1) {
LED1_state = 0;
strLED1 = "&LED1=0";
}

else {
LED1_state = 1;
strLED1 = "&LED1=1";
}
}

25


×