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

Thiết kế hệ thống diệt côn trùng sử dụng năng lượng mặt trời

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 (1.39 MB, 41 trang )

LỜI CẢM ƠN
Kính thưa quý thầy cô!
Em xin được gửi lời cám ơn chân thành đến Ban Giám Hiệu và các thầy cô trong
trường, đặc biệt là các thầy cô trong khoa Công nghệ Tự động hóa trường Đại học Công nghệ
thông tin và Truyền thông, đã tận tình chỉ dạy, truyền đạt kiến thức cũng như tạo điều kiện
thuận lợi cho em trong suốt quá trình học tập vừa qua.
Em xin chân thành cảm ơn thầy Phạm Đức Long cùng các thầy cô, anh, chị đã
dành nhiều thời gian, công sức, quan tâm theo dõi, tận tình hướng dẫn, động viên và
nhắc nhở em hoàn thành tốt đề án này.
Qua đây, em cũng xin gửi lời cảm ơn đến tất cả các bạn bè và người thân xung quanh
đã động viên, giúp đỡ em trong quá trình học tập.
Em xin chân thành cảm ơn!
Thái Nguyên, ngày tháng năm 2018
Sinh viên
Lê Đăng Thắng


LỜI CAM ĐOAN
Em xin cam đoan toàn bộ nội dung của báo cáo này là do em tự tìm hiểu nghiên
cứu dưới sự định hướng của thầy giáo hướng dẫn. Nội dung báo cáo này không sao chép
và vi phạm bản quyền từ bất kỳ công trình nghiên cứu nào.
Nếu những lời cam đoan trên không đúng, em xin chịu hoàn toàn trách nhiệm
trước pháp luật.

Thái Nguyên, ngày tháng năm 2018
Sinh viên thực hiện đồ án
Lê Đăng Thắng

2



MỤC LỤC

3


DANH MỤC HÌNH ẢNH

4


LỜI NÓI ĐẦU
Xung quanh chúng ta luôn tồn tại các loại côn trùng, đặc biệt là các loại côn trùng
có hại. Chúng phá hoại mùa màng, mang mầm bệnh và gây ảnh hưởng xấu đến con
người. Thiết bị diệt côn trùng có hại dùng năng lượng mặt trời ra đời là giải pháp cho
những vấn đề được đặt ra. Thiết bị có thể diệt được các loại côn trùng có kích thước vừa
và nhỏ.
Điều đặc biệt là thiết bị sử dụng pin năng lượng mặt trời để tái tạo điện áp cung
cấp cho ắc quy dự trữ nên không phụ thuộc vào địa lý và khoảng cách với nguồn điện
lưới.
Với những ưu điểm và tính mới mẻ trên em đã chọn đề tài “Thiết kế và chế tạo
thiết bị diệt côn trùng có hại dùng năng lượng mặt trời” để tạo ra sản phẩm góp phần
hưởng ứng việc sử dụng năng lượng sạch và bảo vệ môi trường.
Bài báo cáo gồm 3 chương:
Chương I: Cơ sở lý thuyết và tổng quan hệ thống.
Chương II: Phân tích và thiết kế hệ thống.
Chương II: Kết luận và hướng phát triển.

5



CHƯƠNG I. CƠ SỞ LÝ THUYẾT VÀ TỔNG QUAN HỆ THỐNG
1.1. Tổng quan về arduino
1.1.1. Giới thiệu chung
Arduino cơ bản là một mã nguồn mở về điện tử được tạo thành từ phần cứng và
phần mềm.Về mặt kĩ thuật có thể coi Arduino là một bộ điều khiển logic có thể lập trình
được. Đơn giản hơn, Arduino là 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.
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ệ. Song Arduino đã giải quyết được vấn đề này 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 điều
khiển 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.
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ự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.

-

Ngôn ngữ lập trình đơn giản dễ hiểu.

-

Mã nguồn 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 modul 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 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.

6


Hình 1: Bo mạch arduino nano.
 Một số ứng dụng nổi bật của Arduino:
Máy in 3D: Một cuộc cách mạng khác cũng đang âm thầm định hình nhờ vào Arduino,
đó là sự phát triển máy in 3D nguồn mở Reprap. Máy in 3D là công cụ giúp tạo ra các vật
thể thực trực tiếp từ các file CAD 3D. Công nghệ này hứa hẹn nhiều ứng dụng rất thú vị
trong đó có cách mạng hóa việc sản xuất cá nhân.

Hình 2: Máy in 3D Makerbot điều khiển bằng Arduino Mega2560
Robot: Do kích thước nhỏ gọn và khả năng xử lý mạnh mẽ, Arduino được chọn làm bộ

xử lý trung tâm của rất nhiều loại robot, đặc biệt là robot di động.

7


Hình 3: Robot di động tránh vật cản dùng Arduino nano và camera CMUCam
Điều khiển ánh sáng: Các tác vụ điều khiển đơn giản như đóng ngắt đèn LED hay
phức tạp như điều khiển ánh sáng theo nhạc hoặc tương tác với ánh sáng laser đều có thể
thực hiện với Arduino.

Hình 4 Ambilight với Arduino
Ngoài ra còn rất nhiều ứng dụng khác sử dụng Arduino để điều khiển. Arduino có
rất nhiều modul mỗi modul đượ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 mạch có trang bị thêm các tính năng kết nối như
8


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ơ.
1.1.2. Cấu trúc phần cứng
Cấu trúc chung
Arduino Nano là một bo mạch vi điều khiển dựa trên chip ATmega168 hoặc
ATmega 328. Cấu trúc chung bao gồm:
-

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 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.

9


-

Hình 5. Cấu trúc phần cứng của Arduino Nano
 Thông số kỹ thuật của Nano:
 Khối xử lý trung tâm là vi điều khiển Atmega328.
 Điện áp hoạt động 5V.

 Điện áp đầu vào khuyến nghị là 7-12V.
 Điện áp đầu vào giới hạn 6-15V.
 Dòng điện một chiều trên các chân vào ra là 40mA.
 Dòng điện một chiều cho chân 3.3V là 50mA.
 Clock Speed 16 MHz.
 Flash Memory 16 Kb (ATmega 168) hoặc 32 Kb (ATmega 328), SRAM 1 Kb (ATmega
168) hoặc 2 Kb (ATmega 328), EEPROM 512 bytes (ATmega 168) hoặc 1 Kb (AT mega
328).
 Vi điều khiển trung tâm

10


Trong bo mạch Arduino IC đóng vai trò xử lý trung tâm là Atmega328 cấu trúc sơ
đồ chân của nó như sau:

Hình 6. Sơ đồ chân trong ATmega 328
 Chân VCC (chân số 4, 6): Chân cung cấp điện áp dương nguồn 5V.
 Chân GND (chân số 3, 8, 21): Chân đất chung.
 Chân AREF (chân 20): Là chân tham chiếu để chuyển đổi tín hiệu tương tự sang số.
 Chân AVCC (chân 18): Chân cung cấp điện áp cho quá trình chuyển đổi ADC.
 Cổng B (chân 12 - chân 17, chân 7, chân 8): Bao gồm có 8 chân I/O từ (PB0÷PB7).
 Cổng C (chân 23 – chân 29): Bao gồm có 7 chân I/O từ (PC0÷PC6) trong đó chân PC6
(chân số 1) làm chân reset.
 Cổng D (chân số 30, 31, 32, 1, 2, 9, 10, 11): Bao gồm có 8 chân I/O từ chân (PD0÷PD7).

11


Hình 7.Sơ đồ khối cấu trúc bên trong ATmega 328

Đây là kiến trúc chung trong lõi AVR nói chung. Chức năng chính của lõi CPU là để
đảm bảo thực hiện chương trình chính xác. CPU do đó phải có khả năng truy cập nhanh,
thực hiện các tính toán, thiết bị ngoại vi điều khiển và xử lý ngắt. Để tối đa hóa hiệu suất,
AVR sử dụng một kiến trúc Harvard và đường bus riêng biệt cho chương trình và dữ
liệu. Hướng truyền dữ liệu trong bộ nhớ chương trình thực hiện với một tốc độ nhất định.

12


Hình 8. Sơ đồ cấu trúc CPU trong ATmega 328
 Nguồn nuôi
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 15V.Tuy nhiên pin 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 sử dụng
nhiều hơn 12V điều chỉnh điện áp có thể quá nóng. Phạm vi khuyến nghị là 7V đến 12V.
 Chân Vin: Điện áp đầu vào Arduino khi chúng ta dùng nguồn điện bên ngoài. 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 3V3: Cung cấp nguồn cho các thiết bị cảm biến.
 Chân GND : Chân nối đất.
1.2. Module thời gian thực sử dụng chip DS1307 và chuẩn giao tiếp I2C.

13


1.2.1. Chip DS1307
DS1307 là chip đồng hồ thời gian thực (RTC : Real-time clock), khái niệm thời
gian thực ở đây được dùng với ý nghĩa thời gian tuyệt đối mà con người đang sử dụng,

tình bằng giây, phút, giờ…DS1307 là một sản phẩm của Dallas Semiconductor (một công
ty thuộc Maxim Integrated Products). Chip này có 7 thanh ghi 8-bit chứa thời gian là:
giây, phút, giờ, thứ (trong tuần), ngày, tháng, năm. Ngoài ra DS1307 còn có 1 thanh ghi
điều khiển ngõ ra phụ và 56 thanh ghi trống có thể dùng như RAM. DS1307 được đọc và
ghi thông qua giao diện nối tiếp I2C (TWI của AVR) nên cấu tạo bên ngoài rất đơn giản.
DS1307 xuất hiện ở 2 gói SOIC và DIP có 8 chân như trong hình 1.

Hình 9: Hai gói cấu tạo chip DS1307.
Các chân của DS1307 được mô tả như sau:
- X1 và X2: là 2 ngõ kết nối với 1 thạch anh 32.768KHz làm nguồn tạo dao động cho
chip.
- VBAT: cực dương của một nguồn pin 3V nuôi chip.
- GND: chân mass chung cho cả pin 3V và Vcc.
- VCC: nguồn cho giao diện I2C, thường là 5V và dùng chung với vi điều khiển. Chú ý là
nếu Vcc không được cấp nguồn nhưng VBAT được cấp thì DS1307 vẫn đang hoạt động
(nhưng không ghi và đọc được).
- SQW/OUT: một ngõ phụ tạo xung vuông (Square Wave / Output Driver), tần số của
xung được tạo có thể được lập trình. Như vậy chân này hầu như không liên quan đến
chức năng của DS1307 là đồng hồ thời gian thực, chúng ta sẽ bỏ trống chân này khi nối
mạch.
- SCL và SDA là 2 đường giao xung nhịp và dữ liệu của giao diện I2C mà chúng ta đã
tìm hiểu trong bài TWI của AVR.
Có thể kết nối DS1307 bằng một mạch điện đơn giản như trong hình 2.

14


Hình 10: Mạch ứng dụng đơn giản của DS1307.
Cấu tạo bên trong DS1307 bao gồm một số thành phần như mạch nguồn, mạch dao
động, mạch điều khiển logic, mạch giao điện I2C, con trỏ địa chỉ và các thanh ghi (hay

RAM). Do đa số các thành phần bên trong DS1307 là thành phần “cứng” nên chúng ta
không có quá nhiều việc khi sử dụng DS1307. Sử dụng DS1307 chủ yếu là ghi và đọc
các thanh ghi của chip này. Vì thế cần hiểu rõ 2 vấn đề cơ bản đó là cấu trúc các thanh
ghi và cách truy xuất các thanh ghi này thông qua giao diện I2C. Phần này chúng ta tìm
hiểu cấu trúc các thanh ghi trước và cách truy xuất chúng sẽ tìm hiểu trong phần 2, điều
khiển
DS1307
bằng
AVR.
Như tôi đã trình bày, bộ nhớ DS1307 có tất cả 64 thanh ghi 8-bit được đánh địa chỉ
từ 0 đến 63 (từ 0x00 đến 0x3F theo hệ hexadecimal). Tuy nhiên, thực chất chỉ có 8 thanh
ghi đầu là dùng cho chức năng “đồng hồ” (tôi sẽ gọi là RTC) còn lại 56 thanh ghi bỏ
trông có thể được dùng chứa biến tạm như RAM nếu muốn. Bảy thanh ghi đầu tiên chứa
thông tin về thời gian của đồng hồ bao gồm: giây (SECONDS), phút (MINUETS), giờ
(HOURS), thứ (DAY), ngày (DATE), tháng (MONTH) và năm (YEAR). Việc ghi giá trị
vào 7 thanh ghi này tương đương với việc “cài đặt” thời gian khởi động cho RTC. Việc
đọc giá từ 7 thanh ghi là đọc thời gian thực mà chip tạo ra. Ví dụ, lúc khởi động chương
trình, chúng ta ghi vào thanh ghi “giây” giá trị 42, sau đó 12s chúng ta đọc thanh ghi này,
chúng ta thu được giá trị 54. Thanh ghi thứ 8 (CONTROL) là thanh ghi điều khiển xung
ngõ ra SQW/OUT (chân 6). Tuy nhiên, do chúng ta không dùng chân SQW/OUT nên có
thề bỏ qua thanh ghi thứ 8. Tổ chức bộ nhớ của DS1307 được trình bày trong hình 3.

Hình 11: Tổ chức bộ nhớ của DS1307.
Vì 7 thanh ghi đầu tiên là quan trọng nhất trong hoạt động của DS1307, chúng ta sẽ
khảo sát các thanh ghi này một cách chi tiết. Trước hết hãy quan sát tổ chức theo từng bit
của các thanh ghi này như trong hình 4.

15



Hình 12: Tổ chức các thanh ghi thời gian.
Điều đầu tiên cần chú ý là giá trị thời gian lưu trong các thanh ghi theo dạng BCD.
BCD là viết tắt của cụm từ Binary-Coded Decimal, tạm dịch là các số thập phân theo mã
nhị phân. Ví dụ bạn muốn cài đặt cho thanh ghi MINUTES giá trị 42. Nếu quy đổi 42
sang mã thập lục phân thì chúng ta thu được 42=0x2A. Theo cách hiểu thông thường
chúng ta chỉ cần gán MINUTES=42 hoặc MINUTES=0x2A, tuy nhiên vì các thanh ghi
này chứa giá trị BCD nên mọi chuyện sẽ khác, tôi sẽ diễn giải bằng hình 5.

Hình 13: Số BCD.
Với số 42, trước hết nó được tách thành 2 chữ số (digit) 4 và 2. Mỗi chữ số sau đó
được đổi sang mã nhị phân 4-bit. Chữ số 4 được đổi sang mã nhị phân 4-bit là 0100 trong
khi 2 được đổi thành 0010. Ghép mã nhị phân của 2 chữ số lại chúng ta thu được mốt số
8 bit, đó là số BCD. Với trường hợp này, số BCD thu được là 01000010 (nhị phân) = 66.
Như vậy, để đặt số phút 42 cho DS1307 chúng ta cần ghi vào thanh ghi MINUTES giá trị
66 (mã BCD của 42). Tất cả các phần mềm lập trình hay thanh ghi của chip điều khiển

16


đều sử dụng mã nhị phân thông thường, không phải mã BCD, do đó chúng ta cần viết các
chương trình con để quy đổi từ số thập nhị phân (hoặc thập phân thường) sang BCD,
phần này sẽ được trình bày trong lúc lập trình giao tiếp với DS1307. Thoạt nhìn, mọi
người đều cho rằng số BCD chỉ làm vấn đền thêm rắc rối, tuy nhiên số BCD rất có ưu
điểm trong việc hiển thị nhất là khi hiển thị từng chữ số như hiển thị bằng LED 7 đoạn
chẳng hạn. Quay lại ví dụ 42 phút, giả sử chúng ta dùng 2 LED 7-đoạn để hiện thị 2 chữ
số của số phút. Khi đọc thanh ghi MINUTES chúng ta thu được giá trị 66 (mã BCD của
42), do 66=01000010 (nhị phân), để hiển thị chúng ta chỉ cần dùng phương pháp tách bit
thông thường để tách số 01000010 thành 2 nhóm 0100 và 0010 (tách bằng toán tử shift
“>>” của C hoặc instruction LSL, LSR trong asm) và xuất trực tiếp 2 nhóm này ra LED
vì 0100 = 4 và 0010 =2, rất nhanh chóng. Thậm chí, nếu chúng ta nối 2 LED 7-đoạn

trong cùng 1 PORT, việc tách ra từng digit là không cần thiết, để hiển thị cả số, chỉ cần
xuất trực tiếp ra PORT. Như vậy, với số BCD, việc tách và hiển thị digit được thực hiện
rất dễ dàng, không cần thực hiện phép chia (rất tốn thời gian thực thi) cho cơ số 10, 100,
1000…như trong trường hợp số thập phân.
Thanh ghi giây (SECONDS): thanh ghi này là thanh ghi đầu tiên trong bộ nhớ của
DS1307, địa chỉ của nó là 0x00. Bốn bit thấp của thanh ghi này chứa mã BCD 4-bit của
chữ số hàng đơn vị của giá trị giây. Do giá trị cao nhất của chữ số hàng chục là 5 (không
có giây 60 !) nên chỉ cần 3 bit (các bit SECONDS6:4) là có thể mã hóa được (số 5 =101,
3 bit). Bit cao nhất, bit 7, trong thanh ghi này là 1 điều khiển có tên CH (Clock halt – treo
đồng hồ), nếu bit này được set bằng 1 bộ dao động trong chip bị vô hiệu hóa, đồng hồ
không hoạt động. Vì vậy, nhất thiết phải reset bit này xuống 0 ngay từ đầu.
Thanh ghi phút (MINUTES): có địa chỉ 0x01, chứa giá trị phút của đồng hồ. Tương
tự thanh ghi SECONDS, chỉ có 7 bit của thanh ghi này được dùng lưu mã BCD của phút,
bit 7 luôn luôn bằng 0.
Thanh ghi giờ (HOURS): có thể nói đây là thanh ghi phức tạp nhất trong DS1307.
Thanh ghi này có địa chỉ 0x02. Trước hết 4-bits thấp của thanh ghi này được dùng cho
chữ số hàng đơn vị của giờ. Do DS1307 hỗ trợ 2 loại hệ thống hiển thị giờ (gọi là mode)
là 12h (1h đến 12h) và 24h (1h đến 24h) giờ, bit6 (màu green trong hình 4) xác lập hệ
thống giờ. Nếu bit6=0 thì hệ thống 24h được chọn, khi đó 2 bit cao 5 và 4 dùng mã hóa
chữ số hàng chục của giá trị giờ. Do giá trị lớn nhất của chữ số hàng chục trong trường
hợp này là 2 (=10, nhị phân) nên 2 bit 5 và 4 là đủ để mã hóa. Nếu bit6=1 thì hệ thống
12h được chọn, với trường hợp này chỉ có bit 4 dùng mã hóa chữ số hàng chục của giờ,
bit 5 (màu orangetrong hình 4) chỉ buổi trong ngày, AM hoặc PM. Bit5 =0 là AM và
bit5=1 là PM. Bit 7 luôn bằng 0. (thiết kế này hơi dở, nếu dời hẳn 2 bit mode và A-P sang
2 bit 7 và 6 thì sẽ đơn giản hơn).
Thanh ghi thứ (DAY – ngày trong tuần): nằm ở địa chĩ 0x03. Thanh ghi DAY chỉ
mang giá trị từ 1 đến 7 tương ứng từ Chủ nhật đến thứ 7 trong 1 tuần. Vì thế, chỉ có 3 bit
thấp trong thanh ghi này có nghĩa.
Các thanh ghi còn lại có cấu trúc tương tự, DATE chứa ngày trong tháng (1 đến
31), MONTH chứa tháng (1 đến 12) và YEAR chứa năm (00 đến 99). Chú ý, DS1307

chỉ dùng cho 100 năm, nên giá trị năm chỉ có 2 chữ số, phần đầu của năm do người dùng
tự thêm vào (ví dụ 20xx).
Ngoài các thanh ghi trong bộ nhớ, DS1307 còn có một thanh ghi khác nằm riêng gọi

17


là con trỏ địa chỉ hay thanh ghi địa chỉ (Address Register). Giá trị của thanh ghi này là
địa chỉ của thanh ghi trong bộ nhớ mà người dùng muốn truy cập. Giá trị của thanh ghi
địa chỉ (tức địa chỉ của bộ nhớ) được set trong lệnh Write mà chúng ta sẽ khảo sát trong
phần tiếp theo, AVR và DS1307. Thanh ghi địa chỉ được tôi tô đỏ trong hình 6, cấu trúc
DS1307.

Hình 14: Cấu trúc DS1307.
1.2.2. Module thời gian thực và giao tiếp I2C với arduino.
1.2.2.1. Module thời gian thực DS1307.
Module thời gian thực DS1307 là bo mạch đã được hàn sẵn IC thời gian thực DS1307 và
các linh kiện điện tử cần thiết để hoạt động. Ngoài ra module còn được tích hợp thêm
một chip nhớ nhưng trong đề tài này chúng ta sẽ không đề cập đến nó.

18


Hình 15: Module thời gian thực sử dụng IC DS1307.

Hình 16: Sơ đồ nguyên lý của module thời gian thực
1.2.2.2. Chuẩn giao tiếp I2C và giao tiếp giữa module thời gian thực với arduino.
2C là viết tắt của "Inter-Integrated Circuit", một chuẩn giao tiếp được phát minh
bởi Philips’ semiconductor division (giờ là NXP) nhằm đơn giản hóa việc trao đổi dữ liệu
19



giữa các ICs. Đôi khi nó cũng được gọi là Two Wire Interface (TWI) vì chỉ sử dụng 2 kết
nối để truyền tải dữ liệu, 2 kết nối của giao tiếp I2C gồm: SDA (Serial Data Line) và SCL
(Serial Clock Line).
Có hàng ngàn thiết bị sử dụng giao tiếp I2C, chẳng hạn như real-time clocks, digital
potentiometers, temperature sensors, digital compasses, memory chips, FM radio circuits,
I/O expanders, LCD controllers, amplifiers,...Board Arduino của chúng ta có thể kiểm
soát tất cả và số lượng tối đa trong một thời điểm lên đến 112 thiết bị I2C.
Trên board Arduino nano, SDA là chân analog 4, SCL là chân analog 5.
Trên I2C bus, sẽ có một thiết bị được coi là "Master", và trong hầu hết các trường hợp,
Arduino là một "Master", mỗi IC được gắn trên I2C bus là một "Slave". Mỗi "slave" có
một địa chỉ riêng ở dạng HEX (thập lục phân) để Arduino ("Master") có thể giao tiếp với
nó. Để biết địa chỉ I2C bus của IC có thể dựa trên datasheet của nhà sản xuất.

Để I2C bus có thể hoạt động, chúng ta cần 2 điện trở pull-up như trong hình, 4.7k hoặc
10k là hợp lý. Tuy nhiên, nếu chỉ có một thiết bị I2C, chúng ta có thể bỏ qua điện trở
pull-up vì trong MCU ATmega328 của Arduino UNO đã có sẵn 20k build-in resisters.
Lưu ý: vì Arduino sử dụng điện áp 5V, do đó các thiết bị I2C cũng phải hoạt động ở
5V.
Đế sử dụng I2C bus trên Arduino, chúng ta sẽ cần sử dụng thư viện Wire.h (đây là
built-in library của Arduino).
Giới thiệu một số hàm trong thư viện Wire.h:
1. Wire.begin(address (optional));

20


o


Khởi tạo thư viện Wire.h và tham gia vào I2C bus.

o

address: 7-bit địa chỉ của thiết bị "Slave" (optional); nếu không có địa chỉ
thì coi như "Master".

2. Wire.beginTransmission(address);
o

Bắt đầu truyền dữ liệu đến thiết bị "Slave" với address đã có.

3. Wire.endTransmission();
o

Kết thúc truyền dữ liệu đến thiết bị "Slave" đã được bắt đầu
bởi Wire.beginTransmission(address).

4. Wire.write(value);
o

Ghi dữ liệu lên thiết bị "Slave", được gọi giữa beginTransmission()
và endTransmission().

5. Wire.read();
o

Đọc dữ liệu được truyền từ thiết bị "Slave" đến Arduino, được gọi sau
requestFrom().


6. Wire.requestFrom(address, quantity);
o

Được sử dụng bởi thiết bị "Master" để yêu cầu dữ liệu từ thiết bị "Slave".

o

address: là địa chỉ của thiết bị "Slave".

o

quantity: số lượng bytes yêu cầu.

1.3 Điện trở.
Điện trở là một linh kiện điện tử thụ động gồm 2 tiếp điểm kết nối, thường được
dùng để hạn chế cường độ dòng điện chảy trong mạch, điều chỉnh mức độ tín hiệu, dùng
để chia điện áp, kích hoạt các linh kiện điện tử chủ động như transistor, tiếp điểm cuối
trong đường truyền điện và có trong rất nhiều ứng dụng khác. Điện trở công suất có thể
tiêu tán một lượng lớn điện năng chuyển sang nhiệt năng có trong các bộ điều khiển động
cơ, trong các hệ thống phân phối điện. Các điện trở thường có trở kháng cố định, ít bị
thay đổi bởi nhiệt độ và điện áp hoạt động.

21


Hình 17: Một số hình dáng điện trở.
1.4 Điốt.
1.4.1 Điốt thường.
Điốt bán dẫn là linh kiện điện tử thụ động và phi tuyến, cho phép dòng điện đi qua
nó theo một chiều mà không theo chiều ngược lại, sử dụng các tính chất của các chất bán

dẫn. Cấu tạo của diode gồm hai chất bán dẫn loại P và N được ghép lại với nhau. Chiều
của dòng điện đi từ cực Anode sang Cathode.

Hình 18: Kí hiệu và hình dáng diode
Diode 1N4007 trong mạch được sử dụng để cho dòng điện đi theo một chiều cố
định để bảo vệ mạch.
1.4.2 Điốt Zener.

Điốt Zener, còn gọi là "điốt đánh thủng" hay điốt ổn áp: là loại điốt được chế
tạo tối ưu để hoạt động tốt trong miền đánh thủng. Khi sử dụng điốt này mắc ngược
chiều lại, nếu điện áp tại mạch lớn hơn điện áp định mức của điốt thì điốt sẽ cho dòng
điện đi qua.

22


Khi được phân cực thuận điốt Zener hoạt động giống điốt bình thường. Khi được phân
cực nghịch, lúc đầu chỉ có dòng điện thật nhỏ qua diode. Nhưng nếu điện áp nghịch
tăng đến một giá trị thích ứng: Vngược = Vz (Vz: điện áp Zener) thì dòng qua điốt
tăng mạnh, nhưng hiệu điện thế giữa hai đầu điốt hầu như không thay đổi, gọi là hiệu
thế Zener.

Hình 19: Kí hiệu và hình dáng đi ốt Zener

1.5 Transistor.

Hình 20: Hình dáng transistor sử dụng trong mạch

23



Transistor NPN C1815 có chức năng đóng ngắt nguồn điện cấp cho rơ le hoạt
động và đệm mức điện áp điều khiển. Transistor C1815 cho dòng điện đi qua tối đa là
150mA, điện áp tối đa 50V.
1.6. Rơ le
Rơ le là linh kiện được cấu tạo gồm cuộn hút và cặp tiếp điểm dùng để đóng cắt
nguồn điện hoặc thực hiện các chức năng cách ly cấp điện áp. Trong đề tài rơ le được sử
dụng để đóng cắt nguồn điện cấp cho bóng đèn và quạt hút.

Hình 21: Hình dáng rơ le sử dụng trong mạch.

1.7 Cầu chì
Cầu chì được sử dụng rộng rãi trong các mạch điện, hệ thống điện nhằm giảm
thiểu tác hại của sự cố chập cháy mạch điện, mạng điện. Cấu tạo gồm sợi dây chì mảnh
tùy theo dòng điện của nhu cầu sử dụng mà ta lựa chọn cầu chì có dòng điện định mức
phù hợp.

24


Hình 22: Hình dáng cầu chì sử dụng trong mạch.
1.8 Cách ly quang
Cách ly quang là linh kiện tích hợp có cấu tạo gồm một điốt phát quang và photo
transitor. Được dùng để cách ly giữa các khối chênh lệch nhau về điện hay công suất như
khối có công suất nhỏ với khối điện áp lớn. Hoặc có thể dùng để chống nhiễu cho các
mạch, chống nhiễu cho các thiết bị đo lường. Cách ly quang sử dụng trong hệ thống là
PC817 có hình dáng và cấu tạo như sau:

Hình 23: Hình ảnh cách ly quang và cấu tạo.
1.9 IC ổn áp LM317


25


×