Professional Documents
Culture Documents
V I A I Ể U K H IỂ N V À ỈN G D Ụ N G ■
ARDUINO
DÀNHCIO
NCIÍÍÍI Tự HỌC ■ ■
G lứ l T H IỆ U ■
C húc mừrig các bạn đến với tủ sách STK qua bộ sách Tự động hóa-
Thực hành điều khiển lập trình (P LC ), vi xử lý và vi điều khiển.
Bộ sách này gồm những chu yên đề sau:
1. Lập trình điều khiển với S 7-T ia Portal.
2. Tự động hóa tích hợp toàn diện-Hướng dẫn sử dụng S im atic Tia Portal.
3. Đ iều khiển lập trình và tạo giao diệ n HM I với W inC C F lexible.
4. Đ iều khiển lập trình và tạo giao diện HM I với Plc O m ron.
5. Đ iều khiển lập trình S cada - T ruyền thõ ng trong cô n g nghiệp.
6. G iáo trình thực hành vi xử lý.
7. G iáo trình thực hành vi điều khiển.
8. G iáo trình thực hành vi xừ lý và vi điều khiển với Proteus.
9. Lập trình điề u khiển với Arduino.
10. Vi điều khiển và ứng dụ n g -A rd u in o dành cho người tự học.
11. A rduino dành cho người bắt đầu.
12. Tự học lập trình điều khiển với A rduino.
13. Vi điều khiển và ứng dụ n g -L ậ p trình A rduino từ A-Z.
14. Lập trình điều khiển với R asphberry-R asphberry dành cho người tự học.
T ên gọi củ a sách của 8 tặp đầu tiên hết sức quen th u ộ c với sinh viên,
kỹ sư chuyên ngành Đ iệ n -Đ iệ n tử. 6 tặp còn lại giới thiệ u tới bạn đọc với m ột
cái tên mới là A rduino và Raspberry. Vậy A rduino và R aspberry là gì? Những
tĩnh vực nào có thể ứng dụng được A rduino, giá thà nh A rd u in o có m ắc lắm
không, A rduino có dễ dùng và dễ sử dụng hay không và n h iề u câu hỏi khác
nữa mà những người làm kỹ thu ật m uốn b iế t trước khi thử nghiệm với Arduino.
Riêng về bo m ạch Raspberry các bạn có thể tham khảo trên m ạng cũn g như
tham khảo phần phụ lục cuối sách.
A rduino được lạ o ra đầu tiên tại Ivrea - Italy vào năm 2005. Arduino
chính thức được đưa ra giới thiệu vào năm 2005 như là m ột cõn g cụ khiêm tổn
dành cho các sinh vièn của giáo sư M assim o Banzi, là m ột trong những người
phát triển Arduino, tại trường Interaction Design Instistute (IDI). M ặc dù hầu như
không được tiếp thị gì cả, tin tức về A rduino vẫn lan truyền với tốc độ chó ng m ặt
nhờ những lời truyền m iệng tố t đẹp củ a những người dùng đầu tiên. Arduino
làm việc trẽn nguồn mở dựa trèn nền tảng m ạch m ẫu điện tử (Kit), bao gồm m ột
vi điều khiển, m ột ngôn ngữ lập trinh và m ột IDE (trình soạn thảo).
3
cim TKIẼU IIM u a CM * M I r t IOC
Arduino là m ột cõng cụ để thực hiện các ứng dụng tưong tác. đuợc thiẽt
kế để nhăm làm đơn giản những tác vụ dành cho những người r^ói bãt đáu sư
dụng vi điều khiển cho nhiều mục đích (như tạo Robot, trang tri quảng cáo SỪ
dụng LED, quang báo, điều khiển động cơ, điều khiển nhiệt đõ. áp suất độ
ẩm...). Arduino được lắp ráp với các linh kiện điện tử thiết bị diện_ tương (ự như
trò chơi lắp ráp Lego, nhưng Arduino vẫn đủ linh hoạt cho các cnuyẽn gia phát
triển các dự án phức tạp.
Vào năm 2008, Arduino bắt đầu được một số thành viên trong các
cộng đồng giới thiệu trẽn các trang mạng nhưng cũng chỉ phát triển gói gọn
trong m ột sô' chuyên viên mà thôi. Tới năm 2011 tình hình sáng sủa hơn, cuộc
thi Robocon tại Việt Nam góp phần phát triển nhanh hơn việc sử dụng Arduino
từ những nhóm sinh viên mê say tham gia Robocon. Hầu như các robot thi
Robocon hiện tại đều ít nhiều sử dụng Arduino cùng các bo mạch mở rộng
cho nó. Tại Việt Nam, Arduino chủ yếu được nghiên cứu và ứng dụng tại các
trường Đại Học. Nếu chịu khó tra cứu từ khóa Arđuino trên mạng, bạn sẽ truy
cập không biết bao nhiẽu trang web cho phép bạn tải về các Ebook cũng như
các bài hướng dẫn (tutorial) kiểu bắt tay chỉ việc, học lặp trình điều khiển
Arduino từ cơ bản đến nãng cao. Nhờ vậy, tại các nước phát triển Arduino đã
xăm nhập đến cả những học sinh mới hpc cấp 3 sử dụng cả Iphone, Ipad để
điều khiển từ xa máy bay, vật thể không người lái, các mạch báo động lắp ráp
trong nhà, lắp ráp các loại robot khác nhau trong khi các học sinh đó không
được trang bị sâu kiến thức Đ iện-điện tử so với các các sinh viên chuyên
ngành. Nhiều mạch điện tử trong số đó đủ hàm lượng hpc thuật để làm các
đề tài tốt nghiệp cho sinh viẽn chuyên ngành Điện-Đ iện tử.
Vào năm 2015, Arduino Uno có lẽ là bo mạch tốt nhất dành cho các
bạn sinh viên, học sinh muốn tìm hiểu, nghiên cứu về vi điều khiển đề ứng
dụng trong cuộc sống, trong công nghiệp, trong khoa hpc, thi Robocon..
Những người mới bắt đầu sử dụng vi điều khiển có thể áp dụng
Arduino vào những ứng dụng thực tiễn trong đời sổng với những lý do sau:
• Bo mạch có giá rẻ, dễ sử dụng ứng dụng trong nhiều ngành nghề như:
Thi Robot, điều khiển các bảng quảng cáo, quang báo sử dụng LED
đơn, LED ma trận, điều khiển động cơ, điều khiển nhiệt độ hiển thị
kết quả đo trên LED 7 đoạn, LCD. Bo mạch (phần cứng) được thiết kế
có mã nguồn mở cho cả phần cứng lẫn phần mềm.
Với ý tưởng mã nguồn mở (Open sources) có nghĩa là phần cứng
phần mềm, sơ đồ mạch, phần mềm soạn thảo cùa IDE để viết code ý
tưởng thiết kế, sẽ không phải mất tiền mua, Arduino là m ót kit xử ly
đượ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ơ,_
4
MDB1N0 PAWN CHO HGƯỜI T f BỢC tlứ l THIỆĐ
• Đ iểm hấp dẫn ở A rduino là cá c bạn lặp trình với n g ôn ngữ rất dễ
học (giống như c , C++, M atlab), c á c phần tử ngoại vi trên kit A rd u in o
đều được chu ẩn hóa, với giá thành rẻ phù hợp với túi tiề n cho người
sử dụng bo m ạch Arduino.
• 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. 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.
• Và điều làm nên hiện tượng A rduino chính là: Phần cứng cho bo m ạch
A rduino có giá khá rẻ, tại thời điểm tháng 1-2015, ch ỉ với khoảng
350.000 đ, người dùng đã có thể sở hữu m ộ t bo m ạch A rduino M ega
2560 R3 (theo nguyên bản Arduỉno, phiên bản ch ấ t lượng tốt) với số
lượng cổng giao tiếp ngoại vi và dung lượng bộ nhớ nhiều nhất so với
các dạng bo m ạch của Arduino. H ay bo m ạch A rdu in o UNO có cổng
USB sử dụng rộng rãi nhất hiện nay có giá khoảng 23 0.00 0 đ. M ộ t bo
m ạch A rduino UNO nếu m ua ở châu  u có giá khoảng 15-20 $ u s ,
m ua đồ T rung Q uốc còn có giá rẻ b ấ t ngờ (kho ản g 8 đến 12 $ US).
V iệ c thay thế con ch ip vi điều khiển trẽn bo m ạch (xem như trái tim
cùa bo m ạch) nếu bị chá y cũn g có thể m ua dễ dà ng với chi phí không
quá US $ 4. Vì vậy, bạn có thể yên tâm đủ khả năng tài chính để khắc
phục cho những sai lầm nếu có.
ỉ
6IỬ I THIỆU AIMW u a a» WW rtW j-
Arduino có nền tảng làm việc khác với các bo mạch truóc đo co trẽn
thị trường từ các hãng khác nhau vì các tính năng sau:
• Arduino làm việc trong một môi trường đa hệ điều hãnn nó có thê
chạy trên W indows, Macintosh, và Linux.
• Nó làm việc dựa trên IDE với một trình soạn thảo trong m õi trường
phát triển tích hợp, môi trường phát triển này rất dễ sừ dung được sử
dụng bởi các nghệ sĩ và những nhà thiết kế.
• Chương trình thiết kế (lập trinh) có thể được tải từ máy tinh vào bo
mạch thông qua cổng USB (cáp USB), không phải là một cổng nối tiếp
(serial port). Tính năng này rất hữu ích, bởi vì nhiều máy tính đời mới
khõng có cổng nối tiếp.
• Sách vở viết hướng dẫn sử dụng Arduino rất đa dạng từ nhiều nguồn,
nhiều tác giả khác nhau (tiếng Anh). Đa số các sách đều có các bài
tập từ cơ bản cho đến nâng cao. Các bài tập trong sách đều cỏ mã
nguồn để người đọc dễ theo dôi kiểm tra.
• Dự án Arduino được phát triền trong một môi trường giáo dục và do đó
rất tốt cho người mới bắt đầu làm quen với Arduino có được những thứ
làm việc một cách nhanh chóng.
Cuốn sách này được soạn nhằm giúp người mới bắt đầu làm quen với
vi xử lý, điều khiển, những kỹ sư ra trường đã lâu không có điều kiện cũng
như thời gian để hiểu những lệnh rối rắm, phức tạp của các họ vi xử lý, vi điều
khiển thì nay có thể áp dụng các kiến thức trong sách để tự học, lặp trình điều
khiển nhiều mạch điện tử ứng dụng trong cõng nghiệp cũng nhu dãn dụng.
Nhiều lợi ích mà họ có thể nhận được từ việc học cách sử dụng lặp trinh điều
khiển trẽn nền tảng Arduino qua việc áp dụng triết lý của những naưói sáng
lập ra nó. Cuốn sách này ban đầu được các tác giả dự định đưoc viết cho
những người bắt đầu làm quen với Điện-Điện tử, các học sinh trung cấD nghé
cũng như các học sinh cấp 3 có thể khai thác và úng dụng A rauin; 3ijịu
khiển. Nhưng càng đi sâu, vấn dề cáng trỏ nên phức tạp bài hai n o v/è n " lá n
chính sau:
6
A1 H IM SARI CM MCếSl I f MC B ấ lT B Ệ I
• V iệ c xử lý hinh ảnh m inh họa m ất rất nhiều thời gian, việc c h ụ p các
m ạch điện lắp ráp cá c linh kiện với bo m ạch bằng m áy ảnh khõng đ ạ t
do ảnh không rõ nét trong quá trình in ấn. V iệ c vẽ hình m inh họa bằng
cá c phần m ềm chu yên dùng như C o relD raw hay Adobe Illu stra to r thì
có thuận lợi là ảnh rất rõ nhưng m ất rất nh iề u thời gian.
• Nếu ch ỉ lặp trình A rdu in o cho v iệ c điều khiển LED , tạo cá c hiệu ứng
cho LED thì đáp ứng được đối tượng đề ra ngay từ đầu nhưng sẽ làm
người họ c hiểu sai sửc m ạnh củ a A rduino là chỉ có điều khiển LED
trong q u ả n g cáo.
N hiều ung dụng điều khiển khác phức tạp hơn như:
7
C lỉl TH1ỆB U M IM CM ■ » « ! Tf lệ t
Rất nhiều sinh viên trong cũng như ngoài ngành Điên nnũng nguòi
mới bắt đẩu tiếp cận điện tử (vi điều khiển) lẳn đầu đều nghĩ rằng:Họ phải
học cách để xây dựng tất cả mọi thứ từ đầu thưởng đều "bỏ cùa chạy lấy
người' sau vài buổi học đầu tiên, đây là một sự lãng phí thời gian:
• Tài liệu biên soạn trên phiên bản Arduino chạy trẽn nền W indows
nếu máy tinh các bạn dùng hệ điều hành Linux hay Mac vẫn có thể
thực hành các bài tập trong sách mà không ảnh hưởng nhiếu đến việc
thực hành hãy tham khảo thêm trong trang web'
h ttp ://w w w .a rd u in o .cc/
8
A l— — lẢ m CM M tế il T f I f c a il T1ÊI
(Lưu ý : Nếu trang web h ttp ://to rre n tc ra z y .c o m không truy cập được,
bạn đọc có th ề vào trang web h ttp ://k ic k a s s .s o /.
Trong quá trình bièn soạn không thể tránh khỏi thiế u sót, chú ng tôi
m ong được cá c bạn đọc góp ý, trao đổ i về tủ sách STK để nội dung
biên soạn ngày càn g tốt hơn.
H ãy tải về các dữ liệu (code lặp trinh) theo đường dẫn sau để thực
hành các bài tập trong sách:
M ọi thắc m ắc, góp ý xin gừi về hộp thư: nh asa chstk@ y a h o o .co m .vn .
TỦ SÁCH STK
* ( 0 8 ) 38334168 - 0903728344
Rất m ong nhận được nhiều ý kiến đóng góp, nhất là ý kiến của các
thầy, cô có nhiều kinh nghiệm giảng dạy các chủ đề liên quan trong sách để
sách được hoàn thiệ n hơn trong những lần tái bản sau.
C ác tác giả
9
6IỚI THIỆU IIIM IM M i 1 1 1 TI — c
10
ARDUINO DÀIW CHO NGƯƠI Tự HỌC CHƯƠNG 1: Slửl THIỆU THIẾT KỂ QUẢNG CẢO
CHƯdNG 1
11
CHƯƠHe 1: Glđl THIỆU ĨH IỂ ĨIÉ QUẢNB CẤO lig 0 0 B lt D I T lí HOC
• Làm bang thông báo trong các cơ quan: Ngân hàng, buu đ>ẻn. cóng ty
xô so kien thiet, ủy ban nhân dân, chi cục thuế chứng khoan
• Sử dụng trên đường giao thông: Làm cổng chào thông báo tinh hình
giao thõng._
• Làm bang quảng cáo cho công ty, nhà hàng showroom, siêu thị.
Hiện nay đèn LED đã bắt đáu thay thế dán các loại các loại dèn thõng
dụng trong chỉeu sáng mặc dầu giá thành còn khá cao nhưng so vê lãu dài
thì rất tiết kiệm về mặt năng lượng, cụ thể trong chiếu sáng công cộng: Đèn
đường LED, đèn chiếu sáng vỉa hè..., trong chiếu sáng quảng cáo Neon-LED
thay cho đèn Neon-sign tiết kiệm 50% điẹn nâng, các bảng quảng cáo LED
rất sinh động và tiết kiệm năng lượng. Để tạo thành các bảng hiệu có thõng
tin cố định người ta thường dùng các loại LED đơn với nhiéu màu sắc để tạo
các ký tự và hình ảnh, dùng mạch điện tử diéu khiển sự chđp tắt và tạo hiệu
ứng ánh sáng mong muốn. Việc sử dụng đèn LED và mạch điện từ để tạo các
hiệu ủng ánh sáng nhằm mục dich gây sự chú ý và truyền đạt thông tin cùa
công ty đến khách hàng hoặc người đi đường .
• LEDsign: Là các bảng hiệu (biển hiệu) có sử dụng LED để trang tri và gây
sự chú ý cao trong cảnh báo và trong kinh doanh để thu hút sự chú ý cùa
khách hàng. Một số tên liên quan: Bảng thông tin điện tử, Bàng hiệu LED,
Bàng quang báo, Màn hình LED, LED Display, LEDsign...
• Bảng điện tử có thông tin thay đổi được còn gọi là bảng quang báo
hay màn hình điện tử LED.
12
MOW N) DAM CHO Kirill Tự HỌC CHƯƠMG1: e ifll THIỆU THIẾT IÉ QUẦBC CÂĐ
Neon sign có nhiểu màu được uốn theo chữ viết hoặc hinh ảnh thường
dùng để trang trí, quảng cáo và biển hiệu các quán rượu, nhà hàng, sòng bạc,
khách sạn, và những nơi vui chơi giài trí. Bằng cách thiết kế các bộ phận
chuyển mạch, có thể tạo ra vô số hình ảnh sống động và rực rỡ.
14
ABDUmODÀNHCHONBƯƠI TựHỌC _________ CHƯƠH6 1: EỊỞI THIỆU THIẾT KẾ qUẦNC CÁQ
CHƯƠH61: Bllìl THIỆU THIÉTIÉ QUẦIK CÁO U M a » » « ) I Tự nọc
Bảng LED vẫy là m ột ứng dụng phổ biến nhất vé đèn LED , sử dụng
bảng hiệu LED vẫy hình ảnh hiển thị vô cùng sống động và cuốn hút. Bảng
LED vẫy có giá thành rẻ, chi phí thấp mà hiệu quả đem lại cao. Đ ặc biệt với
LED vẫy trên nén chữ nổi là m ột sự lựa chọn làm thay đổ i cả không gian, bề
m ặt cùa doanh nghiệp, tạo vẻ ấn tượng thu hút với người nhìn từ xa.
Với kích thư đc và trọng lượng nhẹ, có thể lắp đặt, di dởi theo nhiểu vị
trí mà bạn m uốn. K ế t cấu và giá thành cùa bảng LED vẫy phụ th u ộ c chủ yếu
vào sô lượng LED sừ dụng trê n bảng hiệu sẽ giúp bạn có nhiều lụa chọn
trong yê u cấu th iế t kế để có m ột bảng hiệu ưng ý.
Loại bảng này có thê’ tạo những hiệu úng khá đẹp m ắt trong khi giá
thà nh lại tháp hon so v đ i b ả n g L E D m a tr ậ ũ iia y màn hình full color.
17
CHƯƠHS 1: eiớl THIỆU TH IỄĨIÉ QOÀK CÁO U M m Ktoi n f »ọc
Nhược điểm lớn nhất của loại bảng này là nội dung hiền thị trẽn bảng
loại này không thể thay đổi được.
Ưu điểm của sản phẩm
• Bảng LED vẫy là một ứng dụng phổ biến nhất vế LED. sừ dụng bảng
LED vẫy hình ảnh hiển thị vô cùng sống dộng và cuốn hút.
• Bảng LED vẫy có giá thành rẻ, chi phi tháp mà hiệu quà dem lại cao.
Đặc biệt với LED trên nén chữ nổi là một sự lựa chọn làm thay đổi cả
không gian, bế mặt của doanh nghiệp, tạo vẻ ấn tượng thu hút vđi
người nhìn ngay từ dằng xa.
LED là thành phần chính cùa bảng quảng cáo LED vẫy, chúng ta cán
tìm hiểu LED trước khi thành lập mạch diện tử điếu khiển nó.
ĐÈN LED LÀ GÌ?
Có nhiều người hiểu đèn LED là gì nhưng cũng không ít người chưa biết.
LED viết tắt cùa cụm từ tiếng Anh Light Emitting Diode, tạm dịch là Diode phát
quang nó là các diode có khả năng phát ra ánh sáng hoặc tia hống ngoại, tử
ngoại tùy từng loại LED. Cũng giống như diode, LED được cấu tạo từ một bán
dẫn loại p ghép với một bán dẫn loại N. Nó có tinh chất cùa một diode chỉ cho
■lòng điện chạy qua theo một chiếu, vì thế đa số trường hợp ta phài nuôi đèn
LED b nguốn điện một chiều. Nếu ta nối đèn LED vđi một nguỗn xoay chiéu
CO điẹn áp p i'r '^ t f p thì đèn LED vẫn sáng. Trong trường hợp này, chỉ một nửa
chu kỳ cùa dòng xù?v -chi®u di qua đư<=,c đèn LED và làm cho nó Phát sán9
Nếu muốn kiểm chứng, bạ,? có thể nối đèn LED với nguón xoay chiéu rói dùng
điện thoại có camera quay lại. Bạ.v s® thấy nó nhấp nháy chứ không sáng liên
tục. Nếu dùng nguồn 1 chiều (DC) thi không có hiện tượng này. LED phát sáng
là do sự tái hợp của điện tử và lỗ trông trong phất bán dân khi có dòng điện
chạy qua. Sự tái hợp này sẽ giải phóng năng lượng dưới dạng bức xạ ánh sáng.
Tùy theo loại bán dẫn được sừ dụng mà năng lượng được giải phóng khác nhau
và ánh sáng phát ra có màu sắc khác nhau. LED đơn sắc chỉ phát ra ánh sáng
trong một vùng bước sóng nhỏ và không phát ra các bưóc sóng khác. Không
giống như bóng đèn sợi dốt thông thường hoạt động dựa trên việc dốt nóng dày
tóc, nguyên lý phát quang cùa đèn LED làm cho nó có hiệụ suất phát sáng cao
hơn nhiểu do ít bị hao tổn nhiệt.
Cấu tạo của đèn LED
Bộ phận chính của một đèn LED là hai lớp bán dẫn loại p và loại N
đặt tiếp xúc vđi nhau. Kích thưđc cùa các Iđp bán dẫn này rất nhò, ch! cd vài
phán trăm milimet. Do vậy cõng nghệ chế tạo đèn LED cũng dòi hòi công
nghệ cao. ồ Việt Nam đã sản xuất được đèn LED, không tính việc nhập chip
về rối chế tạo thành phẩm. Phán trinh bày trang bẽn mô tả lớp bán dẫn và
cấu tạo bên trong của một bónp đèn LED ttiông thường.
1Q 9
ARDUIRO DAM CHO MGƯỪI ĩự HỌC CHƯƠNG 1: Glđl THIỆP THIẾT ÍẺ QUẦHC CA ũ
Lớp bán dẫn được vẽ phóng đạ i lên để cho ta dễ hình dung. Thực tế
việ c nôi điệ n cực cho các lớp bán dẫn này rất khó vì kích thước rất nhò. Hình
trê n mô tả sá t thự c tế hơn với lớp bán dẫn được đặt trong m ộ t đĩa p h ản quang.
Vỏ bọc bên ngoài được làm bằng nhựa trong suố t hoặc có thể pha th ẽ m chất
tạo m àu. Lớp vỏ này có tác dụng làm giá đỡ, bảo vệ kế t cấ u của đèn đông
thời phần chóp cầu phía trê n có tá c dụng hội tụ hưđng ánh sáng ph át ra theo
m ột hưổng với m ộ t g ó c mở nhất định. Vì cấu tạo phần bán dẫn và dây nố i bên
trong rất nhỏ nên nếu chúng ta tác động lực quá m ạnh vào chân điệ n cực cùa
đèn LED có thể gây phá vỡ kết cấu và có thể làm hỏng đèn.
H iện nay đã có những loại bóng LED cao cấp dùng cho biển quảng
cáo LE D sign cỡ lớn. Đường kính bóng LED có hai loại: loại 5 ly b ọ c nhựa
thành 8 ly và loại 8 ly b ọ c nhựa thà nh 12 ly.
19
CHƯƠNG 1: Glửl THIỆU THIẾT IẼ QUẢNG CÁO Ấ IĐ U U B 1 » a o K U O I Tự HOC
• Loại LED 5 ly bọc nhựa 8 ly: Loại này có lẽ lá loai có gia rè nhẵt cùa
dòng LED đúc. Nó có màu sắc tương tự như LED 5 ly đon sãc thông
thường. Mỗi bóng LED dã dược nối sẵn điện trở hạn dong phù hợp.
Bạn chi việc nối hai đầu dây cùa cụm thẳng vào nguòn 5V hoặc 12V
là LED sáng. Các bóng LED được bọc nhựa kin nẽn có thể chống
được nước mưa. Điều khiển giống như LED 5 ly thưởng, nỗi chung cực
dương cùa các cụm bóng còn cực âm nối vào mạch diếu khiển.
Loại LED 8 ly bọc nhựa 12 ly đơn sắc: Loại này tương tự như loại 5
ly chỉ khác kích thưđc. Thường dùng cho những biển chữ Iđn, treo ở
trẽn cao.
Loại LED 8 ly bọc nhựa 12 ly bày màu: Loại náy có 4 đáu dây cho mỗi
LED. Thực ra 7 màu là kết quà pha trộn giữa 3 màu đỏ, xanh lá, xanh
dương. Ví dụ, nếu ta cho màu đỏ sáng cùng màu xanh dương sẽ có
màu tím, màu đò sáng cùng màu xanh lá sẽ có màu vàng.... Mỗi bóng
ta sẽ có 1 dây dương chung và ba dây còn lại là của ba màu.
20
AROUINO DAW CHO « ư ừ l Tự HỌC CHƯƠNG 1 :6IƠI THIỆU THIẾT KẼ qUẤNe CÃO
Loại LED full color này tuy có giá thành m ắc nhưng cho nhiều hiệu
ứng tùy vào v iệ c bố trí và điểu khiển m àu.
Đ èn LED ch iếu âm -
LED cụm
Được sử dụng nếu các
bạn m uốn có được kiểu chữ
nổi chiếu sáng như hình bên.
Loại LED này bán
sẵn, người th iế t kế chi việ c
m ua vể và gắn là xong.
Đ è n LED d ây
S ù d ụ ng đ è n LED dây
có thể lắp đ ặ t chạ y phía trong
m ặt kính. V ào bu ổ i tối có thể
tạo ra cá c hiệu ứng đ ổ i m àu
và hình ảnh khác nhau. Vào
thời gian ban ngày, c á c dãy
đèn LED này cũng không ảnh
hưởng nhiều đến kiên trú c bế
m ặt kính.
21
CHƯƠHG 1: GIỚI THIỆII THIẾT IỄ QUẢfE CẤD Aiun^i I f ao T* jjg
Các LED
được tự động
kích hoạt từ khi
mặt trời lặn đến
12h đêm khõng
những làm công
trinh nổi bật, trở
thành một điểm
đến thú vị cho
khách du lịch, mà
còn có ý nghĩa
trong việc tiết
kiệm năng lượng.
Với hiệu quả mang lại: Chi phi bảo trì thấp, tiết kiệm diện, có thể
đổi màu thể hiện được nét độc dáo của đường cong kiến trúc công trinh, ánh
sáng tập trung vào các chi tiết công trình, không có ánh sáng thừa gây lãng
phí và ô nhiễm ánh sáng. Sừ dụng LED rất hiệu quả so vđi việc sừ dụng các
bộ đèn pha thông thường hàng ngàn W att có tuổi thp thấp và tỏa nhiếu nhiệt.
22
AKDUtaO B Á M CHO K ư ữ l ĩự HỌC CHƯƠNG 1: Glđl THIỆU THIẾT IỂ QUẦNG CÁO
Do khả năng
hiển th ị m ộ t d ả i rộng
c á c m àu s ắ c và m ộ t
bộ xừ lý m ạnh m ẽ,
bảng điện tử loại này
có khả năng hiển thị
những hình ảnh video
như m ộ t m àn hình TV
nhưng vdi kích thư đc
linh ho ạt the o yê u cầu
của khách hàng.
So vđi các sản phẩm quàng cáo phát sáng hiện có thi dãy la san
phẩm có đặc điểm gây sự chú ý cao nhất, dễ quan s á t dẻ h|é u n^af
bởi hình ảnh sốnq đõnq và trực quan hơn cả.
24
ABDUIRO D À M CHO MGƯỪI ĩự H Ọ C CHƯƠNG 1: eiđl THIỆU THIẾT «Ễ QUẢNG CÁO
BƯỚC 1: T H IẾ T KẼ'
BƯỚC 2: KHOAN L ỗ T H E O M AK ET T H IẾ T KẾ
Sau khi đã làm xong m aket (thường vẽ bằng chương trình Corel hay
AutoC AD ), tiến hành khoan lỗ trên bảng theo m aket đã làm. V ặ t liệu làm biển
có thể là m ica hay alum inum với màu nền thường có màu tối. Nếu sử dụng m áy
CNC thì chi cần lập trình để máy tự động khoan rất chính xác. Nếu không có
m áy CNC thì ta có thể in thiế t kế ra g iấ y ,rồ i dán lên m ặt bảng sau đó dùng
khoan tay thôi. LƯU ý: c ầ n dùng m ũi khoan có đường kinh bằng v đ i dưàng
kính cùa bóng LED. Như vậy bóng LED mới có thể lắp vừa khít vào lỗ khoan.
N ên khoan thù và i lỗ để thừ trước cho chắc. N ếu khoan v đ i m ica thì m ũi khoan
ph ả i m ài cho b đ t sắ c đi nếu không dễ gây phá vỡ lỗ khi khoan.
25
CHƯƠIK 1: eiứl THIỆU THIÉTIÉ QUẲK CẢO IM B !>■ ao PM I m mt
Nếu có thể tự chế tạo mạch điểu khiển cho biểrk.LEDsign thì tốt. Bạn
sẽ học được nhiều thứ. Tuy nhiên việc mua mạch diếu ỉáiiển bán sẩn trên thị
trường sẽ không mất thời gian mà lại rẻ hơn tự làm nhiéu.
Với các bo mạch bán sẵn, người dùng chi cấn nối chung cực dương
của tất cả các khối LED. Cực âm của từng khối được nối vào từng kênh trên
mạch diéu khiển. Tùy theo việc bô trí các khối LED như thế nào và định cho
nhấp nháy kiểu g) thì sẽ có cách nối theo từng nhóm kênh để dễ điéu khiển
Các bo mạch bán sẵn thường cho người dùng phán mềm lập trình miễn phí và
rất dễ dùng. Ta có thể chpn hiệu ứng sáng dần, tắt dán, độ sáng bao nhiêu,
thời gian sáng v.v. Sau đó chỉ nhấn ‘ Chạy chương trình' là xong. Trong
chuyên đề này tuy hướng dẫn các bạn điểu khiển LED bằng bo mạch Arduino
nhưng việc lập trình sẽ khó hơn nhiéu so với các bo mạch chuyên dùng rất dễ
dùng. Tuy nhiên, việc hưđng dẫn điều khiển LED bằng bo mạch Arduino giúp
người học khai thác các cõng cụ và lệnh trong Arduino để từ đó thiết kế các
mạch ứng dụng khác phức tạp và đa dạng mà các bo mạch chuyên dùng để
điều khiển LED sẽ khó hay không thực hiện được.
BƯỚC 5: LÀM HỘP CHO BẢNG
Việc làm hộp cho bảng diện trước hết là để bảo vệ hệ thống điện cùa
bảng. Việc làm khung hộp đẹp cũng góp phẫn làm cho sản phẩm của chúng
ta chuyên nghiệp và bắt mắt hơn. Có nhiễu cách làm khung hộp, tùy bạn thấy
cách nào phù hợp và đẹp thì làm theo cách đó. Miễn sao phải đảm bảo chống
được nước mưa lọt vào làm hỏng hệ thống điện. Sau khi hoàn thiện tất cả các
bước bạn nên chạy thử và kiểm tra trong vài ngày xem có vấn đé gì không rối
mđi đi treo để đđ phải tháo lên tháo xuống khắc phục.
28
M D U IM D A W CHO IKƯ 0I Tự HỌC CHƯđNG 1: Glđl THIỆU THIẾT KÉ QUẢNG CÁO
Q U Ả N G CÁ O LED MA TR Ậ N
Bảng LED m a trận hay còn có cách gọ i đơn giản khác là bảng chữ chạy
đang được phát triển với nhiểu cài tiến vế chất lượng lẫn hiệu quả. Thay vi nội
dung quảng cáo cố định như bảng LED vẫy, người dùng có thể thường xuyên
cập nhặt nội dung trên bảng LED ma trận. Hoặc nếu thay đổ i hình thức hay địa
chỉ kinh doanh thì bảng LED chữ chạy vẫn có thể tận dụng tốt.
T ìm hiểu vể bảng quảng cáo LED ma trận
Bảng quảng cáo LED ma trậ n đã không còn xa lạ gì vđ i chúng ta nOa.
K hi di ngoài đường chúng ta gặp rất nhiểu bảng quảng cáo có thể cho dòng
thô ng tin hay hình ảnh trô i qua. Đó chính là loại bảng quảng cáo LED m a trận.
K hi bạn m uố n th iế t kế m ột bảng quảng cáo như vậy, bạn cần tìm hiểu vế nó.
11
CHƯƠNG 1: Glứl THIỆU THIẾT IỄ QUẢNE CÁO MDUIN) IẦ M cm w f t l l Tự nạt
Trên bảng LED ma trận, các bóng hoặc các cụm bóng LED được xép
thành các hàng và các cột. Dạng bố trí này giông như một ma trận nẽn ngươi ta
gọi đó là LED ma trận (LED matrix). Lấy ví dụ một biển quàng cáo LED ma trận
có 100 cột và 32 hàng ta sẽ có 3200 bóng dèn LED. Vì sao lại phài bó tri nhtèu
bóng đèn LED như vậy? Đó là vì người la muốn bảng ma trận LED có thê hiển
thị dược vãn bản hoặc hình ành giống như một màn hình. Các bạn biết, màn
hình cùa điện thoại đời thấp có khoảng 68 hàng và 98 cột. Ta thấy hình ảnh trên
màn hình điện thoại loại này cũng gán giống như hình ành hiển thị trẽn các
bảng quảng cáo LED ma trận. Nó gốm tập hợp những điểm rời rạc ghép lại. Số
hàng và số cột càng nhiều thì hình ảnh càng mịn. Hiện nay màn hình điện thoại
đã phát triển thành full color với 854 hàng và 480 cột. Màn hình LED ma trận
cũng vậy, đã có những màn hình LED full color có thể trinh chiếu video không
kém những loại màn hình nào khác. Hơn thế, màn hình LED có ưu thế là độ
sáng mạnh, có thể để ngoài trời mà vẫn hiển thị rõ hình ảnh.
Để phù hợp với ngành quảng cáo, có nhiều loại LED ma trận được
sản xuất. Có loại đơn sắc, đa sắc, full color, loại phân giải cao, phân giải thấp,
loại dùng trong nhà, loại dùng ngoài trời... LED đơn sắc thi mỗi điểm ảnh chi
có 1 LED loại 1 màu (đò, xanh, vàng...). Với ma trận LED đa sắc, mỗi điểm
ảnh có thể có 2 hoặc 3 bóng LED có màu khác nhau. Những LED màu khác
nhau khi sáng gần nhau sẽ pha trộn tạo thành các màu sắc khác nhau. Ví dụ,
màu xanh để gấn màu đỏ mắt ta sẽ thấy đó là màu vàng. Còn với LED full
color thì mỗi điểm ảnh sẽ có 3 màu cơ bản: Đỏ, xanh lá, xanh dương, việc pha
trộn các màu này với mức độ khác nhau sẽ tạo ra hàng triệu màu.
Các ma trận
LED được sản xuất
thành các module. Ví
dụ loại LED dơn sắc
P10, mỗi module có
16 hàng và 32 cột.
Khoảng cách
điểm ảnh cùa
module P10 là 10
mm. Do vậy module
P10 có kích thước là
16x32 cm.
28
ARDUINO DANH CHO NBƯÍtl Tự HỌC CHƯƠHG1: Clđl THIỆU THIẾT IẼ QUẦNG CÁŨ
Khi m uốn làm m ộ t bảng quảng cáo LED m a trận, bạn phải tinh toán
dựa trê n những kích thước có sẵn này để tính được tổng số LED sau đó tính
toán dòng và áp cho khối nguồn. P hần trình bày sau g iđ i thiệ u m odule P10 có
đ ầ y đủ cá c thà nh phấn cơ bản của m ột m odule, m ột khi đã hiểu rõ m odule
này thì sau này gặp ph ả i c á c m odule khác các bạn sẽ không bỡ ngỡ.
M ặ t trước củ a m odule LED P10 như hình trang bên.
Như c á c bạn đã biết, m odule P10 có nghĩa là khoảng cách điểm ảnh,
ở đ â y là hai bóng LED liên tiế p nhau là 10 mm. M ỗi điểm ảnh là m ộ t bóng
LED vì vậ y đ â y là loại P10 đơn sắ c có m àu đỏ. M odule này có 32 cộ t và 16
hàng tương đương với kích thước 160 X 320 mm. Đ ây là m odule loại chịu nưđc
nên khuôn nhựa được đ ú c rất khít với bóng LED để trá n h nước. C h iều d à y của
khuôn nhựa cũng d à y hơn loại sem i outdoor.
29
CHƯƠHG1: Glđl THIỆU TH1ẼT IÉ QUẢIC CÁO I— i u a r t H t
«►£* * * « «►
' * ' • * « '♦ " • " • * ♦ • • • > ' • • •
! « '« / '♦ ♦ ;• # * * * * ♦ ♦ * ♦ '■ * * ♦' V ♦ V ♦ í ►♦ *
# ':♦ . * * V * * ♦ * * * '# '* v v V ♦ • ♦ ♦
' * '■ * * *•' ♦ * “ «►4» • • • • ♦ • ♦ *
W * <*■«►■“<* .♦'«►. *'• + V V “ì ỉ ' * ♦ • • • ♦ ♦ ♦ ♦ • • •
<*'♦ % *«ík'3Í’♦ ' » ^ f s r «►
« ifr > # ^ ' V * * ^ ♦ '^ V V ¥ • 'V • V * *
* * ' * ' 4 * ' * * «. ♦ Ị ? ' • • ' ¥ ¥ ¥ ■» «TV '«►«►♦ •
* «» « ệ '♦ '# '. # ; » 'iy-'ijf 'Y :t r V • > “ ¥ ¥ * V ¥ V «* «► ■ «► • ♦' • * • • •
^ ^ « w " ♦ '♦ 'r i* «►<£'*' ♦ '*■ ♦ * ' * • * ♦ » • •
•»«»«• ♦■'♦"♦' *■ '♦ ’♦ V >' '* '«• <»«* «►"«►«* «•
Giắc nối tin hiệu từ CPU Giắc nối tin hiệu vđi module sau
Khi mua module P10 bạn sẽ dược cung cấp dù giắc tin hiệu, dây nói
nguôn, và gioăng cao su. Mặt sau có 2 giắc tín hiệu. Các bạn nhìn theo chléu
mũi tên đánh dấu trên bo mạch. Giắc thứ nhất là để nối tín hiệu từ CPU vào
(nếu đây là module đáu hàng) hoặc từ module phía trưđc. Khi cắm cáp các
bạn chú ý trên bo mạch ỏ dấu mỗi giắc có chữ "OE-, phải cắm sao cho vị tri
OE ở module này nối với vị tri ’ OE’ ở module kia hoặc trên CPU.
CHtftiK 1: Glđl THIỆU THÉT IẾ QUẢNB CÁO
P10 16 cm X 32 cm 10 mm
P20 16 cm X 32 cm 20 mm
31
CHƯƠNG 1: CIOI THIỆU THIỂTIÉ q ilÀ B CÁO U M ca m IIipc
32
ABDUIWO DÀIH CHO K ư đ l Tự UQC CHƯƠNG 1: tlỡ l THIỆU THÉT KẼ QUẨMS CÀO
M odule P20 3 m àu, đò, vàng, xanh lá cây (G iá bán: K hoảng 210.000 đ
(ch ấ t lượng cao). P20 (3 m àu). 1/4 Hub 12 .320 X 160 mm. M odule P20 là sản
ph ầ m có ch ấ t lượng tốt. Độ sáng ổn định, đống đếu.
33
CHƯƠNG 1: Elỡl THIỆU THIÉĨIÉ QUẨRE CÁO ù a ca k M i T| nc
Có nhiều loại CPU trên thị trường phù hợp cho mỗi loại bảng và kích
thước của bạn. Giá cả có thể từ khoảng 250 ngàn dến vài triệu. Bạn nên chọn
CPU có tính năng điểu khiển dược số lượng điểm ảnh cao hơn số lượng diểm
ảnh trên bảng cùa bạn. Như vậy, khi chạy h)nh ảnh hoặc chữ mđi không bị
giật. Nếu bảng ít hàng thi CPU không cán bộ chia kênh (adapter). Bạn nên
mua cáp tín hiệu từ CPU ra module dài một chút để dễ thao tác và đặt CPU ở
vị trí mà bạn muốn. Mỗi hàng module trên bảng ta cán có một cáp tín hiệu nối
vổi CPU. CPU dược kết nối với máy tính bằng cổng COM. Nếu muốn dùng
cổng USB thì phải mua thêm một cáp chuyển đổi USB to COM. Nên mua loại
dây tốt để đảm bảo mua về là dùng được vì trên thị trường có nhiéu loại dãy
không đảm bảo chất lượng. Khi mua CPU bạn sẽ dược cung cấp phán mém
điéu khiển, nạp chữ hoặc hình ảnh. Mỗi phần mềm có cách dùng khác nhau
Làm khung hộp cho bảng tùy theo yêu cáu và thiết kế cùa bạn
34
A n n u m B Ằ H c«0 R tftfl I f BỌC CHƯƠNG 1: Clđl THIỆU THIẾT KẼ qUẨNE CÁO
35
C M S 1: GIỚI THIỆU THIẾT IỄ QUẢNG CÁO J I T M u a O i m m ỉ | BỌC
38
ARDUIIIO D Ả m CHO NGƯ0I lự HỌC CHƯƠNG 1: Clửl THIỆU THIẾT KÉ QUẨHS CÀO
Ỵí ? Ỷ' T
T ro n g m ỗi khối
này c á c LE D sẽ nối chung
t : t ? ị.
cực dương và chung cực W
âm . C á c khối này lại được
nố i nối tiế p vđi nhau. C ụm
LED này sẽ tương đương
Ỷ ¥ w, T- Ỷ Ỷ W
vđ i 4 LED n ố i tiếp nhau. —
Đ iện áp nu ô i cho khối này
sẽ b ằ ng 4 lần diệ n áp nuôi f *■:: Y':. f Ỷ: W
cho 1 LED . D òng điện
tương đương tổng dòng
đ iệ n trong m ộ t khối. tí ĩỊ ¥ ? ĩ
Y
Ỷ
37
CHƯƠNG 1:6IỜI THIỆU THIẾT (Ễ QUẢK CAO H M W IA M C W — m «ọc
ƯU điểm so với kiểu đấu thứ nhất dòng diện sẽ nhò hơn 4 lán vđi
cùng số bóng trong một cụm. Hao tổn điện trên trở chặn cũng giám 4 lán
Việc đấu nối cũng tương đối dễ. Dùng nguón nuôi 12V DC. Nhược d ẻ m là
vẫn phải dùng điện trở chặn có công suất tương đối Iđn. Thường một cụm
khoảng 50-100 bóng ta phải đùng điện trỏ 5 ohm công suất từ 2 w dến 5 w
Kiểu 3: Các cụm 4 tẩng nối song song
T V ịr T f t 1
■ T
T>:, i
r, Ỷ , t :■ ị J
ị-.-: 1N 1 ỉ % - 1
Ị ị
1 ,. 1 Ịk ị.-, Ệ% i
I I
Vđi sơ đố trên chúng ta nối 4 LED đơn nối tiếp nhau và nối vđi một
điện trỏ hạn dòng 220 ohm. Tiếp theo lại nối chung cực dương và nối chung
cực âm của tất cả các cụm này (nối song song). VI đã có điện trở chặn cho
từng cụm nhỏ nên không cấn diện trở chặn như ở mạch tổng quát nữa.
Lưu ý : Nếu không biết đấu LED bạn có thề gặp trường hợp cường độ
sáng của bảng quảng cáo thay đổi khi chạy các hiệu ứng nhấp nháy?
Tại sao bảng LED có hiện tượng LED lúc sáng lúc tối? Hãy xem bảng
LED dưới đây.
**#### .
38
AfiDUIMO DAW CHOKƯin Tự HỌC CHƯƠNG 1: Sldl THIỆU THIẾT ầắ QUẦMG CÁO
B ảng LED này gốm nhiéu LED đơn, nếu trê n bảng chỉ có vài chữ sáng
thì độ sán g củ a chữ rất cao. Nhưng khi tấ t cả các chữ cùng sáng thì độ sáng
c ủ a các chữ đé u bị giảm đi nh ié u m ặc dù nguổn nuôi bạn chọ n dù dòng để
c ấ p cho tấ t cả cá c bóng.
N g u yên nhân: H iện tượng trê n được g iả i thích như sơ đó sau:
V s ụ t áp = 15 X 0,1 = 1,5 V.
N hư vậy điệ n áp cấp trên hai đầu bảng điệ n tử của bạn sẽ chì còn là
12V - 1,5 V = 10,5 V. Đ ây chính là nguyên nhân khiến cho độ sáng cù a bảng
LE D giảm đi khi nhiểu bóng sáng cùng lúc.
C á c h kh ắc p hụ c
39
CHƯƠNG 1: Glđl THIỆU THIỄT KẾ qOẢK CÃD AMOTU I « a c n b N i r tip t
Nhược điểm : Khi gắn lẽn bảng ta phải dùng dãy điện nối rát nhiéu
các cụm này với nhau, dễ bị nhấm.
Nếu số lượng LED lổn thường ta thường dùng nguón có diện áp lớn
hơn 5 V như 12 V hay 24 V để dùng nguồn nuôi có điện áp nhò.Do ápnguỗn
nuôi lớn hơn sụt áp trên LED nên ta cấn ghép nối tiếp các cụm LED
Do mỗi loại LED có sụt áp khác nhau nên bạn cần chú ý khi ghép
LED, các bạn có thể tham khảo sơ đố dấu LED vđi nguồn nuôi là 24 V như
sau (Bạn nên tham khảo sụt áp cho mỗi loại LED với màu khác nhau dẻ’ hiểu
rõ số lượng LED phải dùng khi đấu nối tiếp):
1. ĐỐI VỚI LED MÀU TRẮNG & XANH LÁ, XANH DƯƠNG
• Đấu nối tiếp 6 LED với 1 điện trở 680 ohm, cứ 3 cụm ta có thể chụm
lại thành 1 để tránh sự đan xen nhiéu mối nối, vừa đảm bảo cường độ
sáng và tuổi thọ của bóng LED.
• Trường hợp bảng LED có cụm thiếu LED <=3 LED ta dấu nối tiếp 3
LED với 1 điện trở 1,8 kohm
• Trường hợp bảng LED có cụm thiếu LED > 3 ta dấu cụm 6 bình
thường, còn thừa ta để phía trong bảng để đảm bảo cường độ sáng
đổng đều cho toàn bộ LED.
2. ĐỐI VỚI LED MÀU Đ ỏ & VÀNG
• Đấu nối tiếp 10 LED với 1 điện trở 470 ohm, cứ 3 cụm ta có thể chụm
lại thành 1 dể tránh sự đan xen nhiều mối nối, vừa đảm bảo cường độ
sáng và tuổi thọ của bóng LED.
• Trường hợp bảng LED có cụm thiếu LED <=5 LED ta đấu nối tiếp 3
LED với 1 điện trà 1,8 kohm.
• Trường hợp bảng LED có cụm thiếu LED > 5 ta dấu cụm 10 binh
thường, còn thừa ta để phía trong bảng để đảm bảo cường độ sáng
đồng đểu cho toàn bộ LED.
40
A I I I W lÀ M t M W i l l Tự I f c c m fftc ỉ : n A l C f K VÀ HẨM MỂH A IH IM
CHƯƠNG 2
41
C riM C fc n i l C t K IIẢ nA N M ÍM U M M unoa iM M B H H m
4Ỉ
U II M I A H CM K r tlT fM C a r « t M Ấ 1 O TK n n h v Ế H U M M
BO MẠCH ARDUINO
P in s O -13: Pins 3.5.6,94041:
USB-to- Digital inputs Analog Outputs I
(PWM) pf
Trong hướng dẫn dự án đầu tiên này, giả định là bạn sẽ dùng
or ouỉpirts
SeriaỊ Reference
Ground
3
controller input
11 Pins 0.1:
\ s Serial
I
MA^'E #
fc'Y f/rrvrY
o f o pTv»
l B ọi r« rN rr or -o i, i í ,,,, JJ
VÀ CÁP USB
I
*»■ «-» * *________PKJTAI. P»V>!X~)
JI_
tMJtf V.ÍN«* ' V«*
■Microcontroller
« .» L- _
__
__
__
__
__ _
__
__
__
__
__
__
__
__
__Ỉ
9-15V DC POW0J ANALOG I N A
voltage input SSkSil
Pins AO - A5:
i
Voltage Analog Inputs i
BOMẠCH Reset outputs (can also function
I
mốt bo
(connect to ground as
ARDUINO UNO to rew t) Ground a s digital
d « n a "I/O)
A»
a
Connected directly to 915V DC voltage input 1
A i n m i I km c u le iii j y i t CStftfNC I: nku C tM V* H Ấ IM Ế M A IM U H
P hần th ô n g số chi tiế t kỹ thu ật của bo m ạch các bạn có thể tham khảo
ở phụ lục cu ố i sách.
p . r £ < M j o 3 2 1 o a * 7 6 5 4 3 2 1 0
' i ị ' 0.0.1* — ' si
'Pin 13 LED
«381 ĩ l l ĩĩ. Ỉ i /
® *I?
4&X RX
A rduino ŨNÕ';«3í>ũn^Ẹ—
---------- ---
-S
•Power UED
083 'RX/TX LEDs
oo
ICSP
-M icrocontroller
B v>r«ww*rnuK»oxc
cc r> POWER A N A IO G IN
2 £ S5V Gnd V in 0 1 2 3 4 5
________ncteBiH isaasi ỊõỊgroioiHiiiBnf
Power Jack Power Pins Analog Pins
USB Socket
45
emrtfNS t (VẮNCfK VÁ PIẮI MÍM UMM Ằ tw iẩ m a i r t i T | I|C
Phần mềm IDE được cài đặt trên máy tính cá nhân của ban vả được sử
dụng để soạn và gửi bản phác thảo cho bo mạch Arduino.
Đầu tiên là môi trường phát triển tích hợp (IDE), được thảo luặn trong
chương này và thứ hai là Arduino phác thảo mà bạn tạo ra.
PHẦN M ÉM ARDUINO
Để có thể thực hành với bo mạch Arduino sau khi tìm hiểu phấn cứng
chúng ta tìm hiểu phần mềm để lập trinh Arduino.
CÁCH TẢI CHƯƠNG TRÌNH ĐIỀU KHIEN
Arduino làm việc với mã nguồn mở. Nếu muốn tìm hiểu thông tin chi tiết
về Arduino bạn có thể vào trang web sau: http ://a rd u in o .cc
Bạn có thể tải chương trình từ trang chính của Arduino tại đường
dẫn sau: http://arduino.cc/en/Main/Software.
Axduino IDE
Arduino 1.3.6
CfeanarSoXvarí
ã-ì:v:x-':ĩìí (:««•>*::•:«•/>. y«t
46
U N M • À H CM K i l l T f l f c O M R ỉ: P IỈI a m ú n íu ìấ u u m m
Lưu ý: Tủy vào thời điểm bạn tả i về mả phiên bản có th ể khá c với phần
trình b à y trong sách.
Sau khi n h ấp ch u ộ t ta có m ộ t danh sách ph iê n bản hệ điều hành
dow nload, bạn có thể dow nload (tải về) theo hệ điểu hành mình đang dùng.
T ùy vào hệ điều hành mà bạn chọn phiên bản tương ứng, ở đây ta chọn
phiên bản hệ điều hành tải về là W indows Installer hay W indows (ZIP file) để tải
chương trinh về m áy tính của bạn.
H ộp tho ại S ave A s xuấ t hiện, chỉ đường dẫn tới thư m ục lưu file sau đó
nhấp Save.
LƯU ý : N ếu m á y tính bạn đã cài đặt In te rn e t D o w n lo a d M a n a g e r sẽ
giúp v iệ c tải về nhanh hơn.
ỡrganiíe Newfokter ?= - ử
• V HiđeFo«đef*
47
CUiM £ nkuClK VÀ PIẨI HẾU W T f« c
Nếu nhấp View download ta sẽ thấy cửa sổ như hinh dưới cho biết
dung lượng file tải về (52.5 MB) cũng như thời gian còn lại để tải vé loàn bỗ
chương trình.
i9%0<»4Jino- l£.&-«f'nđowi(1)d3wfc»tfed nm*>43'<<cmn»t>nqr-^1
Nsrne L c c a t io r Actions
Nếu bạn tải về file nén, dung lượng file tải vế sẽ là 93 MB thay vl
52,5MB nếu là file cài đặt. Tuy nhiên chỉ cần giải nén file này sau đó cài driver
là chạy được Arduino.
Sau khi tải về file nén, nhấp chuột phải vào file và chọn Extract files
như hình dưới.
............................
Name open
336 Extract files...
8 3 afđumơ-1.0.6-wínđows,zĩp Ỉ B
3 Extract Here
Jỉ
Cửa SO m m m m m rn
1
hiện. W i Desktop
: ífị}Extract and replace fies * : ị
ử 4 OneĐrive
Chọn đường ! 0 Extract and update files
48
ABDUMO d a Nl CIO N ttrdl Tự IOC -CHƯƠNG 2: PHÁN CƯNG VA PBÁH M ĨM AIDUIHO
Properties
G iải file nén ra, vào thư m ục drivers và chạy file dpin st-x86.exe nếu
m áy bạn đang cài W ind ow s phiên bản 32 bit hoặc d p in st-am d 6 4.ex e nếu là
phiên bản 64 bit.
Ị i , d r iv e r s 2/21/22146:11 ?M Filefolder
,|ị examples 2.'2t/,2014 5:11 PM File foider
ị. hardware £ 8 /2 8 1 4 6:11 -1M File folder
.!■> I-ÍV3 .:i ì Í4 ftúỉ 3M File folder
i , lib ------------- File folder
: libraries 2/2Í/2C14 6:U PM File fcider
i. reference 2/2L/2Ũ116:11 ?M File folder
tools 2 / 21/ 20 1 4 6 :1 1 P M Ftle folder
^ arđuino.exe 2/21/2014 5:11 PM Acpi!:=t:c - 1
ỔỊ& atduino_debijg.exe Z;a/2Ũ14&U PM
('ị: cygiconv-2.dll 2/21/2014 6:11 PM Apsiicĩt:!;'! esten:..
i ầ c y g w iril.d ll > 21/JC14 o :li PM Àss:j:5t:c-Ĩ .
■ứ:libusbO.đil 2/21/2214 6:11 ?M A p s h c i'ic i e/terii..
ị revĩsions-txt 2/21/20146:11 ?M Te>? D c a .r ^ n t
49
CHƯƠNG 2: PHÁN CƯNG VA PHÁN M É M AKDOINO A IIIIM lA li « K M IT fJ P C
Bock [ Cance
[3 Window's Security
p/| Always tru st software fro m "A rduino LLC". Install ị Don't Instdl
® You should onlv install driver softwvsre fro m publishers YOU trust. H e * :?
decide v>;hĩch de/ice scftvvsre i: Sfffe ro instaii?
50
ARPUIWO DANH CHO NGƯƠI ĩự HỌC CHƯƠNG l: PHẤN CIỈNC VÁ PUẮN MÉM AKDUINO
B ạn đợi trong giây lát, chương trình xuấ t hiện cửa sổ như hình dưới với
thô ng báo chương trình đã cài đật xong Drivers. Nhấp Finish kết thúc.
w ,ys/Ạ'Ị yy/W Ả > Ả -w . '/y?:? "-------------------------- -
De>/ice D riv e r i n s t a ll a ti o n W iz a r d ị
Ww-
Completing the Device Driver
Installation Wizard
You can now connect your device to this computer. If your device
came with instructions, please read them first
r Back [ Cancel
fel
T iếp theo, bạn nối bo m ạch A rduino vào m áy tinh, m ột thông báo
Installing device d rive r so ftw are xuấ t hiện cho biết chương trình đang nhận
dạng bo m ạch. Lúc này trê n bo m ạch ta thấy, đèn LED ở góc phải sáng lên.
SI
CHƯƠNG Z: PHẤN C0NG VÀ PHÁN MỂM UDDINO U I I I M IẲ U b i K W l T < BBC
(<-) (3) This PC ► 4750-4 (F:) ► OCHUONGTRINH ard u in o -1.0.6*’/Ã n d o w ỉ » a rd utn o-l.c.6
M u iif
, rfc'etcoce
£ Pictures
. toefs
s V id e c i A 1
* 4730-WIN 7 (Ù ) ardjtno.debug.exe
i i * 4750-WINXP ( W Ũ cy<ỹccnv-2.á I
> 5G SC v a n : -h ■
52
ABDUIWO ĐANH CHO NGƯƠI ĩự HQC CHƯdNB 2: PHÁN CỨNG VA PHẦN MÉM ABDUIWO
obfsl Help
A uto Format
Archive Sketch
!
Ardoino f'-idno w / ATmega323
Serial Port Arđuino Nano w.; A7megai68
A rduino Mega 2560 or Mega AE>K
Programmer
Arđuĩna Meg3 (4Tmegal2£0;
Bum Bootloader
A rduino Leonardo
T rong p h ần trước trình bày về phần cứng có phần nói về kiểm tra bo
m ạch. Nhưng do chưa trình bày về phần m ềm nên sẽ hơi mơ hồ với bạn đọc.
S3
CHƯƠNG 2: PHÁN CỨNG VA PHẤN M É M ARDUINO U I I I U I A * EM K H I I I I I I
s
Câu hỏi đặt ra là tại sao
mạch bên trái không dùng điện
trở khi nối trực tiếp vào bo
mạch. Câu trả lời là: Chân 13
« 3 ■' * V 8 y iU M
đã có điện trở nội IkQ bên » 3 i ị i * úti-m _ ( / >; «;
trong. Nếu chúng ta dùng chân ■ m n ỉ
12 thì bắt buộc phải dùng điện A rduino
trở đấu nối tiếp, ở đây ta lập
trình cho mạch điện trang bên:
Chân dài của LED (Anode) nối
với ngõ D13, chân ngắn của
.. 2» °**4* §
LED nối với chân GND. P I I I Ỉ I V Ỉ
New C trl+ N K 1
Open... C t r l* 0 01 Basics ► Anal ogR ea-
Sketchbook ► O i.D g ita l ► EareM in.ry ;rr
Examples ► ŨÍ A na lo g ► e in k
Close C trk W •>i.c ĩro m tiO Ìc d tic n ► D g ^ .-P - i
Save C trk S O S C ír-tr?! ► Fade
Save As... C fi- S 'r **.-5 06 Sensors ►
54
ARDDIWO DflHH CHO NGƯƠI Tự HỢC CHƯƠNG Z: PHÁN CỨN6 VA PHẤN MÉM ARDUISO
Chưa cần hiểu từng đoạn code của ví dụ Blink làm gì, bạn chỉ cần hiêu mục
đích của đoạn code trong vi dụ này là điều khiển một đèn LED tại chân 13 sáng 1
giây sau đó tắt 1 giây và cứ thế lặp đi lặp lại. Sau khi bạn nhấp chọn B lin k, trên
màn hinh xuất hiện cửa sổ như hình trang bên với đoạn mã xuất hiện:
v o id setxqp () {
i f r n i t i s l i 'i s d ig r itâ l p in 13 as an o u tp u t.
pinW ccte( 1 3 , O UTPUT);
}
d e l a y (1 0 0 0 ); / / w a it f o r a second
MI)
i) để kiểm tra code củ a ví dụ Blink.
M ộ t v ệ t sán g lan dần từ trái sang phài ở
phía dưới m àn hình cho biết chương trình
đang biên dịch đoạn mã.
55
CHƯƠNG 2: PHẤN GỬNG VA PHẤN MÉM ARDUINO U I I I M M B CM K H I '1 ICC
Kết thúc, một thông báo như hình dưới xuất hiện cho biết đã biẽn dịch
xong chương trình.
Kế tiếp, bạn nạp chường trinh Blink vào bo mạch Arduino. Nhấp vào
biểu tượng Upload có hình để tải đoạn chương trinh vừa biên dịch lên bo
mạch Arduino. Đèn LED RX và TX trên bo mạch chớp tắt. Nếu việc Upload
thành công, thông báo "Done uploading." xuất hiện trên thanh Status bar.
(Lưu ý: Nếu bạn dùng bo mạch Arduino Mini, NG, hay bo mạch khác bạn cắn
nhấp nút Reset trên bo mạch trước khi nhấp nút Upload)
B lỉn k ị Ấ rd u in o 10 .6 ~ a HB!
File Edit Sketch Tools Help
liá + iệ l i * Upload
1 Blirik
Điều này xảy ra vi măc định của chương trinh khi khài đõnạ = COM1
trong khi cài đặt bo mạch Arduino UNO rnáy báo cổng cho Ar z. - - _ J nũ
là COM4.
56
AKDUIWO P A HH CHO NGƯƠI Tự HỌC CHƯdNC 2 : PHÁN CUNS V Á PH Ấ N M É M A B D U IM
Cancel
M ột v ệ t sáng m àu xanh lan dần từ trái sang phải cho b iế t tiến trinh
Upload đang thực hiện. Sau đó hàng thông báo như hình dưới xuất hiện cho
b iế t kết thú c việ c Upload.
Nhìn trê n bo m ạch A rduino UNO ngoài đèn LED m àu xanh bên phải bo
mạch sáng cho b iế t đang cấp nguồn, tại chân 13 ta thấy LED màu vàng cam
sáng nhấp nháy 1 giây. Đ iều này cho biết bo m ạch A rduino Uno tố t cũng như
đoạn mã lập trình tốt.
57
CHƯƠNG 2: PHÁN CƯNG VÃ PHÁN M Ể M U D 0 » 0 U IIIM I M c * K H I T l Ịệ C
TÌM HIỂU TRÌNH SOẠN THẢO IDE CỦA ARDUINO (MÕI TRƯỞNG VIẾT
CODE CỦA ARDUINO)
C- ; SííokỊ ArđuìoolM- -
Comm and T in e B or
A re a •>L items
0 0
KS3 WZS I» i
k:>ns
m l Ijp illii! ! i l B p f
3 1
1 (
J>: ĩ tr x x ỹ r .ờ ă i f li; t o r a .il :5I;C*Ĩ.
v o x ii l o o f i O {
1
/ . ' pu u y o u r a a i/i c o d * h * i “ , i n r u n te p ĩa te d lv :
Text Area •*
Message ^
W in d o w Are<
Môi trường IDE tạo ra vùng soạn thảo để viết code gồm 3 vùng chính:
• Com m and Area (Vùng cửa sổ lệnh).
• Text Area (Vùng soạn thảo lệnh).
• Message W indow Area (Vùng cửa sổ thông báo).
Chúng ta sẽ lần lượt tim hiểu 3 vùng này.
Command Area CÓ 3 thanh bar là: Title bar (Tiêu đế tên dư s ' Menu
Items (Thanh các Menu) và Icons (Thanh các biểu tượng).
58
ABDDWO OANH CHO NCtfifl ĩự IfC CHtftfNC ỉ: PBÁN C ÍR í VÃ PIÁN MỂM AHDUINO
T ittle b a r
M enu item s có 5 m enu bao gồm File, Edit, Sketch, Tool và Help.
^Fiie Edit Sketch Tools H«lp
M e n u F ile.
vis.-'/ts./■/•;>/.■*/,..>.-iX-.-ỉỹi.'. :■
R e Edit Sketch Tools Help
M ục File có nhiều m ục (con) phụ
New Ctrt*N
với m ục đích xử lý cá c tác vụ liên quan
Gptn... C trf» 0
đến file tương tự như m enu File của
Sketchbook *
M icrosoftW ord.
Examples *
N ew (Phím tắ t C trl + N): Mở dự Close c t ; i* w
cửa sổ như hình dưới xu ấ t hiện, ỏ giữa Save As-, Ctri* Shift-s
Upỉoứđ C trf*u
sổ có nền m àu trắng là vùng nhập
Upload Using Programmer Q rt* 5 h ift-U
code, tên file chương trình gán m ặc
định là s k e tc h ju n 18b. Phía dưới cùng Page Setup Otri*-Shift*-P
Quit C trf*Q
1 3 1 1 1 1 B
, . . - .
C-1 4 ó . . %' x ỈJ xì-.-ỳí 5 s&sw i § r ■
V Ù N G NHẬP CODE
58
CHƯƠNG l; PHÁN CƯNG VÀ PHÁN M É M U N M U 1 IIM IA JB t u K H I T I MC
Khi nhấp Open, hộp thoại Open an A rduino sketch., xuất hién yẽu cắu
bạn chĩ đường dẫn tới file dự án cũ trong khung Look in, sau do chọn file và
nnấp Open để mở dự án này.
ít- Cpen
' an Arauxto
.J 'T "'sketch...
' 'Z'/WMW/ “vm m m ;' "m m # ■mm'"”-'■"***#■■ m A P
: $ ■* >:* o -
N am e ^ D ale m o d ifie d T y pe je t
S ketchbook
Sketchbook
(Sách dự án) chứa
các dự án cũa bạn
trong thư mục mặc
định của Arduino.
Exam ples:
Tùy chọn này cho phép mở thí dụ cơ bản có sẵn để bạn tham khào giúp
bạn học viết code cho những dự án cùa bạn. Mục Examples rất cần thiết cho
các bạn mới học lập trinh điểu khiển Arduino.
skstch_đ«c U a 1A fd u in o 1.0.6
Fite Edit Sketch Toc;s Help
New Ctfi* H l ? V - ; 5 V i v ầ ẳ ẵ ữ ìấ
cpen... C trl*0 01.Bastes » AnatogReacSe* 4
Sketchbook 02-D'9 <aJ ► E-dreMĩrũrnưr->
Examples G3.Afie;og ► Elink
ctose Ctit+W 04.Com m unication * DtgrtiiReadCtr i
Save C trkS OS.Cantrol ► Fide
Save As... C trl* S h ift-s 06.S4T5ƠT5 • F.eadAnilc*^
EO
ARDUINO DANH CHO NGƯđl Tự HỌC CHƯƠNG 2: PHẤN CỈNE VÁ PHÁN MẼM ARDUINO
Lưu ý: Dự
ũ í/ . . BUníí ị Afduirto '
án khi mở có định
rite Edit S te tch Too's Help
dạng .ino. (File dự
án mở có tên
B link.ino). Trong
chuyên đề này 11 -1ĩ' * x - ii a í) iC í c o d e is
Examples >
01. Basic > Blink.
/ / 't h tì t - f iV i') C u /je tic r ; V U ỈÌ3 o ;u - t' v h isr: í i ĩ . ' : : ì :ì i n : t iíV or poaer tj'tf:
Ta nhận VOĨ.Ỉ {
đƯỢc dự án B link
/'/ if .: v ia ; iz t ' l U '.jj .'- .f i i ĩ - i í i .15 'xỉi Oul'UUV.
p x r . K c í ': s ( 1 3 , U U 'm j T ) ;
(chớp tắt) như }
sau: Q uá trình
/V the iacp tuncriori iVí2i5 ỈV Ũ L cm d c v e v a g a in to í'
LED sán g trong 1 Ví*'j.ci Ị.o ơ p O {
d ig i (1 3 , H IG H ) ; tu Í1 : th " LED Oft ( K I Gí: I S th e
giây, sau đó LED «jf: Í Ò V ( I Ũ O O ) ; W iilt iv r 'A í c v o r u l
tắt trong 1 giây và d iạ it a iĩíỉiit s (1 3 / L O W ); tx ir r : i; h s LLD o ff b 'i u - ifc iiv r i chi
d e iftY ( lO O Q ) ; VcVJ.T, '1 f i ' i ' i w i f j
lặp đi lặp lại vói
vòng lặp là vô tận,
cho đến khi bo
m ạch A rdu in o bị
cắt nguổn điện
cung cấp cho bo
mạch.
61
CHƯỮNG 2: PHÁN CỪNG VÀ PHÁN M ÉM A H g m O A IIIIM ! * ■ ( ■ K M IT M K
Sketch is read-only
lis p
Cửa so Save sketch fo ld e r as xuất hiện. Chọn đường dẫn IL'U file tại
mục Look in và tên file ở khung File name. Nhập xong nhấp vào nút Save.
....... V/ V Iw U fljp 1
* -.-I Save s k e u h t o x it r 3S-.
K
Desktop
i;
Libraries
;ẳs
C om pu te r
KJ •
*
N etw ork
(4c nair-e -
U p lo a d Cv - „
62
ARDDINO DAW CHO NGƯƠI Tự BỌC CHƯƠNG 2: N ẤN C ỈN Í VẢ H ÁU MẼM ABĐUIHỮ
C h ọ n đường dẫn lưu file tại m ục L o o k in và tên file ở khung F ile nam e.
N h ập xong nhấp vào nút Save.
C á c bạn có thể tham khảo phần phụ lục cuối sách để có thêm thố ng tin
về phần m ềm lập trình trên Arduino.
T rong phần trinh bày trước các bạn đã tìm hiểu sơ về p h ần cứng và
phần m ềm A rduino. C húng ta đã được hướng dẫn cài đặt chương trình, làm
quen với bo m ạch A rd u in o UNO. C ác bạn đã biết mở 1 file m ẫu của chương
trình (Blink) để kiểm tra sơ bộ phần cứng và phần m ềm của A rduino UNO qua
LED có sẵn trên bo m ạch nối v ổ i chân 13.
T rong phẩn trình bà y ở cá c chương tiếp theo chúng ta sẽ lần lượt lặp
trình A rdu in o với cá c yêu cầu cụ thể để điều khiển LED đơn, LED ma trận,
LED 7 đoạn v.v. Đ ánh giá chu ng các bài tập này đều lập trinh phức tạp, để có
thể thực hành lập trình điều khiển cho các bài tập phức tạp này chú ng ta hãy
làm cá c bà i tập đơn giản nhất điều khiển đèn LED để làm quen với việ c lập
trinh Arduino.
C h ún g ta sẽ b ắ t đầu làm quen vởi phần cứng m ạch cũng như lập trình
với bo m ạch A rd u in o UNO qua bài tập đầu tiên điều khiển LED để hiểu rõ
phần lý th u yế t (phần cứng và phần m ềm ).
Đ ể b ắ t đầu bà i tậ p đầu tiên, bạn sẽ lập trình làm sáng LED tương tự như
bài tập m ẫu củ a chương trình. Tuy nhiên, bây giờ bạn sử dụng 1 đèn LED bên
ngoài kết nối với m ột chân ngõ ra số khác thay vì sử dụng LED ỏ chân số 13
của bo m ạch A rdu in o. Bạn cũn g được học các sử dụng phần cứng và phần
mềm gi để cho m ạch hoạt động và bạn cũng sẽ được giải thích chi tiế t các
câu lệnh (m ã trong ngôn ngữ A rduino sử dụng), bạn sẽ thấy các lệnh tương tự
như ngôn ngữ c .
Ngoài ra, c á c bạn còn tiến hành lập trình sao cho chân ngõ ra số của
Arduino lần lượt lên 1 (mức cao) theo m ột tuần tự nào đó. Bạn đọc sẽ được học
cách điều khiển ngõ ra của bo m ạch A rduino Uno bằng cách sử dụng LED đơn
và các nút nhấn đơn giản. Điều khiển LED 3 màu RGB cũng như thay đổi độ
sáng của LED bằng phần m ềm v.v Bạn sẽ gặp lại những linh kiện LED trong
toàn bộ các chương còn lại chứ không chỉ riêng chương này.
C húng ta sẽ bắt đầu thực hành với bài đầu tiên là:
Làm nhấp nháy 1 LED bên ngoài (bo mạch Arduino có m ột đèn LED gắn
trên bo m ạch ở chân 13 gọi là LED nội).
(3
C M C 2: PHÁN c ffw VA n « N M É M AIDUINO U IIIM I I I « K ie iu m
X I i ________________
E5SS338
Í525353S3
Thường thi chúng ta có thể kết nối những bo mạch nhỏ thành bo mạch lân
hơn vì chúng có các khớp để kết nối lại với nhau. Trong những bài tãp lớn hoặc
mạch có nhiều linh kiện thì chúng ta cẩn một bo mạch thử lớn để thực hiện. Dây
nối thường là dây đồng nhỏ bạn có thể sử dụng loại dây nào cũng được (thường
thi nên có dây cứng để dễ dàng cắm xuống test board). Tốt nhất bạn nén mua
loại dây đã làm sẵn cho tiện vì loại dây này sử dụng khá tốt, chúng chống chạm
mạch và kết nối voi test board dễ dàng.
Test board là một loại bảng nhựa giúp bạn cỏ thể sử dụng các linh kiện
trong mạch điện và kết nối cũng như tháo lắp chúng một cách dễ dàng mà
không cần phải hàn. Test board bao gốm các lỗ nối tiếp trẽn lưói bẽn dưói
test board thì các lỗ sẽ được kết nối bằng những dải kim loại. Nhũng dải kim
loại sẽ được nối tương tự như hình dưói:
Dải kim loại phía trên và phía dưói chạy song song bên trontj ’5 =- board
và được thiết kế để bạn kết nối nguồn cho mạch của minh. NhC"'_ -,r, |<jện
được cắm ở giữa test board sẽ dễ dàng kết nối vói nguồn nhò
có những test board vẽ các đưòng đò và đen cnạy song song c á ; £ ó p hja
trên và phía dưới để giúp bạn phân biêt nguôn dưong (đỏ) và đã’ - G \Z -’ tr-,I
ABDUWO C A W CHO W6tfơl Tự m e C M t 2: r i Ẩ I r tN t VÀ H Ấ N MỀM AMIIIW0
ỏ những test board loại lớn, các đường nguồn này bị tách ra, thường
được chỉ bằng m ột đường m àu đỏ bị đứt. V iệc này để giúp tạo ra những điện
áp khá c nhau cho các linh kiện trê n bo m ạch của bạn. Nếu chỉ sử dụng m ột
mức điện áp thì bạn nên kết nối thêm dây cho các vị trí chia của đường nguồn
trên te st board. Những dải d ù ng để kết nối các linh kiện trong phần giữa của
test board thì vu ô n g góc với đường nguồn và độ dài cũa chú ng nhỏ hơn đường
nguồn. Phần chính giữa của test board là m ột đoạn chia dài để tách b iệ t các
dải kết nối linh kiện.
C á ch sử d ụ n g T e s t b o a rd :
• Bốn hàng trên của test board độc lập với nhau, mỗi hàng bao gồm 25 lỗ đồng.
• 62 cột củ a te st board độc lập với nhau, mỗl cột gồm 5 lỗ đổng.
• Liên kết bốn hàng trên lại với nhau và nối với nguồn dương (Vcc).
• Liên kết bốn hàng dưới lại với nhau và nối với Mass (GND).
• Các cột còn lại được cắm linh kiện như hình dưởi.
ỈT
— — — — — I
N g u ô n ơúong ■ ĩ -KsWi
: ỷ. X
i:íẵẩiaíầíỒKồẳHSĩẳt£
ĨH H Ì Ĩ ỉX
t c ------1 ặv:
i i>/
M ass ► ■ ìỉ •'
• Đ èn LED.
LED được b iế t là m ột diode ph át sáng (Ligh t Em itting Diode). M ột diode
là m ột linh kiện chỉ cho dòng điện chảy theo m ột chiều. N ếu dòng điệ n có xu
hướng chạ y theo chiều ngược lại thì diode sẽ ngăn cản điều này xả y ra, bạn
nên sử dụng loại LED 5 ly (5 mm ) bất cứ m àu nào. Và điều bạn cầ n quan tâm
là dòng điện và điện áp định mức cho LED sử dụng là bao nhiêu vì bạn cần
phải tinh toán giá trị điện trở hạn dòng cho nó (bạn sẽ tính toán điệ n trở ở
phần trình bày sau c ủ a chương). LED đỏ 5 ly được bán khá phổ biến và hình
dưới là m ột số dạng LED khác có bán tại các chợ điện tử.
CHƯƠNG 2 : PHẤN CỬNE VÀ P I Ắ I M Ế M A ID tN O U t t t M ! ! ■ CM K f l l 1 M i
Chân dài là chân được kết nối với nguồn dương còn chân ngắn hon
(phía mặt được mài phẳng) là chân âm được nối với đất hoặc nguồn áp thấp
hơn chân dương. Nếu bạn kết nối sai chân, nó sẽ không gây hại LED nếu bạn
không cấp một dòng điện quá lớn qua nó. Tuy nhiên, việc cấp dòng quá lớn
qua LED sẽ được hạn chế bằng các lắp điện trở hạn dòng để giới hạn mức
dòng điện qua LED. Nếu không có điện trở hạn dòng thì LED bạn có thể bị
cháy nếu có dòng điện thuận chạy qua LED.
Lưu ý:
• Tùy loại LED và cũng tùy vào màu LED mà dòng chảy qua mà Vi có thể
khác 2V, Khi sử dụng ta chọn dóng qua LED sao cho độ sáng như
ỷ. Dòng tôi đa nẽn khoảng 20mA, cho độ sáng vừa phải (liên tục) nén
chọn 12mA, nêu LED quét (không sáng liên tục) thi tăng dong gấp 2.
gấp 3 lấn ...
• Bạn củng có thể sử dụng LED 2 màu, 3 màu. Chúng có thèm một số
chân. MỘI đèn LED RGB có các chân để điều khiền LED đò. /a n h /á và
xanh dương chỉ trong một đèn LED, và loại LED này có 4 cbẳr. 1 chán
có thể là dương chung hoặc ãm chung và những chân r<ể diếu
khiển riêng lẻ. Bàng cách thay đồi độ sáng của R, G. B c , í _~ n 0(30
bạn có thể tạo ra bất kỳ màu nào ban muốn.
66
ARDU1WO I A W C H N C tứ l ĩ ự i q t CHƯƠNG 2 : PBÁN CUNG VÀ P IẤ N M ÉM AMUINO
Linh kiện tiếp theo là điện trở. Đ iện trở là m ột linh kiện có chức năng
cản trở d ò ng điện khi có m ột điện áp trẽn 2 đầu của chúng, bạn có thể nghĩ
điện trở như m ột ông nước bị bóp nhỏ lại so với toàn đường ống. Vi vậy, khi
dòng nước (tương tự như dòng điện) chảy qua đoạn bị bóp này (điện trở) thì
dòng nước chả y qua sẽ chậm lại. Tương tự như thế, khi dòng điện qua điện
trở cũn g bị hạn ch ế (nhỏ) lại. Bạn có thể sử dụng điện trở đẽ’ giảm dòng điện
cũng như giảm điện áp cấp cho các linh kiện khác. G iá trị trỏ kháng được của
điện trở được tính bằng ohm và ký hiệu nó trong bảng chữ cái Hy Lạp là £i
(đọc là O m ega). T rong trường hợp này, chân số 10 của bo m ạch A rduino có
ngõ ra là điện 1 chiều 5V DC và dòng điện là 40 mA, với đèn LED của bạn có
điện áp và dòng điện định mức lần lượt là 35 mA. Vi vậy bạn cần m ột điện trà
giúp giảm điện áp từ 5V xuố ng 2V và dòng điện từ 40m A xuống 35 m A (đèn
LED có độ sán g cao nhất). Nếu bạn m uốn đèn LED có độ sáng thấp hơn bạn
có thể tăng giá trị điện trở (giảm dòng điện qua LED).
C h ú ý : Không bao giờ sử dụng 1 điện trở nhỏ hơn cần thiết. N ếu bạn
cho phép dòng điện quá lớn qua LED sẽ làm cháy LED và củng có thể gây
cháy các linh kiện khác của m ạch điện.
C ông thức để tính điện trỏ hạn dòng cho LED như sau:
R = (V, - V l) / 1
Với v s là điện áp nguồn cung cấp, V L là điện áp rơi của đèn LED và I là
dòng điện qua LED . Ví dụ LED bạn có điện áp là 2V và dòng điện là 35m A
được kết nối từ chân ngõ ra của bo m ạch A rdu in o (có thể cung cấp mức điện
áp cao nhất là +5V), vì thế điện trò m à bạn cẩn phải sử dụng được tính như
sau: R = (5 - 2) / 0.035. C húng ta tính được là 85,71 ohm.
Khi sản xu ấ t điệ n trở thì nhà sản xuấ t thường tạo ra các giá trị điện trở
theo chuẩn và theo ch u ẩ n thì điện trở có giá trị lổn hơn và gần giá trị tính được
nhất là 100 ohm . Và ch ú n g ta nên chọn các giá trị theo chuẩn lớn hơn giá trị
điện trở m à ch ú n g ta tính được. Nếu bạn chọn giá trị thấp hơn, thì dòng điên
qua những linh kiện ch ú n g ta cần hạn dòng sẽ lớn hơn cho ph ép và gây hư
hỏng linh kiện của chú ng ta. V ậ y cách nào bạn có thể tìm thấy m ột điên trỏ
100 ohm ? M ột điện trò thì quá nhỏ để nhà sản xuất ký hiệu số và ký tự cho
chú ng nên nhà sàn xuấ t sử dụng các vòng m àu thay cho việ c viế t các ký tự
rườm rà. T rên thân điện trỏ bạn sẽ tìm thấy 4 vòng màu (có thể nhiều hơn).
Bằng cách sử dụng bảng m àu bạn có thê tim được mã m àu đẽ SŨ dụng
cho việ c đọc trờ kháng cùa điện trở.
67
CHƯƠNG t PHÁN CtriK VẢ n Ắ I MẾU U I I M U H M ! « ■ CM H I T Ị t c
68
ARDUIWO DAW CIO NEIÍdl Tự nọc CHƯƠNG2: P1ẨI ClK VÀ H ẢI MẾIIAIBBIMO
M ột cách khác, nếu bạn tìm thấy m ột điện trở và m uốn b iế t giá trị của
nó, bạn sẽ làm ngược lại với phương pháp trên. Bây giờ bạn đã biết cách đọc
vòn g m àu cho điện trở và chọn điện trỏ có giá giá trị trỏ kháng thích hợp cho
LED , hãy m ua cá c linh kiện cần thiế t để hoàn thành bài tập này.
• D â y nối.
Với độ dài đủ kích cỡ, màu sắc đa dạng, tiên dụng, các dày H Ố I giúp
người học nhận biết dễ dàng các liên kết trên test board, dễ k iể "i 'ra mach
trên thiết kế của bạn.
Ngoài ra bạn cũng cần dây kết nối các module vói bo mạch Arduino qua
các dây nối male-male; female-female; male-female (đực-dưc: cải-cài: dưc-
cái) có giá như sau:
Độ dài 20 cm: Khoảng 8.000 đ/10 sợi.
Độ dài 30 cm: Khoảng: 10.000 đ/10 sợi.
Kết nố i phần cứng
Đầu tiên hãy chắc chắn rằng bo mạch Arduino bạn không cáp nguón
điện áp và cáp USB đã được ngắt kết nối. Sau đó hãy kết nối LED. điên trò
và dây nối với test board như hình dưới.
[
m
£ § 3 2 1 0 3 3 7 8 5 4 3 2 1 0
■^ I I I II I
: 5. 5. ĩ £ £ £.
™ A r d u in o u N O m> H M *
•. n 7
ầ m - U
I m ỆỆỀỂÊÊvễỀỊỀ^iẾí' ÍCSP
Nếu bạn sử dụng dây khác màu hay khác lỗ cắm trên test board mi vẫn
không có gì ảnh hưởng nhưng bạn phải đảm bảo rằng kết nối các đ á 1 , dãy vói
nhau là chinh xác như trong hình, cầ n thận khi cắm vào test boar:: -ếLi test
board bạn còn mới thi những lỗ trên test board còn cứng và khá ■ \ ế u ban
khõng sử dụng những dây cắm chuyên dùng mà dùng những đả , ;ấ ~ áưoc
tuốt từ các dây đổng nhò và cắm không cần thân có thể gãy h ò ' ; i t i - ay
kết nối lúc được lúc không
70
ARDUIWO ĐANH CHO NGƯƠI ĩự HỌG CHƯƠNG ỉ : PHẤN C IỈN Í VÁ PHẤN M ÉM ARDUINO
P h ầ n m ềm
71
CHƯƠNG 2: PHÂN CƯNG VẦ PBẤM M Ế M U I I M U I I I M IẮ J B t * K W I I I l | t
Nếu mọi thứ đều chính xác, thì bạn nhấn nút Upload để tải ^ 3 lênh bạn
xuống bo mạch Arduino UNO. Nếu ráp mạch chính xác và lãp trmn dLng thi
bạn sẽ thấy LED trên test board chớp tắt mỗi giây. Bày giờ chúng :a cũng tim
hiểu mã lệnh và phần cứng để xem chúng hoạt động như thế nào
Tim hiểu mã lệnh bài tập 1 - Chớp tắ t LED
Dòng đầu của mã lệnh của bài tập này là:
// Bài 1 - Chớp tắt LED
Đây là một dòng hiểu là binh luận, đánh dấu hoặc giải thích. Ban có thể tao
ra một dòng như thế này trong mã lệnh bằng cách bắt đầu bằng dẩu 7r và bất cứ
văn bản nào theo sau nó khi biên dịch sẽ được chương trinh sẽ bò qua. Điéu này
có nghĩa, chương trình biên dịch sẽ hiểu nó không phải là một dòng lênh dể yêu
cầu vi điều khiển trong bo mạch Arduino xử lý. Những giải thích này rất có lợi
trong việc viết mã lệnh, chúng giúp bạn hiểu được mã lệnh của bạn dang xừ lý
những gì. Chúng sẽ giúp chương trinh của chúng ta trở nên dễ hiểL. hon nêu
chương trình của bạn phức tạp với hàng trăm dòng hoặc có khi lên đến cà ngàn
dòng lệnh. Vì khi nhìn vào từng dòng lệnh chúng ta không cần phài mò m im hiểu
các biến và chức năng hoạt động của dòng lệnh đó, mà chỉ cần nhìn sang nhũng
dòng giải thích là chúng ta có thể hiểu được dòng đó đang làm gì.
Có thể các bạn đặt câu hỏi: Đã là mã lệnh do chính minh tạo ra tại sao
lại không biết mà phải cần những dòng giải thích. Câu trả lời rằng, có thể bạn
viết mã lệnh trong ngày hoặc một phần nào đó thi bạn có thể nhớ được.
Nhưng nếu mã lệnh của bạn được viết trong nhiều ngày, nhiều tuấn, nhiếu
tháng thì có lẽ bạn sẽ không tài nào nhớ hết được. Vì vậy, khi viết chương
trình nào đó thì bạn nên thêm giải thích, chú thích hoặc bình luận nào đó để
dễ dàng gỡ rối sau này. Hoặc khi muốn người khác phát triển chương trinh do
chúng ta viết thì có lẽ những câu chú thích sẽ rất quý báu cho họ. Do Arduino
sử dụng mã nguồn mở, có thể bạn chia sẻ mã lệnh và sơ đồ mạch cho mọi
người trong cộng đổng. Chính những chú thích của bạn sẽ giúp ích cho nhiếu
người hiểu rõ đoạn mã đã viết.
Ngoài chú thích bằng cách bắt đầu bằng các ký tự “//” chúng ta còn có
thể chú thích bằng cách cách lạo ra một khôi chú thích bắt đầu bằng các ký
tự “/*” và kết thúc là các ký tự Ví dụ như sau:
/* Tất cả các dòng vãn bản trong khối chú thích này
sẽ không được Arduino IDE biên dịch 7
Và trinh biên dịch Arduino IDE sẽ tự động đổi màu cho các C-I ú *hích
của chúng ta.
Mã lệnh tiếp theo của chương trinh là:
int ledPin = 10;
72
ARDUINQ DANS CHI N ỉư d l Tự a g e CHƯƠNG 2: PIẤ N CÚNG VA rUÁM M ỂM ARDUINO
Chương trình biên dịch sẽ hiểu lệnh này như là m ột biến được khởi tạo,
m ột biến là nơi chứa dữ liệu cho chương trinh của chúng ta.
T rong trường hợp này bạn đã khỏi tạo m ột biến có kiểu int hay integer.
M ột biến integer là một biến có phạm vi số từ -32.768 đến 32.767. Tiếp
đến, bạn đã tạo cho biến integer này m ột tên là ledPin và gán m ột giá trị là 10
cho nó (bạn có thể tạo ra bất cứ tên gì bạn m uốn mà có thể không gọi là
ledPin. Nhưng ở đây do m uốn nó dễ hiểu và dễ nhớ vi vậy chúng ta nên đặt tên
là ledPin với ý nghĩa để điều khiển chân có kết nối với đèn LED). Trong bài tập
này, bạn sử dụng chân số 10 nên chúng ta phải gán giá trị 10 cho biến và cuối
dòng phải có dấu ch ấ m p h ẩ y (;) để báo kết thúc m ột dòng lệnh.
M ặc dù có thể tạo bất cứ tên gọi nào cho biến của bạn nhưng theo quy
ước, thi b ắ t đầu tên củ a m ỗi biến sẽ phải là m ột ký tự. Và phía sau ký tự này
có thể bao gồm các ký tự khác, các sô và các ký tự cho phép khác. C ần chú
ý rằng: M ã lệnh trong chương trình biên dịch của A rduino phân b iệ t chữ in
thường và in hoa. C uối cùng, bạn không thể sử dụng bất cứ từ khóa nào như
m a in , w h ile , s w itc h ,., là tên củ a m ột biến. Từ khóa là tên của biến, hằng và
cá c hàm là m ột ph ần đã được khai báo bên trong ngôn ngữ Arduino. Để giúp
bạn p h ân b iế t tên củ a m ột biến với m ột từ khóa thì chương trình A rduino IDE
có tô đỏ tấ t cả những từ khóa trong chương trinh.
Bạn hãy tưỏng tượng rằng m ột biến như là m ột hộp nhỏ chứa đựng
những thứ mà bạn m uốn chứa. Vì vậy, với chương trình này bạn đã tạo ra m ột
vùn g trong bộ nhớ để chứa m ột số có kiểu integer và lưu nó vào vùng nhd đó
m ột số 10. V iệc này giống như là bạn đã lấy số 10 và cất nó vào hộp nhỏ.
C u ố i cùn g, m ột biến được gọi là biến vì chú ng ta có thể thay đổi chúng.
Phần sau, bạn sẽ thực hiện tính toán trên các biến để tao ra những chương
trình có độ phức tạp cao hơn.
B ây giờ mã lệnh chú ng ta sẽ tiế p tục với:
void setupO {
p in M o de(led P in, OUTPUT);
}
M ột chương trinh của A rduino phải có r i c hàm setupO và lo o p (), nếu
không nó sẽ không làm việc. SetupO được gọi chương trình khởi tạo khi bắt
đầu. Và nó thường được v iế t trước hàm loop(). s ử dụng nó để khỏi tạo các
biến, chế độ chân, bắt đầu sử dụng thư viện, khai báo tốc độ tru yề n (Baud)....
Chức nãng th iế t lâp này sẽ chỉ chạy m ột lần, sau mỗi lần có nguồn hoặc thiết
lập lại bo m ạch Arduino.
D òng đẩu tiên cùa hàm setup là:
void setupO
7J
CHƯƠNG ỉ : PHÁN CƯNG VÀ PHÁN M Ế II A M O H g U IIIM l U i ■ K W IT IIft
NÓ báo cho trinh biên dịch biết là: Hàm này duoc goi la setup va nó sẽ
không trả về bất cứ giá trị nào khi được gọí và cùng knõng có bá: cứ tnóng só
thiết lập gì cho nó. Nếu hàm của bạn trà về một giá trị integer va Can cũng
c ầ n t h ê m t h ô n g s ố đ ể c h o n ó x ử lý th ì c h ú n g p h ả i đ ư ợ c v i ế t n h ư S â u
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW):
delay(1000);
}
Sau khi tạo hàm setupO, mỗi dòng lệnh bên trong hàm locpi sẽ được
thực hiện từng dòng một đến dòng lệnh cuối cùng trong hàm loop' Sau đó
vòng lặp chính sẽ bắt đẩu lại từ dòng lệnh đẩu tiên cùa hàm vả n i sẽ 3-1 r\ ra
liên tục đến kh bo mach Arduino bị ngừng cấp nguốn hoăc khi c rv ;-~ •= -.'lấn
nút Reset trẽn bo mach.
74
ABPHBHIAM CM H6tfđl ĨỊdệC CHtftfNC l : PIẤI t i n t VÀ PBẤN HÉM ABDĐIKO
T ro n g bài lậ p này do chú ng ta m uốn LED bật trong vòng m ột giây rồi lại
tắ t cũn g trong vòng 1 g iâ y và sau đó lặp lại quá trình này. Do đó, những dòng
lệ n h để điểu khiển LED phải được viế t trong hàm loopO bài vi chú ng ta m uốn
nó lặp lạ i m ãi m ãi. D òng lệnh đầu tiên là:
delay(IOOO);
D òng lệnh này làm cho chương trình biên dịch hiểu rằng: Phải đợi 1000
m ilig iâ y (1000 m ilig iâ y tương đương với 1 giây) trước khi thực hiện dòng lệnh
tiế p theo là:
d ig ita lW rite (le d P in , LOW );
Nó sẽ làm ngõ ra của bạn xuống mức 0 V (trong trường hợp này là chân
số 10) vì vậ y đèn LED sẽ tắt. Sau đó m ột lệnh delay (làm trễ) khác sẽ làm
chương trinh ch ú n g ta đợi 1 giây trước khi kết thú c hàm loop(). Sau đó hàm
hàm loopO sẽ b ắ t đầu lại từ dòng lệnh đầu tiên.
B ạn hãy xem lại chương trình từng bước m ột lần nữa. Bạn sẽ thấy lập
trinh cho A rdu in o rấ t đơn giản:
// B à i 1 - Chớp tắ t LED
int ledP in = 10;
void setupQ {
p in M o de(led P in, O UTPUT);
)
void loopO {
d ig ita lW rite (le d P in , H IG H );
d e la y(100 0);
d ig ita lW rite (le d P in , LOW );
delay( 1000):
}
Chương trình trên được hiểu như sau:
75
CHƯƠNG 2: PHÁN CtfNG V * PBẮM M Ế U U I I M A Ỉ1 IU M ! * ■ cm ■ » TỊ w c
76
ARPUWO 1A M » 1 NGtftfI Tự 1 9c CHlftfNG 2: PHÁN CIỈNG VA PHÁN M EM ARDUINO
C h u yê n đề này có đối tượng điểu khiển chủ yếu là LED nên phần trinh
bày sau giới thiệ u tóm tắt về LED để bạn đọc hiểu rõ hơn và khai thá c có hiệu
quả linh kiện điện tử này.
LỊC H SỬ P H Á T TRIỂN
H iện tượng biến điện thành ánh sáng được H. J. Round phát hiện đầu
tiên và o năm 1907 ở phòn g thí nghiệm Marconi, ổ n g đã dùng 1 dâ y dẫn và
tinh thể S ilic cá c-b u a (SiC ) chuyển điện thành ánh sáng bằng 1 sợi dây và
tinh thể Silic. O leg V la dim irovich Losev, nhà nghiên cứu người Nga công bố
lần đầu tiên đã tạo ra LED trên tạp chí khoa học Nga, Đức và Anh. Tuy nhiên
không có triển khai trong m ấy thập kỷ kế tiếp. Rubin Braunstein, công ty
Radio C o rporation of A m erica, phát hiện có bức xạ hồng ngoại trên họp chất
G aAs và các hợp ch ấ t khác vào năm 1955. Braunstein đã thí nghiêm trẽn các
diode G aSb, G aAs, Indium phosphide (InP), và S ilicon-germ anium (SiG e) ở
n h iệ t độ phòn g và ở 77 độ K. Năm 1961, các nhà thí nghiệm người Mỹ Robert
Biard và G ary Pittm an, làm việc ở Texas Instrum ents cũng phát hiện GaAs
p h át ra tia hồng ngoại khi có dòng điện chạy qua và đã nhận bằng ph át minh
LED hồng ngoại. LED đầu tiên phát ra ánh sáng có thể nhìn thấy là loại LED
đỏ, do N ick H olonyak, Jr. ph át hiện, vào năm 1962 khi đang làm việ c cho
G eneral E le ctric C om pany. H olonyak đã báo cáo hiện tượng này trong lá thư
gỏi cho tạp chí A pp lied P hysics Letters vào ngày 01-12-1962. H olonyak được
xem là cha đẻ củ a LED . M. G eorge Craford, m ột sinh viên tốt nghiệp trước
Holonyak, đã p h á t m inh ra LED vàng đầu tiên và đã cải thiện thêm độ sáng
lên 10 lần cho LED đỏ cũng như LED đỏ-cam vào năm 1972. Vào năm 1976,
T. P. Pearsall lần đầu tiên đã tạo ra LED công suấ t cao, hiệu suất cao cho
cáp quang nhờ và o v iệ c sáng chế ra vật liệu bán dẫn mới có khả năng phát ra
sóng điện từ phù hợp cho cáp quang.
QUÁ TRÌNH THƯƠNG M ẠI HÓA
LED đẩu tiên được thương m ại hóa để thay thế cho đèn c h ỉ thị làm bằng
đèn dây tóc, neon và m àn hình bảy đoạn. Đầu tiên là các th iế t bị m ắc tiền
trong phòn g thí ng hiệm . Sau đó là ti vi, radio, điện thoại, m áy tính và thậm chí
là đổng hổ. Đ ế n năm 1968, LED cực kỳ m ắc, cỡ 200 đôla Mỹ mà lại ít ửng
dụng. Năm 1968, C ông ty M onsanto là công ty đầu tiên sản xuất LED hàng
loạt dùng G ali asen ph ốt pho (G aAsP). Năm này, H ew lett Packard cũng giới
thiệu LED làm từ G aAsP do công ty M onsanto cung cấp. C ác LED này là LED
đỏ và có thấu kính nhựa đi kèm trên từng chữ số để có thể dùng trong m àn
hinh m áy tinh và c h ỉ đủ sáng để làm đèn chỉ thị. Thời gian sau đó thì LED
vàn g, cam ., cũn g trỏ nên phổ biến. Năm 1970, LED thậ t sự đã được thương
m ại hóa thành cô n g khi công ty Fairchild S em icon ducto r bán ra thị trường 5 xu
Mỹ cho m ỗi bó ng LED . C ông ty này đã sản xuất bằng quy trinh Planar do tiến
sĩ Jean H oerni ph át m inh khi làm việc cho họ.
77
CHƯƠNG ỉ : PHẤN CỨN6 VÀ P I Ắ I M Ễ H A I M M U IIIM I f CM K H I t i w t
Sự kết hợp giữa quy trình Planar và các phưong pháp dcng gói giúp
nhóm trưởng Thomas Brandt của công ty Fairchild đã có được khả nâng giảm
thiểu giá thành cần thiết. Các phương pháp này vẫn được cac cõng ty dùng
để sản xuất LED hiện nay. Ngành công nghệ vật liệu cho LED đã pnát triển
ngày càng mạnh mẽ. Công suất ngày càng tăng nhưng hiệu suát. đõ tin cãy
vẫn đạt được mức có thể chấp nhận. Việc phát minh và phát triển LED trắng
công suất cao nhanh chóng thay thế đèn dây tóc, đèn huỳnh quang. LED
ngày này đa sá có kích cỡ 5 mm T1% và 3 mm T1. Tuy nhiẽn, xu hưóngcõng
suất ngày càng lớn nên các kiểu đóng gói khác cũng được phát triển để đáp
ứng yêu cầu tÒE nhiệt. LED công suất cao ngày nay cấu trúc bên trong rất
phức tạp nhưng bể ngoài thì như các LED thời ban đầu.
LED XANH DA TRỜI VÀ LED TRẮNG
LED xanh da trời làm từ InGaN được phát minh đầu tiên do Shuji
Nakamura của công ty Nichia Corporation vào năm 1994. Hai kỹ thuât mấu
chốt là cấy GaN trên lớp nền Saphia và tạo lớp bán dẫn p từ GaN (do Isamu
Akasaki và H. Amano phát triển ở Nagoya). Năm 1995, Alberto Barbieri tại
phòng thí nghiệm đại học Cardiff đã nghiên cứu và giới thiệu LED ‘ tiếp xúc
trong suốt” có công suất, hiệu suất cao bằng cách dùng Indi thiếc ôxít. Sự ra
đời của LED xanh da trời cộng vđi LED hiệu suất cao nhanh chóng dẫn đến
sự ra đời LED trắng đầu tiên dùng Y3AI50 12:Ce. Hợp chất này có tên khác là
YAG, là lớp phủ để trộn ánh sáng vàng với ánh sáng xanh da tròi cho ra ánh
sáng trắng. Năm 2006, Nakamura được trao giải thưởng công nghệ thiên niên
kỷ cho phát minh này.
Hiệu suất, công suất cùa LED tăng theo hàm mũ, gấp đôi sau mỗi 3
năm kể từ năm 1960, tương tự như định luật Moore. Sự phát triển LED nói
chung đã đóng góp cho sự phát triển song song giữa các công nghê bán dẫn,
khoa học vật liệu và quang học. Người ta đã đặt tên nó là định luật Hartz, lấy
từ tên của tiến sĩ Roland Haitz. Năm 2001 và 2002, quy trinh cấy GaN lén chất
nền S i0 2 được hiện thực. Tháng 1 năm 2012, LED công suất lớn theo công
nghệ này được thương mại hóa. Tin đốn là dùng lấm đế S i0 2 6inch(15.24 cm)
thay vì tấm đế Saphia(Nhôm ôxít) 2inch(5.08 cm) sẽ làm giảm 90% giá tnành.
HOẠT ĐỘNG
Về mặt điện tử, hoạt động của LED giống với nhiều loại diode bán dẫn.
Hầu hết các vật liệu làm LED có chiết suất rất cao, tức là hấu hết ánh sáng
phát ra sẽ quay ngược vào bên trong thay vi phát ra ngoài không khí Do đó
công nghệ trích xuất ánh sáng từ LED cũng rất quan trọng, cần rất nhiéu sự
nghiên cứu và phát triển. Các chất bán dẫn như S i0 2 có chiết suất rất cao khi
chưa có lớp tráng phù. Điểu này sẽ ngăn cản photon đi ra khỏi chất bán dẫn
Đặc điểm này ảnh hưởng đến hiệu suất LED và tế bào quang điên, o . ié : suất
của S i0 2 là 3.96 (590 nm), còn không khí là 1.0002926.
7«
\ ARDUINO B A M c m NGƯƠI ĩự HỌc CHƯƠNG 2: PHẤN CỈNC VÀ PHẤN M ÉM A8DUIN0
N ói chung, chỉ có những photon vuông góc với mặt bán dẫn hoặc góc tới
cỡ vài độ thi mới có thể thoát ra ngoài. Những photon này sẽ tạo thành 1 chùm
sáng dưới dạng hình nón. Những photon không thể thoát ra ngoài sẽ chui ngược
vào bên trong chất bán dẫn. Những phô ton phản xạ toàn phần có thể thoát ra
ngoài qua các m ặt khác của chất bán dẫn nếu góc tới đủ nhò và chất bán dẫn
đủ trong suố t để không hấp thụ hoàn toàn các photon. Tuy nhiên, với LED đều
vuông góc ở tất cả các m ặt thi ánh sáng hoàn toàn không thể thoát ra và sẽ
biến thành nhiệt làm nóng chất bán dẫn. Hình dáng lý tưỏng cho phép tối đa
phát sáng là dạng vi cầu, là các hình cầu có kích thước siêu nhỏ. Ánh sáng sẽ
phát ra từ điểm trung tâm và điện cực cũng phải chạm điểm trung tâm . Tất cà
ánh sáng phát ra sẽ vuông góc toàn bộ bề m ặt quà cầu, do đó sẽ không có
phản xạ. Bán cầu cũng có thể cho kết quả tương tự nếu m ặt lưng hoàn toàn
phẳng để phản xạ hoàn toàn các tia phát về phía m ặt lưng.
LỚP T R Á N G PHỦ
N h iều LED được bọc bằng 1 vỏ nhựa màu hoặc trong suốt vì 3 m ục đích
1. H àn LED vào bảng m ạch sẽ dễ hơn.
2. D ây dẫn bên trong LED rất m ỏng sẽ được bảo vệ tốt hơn.
3. Lớp nhựa sẽ đóng vai trò như là m ôi trường trung gian. C h iết suấ t của
vỏ nhựa sẽ thấp hơn ch iế t suất bán dẫn nhưng cao hơn không khí
Lý do thứ ba sẽ gia tăng khả năng phát sáng của LED vì nó sẽ như 1
thấu kính phân kỳ, cho p h ép ánh sáng có góc tới cao hơn góc tới hạn có thể
lọt ra ngoài không khí.
HIỆU SUẤT VÀ CÁC THÔNG s ố HOẠT ĐỘNG
LED dùng làm chỉ thị có công suất chỉ cỡ 30-60 mili oát. Năm 1999, Philips
Lumileds giới thiệu LED có thể hoạt động liên tục với công suất 1 w . Nó dùng 1 đế
bán dẫn lớn hơn rất nhiều so với LED chỉ thị. Thêm nữa là có bộ phận tản nhiệt
bằng kim loại. Một trong những Ưu điểm của LED là có hiệu suất chiếu sáng cao.
LED trắng nhanh chóng bắt kịp và vượt qua hiệu suất của đèn dây tóc. Năm 2002,
Lumileds chế tạo thành công LED 5 w với hiệu suất chiếu sáng từ 18-22 lumen/oát.
Để so sánh, đèn dây tóc 60-100 w có hiệu suất cỡ 15 ImA/V, còn đèn huỳnh quang
tốt thi 100 lm /w . Một vấn đề khá cũ là hiệu suất giảm nhanh khi tăng dòng qua
LED. Tháng 9 năm 2003, một loại LED xanh da trời được công ty Cree giói thiệu
phát ra 24 mW với dòng điện là 20 mA. Điều này có nghĩa là 1 bóng LED trắng sẽ
có 65 lm /w với dòng 20 mA. Đây chính là LED trắng có hiệu suất cao nhất thòi đó,
hơn 4 lần so với đèn dây tóc. Nãm 2006, họ giới thiệu sản phẩm mẫu đạt kỳ lục mói
cho hiệu suất của LED trắng là 131 lm /w với dòng điện 20 mA. Năm này. công ty
Nichia Corporation giỏi thiệu LED trắng vối hiệu suất 150lm /w cũng vói dòng điên
20mA. Năm 2011, Xlamp XM-L, 1 dòng sàn phẩm cùa hãng Cree phát ra 100 Im w
với công suất 10 w , hiẽu suất là 160 Im/vv nếu công suất là 2 w .
79
CHƯƠNG 2 : PHẤN CỨNG V A n Á l U É U A I I M K U IIIM u a O tK M IifJ H C
Nãm 2012, Cree giới thiệu LED trắng hiệu suất 254 ImAV. Trong thực
tố, LED chiếu sáng có công suất từ 1 w trỏ lẽn. dóng tiêu thụ dién ninh là 350
mA. Chú ý là hiệu suất nói trên chỉ tính riêng cho LED và duoi rnòi ưuòng
nhiệt độ thấp trong phòng thí nghiệm. Trên thực tế. nhiệt đô cao và mạch
nguồn cho LED cũng có thất thoát năng lượng nên hiệu suất thấp non nhiéu
Tháng 3 năm 2012, cree tuyên bố LED mẫu đã đạt được 208 Im.vv vói nhiệt
độ phòng, nhiệt độ màu là 4579 K.
TUỔI THỌ
Bán dẫn nói chung và LED nói riêng rất bền khi dòng tiêu thụ nhò và ò
nhiệt độ thấp. Nhiều LED sản xuất năm 1970-1980 vẫn còn cho toi ngày nay
Tuổi thọ thường là 25.000 cho đến 100.000 giờ nhưng nhiệt đô cao và dòng
tiêu thụ cao thi tuổi thọ sẽ giảm nhanh chóng. Dạng hư hỏng chung cùa LED
(và diode la-de) là sẽ dần giảm độ sáng, hiệu suất. Hư hỏng đột ngôt dù hiếm
nhưng cũng xảy ra.
Các LED đỏ thời kì đầu tuổi thọ khá ngắn. Với sự phát triển LED công
suất cao, LED hiện đại phải chịu nhiệt độ cao hơn, dòng tải cao hon ngáy xưa.
Điểu này có thể làm giảm tuổi thọ nhanh chóng. Đê’ phân loại LED theo tuổi
thọ, người đưa ra khái niệm L70 và L50, nghĩa là thời gian để hiệu suất chiếu
sáng còn 70% và 50%.
Như các loại đèn khác, LED cũng phụ thuộc vào nhiệt độ. Hầu hết các
nhà sản xuất đều công bố thông số cho nhiệt độ phòng 25°c. LED ngoài trời
như đèn giao thông hoặc chiếu sáng công cộng nơi có nhiệt độ quá thấp hoặc
quá cao có thể giảm độ sáng hoặc có thể làm hư hòng LED. LED táng đô
sáng ở nhiệt độ thấp tùy loại cụ thể, thường là -30°c. Do đó LED có thể là sự
lựa chọn tốt để chiếu sáng ở kho lạnh của siêu thị và tuổi thọ sẽ cao hon các
loại đèn khác. Vì LED ít phát nhiệt hơn đèn dây tóc nên sẽ có hiêu suất cao
hơn ở những nơi dùng máy lạnh. Tuy nhiên cũng vì ít phát ra hơi nóng nên
LED có thể không dùng được ở những nơi có tuyết rơi dày. Để giải quyết vấn
đề này, người ta có thể thêm một mạch điện tạo sức nóng. Thêm nữa, một
nghiên cứu vừa thành công tạo ra 1 loại tản nhiệt truyền nhiệt váo khu vực
thích hợp bên trong đèn LED.
LED XANH DA TRỜI VÀ LED TIA c ự c TÍM
LED xanh da trời hiện tại dựa trên chất bán dẫn có vùng cấm rông như
GaN (gallium nitride) và InGaN (indium gallium nitride). Chúng cỏ thể dược
gắn chung với LED xanh lá và LED đỏ để tạo ánh sáng Irắng dù LED trắng
ngày nay ít dùng cách này. LED xanh da trời đầu tiên do Jacques Pankove
làm bằng chất gallium nitride vào năm 1971 ở RCA Laboratories Tuy nhién
ánh sáng của nó quá yếu nên không dùng được trên thực lế và sau đó nghiên
cứu về gallium nitride không có tiến triển gi nhiểu.
to
ABDUIWO DAWI CM NGtftfl Tự Hgc CHƯƠNG l: PBÃN CllNS VÀ PHÁN M ÉM AHDUIWO
V à o thá ng 8 năm 1989, công ty Cree Inc. bán ra LED xanh da trời đầu
tiên dùng chấ t bán dẫn có vùn g cấm gián tiếp, silíc các-bua. LED bằng SiC có
hiệu su ấ t rất thấp, không quá 0.03% . C uối thập niên 1980, đột phá trong
ng hiên cứu m àng m ỏng G aN epitaxial và cấy p-type đã dẫn tới m ột kỷ nguyên
mới cho các th iế t bị quang điện dựa trên GaN. T rên nền tảng này, vào năm
1993 LED xanh nước biển có độ sáng cao đã được hiện thực do Shuji
N a kam u ra của côn g ty N ichia C orporation dùng gallium nitride. C uối thậ p kỷ
1990, LED xanh da trời đã được phổ biến rộng rãi. Chúng có m ột hoặc nhiều
lớp kích hoạt InG aN quantum w ells được kẹp giữa các lớp dày bằng G aN, gọi
là lớp che phủ. B ằng cách thay đổi tỷ lệ In-Ga trong lớp InGaN quantum wells,
về lý th u y ế t có ph át ra ánh sáng từ m àu tím cho đến m àu hổ phách. T hay đổi
tỷ lệ A l/G a trong A lum inium gallium nitride (AIG aN) rồi dùng làm lớp che phủ
và lớp kích hoạt có thể tạ o được LED tia cực tím. Tuy nhiên cách này vẫn
chưa có được hiệu suấ t cũng như độ chín m uồi của công nghệ InG aN /G aN
(LED xanh lá, xanh da trời).
N ếu dùng G aN làm lớp kích hoạt quantum w ell layers thì có thể sẽ tạo
được LED p h á t ra ánh sáng gần khu vực tia cực tím, đỉnh cực đại nằm gần
365 nm. LED xanh lá làm từ InG aN /G aN có độ sáng, hiệu suấ t bỏ xa so với
làm từ cá c ch ấ t không phải hợp chất của Nitơ nhưng hiệu suấ t vẫn còn quá
thấ p so với yêu cầu thực tế cho 1 hệ thống chiếu sáng công suất lỏn.
Với hợp c h ấ t nitrit có chứa nhôm , thường là AIGaN và A IG alnN , có thể
ph át ra bước són g ngắn hơn tia cực tím. C ác LED cực tím đang trở nên
phổ biến trê n thị trường. LED có bước sóng gần tia cực tím bước sóng từ
3 7 5 -3 9 5 nm giá rẻ đã có trên thị trường như các đèn soi chống tiền giả, công
văn giả. C ác điốt có bước sóng ngắn hơn vẫn còn m ắc nhưng cũng đã có trên
trị trường với bước sóng nhỏ hơn 247 nm. Vì độ nhạy sáng của vi sinh vậ t gần
bằng với phổ hấp thụ c ủ a ADN , đỉnh ở gần 260 nm, các LED cực tím từ 2 5 0 -
270 nm sẽ trở thà nh th iế t bị khử trùng trong tương lai.
C ác ng hiên cứu gần đây cho thấy LED cực tím kiểu A (365 nm) đã trở
thành th iế t bị khử trù n g hiệu quả. Bước sóng ngắn hơn tia cực tím đã đạt được
trong phòn g thí nghiệm dùng alum inium nitride (210 nm), boron nitride
(215 nm )và kim cương (235 nm). Năm 2011, Z hong Lin W ang của Viện công
nghệ G eo rg ia đã ph át hiện ra dùng dây kẽm ôxít siêu nhỏ có thể tăng hiệu
suất của LED áp điện phát tia cực tim lên 4 lần, từ 2% lên 8%.
Tính ch ất
T ù y theo mức năng lượng giải phóng cao hay thấp mà bước sóng ánh
sáng ph át ra khác nhau (tức m àu sắc của LED sẽ khác nhau). Mức nãng
lượng (và m àu sắc của LED) hoàn toàn phụ thuộc vào cấu trúc năng lượng
của các nguyên tử chấ t bán dẫn.
81
CHƯƠNG ỉ : PHÂN CƯNG V À r a i l M Ẽ M A I DO 1*0 A 1 1 IIM 1 » a * M il T| IK
LED thường có điện thế phân cực thuận cao hon diođe T .:'.g •.’ìưòng.
trong khoảng 1,5 đến 3 V. Nhưng điện thế phân cực nghịch ỏ LED :ni Không
cao. Do đó, LED rất dễ bị hư hòng do điện thế ngược gãy ra
MÀU SẮC VÀ VẬT LIỆU
LED truyền thống được làm từ 1 s ố chất bán dẵn v ô CO - B à -g duói dãy
trinh bày các loại màu sắc cùng với bước sóng, và điện áp vật liẽb
ĐỎ 1,4 - 1 , 8 V
Vàng 2 - 2,5 V
82
ABDU1W0 I * H ỉ CHO Neưúl T ự nọc CHƯƠNG 2: PHẤN CỨNG VA PHÁN M ÉM AKDUINO
D ề tìm hiều thêm thông tin về mạch thiết kế. cách đoc sơ ứó va cac
chân cho các thành phần khác nhau có thề tham khảo ở phần phu luc trinh bày
ở cuối sách này.
84
ABDĐtKO DA N I CHO NEƯỪI ĩự BỌC CBƯƠNC£ PIẨI t ( K VÃ P lí l MÉM ẪllBBH
Mã N g u ổ n
B ài 2: Đ iểu khiển LED RGB
/* Bài 2: Đ iểu khiển LED RGB
Lần lượt cho các LED RGB LED sáng theo chu kỳ với 3 m àu khác nhau.
*/
void setupO (
pinM ode(9, O UTPUT); // T h iế t đặt chân số là ngõ ra
pinM o de(1 0, O UTPUT);
pinM o de(1 1, O UTPUT);
void loop() {
digita lW rite (9, H IG H ); // Led đò sáng
d ig ita lW rite (1 1, LOW ); // Led xanh dương tắt
delay(IOOO); // đợi 1 second
digitalW rite( 10, H IG H ); // Led xanh lá sáng
digitalW rite(9, LOW ); // Led đỏ tắt
delay(IOOO); // đợi 1 second
d ig ita lW rite (1 1, H IG H ); // Led xanh dương sáng
digitalW rite(10, LO W ); // Led xanh lá tắt
delay(IOOO); / / đợi 1 second
}
Lư u ý : Da s ố cá c dóng lệnh trong chương trình này là dạng chú thích.
Chú thích không là p h ầ n chính của chương trình nhưng nó g iả i thich cá c lệnh
trong chương trình cho người đọ c chương trình. Các chú thích có th ề là m ột
dòng lệnh đơn bà ng r và tiếp tục cho đến cuối dòng, hoặc nó có th ề là chú
thích nhiều dòng b ắ t đầu vói m ột r và chấm dứt các dòng sau đó vài m ộ t 7.
Nếu tất cả những chú thích trong m ột đoạn chương trình b ị lo ạ i bỏ, nó vẫn làm
việc đ ú ng như vậy, nhưng chúng ta dùng chú thích cho người đọc chương trình
hiểu nó đang là m gì.
Trước khi b ắ t đẩu, m ột từ được dùng sketch thay vì pro gra m ; đô i khi
dùng code. C ode là cách nói của người lập trình dùng cho m ột đoạn chương
trinh hoặc m ột th u ậ t ngữ có thuộc tinh cho những gi được viế t khi tạo ra m ột
chương trinh. Có thể nói "TÔI dã viế t m ột chương trinh" hoặc “T ô i đã viế t m ột
đoạn code".
CHƯƠNG 2 : PHÁN CƯNG VÁ PHÁN M É M A ID U H O U IIM IA U m W II TỊ MC
P h ấn mém
H ã y thêm mã lệnh dưới vào trinh biên dịch để kiểm tra, biên dịch và
tải nó xu ố n g bo m ạch của bạn. Những đèn LED sẽ sáng theo chu kỳ cù a hệ
đèn giao thông. Nếu bạn đã thực hành và hiểu rõ mã lệnh và phần cứng
trong bà i tập 1 và bài tập 2, thi bạn sẽ hiểu bài tập 3 m ột cách dễ dàng.
Chương trình điểu khiển 3 đèn giao thông:
// B à i 3 - Dẻn giao thông
int ledD elay = 10000; // Thời gian đợ i m ỗ i lần thay đổ i trạng thái đèn
int red P in = 10;
int yellow P in = 9;
int gre en P in = 8;
void setupO {
p in M o de(re dP in, O UTPUT);
pin M o d e (ye llo w P in , O UTPUT);
pin M o d e (g re e n P in , O UTPUT);
)
void loopO {
digita lW rite (red P in, HIG H); // Sáng LED đỏ
de la y(led D elay); // Đ ợi 5 giây
dig ita lW rite (ye llo w P in ,H IG H ); // Sáng LED vảng
de la y(200 0); // Đ ợ i 2 g iây
dig ita lW rite (g re e n P in , H IG H ); // Sáng LED xanh
digitalW rite(redP ir), LO W ); // Tắt LED đỏ
d ig ita lW rite (ye llo w P in , LO W ); // Tắt LED vàng
d e la y(led D elay); II đợ i 1 khoảng thời gian được đ ặ t trong biến ledDelay
// theo m iligiây
d ig ita lW rite (ye llo w P in , H IG H ); // Sáng LED vàng
d ig ita lW rite (g re e n P in , LO W ); // Tất LED xanh
d e la y(2 0 0 0 ); // Đợi 2 giây
d ig ita lW rite (ye llo w P in , LOW ); // Tắt LED vàng
II B ây giờ chương trình sẽ lặp lạ i
}
Hình trang bên là 4 trạng th á i sáng của các đèn khi chú ng ta thực hiện
chương trình. Và cách sáng củ a LED như đã lập trình thì có thể dùng cho m ôt
trụ giao thông đơn giản ở V iệ t Nam.
17
CHƯƠNG I: PHẤN CƯNG VA n i l M Ế M M M M A 1 IIM l « n M i w * Tf M t
Thứ tự sáng.
1. Đèn đô sáng
2. Đèn vàng sáng
3. Đèn vàng sáng
4. Đèn vàng sáng
1 2 3 4
Bạn đã thực hiện xong bài tập 3, một vấn đề đặt ra là nếu các đèn đò
vàng xanh không phải là LED mà là đèn có công suất lớn thi sao?
Giải pháp đưa ra là phải dùng mạch giao tiếp.
Có 2 cách hay được sử dụng là:
• Ngõ ra bo mạch Arduino giao tiếp với rũ-le, các đèn sẽ nối tiếp với các
tiếp điểm của rơ-le.
• Ngõ ra bo mạch Arduino kích các transistor hay Mosfet, các đèn sẽ
nối tiếp với các linh kiện này. cầ n lưu ý mỗi ngõ ra cùa bo mạch
Arduino chỉ cung cấp được dòng tối đa 20 mA và tổng các dòng ngõ ra
không quá 200 mA.
Các bạn hãy tham khảo bài tập sau để có ý tưởng thiết kế
Phần cứng
Đa phần các cuộn hút yêu cầu nguồn lớn hơn nguồn Arduino có thể
cung cấp. Do đó, sử dụng một transistor (bóng bán dẫn) để cung cấp dóng
điện cần thiết cho việc kích hoạt cuộn điện từ. Kích hoạt cuộn điện tử có thể
thực hiện bằng cách sử dụng hàm digitalWrite để thiết lập ngõ ra số ỏ mức
CAO. Lựa chọn transistor thì phụ thuộc vào chỉ số dòng điện cần ci^ng cấp
cho các cuộn điện từ hay rơ-le. Những lài liệu kỹ thuật có thể nói đến hay
chúng ta có thể đo trở kháng cùa cuộn. Để tìm được dòng điện cần thiết cung
cấp cho cuộn cảm hay rơ-le, chúng ta có thể dùng cõng thức V=IR. Ví du mót
rơ-le 12 V với một cuộn cảm có trỏ kháng là 185 ohm thi cấn 65 mA
Chỉ cần dùng transistor như 2N2222 là đù cho yéu cấu của n i : cuôn
điện từ (solenoid) là khoảng cỡ vài trăm mili Ampe.
88
Am w oiAw Cll NCƯÚI Tự19c CMC t PIẤI tow V* HÁM MỀM AIMHH
C á c cuộn S olenoid lớn hơn sẽ đòi hỏi m ột transistor có thể dẫn dòng
điệ n cao hơn, giống như T IP 1 02 /T IP 120 hoặc tương tự. Có rất nhiều lựa chọn
thay th ế tra n sisto r phù hợp.
T rong m ạch điệ n ta thấy có sử dụng diode 1N 4001 bắt song song với
cuộn dây solenoid. M ục đích của các diode là để ngăn chặn dòng điệ n ngược
phát sinh từ cuộ n dây khi đóng ngắt làm hư hại các T ra n sisto r (Á p ngược là
m ột điện áp sinh ra khi dòng điện qua m ột cuộn d â y bị ngừng cung cấp), Nhờ
sự phân cực ngược của diode mà ta có thể chặn được dòng điện ngược này.
Những rơ-le dạng điện từ được kích hoạt giống như những cuộn điện
từ. Đ iều đặc b iệ t là: H iện nay, tại là các cửa hàng điện tử có bán m ộ t dạng
rơ-le được gọ i là Solid State Relay (SSR). Đ áy là m ột linh kiện điện tử có thể
được điều kh iể n trực tiế p bằng chân số cùa bo m ạch A rdu in o m à không cần
dùng tra n sisto r M osfet kích. H ãy tìm tài liệu liên quan về loại rơ-le SSR cùa
bạn sử d ụ ng để b iế t được điện áp và dòng điện mà nó cần để tác động. Nếu
các th ô n g tin vể dò ng và áp vượt quá 5 V olt hoặc 40 mA thì hãy sử dụng
m ạch trê n để điểu khiển.
19
CHƯƠNG 2: PHÁN CỨNG VA PBẤN M Ế M A8DUIN0 U I I M I U I O M O IIT fN t
Phần mềm
Kết nối mạch như hình và sử'dụng chương trình sau để điếu khiển
cuộn dây điện từ bằng bo mạch Arduino. Chương trinh của chúng :a sẽ cho
một cuộn điện từ hút trong vòng 1 giây và cứ 1 giờ sau lại hút n õ : giây. Qua
trinh cứ tiếp diễn theo chu kỳ như vậy.
90
AKDUIWO B A M CHO NGƯƠI ỉự HOC CHƯƠNG 2: PHÁN C ÍN t VA PHÁN M ÉM ARDUINQ
• Đ èn LED 3 m àu.
Những đèn LED ph át sáng m àu khác nhau gốm 3 m àu đỏ, xanh lục và
xanh dưong. T rong những m àn hình m áy tính cũng sử dụng LED 3 m àu như
ng uyê n lý mà chú ng ta sử dụng, chú ng gốm m ột tấm nền chứa nhiều LED 3
m àu tích hợp trong từng điểm và để tạo ra các m àu sắc khác nhau chúng ta
ch ỉ v iệ c thay đổi độ sáng củ a 3 m àu đỏ, xanh lục và xanh dương.
Trong bài tập này, bạn cũng có thể sử dụng 1 LED RGB. LED RGB là
m ột loại LED có đường kính 5m m và chúng có 4 chân. M ột chân có thể là
anode (dương) chung hay cathode (âm) chung, 3 chân còn lại là những chân để
điều khiển m àu đỏ, xanh lục và xanh dương.
LED RGB đơn giản chỉ là m ột LED tích hợp 3 LED màu đỏ, xanh lục và
xanh dương. C húng giúp chúng ta thuận tiện hơn và dễ phối màu hơn nhưng lại
đắt hơn khi chúng ta sử dụng 3 LED riêng biệt.
Hình dưới là LED 3 màu và sơ đổ chân của nó.
• N ếu chú ng ta cấp cho đèn LED các a',á trị R, G, B lần lượt các giá trị
255, 0, 0 thì chú ng ta sẽ có màu đỏ thuần khiết.
• G iá trị là 0, 255, 0 sẽ nhận được mài.' yanh lục thuần k h iế t và 0, 0, 255
sẽ là m àu xanh dương thuần khiết. T ùy vào LED của bạn có màu
chinh xác hay không mà có thể tạo được bất cứ màu gì bạn m uốn.
C h ún g ta có th ể dễ dàng tạo ra các m àu m ong m uốn bằng cách điều
khiển độ sáng của 3 m àu cơ bản. Bảng trang bên mô tả m ột số màu
thường gặp bằng các phối độ sáng của LED.
91
CHƯƠNG 2 : PHẤN CỨNG VÀ P IẮ N M Ể M A tD U m g U l l l l l« u c a K*ếl Tf l|C
255 0 0 Đỏ
Phối màu với mẫu giấy hình trụ sẽ tạo nên những màu sắc khá đẹp.
Ngoài cách trên chúng ta còn có thể đặt 3 LED trong trái bỏng bàn màu trắng
đục. Với cách này, màu trộn nhìn cũng khá bắt mắt. Bạn có thể phối máu cho
LED bằng mọi cách, cốt yếu là 3 màu LED có thể trộn với nhau thành một
màu mà chúng ta mong muốn.
Bằng cách thay đổi độ sáng sử dụng bộ điều chế độ rộng xung, bạn
có thể tạo được những màu sắc mong muốn của minh. Khi chúng !a sừ dụng
các giá trị của bộ điểu chế độ rộng xung chúng ta sẽ khoảng giá trị từ 0 đến
255. Khi điều khiển độ sáng của 3 màu LED cơ bản thì bạn có thể tạo ra
1 6 . 7 7 7 .2 1 6 m à u ( 2 5 6 X 2 5 6 X 2 5 6 ).
Chúng ta sẽ lập trình phối màu 3 màu LED bằng cách sử dung bo
mạch Arduino.
floa t R G B 2[3];
floa t INC[3);
int red, green, blue;
int R edP in = 1 1 ;
int G reen P in = 10;
int B lueP in = 9;
void setupO
{
ra n do m S eed (an alo gR ead (0));
R G B 1Ị0] = 0;
RGB1 [1 ] = 0;
R G B 1[2] = 0;
void loopO
{
ran do m S eed (an alo gR ead (0));
93
CHƯƠNG 2 : PHÁN CỨNG V À PHÁN M É M A I D I M t Ấ llim IA U d M O IIT IM C
Bạn đã tự làm cho minh một nguổn sáng có màu thay đổi
Trong mã lệnh của bạn khai báo một mảng kiểu float và mô: số biến
kiểu integer để lưu các giá trị R (đỏ), G (xanh lục), B (xanh dương) như sau:
Trong chưong trinh khởi tạo bạn có hàng lệnh như sau:
randomSeed(analogRead(0));
Lệnh ramdomSeed tạo ra những giá trị số ngẫu nhiên, vi điêu Khiển
của Arduino thực tế không thể tạo được một số ngẫu nhiên. Để tạo sô' ngẵu
nhiên chúng sẽ tim dữ liệu trong bộ nhớ của chúng hay tim trong rnõĩ bảng
g ồ m c á c g iá t r ị k h á c nhau v à s ử d ụ n g c h ú n g n h ư t h u ậ t toán t a o S 3 n g ẵ u
nhiên giả (pseudo-ramdom) để tạo ra một số ngẫu nhiên cho chúng :a Báng
cách cung cấp cho vi điều khiển nơi có thể cung cấp đưọc số ngẫu nmén tru
chúng bắt đầu tạo sô ngẫu nhiên 0 nơi bạn cung cấp.
Trong b à i tập này, giá trị cung cấp cho hàm ramdomSeed la giá trị
của ngõ vào Analog 0 của bo mạch Arduino. B ởi vi chúng ta khô ng két nó i
g i ở chân Analog 0, nên nhiễu sẽ tác dộng lên chán nay va Ardum o sẽ đọc
các giá trị nhiễu này như /a những s ố ngẫu nhién.
84
ABDUIM IA Mi CIO NCtftfl Tự 19c C H IlD N i 2 : n íu C l M V A N Ấ N M E M A M U IW O
B ạn chỉ cần cung cấp nơi có thể tạo ra số ngẫu nhiên m ộ t lần
trong chương trinh khỏi động. Sau đó có thể sử dụng hàm ram dom () để lấy
giá trị ngẫu nhiên. C húng ta sẽ th iế t lập 2 giá trị RGB được lưu trong 1 m ảng 3
phần tử. RGB1 chứa giá trị m àu RGB bạn m uốn đèn trần trang trí cùa m inh
sẽ b ắ t đầu (trong bài tập này là trường hợp khi bắt đầu đèn sẽ tắt), chú ng ta
khai báo như sau
RGB1 [0] = 0;
RGB1 [1] = 0;
RGB1 [2] = 0;
M ảng RG B2 để tạo các giá trị m àu mà bạn m uốn tạo ra để đèn minh
thay đổi theo:
R G B 2Ị0] = random (256);
RGB2J1] = random (256);
R G B2[2] = random (256);
T rong trường hợp này bạn thiế t lập chúng là m ột số ngẫu nhiên bằng
hàm random (256). Có nghĩa rằng, bo m ạch Arduino sẽ tự động tạo ra m ột số
ngẫu nh iê n từ 0 đến 255.
Nếu bạn sử dụng hàm randomQ mà không có khai báo thông số giới
hạn thì nó sẽ tạo ra các giá trị ngẫu nhiên từ 0 đến 1. Vì vậy chú ng ta nên
khai báo giới hạn cho hàm random . Vi dụ: C húng ta khai báo random (1000)
nó sẽ cấp cho ta m ột số ngẫu nhiên từ 0 đến 999. Nếu bạn cung cấp 2 thông
số giới hạn cho hàm random thì nó sẽ cung cấp cho chú ng ta m ột số ngẫu
nhiên trong khoảng từ số nhỏ đến số lớn. Ví dụ: random (10,100) thì nó sẽ cấp
cho bạn m ột số ngẫu nhiên từ 10 đến 99.
Trong chương trình chính, đầu tiên chú ng ta sẽ tìm bước tăn g cho mỗi
màu bằng cách lấy giá trị đầu trừ giá trị cuối và chia cho 256 bậc (bộ PW M có
giá trị từ 0 đến 255). C h ún g ta sử dụng vòng lặp for như sau:
for (int x=0; x<3; X++) {
IN C [x] = (RGB1 [x] - RG B2[x]) /2 5 6 ; }
Sau đó ch ú n g ta có vòng lặp sau:
for (int x=0; x<256; X++) {
S5
GHtftfNG 2: PHẴN C Í M V Á N Á I M É U A I I I M Ẳ I1 M H I M m H I T| HC
RGB2[x] = random(556)-300;
RGB2[x] = constrain(RGB2[xj, 0, 255);
delay(1000);
}
Số ngẫu nhiên sẽ sẽ được lấy từ 0 đến 556 (256+300) và sau đó trừ đi
300. Chúng ta sử dụng cách này bởi vì bạn ép màu của đèn không phải là tông
màu trắng. Cách này có thể tạo ra số âm vì vậy chúng ta sử dụng thêm hám
constrain() để giá trị gửi cho bộ điều chê độ rộng xung không phải là sò’ ám.
Hàm constraint) bao gồm 3 thông số là X, a và b. Với X lá số bạn
muốn ràng buộc chúng theo các giá trị a và b, a là sô’ thấp cùa phạm vi ràng
buộc và b là số cao của phạm vi ràng buộc. Hàm constain() g itp chúng ta
r à n g buộc s ố X t r o n g p h ạ m vi t ừ s ố a đ ế n s ố b . Nếu X n h ỏ h ờ n a thi g á n X
bằng a còn nếu X cao hơn b thì gán X bằng b. Trong bài tập này chúng ta phải
r à n g b u ộ c X là m ộ t s ố t r o n g k h o ả n g từ 0 đ ế n 2 5 5 đ ể g ử i g iá t r ị đ õ r ô n g x u n g
cho bộ PWM. Trong bài tập này bạn sử dụng random(556)-300 C-ÌO giá trị
màu của bạn sẽ có những giá trị thấp hòn 0 và nhờ hàm constrain " lú n g ta
sẽ đảm bảo giá trị trẽn sẽ không vượt quá phạm vi từ 0 đến 255 để cấp
cho bộ PWM.
96
* A8DDIM lAWOII K W lT M ft____________________________________ cmrtfwc Z: HÁI tỉm Ù n *» IIẺM M U M
Bạn đã thực hiện 5 bài tập trong chương 2, trong bài tập 3 bạn đã thực
hiện điều khiển đèn giao thô ng nhưng trong thực tế nhiều hệ thống đèn giao
thông có yêu cấu phức tạp hơn khác với yêu cầu ở bài tập 3.
N hiểu đường cao tốc xe chỉ Ưu tiên xe đi theo 1 hướng dọc, đèn xanh
hướng này luôn luôn sáng. C hỉ khi có khách qua đường (ỏ đường ngang)
m uốn qua sẽ ra lệnh cho hướng này tạm dừng. Khi khách qua đường, đèn sẽ
chuyển trạ n g thá i Ưu tiên cho đường cao tốc. Người thiế t kế phải th iế t kế 1 nút
nhấn ưu tiên cho khách qua đường.
Tương tự như vậy, giả sử bạn m uốn thiế t kế cho m ột trò chói đánh bạc
điện tử có yêu cầu sau:
Có 7 đèn bố trí kiểu hình súc sắc, khi bật m áy thi lần lược các đèn sẽ
sáng theo số từ 1 đến 6. C á ch thể hiện bạn tự chọn, yêu cầu này lập trình rất
dễ dà ng . Nhưng chỉ cần thay đổi m ột ít yêu cầu như dùng 1 nút nhấn ra lệnh,
:các số sẽ chớp ngẫu nh iê n và dừng tại m ột số bát kỳ nào đó. N ếu ai đặt số
'trùng với số hiển thị sẽ thắ ng thi việ c lập trình sẽ khó hơn nhiều.
• o • o
o 0 0
o 0 0
o o o o • o
•
o • o •
• •
• 0 •
• o •
• •
• •
o o o
o
•
• •
•
M ộ t ví dụ khác: Bạn có 12 LED và tạo các hiệu ứng như yêu cầu ỏ
; :hương 5.
G iả sử bạn thiế t kế 3 hiệu ứng và nếu cho chạ y đoạn mã lập trinh nào
":hì chương trinh chạ y theo đúng yêu cầu đó. Nay bạn m uốn tạo hiệu ứng phức
ạp hon như:
S7
CHƯƠNG 2 : PHẤN C ÍN S V À n i l M Ể M U D IH Q U IIM 1*0 m M i l Tự l ậ t
Có nhiều nút nhấn, khi nhấn nút nào chương trình sẽ cnay đoan mà
tạo hiệu ứng đó. Để có thể thực hiện bài tập này bạn có thể là~i bãi táp 7
Điều khiển đèn giao thông và Ưu tiên cho người đi bõ để có ỷ tuông làm bai
tập theo yêu cầu trên. Bạn hãy tự mình thiết kế mạch điểu khiển súc sắc sáng
ngẫu nhiên mà không có hướng dẫn chi tiết để đánh giá khả nâng. Nếu chua
làm được, hãy làm các bài tập còn lại trong sách sau đó quay vé giải quyét
yêu cầu bài tập này.
Lưu ý: Bài tập 7 là bài tập khó, đã trình bày trong chuyén đế "Lập trình
điều khiển với Arduino" nay trình bày lại trong chuyển dề này để những ai chưa
xem qua sách “Lập trình diều khiển với Arduino" vẫn có thề vận ơung những ỷ
tưởng trong bài tập này đề lập trình các yêu cầu phức tạp hơn trong dãn dụng
củng như trong công nghiệp.
BÀI TẬP 7: ĐIỂU KHIỂN ĐÈN GIAO THÔNG VÀ Ưu TIÊN CIO N6Ư0I ĐI Bộ
Chúng ta cùng mở rộng bài tập 3 bằng cách thêm đèn cho người đi bò
và nút nhấn dành cho người đi bộ để yêu cầu cho phép qua đưàng.
Bo mạch Arduino sẽ phản ứng lại khi có nút nhấn được nhấn bằng
cách phát hiện trạng thái của nút nhấn. Tác dụng của nút nhấn này là yẻu
cẩu xe cơ giới dừng lại và cho phép người đi bộ qua đường an toàn. Đây là lán
đầu tiên chúng ta sử dụng nút nhấn để lương tác với bo mạch Arduino vá yẽu
cầu bo mạch Arduino làm một điều gì đó khi phát hiện có nút nhấn. Trong bai
tập này, bạn sẽ được tìm hiểu cách tạo ra một hàm của riêng minh trong
chương trình của mình.
Phần cứng
• Test board
• 2 Đèn LED đỏ, 1 Đèn LED vàng, 2 đèn LED xanh lá cây
Bạn có thể chọn các giá trị điện trỏ xấp xỉ cho đèn LED ồ bài táp nảy
Chúng ta có sử dụng các điện trở cho nút nhấn. Điện trở cho LED đưoc gọi la
điện trở hạn dòng, còn điện trở 10 K cho nút nhấn kết nối với đấ; (GND) dúnc
tro n g b à i tậ p n à y g ọ i là đ i ệ n trở k é o x u ố n g ( c h ú n g ta s ẽ t im h iể u < ỹ ỏ CUỐI
chương). Nút nhấn là các thiết bị chuyển mạch và bán rất nhiêu ò các cho
điện tử, bạn có thể tim và mua một cách dễ dàng. Chú ý: Ban rẻ-, "ìua loa
nút nhấn dễ cắm vào test board để thuận tiện cho việc sử dung,
98
A U I H DAM C ll HCtfdl Tự 19c C lM K I: m I CÍNS n MAN MỀM AIBPĨHO
H ãy thê m m ã lệnh dưới vào trình biên dịch để kiểm tra, biên dịch và
tải nó xuống bo m ạch của bạn. Khi bạn chạy chương trinh, nó sẽ bắt dầu với
đèn xanh cho p h ép xe cơ giới ch ạ y qua và đèn cho người đi bộ là đỏ.
Khi bạn n h ấn nút, chương trình sẽ cho phép kiểm tra nút nhấn và nếu
kể từ ƯU tiên lần gần nhất là 5 giây thì chương trinh sẽ thực hiện m ột hàm do
bạn tạo ra tên là c h a n g e L ig h ts (). Trong hàm này, đèn cho xe qua lại chu yển
từ m àu xanh th à n h m àu đỏ và sau đó đèn cho người đi bộ chu yển sang màu
xanh. Sau khoảng thời gian đã dược th iế t lập trong biến c ro s s T im e (thời gian
đủ để người đi bộ đi qua đưòng) thì đèn xanh dành cho người đi bô sẽ chớp
tắt để cảnh báo người đi bộ hãy qua đường nhanh bởi vì đèn cù a người đi bộ
ch u ẩ n bị chu yển trạng th á i sang đỏ. Sau đó thi đèn cho ngưòi đi bộ sẽ
ch u yể n thà nh m àu dỏ. Đ èn cho xe cơ giới từ màu đỏ lại chu yển thà nh m àu
xanh. Và chương trinh đèn giao thông lại chạ y theo yêu cầu.
99
CHƯƠNG 2: p i An C ứ ng V Ằ n Ấ I H Ế U U I I M U IIM u n a M O 1 HC
Chướng trình điều khiển đèn giao thông và ưu tiẽn cho ngưòi đi bộ:
void setupO {
pinMode(carRed, OUTPUT);
pinMode(carYellow, OUTPUT);
pinMode(carGreen, OUTPUT);
pinMode(pedRed, OUTPUT);
pinMode(pedGreen, OUTPUT);
pinMode(button, INPUT); // Nút nhấn ở chân 2
II Bật đèn xanh cho xe cơ giới và đèn đỏ người đi bọ
digitalWrite(carGreen, HIGH);
digitalWrite(pedRed, HIGH);
}
void loopO (
int State = digitalRead(button);
/* Kiểm tra nút nhấn và kể từ lần Ưu tiên gần nhất là 5 giây thì thưc hiện
khối lệnh của cấu trúc if ’/
if (state == HIGH && (millisO ■ changeTime) > 5000) {
// Gọi hàm thay đổi đèn cho người đi bộ
changeLights();
)
}
void changeLightsQ {
digitalWrite(carGreen, LOW); // Tát đèn xanh
100
ARDOWOIAMI CIO NGtftfl Tự 19c HtftfNC 1: P IẤ I c f K VÀ PIẤN MẾM AKDMM
)
// Sáng đèn đỏ của người đ i bộ
d ig ita lW rite (p e d R e d , HIG H);
delay(500);
}
Tìm h iểu mã lệnh bài tập 7 - Đ iều khiển đèn giao th ô n g và ưu tiên
cho người đi bộ
Bạn đã hiểu hầu hết mã lệnh trong chương trinh này nếu bạn đã thực
hành cá c bài tập trước. B ây giờ chú ng ta tập trung và o những từ khóa và
những khái niệm mới:
CHƯ0NC 2: ra Á N C0NC VÀ n Ắ I M Ế U U I I M U 1 IM U M CM B U 1 HC
Đầu tiên là từ khóa unsigned và kiểu trong khai báo biến ‘rang tẽ n
unsigned long changeTime;
Có một kiểu dữ liệu mới trong biến này. Trước đây chúng ta đã SỪ
dụng qua kiểu integer, trong biến Integer chúng ta có thể chứa mót số trong
khoảng -32.768 đến 32.767.
Bây giờ chúng đã tạo ra một kiểu dữ liệu mới tên là long. Và VÓI kiểu
long bạn có thể chứa được một số từ -2.147.483.648 đến 2.147.483 647 Tuy
nhiên chúng ta có thêm từ khóa unsigned trong khai báo long. Điếu này có
nghĩa, biến mà chúng ta sử dụng không chứa số âm. Vì vặy biến cnangeTime
trong chương trinh này có thể chứa một sô' trong khoảng từ 0 đến
4.294.967.295. Nếu bạn sử dụng kiểu integer để lưu độ dài của thời gian cùa
lần cuối ưu tiên thì bạn chỉ có thể có một khoảng thời gian tối đa lá 32 giãy,
bởi vì kiểu integer không thể chứa một số lớn hơn nữa.
Và người đi bộ qua đường thì không bao giờ lúc nào cũng qL3 cứ mỗi
32 giây hoặc nhỏ hơn nên chúng ta phải đề phòng trường hợp chưong trình
chúng ta có thể chạy sai bởi vì biến của chúng ta bị tràn khi lưu môt số lòn
hơn số mà nó có thể chứa. Vi vậy, chúng ta phải khải báo kiểu dữ liêu
unsigned long cho biến của chúng ta để có thể chứa được số lớn (giá trị thời
gian giữa mỗi lần nhấn nút ưu tiên).
Chúng ta cùng làm phép tinh để tính thời gian mà biến changeTime có
thể lưu được như sau:
4294967295* 1 ms = 4294967 giây
4294967 giây = 71582 phút
71582 phút = 1193 giờ
1193 giờ = 49 ngày
Và biến chúng ta tạo ra khá hợp lý vì nút nhấn người đi bộ phải đưọc
nhấn trong vòng 49 ngày. Vì vậy chương trình của chúng ta sẽ không xày ra
lỗi tràn.
Vậy tại sao chúng ta không sử dụng một kiểu dữ liệu có thể chứa mót
số vô cùng lớn? Đơn giản bởi vì biến của chúng ta chiếm quá nhiếu bõ nhớ
RAM cho việc không cần thiết, vi chúng ta còn cần RAM cho các muc dich
khác. Một số lớn hơn đồng nghĩa với việc sẽ có nhiều bộ nhó bị tiêu tốn non.
Trong máy tính hay Laptop của bạn thì có thể không quan tám vé Vấ-I đé nay
nhưng đối với một vi điều khiển nhỏ bé như vi điều khiển Atmega32 bè-, trong
bo mạch Arduino thì bạn phải cản đối sử dụng RAM cho các vỉẽc c à ' tniết
thay vì lạm dụng vào các mục đích vô nghĩa.
Bảng trang bên giới thiệu về kiểu dữ liêu và số bô nhớ RAM :ẽ _ tốn
và phạm vi có thể lưu số mà không bị tràn:
10?
ABDUIWO D A M cao N Ctldl Tự HQC [M l 2: PHÁN CIÍN6 VÀ HẮNM ỂM M BU M O
103
CHƯƠNG 2: PHẤN C t M VÀ P IẮ N M Ế II A l i m U IIM I U M K W lT fH t
Như bạn thấy, chúng ta đã sừ dụng quá nhiều bỗ nhó cno viẽc khõnẹ
cần thiết. Bạn có thể giảm thiểu sử dụng bố nhó báng cách báo kill,
byte cho những số nhỏ. Và nó cũng đã đù để lưu số chân cùa bo mactì
Arduino vì khoảng số có thể lưu được là từ 0 đến 255
Tiếp theo bạn có dòng lệnh như sau:
pinMode(button, INPUT);
Lệnh này khi biên dịch, chương trình biên dịch sẽ hiểu răng bạn muõn
sử dụng chân số 2 như một ngõ vào. Bạn sẽ sừ dụng chân số 2 này để theo
dõi trạng thái của nút nhấn nên bạn cần phải thiết lập nó như ngõ vào.
Trong chương trình, kiểm tra trạng thái cùa chân 2 với dòng lênh sau
int State = digitalRead(button);
Cách khởi tạo này là một số integer (sau khi bạn đã xem cách phán
bổ RAM thì bạn thấy nó gây tốn RAM quá nhiều, chúng ta chi nên SỪ dụng
kiểu boolean) gọi là State và sau đó thiết lập giá trị của biến này theo giả tri
đọc vào từ chân số 2. Lệnh digitalRead đọc trạng thái của một cnãn và trà vé
dữ liệu trạng thái cho chúng ta. Bạn có thể kiểm tra giá trị trong biến trạng
thái để xem nút nhấn có nhấn hay không.
if (state == HIGH && (millis() - changeTime) > 5000) (
// Call the function to change the lights
changeLights();
}
Cấu trúc if được giới thiệu trong bài tập này là một cấu trúc dùng de
điều khiển và nó có mục đích là kiểm tra điều kiện có đúng hay khõng. Nếu
đúng thì nó sẽ thực hiện lệnh trong khối lệnh của nó (bao bài dấu ngoác
nhọn). Ví dụ: Nếu bạn muốn bật LED sáng khi một biến X tăng trên giá trị 500
thì bạn viết như sau:
if (x>500) {dĩgitalW rite(ledPin, HIGH);
Khi bạn đọc một chân sử dụng lệnh digitalRead, thì giá trị trà vé cùa
nó chỉ là CAO hoặc THÃP. Vì vậy cấu trúc if trong chương trinh như sau:
if (state == HIGH && (millis() - changeTime) > 5000)
Và câu iệnh này dùng kiểm tra cùng lúc 2 điểu kiên có đúng hay
không. Đầu tiên là biến State so sánh với mức CAO. Nếu nú: nhấn dược
nhấn thì trạng thái cùa nút nhấn sẽ là mức CAO, chúng ta đọc :rang thái
này từ chân số 2. Sau đó bạn cũng kiểm tra giá trị cùa millisO-cha^geTime có
lớn hơn 5000 hay không (sử dụng phép toán logic AND và thể 3 toán tử
&&). Hàm m illis() là một hàm được xây dựng sẵn trong ngôn Arduino
và nó trả về giá trị là số miligiây kể từ khi bo mạch Arduino bấ: í ắ t chạy
chưdng trinh.
104
ABDOIWO D A M CHO N etfdl Tự ll)C CHƯÚN6 2: PHẤN CỪNG VA PHÁN M ÉM ARDUINO
Biến c h a n g e T im e sẽ lưu lại giá trị này tại thời điểm cuối cùng khi kết
thú c hàm cha ng eL igh ts ưu tiên cho người đi bộ. Bằng cách lấy giá trị thoi gian
m ilig iâ y hiện tại trừ cho giá trị thời gian cuối cùng được ưu tiên gần nhất, và
đem giá trị trừ này so sánh với 5 giây. Nếu thài gian trừ này lớn hơn 5 giây thi
sẽ thực hiện khối lệnh bên trong cấu trú c if. Chúng ta đặt phép toán trừ trong
dấu ngoặc đơn để đảm bảo rằng phép toán logic A N D (& & ) sẽ thực hiện giữa
trạng th á i nút nhấn và phép so sánh của phép toán trừ vói 5000.
Biểu tượng && ở giữa và các tính toán dựa trên đại số Boolean.
State == H IG H T
T rong trường hợp này là And. M ột số toán tử logic thực hiện trong
ngôn ngữ A rdu in o như sau:
• Phép toán logic AND.
• “ II” : P hép toán logic OR.
• P hép toán logic NOT.
Đ â y là các toán tử logic và có thể sử dụng để kiểm tra điều kiên trong
cấu trú c if.
& & có nghĩa là đúng khi 2 toán hạng của phép AND là đúng. Vì vậy
cấu trú c if sau sẽ thực hiện khối lệnh bên trong cấu trúc chỉ khi x=5 và y=10,
nếu 1 trong 2 cái không đúng thi cấu trúc if sẽ không thực hiện:
if (x==5 && y= =1 0) { mã lệnh
II có nghĩa là đúng nếu m ột trong các toán hạng của phép OR là đúng
Vì vậ y cấu trú c if dưới đây sẽ thực hiện khi x=5 hoặc y=10:
if (x==5 II y==IO) { mã lệnh
! có nghĩa là đú ng nếu toán hạng của nó là sai. Vì vậy cấu trú c if dưới
đây sẽ thực hiện khi x=0 (có thể hiểu là X sai):
if (!x) { mã lệnh
Bạn cũn g có thể kết nối nhiều điều kiện với dấu ngoặc đón, ví d ụ :
if (x==5 && (y==10 II z= = 2 5)) { mã lệnh
Trong trường họp của câu lệnh phía trên thì điều kiện trong dấu ngoặc
đơn sẽ được thực hiện riêng !ẻ và sau đó lấy rstít quả đó AND voi điểu kiện
x==5. Đê’ đơn giản và dễ hiểu chúng ta cùng xem bàng sự thậ t để b iế t nó
ho ạt động như thế nào:
Khối lệ nh để thực hiện trong cấu trúc if là: changeLights(V.
V à đây là cách bạn sử dụng để gọi m ột hàm.
M ột hàm hiểu đơn giản chỉ là m ột khối lênh được tách riêng ra và
được đặt tên. Tuy nhiên, hàm có thể bao gồm các thông số và cũng có thể trả
lại giá trị nào đó.
CHƯƠNG 2: PHẪN CỨNG VẤ r a Á « M É M A 1 I I M M J IM !» ■ « K S IV r im
4 9 25 Sai
5 10 24 Đúng
7 10 25 Sai
5 10 25 Đúng
Trong bài tập này, hàm mà chúng ta không yêu cầu thông số nào và
nó cũng không trả lại giá trị nào cho chúng ta. Chúng ta sẽ tìm hiểu chi tiết
sau về hàm yêu cẩu thông số và trả lại giá trị dữ liệu nào đó. Khi hàm
changeLights được gọi thì chương trình sẽ nhảy đến dòng đầu tiên của hàm
để thực hiện tiếp chương trinh bên trong hàm và sau đó trỏ về thực hiên tiếp
chương trinh đang thực hiện (thực hiện lệnh tiếp theo tại nơi vừa gọi hàm).
Trong bài tập này, cấu trúc if khi hội đủ điều kiện thi chương trinh thực
hiện chương trinh trong hàm được gọi và trở về thực hiện tiếp dòng lènh sau
changeLights() trong cấu trúc if.
Mã lệnh bên trong hàm đơn giản chỉ thay đổi đèn cho xe cơ giói từ vàng
sang màu đỏ, rồi sau đó bật đèn xanh cho người đi bộ. Sau một thòi gian được
thiết lập trong biến crossTime, đèn sẽ sáng trong vòng vài giây để thông báo
người đi bộ rằng họ phải qua đường nhanh. Sau đó trạng thái đèn cùa người đi
bộ sẽ trở về màu đò và đèn cho xe cơ giới chạy tiếp tục màu xanh.
Chương trình chính đơn giản chỉ kiểm tra liên tục nút nhấn có nhấn
hay không. Và nếu có thi nó phải kiểm tra xem, từ lúc ưu tiên gần nhất đến
lúc nút được nhấn có phải là 5 giây hay không. Nếu đúng thì nó sẽ gọi hàm
changeLights().
Trong hàm changeLights nhìn rất đơn giản và bạn dễ dàng hiểu được
cách hoạt động của các lệnh trong hàm.
Trong những bài tập sau chúng ta sẽ tạo ra những hàm có thể trả vé
giá trị và có cấu trúc phức tạp hơn hàm chúng ta tạo trong bài này.
Tìm hiểu phần cứng bài tập 7 - Đèn giao th ô n g và Ưu tiên cho
người di bộ
Có một phần mói trong phẩn cứng ở bài tặp này là nút nhấn hay
chuyển mạch. Như bạn thấy trong mạch điện, nút nhấn không trực tiếp kết
nối giữa nguồn với ngõ vào mà có thêm một điện trở giữa nút nhấn va đất.
Điện trở này được gọi là điện trà kéo xuống và nó giúp nút nhấn hoa: đông ồn
định hơn. Ch Ong ta cùng tìm hiểu một số khái niệm để hiểu vế điên trà kéo
lên và điện t r j kéo xuống.
1
' ARĐOmO IIA W n o NGƠƠI Tự HỌC CHỬ0NG 2: PHÁN C(NC VÁ P IẤ N M É M AM BW Q
T rạn g th á i Logic
M ột m ạch logic là m ột m ạch có ngõ ra c h ỉ có mức logic C AO hoặc
_ logic T H Ấ P (cũng có thể hiểu là mức CAO là 1, mức TH Ấ P là 0). T rạng thái ỏ
mức T H Ấ P là điện áp gấn bằng o v , và trạng thái ở mức CAO có điện áp gần
' bằng điện áp nguồn cung cấp. M ạch logic đơn giản nhất là m ột chuyên m ạch
công tắc như hình dưới.
---------0 ^ 0 ---------
Khi côn g tắc hỏ, không có dòng điện qua nó và chúng ta không thể đo
điện áp ngõ ra của nó. Khi công tắc đóng lại thì dòng điện có thể qua nó. Vì
vậy, ch ú n g ta có thể đo điện áp củ a ngõ ra. Trạng thái mở có thể được đọc là
0 và đ ó ng m ạch được đọc như là 1.
T rong m ột m ạch logic, sẽ có m ột mức điện áp đại diện cho mức CAO
hay mức 1, thường thi mức điện áp của mức cao trong bo m ạch A rduino là
gần b ằ n g +5 V. Nếu mức điện áp của mức 1 là +5 V thi càng tốt. Tương tự
" như vậy, cũn g sẽ có m ột mức điện áp đại diện cho mưc TH ẤP hay mức 0,
thường trong bo m ạch A rduino thì điện áp đại diện cho mức 0 là gần 0 V (0 V
■ càng tốt). Nếu bạn không chắc chắn trạng thái của m ột m ạch logic là mức
nào thì bạn nên nối ngõ ra của nó với m ột điện áp nào đó để xác định nó là
mức nào. Vì khi bạn không không nối ngõ ra của nó với bất kỳ điện áp nào thi
: nó có thể là mức cao hoặc cũng có thể là mức thấp. Nếu bạn không nối ngõ
ra như vậ y thì trong điện tử gọi là ngõ ra thả nổi, nó có thể bị nhiễu và lúc này
nó ở mức 1, lúc khác nó lại ở mức 0. H iện tượng này có thể làm m ạch bạn sai
lệch hoặc hoạt động không ổn định. Vì vậy chúng ta nên thêm điện trở kéo
.. lẽn để chắ c chắn trạng thá i ngõ ra là CAO hay T H A P . Chúng ta không nên
thả nổi ngõ ra của m ột m ạch logic.
..
điện trỏ kéo xuống. N ếu nút nhấn được
nhấn, dòng điện sẽ chảy từ nguồn qua điện
E\
trở R2 và điện áp rơi trên điện trở là 5V, vì
vậy ngõ và o của bo m ạch A rduino sẽ đọc R1
vvv »
được m ột mức cao. T uy nhiên khi chúng ta
1CK) ohm
không nhấn nút thì điệ n áp cùa điện trở R2
gần bằ ng 0 nên chú ng ta sẽ đọc được trạng
thái có mức T H Ấ P .
GND
107
CHƯƠNG 2 : PHÁN C ÍN E VẢ P I Á I H Ế U A ID 1 M 0 A IIIM U M W J S M IT fJ K
ìGRD
Bằng cách sử dụng điện trỏ kéo lên hoặc điện trởkéo xuống bạn có
thể chắc chắn được trạng thái ngõ vào là CAO hay THẤP, phụ thuộc vào
chương trình của bạn. Trong bài tập này chúng ta sử dụng một điên trò kéo
xuống để trạng thái ngõ ra của nút nhấn không bị thả nổi. Bạn hãy nhìn lại
điện trỏ kéo xuống kết với nút nhấn trong bài tập này ở hình trang bên. Trong
mạch này bao gồm một nút nhấn, một chân của nút nhất được nối Irực tiếp
với nguồn 5 V và chân còn lại kết nối trực tiếp với chân số 2 cùa bo mạch
Arduino. Ngoài ra chân kết nối với chân số 2 của bo mạch Arduino còn kết
nối với đất thông qua một điện trở 10 K. Nó là một điện trở kéo xuống.
108
1 ARDUIW O 8 A M I c m N 6Ư Ơ I ĩ ự i g c CHƯỚNG 2: PHẤN c if l i t VẢ PHÁN M É M ARDUINO
Vi v ậ y chúng ta phải giữ nó trong toàn bộ thời gian hoạt động binh
thường, trừ khi bạn muốn reset chip. Bạn có thể giữ chân của chip ò mức cao
bằng các kết nối thêm điện trở kéo lên. Khi muốn reset nó, bạn chi việc xuất
giá trị mức 0 cho nó sử dụng ngõ ra số. Nhiều 1C cũng có các chân tương tự
như 1C 75H C 595 nên chúng ta sẽ thường xuyên gặp chúng trong m ạch điện tử.
Đ iện trở kéo lên bên trong của bo m ạch Arduino
T rong bo m ạch A rdu in o có bao gồm điện trở kéo lên 0 m ột số chân
(những ch â n anaglog cũn g có điện trở kéo lẽn). Có các điện trỏ 20 K kéo lẽn
bên trong bo m ạch và để chúng hoạt động chúng ta phải th iế t lập bằng phần
m ềm . Đ ể thiế t lập điện trở kéo lên bên trong cho m ột chân, đầu tiên bạn phải
thay đổi pinM ode cùa m ột chân thành ngõ vào và sau đó viế t m ột giá trị mức
cao vào chân đó sử dụng lệnh digitalW rite:
pinM o de(p in , INPUT);
d ig ita lW rite (p in , HIG H);
N ếu bạn thay đổi pinM ode từ INPUT thành OUTPUT sau khi đã thiế t
lập điệ n trỏ kéo lên bên trong, thì chân đó sẽ ở mức CAO. C húng ta cũng có
thể làm ngược lại: M ột chân ngõ ra có mức cao và sau đó chú ng ta chuyển nó
thành chân ngõ và o và nó sẽ tự động có m ột điện trở kéo vào bên trong.
TÓM TẮT
T rong chương 2, bạn đã thực hiện 7 bài tập điều khiển LED bằng
những lệnh cơ bản trong A rduino làm nền tản cơ bản cho việc thực hành điều
khiển LED phức tạp hơn (các hiệu ứng) cũng như các đối tượng phức tạp hơn.
C ác bạn đã tìm hiểu cá c đối tượng và khái niệm trình bày sau:
• Tầm quan trọng củ a lời bình (chú giải) trong đoạn mã lập trình.
• Thiết lập (Viết) một giá trị cao (HIGH ) hay thấp (LOW) cho một chân (pin).
• Làm thế nào để tạo ra m ột thời gian trễ tại m ột châ n (pin) trên bo
m ạch A rdu in o với đơn vị thời gian là m iligiây.
• Đ iện trở là gi, và làm thế nào để sử dụng nó để hạn chế dòng điên.
• Làm thế nào để chọn giá trị điện trở cần thiế t cho m ột LED.
109
CHƯƠNG 2: PHÁN CỨNG VÀ n Ấ I M Í M M N M u s a * U M c» Itiln f i*
• Làm thế nào đọc các giá trị cũng như sai số cùa d iẽ i t'ò tứ các vòng
màu in trên nó.
• LED là gì và nó hoạt động như thế nào.
• Làm thế nào để tạo mã lặp sử dụng cho vòng láp for.
• Các toán tử toán học đơn giản trong mã lập trinh.
• Sự khác biệt giữa biến nội và biến toàn cục.
• Điện trở kéo lên, kéo xuống và cách sử dụng chúng.
• Làm thế não để đọc tín hiệu từ một nút nhấn.
• Khi nào quyết định sử dụng câu lệnh if.
• Thay đổi một chế độ (mode) chân giữa đầu vào (INPUT) và đẩu ra
(OUTPUT).
• Hàm millis ( ) và cách sử dụng nó.
• Các toán tử logic và làm thế nào để sửdụng chúng để đưara quyết
định hợp lý.
Bạn đã biết cách khai báo, đọc các tín hiệu ngõ vào và lãp trinh diéu
khiển cho đèn LED sáng và tắt. Bạn bắt đầu áp dụng những kiến thức điện tù
đã học của bạn để hiểu rõ đèn LED và điện trỏ làm việc ra sao, làm thế náo
điện trỏ có thể được sử dụng để hạn chế dòng điện, và làm thế nào chúng có
thể được sử dụng để tạo một một đầu vào ở mức cao (High) hay thấp (Low|
theo nhu cầu của bạn. Bạn cũng được ôn tập về lý thuyết cách dọc giá trị điện
trở cũng như sai số điện trở qua màu sắc in trên nó. Do sách in trắng đen nến
bạn không thấy rõ ra giá trị của nó tinh bằng ohms qua các vòng màu. Bạn có
thể tải về file thực hành (mã nguồn cho các bài tập trong sách) theo đường
dẫn trình bày trong phần giới thiệu hay trong trang web của tủ sách (Phẩn giói
thiệu sách lương ứng) để có file word với hình màu giúp bạn hiểu rõ hon cách
đọc giá trị và sai số điện trở. Bạn cũng hiểu rõ hơn về ngôn ngữ lập trinh
Arduino (phần cơ bản) qua một số lệnh và khái niệm.
Những kỹ năng mà bạn học được ở Chương 2 sẽ là nén tảng cho
những dự án Arduino phức tạp hơn. Trong chương tiếp theo bạn sẽ lâp trinh
Arduino để điều khiển đèn LED với yêu cầu ohức tạp hơn. Một khi đã làm
quen với việc lập trình trong Arduino bạn có thể hiểu việc lặp trinh và diéu
khiển các đối tượng vói yêu cầu cao hơn trong cấc chương tiếp theo. Lúc này
nếu cần phải sắm thêm các linh kiện thực hành bạn sẽ không ngai vi bạn có
thể điều khiển được chúng, khai thác có hiệu quả chúng trong cống viéc.
110
M I I M IÀ M d i NCƯ0I ĩặ 19c CHƯƠNG 3: BIẾ1 n ẩ l V* TẠO HI£U ƯN6 v đ l 6 LED
CHUÔNG 3
T rong cu ộ c sống, m ột lĩnh vực luôn tổn tại và chú ng ta thường tiếp xúc
đó là tĩnh vực quảng cáo. Q uả ng cáo ở đây không chỉ bao gồm cá c quảng cáo
ở tru yề n hình, băng rôn mà còn có các bảng hiệu. M ục tiêu quan trọng nhất
trong quản g cá o là làm người khác chú ý, làm sao cho họ phải nhớ đến sản
phẩm cần quảng cáo. Đ ể làm được điều này, người th iế t kế phải làm nổi bặt
sản phẩm m ình m uốn quản g cáo. Bạn có thể làm nổi bật bảng hiệu hay băng
rôn quảng cáo bằng nhiều cách, m ột trong những cách hiệu quả là ph ối hợp
ánh sáng cho chúng.
Đ è n LED là m ộ t loại đèn phát sáng đài mới tiêu hao năng lượng rất
thấp, có nhiều m àu sắc để chọ n lựa, LED có nhiều ứng dụng trong cuộ c sống
hiện tại và tương lai. H iện nay đèn LED đã bắt đầu thay thế dần cá c loại đèn
chiếu sáng th ô n g d ụ ng trước đây m ặc dầu giá thành còn khá cao, nhưng về
lâu dài thì rất tiế t kiệm về m ặt năng lượng, cụ thể trong chiếu sáng công cộng,
đèn đường, đèn ch iế u sán g vỉa hè...
Thay vì chiếu sáng quảng cáo bằng đèn neon, LED thay cho đèn
neonsign tiế t kiệm 50% điện năng và ít bị hư hỏng hơn so với neonsign, các
bảng quản g cá o LED rất sinh động và tiế t kiệm năng lượng. Bảng điện tử có
thông tin thay đổi được còn gọi là bảng quang báo hay m àn hình điện tử LED
có nhiều m àu sắc, nhiều cách hiển thị sinh động, dễ dàng thu h ú t sự chú ý
của m ọi người. Do dễ d à ng thay đổi thông tin trên bảng điện tử, nên đâ y được
xem như là phương tiệ n để truyền đạt thô ng tin hiện đại, nhanh chóng.
Đê’ tạo thà nh các bảng hiệu có thông tin cố định người ta thường dùng
các loại LED đơn với nhiều màu sắc để tạo cá c ký tự và hình ảnh, dùng m ạch
điện tử điều khiển sự chớp tắ t và tạo hiệu ứng ánh sáng m ong m uốn. Đê’ phối
hợp ánh sáng m ộ t cách tốt nh ất thì bạn cũn g có nhiều cách . Có thể sử dụng
bo m ạch A rd u in o để ph ố i ánh sáng cho cá c bảng quảng cáo, tuy khô ng phải
là cách tố t và đơn giản nhất so với việ c dùng các bo m ạch chu yên dùng
nhưng m ột khi b iế t cách lập trình với bo m ạch A rduino bạn có thể lập trình cho
nhiều yêu cầu khác nữa m à các bo m ạch chu yên dùng điều khiển LED rất
khó hay khô ng thể điều khiển được.
111
CHƯƠNG 3: BIỂU KHIỂN VẢ TẠO HIỆU ỉ m v ẩ l ( I E I AIHIMI M B M K H I T| MC
Vói bo mạch Arduino, bạn có thể tự tạo cho mình những tấ n bãng
LED quảng cáo đơn giản cho riêng mình mà không cần phải có các ""lach
điều khiển phức tạp. Chí vói một sợi cáp USB bạn cỏ thể láp trinh vá sứa đồi
hiệu ứng chiếu sáng một cách dễ dàng.
112
ASCIIDM IA H i CIS NCtfdl Tự HỌC CHƯƠNG J: BIÉB K IẾ N VA TẠ8IIẾIIỬ N 6 wứl 6 LED
C h ún g ta sẽ b ắ t đầu với chương này bằng các m ạch điện đơn giản và
các cách điều khiển cơ bản. Bạn có thể dễ dàng điều khiển LED theo ý m inh
m à khô ng cần ph ả i kham khảo thêm bất kỳ sách nào. M ột khi đã điều khiển
thà nh th ạ o LED đơn bạn sẽ có cơ sở để thành lập các m ạch đèn khác như
LED 7 đoạn, LC D, LED m a trận cũng như các m ạch điện tử ứng dụng trong
công ng hiệp cũn g như dân dụng khác như:
3. Đ iều khiển đố i tượng hoạt động theo qu yết định của chú ng ta
C á c bài tập của chương này chỉ tập trung vào các ng õ\vào ra khá đơn
giản củ a bo m ạch A rduino. Những đâ y là các phần cứng cơ bản của bo m ạch
A rdu in o nên bạn phải sử dụng chú ng m ột cách nhuần nhuyễn trước khi lặp
trình với các yêu cầu điều khiển khó hơn.
113
cHƯƠN6 2: 6IÉ U KHIẾN VA T Ạ I B É I Ì N t v i l I L E t U H IM ! * ■ CH W H IT lH t
Phần cứng
Phần cứng bài tập này khá đơn giản, chúng ta chỉ sử di-^.g các LED
và các điện trở để hạn dòng bảo vệ LED. Các bạn có thể sử dung các đèn
LED siêu sáng để làm nổi bật các bảng quảng cáo dùng LED.
• Bạn có thể dùng 6 LED siêu sáng để việc chiếu sáng nổi b ã i hon.
BO M Ạ C H A R D U IN O LE D
C h â n số 0 LED 0
C hân số 1 LED 1
C h â n số 2 LED 2
C h ân số 3 LE D 3
C h â n số 4 LED 4
C h â n số 5 LED 5
114
A H O M I IAMCIO NGƯƠI Tự HỌC CHƯƠNG J: ĐIÉa HIỂU VA TẠO B tậu ƯM6 v đ l 6 l£Đ
Hình trang bên là ảnh kết nối m ạch trên chương trình Proteus (bạn hãy
tham khảo phần hưóng dẫn "Mô p h ỏ n g A rd u in o trê n P rote us")
115
CHƯƠNG 3: ĐIẾU KHIỂN VÁ TẠO D Ẽ O ỈN C vứ l c LED A U U M IIA M w w im w
N. LED
th ái
1 X X X
2 X X X
3 X X X
116
ARDUtNO BAND H O NGtftfl Tự HỌC CHƯƠNG ỉ : B IẾ II KB1ỂN VÁ T Ạ I BIÊU ƯH6 «016 LED
P h ầ n m ém
Chương trình cho bà i tập này được viế t có nhiệm vụ điều khiển 3 LED
chớp tắt xen kẽ nhau. Chương trinh sử dụng các lệnh đơn giản gồm các hàm
sử d ụ n g xu yê n su ố t cho toàn chương. Bạn hãy kham khảo chương trình này
th ậ t cẩ n thận vi các bài tập sau đều sử dụng các hàm cơ bản của bài này.
C hươ ng trìn h ch ớ p tắ t xen kẽ 3 LED
// Chương trình chớp tắt xen kẽ 3 LED
// Khai báo các chân kế t n ố i LED với bo m ạch Arduino
#define LEDO 0
#define LED1 1
#define LED 2 2
#define LED 3 3
#define LED 4 4
#define LED 5 5
// Biến trạng th á i LED
unsigned cha r S ta te L E D = 0 B 0 0 0 0 0 1 11;
// Chương trinh khở i tạo
void setupO
{
// Khởi tạo ngõ ra cho các chân n ố i LED
pinM ode(LE D O ,O UTPUT);
pin M o d e (L E D 1 ,O U TPU T);
p in M o d e (L E D 2 ,O UTPUT);
p in M o d e (L E D 3 ,O UTPUT);
pin M o d e (L E D 4 ,O U TPU T);
pin M o d e (L E D 5 ,O U TPU T);
}
// H àm rú t các b it riêng lẻ trong m ộ t biến
boolean B itS ta te (ch a r pos)
{
boolean xbit;
unsig ned cha r xchar;
if (pos<8) xchar=Ox1 & S ta te L E D » p o s ;
xbit= xcha r;
117
CHƯƠN6 2: BIẾU KHIẾH VA IA 8 H1É0 Ứ N t v i l I L E I U H I H ! * ■ C M m i l T Ị lệ t
return xbit;
}
// Hàm thay đổi LED theo biến trạng thái LED
void LEDChangeO
{
digitalWrite(LEDO,BitState(O));// LED 0 sẽ ứng vói bit 0 trong biến StateLED
digitalW rite(LED1,B itstate(1)); // LED 1 sẽ ứng với bit 0 trong biến SiateLED
digitalWrite(LED2,BitState(2));
digitalWrite(LED3,BitSlate(3));
digitalWrite(LED4,BitState(4));
digitalWrite(LED5,BitState(5));
}
// Chương trình chính
void loopO
{
// Dảo giá trị trạng thái LED
StateLED=~StateLED;
LEDChangeO; // Gọi hàm thay đổi LED
delay(500); // Dợi 0.5 giây
}
Hãy viết chương trình, biên dịch và tải xuống bo mạch Ardúno. Nếu
kết nối mạch đúng và mạch hoạt động chính xác thi bạn sẽ thấy 3 LED đáu
sáng và 3 LED cuối tắt. Sau 0.5 giây thi 3 LED đẩu tắt và 3 LED cuối sáng.
Sau 0.5 giây chương trình sẽ lập lại như ban đầu.
Tìm hiểu mã lệnh
Trong chương trình này, bạn sẽ sử dụng các hàm cơ bản của Arduino
Bắt đầu chương t r ì n h , bạn sẽ khai báo tên LED ứng với các sỏ chằn tuong
ứng trên bo mạch Arđuino.
#define LEDO 0
#define LED1 1
#define LED2 2
#define LED3 3
#define LED4 4
#define LED5 5
118
ABDUIWO 8A W CIO N6ƯỈI Tự UỌC CHƯƠNG ỉ: QIỂU KHIỂN VÀ TẠO HIỆU tfH6 V Ứ I6 L Ĩ1
T rong bài tập sử dụng 6 LED nên bạn khai báo các LED có số thứ tự
tử 0 đến 5. B ạn dùng từ khóa # d e fin e để gán giá trị các chân trên bo m ạch
A rd u in o và o các tên LED(LEDO, LED 1,..). Từ khóa #define có rất nhiều tác
dụng, ngoài v iệ c sử dụ ng gán m ột giá trị cho các tên riêng nào đó. Bạn còn
thể sử dụng nó để thay tên cho m ột kiểu ví dụ:
#define sothuc float
soth uc k e tq u a l ,ketqua2;
thay vì
float k e tq u a l ,ketqua2;
H oặc sử dụng nó như m ột macro:
#define tinh do ng die n (u,r) u/r
Bạn sẽ sử dụng bằng cách:
floa t d o ng die n= tinh do ngd ie n(12,100);
B ạn có thể sử dụng từ khóa #define cho chương trình vì nó rất tiệ n lợi.
Bạn có thể lưu các hằng số tính toán, các nốt nhạc, cá c macro... và m ột tên
riêng nào đó để bạn dễ dàng ghi nhớ hơn. Trở lại với chương trình, bạn khai
báo m ột biến S tateL E D để chứa các trạng thái các LED trong biến. Và khi
biến S tateL E D thay đổ i thì chú ng ta sẽ cho LED thay đổi theo các bit cùa
State LED . V à c h ú n g ta đã gán giá trị khởi đầu để 3 LED cuối sáng để khi bắt
đầu chương trình đảo giá trị thì 3 LED đẩu sẽ sáng đầu tiên:
unsig ned cha r S tate L E D = 0 B 0 0 0 0 0 1 11;
T iế p theo là chương trình khởi tạo của Arduino, trong chương trinh khởi
tạo bạn sẽ thiế t lập cá c châ n nối với LED là các chân ngõ ra:
void setupO
{
pinM ode(LE D O ,O UTPUT);
p in M o d e (L E D 1 ,OUTPUT);
p in M o d e (L E D 2 ,OUTPUT);
p in M o d e (L E D 3 ,O UTPUT);
p in M o d e (L E D 4 ,O UTPUT);
p in M o d e (L E D 5 ,O UTPUT);
}
H àm tiế p theo là hàm rút cá c bít từ biến trạng thái StateLE D , bạn có
thể điều chỉnh hàm này để rút các bit từ cá c biến khác hoặc cho m ục đích
riêng củ a bạn:
b oolean B its ta te (c h a r pos)
{
119
CHƯƠHS 3: eiẼ U KHIẾN VÁ T Ạ I n t l I m v t l t L E I UNIM ! * ■ CM ■ » « ! T Ị Hĩ
Đầu tiên, bạn khai báo các biến sử dụng trong hàm. biến xbit sẽ có
nhiệm vụ chứa bit được rút theo vị trí tại biến pos và chúng ta sẽ trả giá trị xbit
cho hàm Bitstate. Còn biến xchar sẽ chứa kết quả tính toán kiểu unsigned char-
boolean xbit;
unsigned char xchar;
Vi hàm này có mục đích là rút các bit của một byte nên giá trị pos phải
là một số từ 0 đến 7 tương ứng từ bit 0 đến bit 7 trong biến StateLED Nếu pos
nhỏ hơn 8 thi chúng ta sẽ thực hiện phép toán dịch bit sang phải biến
StateLED với số bit dịch là giá trị pos, sau đó thực hiện toán tử AND với két
quả từ phép tính trên. Cuối cùng chúng ta sẽ có giá trị bit muốn rút nằm ỏ bit
cuối cùng của biến xchar:
if (pos<8) xchar=0x1 & StateLED>>pos;
Phép toán dịch bit trong bài này chúng ta sử dụng toán tử đây lá
toán tử dịch phải và tiếp theo là giá trị sô' bit bạn muốn dịch. Ngoài ra. còn có
toán tử dịch trái. Hai toán lử này như tên gọi của chúng, sẽ giúp ban dịch các
bit theo hướng bạn mong muốn.
Vi dụ, bạn có biến A = 0B00011011, khi bạn thực hiện các pnép toán
sau đây: B = A « 1 ; C = A » 3 ; thi bạn sẽ có giá trị các biến B=0B0Ũ110110, biến
C=0B00000011. Và toán tử logic AND kí hiệu toán tử này giúp ban thực
hiện phép tính logic AND trẽn toàn biến.
Toán tử AND trên bit của 2 giá trị A và B sẽ có bảng sự thát nnư sau:
A B A AN D B
0 0 0
0 1 0
1 0 0
1 1 1
Nếu bạn thực hiện phép tính AND với toán tử trong ngón ngữ
Arduino bạn sẽ thực hiện các phép tính AND trẽn từng bit của biến ban thực
hiện phép toán. Ví dụ bạn có biến A=0B01101001 và phép tính trong ngón
ngữ Arduino là B=A&0B11001011 thi Arduino sẽ thực hiện như sau:
01101001
AND 11001011
= 01 00 1 0 0 1
Và B sẽ có giá trị là 0B01001001.
120
ARDUINO DANH cao N C tfll ĩự HỌC CHƯƠNG 3: ĐIẾU KHIỂN VẢ TẠO HIỆU ƯM6 vứl 6 LED
Sau khi tính toán xong ch ú n g ta gán giá trị xbit là giá trị vừa tính được.
Sở đĩ c h ú n g ta thực hiện gán giá trị xcha r cho biến xbit bởi vì chú ng ta m uốn
lấy bit cu ố i cù n g củ a giá trị xcha r và trả giá trị lại cho hàm:
xbit= xchar;
return xbit;
}
T iế p theo sẽ là hàm thay đổi giá trị cho LED theo các bit chứa trong
biến S tateLE D :
void LED C hangeO
{
d ig ita lW rite (L E D 0 ,B itS ta te (0 ));// LED 0 sẽ ứng với bit 0 trong
biến StateLED
digitalW rite(LE D 1 ,B itS ta te(1)); // LED 1 sẽ ứng với bit 0 trong
biến S tateLE D
d igita lW rite (LE D 2,B itS ta te(2));
d igita lW rite (LE D 3,B itS ta te(3));
dig ita lW rite (L E D 4 ,B itS ta te (4 ));
dig ita lW rite (L E D 5 ,B itS ta te (5 ));
}
C u ối cùn g ch ú n g ta sẽ thực hiện chương trình chinh để LED hoạt động
theo ý m uốn củ a mình. Chương trinh bắt đầu bằng cách cho đảo biến
S tateLED :
void loopQ
{
S tateL E D = ~ S tateL E D ;
T oán tử sẽ giúp bạn đảo các giá trị bit củ a m ộ t biế n nào đó. Ví dụ
bạn có biế n A = 1 011 thi khi bạn thực hiện phép toán B =~A bạn sẽ có giá trị
B=0100. C h ún g ta thực hiện biến đảo trong bài tập này để thực hiện đảo các
trạng thái 3 LED đầu và cuối.
1?1
CHƯONG 3: BIẾU KHIỂN VÀ TẠI D Ệ I iK C V iliL E I AUI1MMM a» «**' Tf lệt
Phần cứng
Phần cứng cho bài tập này khá đơn giản, chúng ta chỉ SỪ dụng các
đèn LED và các điện trở để hạn dòng bảo vệ LED. Các bạn có thể sử dụng
các đèn LED siêu sáng để làm nổi bật các bảng quàng cáo của bạn.
BO M Ạ C H A R D U IN O LE D
C h ân số 0 LED 0
C h â n số 1 LED 1
C h â n số 2 LED 2
C h ân số 3 LED 3
C h â n số 4 LED 4
C h ân sổ 5 L^D 5
122
ARDUIWO DAW) CKO NEƯ0I ĩự HOC CHƯƠNG 3: ĐIẾU KHIỂN VÀ ĨẠO HIỆU ỨMC llđ l 6 LED
Hình dưới là kết nối mạch trẽn Proteus (bạn hãy xe^i p^án nuong dán
"Mô phỏng A rdu in o trẽ n P ro te u s”).
Ịậ ;
LEt-REb
•' 04 ■ ểL
LED P.EO
03 02 ỉ õ ĩ
LED R E J ^ F L E Ọ - R E ^ ^ L E D - P .E ^ »
ềầ _Eú-F.Et'
ị L . ' ĩ t . ó Ị ........ - . • r s x í ' < r s / . ĩ ; ịĩịx ỉ* í 7£
1 Rũ: R5 R4 1 R3 ỊR2 RI
220 220 220 220 220 220
Ự KT(r;<ĩ> r ;<Ĩ£XT*.....; <rnxr> |J-:TnXT' X <Hi.Hĩ* ụ
iiìtH ti"
DUIW01
A3C-W.0 UNO«3
ANALOGw
Phần mềm
Chương trinh cho bài tập này được viết như trang bên
Chương trình có nhiệm vụ điều khiển LED sáng xen kẽ vá à rrang thái
tiếp theo thi các LED trước đã sáng sẽ tắt, các LED còn lại sẽ sána . a lãp lai
liên tục. Do hiện tượng lưu ảnh cùa mắt nên chúng ta thấy hiéu ứno ỉ ắ r g xen
kẽ đuổi nhau thường thấy trong các bàng quảng cáo.
124
A H P IIIM BAWW CHO H6ƯƠI T ỊlỌ C _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ CHƯđNt i: 8IỀ8 MIẾH VÀ ÌẠO Mlậg tM t v ứ l i IE I
#define LEDO 0
#define LED1 1
#define LED 2 2
#define LED 3 3
#define LED 4 4
#define LED 5 5
125
CHƯƠNG a: ĐIẾU KHIỂN VÀ TẠO BIÉn CfW6 V Õ m E I M H IM i m C W K W IT lH t
pinMode(LED4,OUTPUT);
pinMode(LED5, OUTPUT);
{
boolean xbit;
unsigned char xchar=-1;
if (pos<8) xchar=0x1 & StateLED>>pos;
xbit=xchar;
return xbit;
}
void LEDChangeO
{
digitalWrite(LED0,BitState(0));
digitalWrite(LED1 ,BitState(1));
digitalWrite(LED2,BitState(2));
digitalWrite(LED3,BitState(3));
digitalWrite(LED4,BitState(4));
digitaiw rite(LE D 5,BitState (5));
}
void loopO
{
StateLED=~StateLED;
126
AB0U1N0 HAM c a o NGtftfl T ự 19c CHƯƠNG a: ĐIẼ D K H IỂ N V À T Ạ I I t p i w v l u m
H ã y viế t chương trình, biên dịch và tải xuống bo m ạch A rduino. Nếu
bạn kết nối m ạch đúng và lập trinh chính xác thi bạn sẽ thấy các LED lẻ sáng
trước. Sau đó là các LED chẵn sán g trong vòng 0.5 giây. Nếu các LED ghép
thành m ộ t vò n g khép kín, do hiện tượng lưu ảnh của m ắt bạn bạn thấ y các
LED xen kẽ đang sáng đu ổi nhau thành m ột vòng.
T ìm h iể u m ã lệ n h
Trong chương trình bài tập này chú ng ta sẽ sử dụng các hàm củ a bài
tập trước. Do các hàm này sử dụng xuyên suốt trong chương nên bạn cần đọc
cẩn thận và hiểu rõ các hàm này trước khi bắt đầu các bài tập khác.
B ắt đẩu chương trình, bạn sẽ khai báo tên LED ứng với các số chân
tương ứng trên bo m ạch Arduino.
#define LEDO 0
#define LED1 1
#define LED 2 2
#define LE D 3 3
#define LED 4 4
#define LED 5 5
B ạn khai báo m ộ t biến StateLED để chứa các trạng thái các LED
trong biến. B ài tập này khác bài tập trước ở giá trị khởi đầu cho LED sáng.
Bạn có thể thấ y ch ú n g ta đã khai báo các LED xen kẽ. Do chì sử dụng 6 LED
nên bạn ch ỉ dùng 6 bit cu ố i cu ố i của biến S tateLED :
unsig ned ch a r S ta te L E D = 0 B 0 0 0 1 0101;
T iếp theo là chương trình khỏi tạo củ a A rduino, trong chương trinh khỏi
tạo bạn sẽ th iế t lập các chân nối với LED là các chân ngõ ra:
void setupO
{
pinM ode(LE D O ,O UTPUT);
p in M o d e (L E D 1 ,O UTPUT);
p in M o d e (L E D 2 ,O UTPUT);
p in M o d e (L E D 3 ,O UTPUT);
p in M o d e (L E D 4 ,O UTPUT);
p in M o d e (L E D 5 ,O UTPUT);
}
H àm tiếp theo là hàm rút các bit từ biến trạng thái S tateLED :
127
C H Ư đm 3 : e iẼ U KHIẾN VÀ T Ạ I H É I I m w đ l I LED UHIM !*■ CMWWI TỊ IK
void loopO
{
StateLED=-StateLED;
Tiếp đến, chúng ta gọi hàm LEDChange để yêu cầu các đèn LED
sáng theo các bit của biến StateLED và gọi hàm delay để chương trn n đoi 0.5
giây trước khi thực hiện đổi trạng thái tiếp theo:
128
ARDOINO IA W CIO NCIftfl Tự HQC CHƯƠNG 3: ĐIẾU KHIỂN VÃ TẠO HIỆU ƯNG VÓI 6 I f í
C h â n số 0 LED 0
C hân số 1 LED 1
C hân số 2 LED 2
C h â n số 3 LED 3
C h â n số 4 LE D 4
C h â n số 5 LED 5
129
CHƯƯME 3: ĐIEU KHIẾU n TẠO HIỆU ƯH6 v đ l 6 IED U M iM H U c t i w m iT fH t
130
AHDUWO BANS CM MEtftfl ĩự HỌC CHƯƠNG 3: ĐIỄU HIỂN VÃ TẠO HIỆU ỪN6 v đ l 6 LED
Hình dưới là ảnh kết nối m ạch trên Proteus (bạn hãy xem phần hướng
dẫn “ M ô p h ỏ n g A r d u in o tr ê n P ro te u s ” ).
P hầ n m ềm
Chương trình cho bài tập này được viế t trình bày ở trang bên.
Chương trình có nhiệm vụ gán giá trị sáng ban đầu cho LED cuối cùng
bên ph ả i và sau đó dịch về bên trái.
M ỗ i lần dịch, chương trình kiểm tra xem giá trị đã tràn ra khỏi LED hiển
thị hay không. Nếu bị tràn, chúng ta sẽ gán giá trị ban đầu lại và chương trinh
sẽ thực hiện lại từ đầu.
131
CHƯƠH6 3: BIỂU H IẾ U VÀ TẠP B Ệ » ( H í v g l I l f l u n iu IAM CM H I Tf lệt
II Khai báo các chân kết nối LED vói bo mạch Arduino
#define LEDO 0
#define LED1 1
#define LED2 2
#define LED3 3
#define LED4 4
#define LED5 5
132
ARDOINO DANH CHO N6Ư0I Tự BQC CHƯƠNG 3: ĐIẾU KHIỂN V * ÌẠO BIỆa VỚI i IĨD
(
boolean xbit;
unsigned ch a r x c h a r= -1 ;
if (pos<8) xchar=0x1 & S ta te L E D » p o s ;
xbit=xchar;
return xbit;
{
digitalW rỉte(LED O , BitState(O));
d ig ita iw rite(LED 1 ,B itS ta te (1 ));
dig ita lW rite (L E D 2 ,B itS ta te (2 ));
dig ita lW rite (L E D 3 ,B itS ta te (3 ));
d ig ila lW rite (L E D 4 ,B itS ta te (4 ));
dig ita lW rite (L E D 5 ,B itS ta te (5 ));
void loopO
{
delay(500);
Phần iập trinh cho bài tập này sẽ có một số điểm khác vói các bài tập
trước. Với những phần khác chúng tôi sẽ chỉ ra và bạn có thể tim hiểu rồ hơn
những phần khác này. Các phần còn lại tương đối giống với các bài tãp trước.
Bắt đầu chương trình, bạn sẽ khai báo tên LED ứng với các Sũ chân
tương ứng trên bo mạch Arduino.
#define LEDO 0
#define LED1 1
#define LED2 2
#define LED3 3
#define LED4 4
#define LED5 5
Bạn khai báo một biến StateLED để chứa các trạng thái các LED
trong biến.
Bài tập này khác bài tâp trước ở giá trị khởi đầu cho LED sáng. Đảy lá
điểm khác đầu tiên của bài tập này, chúng ta sẽ khởi tạo giá trị biến
StateLED để LED ngoài cùng bên phải sáng trước:
Trong chương trinh khởi tạo bạn sẽ thiết lập các chân nối -,t LED là
các chân ngò ra.
134
ARDUINŨ DANH CHO NGƯƠI Tự HỌC CHƯƠNG 3 : D IÊU K H IỂ N V A TẠ O HIỆ U ƯN6 «01 6 LED
{
// K hở i tạo ngõ ra cho các chân n ố i LED
pinM ode(LE D O ,O UTPUT);
p in M o d e (L E D 1 .OUTPUT);
pin M o d e (L E D 2 ,OUTPUT);
pin M o d e (L E D 3 ,O UTPUT);
pin M o d e (L E D 4 ,O UTPUT);
p in M o d e (L E D 5 ,O UTPUT);
}
Hàm tiếp theo là hàm rú t các bit từ biến trạng thái StateLED:
bo olean B itS tate(ch ar pos)
{
boolean xbit;
unsigned cha r xch a r= -1 ;
if (pos<8) xchar=Ox1 & S tateLE D >>pos;
xbit= xcha r;
return xbit;
}
T iế p theo sẽ là hàm thay đổi giá trị cho LED theo các bit chứa trong
biến StateLE D :
void LED C hangeO
{
d igita lW rite (LE D O ,B itS tate(ũ ));// LED 0 sẽ ứng với bit 0 trong biến
StateLED
d ig ita iw rite (L E D 1 .B itS ta te(1)); // LED 1 sẽ ứng với b-ỉ 0 trcr.a
biến StateLED
d igita lW rite (L E D 2 ,B itS ta te (2 ));
CHƯƠHS i : BIẼn IH IẾ N « * T Ạ I f l ( w van 11 £ | U H IM ! * ■ C H * W l ĩllệ t
digitalWrite(LED3,BitState(3));
digitalWrite(LED4,BitState(4));
digitalWrite(LED5,BitState(5));
}
Cuối cùng, chúng ta sẽ thực hiện chương trình chinh để LED hoạt
động theo ý muốn cùa minh. Đây là điểm khác thứ ba, chưong trinh bắt đáu
bằng hàm đợi 0.5 giây:
void loopO
{
delay(500);
Chúng ta cho chương trình chính đợi 0.5 giây để sáng LED ngoài cùng
bèn phải sáng 0.5 giây trước khi thực hiện dịch LED, điểm này khác so vói
các chương trinh bài tập trước. Nếu chúng ta thực hiện dịch LED trước và cho
đợi sau như các chương trình trước thì LED sáng đầu tiên không phải là LED
ngoài cùng bên phải. Vì bắt đầu chương trình chúng ta gán giá trị sáng LED
ngoài cùng bên phải. Khi vào chương trình chính chúng ta dịch 1 LED thì LED
sáng sẽ là LED kề vỏi LED ngoài cùng bên phải. Chúng ta sẽ không mong
muốn điều này xảy ra nên chúng ta thực hiện chương trinh chính ngược với
các chương trinh khác.
Tiếp theo, bạn thực hiện di chuyển LED sáng sang bên trái:
Đê’ thực hiện di chuyển LED, bạn thực hiện toán tử dịch bit cho biến
StateLED. Vì chúng ta muốn LED di chuyển sang LED kề bên nên bạn sẽ
dịch một bit cho biến StateLED. Nếu muốn dịch LED đi xa hơn bạn có thể thay
đổi số bit muốn dịch theo ý muốn của mình. Sau mỗi lần dịch LED chúng ta
sẽ kiểm tra LED có bị tràn hay không, nếu tràn thì chúng ta sẽ gán giá trị ban
đầu cho biến StateLED để thực hiện chương trinh lại từ đầu:
LEDChangeQ;
}
Vì chúng ta sử dụng 6 LED và 6 LED sẽ ứng vói 6 bit :ử 0 dến 5 khi
dịch đến bit thứ 6 thì giá trị này đã tràn so voi sổ LED ban sứ dung
(0B01000000) và bạn sẽ gán lại giá trị ban đầu cho biến để trán- :'U 3 ng hop
bị trán giá trị hiển thị trẽn LED.
136
MDOMO IÀH cao NGƯƠI Tự BỌC CHƯđNG ỉ : ĐIẼO H IỂN VÁ TẠ I H Ệ IỬ H t v ẩ n I E I
Chân số 0 LED 0
Chân số 1 LED 1
Chân số 2 LED 2
Chân số 3 LED 3
C hân số 4 LED 4
C hàn số 5 LED 5
1J7
CHƯƠM6 3: 8IỀ U kH lẾ N VA T Ạ I I U Ẽ I I IIKC VƠI I LED A ID U IM IẰ J U U I W lir f lf t
138
ABDUINO PAW CHO NBƯđl Tự HỌC CHƯƠNG 3: BIẾU KHIỂN VÀ TẠ8 BIẼn ƯW6 y g l B LED
Hình dưới là ảnh kết nối m ạch trên Proteus (bạn hãy xem phần hướng
dẫn "M ô p h ỏ n g A r d u in o tr ê n P r o te u s ”).
ị ậ i : t ị ^ : : ũ £ ị : t j ^ : D Ị í : i M : ũ Ệ : ĩ : ^ M ị z M Dữ: : : :
Rỉ E D ^ ^ LED
LED B LEÍ) ReH ^ LEC> REO^F LE6'RED
a i s a ỵ ... : íĩlĩxr ĩ.ị/ X . K ..... ụ ị:Xĩ>.............................ị:XT*.-.............. ...<Tị:xr*.
R Q ị. L R5 ị m R4 n R3J M R2 TỊ R í
220 ị-' 220 I 220 ; 220 220 220
ị LJ U <•?£>;;(> M >:Vu/.V> M •?: v.ii:
«• OKiiĩAL (~PWM)
II i a t « « « « RSI I I
P hầ n m ềm
Chương trình có nhiệm vụ gán giá trị sáng ban đầu cho LED cuối cùng
bên trái và sau đó dịch về bên phải. M ỗi lần dịch, chương trình kiểm tra xem
giá trị đã tràn ra khỏi LED hiển thị hay không.
N ếu bị tràn, chú ng ta sẽ gán giá trị ban đầu lại và chương trinh sẽ thực
hiện lại từ đầu.
139
CHƯ đm i: BIÉB KB1ỀH VÀTẠI fwc vẩl I l ĩ l u m !*■ CMKMiTjfc
// Khai báo các chân kết nổi LED với bo mạch Arduino
#define LEDO 0
#define LED1 1
#define LED2 2
#define LED3 3
#define LED4 4
#define LED5 5
140
ABDUINO BAW« CHO Meưữl ĩự B ỊC CHƯƠNG 3: BIẾa KHIỂN VÁ ĨẠO mậu ƯW6 VƠI 8 IED
void setupO
p in M o d e (L E D 1 ,O UTPUT);
p in M o d e (L E D 2 ,O UTPUT);
p in M o d e (L E D 3 ,O UTPUT);
p in M o d e (L E D 4 ,O UTPUT);
p in M o d e (L E D 5 ,O UTPUT);
LED C hangeO ;
boolean xbit;
unsigned cha r x c h a r= -1 ;
xbit=xchar;
return xbit;
void LE D C hangeO
141
CHƯƯH6 3: BIẼƯ KHIẾH VA TẠI MỆB f w »01 t IE I U N M IU iC M K M I T f l*
digitalWrite(LED2,BitState(2));
digitalWrite(LED3,BitState(3));
digitalWrite(LED4,BitState(4));
digitalWrite(LED5,BitState(5));
void loopO
delay(500);
LEDChangeQ;
Bạn hãy viết chương trinh, biên dịch và tải xuống bo mạch Arduino.
Nếu kết nối mạch đúng và mạch hoạt động chínhxác thi bạn sẽ thấy
một LED ngoài cùng bên tráisáng và sau đó sẽ di chuyển về bên pnải. Sau
khi LED cuối cùng bên phải sáng thì trạng thái tiếp theo chương trĩnh sẽ cho
LED ngoài cùng bẽn trái sáng lại từ đầu.
Bắt đầu chương trinh, bạn sẽ khai báo tên LED ứng với các sổ chán
tưdng ứng trên bo mạch Arduino.
#define LEDO 0
#define LED1 1
#define LED2 2
#define LED3 3
14Z
ABDUINO DÀNH CHO NGƯƠI ĩự HỌC CHƯƠNG ĩ: ĐIỂU KHIỂN VÃ TẠO HIỆII ỨNG vứl 6 LED
#define LED 4 4
#define LED 5 5
Bạn khai báo m ột biến S tateLE D để chứa các trạng thái các LED
trong biến.
Bài tập này khác bài tập trước ỏ giá trị khởi đầu cho LED sáng. C h ún g
ta sẽ khởi tạ o giá trị cho S tateLE D để LED ngoài cùng bên trái sáng trước:
T rong chương trình khởi tạo, th iế t lập các chân nối với LED là các
chân ngõ ra. B ạn sẽ th iế t lập cho LED ngoài cùng bẽn trái sáng khi bắt đầu
chương trình:
void setupO
p in M o d e (L E D 1 ,OUTPUT);
p in M o d e (L E D 2 ,O UTPUT);
p in M o d e (L E D 3 ,O UTPUT);
p in M o d e (L E D 4 ,O UTPUT);
}
Hàm tiếp theo là hàm rút các bít từ biế n trạng thái S tateLED :
{
boolean xbit;
unsigned char x c h a r= -1 ;
143
CHƯƯN6 3: 8IỂI H Ế U VÀ TẠI < 1 I m v il I L t l UHIMIẮM cm KHI TỊ IU
xbit=xchar;
return xbit;
}
Tiếp theo sẽ là hàm thay đổi giá trị cho LED theo các bit chúa trong
biến StateLED:
void LEDChangeO
(
digitalW rite(LED0,BitState(0));// LED 0 sẽ ứng với bit 0 trong biến
StateLED
digitalWrite(LED2,BitState(2));
digitalWrite(LED3,BitState(3));
digitalWrite(LED4,BitState(4));
digitalWrite(LED5,BitState(5));
Cuối cùng chúng ta sẽ thực hiện chương trinh chính để LED noạt động
theo ý muốn của minh. Điểm khác của hiệu ứng này so với hiệu ứng dịch trái
là phần dịch LED và phần kiểm tra tràn cho LED.
void loopO
delay(500);
LEDChangeO;
144
ARDUINO CAM CUD NGtfdl Ttf HỌC CHƯ0NE 3: ĐIỂU KHIỂNII* TẠO HIỆU ƠN6 y g l BIED
BÀI TẬP 5: KẾT Htfp HIỆU ỬNG SÁNG OUŨI BÊN TRÁI VÀ SÁN8 ĐUGI
BÉN PHẢI
Bài tập này ch ú n g ta sẽ kết hợp hai hiệu ứng dịch trá i và dịch phải
thành m ột chương trình tổn g hợp. Khi m ột LED dịch đến ngoài cùn g củ a đoạn
LED thì nó sẽ di ch u yể n ngược lại. V iệ c này sẽ diễn lặp đi lặp lại, và hiệu ứng
dịch trái và dịch phải cũ n g luân ph iê n thay đổi với nhau.
Khi chú ng ta kế t hợp hai hiệu ứng dịch LED kết hợp với nhau, khi
nhìn vào sẽ có cảm g iác như m ộ t trái banh bay lên chạm trần và bật xuống
đất và khi chạm đất lại b ậ t lên trần. Bạn hãy giảm thời gian đợi để tăng tốc độ
dịch LED.
P h ầ n cứ n g
Phần cứng bài tập này khá đơn giản chú ng ta chỉ sử dụng cá c LED và
các điện trở để hạn dòng bảo vệ LED. Các bạn có thể sử dụng các đèn LED
siêu sáng để làm nổi bật bả ng quảng cáo.
• LED cá c m àu, bạn dùng 6 LED siêu sáng.
K ết n ố i p h ầ n cứ n g
145
CHƯ đlie t: B IẼ n KHIẾH VÁ T Ạ I H Ệ y t w v ứ l ( LE« U N IM I M c « K W IT IW C
BO M Ạ C H A R D U IN O LE D
C hân số 0 LED 0
C h â n số 1 LED 1
C h â n số 2 LED 2
C h â n số 3 LED 3
C h â n số 4 LED 4
C h â n số 5 LED 5
Hình dưới là kết nối mạch trén Proteus (bạn hãy xem phẩn hướng dẫn
“Mô phỏng A rdu in o trê n Proteus”).
ỉ fflSPSS
& ểế
ị 7 . k ú - K i * . ị : W $ Ị > : J .....
A
D3
* P2 A : d t:
I—
u e d -re B B F ie o - r e J ^ F
□o:
L E tr
R6
lũ ' n R6 : n te r M R 3; I R2 R1
30
220 Ị ị 220 ; 220 220 : 220 : 22Ữ
rê ị1* V •*f > V . V *.f£ẶÍ> 1 < "Ẹ Ạ Ĩ> XTE/.T*
DƯN01
AP.*n>mO
;
‘ 2 Ĩ
> DIGITAL (-PWM)
T r f
ANALOG 1«
-L L J -T
148
*IDUMO IẤNI cm H6ƯƠI ĩự HỌC CHƯƠNG 3 : Đ IẾU K H IỂ N V A T Ạ P H IỆ U ƯW6 V O I 6 LED
m t T A L t P w i V ’* £ «;
147
CHƯƯNE 8 : ĐIỂƯ KHIẾN VÀ T Ạ I P Ê n IN C VỜI 6 LED
Chương trinh cho bài tập này được viết bên dưới. Chưong trình có
nhiệm vụ thực hiện hiệu ứng dịch trái sau đó thực hiện dịch phải khi dịch trái
đã tràn. Chương trình sẽ luân phiên dịch các LED qua lại.
Chưcỉng trình kết hợp hai hiệu ứng đuổi trái và đuổi phải
// Kết hợp hai hiệu ứng đuổi sang trái và đuổi sang phải
II Khai báo các chân kết nối LED với bo mạch Arduino
#define LEDO 0
#define LED1 1
#define LED2 2
#define LED3 3
#define LED4 4
#define LED5 5
148
ABDUIHO 8AW MO m ười Tự BỘC CHƯƠNG ỉ : ĐIẾU IBIỂN VA TẠO BIÊU ỬNE VI?! t LED
// Biến thay d ổ i giữa ha i hiệu ứng, đầu tiên chúng ta sẽ dịch trái
boolean C h an geE ffect= fa lse;
// Chương trình khởi tạo
void setupO
{
pinM ode(LED O .O U TPU T);
pinM o de(L E D 1 , O UTPUT);
p in M o d e (L E D 2 ,O UTPUT);
p in M o d e (L E D 3 ,O UTPUT);
pin M o d e (L E D 4 ,O UTPUT);
pin M o d e (L E D 5 ,O UTPUT);
// Sáng LED bên p h ả i dầu chương trình
LED ChangeO ;
}
// Hàm rú t các bit riêng lẻ trong m ột biến
boolean B itS ta te (ch a r pos)
{
boolean xbit;
unsigned cha r x c h a r= -1 ;
if (pos<8) xchar=Ox1 & S tateLE D > >pos;
xbit=xchar;
return xbit;
}
// Hàm thay đổ i LED theo biến trạng thái LED
void LED C hangeO
{
dìgitalW rite(LEDO , BitState(O));
digitalW rite(LE D 1 ,B itS ta te (1 ));
dig ita lW rite (L E D 2 ,B itS ta te (2 ));
d ig ita iw rite(LE D 3, B itState (3));
d ig ita lW rite (L E D 4 ,B itS ta te (4 ))'
dig ita lW rite (L E D 5 ,B itS ta te (5 ));
}
145
CHƯƠMG 3: ĐIẾU KHIỂN VA TẠO HIỆU ƯNE VƠI 6 LED UNIM l i l Cll nadir* *
(
StateLED=StateLED<<1;
II Kiểm tra đã hết hiệu ứng dịch trái thi chuyển thành dịch phải
if (StateLED==OB001 OŨOOO) ChangeEffect=!ChangeEffect;
}
// Sau đó dịch phải
else
{
StateLED=StateLED>>1;
// Kiểm tra đâ hết hiệu ứng dịch phải thi chuyển thành dịch trái
if (StatelED==0B00000001) ChangeEffect=!ChangeEffect;
}
LEDChangeQ;
}
Hãy viết chương trinh, biên dịch và tải xuống bo mạch Arduino. Nếu
bạn kết nối đúng và mạch hoạt động chính xác thi bạn sẽ thấy m ôt LED ngoài
cùng bên trái sáng và sau đó sẽ di chuyển về bên phải. Sau khi LED cuối
cùng bên phải sáng thi trạng thái tiếp theo chường trinh sẽ cho LED ngoái
cùng bên trái sáng lại tử đầu.
Tìm hiểu mã lệnh
Bắt đầu chương trình, bạn sẽ khai báo tên LED ứng vói các số chán
tưong ứng trên bo mạch Arduino.
#define LEDO 0
#define LED1 1
#define LED2 2
#define LED3 3
#define LED4 4
#deíine LED5 5
ABDPWQ DAW M B H6ƯỪI Tự BỌC CHƯƠNG 3: BIỂII KHIỂN VÀ ĨẠ B HIÊDƯN6 v đ l 6 LED
(
II K hở i tạo ngõ ra cho các chân nố i LED
pinM ode(LE D O ,O UTPUT);
pin M o d e (L E D 1 ,OUTPUT);
p in M o d e (L E D 2 ,O UTPUT);
p in M o d e (L E D 3 ,OUTPUT);
p in M o d e (L E D 4 ,OUTPUT);
p in M o d e (L E D 5 ,OUTPUT);
// S áng LED bên p h ả i đầu chương trình
LED C hangeQ ;
}
H àm tiếp theo là hàm rú t các bit từ biến trạng thái S tateLED :
boolean B itS ta te (ch a r pos)
{
bo olean xbit;
unsigned char xch a r= -1 ;
if (pos<8) xchar=0x1 & S tateLE D > >pos;
xbit= xchar;
return xbit;
}
T iếp theo sẽ là hàm thay đổi giá trị cho LED theo các bit chứa trong
biến StateLE D :
void LED C hangeO
{
151
CHƯƠM6 3: CIỂU KHIẾN VA T A I B E a Ỉ N ( v ỉ l E L E I U H 1M I f C H »a>«i T i n
152
ỈAI80IH0 DAW CIONGƯƠI TVngc CHƯƠNG 4: BIỂU KHIỂN VÀ TẠO HIỆU ỨW6 tớ l w LED
CHƯƠNG 4
T rong cá c bài tập trưóc, các bạn đã làm quen v iệ c lập trình với
A rduino tạo cá c hiệu ứng đơn giản tới LED với số lượng không lớn (6 LED ).
Trong các bài tập sau, chú ng ta sẽ tạo các hiệu ứng phức tạp hơn các bài tập
trước cũng như tăng số lượng LED lên và tạo nhiều hiệu ứng (ở đ â y ta dùng
12 LED sử dụ ng hết châ n (Pin) ngõ ra của bo m ạch A rdu in o UNO) và thực
hiện hiệu ứng với sự kết hợp của nhiều biến.
Bạn lập trình tạo hiệu ứng như sau: Cho hai đèn LED ngoài cù n g sáng
sau đó là 2 LED ng oà i cùn g kế tiế p sáng để tạo hiệu ứng sáng đần vào
bên trong. C húng ta sẽ thực hiện dịch m ột lần hai LED theo hai hướng khác
nhau. Khi các đèn LED gặp nhau tại trung tâm thì chú ng sẽ trở về trạng thái
ban đầu. B ài tập này vẫn giữ nguyên các hàm mà chú ng ta đã thực hiện trong
bài trưđc nhưng sẽ có m ột số thay đổ i để mở rộng số LED , ch ú n g tôi sẽ
hướng dẫn các bạn rút ngắn m ã lệnh tuy số lượng LED sử dụ ng nhiều hơn. ở
đây chúng ta sử d ụ ng các chân I/O có sẵn củ a bo m ạch A rduino.
BÀI TẬP 1: H IỆU ỬNG SÁNG DẦN 12 LED VÀO TRUNG TÂM
Phần cứ ng
Bài tập này chú ng ta tiếp tụ c sử dụng cá c LED và các điện trở để hạn
dòng bảo vệ LED . C á c bạn có thể sử dụng cá c đèn LED siêu sáng để làm nổi
bật các bảng quản g cá o của bạn.
153
CHƯ0N6 4: BIẾU KHtẾN VA T Ạ I l ặ l i w llẩ l 12 l i l U H IM i m a i K H i n m
icspg
GX+)(UNỞ)
Hinh kết nối mạch điện trên test board
Hình dưới là kết nối mạch trẽn Proteus.
1S4
U i a i M M M CHO MGIfifl Tự I f c CHƯƠHS 4: ĐIẾO KBDỂN V * Ĩ Ạ Q I Í B i « V Ỉ1 12 l £ l
BO M ẠC H A R D U IN O LED
C h ân số 0 LED 0
C hân số 1 LED 1
C h ân số 2 LED 2
C h ân số 3 LED 3
C hân số 4 LED 4
C hân số 5 LED 5
C h ân số 6 LED 6
C hán số 7 LED 7
C h ân số 8 LED 8
C h â n số 9 LED 9
C hân số 10 LED 10
C hân số 11 LED 11
«5
C H IM E 4: ĐIẼ P « H Ế H VÁ T Ạ I I t l ( K » l l t t L E I U M I M IJ U i C M J t f llT f J K
Phần mềm
Chương trinh cho bài tập này được trình bày bên dưói- Cnuong trinh
điều khiển hai LED ngoài cùng sáng, sau từng trạng thái sẽ thực niên dịch các
LED theo các hướng ngược nhau. Và khi hai LED hai bẽn đã d Ị C h cnuyển đ ế n
trung tâm thì cho các LED trà lại trạng thái ban đầu là hai LED Mgoài cùng
sáng và tiếp tục thực hiện chương trinh một lần nữa. Chưdng trim sẽ chạy lẳp
lại tiến trinh trẽn đến khi bạn ngắt nguồn vào bo mạch Arduino.
Chương trìn h tạo hiệu ứng LED sáng dần vào tru n g tảm
// Hiệu ứng LED sáng dần vào trung tàm
II Biến trạng thái LED
unsigned int StateLED=OBOOOOOOOOOOOOOOOO;
// Các biến tạm giúp tạo hiệu ứng
unsigned char Cal1=0B1 ,Cal2=0B00100000;
// Chương trinh khởi tạo
void setupO
{
// Khởi tạo ngõ ra cho các chân nối LED
for(int i=0;i<12;i++)
{
pinMode(i,OUTPUT);
}
// Sáng hai LED ngoài cùng
StateLED =C al1IC al2«6;
LEDChangeQ;
)
// Hàm rút các bit riêng lẻ trong một biến
boolean Bitstate(char pos)
{
boolean xbit;
unsigned char xchar=-1;
if(pos<16) xchar=0x1 & S tateL E D »p os;
xbit=xchar;
return xbit;
156
M U M IAN CHS Ktfdl TựI'C CHƯƠNG4: BIẾI BUỂN VÁTẠI BIỆBINC vỉ112 Lỉl
(
for(in t i= 0;i< 12 ;i++ )
(
d ig ita lW rite (i,B itS ta te (i));
)
}
// Chương trình chính
void loopO
{
de la y(100 );// Đ ợ i 100 m iligiây
LED ChangeO ;
}
H ãy v iế t chương trinh, biên dịch và tải xuống bo m ạch A rduino. Nếu
kết nối m ạch đúng và m ạch hoạt động chính xác thì bạn sẽ thấ y hai LED
ngoài cùn g sán g sau đó sáng dồn vào trong. Khi gặp nhau ò điểm giữa thì
chúng sẽ quay lại trạng thái ban đầu và tiếp tục thực hiện lại tiến trinh trên.
Tìm h iể u m ã lệ n h
ỏ chương trình này chú ng ta sẽ thực hiện hiệu ứng dịch ngược hướng
cùng lúc. Vì vậ y trên m ột biến chúng ta không thể nào thực hiện dược việc
này. Vì thế chú ng ta cần sử dụng đến hai biến hiệu ứng cho chương trinh. Sau
đó ch ú n g ta sẽ kết hợp hai biến hiệu ứng này m ột biến chứa các trạng tháĩ
LED và cho p h ép LED hiển thị theo biến trạng thái.
157
CHƯƠHt 4 : 8 IẼ 0 I M ẩ l l VÃ T Ạ I | Ị | i f w 111 t t L £ l UH1M ! ! ■ a i « **! TỊ m
Trong bài tập này chúng ta sẽ không khai báo tên LED đấu chưong
trình vì số LED chúng ta đã tăng lên, sử dụng khai báo tên LED là Khõng có
lợi cho bộ nhớ mã lệnh của chúng ta. Vì vậy chúng ta bò qua phán khai báo
tên LED và tiến đến phần khai báo biến cho chưong trinh.
Bạn khai báo một biến StateLED để chứa các trạng thái các LED
trong biến. Chúng ta sẽ khỏi tạo giá trị cho StateLED ở giá trị là 0. Và bạn chú
ý rằng biến StateLED của chúng ta có kiểu unsigned int. Bạn sử dụng kiểu
unsigned int vì trong bài tập này bạn đã sử dụng số lượng LED lớn hon. Vì vây
chúng ta cần sử dụng một biến có phạm vi số lớn. Và kiểu unsigned int có 16
bit, nên phù hợp với số lượng LED là 12 của chúng ta (bạn có tnể mỏ rộng
đến 16 LED):
unsigned int StateLED=OBOOOOOOOOOOOOOOOO;
Và chúng ta sẽ khai báo thêm hai biến hiệu ứng cho bài tập, các biến
này sẽ có giá trị khởi tạo ban đầu:
unsigned char C all =0B1 ,Cal2=0B00100000;
Vì một lần dịch tới hai LED ngược hướng nhau nên bạn sẽ SỪ dụng hai
biến hiệu ứng tạm này để thực hiện điều đó. Bạn sẽ thực hiện dịch trái cho
biến C all và dịch phải cho biến Cal2 và kết hợp chúng lại thành môt thì bạn
có được kết quả mong muốn là dịch hai LED ngược hướng. Khi kết hợp chúng
ta cần phải sử dụng giải thuật để chèn hai biến hiệu ứng mà không làm chúng
bị đè lên nhau. Trong phần trinh bày tiếp theo bạn sẽ tim hiểu giải thuãt này.
Chương trình khởi tạo của Arduino: Trong chường trinh khâi tạo bạn sẽ
thiết lập các chân nối vđi LED là các chân ngõ ra. Chương trinh khởi tạo cùa
bài tập này hoàn toàn khác so với các chương trình trước. Chúng ta đã rút gọn
mã lệnh để thiết lập 12 chân nối với LED là các chân ngõ ra. Nếu các bạn
dùng phương pháp cũ thì mã lệnh bạn sẽ dài và nếu sử dụng nhiều LED hơn
thi bộ nhớ mã lệnh dành cho các chương trình cần thiết sẽ không đù. Trong
chương trinh khởi tạo bạn sẽ sử dụng vòng lặp for để thực hiện thiết láp ngõ
ra cho các chân nối với LED:
void setupO
■ {
for(int i=0;i<12;i++)
{
pinMode(i, OUTPUT);
}
Sau đó chúng ta sẽ thực hiện kết hợp hai biến hiệu ứng thành n õ ; trong
giải thuật tiếp theo và gán nó vào biến StateLED và yẽu cấu LED hiển
158
AI1DHIIÃM CIS Neơđl ĩự BỌC C M C 4: BIẾU KHIỂN VÀ T Ạ I I IỆ I I m v i l « l ĩ l
S ta te L E D = C a l1 IC a l2 « 6 ;
LE D C hange();
}
T rong lệnh trên chú ng ta có ký tự 1 ” . Đ ây là ký tự để thực hiện phép
tính logic OR cho hai giá trị.
Phép tính OR này sẽ thực hiện trên toàn biến. V à đối với các bit khi
OR với nhau sẽ có b ả ng sự thật như sau:
A B A OR B
0 0 0
0 1 1
1 0 1
1 1 1
V à khi thực hiện ph ép tính OR trên ngôn ngữ A rduino thì bạn sẽ
thực hiệrì phép OR trê n từng bit trong biến. Ví dụ bạn có A = 0 B 0 1 010110,
B= 0B 10111100 và C =A IB thì ta có:
01010110
OR 10111100
11111110
OR 000000 010110
H àm tiếp theo là hàm rút các bit từ biến trạng thá i StateLE D , hàm này
giống vá i các bài tập trước nhưng chúng ta sẽ tăng giỏi hạn giá trị pos lẽn 16
vi trong bài này biến S tateLE D chúng ta đã là m ột biến 16 bit:
159
CHƯỨHS 4 : BIỂU H IẾ U VA TẠI H I t í m llđ l B l £ l U M M u n c u w H iT fi*
BÀI TẬP Z: HIỆU ỨNG SÁNG DẦN LED Từ TRUNG TÂM RA BÊN NGOÀI
Trong bài tập này bạn sẽ thực hiện hiệu ứng dịch LED theo hai hướng
ngược nhau và bạn sẽ sử dụ ng hai biến hiệu ứng để thực hiện như bài tập
trước. Tuy nhiên hiệu ứng sẽ ngược VỚI bài trước.
Bài tập này sẽ cho hai LED chính giữa sáng ở đầu chương trình sau đó
chúng ta sẽ cho ch ú n g dịch ra hai bên từ trung tâm . Sau khi LED giữa đã dịch
ra ngoài bìa thì LED sẽ trở lại trạng thái ban đầu là hai LED trung tâm sáng và
tiếp tục dịch ra ngoài. T iế n trình trên sẽ diễn ra lặp đi lặp lại.
P hần cứ ng
Bài tập này chú ng ta tiế p tục sử dụng các LED và các điện trở để hạn
dòng bảo vệ LED . C á c bạn có thể sử dụng các đèn LED siêu sáng để làm nổi
bật các bảng quản g cá o của bạn.
• LED cá c m àu, bạn có thể dùng 12 LED siêu sáng.
K ết n ố i p h ầ n cứ n g
H ãy ngắt nguồ n và cáp USB của bo m ạch Arduino. Và kết nối m ạch
như hình trang bên.
B ạn nối m ạch như sau, các chân âm của LED nối với G ND cù a bo
m ạch A rdu in o thô ng qua điện trở 220 ohm. C ác chân dương củ a LED nối lần
lượt với các chân 0 đến chân 11 của bo m ạch Arduino.
Hình trang bên là bảng kết nối chân của LED với bo m ạch A rduino:
161
CHƯƠNG4: BIỂU KHIẾNVÀ TẠI BIÊD ỈNC vđl 12 LEI AINIM u n CH UtMMfJH
Chân số 0 LED ũ
Chân số 1 LED 1
Chân số 2 LED 2
Chán số 3 LED 3
Chân số 4 LED 4
Chân số 5 LED 5
Chân số 6 LED 6
Chân số 7 LED 7
Chân số 8 LED 8
Chân số 9 LED 9
Chân số 10 LED 10
Chân số 11 LED 11
Hình dưỏi là ảnh kết nối m ạch trên Proteus (Bạn hãy xem phần hướng
dẫn “Mô phỏng A rduino trẽn Proteus”).
J i l i - i -
DOIN'1
vts&;»ra.u«0(0
1 ^ LED LED LED LED LED LED LED LED LED LED LEO LED
/7""- 11 10 9 8 7 6 5 4 3 z 1 0
1 X X
2 X X
3 X X
4 X X
5 X X
6 X X
■
7 X X
"
163
CHKếNt 4:8IẾIỊBỊẾI »Á TẠI BÉI fw vll c t a
Phần mém
Chương trình cho bài tập này được trình bày bên dưói để điéu khiến
cho hai LED chính giữa sáng sau từng trạng thái sẽ thực hiên dịch các LED
theo các hướng ngược nhau. Và khi hai LED trung tâm đã dịch chuyển dén
các LED bìa thì cho các LED trở lại trạng thái ban đầu là hai LED chính giũa
sáng và tiếp tục thực hiện chương trình một lần nữa. Chương trinh sẽ chạy lâp
lại tiến trình trẽn đến khi bạn ngắt nguồn vào bo mạch Arduino.
Chương trình hiệu ứng sáng dẩn LED từ trung tâm ra bên ngoài:
// Hiệu ứng sáng dẩn LED từ trung tâm ra bên ngoài
II Biến trạng thái LED
unsigned int StateLED=0B0000000000000000;
// Các biến tạm giúp tạo hiệu ứng
unsigned char Cal1=OB1,Cal2=OB00100000;
// Chương trình khởi tạo
void setupO
{
// Khởi tạo ngô ra cho các chân nối LED
for(int i=0;i<12;ị++)
(
pinMode(i,OUTPUT);
}
// Sáng hai LED trung tãm
StateLE D =C al2IC al1«6;
LEDChangeO;
)
// Hàm rút các bit riêng lẻ trong một biến
boolean B itstate(char pos)
* ' * '{
boolean xbit;
unsigned char xchar=-1;
if (pos<16) xchar=0x1 & S ta te L E D » p o s;
xbit=xchar;
return xbit;
}
114
MIIOWIAM n i Mtftfl TựMC CHƯƠNG 4 : 6 I Ể IU U Ể I VÀ TẠIIắl i m v i l t t LE I
{
for(int i= 0;i< 12 ;i+ + )
{
dig ita lW rile (i,B itS ta te (i));
{
delay(10 0 );// Đợi 100 m iligiây
)
H ãy v iế t chương trình, biên dịch và tải xuống bo m ạch A rduino. Nếu
kết nối m ạch đú ng và m ạch ho ạt động chính xác thì bạn sẽ thấ y hai LED
chính giữa sẽ sán g dịch ra hai bên. Khi hai LED dịch đến rìa thi ch ú n g sẽ trở
lại trạng thá i ban đẩu là sán g hai LED chinh giữa và thực hiện lại tiến trình
m ột lần nữa.
Tìm h iể u m ã lệ n h
ở chương trình này ch ú n g tp sẽ thực hiện hiệu ứng dịch ngược hướng
cùng lúc. Do trẽ n m ột biến chú ng tà không thể nào thực hiện được v iệ c này, vì
thế chú ng ta cầ n sử d ụ ng đến hai biến hiệu ứng cho chương trình. Sau đó
chúng ta sẽ kết hợp hai biế n hiệu ứng này vào m ột biến chứa cá c trạng thái
LED và cho p h ép LED hiển thị theo biến trạng thái.
CKƯƯH6 4: ĐIÊU KHIẾM VA TẠO I I Ệ I ẩ n t Irô l t t t ĩ l U M I I M I C H M I lĩtặ
Bạn khai báo một biến StateLED đẽ’ chứa các tra^g H ả i các LEC
trong biến. Chúng ta sẽ khỏi tạo giá trị cho StateLED ở giá tri la G
unsigned int StateLED=OBOOOOOOOOOOOOOOOO:
Và chúng ta sẽ khai báo thêm hai biến hiêu ứng chc bài. các bién nay
sẽ có giá trị khởi tạo ban đầu:
unsigned char C all =0B1 ,Cal2=0B00100000;
Vi trong bài tập này mỗi lần dịch hai LED ngược hưóng nnau nên ban
sẽ sử dụng hai biến hiệu ứng tạm này để thực hiện điều đó. Ban sẽ thực hién
dịch trái cho biến CaM và dịch phải cho biến Cal2 và kết hơp chúng lại thánh
một thi bạn sẽ có được kết quả mong muốn là dịch hai LED ngưoc hưóng
Tiếp theo là chương trinh khởi tạo cùa Arduino, trong chưong trinh khòi
tạo bạn sẽ thiết lập các chân nối với LED là các chân ngõ ra:
void setupO
{
for(int i=0;i<12;i++)
(
pinMode(i,OUTPUT);
}
Sau đó chúng ta sẽ thực hiện kết họp hai biến hiệu ứng thành
một trong giải thuật tiếp theo và gán nó vào biến StateLED và yêu cáu LED
hiển thị:
StateLED =C al2IC al1«6;
LEDChangeO;
}
Phần mã lệnh này sẽ khác với bài tập trước. Thay vi chúng ta SỪ dụng
6 bit của biến C all làm 6 bit cuối của LED và 6 bit cùa bit Cal2 là 6 bit cao của
LED thì trong bài tập này chúng ta sẽ thực hiện ngược lại. Bạn sẽ lấy 6 bit cùa
biến Cal2 làm 6 bit cuối của LED và 6 bit của C all làm 6 bit đầu cùa LED Va
từ đó chúng ta sẽ tạo được hiệu ứng ngược lại so với bài trước.
Hàm tiếp theo là hàm rút các bit từ biến trạng thái StateLED:
boolean Bitstate(char pos)
{
boolean xbit;
unsigned char xchar=-1;
if (pose 16) xchar=0x1 & StateLED>>pos;
xbit=xchar;
1G6
ABDOINO DAM cao NGƯỮI Tự HỌC C M C 4: BIÉU KHIỂN VÁ TẠO BIỆU ỨMS MƠ112 LED
return xbit;
}
T iếp theo sẽ là hàm thay đổi giá trị cho LED theo các bit chứa trong
biến StateLE D :
void LED C hangeO
{
for(in t i= 0;i< 12;i++ )
{
d igita lW rite (i,B itS tate(i));
}
}
C uối cùng ch ú n g ta sẽ thực hiện chương trình chính để LED hoạt động
theo ý m uốn củ a mình. Đ ẩu chương trình chú ng ta sẽ cho đợi 100 m iligiãy để
cho phép chương trinh sáng trạng thái ban đầu là 2 LED ngoài cùng.
void loopO
{
d e la y (1 0 0 );// D ợ i 100 m ilígiây
T iế p theo là giải th u ậ t dịch LED trong hai biến hiệu ứng. Cơ bản chúng
ta chỉ cần dịch hai biến C a ll sang trái và dịch biến Cal2 sang bẽn phải. Sau
m ỗi lần dịch chú ng ta kiểm tra xem giá trị có bị tràn khòi 6 bít cuối hay không.
Nếu tràn ch ú n g ta th iế t lập giá trị ban đẩu cho các biến hiệu ứng:
C a ll =Cal1 < < 1 ; // Dịch vào trong cho biến hiệu ứng 1
Phần cứng
Bài tập này chúng ta tiếp tục sử dụng các đèn LED và các điện Irở dể
hạn dòng bảo vệ LED. Các bạn có thể sử dụng các đèn LED siêu sáng để
làm nổi bật các bảng quảng cáo của bạn.
• LED các màu, bạn có thể dùng 12 LED siêu sáng để nổi bật hơn.
Chân số 0 LED 0
Chân số 1 LED 1
Chân số 2 LED 2
Chân số 3 LED 3
Chân số 4 LED 4
Chân số 5 LED 5
168
HUM IAN m NCtftl TựBOC CHƯƠNG4: ĐIỂU KIẾN VÃÌẬI »Ệ« im vểl 12 l ĩ l
C h ân số 6 LED 6
C hân số 7 LED 7
C hân số 8 LED 8
C h ân số 9 LED 9
C hân số 10 LED 10
C hân số 11 LED 11
B ạn hãy ngắt nguồn và cáp USB của bo m ạch A rdu in o và kết nối
mạch như hinh dưới.
• * » « * * • * « » • «• «• * * * * « * * * • * ■* «■ *■ • * « » * *
B ạn nối m ạch như sau, các chân âm của LED nối với G ND củ a bo
m ạch A rdu in o thô ng qua diện trở 220 ohm. C ác chân dương củ a LED nối lần
lượt với cá c chân 0 đến chân 11 cùa bo m ạch Arduino.
Hình trang bê n là ảnh kết nối m ạch trên Proteus.
CHƯƠNG 4 : ĐIỂU KHIẾN V * T Ạ I I E U UNG v ỉ l ư L E I u m iM ijjiC H t a im a I
LED LED LED LED LED LED LED LED LED LED LEO LED
11 10 9 8 7 6 5 4 3 I 1 0
1 X X
2 X X
3 X X
4 X X
5 X X
6 X X
7 X X
8 X X
9 X X
10 X X
11 X X
12 X X
lĩ ĩ
170
m m D A W cu o H6ƯƠI Tự HỌC_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ CHƯƠNG 4: ỊỊỊỂ ỊỊ KHIỂN VA TẠO m ậ n ƯN6 VƠI 1Z LED
Phẩn m ểm
Chương trình cho bài tập này được viế t bên dưới điều khiển cho hai
LED chính giữa sáng, sau từng trạng thá i sẽ thực hiện dịch các LED theo các
hướng ngược nhau. Và khi hai LED trung tâm đã dịch ch u yể n đến các LED bia
thi cho các LED ng oà i bìa dịch ngược lại vào trung tâm , khi các LED chạ y đến
chính giữa thi lại thực hiện lại quá trình trên. Chương trình sẽ ch ạ y lặp lại tiến
trinh trên đến khi bạn ngắt nguồn bo m ạch Arduino.
Chương trình kết hợp hiệu ứng sáng vào và sáng ra.
{
pin M o d e (i,O UTPUT);
}
171
CHƯƠNG 4 : aiỂU H IẾ N VA T Ạ I I t l l l r t v đ l g L E I AIMIM I M t H B W lllK
{
boolean xbit;
unsigned char xchar=-1;
if(pos<16) xchar=0x1 & S tateL E D »p os;
xbit=xchar;
return xbit;
}
{
digitalWrite(i,BitState(i));
}
if(ChangeEffect==false){
172
U I I M IAN Cll NCtfOI Tự HQC CBƯƠH6 4:0 IẼ IỊỊỊÍỊỊ n TẬQIIỆI iw well 1? IE»
S ta te L E D = C a l1 IC a l2 « 6 ;
}
else{
S ta te L E D = C a l2 IC a l1 « 6 ;
LED C hangeO ;
}
H ãy v iế t chương trình, biên dịch và tải xuống bo m ạch A rduino. Nếu
kết nối m ạch đúng và m ạch hoạt động chính xác thì bạn sẽ th ấ y hai LED
chính giữa sẽ sáng dịch ra hai bên. Khi hai LED dịch đến bìa thì ch ú n g sẽ
dịch ngược trở lại và o trung tâm và quá trinh sẽ diễn ra lặp đi lặp lại.
Tim hiểu mã lệnh
Với chương trình này chú ng ta sẽ thực hiện hiệu ứng dịch ngược
hướng cùng lúc. Vì vậy, trê n m ột biến chú ng ta không thể nào thực hiện được
việc này. Vì thế chú ng ta cần sử dụng đến hai biến hiệu ứng cho chương trình.
Sau đó chúng ta sẽ kế t hợp hai biến hiệu ứng này, m ột biến chứa cá c trạng
thái LED và cho phép LED hiển thị theo biến trạng thái.
Bạn khai báo m ột biến StateLED để chứa các trạng thái các LED
trong biến. C húng ta sẽ khỏi tạo giá trị cho S tateLED ở giá trị là 0:
u n sig ned in t S tateLE D = 0B 0 000 00 000 00 00 000 ;
V à chú ng ta sẽ khai báo thêm hai biến hiệu ứng cho bài, các biến này
sẽ có giá trị khởi tạo ban đầu:
unsig ned char C a ll =0B1 ,C al2= 0B 0 0100000;
Do m ỗi lẩn dịch hai LED ngược hướng nhau nên bạn sẽ sử dụng hai
biến hiệu ứng tạm này để thực hiện điều đó. Bạn sẽ thực hiện dịch trái cho
biến C a ll và dịch ph ả i cho biến Cal2 và kết hợp chúng lại thà nh m ột thi bạn
sẽ có được kế t quả m ong m uốn là dịch hai LED ngược hướng.
Sau đó bạn sẽ thực hiện khởi tạo biến đổi hiệu ứng cho LED . Ban đầu
chúng ta sẽ cho dịch từ trong ra ngoài, khi dịch ra bìa thì chú ng ta cho hai LED
ngoài bia dịch từ ng oà i và o trong và khi hai LED đến trung tâm thì thực hiện lại
tử đầu là dịch từ trong ra ngoài:
boolean C h angeE ffect;
T iếp theo là chương trình khởi tạo củ a Arduino, trong chương trình khòi
tạo bạn sẽ thiế t lập cá c châ n nối với LED là các chân ngõ ra:
void setupO
17J
CHKOHC 4 : BIẾ U KHIẾH V Á TẠI IẺI Im v ể l B t£ »
for(int i=0;i<12;i++)
{
pinMode(i,OUTPUT);
}
Sau đó chúng ta sẽ thực hiện kết hợp hai biến hiệu ứng thành mót
để sáng hai LED trung tâm và gán nó vào biến StateLED và yêu cáu LED
hiển thị:
S tateLE D =C al1IC al2«6;
LEDChangeO;
}
Hàm tiếp theo là hàm rút các bit từ biến trạng thái StateLED:
boolean BitState(char pos)
{
boolean xbit;
unsigned char xchar=-1;
if(pos<16) xchar=0x1 & S ta te L E D » p o s;
xbit=xchar;
return xbit;
}
Tiếp theo sẽ là hàm thay đổi giá trị cho LED theo các bit chứa trong
biến StateLED:
void LEDChangeO
{
for(int i=0;i<12;i++)
{
digitalWrite(i,BitState(i));
)
)
Cuối cùng chúng ta sẽ thực hiện chương trinh chính để LED hoạt
động theo ý muốn của minh. Ngay đầu chương trinh chúng ta sẽ cho đọí
100 miligiáy để cho phép chương trinh sáng trạng thái ban đầu là 2 LED
trung tâm.
void loopO
{
delay(100);// Đợi 100 miligiảy
174
ARDUINO DÀNH CHO N6ƯỈI ĩự HOC CHƯƠNG 4: BIẾU KHIỂN VÀ TẠO HIỆU ỬH6 Mđl 1ZIEĐ
Bạn cũn g thực hiện dịch trái cho biến C a ll và dịch phải cho biến Cal2,
nhưng ở cấu trú c if kiểm tra trạng thái củ a biến Cal2 thì chú ng ta sẽ đổ i hiệu
ứng khi kết thú c hiệu ứng trước bằng cách đảo biến C hangeE ffect:
C a ll =Cal1 « 1 ; // Dịch vào trong cho biến hiệu ứng 1
if (C al1==0B01 OOOOOO) C al1=0B1; II Kiểm tra đ ể trở lạ i trạng
th á i đầu
C a l2 = C a l2 > > 1 ; // Dịch vào trong cho biến hiệu ứng 2
if (C a l2= = 0B 0 000 00 00){ // Kiểm tra đ ể trở lạ i trạng th á i đầu và
đ ổ i hiệu ứng
C a l2 = 0 B 0 0 100000;
Change E ffect= !C hangeE ffect;
}
T iếp theo ch ú n g ta sẽ dùng cấu trúc if để q u yế t định hiệu ứng sáng ra
ngoài hay sáng vào trong cho LED . Ban đầu chúng ta m uốn sáng ra ngoài
nên bạn sẽ cho thực hiện hiệu ứng sáng ra ngoài khi giá trị trong biến
ChangeEffect là false:
if(C h an geE ffect= = false){
S ta te L E D = C a l1 IC a l2 « 6 ;
}
else{
S ta te L E D = C a l2 IC a l1 « 6 ;
}
LED C hangeQ ;
175
CHƯƠNG4: 6IỂIIBIỂH VÀTẠI IẼI im vấl tt lĩl > w u « w m in
Phần cứng
Bài tập này chúng ta tiếp tục sử dụng các LED và các diên trở để hạn
dòng bảo vệ LED. Các bạn có thể sử dụng các đèn LED siẽu sáng đẽ làm nil
bật các bảng quảng cáo của bạn.
• LED các màu, bạn có th ể dùng 12 LED siêu sáng.
Chân số 0 LED 0
Chân số 1 LED 1
Chân số 2 LED 2
Chân số 3 LED 3
Chân số 4 LED 4
Chân số 5 LED 5
Chân số 6 LED 6
Chân số 7 LED 7
Chân số 8 LED 8
Chân số 9 LED 9
Chân số 10 LED 10
Chân số 11 LED 11
176
M D H 8 IA W MO NSƯỪI Tự HQC CHUONG 4: BIẾB KHIỂN VẢ T Ạ IH IỆ B i N t V iM Z L E D
177
CBƯđM 4: BIẾIBỊẾI VA TẠI |Ẹ| m »|l t ig __________
A lu m I AW CII Mtftfl Tự IfC CHƯỜNG 4: ÕIẾ0II Ế I VÀ TAI IỂ I iK V llt Z L E i
eat MI M M X Mí X X X K X K
ã
tHO
X X X
LU
•si
m X
IU
mtd
m
ea *
5
ca X
LU
IE D E
LEO 6
LED 7
X
LEBS
M
LED 9
ea X X
LLI
*Mé
X
Ui
Uii
5 / U) CO r> .
V**
09 CO
¥•*
o
CM Ĩ nJ ẽsĩ
Ci
CNI t\J
II*
6>J
/ «H
/ * ia
179
CHƯƯHC4: MỂI HIẾII VÁ TẠI l Ị l ếw Dll B Ltl UWIM IM tM W H H |ặ
Phần mềm
Chương trinh cho bài này được trinh bày bén dưới Nhiém vụ cùa
chương trinh là tạo ra hai biến hiệu ứng, sau đó sẽ cho mõĩ biến dịch và mô!
biến nền tăng lên sau mỗi lần dịch LED đến kề LED đang sáng. Viẽc chúng ta
kết hợp hai biến sẽ tạo hiệu ứng sáng dồn.
Chương trìn h hiệu ứng sáng dồn LED.
II Hiệu ứng sáng dồn LED
uo
1 MDiMO IAM no Klídl TựBỌC CHƯƠNG 4: BIẾU IMỂN VÀ TẠI IỆ I ífw y đ l 1? LEH
{
for(int i= 0;i< 12 ;i++ )
{
d ig ita lW rite (i,B itS tate(i));
// Khởi tạo các giá trị ban đầu cho các biến hiệu ứng
Cal2=0;
C al1=0x1000;
for(int i= 1 2 ;i> 0 ;i-) // Vòng lặp đ ể tăng biến Cal2
{
for(int j= 0 ;j< i;j+ + ) // Vòng lặp dịch biến C a ll
{
delay(IO O );
C a l1 = C a l1 » 1 ; // Dịch biến C a ll sang p h ả i
}
C al1=0x1000;
C a l2 = C a l2 « 1 l1 ; // Tăng biến Cal2
)
delay(IOO);
}
H ã y viế t chương trình, biên dịch và tải xuống bo m ạch A rduino. Nếu
kết nối m ạch đúng và m ạch hoạt động chính xác thì bạn sẽ thấ y hai LED
ngoài cùn g bên trái sán g và dịch sang bên phải.
181
CHITONS4: BIẾÍ HBIỂMu TẠI HỆI lilt nil B l a
Khi đến bìa bên phải LED sẽ sáng và dừng lại. Sau đó mót LED khac
từ bên trái dịch sang bên phải và sẽ sáng sau đó dửng lại <é bén LED đà
sáng trước đỏ. Cứ thế đến khi tất cả các LED sáng hết thì hiẽb úng sẽ thực
hiện lại ban đầu.
1. Dịch bit 1 trong biến C a ll, đây là biến tạm hiệu ứng
2. Kết hợp hai biến thành 1 để tạo hiệu ứng sáng dón sau mồi
lần dịch.
3. Sau khi bit 1 dịch đến vị trí định trước thi bạn sẽ cho táng biến
Cal2. Chúng ta thực hiện tăng biến Cal2 theo quy luãt là chèn
thêm bit 1 bằng phép tính dịch bit và thực hiện phép tinh OR VỚ11.
Trong bài tập này chúng ta sử dụng phép tính tăng biến Cal2 la
Cal2=Cal2<<1l1.
Ví dụ: Khi bạn dịch phải biến C a ll từ 0B1000 thành 0B0001 thì phép
tính Cal2 sẽ thực hiện như sau. Giả sử biến Cal2=0B00 thì khi dịch trái thi biến
Cal2=0B00 và OR với 1 thi Cal2=0B01.
Ở trạng thái tiếp theo chúng ta sẽ gán giá trị 0B1000 cho biến Call va
dịch thành OBOOIO là đã kết thúc quá trình dịch. Và biến Cal2 đang có giá trj
là 0B01nên khi dịch thì Cal2=ŨB10 và thực hiện phép OR vói 1 thi
Cal2=0B11.
Sau mỗi lần dịch thi bạn sẽ thực hiện kết hợp hai biến để tao hiệu ứng
sáng dồn.
Để hiểu hơn về giải thuật chúng ta sẽ tiếp tục phân tích mã lênh cùa
bài tập này.
Bạn khai báo một biến StateLED để chứa các trạng thái các LED
trong biến. Chúng ta sẽ khởi tạo giá trị cho StateLED ở giá trị là 0:
Và chúng ta sẽ khai báo thêm hai biến hiệu ửng, các biến này sẽ có
giá trị khỏi tạo ban đầu, nhưng chú ý rằng: Hai biến tạo hiệu ứna cnúng ta sú
dụng khai báo unsigned int bởi vi chúng ta sử dụng 12 LED:
Tiếp theo là chưong trinh khỏi tạo cùa Arduino, trong chương trr.n khòi
tạo bạn sẽ thiết lập các chân nối với LED là các chân ngõ ra.
18?
A l u m I km C M MtWi Tựlạc (M K 4: BIẾI DỂI VÀTẠI IỆ I im vểl tt IH
v oid setupO
{
fo r(in t i= 0;i< 12 ;i++ )
{
p in M o d e (i,O UTPUT);
}
}
Hàm tiế p theo là hàm rú t các bit từ biến trạng th á i StateLE D .
Hàm này giốn g với các bài tập trước nhưng ch ú n g ta sẽ tăng giới hạn
giá trị pos lên 16 vì trong bà i này biến StateLED chú ng ta đã là m ộ t biến
16 bit-
{
bo olean xbit;
unsigned cha r xchar=-1;
if ( p o s d 6) xchar=Ox1 & S ta te L E D » p o s ;
xbit= xcha r;
return xbit;
}
T iế p theo sẽ là hàm thay đổi giá trị cho LED theo các bit chứa trong
biến S tateLED :
void LE D C hangeO
{
fo r(in t i= 0;i< 12 ;i+ + )
{
d ig ita lW rite (i,B itS ta te (i));
}
}
C uối cùn g ch ú n g ta sẽ thực hiện chương trình chính để LED hoạt động
theo ý m uốn cùa m inh:
void loopO
{
CHƯƯHB4:8IẼI Hển VÀ TẠI 1*1 tfH6 vđl tt l ĩ l u w iM if C H K W H f«
Đầu tiên, bạn khởi tạo các giá trị ban dắu cho các biến mẽu úng. Ban
đầu biến hiệu ứng nền Cal2 là 0 và biến hiệu ứng dich có giá trị làm sáng
LED ngoài cùng bên trái.
Cal2=0;
C a ll =0x1000;
Giá trị của C a ll trong bài tập này chúng ta sẽ sử dụng khai báo s6
thập lục phân thay vì số nhị phân như trong các chương trinh knác. Số đếm
mà bạn sử dụng trong đời sống là số thập phân. Máy tính chúng la không sù
dụng số thập phân mà chúng sử dụng hệ số đếm nhị phân. Tnay vi bạn sù
dụng số nhị phân để biểu diễn thì rất dài dòng nên trong lâp trình ngưòi ta
thưởng sử dụng số thập lục phân.
Trong hệ số đếm thập phân mà chúng ta dùng thi các cnữ số sẽ là 0
đến 9, số nhị phân là 0 hoặc 1, số thập lục phân là 0 đến F.
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
1010 A
1011 B
1100 c
1101 D
1110 E
1111 F
IM
Allow »ÁWa i Mtưỉíl TựIft CHƯƠNG 4: B IẾ I IB Ể N VÀ Ĩ Ạ I l Ị l ÍN t V ế M ỈL E I
Bạn có thể chu yển đổ i qua lại giữa cá c hệ số đếm với nhau. Trong
bài tập này c h ú n g ta c h ỉ tập trung vào v iệ c chu yển đổ i số thậ p lục phân và sô
nhị phân.
Bạn có bảng số nhị phân và số thập lục phân như sau (bạn nên thu ộc
bảng này vì nó rất có lợi cho bạn trong công việc lập trinh): B ảng trang trước
thể hiện cá c số nhị phân tương ứng với các số thập lục phân từ giá trị 0 đến F
(trong hệ thập phân là từ 0 đến 15). N ếu bạn sử dụng m ột số lớn hơn F (15
trong hệ thập phân hoặc số nhị phân nhiều hơn 4 bit) thì bạn tách số nhị phân
thành các đoạn 4 bit từ phải sang trá i và dùng bảng trên để tìm số thập lục
phân. G iả sử chú ng ta có:
0B 1001010100011
Bạn tách số trê n thành các đoạn số 4 bit và dùng bảng trên để đánh
số cho các đoạn 4 bit:
1 2 A 3
Trở lại với chương trình, bạn m uốn LED cuối cùn g bẽn trái sáng nên
chúng ta sẽ có giá trị C a ll là 0X1000.
T iế p theo, bạn tạo m ột vòng lặp để tăng biến Cal2 khi hoàn tấ t việ c
địch biến C a ll như giải thuật. C húng ta sẽ thực hiện vòng lặp for như sau:
T rong vòn g lặp này thi giá trị khởi tạo là 12 (chúng ta có 12 LED ) và
giá trị số đếm j sẽ giảm m ỗi vòng lặp. T iế p theo là vòng lập dịch biế n C a ll.
Vòng lặp này sẽ giảm số lần dịch dựa trên biến j của vòng lặp trước. Sau m ỗi
lần dịch thì thay đổi LED theo hai biến hiệu ứng bằng cách OR lại vôi nhau:
dela y(100 );
LE D C hangeO ;
185
C fflfflm 4: B IÉ I I I Ế « HÁ T Ạ I r t i t u y t i B l ĩ i U W lU M C M K H tĩT *
Sau mỗi lẩn dịch xong thl khởi tạo giá trị ban đấu cho biến C all vá
tăng biến Cal2 như giải thuật.
Cal1=0x1000;
)
delay(100);
BÀI TẬP 5: HIỆU ỨNG KẾT Htfp SÁNG DỒN VÀ TẮT DỒN
Trong bài tập này bạn sẽ kết hợp hai hiệu ứng sáng dón và tắt dón để
hiệu ứng diễn ra được suôn sẻ hơn. Trong bài tập trước, khi bạn thực hiện
sáng dồn hoàn tất thl đột ngột các LED sẽ bị tắt dẫn đến hiệu ứng có phán
không suôn sẻ.
Trong bài tập này, khi sáng dồn hoàn tất thl 12 LED sẽ sáng và chúng
ta thực hiện tắt dổn các LED theo hướng dịch LED ngược lại. Khi các LED đã
thực hiện tắt dổn xong thì 12 LED sẽ tắt và chúng ta lại thực hiện sáng dón
Quá trinh lặp lại tạo hiệu ứng rất bắt mắt khi bạn dùng nhiều LED hơn cho
một ngõ ra.
Phần cứng
Bài tập này chúng ta tiếp tục sử dụng các LED và các điện trà để hạn
dòng bảo vệ LED.
• Sử dụng 12 LED các màu, bạn có thể dùng LED siêu sáng.
Hãy ngắt nguồn và cáp USB của bo mạch Arduino sau đố kết nối
mạch như hình trang bên.
Bạn nối mạch như sau, các chân âm cùa LED nối vói GND của bo
mạch Arduino thông qua điện trở 220 ohm. Các chân dương cùa LED nối lán
lượt với các chân 0 đến chân 11 cùa bo mạch Arduino.
Bảng trang bẽn là kết nối chân cùa LED với bo mạch ArdLHo
M U M 1 A M C IS N C M l I f I f c CHtftfNC 4: B IÉ I MUỂN VÀ Ì Ạ I I Ệ I I w v i l 12 LĨB
B O M Ạ C H A R D U IN O LED
Chân số 0 LED 0
Chân số 2 LED 2
C h ân số 3 LED 3
Chân số 4 LED 4
Chân số 5 LED 5
Chân số 6 LED 6
Chân số 7 LED 7
Chân số 8 LED 8
Chân số 10 LED 10
C hân số 11 LED 11
187
CHƯƠNG 4 : BIỂ U KHIẾN VÀ T Ạ I l i l I w v ể l t t l i l U N M U « C M K * ir ặ «
N. LEO
LED LED LED IE0 LED LED LED LED LED LEI IEI LEI
T rạ n g \ 11 to s 1 7 c s 4 Ỉ 2 1 1
thái
1 X
2 X
10 X
11 X
12 X
13 X X
14 X X
188
A 1 I I M I A M C ll K t t í l lự BỌC CHƯQNC 4: ĐIỂU I H Ể I VÀ T Ạ I H Ê l l K V ẩ l t t l i »
X . LED
LED LED LED LEO LED LED LED LED LED LED LED LED
T rạ n g V 11 10 9 8 7 6 5 4 3 2 1 0
thai
X X
21
22 X X
23 X X
24 X X X
25 X X X
N X X X X X X X X X X X X
N +1 X X X X X X X X X X X
N+2 X X X X X X X X X X X
X X X X X X X X X X X
K X X X X X X X X X X X
K+1 X X X X X X X X X X
K+2 X X X X X X X X X X
J+1 X
J+ 2 X
T X X X X X X X X X X X X
Phần mềm
Chương trình cho bài tập này được viế t như trang bẽn. Chương trinh
sẽ tạo ra hai biế n hiệu ứng sau đó thực hiện sáng dồn trước và thực hiện tắt
dồn sau.
1 ỈỈ
CBƯƠH6 4:6IẼI HIỂM »* TẠI BÉI I k vil BIEI u w I M a » K ề n Tf m
Sau mãi hiệu ứng sẽ cho phép đợi 100 miligiây trưỏc kni chuyển qua
hiệu ứng kia.
Chường trình kết hợp sáng dón và tắt dổn
// Hiệu ứng sáng dồn và tắt dồn LED
void LEDChangeO
{
A IllllA H a iW r tlT flfC CBƯỂNC 4: B IẾ IIIÉ IV * ĨẠ IH É I r w v i n n t l
for(int i=0;i<12;i++)
{
digitalWrite(i,BitState(i));
(
// Khởi tạo các giá trị ban đẩu cho các biến hiệu ứng
Cal2=0;
C all =0x1 OOO;
for(int i= 12 ;i> 0 ;i--) // Vòng lặp đ ể tăng biến Cal2
{
for(in t j= 0 ;j< i;j+ + ) // Vòng lặp dịch biến C a ll
{
delay(100);
C a l1 = C a l1 » 1 ; // Dịch biến C a ll sang p h ả i
}
C a ll =0x1000;
C a l2 = C a l2 « 1 l1 ; // Tăng biến Cal2
delay(100);
// Khởi tạo cá c giá trị ban dầu cho các biến hiệu ứng đ ể tạo hiệu ứng 2
Cal2=0;
C a ll =0x1;
for(in t i= 1 1 ;i> 0 ;i- ) // Vòng lặp đ ể tăng biến Cal2
191
CHƯỜNt 4 : 8 I Ế I n ể » V Ã T Ạ I r t l i n tfl B III u n m » a i« W im t
for(int j=0;j<i;j++)
{
delay(100);
C a l1 = C a l1 « 1 ; Dịch biến C a ll sang trái
StateLED=-(Cal1 ICal2); // Kết hợp hai biến và đảo giá trị để thưc hiện tấl
dồn
LEDChangeO;
}
C a ll =0x1;
C a l2 = C a l2 » 110X800; // Tăng biến Cal2
}
delay(100);
}
Hãy viết chương trình, biên dịch và tải xuống bo mạch Arduino. Nếu
kết nối mạch đúng và mạch hoạt động chinh xác thì bạn sẽ thấy các LED
sáng dồn trước. Sau khi sáng dồn thl sẽ tắt dồn và tiến trình lặp đi lặp lại.
Tìm hiểu mã lệnh
Bạn khai báo một biến StateLED để chứa các trạng thái các LED
trong biến. Chúng ta sẽ khởi tạo giá trị cho StateLED ở giá trị là 0:
unsigned int StateLED=OBOOOOOOOOOOOOOOOO;
Và chúng ta sẽ khai báo thêm hai biến hiệu ứng, các biến này sẽ có
giá trị khỏi tạo ban đầu, nhưng chú ý rằng: Hai biến tạo hiệu ứng chúng ta sừ
dụng khai báo unsigned int bởi vì chúng ta sử dụng 12 LED:
unsigned int Cal1,Cal2;
Tiếp theo là chương trinh khởi tạo cũa Arduino, trong chương trinh khỏi
tạo bạn sẽ thiết lập các chân nối với LED là các chân ngõ ra:
void setupO
{
for(int i=0;i<12;i++)
{
pinMode(i,OUTPUT);
}
}
192
AUMNMNCII K ltl Tựlệt CKtftfNC4: BIẾIUNẾI ú T Ậ IIẩ liK vim a
H àm tiếp theo là hàm rút cá c bit từ biến trạng thái StateLE D , hàm này
giống với các bài trước nhưng ch ú n g ta sẽ tăng giới hạn giá trị pos lên 16 vì
trong bà i này biến S tateLE D chúng ta đã là m ộ t biến 16 bit:
bo olean B itS tate(ch ar pos)
{
bo olean xbit;
unsigned char xchar=-1;
if (pos< 16) xchar=0x1 & S tateLE D >>pos;
xbit=xchar;
return xbit;
}
T iế p theo, sẽ là hàm thay đổi giá trị cho LED theo các bit chứa trong
biến StateLE D :
void LE D C hangeO
{
fo r(in t i= 0;i< 12 ;i++ )
{
d ig ita lW rite (i,B itS ta te (i));
}
}
C uối cùng ch ú n g ta sẽ thực hiện chương trinh chính để LED hoạt động
theo ý m uốn của mình:
void loopO
{
Đ ău tiên chú ng ta Ihực hiện hiệu ứng sáng dồn từ trái sang phải như
bài trước:
C al2=0;
C a ll = 0x1000;
fo r(in t i= 1 2 ;i> 0 ;i~ ) // Vòng lặp đ ể tăng biến Cal2
{
for(in t j= 0 ;j< i;j+ + ) // Vòng lặp dịch biến C a ll
{
d e la y (1 00);
C a h =Cal1 » 1 ; // Dịch biến C a ll sang ph ả i
193
cwflfwt 4: BIẾI MẾ» ù TẠI B É IÍK vll tt i a <i— i A « a iK iT H t
194
A IM I M l À l g C H W t W lT f i q t CHƯdNCS: Đ Ó M IẾU ù TẠI ■ Ẽ l i m t t L£» T IE I HÁM
CHUONG9
THEO MẢNG
T rong các bà i tập trước, chúng ta đã tạo hiệu ứng cho LED theo những
giải thu ật tính toán dựa vào các toán tử dịch hay các phép toán logic. Những
hiệu ứng này có m ột quy luật nhất định nào dó. V ậy còn đố i với cá c hiệu ứng
không có m ột quy lu ật hay chu kỳ nhất định nào thì chú ng ta sẽ xử lý ra sao?
Trong bài tập này, chúng ta sẽ thực hiện m ột bài tập m ẫu về cách sử
dụng m ảng để điều khiển hiệu ứng sáng cho LED. Đ ối với cách này sẽ có các
ưu điểm và nhược điểm so với cách điểu khiển LED theo quy luật và phép tính:
ưu điểm :
• Đơn giản.
• Làm được tất cả cá c hiệu ứng cho LED quảng cáo.
• Không m ất thời gian để suy nghĩ phép tính cho hiệu ứng.
Nhược đ iể m :
• T ốn dung lượng bộ nhớ.
• T ốn thời gian sắp xếp tính toán giá trị hiệu ứng.
T rong thực tế việ c thực hiện các hiệu ứng để quảng cáo LED thì
thường kết hợp hai cách tạo hiệu ứng để kết hợp cả ưu điểm và nhược điểm
của hai cách.
195
CBIitfWS: BỂI HỂN VÀĨẠI I t I I k 12 LEI TCI HẮK
C h â n số 10 LED 10
C h â n s ố 11 LED 11
196
ẦIMIMIÁM CM K6tftíl Tự BỌC CHỬđNG S: ĐIỂB H IẾN VA TẠ I 1 Ệ I i f * tt I E ! T I E I M Ả K
Hình dưới là ảnh kết nối m ạch trên Proteus (bạn xem phần hướng dẫn
"Mô phỏng A rdu in o trên P roteus” .
197
CIƯƯNC 5 : ĐtỀO KHIẾM VÀ TẠI I I Ệ I r w 1 2 I E I T E IM Á K m w w w iif*
Phần mềm
Chương trình cho bàí tập này được viết bên dưới. Chưong trình sẽ co
một mảng chứa các giá trị hiệu ứng.
Trong bài tập này chúng ta sẽ tạo hiệu ứng có 5 trạng thái sáng LED
trong mảng. Sau khi chạy hết mảng thì LED sẽ bắt đầu trạng thái ban đấu
void setupO
{
// Khởi tạo ngõ ra cho các chân nối LED
for(int i=0;i<12;i++)
pinMode(i,OUTPUT);
{
boolean xbit;
xbit=xchar;
return xbit;
198
AIHIM l Ấ H H K m n m UMK i: MẾIIMẾI VÀTẠI 1ỆI tì* g lĩ l Ĩ I E I HẢK
{
for(in t i=0;i< 12;i++ )
{
digita lW rite (i,B itS tate(i));
void loopO
{
for(int i= 0 ;i< = size o f(C a l)/2 ;i+ + ) II Vòng lặp cho m ảng hiệu ứng
{
delay(500);
Hãy viế t chương trinh, biên dịch và tải xuống bo m ạch A rduino. Nếu
kết nối m ạch đ ú ng và m ạch hoạt động chinh xác thì bạn sẽ thấy các LED
sáng theo bảng hoạt động như đã trinh bày. Sau khi đến trạng thái cuố i thì
LED sẽ sáng lại trạng thái ban đầu củ a m àng.
Tìm h iể u m ã lệ n h
Bạn khai báo m ộ t biến S tateLE D để chứa các trạng thá i các LED
trong biến. C húng ta sẽ khởi tạo giá trị cho StateLED ở giá trị là 0:
Bạn có thể tha y đổ i các hiệu ứng cho LED theo ý m uốn cù a m inh, và
có thể tạo ra b ấ t kỳ hiệu ứng nào theo ý thích của m inh mà khô ng cẩn quan
tâm đến các p h é p tinh sừ dụng trong các bài tập đó.
119
CHtftfw5: aiỂB »aế» ú TẠI I t l lw tt It l ĨKIMẨK U U M I f cw K tn T> »
Cần chú ý rằng, khai báo mảng như trên là khai báo mảng vào RAM
của bo mạch Arduino. Trong các bài tập sau chúng ta sẽ tao màng chứa trong
ROM. Vì RAM của bo mạch Arduino là có hạn, chúng ta chí nên sử dung RAM
để chứa giá trị các biến, còn các giá trị không đổi thi không nên chứa trong
RAM mà bạn nên chứa trong ROM.
ROM là bộ nhớ mă lệnh của bo mạch Arduino. Đối vói bo mạch
Arduino UNO bạn có 32KB ROM. RAM là bộ nhớ truy cập ngẫu nhiẽn cùa
bo mạch Arduino, đối với bo mạch Arduino UNO bạn có 2KB RAM Đối VÓI
các hiệu ứng gồm nhiều giá trị trạng thái với số LED điều khiển lớn thi RAM
của bo mạch là không đủ đáp ứng. Nên chúng ta sẽ chứa các hiêu ứng trong
mảng ỏ bộ nhớ ROM.
Bài tập này là ví dụ cơ bản của việc sáng LED theo màng và số trạng
thái hiệu ứng của LED sẽ ít nên chúng ta sẽ dùng RAM để chứa nàng,
Tiếp theo là chương trình khởi tạo của Arduino, trong chương trinh khói
tạo bạn sẽ thiết lập các chân nối với LED là các chân ngõ ra.
void setupO
(
for(int i=0;i<12;i++)
{
pinModefi,OUTPUT);
}
)
Hàm tiếp theo là hàm rút các bit từ biến trạng thái StateLED:
boolean Bitstate(char pos)
{
boolean xbit;
unsigned char xchar=-1;
}
Tiếp theo sẽ là hàm thay đổi giá trị cho LED theo các bit chứa trong
biến StateLED:
200
AIDUINO BAHĨ CHO H6ƯƠI Tự HOC CHƯƠNG í : BIẾU (HIỂN VÀ TẠO MỆB tfwc ư LED THEO MẨNS
{
fo r(in t i= 0;i< 12;i++ )
{
d igita lW rite (i,B itS tate(i));
)
C uối cù n g chú ng ta sẽ thực hiện chương trình chính để LED hoạt động
theo ý m uốn củ a mình.
void loopO
(
T rong chương trinh chính chúng ta sẽ tạo m ột vòn g lặp cho p h ép lặp
qua từng trạng th á i củ a m ảng hiệu ứng Cal và yêu cầu LED sáng theo các
hiệu ứng bên trong m ảng.
fo r(in t i= 0;i< = sizeo f(C al)/2;i+ + ) // Vòng lặp cho m ảng hiệu ứng
{
dela y(500 );
}
Trong vòn g lặp trê n bạn thấy có hàm mới là hàm sizeof. Hàm này có
chức năng là lấy độ dài c ủ a m ảng theo byte. Già sử bạn khai báo m ột m ảng
unsigned cha r t[2 ]= {0 xf,0 xff} thì khi lấy sizeof của m ảng bạn sẽ có giá trị là 2.
Trong bà i tập này chúng ta khai báo m ảng Cal là kiểu unsigned int
nên số lượng byte trả về khi sử dụng hàm size of là gấp đôi. Bởi vì kiểu
unsigned cha r có độ dài là 8-bit và kiểu unsigned int có độ dài là 16-bit. Mà
giá trị sizeof trả về là số byte (8-bit) của m ột m ảng. Nên trong vòng lặp bạn sẽ
thấy chúng ta dùng hàm size of(C a l)/2 để ti'.', m ảng ch ú n g ta có bao nhiêu
phần tử.
Vòng lặp trên đơn giản chỉ cho chạ y tì' phần tử đầu tiên của m ảng đến
phần tử cuối cùng. Sau đó gán và o thanh ghi trạng thá i của LED và yêu cầu
LED sáng theo trạ n g thá i đó. Sau m ỗi trạng thái thl ch ú n g ta đợi 500 m iligiây
để thực hiện tiế p trạng th á i tiếp theo.
201
CHƯƯN6 5: eiẼỮ KHIẾH VÃ TẠO i t l int 12 IE B T E I H Ắ M u w 1« M K O m
C h â n số 1 LED 1
202
IH IM I Ầ i C U W W l TQ ỌC CHƯƠNG ỉ : ĐIỂU KHIẾN VÁ ĨẠ 9 BỆU (Im g l ĩ l THEO M Ả K
m ask
203
CHƯƠNG 5 : ĐIỂU KHIỂN VÁ T ị t DIỆU Í I K 12 IE » THEO M À K U I * " ! '■ * * * ! Tf » t
1 LED u
LED LED LED LED LED LED LED LED LED th*p
LED LED LED
8 7 6 5 4 3 z 1 t l«c
Tpạng A 11 10 9
P h il
thái '
1 X X X X 861
2 X X X 492
*
3 X X X X 30C
4 X X X X 492
5 X X X X 861
6 0
7 X X X X X X E07
8 X X X X X * 70E
9 X X X X X X 39C
10 X X X X X X 1F8
11 X X X X OFO
12 X X 060
13 0
14 X X 060
15 X X X X 0F0
16 X X X X X X 1F8
17 X X X X X X 39C
18 X X X X X X 70E
19 X X X X X I E07
20 0
204
Ầ lM im DAW CIO W6tftfIT ỊỈIỌ C CBtftfNS S: ĐỂU KHIỂN ù TẠ I B Ệ I ifw tt Lĩ» TIEO HAW
Phấn m ềm
Chương trình cho bài tập này được viế t bên dưới. Chương trình sẽ thực
hiện sáng LED theo cá c hiệu ứng chứa trong m ảng định trước. C húng ta sẽ
tạo nhiều hiệu ứng tách biệt trong những m àng riêng b iệ t và các m ảng này sẽ
chứa trong ROM thay vì trong RAM như bài trước. Với ROM, chú ng ta có thể
chứa nhiều hiệu ứng hơn và bạn có thể thoải m ái tạo các hiệu ứng của riêng
minh bằng cách sử dụng nhiều m ảng hoặc m ột m ảng. Nhưng bạn nên tách
từng hiệu ứng thà nh các m ảng riêng b iệ t để dễ quản lý và sử dụng.
PRO G M EM p ro g _ u in t1 6 _ t
C al2[]={0xE 07 ,0x70 E ,0x39 C , 0x1 F8,0x0F0,0x060,0};
PROGM EM pro g _ u in t1 6 _ t
C al3[]={0x060,0x0F0,0x1 F 8,0x3 9C ,0x7 0E ,0xE 0 7,0};
void setupQ
pinMode(i,OUTPUT);
205
CHƯdNE 5: B1ẾD KHIẾU VÁ T Ạ I IIỆ a H N C 1? L t l T B E t M A X UIIW IfC M K W lT fy
boolean xbit;
xbil=xchar;
return xbit;
void LEDChangeO
for(int i=0;i<12;i++)
digital Write(i,BitState(i));
void loopO
delay(500);
206
AIHIMIAW CM XWl T>ỊệC CHƯÚNC ỉ : BiỂO KHIỂN n Ĩ Ạ I i Ệ I t u t t t LEI THEO MÀM8
delay(300);
S ta te L E D = pgm _ rea d_ w ord _ne ar(C al2 + i); // D ọc giá trị m ảng trong ROM
LE D C hange();
for(int i= 0 ;i< = size o f(C a l3 )/2 ;i+ + ) // Cho LED sáng theo hiệu ứng 3
delay(300);
S tateL E D = pgm _ rea d_ w ord _ne ar(C al3 + i); // Dọc giá trị m ảng trong ROM
LED ChangeO ;
Hãy viế t chương trình, biên dịch và tải xuống bo m ạch A rduino. Nếu
kết nối m ạch đúng và m ạch hoạt động chính xác thì bạn sẽ thấy các LED
sáng theo bảng hoạt động như yêu cầu. Sau khi đến hiệu ứng cu ố i thì chương
trình sẽ lặp lại hiệu ứng ban đầu.
Tìm h iể u mã lệ n h
Trong bài tập này bạn sẽ khai báo thêm thư viện ỏ đầu chương trinh,
chúng ta sẽ khai báo thê m các thư viện cho m ột chương trinh nếu trong
chương trinh có sử dụng thêm các thư viện mở rộng.
Đ ối với ngôn ngữ A rdu in o thì thư viện chính là m ột phần quan trọng
bậc nhất. Nhở cá c thư việ n m à bạn có thể giảm khối lượng công việ c và bạn
sẽ xử lý, tập trung nhiều hơn vào giải thu ật cho chương trình. Và các thư viên
của ngôn ngữ A rdu in o thì được hỗ trợ khá nhiều từ cộng đổng. T rong bài tâp
này chúng ta sử dụng thêm thư viện pgm space của vi điều khiển AVR.
Thư viện này là m ột thư việ n giúp bạn đưa giá trị nào đó vào vùn g nhớ
trên ROM. Và thư việ n sẽ hỗ trợ hàm để bạn lấy các giá trị đă chứa
trong ROM và sử dụ ng . C húng ta khai báo thêm thư viện pgm space như cú
pháp dưới:
Bạn khai báo m ôt biến S tateLE D để chứa các trạng thái các LED
trong biến. C húng ta sẽ khỏi tạo giá trị cho S tateLE D ỏ giá trị là 0:
Ỉ0 7
CHƯƠNG 5 : 6IẾU KHIẾH VA TẠO 8 IỆH Ứ M » LED T U ta H Ả K Ấ m n m g iH iT H t
Và chúng ta sẽ khai báo thêm 3 mảng chứa hiệu ứng của LED lẩn lượt
có tên là C a ll, Cal2 và Cal3:
PROGMEM prog_uint16_t
C all []={0x861,0x492,0x300,0x492,0x861,0};
PROGMEM prog_uint16_l
Cal2[]={0xE07,0x70E,0x39C,0x1 F8,0x0F0,0x060.0):
PROGMEM prog_uint16_t
Cal3[]={Ox060,OxOFO,Ox1F8,Ox39C,Ox70E,OxE07,0}:
Trong thư viện pgmspace thì các kiểu biến sẽ được đổi thành các tên
khác thay vì các tên unsigned char, unsigned int, int, float,...
Bảng dưới liệt kê các kiểu biến dùng cho khai báo thư viện:
K h a i b á o k h i sử d ụ n g đ ể tạ o
P hạm v i của kha i báo
g iá t r ị tr o n g ROM (d a ta ty p e )
'
p ro g _ ch a r c h a r (1 byte) -127 to 128
p ro g _ in t1 6 _ t in t (2 byte s) -3 2 ,7 6 7 to 32,768
long (4 byte s) -2 ,1 4 7 ,4 8 3 ,6 4 8 to
p ro g _ in t3 2 _ t
2 ,1 4 7 ,4 8 3 ,6 4 7 .
Cú pháp bạn khai báo một giá trị lưu trong ROM như sau:
hoăc:
C h ún g ta sẽ có khai báo các m ảng hiệu ứng tương tự như với bài trước
tuy nhiên bạn sẽ sử dụng cú pháp khác và kiểu dữ liệu khác (datatype).
Sau đó, thư viện sẽ thực hiện công việ c đưa các giá trị này vào ROM,
để sử dụng các giá trị này bạn sẽ dùng hàm các hàm đọc do thư việ n
cung cấp.
Bạn có thể kham khảo thêm về thư viện tại trang web:
http://arduino.ee/en/Relenence/PRDGIVIEIVI
và
T iế p theo là chương trình khởi tạo của Arduino, trong chương trình khỏi
tạo bạn sẽ th iế t lập các chân nối với LED là các chân ngõ ra:
void setupO
p in M o d e (i,O UTPUT);
Hàm tiếp theo là hàm rút các bit từ biến trạng thái StateLE D :
boolean xbit;
unsigned cha r x c h a r= -1 ;
xbit= xchar;
return xbit;
209
CBựưHS 5:6IẼB IBẾII VÀ TẠI 1(1 tut 12lf l Ĩ I I lẵẮK
Tiếp theo sẽ là hàm thay đổi giá trị cho LED theo các bit chứa trong
biến StateLED:
void LEDChangeQ
for(int i=0;i<12;i++)
digitalWrite(i,BitState(i));
Cuối cùng chúng ta sẽ thực hiện chương trình chính để LED hoạt động
theo ý muốn của minh:
void loopO
Trong chương trình chính, chúng ta sẽ tạo một vòng lặp cho phép lâp
qua từng trạng thái của mảng hiệu ứng C all để biểu diễn hiệu ứng thứ nhất.
Trong vòng lặp hiệu ứng, bạn có thể sử dụng số phần từ cùa mảng
(số trạng thái LED của hiệu ứng) thay vi sử dụng hàm sizeof như trong chương
trình trước.
delay(500);
LEDChangeQ;
210
CHƯƠNG S: ĐIẾU IHIẾN VÀ TẠI 1ÊI I m t t l £ l TIEO H Ả m
T rong vòng lặp trê n chú ng ta đọc giá trị các m ảng chứa trong ROM
bằng hàm p g m _ re ad_ w o rd_n ea r(add ress) được cung cấp bởi thư viện.
Hàm này sẽ giú p bạn đọc các giá trị có độ dài 16-bit từ m ộ t địa chỉ
trong ROM. Đ ịa ch ỉ này là số 16-bit. N goài ra bạn có các hàm đọc giá trị m ảng
từ rom như sau:
ad dress_long là số 32-bit
G iả sử bạn m uốn lấ y phần tử thứ 2 của m ảng A kiểu cha r thì bạn sẽ
viết câu lệnh như sau:
T iế p theo là thực hiện các hiệu ứng còn lại trong các m ảng hiệu ứng
tiếp theo:
211
CatftfNG5: EẼq mếll VÀ TẠI 1*1 ếw » lĩ» Ĩ E I n in iw w ia i« iH ặ
delay (300);
LEDChangeQ;
delay(300);
LEDChangeO;
Sau khi đã lập trình xong bài này, bạn đã có một kiến thức cán thiết
để tự minh tạo ra một bảng quảng cáo LED đơn giản hoặc điều khiển LED
một cách tự do theo ý muốn riêng của bạn bằng bo mạch Arduino.
Chúng ta sẽ kết thúc phần điểu khiển LED đơn bằng một bài tổng hợp
các hiệu ứng mà bạn đã học. Các hiệu ứng của bài này sẽ hoạt động liên lục
Khi có nút nhấn đổi hiệu ứng thì lập tức cho chương trình thay đổi hiẽu ứng
của LED đơn.
Các hiệu ứng cũa bài này là tổng hợp các hiệu ứng của các bài trước
Nhưng trong bài trưâc, bạn thực hiện chuyển đổi các hiệu ứng một cách
tự động.
Còn trong bài này, chúng ta sẽ thực hiện thay đổi hiêu ủng theo SƯ
212
UMIMIAM CH K í í l Tặ IOC HtfdNCS: SẾIIIỂI VÀTẬIBỆItKBinĩlĩlMẢK
BÀI TẬP 3: CHUYỂN HIỆU ỪNG SÁNG LED BẰNG NÚT NHÂN
Phán cứng
C h ún g ta tiế p tụ c sử dụng các đèn LED (12 LED ) và các điện trở (12
điện trà) để hạn dòng bảo vệ LED , điểm mới ở đây làm ạch điện cỏ thêm m ột
nút nhấn để ch u yể n hiệu ứng cho m ạch. C ác bạn có thể sửdụng các đèn
LED siêu sáng để làm nổi bật các bảng quảng cáo.
• N út nhấn
C ác châ n dương của LED nối lần lượt với các chân 0 đến chân 11 của
bo m ạch A rduino.
Trong bà i tập nà y bạn dùng thêm m ột điện trở 10K ohm để làm điện
trở kéo xuống cho nút nhấn. Đ iện trở này có nhiệm vụ giúp cho ngõ vào nút
nhấn không ở trạng thái lơ lửng, nếu ở trạng thái này m ạch sẽ bị nhiễu và ngõ
vào chú ng ta dọc được sẽ có lúc là mức tháp hoặc có lúc là mức cao dẫn đến
chương trinh ch ú n g ta ho ạt động sai.
211
CHƯƠNG 5 : BIẾO KHIẾU V Ả T Ạ I I I Ệ I Ĩ H t 12 L ĩ l TMEO HẢIK M W IM C W IH H l
Vì vậy bạn sẽ nối một đầu cùa nút nhấn với điện áp 5V cùa bo mạch
Arduino và một đầu nối vđi điện trỏ nối xuống GND bo mạch.
Điểm kết nối của điện trở và nút nhấn sẽ nối với chân sỗ 12 cùa bo
mạch Arduino.
Bảng dưới là kết nối chân của LED với bo mạch Arduino.
BO M Ạ C H A R D U IN O LE D
C h ân số 0 LED 0
C h ân số 1 LED 1
C h ân số 2 LED 2
C h ân số 3 LED 3
C h ân số 4 LED 4
C h ân số 5 LED 5
C h ân số 6 LED 6
C h ân số 7 LED 7
C h ân số 8 LED 8
Chân số 9 LED 9
C h â n số 10 LED 10
C h â n số 11 LED 11
C h ân số 12 N ú t nhấn
Hinh trang bẽn là kết nối mạch trên test board và trên Protets
214
ỈNỴN H U 131 a INI m OVI ụ %ỹii opis :s SN0J1HJ 9 ỈI m I0H9M i n M V IM IN IV
CHƯƠHC5: BIẼB iHIẾH VÃ TẠI I f I l u 1?LEDTBI MẢI* H U W IU M 3 I * W l I f »
216
A IM IW I m t i l u ttftfl T f BỌC CHƯƠNG S: BIỂD KHIỂN VÀ Ĩ Ạ I 1ỂI I w t t LEI TBEB M Ả M
SB
>» JZ
M» tSL
«7 £
i
G3
ÈS
E u
K
r^.
UJ
a
32 a
•JOB
CD
tx
§
LED!
N
M! M X
UJ
Ml
n»
m X X M
a
Vca
*«r
a IK w Ml h"
UJ •Wc
**«J h» ỳmm H"
-23 ẵ
M ’e y
10
H*
=5 X M XJ *5 -«* s
BO as as c
§ SE ae
Ck.
*t=5 uu SC
GO fitC MS
X M M
l*J
ae
LED 8 LED 7
w « ĨX
M X X
LED 9
M *X!
a
LU *2
_ M S''*'
LED
11
***•
§
•M
£+1
LO
9+1
_ - +
M +
fttf + *4*fl
/
/ m
tv M
/ a- s
CHtftfNG 5 : B IẼ P IH IỂ K VÀ TẠO I Ệ I ẩ m K LEB H I H Ả I * lẮ M H M I t f »
Phần mềm
Chương trình cho bài tập này được viết bẽn dưới có nhiém vụ thực
hiện chức năng tạo nhiều hiệu ứng cho LED theo sự điều khiển lừ nút nhán
Bài tập này tổng hợp 5 hiệu ứng từ các bài trước và kết hợp giữa cách điéu
khiển LED có quy luật và điều khiển LED theo mảng được chứa trong ROM
Chương trìn h chuyển hiệu ứng LED bằng nút nhấn
// Chuyển hiệu ứng led bàng nút nhấn
II Khai báo thư viện cho phép tạo mảng trong ROM
#include <avr/pgmspace.h>
218
MUM l Ầ i t n K M iĩặ H t C«fK S: lế l Mẩl VẰTẠI BỆI i t ư Itl TKI HẨNt
}
// Hàm rú t các bit riêng lẻ trong m ột biến
boolean B itS ta te (ch a r pos)
{
boolean xbit;
unsigned cha r xchar=-1;
if (po s<16) xchar=0x1 & S tateLE D > >pos;
xbit=xchar;
return xbit;
í
if (digita lR e ad(B u tto n)= = 1 ) // K hi nhấn nút
[
w h ile (digitalR ea d(B u tton )); // Sẽ trong vòng lập vô tận nếu chưa thả nút
{
delay(1);
C h a n g e E ffe ct(); // Kiểm tra nút nhấn
21!
CHƯƠNC S: BIỂO KH1ẾH u TẠO l Ẹ l ỬH6 ự l i l T H E I M Ấ «
220
AIHUHIAM CH KrtlTf mc CHƯƠNG 5: BIỂU KHIỂN VÀ TẠB BIÊU ĨÍHC ư l£B THEO MÀN6
LE D C hangeO ;
C han geE ffect();
if(E ffe ctN um != 1 ) break;
}
break;
{
D elayC he ckK ey(3 00);
S tateL E D = pgm _ rea d_ w ord _ne ar(C al3 + i);
LED C hangeO ;
C hangeE ffect();
if(E ffe ctN um !=2 ) break;
}
break;
case 3: // H iệu ứng 4
D elayC he ckK ey(2 00);
S tateL E D = ~ S tateL E D ;
LE D C hange();
if(E ffe ctN um != 3 ) break;
break;
{
for(int j= 0 ;j< i;j+ + )
{
D elayC heckK ey(IO O );
C a l4 = C a l4 » 1 ;
S tateL E D = C al4IC a l5;
221
CHƯƠHB 5: CIẼD laẾN VÃ TẠI l f l fw 1? Lĩl IIIH Ầ M u iw iiu ia i« W ĩ(ặ
LEDChangeO;
if(EffectNum!=4) break;
}
if(EffectNum!=4) break;
Cal4=0x1000;
C a l5 = C a l5 « 1 11;
}
if(EffectNum!=4) break;
DelayCheckKey(IOO);
Cal5=0;
Cal4=0x1;
for(int i=11 ;i>0;i~)
{
for(int j=0;j<i;j++)
{
DelayCheckKey(IOO);
Cal4=Cal4<<1;
StateLED=-(Cal4ICal5);
LEDChangeQ;
if(EffectNum!=4) break;
}
if(EffectNum!=4) break;
Cal4=0x1;
C a l5 = C a l5 » 1 10X800;
}
DelayCheckKey(100);
)
)
Hãy viết chương trình, biên dịch và tải xuống bo mạch A rd L .n o . Nếu
kết nối mạch đúng và mạch hoạt động chính xác thì đầu tiên chưong trinh sẽ
cho thực hiện hiệu ứng không quy luật. Sau khi bạn nhấn nút thi cnưong trinh
cho phép đổi hiệu ứng và khi đổi hết 5 hiệu ứng thi chương trinh sẽ t-iưc hién
lại hiệu ứng đầu.
222
! AIHimiẤM Cll M ĩtừ l TỊ( l(ỊC CHƠ0N6 5: BIẾU KHIẾN VÀ TẠI B Ệ I IÍNC K IE B THEO M Ầ M
P R O G M E M prog_uint16_t
C a ll []= {0 x8 6 1 ,0 x4 9 2 ,0 x3 0 C ,0 x4 9 2 ,0 x8 6 1 ,0);
P R O G M E M pro g_ uin t1 6_ t
C a l2[]= {0xE 07 ,0x70 E ,0x39 C , 0x1 F 8,0x0F 0,0x060,0};
P R O G M E M prog_uint16_t
CaiatHOxOeO.OxOFO.Ox-IFS.OxSgC.OxTOE.OxEOr.O};
Sau đó bạn tạo các biế n để thực hiện các hiệu ứng có quy lu ật với tên
là Cal4 và Cal5:
unsigned int C al4,C al5;
T iếp theo là chương trình khởi tạo cùa Arduino, trong chương trình khởi
tạo bạn sẽ th iế t lập các châ n nối với LED là các chân ngõ ra và chân ngõ vào
cho nút nhấn:
void setupO
(
fo r(in t i= 0;i< 12 ;i++ )
{
pinM o defi,O U T P U T );
}
pinM o de(B u tto n,IN P U T );
223
CHƯƠNG 5 : BIẾU M IẾ N ú T Ạ I I I Ệ I Ư N C 12 l£ B T H E I M Ẩ M
Hàm tiếp theo là hàm rút các bit từ biến trạng thái StateLED:
boolean Bitstate(char pos)
{
boolean xbit;
unsigned char xchar=-1;
if(pos<16) xchar=Ox1 & S ta te L E D » p o s;
xbit=xchar;
return xbit;
}
Trong bài tập này bạn sẽ có thêm hai hàm mói. Đó là nàm Kiểm tra
nút nhấn ChangeEffect và hàm tạo thời gian đợi và kiểm tra nút nnấn cung luc
DelayCheckKey. Chúng ta bắt đầu với hàm kiểm tra nút nhấn trước:
void ChangeEffectQ
t
if (digitalRead(Button)==1) // Khi nhấn nút
{
Cấu trúc if kiểm tra xem nút nhấn có được nhấn hay khõng nếu có
thực hiện khối lệnh:
while(digitalRead(Button)); // Sẽ trong vòng lập võ tận nếu chưa
thả nút
// Sau khi thả nút thực hiện các lệnh dưới
StateLED=OxO;
EffectNum++;
if (EffectNum==MaxEffect) EffectNum=0;
Vòng lặp while có nhiệm vụ sẽ không cho thực hiện chương trinh gi khi
nút nhấn đang được giữ lại mà chưa được nhả ra. Khi nhả ra thi sẽ Khòi tạo lai
biến StateLED, đổi hiệu ứng và kiểm tra xem đã đến hiệu ứng cuối chưa. Nếu
đã đến hiệu ứng cuối thì thay đổi biến EffectNum để trở lại hiệu ứng ban đáu
Tiếp theo là hàm tạo thời gian đợi và kiểm tra nút nhấn. Nguyên lý lam
việc hàm này khá đơn giản, chúng ta tạo một vòng lặp để tạo thòi gian lâp
tương ứng với hàm delay nhưng cùng lúc đó chúng ta vẫn kiểm tra nó: nhấn
có được nhấn hay không. Hàm này có nhiệm vụ là liên tục kiểm tra nhấn
giúp chương trình không bị bỏ sót một lần nhấn nút nào. Nếu ban :-ưc hién
hàm delay như binh thường thì chương trinh của bạn có thể bị bò sót ~1Ó‘ vãi
lần nhấn nút từ người dùng. Hàm DelayCheckKey như sau:
void DelayCheckKey(unsigned int time)
224
MDUINO PAWH eng H6ƯƠI Tự HOC CHƯƠNG 5: ĐIẾU KHIỂN VA TẠO BIÊU ƯW6 ư IE I HEO MẤN6
{
for(int t=0; t<tim e;t+ +)
(
delay( 1);
C han geE ffect(); // Kiểm tra nút nhấn
}
}
T iếp theo sẽ là hàm thay đổi giá trị cho LED theo cá c bit chứa trong
biến StateLED :
void LED C hangeO
{
fo r(in t i= 0;i< 12;i++ )
(
d ig ita lW rite (i,B itS ta te (i));
}
}
C uối cùn g chú ng ta sẽ thực hiện chương trình chính để LED hoạt động
theo ý m uốn củ a mình:
void loop()
{
Trong chương trình chính chú ng ta sẽ thực hiện cấu trúc switch...case
để chọn hiệu ứng điều khiển theo biến E ffectN um . Và giá trị của EffectN um
sẽ ứng với từng hiệu ứng riêng biệt, c ấ u trúc switch...case trong ngôn ngữ
Arduino như sau:
sw itch (b iế n _ so _ sá n h )
{
case g iá _ trị_ s o _ s á n h _ 1 :
// M ã lệnh
break;
// Mã lệnh
break;
225
CMƯƯHG 5 : 6 IẼ 8 IH 1 Ế N VẦ T Ạ I I t l m 1? L H T E I M km
// Mã lệnh
break;
}
Và cấu trúc này có nhiệm vụ so sánh các giá trị so sánh vói biến Sũ
sánh để rẽ nhánh cho chương trình. Và mỗi giá trị so sánh ban có thể thực
hiện cùng một khối mã lệnh. Nhưng chú ý rằng, khi kết thúc môt khối mã lệnh
th) bạn phải thêm lệnh break để thoát khỏi cấu trúc. Nếu không có lênh break
thl chương trình sẽ rẽ nhánh vào khối lệnh có giá trị so sánh bang vói biến vá
sau đó thực hiện các khối lệnh còn lại đến khi hết cấu trúc swi:ch_case Vi
vậy bạn hãy chú ý điều này.
Trở lại với chương trình, bạn có thể thấy, chúng ta thực hiện rẽ nhánh
cho hiệu ứng 1 khi biến EffectNum có giá trị là 0:
switch(EffectNum)
{
case 0: // Hiệu ứng 1
for(int i=0;i<=6;i++)
{
DelayCheckKey(500);
StateLED=pgm_read_word_near(Cal1+i);
LEDChangeO;
ChangeEffect();
if(EffectNum!=0) break; // Kiểm tra nếu nút có nhấn
// thì thoát hiệu ứng đề thực
II hiện hiệu ứng khác
}
break;
ở đây chúng ta sẽ thực hiện hiệu ứng 1 với hàm delay quen thuòc cùa
bo mạch Arduino đã chuyển thành DelayCheckKey để chúng ta thưc hiên viéc
đợi nhưng vẫn kiểm tra nút nhấn song song. Và trong khối lệnh này có thém
dòng lệnh:
if(EffectNum!=0) break;
Chúng ta thực hiện dòng lệnh này để đảm bảo rằng khi nhấn nút thi
lập tức sẽ đổi hiệu ứng. Nếu không có dòng lệnh này thi chương trinh sẽ chay
hết hiệu ứng hiện tại rồi mới tiến hành đổi hiệu ứng.
Tiếp theo là các cấu trúc rẽ nhánh cho các hiệu ứng:
226
I AimiM 8AM CM WWl If ipc CHƯƠNG 5: ĐtẺO IHIẾH VẢ ÌẠ » 1 Ệ Ì t u t t t IE I TBEa MẢNC
{
D e layC he ckK ey(3 00);
S ta te L E D = pgm _ rea d_ w ord _ne ar(C al2 + i);
LE D C h ang e();
C h an geE ffect();
if(E ffe ctN um != 1 ) break;
)
break;
case 2: // H iệu ứng 3
fo r(in t i= 0;i< = sizeo f(C al3 )/2 ;i+ + )
{
D elayC he ckK ey(3 00);
S ta teL E D = pgm _ rea d_ w ord _ne ar(C al3 + i);
LE D C h ang e();
C h an geE ffect();
if(E ffe ctN um != 2 ) break;
}
break;
case 3: // H iệu ứng 4
D e layC he ckK ey(2 00);
S tateL E D = ~ S tateL E D ;
L E D C hange();
if(E ffe ctN um != 3 ) break;
break;
{
for(in t j= 0;j< i;j+ + )
227
CHƯữNG 5 : ĐIẾU IHIỂNV Ả TẠI j g j t u t 12 LED T E I I I A w
DelayCheckKey(100);
C a l4 = C a l4 » l:
StateLED=Cal4ICal5;
LEDChangeO;
if(EffectNum!=4) break;
)
if(EffectNum!=4) break;
Cal4=0x1000;
C a l5 = C a l5 « 1 l1 ;
)
if(EffectNum!=4) break;
DelayCheckKey(100);
Cal5=0;
Cal4=0x1;
for(int i=11 ;i> 0;i-)
{
for(int j=0;j<i;j++)
{
DelayCheckKey(IOO);
C a l4 = C a l4 « 1 ;
StateLED=-(Cal4ICal5);
LEDChangeQ;
if(EffectNum!=4) break;
}
if(EffectNum!=4) break;
Cal4=0x1;
C a l5 = C a l5 » 1 10X800;
)
DelayCheckKey(100);
)
Các hiệu ứng này là các hiệu ứng quen thuộc bạn đã từng thực hiér'
hiện ở các bài trước. Bạn kham khảo lại ỏ các bài tập trước và trong từng khỉ
lệnh cũng có một số thay đổi về kiểm tra nút nhấn và thoát hiéL ứng đề phL
hợp với chương trình của chúng ta.
228
I ABŨBIHO BAMB cao NCƯỨI Tự BỌC CHƯƠNG 6: QOẢNG CAO v đ l LED H A TBẶN
CH M G 6
Hình bên mô tả
một cấu trúc của m ột ma
trận 7x5 với 12 ngõ ra
được đặt tên từ C1...C5
và D1...D7 (C đại diện
cho Control line và D là
Data line). Bên trong các
ô của ma trận LED là các
LED phát sáng. Trong
mô hình, cathode (cực
âm) của các LED trên
mỗi cột được nối chung
với nhau và ngõ ra chung
là các ngõ D (Data).
C ác Anod của cá c LED trên m ỗi hàng được nối chung tạo thành các
đường D (Data). T hôn g thường, các đường D và c được chọn sao số số lượng
đường D nhiều hơn đường c hoặc sao cho số lương các đường D gần nh ất với
số 8, 16, 3 2 ..(lũy thừa của 2). Lý do củ a v iệ c chọn này nhằm giảm kích thước
bộ font chứa các ký tự hoặc hình ảnh hiển thị lên ma trận LED, bạn sẽ hiểu rõ
hơn khi t)m hiểu các điều khiển ma trận LED 7x5 bên dưới.
Hình trang bên m ô tả cách m a trận LED 7x5 được dùng để hiển thị
số 4.
229
CEtftfNGI: QBẢNC CÁI vfl LEI HAĨIẬI
Các cột khác được thực hiện tương tự, nhưng làm sao hiển thị các CÕI
VỚI các đèn LED sáng khác nhau trong khi các ngõ Cathode cùa chúng đéu
được nối chung (thành các chân D). Ví dụ, khi kéo tất cả 5 chân C0_C4 lên
mức cao và xuất tín hiệu ra các chân D, khi đó tất cả các LED trẽn dùng môt
hàng sẽ sáng hoặc tắt như nhau. “Bí quyết” ở đây chính là kỹ thuật "quét'
chúng ta sẽ hiển thị tuần tự các cột với các giá trị tương ứng của chúng chứ
không hiển thị đồng thời. Trong ví dụ hiển thị số ‘4’, trước hết hãy kích chân
CO lên cao trong khi các chân C1 ...C4 ở mức thấp, xuất tín hiẽu ra các chân D
để hiển thị lên cột c o . Tiếp theo kéo chân C1 lên cao và các chân Control
khác ỏ mức thấp, xuất dữ liệu ra các chân D để hiển thị cột C1-CỨ như thế
cho đến khi hiển thị hết các cột thì quay lại cột c o . Quá trình này gọi là "qué!
LED” . Do tốc độ “quét” rất cao nên chúng ta sẽ không có cảm giác “nháp
nháy” , các cột của ma trận như được hiển thị đổng thời. Chú ý là độ sáng cùa
LED phụ thuộc vào số cột LED, nếu bạn “quét” quá nhiều cột LED, tl lệ thời
gian “ON" của mỗi cột sẽ rất nhò so với thời gian “OFF" vì phải chò quét các
cột khác. Vi thế nếu ma trận LED có nhiều cột hoặc khi ghép nhiếu ma trân
các mạch driver cần được sử dụng để đảm bảo độ sáng của LED.
Già sử mỗi LED đại diện cho 1 bit và các LED sáng đại diện cho giá tri
nhị phân 1 trong khi các LED tắt là số 0. Hlnh 2b thể hiện mô hình số nhị phỉn
cho trường hợp hiển thị số 4 trên ma trận LED 7x5. Nếu xem mỗi cột cùa ma
trận là 1 con số 7 bit thi 5 giá trị cần thiết để hiển thị số ‘4’ là: OxOC, 0x14
0x24, 0x7F, 0x04. Bộ 5 giá trị này tạo thành mã font cho ký tự '4'. chúng sẽ
được định nghĩa trước và lưu trong bộ nhớ của chip điều khiển (AVR). m6i lán
một ký tự được yêu cầu hiển thị, bộ font tương ứng của ký tự đó sẽ được
“load” ra và xuất lần lượt trên các đường Data, đây chinh là lý do tai sao chúng
ta gọi các đường D là các đường Data. Cách “quét” LED vừa trinh bày là cácf'
“quét ngang”, bạn có thể thực hiện “quét dọc” nếu ứng dụng yêu cáu. Trong
phương pháp quét dọc, các chân hàng chung sẽ dược dùng để cnọn hàng
cần hiển thi, dữ liệu sẽ xuất ra theo từng hàng trên 5 cột và lán lượt thay ái'
hàng (hàng 0 trước, đốn 1 ...và cuối cùng là 6).
230
I A IM IM I Ấ M t M K i l l T f IQC CHƯƠNG l : QOẢNC C A l ygl LED MA TKẬH
S o sánh 2 cách q u é t cho trường hợp m a trận LED 7x5, rõ ràng trong
cách quét ngang ch ú n g ta ch ỉ cần qu ét 5 cộ t cho m ỗi lần LED nên tỉ lệ thời
gian ON sẽ cao hơn (1/5 so với 1/8 của cách quét dọc). M ặt khác, nếu thực
hiện quét dọ c ch ú n g ta cẩ n 8 số để tạo thà nh 1 bộ font cho m ột ký tự và vl th ế
tốn nhiếu bộ nhớ hơn cho v iệ c lưu trữ bảng font. T ùy theo bạn sử dụng cách
quét nào mà xâ y dựng bảng font cũng được xây dựng tương ứng cho cách
quét này. C ác m a trận LED được sản xu ấ t thành các m odule. Ví dụ loại LED
đơn sắc P10, m ỗi m odul có 16 hàng và 32 cột. K hoảng cách điểm ảnh củ a
m odule P10 là 10m m . Do vậ y m odule P10 có kích thước là 16x32cm . Khi
muốn làm m ột biển quản g cá o LED ma trận, bạn phải tính toán dựa trên
những kích thước có sẵn này. Bạn cần tính toán để chọ n nguồn, điện trở hạn
dòng..., m ói có thể th iế t kế bảng LED hoàn chỉnh. Phần tính toán th iế t kê
không phải trọng tâm c ủ a ch u yê n đề này!
Cấu tạo m odule LED P10 và cách kết nối
M odule LED P10 này có 32 cột và 16 hàng tương đương với kích thước
160 X 320 mm. Đ â y là loại chịu nước nên khuôn nhựa được đúc rất khít với bóng
LED để tránh nước. C h iều dà y của khuôn nhựa cũng dày hơnloại sem i outdoor.
Mặt sau của m odule là m ạch điện tử có các vị trí để cắm jăc tín hiệu và cấp
nguồn nuôi. T rên thà nh của khuôn nhựa ở m ặt sau cũng có các vị trí để bắt vít
và rãnh để lắp gioăng chống nước. Ngoài ra, bạn phải chọn loại m odule thích
hợp với kích thước và tầm quan sát của bảng. Nếu bảng ỏ gần, bạn phải chọn
loại module có phân giải cao như P10, P16. C òn ở xa, bạn ch i cần loại cỏ độ
phân giải thấp như P20 chẳng hạn, hiện nay có nhiều loại m odule có kích thước
khác nhau, ở đây liệ t kê m ộ t vài loại để cá c bạn tham khảo.
P10 16 cm X 32 cm 10 mm
P20 16 cm X 32 cm 20 mm
231
CHtftfNG 6: QUẢN6 CÁO V Ỉ I L E I H A H A W w w iM n n W m c Ị
Việc sử dụng module ngoài trời hay trong nhà cần phài qLan tâm Nén lá
trong nhà bạn không cần phải để ý đến việc chống nước, chí gnép lam sao cho
khít là được. Nếu là loại ngoài trời, module sẽ có một gioăng cao su phia sau.
Chúng ta phải làm viền để ép sát được gioăng này mới đàm bảo kin nước. Néu
không ta sẽ phải làm hộp chắn nước tốt. Các bạn lưu ý nên ghép các module sao
cho dễ tháo lắp nếu có trục trăc. Nếu không, mỗi lần xử lý lại phài dõ các biển ra
thì rất mệt. Khi mua module, chúng ta sẽ được cung cấp đù cáp tín hiêu và cáp
nguồn kết nối tất cả các module với nhau. Sau khi ghép hoàn thiên các module
chúng ta tiến hành nối cáp nguồn và cáp tin hiệu. Trong chương này chúng ta sê
tập trung vào phần điều khiển LED ma trận đơn giản 8x8. Các loai LED ma trân
thực tế có số LED lớn nhưng chúng hoạt động với nguyên lỷ co bàn như các LED
ma trận nhò. Các bạn sẽ học cơ bàn vể các LED ma trận trước khi ban muốn thực
hiện một LED ma trận lớn. Vi một LED ma trận lớn ngoài cần số lưong chán điếu
khiển rất lớn mà còn cần một mạch nguồn đủ công suất để cung cấp cho chúng
hoạt động. VI vậy, để thực hiện một LED ma trận hàng ngàn LED knông hé đon
giản. Nhưng cũng không khó đến mức mà chúng ta không thể thực hiên.
Lưu ý : Nếu để làm quảng cáo, có nhiều bo mạch chuyên dùng ơung sử dụng
các loại CPU khác nhau phù hợp cho mỗi loại bảng và kich thước của bạn.
Giá cả có thể từ khoảng 250 ngàn đến vài triệu có cả phần mém chuyển dùng
rất dễ sủ dụng thay vì dùng bo mạch Arduino. Ở dây ta dùng bo mach Ardumo
vì Arduino còn có thề làm nhiều chuyện khác nữa mà các bo mach chuyên
dùng cho điếu khiển LED quảng cáo này khó thực hiện. Bạn nên chon CPU có
tinh năng diều khiển được số lượng điểm ảnh cao hơn số lượng điềm ảnh trên
bảng của bạn. Như vậy khi chạy, hình ảnh hoặc chữ mới không bị giật. Nếu bảng
ít hàng thì CPU khõng cần bộ chia kênh (adapter). Bạn nên mua cáp tin hiệu w
CPU ra module dài một chút để dễ thao tác và đặt CPU ở vị tri mà bạn muốn.
Mỗi hàng module trên bảng ta cần có một cáp tin hiệu nối với CPU. CPU ơược
kêt nôi với máy tinh bàng cổng com. Nếu bạn muốn dùng cổng USB thi phải mua
thêm một cấp chuyển dổi USB to Com. Nên mua loại tốt dề đảm bào mua vé là
dùng được vì thị trường nhiều loại có chất lượng thấp. Khi mua CPU ban cũng sẽ
được nơi bán cung cấp phần mềm điều khiển, nạp chữ hoặc hình ảnh Mỗi phán
mềm có cách dùng khác nhau, các bạn có thề tham khảo cách dùng các chương
trình này ở phụ lục cuối sách.
Z3Z
<ABCUINO PASH CHO N6ƯOI Tự HỌC CHƯƠNG 8: QUẢNG CÁO y ứ l LED MA TRẬN
Bài tập đầu tiê n trong chương này bạn sẽ làm quen với LED ma trận
bằng loại LED ma trận 8x8 đóng gói sẵn
Đ ể điều khiển các LED ma trận thì chú ng ta sẽ không thể dùng cách
thông thường là cấp điệ n áp cho các LED rồi ghim điện áp thi LED sẽ sáng.
Điều này là không thể khi bạn sử dụng LED ma trận. Bởi vl nếu dùng cách
ghim điện áp cho LED sẽ làm chú ng ta tốn rất nhiều chân điều khiển. Mà để
điều khiển LED m a trậ n ch ú n g ta dùng phương pháp quét LED.
233
CHƯƠNG 6 : QUẢNG CÀO V 0 I LEB H A THẬN U M M U a C M K M lT f*
Vì thời gian quét quá nhanh nên mắt người lầm tưỏng rằng những
điểm sáng trên LED matrận sáng liên tục.Nhưng thực tế thi chúng sáng va
tắt liên tục. Chúng taxem bài giảithích đểhiểu rô về quy tắc hoat động :
Quét LED theo từng bước
Ban đầu cột 1 được kích hoạt để nối kín mạch cột 1 cùa LED ma trận,
và chúng ta cũng xuất dữ liệu cho hàng để làm sáng LED trên cót đó. Chúng
ta cho những LED ở cột đó sáng trong một thài gian ngắn rồi lại chuyển sang
cột 2 và cũng xuất dữ liệu ỏ các chân là hàng của LED. Rồi lại cho sáng mót
thời gian ngắn và lại tiếp đến cột thứ n.
<£]
234
AIDIINO DÀNH CHO NGƯƠI ĩ f RỌC CHƯƠNG 6: QUẢNG CÁO v d l LED MA TRẬN
Phần cứng
Sau khi bạn đã làm quen với cá c LED ma trận và tìm hiểu các nguyên
lý hoạt động của chú ng thì chú ng ta sẽ bắt đầu phần lắp m ạch cho bài tập
này để chúng ta tiến hành lập trinh và điều khiển LED theo nguyên tắc hoạt
động ưên. Trong bà i tập này, chú ng ta sứ dụng m ột bộ LED ma trận 8x8 (64
LED) và các điện trở để hạn dòng cho LED ma trận. N goài ra các bạn cũng
có thể dùng thêm cá c tra n sisto r để kéo dóng cho LED ma trận.
• LED ma trận 8x8.
• 8 điện trở hạn dòng 220 ohm.
Kết nối phần cứng
K ết nối m ạch như hlnh trang bên với các điện trở hạn dòng cho LED
ma trận và chúng ta sử dụng thêm hai chân tương tự cù a board m ạch A rduino
là A4 và A5 để kết nốl với các ngõ và o của các hàng LED.
ỈỈS
CHƯƠNG E: QUẢNG CÁO vứ l LED H A TgẬH A ID I M IẰ M C II K H H f ĩ
Chú ý: Có thề LED ma trận các bạn sử dụng khác VÓI LED n a trận trinh
bày trong sách, vì vậy bạn nên tim tài liệu kỹ thuật cùa chúng đẽ két nõi mạch
một cách chính xác.
Bạn kết nối với bo mạch Arduino theo bảng sau:
Chân số 8 Hàng 0
Chân số 9 Hàng 1
Chân số 10 Hàng 2
Chân số 12 Hàng 4
Chân số 13 Hàng 5
Phần mềm
Chương trình được viết 0 trang bên có nhiệm vụ thực hiên quét LED
ma trận. Và chúng ta khởi tạo các giá trị LED hiển thị để thực hién hiển thi
chữ A trẽn LED ma trận. Trong bài tập này sẽ thực hiện cách q iié: LED đon
giản và các hàm ở bài tâp này được sử dụng ở các bài tập sau nên ban cắn
phải tham khảo hỷ.
236
ARDOINO DANB CHO N6ƯƠI Tự HOC CHƯƠNG 6: qOẦNB CẢO VƠI lED MA TRẬN
2 2 ĩr <::
238
ỉ A tM IK O DÀNH CHO NGƯƠI Tự HỌC CHƯƠNG 6 : QUÀNG CÁO V O I LED M A H Ậ N
Tìm hiể u p h ầ n m ềm
{
for(in t i= 0;i< 14 ;i+ + )
{
p in M o d e (i,O U TPU T);
)
p in M o d e (A 4 ,O UTPUT);
p in M o d e (A 5 ,O UTPUT);
239
CHHHN6 6: QUÀN6 CAO VỜI l i l MA TKÃN m i H i t i CM m i l T Ị K
Chương trinh khải tạo trong bài táp nay để thiết lãp c=.c ngõ ra cho cac
chân nối với LED ma trận từ chân số 0 đến chăn số 13 va nã C"ẳn ‘ uong tự A4
và A5. Hai chán tưong tự này bạn vẫn có thể điều khiển nnư c ic cnán khác
Tiếp theo là hàm rút bit từ biến:
boolean BitState(char val, char pos)
{
boolean xbit;
unsigned char xchar=-1;
if(pos<16) xchar=0x1 & val>>pos;
xbit=xchar;
return xbit;
)
Trong các bài tập LED đơn bạn chỉ thực hiện rút bit cùa mót biến có
định, nhưng trong bài tập này chúng ta sẽ cải tiến hàm rút t : nay để nó có
thể rút bit từ một biến bất kỳ nào đó. Chúng ta thực hiện thay đổi hàm này
nhằm mục đích phục vụ cho việc rút bit của nhiều biến va giá trị khác nhau
trong chưdng trình. Tiếp theo là hàm điều khiển các côt của LED 'na trân:
void ChangeCol 0
{
for(int i=0;i<8;i++)
(
digitalWrite(i,BitState(LEDCol,i));
}
}
Hàm này là chính là hàm ChangeLED trong các bài táp LED đon
Nhiệm vụ của hàm này là thực hiện quét cột cho LED ma trận.
Sau đó chúng ta sẽ tạo hàm để thực hiện việc xuất dữ liêu cho LED
ma trận khi quét từng cột:
void ChangeDatafchar index)
{
for(int i=0;i<6;i++)
{
digitalWrite(i+8,!BitState(LEDData[index],i));
}
digitalW rite(A5. 'BitState(LEDData[index].6)):
digitalWrite(A4, !BitState(LEDData[index],7)):
240
I AliMW DANHCHONGƯỨIĩự HỌC CHƯƠNG 6: QQẢNC GÁOvđl IEP MA TKẬN
Hàm này có m ục đích tương tự như hàm ChangeLED nhưng trong bài
tập này chúng ta không có các chân số trải dài từ 0 đến 15 nên bạn đã phải sử
dụng thêm hai chân tương tự. Và các LED dữ liệu sẽ là các hàng của LED ma
trận. Chúng ta nối với các hàng LED ma trận bắt đầu từ chân số 8 nên trong
vòng lập chúng ta cộng thêm 8. Sau khi thiết lập các bit cho các chân từ 8 đến
13 thì chúng ta rút bit điều khiển các chân tương tự theo giá trị của dữ liệu.
T iếp theo là hàm quan trọng nhất của chúng ta. Hàm qu ét LED:
void LED M atrixQ
{
Trong hàm này bạn sử dụng m ột vòng lặp để quét hết 8 cộ t của LED
ma trận:
for(int i= 0;i< 8;i+ + )
Sau đó chú ng ta sẽ thực hiện quét cột bằng phương pháp dịch phải.
Mỗi lần quét cộ t ch ú n g ta sẽ thay đổi dữ liệu cho hàng tương ứng với cộ t đó
để hiển thị chính xác các dữ liệu có trong m ảng của chú ng ta, khi đã qu ét đến
cột cuối cùng thi thực hiện qu ét lại từ đầu:
}
}
void loopO
{
LED M atrixO ; // H iển thị k í tự A
Bạn đã thực hiện xong bài tập, trước khi thực hành các bài tập điều
khiển LED ma trận phức tạp hơn các bạn hãy thực hành mô phòng 1 LED ma
trận được điều khiển bởi A rdu in o Proteus (chương trinh hiển thị kí tự “A ” trên
LED ma trận đã trinh bày).
241
CMƯƯNt 8: m iẢ H t C ÁI n i l LEI H A T IẬ « m « 1 lẰ liM I K H in ^ l
Sau khi bạn tải thư viện từ trang web về thì chúng ta sẽ cố môt thư
mục bao gồm các thư mục như hình: Bây giờ bạn đã có thư viên của Arduino
cho Proteus. Để sử dụng thư viện này, trong Proteus bạn cần phải cài đát nó
vào thư mục “Library" của Proteus:
MDOIM) DAMi CHO NGƯUI Tự UQC CHƯƠNG E: QUẢNG GÁO »ứl LED MA H Ậ U
. A R D U IN O .ID X
Nếu hoàn tất quá trình trên thì ỊU Adobe Uể ^ S c ĩ,n ISỈS.EXE
chúng ta có thể sử dụng bo m ạch A rduino 3» Adobe £» Defragger
trong Proteus. C òn nếu cỏ vấn đề với 4 * Adobe £» OpenWiih...
đường dẫn củ a bo m ạch A rdu in o thì bạn ■ ă ProtausV Send To
hãy sử dụng cách sau để tìm đường dẫn Ể j| Virtual Ne — --------------------
đúng của Proteus. Xz Cut
;Q Vrtual us ~ r "
—1 Copy
Chọn Start > All P rogram s-> I I ARES7F1— -----------------------
Proteus 7 Professional và nhấp ch u ộ t ARES tìnịị & i,e S h o rto jt
phải vào “ISIS 7 Professional" sau đó ẵ AVft studs
" Rename
chọn Properties như hình: H ộp tho ại như IJrg EasyHDl 1------------------------
hlnh dưới xuất hiện, bạn chọn Find T arg et
Gertatfor S ò r tb » N » «
để tim đường dẫn của chương trình
05: ISIS 7 Pr
Proteus trong m áy tinh bạn.
------- n -
ISÌS 7 Professional
Comment
243
CHƯƠNG 6: QUÀNG C Á I v l l LE I MA TRẬN O M IU M C H K M I ĩ H c
Trong bài tập này chúng ta sẽ mô phòng mạch gồm 1 LED ma trặn, B
điện trở và một bo mạch Arduino Uno. Vì vậy, chúng ta cần phải lấy 3 linh
kiện là LED ma trận, điện trở và Arduino từ thư viện. Sau đó sẽ lần lưọt đưa
chúng vào bản vẽ Proteus để mô phỏng.
Bạn lấy các linh kiện bằng cách lấy chúng từ thư
viện. Để mở thư viện linh kiện, bạn hãy chọn biểu tượng
sau trên thanh trình đơn ngoài cùng bẽn trái cùa Proteus:
244
M M IIO i à m cho ngươi tự bqc CHƯƠNG I : QUẢNC C Ả IV ứ l LED MA THẬN
Auto tide
1F 7 !
Ị ........ S&LĨ*...
►Wrh&TnfeWwd?? r
ittí* (ri, *,*)<*? r
frwr.
ỊUrapeoAedl
Analog iCi
l Capaãlois
(NpthnBĩetecíedlapofvie«M)
' CMOS 4000 m in
ị Cinrwclcnx
; Dalí Converted
: Debugong I oolỉ
V Diode*
• ECí. 10000 Senet
ị: Electi0ín«char»caỉ
• EmUatoi
'ị Indudus
V Laolace Primỉiveỉ NotMich CÍMIÍ.
; Mechanicỉ Please artel one 0»mo»e keywords ỏnđ/oI
>: MemoiylCj select â Category. Sub-Càtegoiy 01Man«lactue»
• Miaoprocesscr ICt
Ị Mi*c*laneous
: Modeling Pnmrtivet
'í opaduivil Ampu«3ỉ
M
"3
Z4S
CHƯƠNG 8: QUẢNG CÁO v ứ l LED HA TBẶN UIBM l u m i n m
Arduino Mega2560:
I Ltoav I DgictipJkirt VSM DJ . Mcdol ỊAVR2 DLL)
IaRDUINOMEGA1280 ARDUINO AiduinoMEGA|ATmegd1280)
ARDUINŨMESA2560R3 ARDUINO AidũnoMEGA2560Rev3
Và Arduino Mega1280:
I Device ị Libary Ị Dflstiiption: I VSM D !_ u->5d |A*m2 [>ILỊ
lARDUINOMEGA128Ũ ARDUINO AfduinoMEGA|ATmegal 280) !j-
AROUINOMEGA2560R3 ARDUINO AfduinoMEGA2560Rev3
ARDUINOUNOR3 ARDUINO A/duinoUnoR3
Bạn sẽ thêm Arduino Uno vào list linh kiện sử dụng báng cách nhấr'
đúp vào Arduino Uno. Tiếp đến chúng ta sẽ thêm điện trở vào list ỉmh kiện SỪ
dụng cho mạch mô phỏng bằng cách đánh "res" vào ỏ keyw ords và nháp
đúp vào điện trở để thêm vào list linh kiện như hình trang bên
246
A1D0IM0 DÀNH n o NCtftfl Tự HQC CHƯƠNG I : QĐẢN6 CÁO vđl IED MA TBẬN
T iếp đến, để lấy LED m a trậ n thì bạn hãy gõ từ "le d 8 x8 ’’ vào ô
keywords để thêm linh kiện LED m a trậ n cho m ạch:
Ẽ2ES32523H ✓i.WMế,
famajt ■ Ị4'f
Ị Led ÊX0 ■i Ặị 'ý
ikCihjsJwVoHfc? r MAÌF.l*8<3eiUE DISPLAY 8x8 Blue LEO Oo« Mo nx 0 Sftev
I V5M DLL Modd |LEDMfĩ<l
: /..v.^-vtnnn.n.nrvi,
. SÃ<%
Ã^f\A/VÃÃÁ~Ậr, .
íI t
247
C M S i : q i)Ầ m H I » i l LEI HẤ H A H A IM H Ắ M CM H l ĩ H t 1
Để đặt linh kiện lẽn bản vẽ, bạn hãy rê linh kiên đến vi tri thich hợp vá
nhấn chuột trái như hình dưới.
Sau khi bạn đã đặt bo mạch Arduino chúng ta tiếp tục đật LED ma
trận vào bản vẽ và chỉnh chúng sao cho họp lý với bản vẽ. CnCng ta đặt thêm
điện trở và xoay điện trở trong bàn vẽ mô phỏng.
MJILLLI
ITT I I I II
Sau đó bạn Chĩnh điện trở thành thành 220 ohm để phù họp với mạch
mô phỏng của chúng ta bằng cách: Nhấn đúp vào điện Irở và :nay đổi thông
số Resistance thành 220 như hình dưới:
Edit Component
Chúng ta sẽ đặt và sắp xếp các điện trở, LED ma trân và bo mach
Arduino cho hợp lý. Tiếp đến, chúng ta sẽ nối dây cho LED ma trân và bo
mạch Arduino như hlnh trang bên để hoàn thành mạch mỗ phỏng
24 8
AIDOIWO IAWI C M NGƯƠI T ự HỌC CHƯƠNG 6: QUẢNG CAO v đ l LED MA TBẬN
249
CHƯƠNG 6: qOÀNE CẦO wđl LEB MA H Ậ N u in n iu iC im w iT U t
Sketchbook location:
|c:’(Documents and SettíngsiMv LifeV'-ly Documents'Arduino
OK
250
A1B8IN0 DÀNB CBO NGƯỪI Tự HỌC CHƯƠNG S: QUÀNG CÁO vđt IEĐ MA TBẬH
Sau đó bạn hay ché p m ã lệnh bài tập sau vào chương trình A rdu in o
IDE để thử nghiệm hiệu ứng trê n Proteus:
// Quét LED ma trận 8x8 cơ bản
II Biến dùng đ ể chúng ta q u é t cộ t
unsigned int LE D C ol=0B 1;
// Mảng chứa giá trị chữ A kh i hiển thị
unsigned char LE D D a ta [8 ]= {0 ,0 X 7F ,0 X F F ,0X 8 C ,0X 8 C ,0X F F ,0X 7 F ,0 };
// Chương trình khởi tạo
void setupO
{
// Thiết lập ngõ ra cho các chân n ố i với LED ma trận
tor(int i=0;i<14;i++)
{
pinMode(i,O UTPUT);
)
pinM ode(A4,O UTPUT);
pinM ode(A5,O UTPUT);
)
// Hàm rút các b it riê ng lẻ từ m ộ t biến
boolean B its ta te (c h a r val, ch a r pos)
(
boolean xbit;
unsigned char xchar=-1 ;
if(po s<1 6) xchar=0x1 & val>> pos;
xbit=xchar;
return xbit;
)
// Hàm thay đ ổ i LED cột
void C hangeC ol 0
{
for(int i= 0;i< 8;i+ + )
(
d igita lW rite (i,B ìtS tate(L E D C ol,i));
ZS1
CHƯƠNG 6: qUÀNE CÁO v d l LED MA TIẶN Ắ l H M im a ilK H lT H t
}
// Hàm thay đổi LED dóng
void ChangeData(char index)
{
for(int i=0;i<6;i++)
{
digitalWrite(i+8,!BilState(LEDData[index],i));
}
digitalWrite(A5, !BitState(LEDData[index],6));
digitalWrite(A4, !BitState(LEDData[index],7));
)
// Hàm quét LED
void LEDMatrixO
{
for(int i=0;i<8;i++)
{
ChangeCol 0; // Thay đổi cột
ChangeData(i); // Thay đổi dòng
delay(5);
LEDCol=LEDCol<<1; // Dịch bit của các cột đề thực hiện pp quét
if (LEDCol==0x100) LEDCol=0B1;
}
}
// Chương trình chinh
v o id loopO
{
LEDMatrixQ; // Hiển thị kí tự A
ì
Và chọn nút V erify như hình dưới:
Sau đó chương trình Arduino IDE sẽ biên dịch chưong trinn CiO chúng
ta, những thônc số biên dịch sẽ nằm ỏ phía dưới cùa chương trim Arduino
IDE như hlnh tr: ng bên.
2S2
AIBOINO DÀNH CHO NGtftfl Tự HQC CHƯƠNG 6: QUAKE CÁP v đ l IED MA TBẬH
u Hèa: o u éc LED
v o id L E D H atrixO
<
tor. ( i r . u i = 0 ; i < 8 ; i + + )
<
ChangeCol ( ) ; / / T hay đói. c:ộu
C h a n g e D a ta ( i) ; ! ! T hey 001 dòng
de la ? ( 5 ) ;
L ED C ol=L EI)C ol«l; / / ' D ịch ã i t , cù a các c ộ t (lể . th ự c h i ệ n pp q u é t
iE (LEDCũl==OxlOO) LEDCol=OBl;
}
/ / ChiiciiỢ tìiirử i c h in h
v o id lo o ii ()
(
LEDĨĨatrix ( ) ; li H iển t h ị ! : í r.ự A
}
Bây giờ chú ng ta sẽ copy ph ần đường dẫn của chương trình vừa biên
dịch để đưa vào A rdu in o Uno trong Proteus bằng cách tô xanh phần đường
dẫn có đuôi cuối là .hex và nhấn Ctrl + C:
c7\ŨOCU>Ẽ-lVKỸLlÌ:E~lMaCALS~l\IeaiD\build620Ũ90093779ó3Ễ919S.Cmrs\OtIE
C :\B C O iffi-l\K Y L I ĩ £ “ l\IXKAIS~l\Ien?5\buildỄ2Ọ09Ọũạ3779ó369195.GBp\QỢE 6
I_LE3 «&. TRAU CO B M i.c p p .h e x ■■ - . : ‘ - - ‘
S in a re ^ ft g t c h ay y * 362 b yté ạ (eg a 32,256 te sa sia u siỉ :> "
253
CHƯđHE 6: qUÃHE C Ả I ư I l£ l H A T IÃ II U M H Ằ M C M K M ltm
1Edit C o m po nent
b e t : ' J jx |
Boot Loader Size: 1(00) 1024 words Staffs at 0x1 C (^ J 1Hide All -i
Advanced Properties:
I Disassemble Binary Code z ] | no zi 1Hide All 3
Other Properties:
254
AIDBINO DANH CHO N C V ifl Tự BỌC CHƯƠNG 6: QUÁNG CÀO veil LED MA ĨBẬH
HT7” - c i i i f /V
I i
4 /2 6 /2 0 1 * 9 :4 2 PM
6 /2 4 /2 0 H -4:42 PM
5 /2 /2 Q H 5 :43 PM
5 /5/2 0 H 7:39 PM
4/2B/201-4 1:15 PM
7/19 /20 14 11:15 AM
7 /1 5 /2 0 1 4 1:06 PM
6 /2 5 /2 0 H 2:25 PM
7/1 4 /2 0 1 4 10:54 AN
5 /2 3 /2 0 1 4 11:04 AM
4 /1 8 /2 0 1 4 3:09 PM
3 /1 9 /2 0 1 2 10:33 PM
5 /2 1 /2 0 H 3 :2 3 PM
8 /1 9 /2 0 1 2 10:37 PM
5/2 6 '2 0 1 4 1:20 PM
7 /1 9 /20 14 10:35 PM
■4/26/20 14 9 :4 2 PM
4 / 1 9 / 2 0 4 : 1 2 PM
Bạn hãy paste đường dẫn củ a chương trình A rduino vào phần F ile
name của cửa sổ này bằ ng cách chọn Ctrl + V tại ô File name.
255
CHƯÚNẼ E: QUẢNG CÁ3 v í l l ỉ l M A TIẶN U In u lu a M iK N iT f K
_ Play
ỉ ► I !► I II
Proteus: Hãy vào menu System -> Set Set Text Editor...
Anim ation O p tio n s - để chỉnh lại thời
gian giữa các khung hình và số khung Set ^ n a tio n Options..
hình trên giây để thực hiện mô phỏng S e t Sim ulator O p tio n s ,..
j i i i r i i f || J jx j
---------Voltage/Cutrerit Ranges'
Maximum Voltage: [s S PỊC Ĩ Dption;
258
A I N I M I À H n o N G tfjfl I f HỌC CHƯƠNG I: KẢM CÁI vtfl LEI MATIẬM
Khi cửa sổ mới hiển thị, bạn hãy chỉnh thông số của số khung hình
trên giây(Frames per Second) là 5 và thời gian hiển thị cùa mỗi khung hình
(Timestep per Frame) là 100 như hình dưới và nhấn OK.
Sau đó bạn lại nhấn Play để mô phỏng. Và lần này việ c mô phỏng sẽ
chính xác hơn so với khi bạn không chỉnh. Tuy nhiên, v ớ i LE D m a trậ n b ạ n
nên lắp mạch thực tế đ ể đảm báo độ chính xác
■ 10
H9
o R1
«7
*6
£ ............ I ....... ■5
■4
^5=
■3
■2
■1 B
■0 ■
221EXT>'
<TEXT>-
Trong bài tập trước, cá c bạn đã làm quen với phương pháp điều khiển
LED ma trận để sáng m ộ t ký tự trong bảng m ã A S C II với các thô ng số chú ng
ta phải tự tìm từ bả ng và thê m và o cho m àng trong chương trình ch ú n g ta.
Ngoài ra bạn đọc cũng biết m ô phỏn g m ạch th iế t kế từ A rdu in o với
chương trình Proteus.
Trong các bà i tập sau chú ng ta sẽ lập trình cho LED ma trận với mức
độ phức tạp hơn, thực hiện điều khiển các LED đơn trên LED ma trận.
257
CHƯƠH61: ệlẢM CÀI i l l LEI HA TlAW l— m ic w w ilin
Trong bài tập này chúng ta sử dụng một bộ LED ma trặn 8x8 (64
LED) và các điện trở để hạn dòng cho LED ma trận. Ngoài ra các bạn cũng
có thể dùng thêm các transistor để kéo dòng cho LED ma trận.
• LED ma trận 8x8.
• 8 điện trỏ hạn dòng 220 ohm.
Kết nối phẩn cứng
Bạn hãy kết nối mạch như hình trang bên với các điên trỏ hạn dõng
cho LED ma trận và chúng ta sử dụng thêm hai chân tương tự cùa bo mach
Arduino là A4 và A5 để kết nối với các ngô vào của các hàng LED.
Bạn kết nối với bo mạch Arduino như bảng trang bên
Phần mém
Chương trinh được viết ở Irang bên cỏ nhiệm vụ thực hién quét LED ma
trận liên tục. Và chúng ta sẽ tạo các hám có thể điều khiển các đ iể "i LED riẻng
lẻ. Từ đó thiết lập các hiệu ứng mà bạn muốn hoăc tạo thêm các nam có thể
điều khiển đơn giản hon dựa và các hàm cơ bàn trong chưang T i " ',a y .
258
U M IM IẰ M c n n r t ấ i T í iq c CHƯƠNG l : QQẢNC CẢI v đ l LĨD HA TEẬM
BO M ẠC H A R D U IN O LED M A T R Ậ N
C hân số 8 H àng 0
C hân số 9 H àng 1
C hân số 10 H àng 2
C hân số 11 H àng 3
C hân số 12 H àng 4
C hân số 13 H àng 5
253
CHưưm6: gnaw CÁI »11 IfIMẪ TiẠi U W W it W M Im
void ChangeColỊ)
{
for(int i=0;i<8;i++)
{
digitalWrite(i, BitState(LEDCol.i)):
}
AINIM l«M CIO kCưđl rặ RỌC CHƯƠNG (: SUÁKE CÁI v ỉl LED MA TRẬN
)
// Hàm thay đ ổ i dòng
void C hangeR ow (char index)
{
for(int i=0;i<6;i++)
(
digitalW rite(i+ 8,!B itS tate(LE D D ata[index],i));
)
digitalW rite(A5, !B itS ta te(LE D D ata [inde x],6 ));
digitalW rite(A4, !B itS ta te(LE D D ata [inde x],7 ));
}
261
CHƯếlK i (D À H t C ÁI » l l l i l IM TBẬH i n f 1 1 1 C lt K H I T Ị K
ChangeColO;
ChangeRow(i);
delay(5);
LE D C ol=LE D C ol«1;
if (LEDCol==0x100) LEDCol=OB1;
}
// Thiết lập ngõ ra cho các chân nối với LED ma trận
for(int i=0;i<14;i++)
{
pinMode(i,OUTPUT);
}
pinMode(A4,OUTPUT);
pinMode(A5 OUTPUT);
// Tạo viền cho LED ma trận
for (char i=0;i<8;i++)
(
SetBit(O.i);
SetBit(i.O);
SetBit(7,i);
SetBit(i,7);
}
»s?
U I W I A W C H P K tftfl T ự MỌC CHƯƠNG l : QUẢNG C Â B M đ l l£ P M A T 8 Ậ «
264
U M M DANH CHO NGƯƠI Tự HỌC CHƯƠNG (: qOẦNt CÁO v j l IE D MA TKẬH
{
int xchar;
x c h a r = ~ ( 1 « y );
)
Hàm này cũng tương tự như hàm sáng LED chỉ khác là chú ng ta dùng
toán tử AND với đảo củ a m ặ t nạ bit dùng trong hàm sáng LED.
Tiếp theo là hàm điều khiển các cột của LED ma trận:
void C hangeC ol 0
{
for(int i= 0;i< 8;i+ + )
{
d ig ita lW rite (i,B itS tate(LE D C o l,i));
)
}
Sau đó chú ng ta sẽ tạo hàm để thực hiện việ c xuất dữ liệu cho LED
ma trận khi qu ét từng cột:
265
ChJUNt t : BQÁH6 C ẦI n i l I f I H A T IẬ I U M M U B C n K N lT fW
(
digitalWrite(i+8,!BitState(LEDData[index],i)):
}
digitalWrite(A5, !BitState(LEDData[index].6)):
digitalWrite(A4, !BitState(LEDData[index],7)):
}
Và trong bài này chúng ta sẽ tạo thêm hai hàm để tắt các dòng và các
cột cho LED ma trận tránh hiện tượng bị nhiễu khi tạo hoại họa:
void ClearCol()
{
for(int i=0;i<8;i++)
{
digitalWrite(i,0);
}
}
void ClearRowQ
(
for(int i=0;i<6;i++)
{
digitalWríte(i+8,1);
)
digitalWrite(A5, 1);
digitalWrite(A4, 1);
}
Tiếp theo là hàm quét LED, hàm bài này chúng ta sẽ tnêm các phán
chống nhiễu cho LED:
void LEDMatrixQ
{
for(int i=0;i<8;i++)
{
ClearColO;
ClearRow();
ChangeColQ;
2E6
A im H I Ằ B CIG IGỨđl Tự BỌC CHƯƠNG 6: QUẢNG CÁO v íl LED MẲ THAN
}
)
Cuối cùng chú ng ta sẽ lập trình hàm tạo thời gian đợi và thực hiện
quét LED trong lúc đợi. Nếu bạn dùng hàm delay bình thường thì LED m a trận
sẽ tắt khi chương trình chạ y đến hàm delay. Vì vậy chú ng ta sử dụng hàm này
dể giải quyết sự khó khăn đó:
void D elayD isla y(in t xtim e)
{
for(int t= 0 ;t< xtim e;t+ + ){
LEDMatrixO;
}
}
Sau khi khai báo các biế n và hàm chú ng ta sẽ đến với chương trinh
khởi tạo, ngoài những khởi tạo các chân ngõ ra như bà i tập trước thi trong bài
này chúng ta sẽ tạo m ột khung v iề n cho LED ma trận bằng các hàm SetB it:
void setupO
{
for(int i= 0;i< 14 ;i+ + )
{
pin M o d e (i,O U TPU T);
}
p in M o d e (A 4 ,O UTPUT);
p in M o d e (A 5 ,O UTPUT);
for (char i= 0;i< 8;i+ + )
{
SetBit(O.i);
S etB it(i,0);
S etB it(7,i);
S etB it(i,7);
}
}
Chương trình chinh chú ng ta có nhiệm vụ sẽ qu ét LED và tạo hiệu ứng
ho LED ma trận.
?67
C ỊỊƯ ỊỊK 6 : ỊỊU Ả N 6 C Ấ I w f l l f l H A H Ậ N u M n m c im W ir m
Hiệu ứng đầu tiên là làm một pixel cùa LED ma trán chạy từ trai
sang phải:
void loopO
{
int p;
for(p=2;p<6;p++)
{
SetBit(p,2);
DelayDislay(IO);
ClearBit(p,2);
)
Trong bài tập này chúng ta dùng vòng lặp for để thực hiện việc di
chuyển từng pixel dựa và hàm SetBit. Mỗi lần di chuyển pixel chúng ta cho
chương trình đợi một khoảng thời gian ngắn và xóa pixel đã hiển thị rối lại di
chuyển đến pixel tiếp theo.
Và các hiệu ứng sau để tạo thành một hinh vuông kin:
for(p=2;p<6;p++)
{
SetBit(5,p);
DelayDislay(IO);
ClearBit(5,p);
}
for(p=5;p>1;p~)
{
SetBit(p,5);
DelayDislay(IO);
ClearBit(p,5);
)
for(p=5;p>1 ;p--)
{
SetBit(2,p);
DelayDislay(IO);
ClearBit(2,p);
}
a i h im iằ m i a o Nttfjfl Tự HỌC CHƯỬNS S: QUẦNG CÁO v íl LED MA ĨIẬN
Thanh ghi dịch cho ph ép các: giá trị vào nối tiếp và xuấ t những giá trị
đó thành ngõ ra song song.
Thông thưởng, chú ng được sử dụng để kiểm soát số lượng lớn các
đèn LED, chẳng hạn như được sử diụng để điều khiển LED 7 đoạn hoặc LED
ma trận.
Tám vòng tròn đạ i diện cho 8 đèn LED kết nối với đẩu ra của bộ ghi
dịch. Ba yếu tố đầu là dữ liệu nối tiếp (Data), xung (Clock) và m ột chân cho
phép xuất dữ liệu (Latch).
269
cnưưNi >: l i m CÁI »ẩi t a MATIẬI U M C W H IH »
270
u m m i à m c m k Mi i ự i ị c C H lK I: H Ả K CÁI vtl IE» MA TIẬN
CH [ 7 10 ] BESET
1
C-ívD [ s <5 ] 5Qh
C h ân 14: D ãy dữ liệu vào. Dữ liệu trên chân thay đổi thành 8 bit thay
đổi theo thứ tự ghi. Đ ẩu và o dữ liệu nối tiếp. T ại m ột thời điểm xung clock chỉ
dựa vào 1 bit.
C hân 11: T hay đổi ghi xung C lock vào. Q uá trình chuyển đổi từ thấp
đến cao đầu vào dữ liệu và đầu và o nối tiếp để chuyển tới 8 bit thay đổi.
C hân 13: C ho phép đầu ra hoạt động ỏ mức thấp. Đầu vào ở mức tháp
cho phép các dữ liệu ở các chố t được đưa ra tại các đầu ra, mức cao nhất trên
đầu vào ảnh hưởng đến kết quả đầu ra (Q A-Q H ). 0 tình trạng trở kháng cao,
đầu ra nối tiếp không bị bộ phận này điều khiển. Khi à mức cao, tất cả các đầu
ra trò về trạng thái cao trở kháng, không có đầu ra nào được cho phép.
Đ ầu ra: Q A - QH (C h â n 15,1,2,3,4,5,6,7)
X uất dữ liệu khi chân 13 tích cực ở mức thấ p và có m ột xung tích cực
ra sườn âm.
Chân 9 (SQ H)
Không liên quan, dãy dữ liệu đầu ra. Đ â y là đầu ra củ a giai đoạn thứ
8 của sự thay đổi ghi 8 bit. Đ ầu này không có khả năng ở 3 trạng thá i. Chân
dữ liệu nối tiế p nhau thì chân này đưa đầu và o củ a con tiếp theo khi đã dịch
đủ 8
271
CBƯđHt l: ABÁHt CẮI I I I t a BA TIẬI
“ l_ LATCH- —o
—*0
DATA
—*0
—Ộ
CLOCK —o
h -0
LATC H — • eJ 1 — 0
t? 0 —0
DATA.— - *
*5
tỉ * —Ộ
C£ 0 —o
Ẽ 0
—Ọ
CLOCK — • ề • —0
0
V -........ J
—0
------ ^
6
k.
LATCH— • ỈD 1 LATCH---- > 01
V? 0 «1
§? *
DATA— ♦ cS 0 DATA— * 1 —0
J —o
£ c *--*
CLOCK— - jE
5 * CLOCK— UÌ
r—o
uw L ATC H -
—Ọ
DATA-
—o
—* 0
_n< 1CLO CK- —0
—*o
L A TC H *
—o
—* o
DATA-
— 0
JZ —►0
CLOLK- V)
—*9
I— o
1C 74HC595A hoạt động theo nguyên tắc của bộ ghi dịch nối tiếp phả
có lối ra song song và nổi tiếp. Coi hình trên để hiểu thêm về cách hoạt động
của 1C: Khi cho một xung cạnh âm tác động vào lối vào xóa các lối ra Q cùi
cả 8 FF trong 1C đểu ở trạng thái 0.
Ỉ7 Z
A1N IM IẦ M can W6ƯƠI Tự HỌC CHƯƠNG 6: QUẢNG CÁO vdl LED MA THẬN
M uốn ghi ta phải dưa cá c bit thông tin nối tiế p vế thời gian tru yề n lần
lượt vào lối vào nói tiếp theo sự điểu khiển đồng bộ của cá c xung nhịp. Cứ
sau mỗi xung nhịp, trạng thái củ a các FF lại được xác lập theo thô ng tin ở lối
vào D của nó. Sau khi kết thú c quá trinh ghi muốn đưa dữ liệu ra ở các lối ra
song song ta đặt mức 1 ở lối điều khiển ra, lối ra của cá c cửa A N D ở lối ra
song song sẽ được xác lập theo trạng thái Q1, Q2, Q3, Q 4, Q5, Q 6, Q7, Qs
cùa các FF trong IC. T rong cách điểu khiển dữ liệu ra song song này thông tin
trong bộ ghi vẫn được duy trì. Để điều khiển dữ liệu ra nối tiếp, ta tác động
một nhóm 8 xung nhịp cũn g ở lối vào điều khiển ghi. Sau 8 xung nhịp tác
dộng 8 bit dữ liệu lần lượt được đưa ra khỏi IC.
Hoạt động của chương trình
Trong chương trinh này, bạn sẽ tiếp tục tạo ra cá c ký tự trên m ột LED
ma trận lớn hơn. C húng ta sẽ mở rộng số lượng cộ t cho LED ma trận để thực
hiện việc hiển thị nhiều kl tự hơn. Trong bài tập này bạn sẽ dùng thanh ghi
dịch 74HC595 để tăng số lượng LED ma trận. Như bạn có thể thấy ở hình
dưới chúng ta có thể hiện thị gần hết 3 kí tự “S T K ” :
Phần cứng
Sau khi bạn đã làm quen với các LED ma trận và tìm hiểu các
nguyên lý hoạt động của chú ng thì chúng ta sẽ bắt đầu phần lắp m ạch cho
bài tập này để chúng ta tiế n hành lập trình và điều khiển LED theo nguyên tắc
hoạt động trên. Trong bài tập này chú ng ta sử dụng hai bộ LED ma trận 8x8
(128 LED) và các điện trở để hạn dòng cho LED ma trận. N goài ra các bạn
cũng có thể dùng thêm các transisto r để kéo dòng cho LED ma trận. Bạn hãy
kết nối m ạch như hình dưới. Với các điện trỏ hạn dòng cho LED ma trận,
chúng ta sử dụng thêm hai chân tương tự của bo m ạch A rduino là A4 và A5
để kết nối với các ngõ và o của các hàng LED. Bạn kết nối với bo m ạch
Arduino như bảng ở trang bên.
Z73
CHIÍƠNE 6: QQÁHG C Á I » 1 1 LEO H A TlẠM I I I * c tl K K I7 K
LED ma trận 8x8 (x2) . Điên trở hạn dòng 220 0hm(x8)
M V
- J U J -
. Chip 74HC595(x2)
Chân số 1 14
274
I AimWMM CMKếếlTựiẹC CHƯỨNẼI: qaẢNG CÁS VỂI LED MA TRẬN
C hú ý : Nếu bạn sử dụng các LED đóng g ó i sẫn thì bạn nên dọc tà i liệu
kỹ thuật của chúng đ ể b iế t cách sấp xếp chân của LED ma trận. Có th ể LED
ma trận các bạn sử dụng khác với LED ma trận trình bày trong sách, vì vậy
bạn nẽrì tìm tài liệu kỹ thuật của chúng đ ể kết n ố i m ạch m ột cách chính xác.
Dể ghép tầng cho 1C 74HC595 thì bạn p h ả i n ố i chân 9 của 1C trước với chân
số 14 của 1C sau. Có nghĩa là : N ếu bạn muốn mở rộng từ 8 chân trở lên bạn
phải sử dụng đến chân dữ liệu ngõ ra n ố i tiếp cùa 1C trước nố i với chân dữ liệu
vào nối tiếp của 1C sau.
Hình kết nối m ạch trên Proteus:
UI
DUIN01
ầầ
* 1
' I ' »■
IX : Ị
ỹ ì" ĩ 5■
M ử ỉ
ARDUINO UNO R3
7P8
f2Q20
T
Phần mềm
Chương trinh được viế t ở trang bên. Chương trình này có nhiệm vụ
thực hiện quét LED m a trận liên tục. T hay vì qu ét LED 8x8 như các bài tập
trước chúng ta sẽ thực hiện quét LED 16x8 trong bài này. Đ ố i với LED 8x8
chúng ta sẽ qu ét 8 cột, cò n LED 16x8 cìiú n g ta sẽ phải quét 16 côt.
Z75
CHƯƠNG G: QUÀNG C ÁI v ỉ l LED MA TVẠM M H M a im im ặ
// Chuỗi hiển thị để chúng ta cuộn, bạn có thể thêm nội dung bát kì
unsigned char Text[]="STK” ;
276
u m m i Ằ i a CIO ncưai Tự ngc CUƯƠNSI: QUÀNG CẤQ VƠI LED MA THẬN
277
CHƯ0N61: ỊIẢIK CÁI nil LH IU T»ẠH u M C H M W iĩf»
Í7 8
UNIDO IẦM CIO NCƯƠI Tự HỌC C M C I : QUẢNC CAO wưl LED MA TBÃN
};
(
boolean xbit;
unsigned char xch a r= -1 ;
if (pos<16) xchar=0x1 & v a l» p o s ;
xbit=xchar;
return xbit;
}
?78
CHƯƯN6 8 : (ỊUẦH6 C A I » i l l ĩ l M A T»ẬH u w iw a iim iim
}
digitalWrite(A5, BitState(LEDData[index],6)):
digitalWrite(A4, BitState(LEDData[index],7));
}
delay(1);
digitalWrite(CLK,LOW); // Dưa chãn xung X'jống mức thấp
digitalWrite(Data.HIGH); // Dưa chẩn dữ liệu lên mức cao
}
280
U N IM IẰ M C H O NGƯƠI Tự iq c CHƯƠNG I: QUẢNG CÀO vđl LED MA HẬN
{
for(int i=0;i<14;i++)
{
pinM ode(i,O UTPUT);
}
pinMode(A4 .OUTPUT);
pinM ode(A5,OUTPUT);
// Chuyển dữ liệu k í tự thành dữ liệu quét
TextToDataO;
}
Bạn hãy viế t chương trình, biên dịch và tải xuống bo m ạch Arduino.
Nếu bạn kết nối m ạch đú ng và m ạch hoạt động chinh xác thi bạn sẽ thấy
LED ma trận xuất hiện ba kí tự “ S T K ” .
Tìm hiểu phần mềm
Trong bài tập này chú ng ta sử dụng thư viện để đưa m ảng vào ROM:
#include < avr/pgm sp ace .h >
Tiếp tục chú ng ta sẽ khai báo thêm cá c chân để điều khiển cho IC
thanh ghi dịch 74H C 595 và m ảng dữ liệu cho từng cộ t khi quét. Vì cỏ 16 cột
nên bạn cần phải khai báo biế n LE D D ata có 16 phần tử:
#define Data 1
#define C LK 0
unsigned char LE D D ata[16];
Chúng ta sẽ nối chu ng các châ n Latch với các chân CLK để phục vụ
mục đlch quét LED. Nếu khô ng dùng với m ục đlch quét LED th) bạn sẽ không
nổi chung các chân xung và chân chố t của IC với nhau. G iả sử, nếu bạn
muốn mở rộng các I/O không phải sử dụng cho m ục đlch qu ét LED thl bạn sẽ
không nối chung. Nếu có m ục dlch quét LED nhưng không nổi chung hai chân
này thl nó sẽ làm giảm tốc độ qu ét LED của bạn. Và chú ng ta không m uốn
điểu này xảy ra.
T iếp tục, bạn sẽ khai báo thêm m ột chu ỗi sử dụng để hiển thị cho
chương trinh. C h uỗ i này bạn có thể thay đổi theo ý minh:
Z81
CHƯƠH6 »: HẦM CÃI nil lĩIIIA ĨIẬH_____________________________ a H M a i m i ĩ ( ặ
Trong bài tập này chúng ta sẽ có một hàm được sử dụng để chuyển
các ký tự tử chuỗi thành các dữ liệu cho việc quét cột, hàm này sẽ thực hiện
đọc các ký tự từ chuỗi sau đó sẽ đưa từng kí tự vào biến LEDData và mỗi ki tự
cách nhau một cột:
void TextToDataQ
{
int j;
for(int i=0;i<3;i++)
{
for(j=0;j<5;j++)
{
LEDData[j+i*5+i]=pgm_read_byte(System5x7 +(Text[í]-32)'5+j):
)
LEDData[j+i*5+i+1 ]=0;
}
}
282
UMM1AM CIO H íiíl J f 19c CBtftfW (: QOẢNC CÁI vdl LEC MA TBẬH
Sau đó chú ng ta sẽ tạo hàm để thực hiện việc xuấ t dữ liệu cho LED
ma trận khi quét từng cột:
void C han geD ata(ch ar index)
{
for(int i=0;i<6;i++)
{
digita lW rite (i+ 8,B itS tate(L E D D a ta [ind ex],i));
}
digitalW rite(A 5, B itS tate(L E D D a ta [ind ex],6));
digitalW rite(A 4, B itS tate(L E D D a ta [ind ex],7));
}
■Và các hàm xóa dữ liệu qu ét cho LED ma trận:
void ClearDataO
{
for(int i= 0;i< 6;i+ + )
(
digita lW rite (i+ 8,0);
}
digítalW rite(A 5, 0);
digitalW rite(A 4, 0);
}
Tiếp theo là hàm q u é t LED , trong hàm quét LED chú ng ta sẽ điều
khiển dịch bit cho cá c 1C 74 H C 5 95 . V iệ c dịch bit của các 1C này sẽ khác với
các dịch bít so v á i các bà i trước:
void LED M atrixO
{
digita lW rite (C L K .L O W ); // Dưa chản xung xuống mức thấp
digita lW rite (D a ta .L O W ); // Dưa chân dữ liệu xuống mức thấp
Trong bài này bạn sẽ xuấ t dữ liệu cho 1C là mức th ấ p và đưa chân
xung xuống mức thấp để trong vòng lặp bạn sẽ thực hiện thay đổi châ n xung
đề dịch bit cho 1C.
for(in t i= -1;i< 16 ;i+ + )
{
ClearD ataO ;
d ig ita lW rite (C L K ,H IG H );// Dịch bit 1 đ ể qu ét LED
C h an geD ata(i);
2S3
CHƯƠNG 6: QUẢNG CÁI v l l LEB HA TIIẬI1 U H M I > « t llW » m »
B ạ n s ẽ t h ự c h i ệ n x ó a d ữ li ệ u s a u đ ố b a n d ỊC h m ứ c tháp t ừ c h â n dữ
liệu ra các chân ngõ ra 1C bằng cách tạo xung canh lẽn à c^ián xung và cà
chân chốt của 1C. Sau đó bạn đợi 1 miligiây và đưa chân XL^g cùa IC xuíng
mức thấp để chuẩn bị cho lần dịch sau của IC.
Ngoài ra khi quét LED bạn muốn dịch bit 0 trên các cnân ngõ ra của
IC nên chúng ta sẽ đưa chân dữ liệu lên mức cao cho các lán lap khác. Chú ý
Bạn phải nối chân số 9 (dữ liệu ngõ ra nối tiếp) của IC1 vói cnãn số 14 (Dữ
liệu ngõ vào) cùa IC2 để chúng ta có thể sử dụng 16 chân cùa 2 IC cho việc
quét LED:
delay(1);
digitalWrite(CLK,LOW); // Dưa chân xung xuống mức thấp
digitalWrite(Data,HIGH); // Dưa chân dữ liệu lên mức cao
}
}
Sau khi khai báo các biến và hàm xong chúng ta sẽ đến với chưong
trinh khởi tạo, trong chương trình này bạn sẽ sử dụng hàm TextToData dể
chuyển các kí tự từ biến Text thành dữ liệu quét cho LED ma trân:
void setupO
{
for(int i=0;i<14;i++)
{
pinModefi,OUTPUT);
)
pinMode(A4,OUTPUT);
pinM ode(A5,OUTPUT);
TextToDataO;
}
Chương trinh chinh chúng ta chỉ có nhiệm vụ quét LED n a trân:
void loopQ
{
LEDMatrixO;
}
284
UNIN9IẢ M CHI NGƯƠI Tự HỌC CHƯƠNG I : QUẢNG CÁO v đ l LED MA TRẬN
ẹ m m ị # # # # # # # #
ẹ # # * to ệ # « p #
• m m # #
Phần cứng
Sau khi bạn đã làm quen với các LED ma trận và tìm hiểu các nguyên
lý hoạt động của chúng, ch ú n g ta sẽ bắt đầu phần lắp m ạch cho bài tập này
để chúng ta tiến hành lập trình và điều khiển LED theo nguyên tắc hoạt động
trên. Chúng ta sử dụng ba bộ LED ma trận 8x8 (192 LED) và các điện trở để
hạn dòng cho LED m a trận. N goài ra các bạn cũng có thể dùng thêm các
transistor để kéo dò ng cho LED ma trận.
LED ma trận 8x8 (x3) Đ iện trở hạn dòng 220 ohm (x8)
a X
285
CBƯếH I: MẦIỊ6 CẤ» nil IH m T1ẢI tA M C W K W lT H c
Với các điện trở hạn dòng cho LED ma trân vá cnúng ta sử dụng thèm
hai chân tương tự của bo mạch Arduino là A4 và A5 để xét nối vòi các ngõ
vào của các hàng LED.
Bạn kết nối với bo mạch Arduino như bảng sau:
Chân sô 1 14
Chú ý : D ể ghép tâng cho 1C 74HC595 thì bạn phải nổi chãn 9 của 1C trước VÓI
chăn số 14 của 1C sau. Có nghĩa là nếu bạn muốn mở rộng từ 8 chân Irở lén
bạn phải sử dụng đến chân dữ liệu ngõ ra nối tiếp của 1C trước nõ. vài chán dủ
liệu vào nối tiẽp của 1C sau.
281
CIMIK I: (IẮ B CẨI m lei MẪ TIẤI
U3
OE 07'
MR 07
00
05
Q4
>ST_CP 03
02
08 01
►8H_CP oo
' i-r
U2
ÕẼ 07-
MR 07
Q6
05
04
►
ST cp 03
02
DS Q1
LJ
U1
DUIN01
AFDUINO UNO R3
DIGITAL W V M j
52« ; '
Phần mềm
Chương trình cho bài tập này tương tự như chương trình bài tập trước
chỉ có m ột số thay đổi trong chương trình. C húng ta sẽ tăng số lương phần tử
của m ảng dữ liệu và trong hàm qu ét LED ma trận thì chúng ta sẽ tăng số cộ t
quét từ 16 thành 24.
217
CHƯƠNG 6 : OOANC t Ấ I n i l l ĩ l M A T lẠ ll U M M U M C H K m r lK
II Chuỗi hiền thị đề chúng ta cuộn, bạn có thể thêm nội dung bất ki
unsigned char Text[]="STK";
288
M H M IÀ H a i w t f t f l j r l« c CHƯ0HCI : <mẨM CẢI Kẩl LEI MA TBẬH
289
tlM N t I : I l i K CAI t i l IH m UAH w c w O ifg
);
(
boolean xbit;
unsigned char xchar=-1;
if(pos<16) xchar=0x1 & val>> pos;
xbit=xchar;
return xbit;
(
int j;
for(int i= 0;i<3;i++)
C H IM E t : ậBẢMC C À I M il l E I M A T IẢ II IM tH K tlim i
{
for(j=0;j<5;j++)
{
LEDData[j+i*5+i]=pgm_read_byte(System5x7 +(Text[i]-32)'5+j):
}
LEDData[j+i*5+i+1 ]=0;
}
{
C le a r D a ta ( );
d e la y (1 );
{
fo r(in t i= 0 ;i< 1 4 ;i+ + )
p in M o d e (i,O U T P U T ) ;
p in M o d e (A 4 ,O U T P U T ) ;
p in M o d e ( A 5 ,O U T P U T ) ;
L E D M a trix Q ;
?93
C H U U K t: n * w CAI nil t ĩ l H A HẮM UMCMHWlUt
ĐIỂU KHIỂN LED ĐƠN TRÊN LED MA TRẬN 1GX8 (GỘT CA ĨIO D E)
S au k h i b ạ n đã là m q u e n vớ i c á c h th ự c h iệ n h iể n t h i c á c ki tự Irẽ n LED
m a trậ n 1 6 x 8 th i c h ú n g ta s ẽ h ọ c c á c h đ iề u k h iể n c á c L E D đ o n trẽ n LED ma
trậ n 1 6 x 8 . B à i n à y tư ơng đ ố i đơ n g iả n b à i vì b ạ n đ ã t i m h i ể u q u a p h á n điếu
k h iể n L E D đơn trẽ n L E D m a trậ n 8 x 8 v à b iế t c á c h sử d ụ n g q u é I c ộ t ch o LED
m a trậ n 1 6 x8 . T ro n g b à i tậ p n à y c h ú n g ta k ế t hợ p đơ n giản c á c h đié u khiển
L E D đơn v à c á c h h iể n th ị L E D m a trậ n b ằ n g th a n h g h i d ị c h 7 4 H C 5 9 5 .
# ệ # # # # ® # ệ ® •
• ! # • • • • > # # m m ệ # •
# # • # # # m m # # # # # # #
Phần cứng
S au k h i b ạ n đ ã là m q u e n v à tìm h iể u n g u y ê n lý h o ạ t đ ộ n g LE D ma
trậ n , c h ú n g ta b ắ t đ ầ u p h ầ n lắ p m ạ c h v à lậ p trìn h v à đ iế u k h iể n LE D theo
n g u y ê n tắ c h o ạ t đ ộ n g trê n . B à i tậ p n à y sử d ụ n g b a bộ L E D m a trậ n 8 x8 (192
L E D ) và c á c đ iệ n trở đ ể h ạ n d ò n g c h o L E D m a trậ n . N g o à i ra c á c b ạ n cũng
có th ể d ù n g th ê m c á c tra n s is to r đ ể k é o d ò n g c h o L E D m a trậ n .
• Đ iệ n trở h ạ n d ò n g 2 2 0 o n m (x 8 )
C h ip 7 4 H C 5 9 5 (x3 )
294
u m M Ấ M C M K r tlĩự lệ C CtftfNC I : t l Ả K t Ả I n i l I t l HA T IẬ I
B O M Ạ C H A R D U IN O IC X LED M A TR Ậ N X
15 C ộ to
1 Cột 1
2 C ột 2
3 C ột 3
4 C ột 4
5 C ột 5
6 Cột 6
7 Cột 7
11
C hân số 0
12
Chân số 1 14
C hân số 8 Q u a đ iệ n trở đ ế n h à n g 0
C hân số 9 Q u a đ iệ n trở đ ế n h à n g 1
C h â n số 1 0 Q u a đ iệ n trở đ ế n h à n g 2
C h â n s ố 11 Q u a đ iệ n trở đ ế n h à n g 3
C h â n số 1 2 Q u a đ iệ n trỏ đ ế n h à n g 4
C h â n s ố 13 Q u a đ iệ n trở đ ế n h à n g 5
A N 5 (C h â n tư ơ n g tự 5 ) Hàng 6
A N 4 (C h â n tư ơ n g tự 4 ) Hàng 7
H ình k ế t n ố i m ạ c h trê n P ro te u s :
Chương trình điều khiển LED đơn trên LED ma trận 16x8:
// Diều khiển LED đơn trẽn LED ma trận 16x8
II Các chân điều khiển 1C
# d e fin e D a ta 1
# d e fin e C L K 0
298
MHBI1AM CTQwtftfi i f Ifc ____________________________ HMW I: m m CAO»11 t a m nkầ
(
b o o le a n x b it;
u n s ig n e d c h a r x c h a r = - 1 ;
x b it= x c h a r;
re tu rn x b it;
(
L E D D a ta [x ]= L E D D a ta [x ]l1 < < y ;
{
in t x c h a r;
x c h a r= ~ (1 « y );
L E D D a ta [x ]= L E D D a ta [x ] & x c h a r;
t
fo r(in t i= 0 ;i< 6 ;i+ + )
(
d ig ita lW r jte ( i+ 8 ,B itS ta te ( L E D D a ta [ in d e x ] ,i) ) ;
)
d ig ita lW r ite (A 5 , B itS t a te ( L E D D a ta [in d e x ],6 ) ) ;
(
fo r (in t i= 0 ;i< 6 ;i+ + )
?97
cbKKw t; ệiẢ K CẨI r t i t a m TiẮ i la w K im i
{
d ig ita lW rite (i+ 8 .0 );
}
d ig ita lW rite (A 5 , 0);
d ig ita l'.V rite (A 4 , 0);
{
d ig ita lW rite (C L K ,L O W );
d ig ita lW rite (D a ta .L O W );
fo r(in t i= -1 ;i< 1 6 ;i+ + )
{
C le a rD a ta O ;
d ig ita lW rite (C L K .H IG H );
C h a n g e D a ta (i);
d e la y (1);
d ig ita lW rite (C L K ,L O W );
d ig ita lW rite (D a ta .H IG H );
)
}
{
fo r(in t i= 0 ;i< 1 4 ;i+ + )
{
p in M o d e (i,O U T P U T );
}
p in M o d e (A 4 ,O U T P U T );
p in M o d e (A 5 ,O U T P U T );
// Tạo viền cho LED ma trặn
fo r (c h a r i= 0 ;i< 1 6 ;i+ + )
{
S etB it(O .i);
S etB it(i.O );
ỈM
I À « a i K Ể lt n f f t c*rtt I: (IẢM CÁI Dil LE1MArụ i
S e tB ít(1 5 ,i);
S e tB it(i,7 );
{
fo r(in t t= 0 ;t < x t im e ;t+ + ) {
L E D M a trix O ;
(
in tp ;
fo r(p = 2 ;p < 1 4 ;p + + )
{
S e tB it(p ,2 );
D e la y D is la y ( IO ) ;
C le a r B it( p ,2 ) ;
fo r (p = 2 ;p < 6 ;p + + )
{
S e tB it(1 3 ,p );
D e la y D is la y ( IO ) ;
C le a r B it( 1 3 ,p ) ;
fo r ( p = 1 3 ;p > 1 ;p ~ )
(
SetBit(p,5);
D e la y D is la y ( IO ) ;
H!
CHƯƠNG (: OUÁNE CẤI » il IEI MA T l ị l
C le a rB it(p ,5 );
fo r(p = 5 ;p > 1 ;p —)
{
S e tB it(2 ,p );
D e la y D is la y (IO );
C le a rB it(2 ,p );
}
}
H ã y v iế t chư ơ ng trìn h , b iê n d ịc h v à tả i x u ố n g b o m a c h A rd u in o . Néu
k ế t n ố i m ạ c h đ ú n g v à m ạ c h h o ạ t đ ộ n g c h ín h x á c thì b ạ n sẽ th ấ y LE D ma tràn
tạ o m ộ t h iệ u ứ ng p ix e l d ịc h c h u y ể n h ìn h c h ữ n h ậ t và L E D m a trâ n h iể n thị mỗt
v iề n b a o x u n g q u a n h .
T im h iể u p h ầ n m ề m
T ro n g b à i tậ p n à y c h ú n g ta sử d ụ n g thư v iệ n đ ể đưa rn à n g v à o ROM
# in c lu d e < a v r/p g m s p a c e .h >
T iế p tụ c c h ú n g ta sẽ k h a i b á o th ê m c á c c h â n để đ iề u k h iể n cho 1C
th a n h g h i d ịc h 7 4 H C 5 9 5 v à m ả n g dữ liệ u c h o từ n g c ộ t k h i q u é t:
# d e fin e D a ta 1
# d e fin e C L K 0
u n s ig n e d c h a r L E D D a ta [1 6 ];
T iế p th e o là h à m rú t b it từ b iế n :
b o o le a n B itS ta te (c h a r v a l, c h a r p o s )
{
b o o le a n xb it;
u n s ig n e d c h a r x c h a r= -1 ;
if( p o s < 1 6 ) x c h a r= 0 x 1 & v a l> > p o s ;
x b it= x c h a r;
re tu rn xb it;
)
T ro n g b à i tậ p n à y c h ú n g ta sẽ sử d ụ n g lạ i ha i h à m để đ iế u k h iể n LED
đơn như b à i tậ p đ iề u k h iể n L E D đơ n sừ d ụ n g L E D m a trâ n 8 x 8 B a n có thể
kh a m k h ả o lạ i b à i tậ p đ ó đ ể tim h iể u v ề c á c h h o ạ t đ ộ n g c ủ a ha i '-làm này:
v o id S e tB it(c h a r x .c h a r y)
{
L E D D a ta F x ]= L E D D a ta [x ]l1 « y :
300
U M M M M CM w t t l T f l f c [ M E S: QUÀNG CÁO HOI LED MẢ TBẬH
}
v o id C le a r 8 it ( c h a r x .c h a r y )
{
in t x c h a r;
x c h a r= ~ (1 « y );
L E D D a ta [ x ]= L E D D a ta [x ] & x c h a r;
}
S a u đ ó c h ú n g ta s ẽ tạ o h à m đ ể th ự c h iệ n v iệ c x u ấ t d ữ liệ u c h o L E D
ma trậ n k h i q u é t từ n g c ộ t:
v o id C h a n g e D a ta ( c h a r in d e x )
{
fo r ( in t i= 0 ;i< 6 ;i+ + )
(
d ig it a lW r ite ( i+ 8 ,B itS ta te ( L E D D a ta [ in d e x ] ,i) ) ;
}
d ig ita lW r ite ( A 5 , B itS t a te ( L E D D a ta [in d e x ],6 ) ) ;
}
V à c á c h à m x ó a d ữ liệ u q u é t c h o L E D m a trậ n :
v o id C le a r D a ta O
{
fo r ( in t i= 0 ;i< 6 ;i+ + )
{
d ig ita lW r ite ( i+ 8 ,0 ) ;
T iế p th e o là h à m q u é t L E D , tr o n g h à m q u é t L E D c h ú n g ta s ẽ đ iề u
khiển d ịc h b it c h o c á c IC 7 4 H C 5 9 5 . C h ú n g ta s ẽ th ự c h iệ n q u é t L E D m a tr ậ n
sử d ụ n g 2 IC 7 4 H C 5 9 5 :
v o id L E D M a t r ix ( )
{
d ig ita lW r ite ( C L K .L O W ) ;
SOI
c m * I: IIA K u i r t l i a u T l* l
{
C le a rD a ta O ;
d ig ita lW rite (C L K ,H IG H );
C h a n g e D a ta (i);
delayfl);
d ig ita lW rite (C L K ,L O W );
d ig ita lW rite (D a ta ,H IG H );
}
}
T ro n g b à i tậ p n à y c h ú n g ta c ẩ n tạ o h à m D e la y h iể n th ị đ ể h iể n th ị LED
m a trậ n tro n g thở i g ia n đợ i:
v o id D e la y D is la y (in t x tim e )
{
fo r(in t t= 0 ;t< x tim e ;t+ + ){
L E D M a trix O ;
)
)
S au k h i k h a i b á o c á c b iế n v à h à m x o n g c h ú n g ta s ẽ đ ế n v đ i chương
trin h k h ỏ i tạ o , tro n g chư ơ ng trin h n à y b ạ n s ẽ tạ o v iể n c h o L E D m a trậ n :
v o id se tu p O
{
fo r(in t i= 0 ;i< 2 ;i+ + )
{
p in M o d e (i,O U T P U T );
}
p in M o d e (A 4 ,O U T P U T );
p in M o d e (A 5 ,O U T P U T );
fo r (c h a r i= 0 ;i< 1 6 ;i+ + )
{
S e tB it(0 ,i);
S e tB it(i.O );
S e tB it(1 5 ,i);
S e tB it(i,7 );
IU
« * ■ » * ■ W B W lT f I f t C T N K tn Ẩ K C Ẩ ir tiia m ĩiẦ i
)
Chương trinh chinh chúng ta chỉ có nhiệm vụ quét LED ma trận và tạo
hiệu ứng dịch chuyển pixel:
void loop()
{
int p;
for(p=2;p<14;p++)
{
SetBit(p,2);
DelayDislay(IO);
ClearBit(p,2);
for(p=2;p<6;p++)
{
SetBit(13,p);
DelayDislay(IO);
ClearBit(13,p);
)
for(p=13;p>1;p--)
{
SetBit(p,5);
DelayDislay(IO );
ClearBit(p,5);
fo r(p =5;p>1;p -)
{
SetBit(2,p);
DelayDislay(IO );
ClearBit(2,p);
}
CHựơNE8; HÁW CẢI vểl l£i MA HAM u a c M K H ir f *
TẠO HIỆU ỨNG SÁNG DẦN VÀ TẮT DẨN CÁC c ộ ĩ Ĩ I É N LED MA TRẬN
16X8 (CỘT CATHODE)
T ro n g b à i tậ p n à y c h ú n g ta sẽ b ắ t đ ầ u tạ o h iệ u ú n g c n o L E D m a trặn.
P h ầ n c ứ ng b ạ n v ẫ n s ẽ g i ữ n g u y ê n như tro n g c á c b à i trư ó c và c h ì th a y đ ổ i vé
p h ầ n m ề m . C h ú n g ta sẽ c ó th ể tạ o c á c h iệ u ứ ng rấ t đ ẹ p m á : v ó i L E D m a trận
và đ ố i vớ i c á c h iệ u ứ ng L E D m a trậ n th i n h in đ ẹ p m á t h o n s o c á c hiệu ứng
LE D đơn. Vì v ậ y v iệ c tạ o ra c á c h iệ u ứ ng trê n L E D m a trâ n n h ìn sẽ b ắ t mắt
hơn c h o v iệ c q u ả n g c á o .
H o ạ t đ ộ n g c ủ a c h ư ơ n g tr ì n h
Đ ầ u tiê n c hư ơ ng trìn h sẽ là m s á n g c ộ t đ ầ u tiê n c ù a L E D m a trậ n sau
đó sẽ s á n g d ầ n c á c c ộ t tiế p th e o c ủ a L E D m a trậ n :
304
S a u k h i L E D m a tr ậ n tắ t h ế t th ì s ẽ th ự c h iệ n h iệ u ứ n g lạ i b a n đ ầ u :
P hần m ề m
P h ầ n m ề m b à i tậ p n à y k h á đ ơ n g iả n , b ạ n s ử d ụ n g c á c h à m S e tB it v à
C le a rB it đ ã tạ o tr o n g c h ư ơ n g trìn h trư ớ c đ ể tạ o h iệ u ứ n g c h o b à i n à y .
Chương trình tạo hiệu ứng sáng dần và tắt dần các cột trẽn Led
ma trận:
II Tạo hiệu ứng sáng dần và tắt dần các cột trên led ma trận
// Các chàn điều khiển 1C
# d efine D a ta 1
# d efine C L K 0
// Mảng chứa dữ liệu quét
305
CHƯƠHE t: qUÀm CÁI vil LEI MẢ TIẢI U W I 1 I CH K i l l n w
u n s ig n e d c h a r L E D D a ta [1 6 ];
// Hàm rút các bit riêng lẻ từ một biến
b o o le a n B itS ta te fc h a r v a l, c h a r p o s )
{
b o o le a n xb it;
u n s ig n e d c h a r x c h a r= -1 ;
if (p o s < 16) xcha r= O x1 & v a l » p o s ;
x b it= x c h a r;
re tu rn xb it;
}
// Điều khiển LED dơn sáng
v o id S e tB it(c h a r x .c h a r y )
{
L E D D a ta [x ]= L E D D a ta [x ]l1 < < y ;
}
// Tắt LED dơn
v o id C le a rB it(c h a r x .c h a r y)
{
in t x c h a r;
x c h a r= -(1 « y );
L E D D a ta [x ]= L E D D a ta [x ] & x c h a r;
}
// Hàm thay đổi dữ liệu quét
v o id C h a n g e D a ta (c h a r in d e x )
{
fo r(in t i= 0 ;i< 6 ;i+ + )
{
d ig ita lW rite (i+ 8 ,B itS ta te (L E D D a ta [in d e x ],i));
)
d ig ita lW rite (A 5 , B itS ta te (L E D D a ta [in d e x ],6 ));
d ig ita lW rite (A 4 . B itS ta te (L E D D a ta [in d e x ],7 ));
}
II Xóa dữ liệu quét
v o id C le a rD a ta 0
{
fo r(in t i= 0 ;i< 6 ;i+ + )
(
d ig ita lW rite (i+ 8 ,0 );
}
d ig ita lW rite (A 5 , 0);
d ig ita lW rite (A 4 . 0);
306
U M M I A I B C H MƯỜI TM PC CBtftfNG I : ỊỊĐ Á K CAO wđl LEO MA Ĩ1ẬN
}
// Hàm quét LED
void L E D M a trix O
{
d ig ita lW r ite (C L K .L O W ) ;
d ig ita lW r ite (D a ta .L O W );
fo r(in t i=-1 ;i< 1 6 ;i+ + )
{
C le a rD a ta O ;
d ig ita lW r ite ( C L K ,H IG H ) ;
C h a n g e D a ta (i);
d e la y (1 );
d ig ita lW r ite (C L K .L O W ) ;
d ig ita lW r ite (D a ta ,H IG H );
)
)
// Chương trình khởi tạo
void se tu p O
(
fo r(in t i= 0 ;i< 1 4 ;i+ + )
{
p in M o d e (i,O U T P U T ) ;
}
p in M o d e (A 4 ,O U T P U T ) ;
p in M o d e (A 5 ,O U T P U T ) ;
)
// Delay hiển thị
void D e la y D is la y fin t x tim e )
{
fo rfin t t= 0 ;t < x t im e ;t+ + ) {
L E D M a trix O ;
)
)
// Chương trình chinh
void lo o p ()
{
int p;
// Tạo hiệu úng sáng dần
for (p = 0 ;p < 1 6 ;p + + )
(
fo r(in t i= 0 ;i< 8 ;i+ + ) S e tB it( p , i) ;
»7
CHƯƠNGMOẨKCẮI vll LE1 IU Ĩ1ẬN UW M UM CH IKWI TỊ^t
D e la y D is la y ( 10);
}
II Tạo hiệu ứng tắt dần
fo r (p = 1 5 ;p > = 0 ;p ~ )
{
fo r(in t i= 0 ;i< 8 ;i+ + ) C le a rB it(p .i);
D e la y D is la y (IO );
)
1 B ạ n h ã y b iê n d ịc h v à tả i c hư ơ ng trìn h x u ố n g b o a rd n ạ c h A rd u in o . Nếu
lắ p m ạ c h ch ín h x á c thì L E D m a trậ n sẽ s á n g th e o h iệ u ứ ng m ô tà tro n g phán
“ H o ạ t đ ộ n g c ủ a chư ơ ng trìn h ” .
P h ầ n m ề m b à i n à y tư ơ ng đ ố i đơ n g iả n n ê n b ạ n h o à n to à n có thể ta
g iả i th ích đƯỢc.
TẠO NIỆU ƯNG SÁNG DẦN VÀ TẮT DẦN CÁC CỘT TRẼN LED MA TRẬN
16X8- H I Ệ U CHỈNH (CỘT CATHODE)
C h ú n g ta c ó th ể tă n g g iả m tố c đ ộ s á n g d ầ n v à tắ t d ấ n c ù a hiệu ứng
dự a v à o n h ữ n g th a y đ ổ i n h ỏ c ủ a m ã lệ n h . P h ầ n c ứ n g v ẫ n k h ô n g đ ổ i nhưng
c h ú n g ta sẽ th a y đ ổ i p h ầ n m ề m . P h ầ n tô đ ậ m tro n g m ã lê n h là nhữ ng phán
c h ú n g ta th a y đ ổ i đ ể tă n g g iả m tố c đ ộ c h o h iệ u ứng.
Phần mềm
P h ầ n m ề m b à i n à y k h á đơ n g iả n , b ạ n sử d ụ n g c á c h à m S etB it va
C le a rB it đã tạ o tro n g c hư ơ ng trìn h trư ớ c đ ể tạ o h iệ u ứ ng c h o b à i n à y.
ChƯdng trình tạo hiệu ứng sáng dần và tắt dẩn các cột trên led ma trận:
// Tạo hiệu ứng sáng dần và tắt dần các cột trên led ma trận
# d e fin e C L K 0
b o o le a n B itS t a te ( c h a r v a l, c h a r p o s )
i
b o o le a n x b it;
u n s ig n e d c h a r x c h a r = - 1 ;
if ( p o s d 6 ) x c h a r= O x 1 & v a l » p o s ;
x b it= x c h a r;
re tu rn x b it;
(
L E D D a t a [ x ] = L E D D a t a [ x ] l1 « y ;
(
in t x c h a r;
x c h a r= -(1 « y );
L E D D a ta [x ]= L E D D a ta [x ] & x c h a r ;
109
CHƯđmI: ỌBẢMC CAI >ll LE» HA nẠll U W I M t l l KW ITHC
{
fo r(in t i= 0 ;i< 6 ;i+ + )
{
d ig ita lW rite (i+ 8 ,0 );
}
d ig ita lW rite (A 5 , 0);
d ig ita lW rite (A 4 , 0 );
{
digitalWrite(CLK,LOW);
d ig ita lW rite (D a ta ,L O W );
fo r(in t i=-1 ;i< 1 6 ;i+ + )
{
C le a rD a ta O ;
d ig ita lW rite (C L K ,H IG H );
C h a n g e D a ta (i);
d e la y (1 );
d ig ita lW rite (C L K ,L O W );
d ig ita lW rite (D a ta ,H IG H );
}
}
{
fo r(in t i= 0 ;i< 1 4 ;i+ + )
{
p in M ũ d e (i,O U T P U T );
310
UBOINO DANH CHO Netftfl Tự HỌC CHƯƠNG ( : QUẢNG CÀO »01 LED MA TBẬM
p in M o d e ( A 4 ,O U T P U T ) ;
p in M o d e ( A 5 ,O U T P U T ) ;
L E D M a trix O ;
int p;
an
CHƯƯH6 6 : Q U Ấ H t C Á I > ể l L £ l M A T IẬ » U M M i a C H I K M lT H t
TẠO HIỆU ỮNG SÁNG DẦN TƯNG CỘT VÀ SÁNG DẦN CIO LED MA ĨIẶN
16X8 (CỌT CATHODE)
T ro n g b à i tậ p n à y c h ú n g ta sẽ tạ o ra h iê u ứ ng s á n g d á n từ ng cột tú
trê n x u ố n g dưới. S a u sẽ s á n g d ầ n c ộ t tiế p th e o . C á c c ỗ : sẽ s á n g d ầ n đế n khi
LE D m a trậ n s á n g h ế t.
P h ầ n c ứ n g c ù a b à i n à y g iố n g v ớ i c á c b à i tậ p trư ó c sừ d ụ n g LE D ma
trậ n 1 6 x8 vớ i 2 L E D m a trậ n 8 x 8 v à c á c IC g h i d ịc h đ ể q u é t LE D m a trận
P h ầ n m ề m sẽ đ ô i c h ú t k h á c b iệ t.
H o ạ t đ ộ n g c ủ a c h ư ơ n g tr ì n h
I I # 1 1 l i ® © II
: t ị 2 1 1 .1
HR
•@
UJVxxxl
••••••••
•m
• ề # m m m m #1• • • • • • • •
•i•#mmmm
••
uu
C ô t thứ hai se s á n g tương tự như c ô t 1.
31»
AIMIMS danhcho ngươi Tự age CHƯƠNG 6: QUÀNG CAO uđl LED HA TRẬN
m\m m m m m m m m
é m % % # # • # #
# 1 # # # # # # # #
Đ ế n k h i c ộ t th ứ h a i s á n g h ế t th ì c á c c ộ t tiế p th e o s ẽ s á n g v ớ i h iệ u ứ n g
tương tự đ ế n k h i L E D m a tr ậ n s á n g h o à n to à n .
Đ ế n k h i L E D m a tr ậ n s á n g h o à n to à n th ì tắ t L E D m a trậ n .
CHƯƯN6 8: QUẢN6 CẢI vẩl If 1 m ĨIA« ẲH— IẰM H I w W T f t
S au đ ó c h ú n g ta đ iề u k h iể n L E D m a trâ n tắ t h ế t và th ụ c h iệ n h iệ u ớng
lại b a n đ ầ u :
Phấn mềm
T ro n g b à i tậ p n à y b ạ n tiế p tụ c sử d ụ n g c á c h à m S e tB it v à C le a rB it đã
giớ i th iệ u tro n g b à i tậ p trư ớ c đ ể tạ o h iệ u ứ ng. N g o à i ra tro n g chươ ng trình
ch ín h c ó m ộ t v ò n g lặ p d ù n g đ ể tắ t tấ t c ả c á c L E D .
ChƯdng trình tạo hiệu ứng sáng dần từng cột và sáng dấn với LED
ma trận:
// Tạo hiệu ứng sáng dần sáng dần từng cột và sáng dần LED ma trận
II Các chân điều khiển 1C
# d e fin e D a ta 1
# d e fin e C L K 0
{
b o o le a n xb it;
u n s ig n e d c h a r x c h a r= -1 ;
314
H IH im Ầ M c » t W « I T ự lộ C _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ CHƯtfH6 «: HOẢMt CÀO VƠI LED MA TBẬH
re tu rn x b it;
{
L E D D a ta [x ]= L E D D a ta [x ]l1 « y ;
(
in t x c h a r;
x c h a r= -(1 « y );
L E D D a ta [x ]= L E D D a ta [x ] & x c h a r ;
d ig ita lW r ite ( i+ 8 ,0 ) ;
115
CHƯƠNE 6 : QUẢN6 C Ả I w i l L ĩ l H A H Ạ * a i m C IIK W IT H C
{
d ig ita lW rite (C L K ,L O W );
d ig ita lW rite (D a ta .L O W );
{
C le a rD a ta O ;
d ig ita lW rite (C L K .H IG H );
C h a n g e D a ta (i);
d e la y (1 );
d ig ita lW rile (C L K ,L O W );
d ig ita lW rite (D a ta .H IG H );
{
fo r(in t i= 0 ;i< 1 4 ;i+ + )
{
p in M o d e (i,O U T P U T );
}
p in M o d e (A 4 , O U T P U T );
p in M o d e (A 5 ,O U T P U T );
316
UNIM M M CKOHCtíđl Tự 19c CHƯƠNG I : QOẢNC CÁO V ỈI LED MA TRẬN
L E D M a trix O ;
in t p;
L E D D a ta [p ]= 0 ;
II Dợi một thời gian trước khi thực hiện hiệu ứng
D e la y D is la y ( 1 0 );
S e tB it(p .i);
D e la y D is la y ( 1 0 );
B ạ n h ã y b iê n d ịc h v à tả i c h ư ơ n g trìn h x u ố n g b o a r d m ạ c h A r d u in o . N ế u
lắp m ạ c h c h ín h x á c th i L E D m a tr ậ n s ẽ s á n g th e o h iệ u ứ n g m ô tả tr o n g p h ầ n
“H o ạ t đ ộ n g c ù a c h ư ơ n g tr ì n h ” . V iệ c lậ p trìn h c h o b à i tậ p n à y đ ơ n g iả n d o tư o n g
tự vớ i b à i tậ p H iề n th ị k ý tự tr ê n m a tr ậ n 1 6 x 8 ( c ộ t c a th o d e ) , Đ iề u k h iể n L E D
đơn trê n L E D m a t r ậ n 1 6 x 8 ( c ộ t c a th o d e ) , T ạ o h iệ u ứ n g s á n g d ầ n v à tắ t d ầ n
c á c c ộ t tr ê n L E D m a trậ n 1 6 x 8 (c ộ t c a th o d e ) đ ã trìn h b à y n é n b ạ n h o à n to à n
có thể tự giải thích được.
517
CHƯONE 6 ; QDÀH6 C Ả I v ẩ l l ĩ l H A H Ẩ N U M M l u a C M W N IT |I|(
TẠO HIỆU ỨNG SÁNG DẦN TƯNG c ộ ĩ VÀ SÁNG DẦN VÒI LED MA ĨIẬN
16X8 - HIỆU CHỈNH (CỘT CATHODE)
T ro n g b à i tậ p n à y , b ạ n sẽ th ự c h iệ n h iệ u ứ ng à b à ' trướ c nh ư ng chúng
ta th a y đ ổ i tố c đ ộ chờ đ ể th ự c h iệ n h iệ u ứ ng v à tâ n g tõ c đô CHO h iê u ứng phu
hợ p vớ i b ạ n .
Phần mềm
C hư ơ n g trin h b à i tậ p n à y h o à n to à n tư ơng tự vớ i b à i trư ớ c như ng bạn
sẽ th a y đ ổ i tố c thờ i g ia n đợ i. N h ữ n g p h ầ n tô đ ậ m v à in h o a tro n g m ã lệ n h dưới
là nh ữ ng th a y đ ổ i s o vớ i chư ơ ng trìn h k h á c .
Chường trình tạo hiệu ứng sáng dần từng cột và sáng dẩn với LED
ma trận:
// Tạo hiệu ứng sáng dần sáng dẳrt từng cột và sáng dần LED ma trận
II Các chân điều khiển 1C
# d e fin e D a ta 1
# d e fin e C L K 0
// Mảng chứa dữ liệu quét
u n s ig n e d c h a r L E D D a ta [1 6];
// Hàm rút các bit riêng lẻ từ một biến
b o o le a n B itS ta te (c h a r v a l, c h a r p o s )
{
b o o le a n xb it;
u n s ig n e d c h a r x c h a r= -1 ;
if(p o s < 1 6 ) x c h a r= 0 x 1 & v a l> > p o s ;
x b it= x c h a r;
re tu rn xb it;
}
// Diều khiển LED dơn sáng
v o id S e tB it(c h a r x .c h a r y)
{
L E D D a ta [x ]= L E D D a ta [x ]l1 « y ;
}
// Tắt LED đơn
v o id C le a rB it(c h a r x .c h a r y)
{
in t x c h a r;
x c h a r= -(1 < < y ):
L E D D a ta [x ]= L E D D a ta [x ] & x c h a r:
318
 IM IH IA H CHO M6ƯỨI Ty age CHƯƠM6 6: QUÀH6 CAP HOI LED MA TRAN
(
fo r(in t i= 0 ;i< 6 ;i+ + )
(
d ig ita lW r ite ( i+ 8 ,B itS ta te ( L E D D a ta [ in d e x ] ,i) ) ;
}
d ig ita lW rite (A 5 , B itS t a te ( L E D D a ta [in d e x ],6 ) ) ;
d ig ita lW rite (A 4 , B itS ta te ( L E D D a ta [in d e x ],7 ) ) ;
)
II Xóa dữ liệu quét
void C le a r D a ta 0
(
fo r(in t i= 0 ;i< 6 ;i+ + )
(
d ig ita lW r ite (i+ 8 ,0 );
)
d ig ita lW rite (A 5 , 0 );
d ig ita lW rite (A 4 , 0 );
)
// Hàm quét LED
void L E D M a trix O
{
d ig ita lW r ite (C L K ,L O W ) ;
d ig ita lW r ite (D a ta ,L O W );
fo r(in t i= - 1 ; j< l6 ; i+ + )
{
C le a rD a ta ();
d ig ita lW r ite ( C L K ,H IG H ) ;
C h a n g e D a ta (i):
d e la y (1 );
d ig ita lW r ite ( C L K .L O W ) ;
d ig ita lW r ite ( D a ta .H IG H ) ;
)
)
// Chương trình khởi tạo
319
CHƯƠNG 6: qUÀNe CAO v t l LED MA TRẬN u n m nm c iiK M ir f « (
v o id setupO
{
fo r(in t i= 0 :i< 1 4 ;i+ + )
{
p in M o d e fi,O U T P U T );
}
p in M o d e (A 4 , O U T P U T );
p in M o d e (A 5 ,O U T P U T );
}
// Delay hiền thị
v o id D e la y D is la y (in t x tim e )
{
fo r(in t t= 0 ;t< x tim e ;l+ + ){
L E D M a trix O ;
}
)
// Chương trình chinh
vo id loopO
{
int p;
// Tất hết LED ma trận
fo r (p = 0 ;p < 1 6 :p + + )
{
L E D D a ta [p ]= 0 ;
)
// Đợi một thời gian trước khi thực hiện hiệu ứng
THA Y D ổl THỜI GIAN CHO PHÉP THựC HIỆN HIỆU ỨNG
D e la y D is la y ( 5 ); / /
// Vòng lặp tạo hiệu ứng
fo r (p = 0 ;p < 1 6 ;p + + )
{
fo r(in t i= 0 :i< 8 ;i+ + )
{
S e tB it(p ,i);
D e la y D is la y ( 5 ); II TỐC DỘ THựC HIỆN Hiệu ỨNG
)
320
M B O IN O DANK CHO NEƯƠI T ự HỌC CHƯƠNG 6 : Q UẢN6 CÁO VƠ I LED M A TR Ậ N
ĨẠ O HIỆU ỨNG SÁNG DẨN XEN KẼ LED MA TRẬN 1GX8 (CỘT CATHODE)
T r o n g b à i tậ p n à y c h ú n g ta s ẽ tạ o ra h iệ u ứ n g s á n g d ầ n x e n k ẽ từ h a i
hướng từ tr á i s a n g p h ả i v à từ p h ả i s a n g trá i. Đ ế n k h i L E D m a tr ậ n s á n g h ê t th ì
c h ú n g ta lặ p lạ i h iệ u ứ n g .
Sau khi
cột đầu tiê n s á n g
hết thì th ự c h iệ n
sáng d ầ n c h o c ộ t
ngoài cùng bên
phải (hình b ê n ).
C ột ng o à i
cùng bên phải sẽ
sáng giốn g cột 1
(hình b ê n ).
Đ ế n k h i c ộ t n g o à i c ù n g b ê n p h ả i s á n g h ế t th ì c á c c ộ t th ứ 3 n g o à i c ù n g
bê n trá i s ẽ s á n g th e o h iê u ứ n g g iố n g c á c c ộ t trư ớ c (h ìn h tra n g b ê n ).
321
K hi L E D rna trậ n s á n g h ố t th i tắ t h ế t L E D :
um M Ẳ « CH U tM l TfM C CUƯONC t: qUẢNC CÁI v ỉl LED MA TBẬH
S a u đ ó c h ú n g ta đ iề u k h iể n L E D m a tr ậ n tắ t h ế t v à th ự c h iệ n h iệ u ứ n g
lại b a n đ ầ u :
•••#####
• mmm m m m m m
•••••• • ••••••••
• • • m.m m mm
IMIII ii m ề •
ềmm ề mm •
•
Phần mềm
T r o n g b à i tậ p n à y b ạ n t iế p tụ c s ử d ụ n g c á c h à m S e tB it v à C le a r B it đ ã
tạo đ ể tạ o h iệ u ứ n g . M ã lệ n h b à i n à y s ử d ụ n g c á c v ò n g lặ p fo r x e n k ẽ v à m ộ t
biến C h a n g e E ffe c t đ ể tạ o h iệ u ứ n g .
# d e fin e C L K 0
121
CHƯƠNG t : m Ầ H C C Á I v i l l i l H Ắ T I Ẳ I u tm n m c iiw w iT f jt
{
b o o le a n x b it;
u n s ig n e d c h a r x c h a r= -1 ;
if(p o s < 1 6 ) x c h a r= 0 x 1 & v a l> > p o s ;
x b it= x c h a r;
re tu rn xb it;
}
// Diều khiển LED đan sáng
v o id S e tB it(c h a r x .c h a r y)
{
L E D D a ta [x ]= L E D D a ta [x ]l1 « y ;
}
// Tắt LED đơn
v o id C le a rB it(c h a r x .c h a r y)
{
in t x c h a r;
x c h a r= ~ (1 « y );
L E D D a ta [x ]= L E D D a ta [x ] & x c h a r;
{
fo r(in t i= 0 ;i< 6 ;i+ + )
{
d ig ita lW rite (i+ 8 ,B itS ta te (L E D D a ta [in d e x ],i));
}
d ig ita lW rite (A 5 . B itS ta te (L E D D a ta [in d e x ],6 ));
d ig ita lW rite (A 4 . B ìtS ta te (L E D D a ta [in d e x ],7 ));
324
U N 1M !*■ Cll NCtftfI n r 19c CnMNC I: H A K CÁ0 vẩl LEB HA T1ẮI
)
II Xóa dữ liệu quét
void C le a r D a ta 0
(
fo r(in t i= 0 ;i< 6 ;i+ + )
{
d ig ita lW r ite (i+ 8 ,0 );
)
d ig ita lW rite (A 5 , 0 );
d ig ita lW rite (A 4 , 0 );
(
d ig ita lW r ite (C L K .L O W ) ;
d ig ita lW r ite (D a ta .L O W );
fo r(in t i=-1 ;i< 1 6 ;i+ + )
{
C le a rD a ta O ;
d ig ita lW r ite ( C L K ,H IG H ) ;
C h a n g e D a ta (ì);
d e la y (1 );
d ig ita lW r ite ( C L K .L O W ) ;
d ig ita lW r ite ( D a ta ,H IG H ) ;
}
)
(
p in M o d e fi,O U T P U T ) ;
)
p in M o d e ( A 4 , O U T P U T ) ;
p in M o d e ( A 5 ,O U T P U T ) ;
1ZS
I
IM CH K H lT fH '
CHƯƠNE 6: m Ả K C Ấ I n i l LE1 M A T IA *
)
II Delay hiển thị
vo id D e la y D is la y (in t x tim e )
{
fo r(in t t= 0 ;t< x tim e ;t+ + ){
L E D M a trix ();
}
}
// Chương trình chính
v o id loopO
{
in t p;
II Tắt hết LED ma trận
fo r (p = 0 ;p < 1 6 ;p + + )
{
L E D D a ta [p ]= 0 ;
}
D e la y D is la y (1 0); / / Đợi một thời gian trước khi thực hiện hiệu ứng
II Vòng lặp tạo hiệu ứng
fo r (p = 0 ;p < 1 6 ;p + + )
{
fo r(in t i= 0 ;i< 8 ;i+ + )
{
if(C h a n g e E ffe c t= = fa ls e ) S e tB ĩt(p .i);
e ls e S e tB it(1 6 -p ,i);
D e la y D is la y (IO );
)
C h a n g e E ffe c t= !C h a n g e E ffe c t;
}
)
B ạ n h ã y b iê n d ịc h v à tả i chư ơ ng trin h x u ố n g b o a rd m a c n A rd u in o . Nếu
lắ p m ạ c h c h in h x á c thì L E D m a trậ n sẽ s á n g th e o h iệ u ứ ng rn ô tả tro n g phấn
“ H o ạ t đ ộ n g c ù a chư ơ ng trin h ” . P h ầ n m ề m b à i tậ p n à y tương tự m ư c á c b à i tập
trướ c n ê n b ạ n h o à n to à n c ỏ th ể tự g iả i th ích được.
326
AUIMO bans cho n g ư ơ i Tự HQC CHƯƠNG 7 : Đ IẾU K H IỂ N LED 7 Đ O Ạ N
CHUÔNG 7
C á c th ô n g s ố c ầ n th iế t đ ể u đ ư ợ c h iể n th ị tr ê n L E D 7 đ o ạ n đ ể n g ư ờ i
d ù n g c ó th ể b iế t đ ư ợ c . N g o à i v iệ c q u ả n g c á o , b ạ n c ũ n g th ư ờ n g x u y ê n tiế p
xú c L E D 7 đ o ạ n tr o n g n h à c ủ a m ìn h . V í d ụ n h ư c á c m á y g iặ t đ iệ n tử , lịc h v ạ n
niên , c á c đ ổ n g h ồ s ố v à b ạ n th ư ờ n g g ặ p n h iề u n h ấ t L E D 7 đ o ạ n là tr o n g c á c
m á y ở n h à b ế p n h ư b ế p từ , n ồ i c ơ m đ iệ n , b ế p h ổ n g n g o ạ i,...
T r o n g c h ư ơ n g n à y c h ú n g ta s ẽ là m q u e n v ớ i L E D 7 đ o ạ n v à đ i s â u v à o
cá c c á c h đ iề u k h iể n c ủ a L E D 7 đ o ạ n . B ạ n c ó th ể c h o h iể n th ị m ọ i th ô n g s ố
cần th iế t v ớ i L E D 7 đ o ạ n vì v ậ y tr o n g q u ả n g c á o b ạ n c ũ n g th ư ờ n g th ấ y c h ú n g
x u ấ t h iệ n b ê n c ạ n h c á c lo ạ i L E D k h á c .
H ìn h d ư ớ i v à tr a n g b ê n là ả n h c ủ a L E D 7 đ o ạ n d ù n g tr o n g q u ả n g c á o
và b ả n g b á o g ia o th ô n g :
327
CHƯƠNG 7 : ĐIẾU KHIỂN L£0 7 s o AN illlM liu CHO N C IItl T i n e
GIỚ I T H IỆ U L E D 7 Đ O Ạ N
T ro n g th ự c tế , ta hay sử d ụ n g 2 h o ặ c n h iề u h o n L E D 7 3 ề có thể
hiể :. mịn h i í u k ý tự hũ n và c á c c o n s ố c ũ n g ít khi n à o ch ì TZ Z ' s n g đ o n VI
(từ cá , trườngh o p n g o a i lê ' n à roi và S3 c h t c h o ã c t r á n đ ẽ " ' ỉ - - - — IH
3' s
M i m i Ầ M I CHO NGƯƠI Tự HỌC CHƯƠNG 7: BIẾU KHIỂN LED 7 ĐOẠN
P h ầ n lớ n c h ú n g ta th ư ờ n g s ử d ụ n g p h ư ơ n g p h á p q u é t L E D đ ể h iể n th ị
led 7 đ o ạ n (x e m h ìn h d ư ớ i).
Digital Pin
C á c đ o ạ n L E D t r ê n L E D 7 đ o ạ n lầ n lư ợ t đ ư ợ c g ọ i tê n th e o c h ữ c á i
A -B -C -D -E -F -G , v à d ấ u c h ấ m (d o t). N h ư v ậ y , n ế u m u ố n h iể n th ị k ý tự n à o th i
ta c h ỉ c ầ n c ấ p n g u ồ n v à o c h â n đ ó là L E D s ẽ s á n g n h ư m o n g m u ố n .
T h ông s ố LED 7 đo ạn
L E D 7 th a n h d ù c ó n h iề u b iế n th ể n h ư n g tự u c h u n g th ì c ũ n g c h ỉ v ẫ n c ó
2 lo ạ i đ ó là :
• C h â n A n o d e c h u n g ( c h â n + c á c L E D m ắ c c h u n g lạ i v ớ i n h a u .)
• C h â n C a th o d e c h u n g (C h â n - c á c L e d đ ư ợ c m ắ c c h u n g v ớ i n h a u .)
C h â n 3 v à 8 là 2 c h â n V c c (n ố i n g ắ n m ạ c h lạ i VỚI n h a u , s a u đ ó n ố i
ch u n g v ớ i c h â n a n o d e c ù a 8 L E D đ ơ n ), v ậ y m u ố n L E D n à o đ ó s á n g th ì c h ỉ
việc n ố i c h â n c a th o d e x u ố n g m a s s . Đ iệ n á p g iữ a V c c v à m a s s p h ả i lớ n hơ n
1.3 V m ớ i c u n g c ấ p đ ủ L E D s á n g , tu y n h iê n k h ô n g đ ư ợ c c a o q u á 3 V .
329
CHƯƠNG 7 : Õ IẾ I m Ể N L Ỉ I 7 M Ạ I ẤU— u n CH m n m i
B ả n g c á c g iá t r ị đ iề u k h iể n từ A - G c h o L E D 7 đ o ạ n
B ả n g m ã h iể n th ị L E D 7 đ o ạ n d à n h c h o le d 7 đ o a n c ó a n o d e chung
(c á c L E D đơ n s á n g ở m ứ c 0):
0 110 0 0 0 0 0 CO
1 111110 0 1 F9
2 10 10 0 10 0 A4
3 10 1 1 0 0 0 0 B0
4 10 0 1 1 0 0 1 99
5 10 0 10 0 10 92
6 1 1 0 0 0 0 10 82
7 111110 0 0 F8
8 1000000 0 80
9 10 0 10 0 0 0 90
A 10 0 0 10 0 0 88
B 1 0 0 0 0 0 11 S3
390
MJIMIAM CIO NCWlTfMC CHƯƠNG 7: ĐIẾU KHIỂN LED 7 ĐOẠN
c 1 1 0 0 0 1 1 0 C6
D 10 10 0 0 0 1 A1
E 10 0 0 0 1 1 0 86
F 1 0 0 0 1 1 1 0 8E
- 10 1 1 1 1 1 1 BF
B ả n g m ã h iể n th ị L E D 7 đ o ạ n d à n h c h o L E D 7 đ o ạ n c ó c a th o d e c h u n g
(các L E D đ ơ n s á n g ở m ứ c 1).
1 0 0 0 0 0 1 10 06
2 0 10 1 1 0 11 5B
3 0 10 0 1 1 1 1 4F
4 0 110 0 110 66
5 0 110 110 1 6D
6 0 111110 1 7D
7 0 00 0 0 1 11 07
8 0 1111111 7F
9 0 110 1111 6F
A 0 1 1 1 0 111 77
B 0 111110 0 7C
c 0 0 1110 0 1 39
D 0 10 1 1 1 1 0 5E
E 0 11110 0 1 79
F 0 1110 0 0 1 71
- 0 10 0 0 0 0 0 40
131
CHƯdNG 7: eiẼU KHIỂN L£D 7 60AN U M q m r tliim
LE D 7 đ o ạ n sử d ụ n g tro n g chư ờ ng
T ro n g c hư ơ ng n à y c h ú n g ta sẽ sử d ụ n g c á c L E D 7 đ o a n c ó b á n ở các
ch ợ đ iệ n tử h a y c á c cử a h iệ u đ iệ n từ.
C á c L E D 7 đ o ạ n lo ạ i n à y đư ợc đ ó n g g ó i
kh á đ ẹ p . M ộ t s ố hìn h à n h v ề L E D 7 đ o ạ n b ạ n
c ó th ể m u a ở V iệ t N a m
Sơ đồ ch ân
Sơ đ ồ c h â n c h o h a i lo ạ i a n o d e v à c a th o d e tư ơng tự n h a u . T u y nhién
p h ầ n c o m m o n là c ự c tín h dư ơ ng n ế u là L E D 7 đ o ạ n a n o d e v à cự c tin h âm nếu
là L E D 7 đ o ạ n c a th o d e .
P h ầ n c ứ n g b à i n à y c ũ n g k h á đơ n g iả n . B ạ n d ù n g c á c đ ié n trỏ để hạn
d ò n g c h o L E D 7 đ o ạ n lo ạ i c a th o d e c h u n g . B ạ n c ó th ể x e m s o đ ố c h â n để kết
n ố i v ớ i b o m ạ c h A rd u in o .
P hần cứng
B ạ n có th ể d ù n g c á c đ iệ n trở đ ể h ạ n d ò n g c h o từ ng đ o a n c ù a LE D 7
đ o ạ n h o ặ c h ạ n d ò n g như trìn h b à y sau đ ể tiế t k iệ m đ iê n trà C 'i3 L E D 7 đoan
ở đ â y c h ú n g ta i sử d ụ n g c á c h h ạ n d ò n g b ằ n g 1 đ iệ n trờ à c -.ẳ n c h u n g như
hình k ế t n ố i m ạ c h ò tra n g b ê n . B ả n g tra n g b ẽ n là c á c h x ế : -IÕ'| b o m ach
A rd u in o v ớ i L E D 7 đ o ạ n .
332
A t ll M O OANH CHO NGƯƠI T ự HOC CHƯƠNG 7 : Đ IỂ U K H IỂ N LED 7 Đ O ẠN
BO M ẠCH ARDUINO LE D 7 ĐO ẠN
Chân số 0 Đ oạn A
Chân số 1 Đ oạn B
Chán số 2 Đ oạn c
Chân số 3 Đ oạn D
Chân số 4 Đoạn E
Chân số 5 Đoạn F
Chân số 6 Đoạn G
H ìn h ả n h k ế t n ố i n h ư h ìn h d ư ớ i. C h ú n g tô i đ ã đ á n h d ấ u c á c c h â n k ế t
nối với L E D 7 đ o ạ n b ằ n g c á c L a b e l đ ể r ú t g ọ n h ìn h ả n h :
DUIN01
333
CHƯƠNG 7: SIẾ1 H Ể I l£l 7 M Ạ I _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ U I— w Cim tW l K EC
B à i íậ p n à y sẽ đ ế m từ 0 đ ế n 9, s a u m ỗ i g iâ y thì sẽ tá n g b iế n đếm 1
C i o q
lần v à L E D 7 đ o ạ n sẽ s á n g th e o c á c s ố đ ế m n à y :
n 1 3 1 u 1
c
:
u I C : 50 iu J
J 1 Phần mềm
V iệ c lậ p trìn h c h o b à i tậ p n à y tư ơng đ ố i đơn g iả n . B ạ n sẽ sử dụ ng lại
c á c h à m d ù n g đ ể x u ấ t dữ liệ u từ b iế n tạ m ra c á c c h â n n g õ ra c ù a bo mạch
A rd u in o như b à i đ iề u k h iể n LE D đơn.
334
M W W IlA W C M W r t l T f l f C CHtftfNG 7 : A IẾ O K H IỂ N LEO 7 ĐO ẠN
u n s ig n e d c h a r
L E D S E G []= { 0 x 3 F ,0 x 0 6 ,0 x 5 B ,0 x 4 F , 0 x 6 6 ,0 x 6 D , 0 x 7 D ,0 x 0 7 ,0 x 7 F ,0 x 6 F , 0 x 7 7 ,0 x 7
C .0 x 3 9 ,0 x 5 E ,0 x 7 9 ,0 x 7 1 ,0 x 4 0 ) ;
// Biến tạm
u n s ig n e d c h a r L E D O U T P U T ;
b o o le a n x b it;
u n s ig n e d c h a r x c h a r = - 1 ;
if ( p o s < 1 6) x c h a r= 0 x 1 & v a l » p o s ;
x b it= x c h a r;
re tu rn x b it;
// Hàm giải mã số đếm thành các giá trị mã xuất cho LED 7 đoạn
u n s ig n e d c h a r D e c o d e N u m b e r ( c h a r n u m )
re tu rn L E D S E G [ n u m ] ;
{
CHƯƠNE 7: 6 IÉ U KHIẾM LED 7 BOẠIỈ U I« M u m CH I K H I ĩ > »
p in M o d e (i,O U T P U T );
L E D O U T P U T = D e c o d e N u m b e r(i);
C h a n g e O u tp u t();
d e la y (1 0 0 0 ); // Đợi 1 giây
T im h iể u p h ầ n m ề m
C hư ơ n g trìn h c h o b à i tậ p n à y b ắ t đ ầ u b ằ n g v iệ c k h a i b á o m ộ t mảng
ch ứ a c á c giá trị đ ể đ iể u k h iể n L E D 7 đ o ạ n tư ơng ứ ng v ó i c á c đ o ạ n A đến G
B ạ n k h a i b á o m ả n g n à y th e o L E D 7 đ o ạ n m ìn h đ a n g d ù n g . B á i n à y ch ú n g ta
d ù n g L E D 7 đ o ạ n c a th o d e c h u n g n ê n c h ú n g ta k h a i b á o m ả n g nnư sau:
u n s ig n e d c h a r
L E D S E G []= (0 x 3 F .0 x 0 6 ,0 x 5 B ,0 x 4 F ,0 x 6 6 ,0 x 6 D ,0 x 7 D ,0 x 0 7 ,0 x 7 F 0 x 6 F .0x77,0x7
c , 0 x 3 9 ,0 x 5 E ,0 x 7 9 .0 x 7 1 ,0 x 4 0 );
u n s ig n e d c h a r L E D O U T P U T ;
C á c h à m q u e n th u ộ c b a n đã b iế t:
336
UIIHIIAM Ntứơl TựBỊC CHƯƠH6 7 : Điếu KHIẾM LED 7 S O Ạ N
b o o le a n B it s t a t e ( c h a r v a l, c h a r p o s )
b o o le a n x b it;
u n s ig n e d c h a r x c h a r = - 1 ;
if ( p o s < 1 6 ) x c h a r= O x 1 & v a l » p o s ;
x b it= x c h a r ;
re tu rn x b it;
v o id C h a n g e O u tp u t( )
fo r ( in t i= 0 ;i< 8 ;i+ + )
H à m m ớ i tr o n g b à i tậ p n à y là h à m D e c o d e N u m b e r , h à m n à y d ù n g đ ể
ch u yể n đ ổ i c á c s ố đ ế m th à n h c á c g iá trị đ iề u k h iể n L E D 7 đ o ạ n . N ế u k h ô n g
có h à m n à y m à c h ú n g ta s ử d ụ n g trự c t iế p g iá trị c ủ a s ố đ ế m th ì k h i h iể n th ị
LED 7 đ o ạ n s ẽ b ị s a i.
u n s ig n e d c h a r D e c o d e N u m b e r ( c h a r n u m )
r e tu r n L E D S E G [ n u m ] ;
H à m n à y k h á đ ơ n g iả n . N ó c ó n h iệ m v ụ là lấ y s ố tr o n g th ô n g s ố n u m
đê’ lấy c á c g iá tr ị đ iề u k h iể n từ m ả n g L E D S E G . T iế p th e o là c h ư ơ n g trìn h k h ở i
tạo đã q u á q u e n th u ộ c v à c h ư ơ n g trìn h c h ín h n h ư s a u :
v o id lo o p Q
fo r ( in t i = 0 ; i< 1 0 ; i+ + )
3 37
CHƯƠNG 7: BIẾU (HIỂN LED 7 ĐOẠN UM— UM CIIIKếllTH C
L E D O U T P U T = D e c o d e N ijm b e r(i);
C h a n g e O u tp u t();
}
B ạ n đơn g iả n c h ì d ù n g v ò n g lặ p fo r đ ể đ ế m từ 0 đ ế n 9 m ỗ i giây.
T ro n g m ỗ i lầ n tă n g b iế n đ ế m th i g iả i m ã và đ iề u k h iể n L E D 7 đ o ạ n sá n g theo
số đếm .
P hẩn cứ ng
P h ầ n c ứ n g b à i n à y k h á đơn g iả n .
C h ú n g ta sẽ d ù n g L E D 7 đ o ạ n lo ạ i A n o d e c h u n g đ ể h iể n th ị cho bài
tậ p nà y.
C á c k ế t n ố i từ b o m ạ c h A rd u in o đ ế n L E D 7 đ o ạ n nhơ b à n g sau:
C hân số 0 Đ oạn A
C hân số 1 Đ oạn B
C hân số 2 Đ oạn c
C hân số 3 Đ oạn D
C hân số 4 Đ oạn E
C hân sổ 5 Đ oạn F
C h â n sô 6 Đ oạn G
338
W H i l IA W C H H6ƯỜI Tặ IỌC CHUtfWG 7: ĐIẾU KHIẾN LED 7 ĐĐẠH
ARDUỈNO UNO R3
R2
100
LED1 A
LED1 B
LED1
LED1
c
D M
LED1 E
LED1 F
• LED1 G I
33 S
CHƯƠNG 7: ĐIỂM I B Ế H I E I 7 BtẠM IẲ H c h w « m T Ị m
Phẩn mểm
C hư ơ n g trìn h c h o b à i tậ p n à y tương tự như b à i tru ó c tu y n h iê n c á c giá
trị đ iề u k h iể n b ạ n c ầ n th a y đ ổ i.
M ả n g c h ứ a m ã đ iề u k h iể n c h o L E D 7 đ o ạ n a n o d e c h u n g h o à n toàn
k h á c vớ i L E D 7 đ o ạ n c a th o d e c h u n g .
II Mảng chứa các giá trị điều khiển LED 7 đoạn anode chung
u n s ig n e d c h a r
LE D S E G []= {O xC O ,O xF 9,O xA 4,O xB O ,O x99,0 x 9 2 ,0 x 8 2 ,0 x F 8 ,0 x 8 0 .0 x 9 0 , 0 x 88 ,0x 8
3 ,0 x C 6 ,0 x A 1 ,O x86,O x8E ,O xB F);
// Biến tạm
u n s ig n e d c h a r L E D O U T P U T ;
{
b o o le a n xb it;
u n s ig n e d c h a r x c h a r= -1 ;
re tu rn xb it;
{
fo r(in t i= 0 ;i< 8 ;i+ + )
{
d ig ita l W rite (i.B itS ta te (L E D O U T P U T ,!));
340
CBƠƠM6 7: etếp IHIẼH L£p 7 S O Ạ H
// Hàm giải mã số đếm thành các giá trị mã xuất cho LED 7 đoạn
unsigned char D e cod eN um ber(ch ar num)
(
re tu rn L E D S E G [n u m ];
(
fo r(in t i= 0 ;i< 7 ;i+ + )
{
p in M o d e (i, O U T P U T );
L E D O U T P U T = D e c o d e N u m b e r ( i) ;
C h a n g e O u tp u tQ ;
H ã y b iê n d ịc h v à tả i c h ư ơ n g tr in h x u ố n g b o m ạ c h A r d u in o .
B ạ n s ẽ th ấ y L E D 7 đ o ạ n đ ế m từ 0 đ ế n 9 m ỗ i g iâ y .
K h i đ ế m đ ế n 9 th) L E D 7 đ o ạ n s ẽ đ ế m lạ i từ đ ẩ u .
N h ư b ạ n c ó th ể th ấ y , c h ư ơ n g tr in h b à i n à y tư ơ n g tự n h ư b à i trư ớ c tu y
n h iê n m ả n g c h ứ a g iá trị đ iề u k h iể n c h o L E D 7 đ o ạ n h o à n to à n k h á c .
141
CHƯƠN6 7 : O IẾ n IM Ế » l£ D 7 6 0 Ạ H JJJVM UMCBO WtOOl Tf Mt
P hần cứ ng
T ro n g c á c b à i tậ p trư ớ c b ạ n c h ỉ sử d ụ n g 1 L E D 7 đ o a n . T ro n g bà i táp
n à y c h ú n g ta s ẽ sử d ụ n g 2 L E D 7 đ o ạ n đ ể h iể n th ị đư o c n ô t số h à n g chuc
N ế u b ạ n sử d ụ n g bo m ạ c h A rd u in o U N O c h ú n g ta c h ỉ có th ể đ iề u k h iể n 2 LED
7 đ o ạ n b ằ n g ph ư ơ ng p h á p trự c tiế p . B ạ n h ã y k ế t n ố i c á c L E D 7 đ o ạ n như
b ả n g sau:
C hân số 0 Đoạn A
C hân số 1 Đoạn B
Chân số 2 Đoạn c
C hân số 3 Đ oạn D
Chân số 4 Đ oạn E
Chân số 5 Đ oạn F
Chân số 6 Đ oạn G
C hân số 8 Đ oan A
C hân số 9 Đ oạn B
Chân số 10 Đ oạn c
Chân sô' 11 Đ oan D
C h â n s ổ 12 Đ oạn E
C h â n số 13 Đoan -
C h â n tư ơ n g tự A N 5 I Đoan G
342
u i i a i >ẰWI CBO N6ƠỞI Tự ạqc CHƯđNC 7: AIỂƯ KHIẾN LED 7 ĐOẠN
DUJNQ1
ỆẾMMÊmỂÊỄề
f i l l i p l l
m ÊÊm m &ế
Wmmm fấ€Wấ
mỆÊÊÊÊễỆÊầ
lijlliii mÈÊIÊmÊÊmầ
'' . ' '• ' / / " / '■ . / '/ " t ỳ
mÊÊẫÊầ m &Ếm
Cw
H I
/ ; ■.: .
ARDUÌNO ƯNÕ R 3
343
CHƯƠNB 7 : 8 I Ế I m ế n LE» 7 eaẠH UW CNKHlTffl
Phần mềm
C hư ơ n g trìn h b à i tậ p n à y k ế th ừ a chư ơ ng trin h c ù a b à i tâ p trư dc. Tuy
n h iê n , b ạ n c ũ n g c ầ n p h ả i tìm h iể u m ã lệ n h chư ơ ng trin h vì b à i tậ p n à y chúng
ta sẽ th ê m p h ầ n th ự c h iệ n tá c h s ố đ ế m h à n g c h ụ c th à n n na i s ố riê n g lè hiển
th ị trê n L E D 7 đ o ạ n .
II Mảng chứa các giá trị điều khiển LED 7 đoạn anode chung
u n s ig n e d c h a r
L E D S E G []= {0 x C 0 ,0 x F 9 ,0 x A 4 ,0 x B 0 ,0 x 9 9 ,0 x 9 2 ,0 x 8 2 ,0 x F 8 ,0 x 8 0 ,0 x 9 0 ,0 x 8 8 ,0 x 8
3 ,0 x C 6 ,0 x A 1 ,0 x 8 6 ,0 x 8 E ,0 x B F };
// Biến tạm
u n s ig n e d c h a r L E D O U T P U T ;
{
b o o le a n xb it;
u n s ig n e d c h a r x c h a r= -1 ;
re tu rn x b it;
{
fo r (in t i= 0 ;i< 7 ;i+ + )
{
d ig ita lW rite (i,B itS ta te (L E D O U T P U T ,i));
!4 «
M ini IAN* CH0H6ƯỪI TựBỌC CHƯỬN6 7: BIỂU KHIẾN LED 7 ĐOẠN
I
fo r(in t i= 0 ;i< 6 ;i+ + )
(
d ig ita !W r ite ( i+ 8 ,B itS ta te ( L E D O U T P U T ,i) ) ;
}
d ig ita lW rite (A 5 , B itS t a te ( L E D O U T P U T ,6 ) ) ;
// Hàm giải mã số đếm thành các giá trị mã xuất cho LED 7 đoạn
u n s ig n e d c h a r D e c o d e N u m b e r ( c h a r n u m )
{
re tu rn L E D S E G [n u m ];
í
fo r(in t i= 0 ;i< 1 4 ;i+ + )
p in M ũ d e (i,O U T P U T ) ;
p in M o d e (A 3 , O U T P U T )
p in M o d e (A 4 , O U T P U T )
p in M ũ d e ( A 5 ,O U T P U T )
345
CHƯƠNG 7: 8IẼIIHIẾM L£l 7 BOẠH u»— iA M C M I t W l I f W
{
L E D O U T P U T = D e c o d e N u m b e r(i/1 0 );
C h a n g e L E D I ();
L E D O U T P U T = D e c o d e N u m b e r(i% 1 0 );
C h a n g e L E D 2 ();
d e la y (1 0 0 ); / / Dợi 1 giây
)
}
H ã y b iê n d ịc h v à tả i chư ơ ng trin h x u ố n g b o m ạ c h A rd u in o . B ạ n sẽ thấy
2 L E D 7 đ o ạ n đ ế m từ 0 đ ế n 99 m ỗ i g iâ y . K h i đ ế m đ ế n 9 9 th i 2 L E D 7 đ o ạ n sẽ
đ ế m lạ i từ 00.
T ìm h iể u p h ầ n m ề m
v o id C h a n g e L E D 1 ()
{
fo r(in t i= 0 ;i< 7 ;i+ + )
{
d ig ita lW rite (i.B itS ta te (L E D O U T P U T ,i));
}
}
V à h à m đ iề u k h iể n 7 n g õ ra c ủ a L E D 2:
v o id C h a n g e L E D 2 ()
{
fo r (in t i= 0 ;i< 6 ;i+ + )
{
d ig ita l W rite (i+ 8 ,B itS ta te ( L E D O U T P U T , i));
}
d ig ita lW rite (A 5 , B itS ta te (L E D O U T P U T ,6 ));
U l l i l BAND CHO W6ựơlTựHqC CHƯƠNG 7: fllẾU KHIẾN LED 7 ĐOẠN
v o id lo o p O
fo r (in t i = 0 ; i< 9 9 ; i+ + )
L E D O U T P U T = D e c o d e N u m b e r ( i/1 0 ) ;
C h a n g e L E D 1 ();
L E D O U T P U T = D e c o d e N u m b e r ( i% 1 0 );
C h a n g e L E D 2 ();
d e la y ( 1 0 0 ) ; / / Đợi 1 giây
N h ư b ạ n c ó th ể th ấ y , c h ú n g ta c ũ n g th ự c h iệ n h iể n th ị c h o từ n g L E D 7
đoạn v à th ự c h iệ n tá c h s ố đ ế m b ằ n g p h ư ơ n g p h á p d ù n g c á c lũ á n tử c h ia V
và lấ y p h ầ n d ư " % ” .
Đ ể lấ y đ ư ợ c h à n g c h ụ c b ạ n th ự c h iệ n lấ y s ố đ ế m c h ia c h o 10. V à đ ể
thực h iệ n lấ y h à n g đ ơ n v ị lấ y p h ẩ n d ư c ủ a p h é p c h ia c h o 1 0 . V í d ụ b ạ n c ó s ố
78, để lấ y p h ầ n c h ụ c b ạ n c h ia c h o 10:
7 8 /1 0 = 7
V à đ ể lấ y p h ầ n đ ơ n v ị b ạ n lấ y p h ầ n d ư c ủ a p h é p tín h :
78% 7=8
Đ ể lấ y c á c s ố h à n g tr ă m , h à n g n g à n c h ú n g ta c ũ n g sử d ụ n g p h ư ơ n g
pháp n à y .
Đ ể lấ y h à n g tr ă m c h ú n g ta s ẽ th ự c h iệ n n h ư s a u :
H à n g tră m = s ố đ ế m /1 0 0
H à n g c h ụ c = ( s ố đ ế m /1 0 ) % 1 0
H à n g đ ơ n v ị = s ố đ ế m % 10
P h ư ơ n g p h á p n à y b ạ n c ò n g ặ p r ấ t n h iề u đ ể th ự c h iệ n h iể n th ị s ố trê n
các lo ạ i m à n h ìn h h iể n th ị n h ư L E D 7 đ o ạ n , L E D m a tr ậ n , L C D .
347
CHƯƠNG 7: ĐIỂU KHIỂN LED 7 60ẠN U t lM D BAiyH CHD MCưm ĩ ặ * t
P hư ơ ng p h á p được d iễ n tả b ằ n g h in h ả n h nh ư s a u . C h ú n g ta giả sử
m u ố n h iể n th ị số 0 1 2 3 trê n 4 L E D 7 đ o ạ n :
B an đ ầ u c h ú n g ta c h o s á n g L E D 1 s á n g s ố 0 tro n g m ộ t k h o ả n g thời
g ia n n g ắ n :
S au đó tắ t L E D 1 và s á n g LE D 2 tro n g k h o ả n g thờ i g ia n n g ắ n :
348
CHƯ0N6 7: ĐIẾU KHIỂN LED 7 ĐOẠN
U B IW I DAUB CHO H6ƠƠI Tự HỌC
S ỉ - - á
C u ố i c ù n g là L E D 4:
V à v ớ i tố c đ ộ s á n g tắ t (h a y q u é t) liê n tụ c c ủ a từ n g L E D th ì m ắ t th ư ờ n g
của c h ú n g ta s ẽ th ấ y L E D h iể n th ị s ô 0 1 2 3 tr ê n 4 L E D 7 đ o ạ n :
P hấn cứ ng
B à i tậ p n à y c h ú n g ta s ẽ s ử d ụ n g 3 L E D 7 đ o ạ n đ ể th ự c h iệ n c ô n g v iệ c
hiển đ ế m từ 0 đ ế n 9 9 9 . B ạ n c ó th ể k ế t n ố i c á c c h â n n g õ ra c ù a b o m ạ c h
A rd u in o v ớ i L E D 7 đ o ạ n h o ặ c n ô i th ô n g q u a t r a n s is to r đ ể g iú p tă n g d ò n g c h o
LE D 7 đ o ạ n . B ạ n k ế t n ố i b o m ạ c h A r d u in o v ớ i L E D 7 đ o ạ n n h ư b à n g s a u :
34 9
CHƯƠM67: ĐIỂB IIIẾIÍ LEI 7 eOẠN U H M CẦWB CHOW(W ĩ f n t
C h â n s ố 10 C hân chung
h o ặ c th ô n g qua
tr a n s is t o r
H in h dưới là k ế t n ố i b o m ạ c h A rd u in o d ù n g tra n s is to r.
350
M G 7: ĐIẾII KHIỂN LED 7 Đ0ẠN
OHM lAMCIimWlTfHC
DUIN01
13
j : ' p f i4 ,* s c y - “ -
I H ^ W l O LED3
2 ' /'
i r9' ......rLẺb
F B a s f r O c ie j g b2
4 , f___ PB1w iftr -ị5 —
8 ll^(=I dij
3 1 Ẽ Ể É F y S m — 2— ^
1 7
ÍT G
1 5 F •
ấ 4 E •
1 3 D*
PD?1l c*
í 2
1 1 b:
1 0 A■
Ig D q /R jiD te
- i r a v . . ;
ARDUINO UNO R3
N ố i c á c L E D 7 đ o ạ n v ớ i b o m ạ c h A r d u in o n h ư h ìn h d ư ớ i.
Ũ l l l l l l
I I I I I I I I
ABCDEFG OP 1234
ũ ũ ũ
LLỊ LLỊ
351
CHƯỨN6 7: 61Éu KHIẾMl ĩ l 7 60AH U W I I I I CIO W M I K « t
H o ạ t đ ộ n g c ủ a c h ư ơ n g tr ì n h
B à i tậ p n à y sẽ đ ế m từ 0 đ ế n 9 9 9 , sau m ỗ i g iâ y th i sẽ lã n g b iế n đếm 1
lầ n v à 3 L E D 7 đ o ạ n sẽ s á n g th e o c á c s ố đ ế m n à y.
Phần m ềm
C hư ơ n g trin h b à i n à y h o à n to à n k h á c vớ i c á c c hư ờ ng trin h c h ú n g . Bởi
vi tro n g b à i n à y c h ú n g la th ự c h iệ n q u é t L E D th a y vì đ iề b k h iể n trự c tiế p Vi
v ậ y sẽ cỏ m ộ t s ố n h ữ n g h à m m ớ i v à c á c k h á c b iệ t v đ i h à m d e la y so với các
chư ơ ng trìn h trư ớ c
Chương trình đếm từ 0 đến 999 với 3 LED 7 đoạn bằng phương
p h á p q u é t (a n o d e c h u n g ):
II Khai báo các tên LED ứng với các LED 7 đoạn
# d e fin e LE D 1 8
# d e fin e L E D 2 9
# d e fin e L E D 3 10
// Mảng chứa các giá trị điều khiển LED 7 đoạn anode chung
u n s ig n e d c h a r
L E D S E G []= {0 x C 0 ,0 x F 9 ,0 x A 4 ,0 x B 0 ,0 x 9 9 ,0 x 9 2 .0 x 8 2 ,0 x F 8 ,0 x 8 0 .0 x 9 0 ,0 x 8 8 ,0 x 8
3 ,O x C 6 ,O x A 1 ,0 x 8 6 ,0 x 8 E ,0 x B F };
// Biến tạm
u n s ig n e d c h a r L E D O U T P U T ;
cha r n u m lE D I; // Biến chứa chữ số hàng trảm
cha r nu m LE D 2; // Biến chứa chữ sô' hàng chục
cha r nu m L E D 3 ; // Biến chứa chữ sô hàng đơn vị
352
m m n u a CHO N 6ưifi ĩự HỌC CHƯƠNG 7 : 8IẼD KHIẾN LED 7 ĐOẠH
re tu rn x b it;
(
for(int i= 0 ;i< 8 ;i+ + )
(
d ig ita lW r ite (i,B itS ta te ( L E D O U T P U T ,i)) ;
{
//Sáng LED 1 trong một thời gian ngắn
L E D O U T P U T = D e c o d e N u m b e r ( n u m L E D 1 );
C han g e O u tp u tQ ;
d ig ita lW r ite (L E D 1 ,L O W );
C h a n g e O u tp u tO ;
d ig ita lW r ite ( L E D 2 ,L O W ) ;
C h a n g e O u tp u t();
d ig ita lW r ite ( L E D 3 ,L O W ) ;
CHƯỨNC 7 : e i Ế I m ill LEI 7 MẠH u r n |> W CIO M tư li T Ịặ í
// Hàm giải mã số đếm thành các giá trị mã xuất cho LED 7 đoan
u n s ig n e d c h a r D e c o d e N u m b e r(c h a r nu m )
{
re tu rn L E D S E G Ịn u m ];
}
354
IrlP W t 1*1* CIO Mtlfifl nr n c CHƯƠNG 7: ĐIỂU KHIỂN LED 7 60ẠN
B à i tậ p n à y là b à i tậ p đầu tiê n s ử d ụ n g p h ư ơ n g p h á p q u é t c h o L E D 7
đo ạn n ê n b ạ n c ầ n p h ả i tìm h iể u v ề m ã lệ n h m ộ t c á c h c ẩ n th ậ n .
# d e fin e L E D 1 8
# d e fin e L E D 2 9
# d e fin e L E D 3 1 0
N g o à i ra c h ú n g ta k h a i b á o th ê m c á c b iế n đ ể c h ứ a c á c c h ữ s ố c ủ a s ố
đếm lẩ n lư ợ t là n u m L E D I , n u m L E D 2 , n u m L E D 3 ứ n g v ớ i c á c L E D 7 đ o ạ n 1
đế n 3:
v o id D is p la y L E D O
{
L E D O U T P U T = D e c o d e N u m b e r(n u m L E D 1 );
C h a n g e O u tp u t( ) ;
d ig it a iw r it e ( L E D 1 , H I G H ) ;
d e la y ( 3 ) ;
d ig ita lW r ite ( L E D 1 , L O W ) ;
N h ư b ạ n c ó th ể th ấ y tro n g p h ầ n m ã lệ n h tr ê n th ì c h ú n g ta s ẽ g iả i m ã
h iể n th ị đ ể đ iề u k h iể n c á c c h â n n g õ ra s a u đ ó c ấ p m ứ c c a o c h o c h â n c h u n g
LE D 1 tro n g k h o ả n g 3 m ilig iâ y s a u đ ó tắ t L E D 1
T iế p th e o c ũ n g th ự c h iệ n tư ơ n g tự v ớ i c á c L E D 2 v à L E D 3:
L E D O U T P U T = D e c o d e N u m b e r(n u m L E D 2 );
C h a n g e O u tp u t( ) ;
d ig ita lW r ite ( L E D 2 , H I G H ) ;
d e la y ( 3 ) ;
d ig itá lW r ite ( L E D 2 , L O W ) ;
L E D O U T P U T = D e c o d e N u m b e r(n u m L E D 3 );
C h a n g e O u tp u tQ ;
4CC
CHtftflW 7: C I Ẽ I H Ế I l £ l 7 M Ạ I U M CIO MUOI T | MC
d ig ita lW rite (L E D 3 ,H IG H );
d e la y (3 );
d ig ita l W rite ( LE D 3 .L O W );
}
T i ế p th e o là h à m D e la y D is p la y lO M S đ ể tạ o thờ i g ia n đợ i c ù n g lú c VỚI
v iệ c q u é t LE D :
v o id D e la y D is p la y l O M S (c h a r tim e )
{
fo r(in t i = 0 ;i< tim e ;i+ + ) D is p la y L E D O ;
)
N h ư b ạ n đ ã b iế t rằ n g , m ỗ i lầ n q u é t L E D c h ú n g ta tố n h o n 9 m ilig iâ y dể
q u é t q u a 3 L E D (m ỗ i L E D 3 m ilig iâ y ).
V à tổ n g thờ i g ia n đ ể th ự c h iệ n h ế t m ộ t lầ n q u é ! là k h o ả n g g ấ n 10
m ilig iâ y (c á c lệ n h khác) vì v ậ y chúng ta thự c h iệ n m ót lầ n gọi hàm
D is p la y L E D là tố n 10 m ilig iâ y . V à c h ú n g ta sẽ lạ o m ộ t h à n tạ o d e la y có thời
g ia n đợi n h ỏ n h ấ t là 10 m iiig iã y . Đ ể tạ o thờ i g ia n r1 lay 1 0 0 m ilig iâ y thì chúng
ta g ọ i h à m D e la y D is p la y 1 0 M S (1 0 ).
v o id lo o p ()
{
fo r (in t i = 0 ; i< 1 0 0 0 ; i+ + )
{
n u m L E D 1 = i/1 0 0 ;
n u m L E D 2 = (i/1 0 )% 1 0;
n u m L E D 3 = i% 1 0 ;
D e la y D is p la y 1 0 M S (1 0 0 ); II Dợi 1 giây
)
}
N hư b ạ n c ó th ể th ấ y c h ú n g ta sẽ tạ o m ộ t v ò n g lá p c n a y 1 0 0 0 lán
v à rú t từ ng ký tự c ủ a s ố đ ế m đ ể h iể n th ị v à o c á c b iế n n u m L E D I. n u m L E D 2
và num LED 3 sau đó tạ o th ò i g ia n đợ i 1 g iâ y bằng cách gọi hàm
D e la y D is p la y 1 0 M S (1 0 0 ) như trê n .
B ạ n c ó th ể m o rộ n g lẽ n đ ế n 13 L E D 7 đ o ạ n trê n b o m a c -, A rd u in o
356
H N IM lAn tig wetftfl Tựwe___________ CHƯƠM6 8: HIỂNTHỊ «ẾĨ QUẢeo ĩil CÁMBIẾN NHIỆT Bệ VÀ flệ ẨM
CHƯƠNG 8
T ro n g b à i tậ p trư ớ c c h ú n g ta đ ã là m q u e n v ớ i L E D 7 đ o ạ n v à đ ã lậ p
trình đ iề u k h iể n c h o L E D 7 đ o ạ n đ ế m từ 0 đ ế n 9, đ ế m từ 0 đ ế n 9 9 sử d ụ n g 2
L E D 7 đ o ạ n c ũ n g n h ư đ ế m từ đ ế m từ 0 đ ế n 9 9 9 s ử d ụ n g 3 L E D 7 đ o ạ n . T ừ ý
tưởng c á c b à i tậ p n à y b ạ n c ó th ể h iể n th ị n h iề u s ố c ầ n th iế t v ớ i n h iề u L E D 7
đ o ạ n a n o d e c h u n g c ũ n g n h ư c a th o d e c h u n g . B ạ n c ó th ể tiế n h à n h d ù n g L E D
7 đ o ạ n đ ể tiế n h à n h q u ả n g c á o là m b ả n g đ ồ n g h ồ b á o g iờ v ớ i k íc h th ư ớ c lớ n
th a y v) d ù n g L C D h a y L E D m a tr ậ n đ ể h iể n th ị.
T ro n g b à i tậ p nà > c h ú n g ta s ẽ s ử d ụ n g b o m ạ c h A r d u in o đ ể h iể n th ị
kế t q u ả đ o từ c ả m b iế n b ằ n g L E D 7 đ o ạ n . Đ â y là v iệ c là m k h ô n g th ể th iế u
được trong điều khiển. Các cảm biến ỏ đây có thể là những đại lượng điện
như đ iệ n á p , d ò n g đ iệ n , đ iệ n trở... h a y k h ô n g đ iệ n n h ư n h iệ t đ ộ , á p s u ấ t, đ ộ
ẩ m , k h o ả n g c á c h , á n h s á n g , tố c đ ộ v.v...
T h ự c c h ấ t c ủ a v ấ n đ ề n à y là d ù n g b o m ạ c h A r d u in o đ ọ c g iá t r ị tư ơ n g
tự từ th ế g iớ i th ự c b ê n n g o à i v à o . T rư ớ c k h i th ự c h à n h b à i tậ p c h ín h là h iể n th ị
k ế t q u ả đ o từ c ả m b iế n n h iệ t đ ộ v à đ ộ ẩ m c h ú n g ta c ầ n c ó m ộ t k iế n th ứ c n ề n
về c á c h đ ọ c g iá tr ị a n a lo g v ớ i b o m ạ c h A r d u in o v à h iể n th ị tr ê n L E D 7 đ o ạ n .
V iệ c b iế t c á c h đ ọ c c á c g iá trị a n a lo g r ấ t c ó lợ i tr o n g tro n g q u ả n g c á o n ó i riê n g
và tro n g v iệ c h iể n th ị c á c g iá tr ị c ả m b iế n đ o đ ư ợ c tr ê n m à n h ìn h . V ớ i c á c g iá
trị h iê n th ị rõ r à n g s ẽ g iú p n g ư ờ i d ù n g c ó th ể th e o d õ i c á c g iá trị n h iệ t đ ộ . đ ộ
ẩ m , á p s u ấ t..., từ đ ó c ó th ể đ ư a ra c á c g iả i p h á p th íc h ứ n g .
ĐQC GIÁ TRỊ ANALOG ĩ í í BIÊN TRỞ VÀ HIỂN ĨH Ị TRÊN LED 7 ĐOẠN
P hần cứ ng
T r o n g b à i tậ p n à y c h ú n g ta s ẽ th ự c h iệ n h iể n th ị g iá trị b ộ c h u y ể n đ ổ i
tư ơng tự s a n g s ố tr ê n L E D 7 đ o ạ n d ự a v à o b iế n trở . V ì v ậ y c h ú n g ta s ẽ n ố i
th ê m b iế n trở v à o b o m ạ c h A r d u in o . H a i c h â n ngoài của b iế n trở nối vớ i
n g u ồ n + 5 V v à G N D v à chân g iữ a n ố i v ớ i b o m ạ c h A r d u in o th ô n g q u a c h â n
tương tự AO. C á c L E D 7 đ o ạ n n ố i v ớ i b o m ạ c h A r u in o q u a c á c c h â n (p in ) n h ư
b ả n g tr a n g b ê n , m ộ t k h i th a y đ ổ i b iê n trỏ c ó n g h ĩa ta th a y đ ổ i đ iệ n á p a n a lo g
đ ư a v à o b o m ạ c h A r d u in o đ ể xử lý.
CHƠƠNCI: lấn Tll IẾTỊIẨ M T<CẨMlếl MUỆĨ M »Ầlệ ẨM IM CHKMlTfJK
C h â n s ố 10 C h â n ch u n g
ho ặc th ô n g qua
tra n sisto r
H in h kết
nối 3 LED 7
đ o ạ n v à b iế n trở
như hình b ê n và
tra n g b ê n : I I _ ! I I I I
ĩ
I I I I I I I I
ASCDEFC DP 1234
TTTTTTTl
358
MHIM » ■ C lljO ilTjH C CHƯƠH6 8: HIẾN THỊ KẾT qUÁ 00 TÍÍ CẦM BIẾN NHIỆT BỘ VÂ flộ ẨM
B à i tậ p h ư ớ n g d ẫ n c á c b ạ n b iế t c á c h đ ọ c g iá trị đ iệ n á p từ b iế n trở v à
c h u y ể n th à n h g iá tr ị s ố th ô n g q u a b ộ c h u y ể n đ ổ i tư ơ n g tự th à n h s ố . S a u đ ỏ
c h ú n g ta s ẽ s ử d ụ n g g iá trị s ố đ ọ c đ ư ợ c v à h iể n th ị từ 0 - 1 0 2 4 . C h ú n g ta c h ỉ
sử d ụ n g 3 L E D 7 đ o ạ n n ê n c h ú n g ta s ẽ th ấ y x u ấ t h iệ n g iá trị c h ữ A tạ i L E D 1
khi c h ú n g ta c ó g iá trị đ iệ n á p đ ọ c v à o lổ n h ơ n 10 00. C hữ A ứng vớ i số 10
tro n g h ệ th ậ p lụ c p h â n . V à c h ỉ c ó L E D 1 h iệ n c h ữ “ A ” n ế u g iá trị v ư ợ t q u á
1000. B ạ n h ã y c h ú ý đ iể m n à y .
Phần mềm
Đ ể lậ p trìn h c h o b à i tậ p n à y b ạ n c ũ n g th ự c h iệ n q u é t L E D v à g iả i
q u y ế t m ộ t v ấ n đ ề s a u : C h ú n g ta s ẽ đ ọ c c á c g iá trị từ b iế n trở th ô n g q u a c á c
h à m x â y d ự n g s ẵ n c ù a A r d u in o ID E .
Chương trình đọc biến trở và hiển thị trên LED 7 đoạn:
// Chương trình đọc biến trở và hiển thị trên LED 7 đoạn
II Khai báo các tên LED ứng với các LED 7 đoạn
359
CHƯđNt l : l ế u T»l IẾ T U Ẩ w T l CẨM I Ế I M Ệ T l ệ VA t ệ ÍM im w ic t w w m t> w t
# d e fin e LE D 1 8
# d e fin e L E D 2 9
# d e fin e L E D 3 10
// Mảng chứa các giá trị điều khiển LED 7 đoạn Anode chw'g
u n s ig n e d c h a r
L E D S E G []= {0 x C 0 ,0 x F 9 ,0 x A 4 ,0 x B 0 ,0 x 9 9 ,0 x 9 2 ,0 x 8 2 ,0 x F 8 .0 x 5 0 .0 x 9 0 .0 x 8 8 .0 x 8
3 ,0 x C 6 ,0 x A 1 0 x 8 6 0 x 8 E O xBF};
// Biến tạm
u n s ig n e d c h a r L E D O U T P U T ;
{
b o o le a n xb it;
u n s ig n e d c h a r x c h a r= -1 ;
{
fo r (in t i= 0 ;i< 8 ;i+ + )
í
d ig ita lW rite (i, B its tate (L E D O U T P U T ,!));
}
// Hàm quét LED
360
I MHIWIAIM CION6IÍỜI TMPC CHƯƠMG 8: HIẾN THỊ KẾT qUẢ BO Tư CẦM BIÊU NHIỆT eộ VÀ flệ ẨM
void D is p la y L E D O
{
// Sáng LED 1 trong một thời gian ngán
L E D O U T P U T = D e c o d e N u m b e r(n u m L E D 1 );
C h a n g e O u tp u tQ ;
d ig ita lW rite (L E D 1 ,L O W );
C h a n g e O u tp u tQ ;
d ig ita lW r ite (L E D 2 ,L O W );
C h a n g e O u tp u t();
d ig ita lW rite (L E D 3 , L O W ) ;
// Hàm giải mã số đếm thành các giá trị mã xuất cho LED 7 đoạn
u n s ig n e d c h a r D e c o d e N u m b e r ( c h a r n u m )
861
CHƯƠNG 8: HIẾN m KẾT Ị I Ắ i t Tir CẮM l ẩ l M É T l ệ »A l ệ ẨM IMS CH K im lặ Mĩ
re tu rn L E D S E G Ịn u m ];
{
fo r(in t i= 0 ;i< 1 1 ;i+ + )
{
p in M o d e (i,O U T P U T );
}
// Thiết lập chân analog 0 là chán ngõ vào
p in M o d e (A 0 , IN P U T );
{
in t a n a lo g ; // Biến tạm chứa giá trị đọc
a n a lo g = a n a lo g R e a d (A O );// Dọc dữ liệu từ biến trở
n u m L E D 1 = a n a lo g /1 0 0 ;
n u m L E D 2 = ( a n a lo g /1 0 )% 1 0 ;
n u m L E D 3 = a n a lo g % 10;
A12
T im h iể u p h ầ n m ề m
P h ầ n lậ p trìn h c h o b à i tậ p n à y ở p h ầ n q u é t L E D tư an g :u n h ư b ạ n đã
tìm h iể u ở b à i tậ p trư ớ c. T u y n h iê n tro n g b à i lậ p n à y c h ú n g ta sẽ có thèm
p h ầ n đ ọ c g i á trị b i ế n trở t h ô n g q u a b ộ c h u y ể n đ ồ i tư ơ n g tư s a n g s ố c ù a bo
m ạ c h A rd u in o .
362
Ị WHIM I A » CIO MỜI T jfm CHƯƠNG 8: HIẾN THỊ KẾT QUẢ BO TỪ CẦM BIẾN NHIỆT Đô VÀ cộ ẨM
v o id s e tu p O
{
fo r ( in t i= 0 ;i< 1 1 ;i+ + )
{
p in M o d e ( i,O U T P U T );
}
p in M o d e (A O , IN P U T );
)
N h ư b ạ n th ấ y , tro n g c h ư ơ n g trìn h k h ở i tạ o c h ú n g ta s ẽ k h a i b á o th ê m
phần n g õ v à o c h o c h â n A n a lo g 0 . B ạ n c ó th ể t h iế t lậ p c á c c h â n n g õ v à o h o ặ c
không c ầ n p h ả i k h ở i tạ o b ở i vì th e o m ặ c đ ịn h , c á c c h â n A n a lo g là c á c c h â n
ngõ v à o . T iế p đ ế n , tr o n g c h ư ơ n g trìn h c h ín h c h ú n g ta s ẽ tạ o b iế n tạ m c h ứ a g iá
trị đ ọ c từ b iế n trỏ . C h ú n g ta s ẽ d ù n g h à m a n a lo g R e a d đ ể đ ọ c g iá trị tư ơ n g tự
từ c á c c h â n tư ơ n g tự . C h ư ơ n g trìn h c h ín h n h ư s a u :
v o id lo o p O
n u m L E D 2 = ( a n a lo g /1 0 ) % 1 0 ;
n u m L E D 3 = a n a lo g % 1 0 ;
363
CHƯƠNG t : BIỂN T IỊIẾ T QUẢ ĐO Tứ CẢM HẾK NIIỆT B í V * Bệ iu U N M UM C im tM lT H C
G iớ i th iệ u v ề m o d u le đ ọ c n h iệ t độ và đ ộ ấ m D H T 1 1
B o c ả m b iế n n h iệ t độ v à đ ộ ẩm đư o c tích h o p tr o 'ig " l ó ; m o d u le dõng
g ó i s ẵ n có 3 c h â n g ồ m c á c c h â n n g u ồ n và m ó t c h á n đẽ c ^ C n g ta co th é đọc
được c á c g iá trị c ả m b iế n (G ía D H T 1 1 v à o th ó i đ iể n tn á n g 1 -2 0 1 5 khoảng
4 5 .0 0 0 đ ). M ộ t s ố hìn h ả n h c ủ a m o d u le D H T 11:
C ả m b iế n c h ín h c ủ a m o d u le :
i
I___ ị\
364
UHIMIAWICHO H6ƠƠI Tự HỌC CHƯƠNG 8: HIẾN THỊ KẾT QUẢ 80 Tií CÁM 8IẾN NHIỆT BỘ VÀ Đõ ẨM
N h ư b ạ n th ấ y , b ộ c ả m b iế n là b o m ạ c h n ằ m tr o n g lớ p v ỏ x a n h c ủ a
hinh tra n g trư ớ c . N ế u b ạ n m u a m ộ t m o d u le tn ì b ạ n s ẽ c ó 3 c h â n g ồ m các
châ n n g u ổ n v à c h â n tín h iệ u . N ế u k h ô n g m u a m o d u le m à m u a 1C r iê n g lẻ th i
bạn h ã y k ế t n ố i m ạ c h v ớ i c á c c h â n n h ư h ìn h dư ớ i.
Đ ể là m q u e n v ớ i b ộ c ả m b iế n n à y , b ạ n s ẽ k ế t n ố i m ạ c h n h ư h ìn h dư ớ i
và v iế t m ộ t c h ư ơ n g trìn h đ ơ n g iả n . S a u đ ó d ù n g c h ư ơ n g trìn h th e o d õ i c ổ n g n ố i
tiếp đ ể th e o d õ i c á c g iá trị c ả m b iế n . T rư ớ c tiê n , đ ể đ ọ c đ ư ợ c g iá trị c ả m b iế n
chú ng ta s ẽ sử d ụ n g th ê m m ộ t th ư v iệ n đ ư ợ c x â y d ự n g s ẵ n đ ể d ễ d à n g c h o
việc sữ d ụ n g c ả m b iế n .
B ạ n h ã y th e o đ ư ờ n g d ẫ n s a u đ ể tả i v ề th ư v iệ n :
DHT-111
«w * số * r -:' ■';•
n X i -»»'<«>♦ ♦ •<*,>♦
1 :0 ■ *.» .3
- - ữ**í n p J ự
3G5
CHƯONE 8: I I Ĩ N T I! IẾ T ạOẢ 8» T l tẢ H » ấ » M Ệ T 81 DÀ l ệ ẨM nm CM K M iT f f t
P h ầ n m ề m cơ b ả n đ ể đ ọ c giá trị c ả m b iế n D H T -1 1
{
S e ria l.b e g in (9 6 0 0 ); / / Khởi tạo tốc độ truyền nổi tiếp
S e ria l.p rin tln Q ; // Bỏ 1 dòng đầu
// Xuất giá trị hệ thống sắp xếp của việc hiển thị
S e ria l.p rin tln (“ S ta tu s \tH u m id ity (% )\tT e m p e ra tu re (C )\t(F )"):
v o id loopO
{
d e la y (d h t.g e tM in im u m S a m p lin g P e rio d ()); / / Tạo thời gian trễ cho
II việc đọc dữ liệu
366
AINIM1AM CIONGƠỮIT(f IOC CHƯƠNG 8: HIẾN THỊ KẾT qUÂ BO TƯ CẤM IIẾN MHIỆT BQ DÀ ĐỘ ẨM
S a u k h i b iê n d ịc h v à tả i c h ư ơ n g trìn h x u ố n g b o m ạ c h A r d u in o b ạ n h ã y
mở ch ư ơ n g trin h th e o d õ i c ổ n g n ố i t iế p c ủ a b o m ạ c h A r d u in o b ằ n g c á c h c h ọ n
m enu T o o ls > S e r ia l M o n it o r đ ể x e m g iá trị c ả m b iế n đ ọ c đ ư ợ c .
l i i l l i i - |p | x j
f e e COM3 *■ 1 1 1 1 1 1
if 6 Send 1
ị S ta tu s H u m id ity (% 5 T e m p e ra tu re (C ) (F )
OK 6 9 .0 2 9 .0 3 4 .2
J
OK 6 9 .Q 2 9 .0 3 4 .2
OK 5 9 .Q 2 9 .G 2 4 .2
OK 6 9 .0 2 9 .0 8 4 .2
OK 6 3 .0 2 3 .0 8 4 .2
OK Õ 9 .0 2 9 .0 3 4 .2
OK 6 9 ,0 2 9 ,0 3 4 .2
OK 6 3 .0 2 9 .0 8 4 .2
OK 5 9 .0 2 9 .0 8 4 .2
OK 6 9 .0 3 0 .0 8 6 .0
OK 6 3 .0 2 9 .0 8 4 .2
■ OR 7 0 .0 3Q .Ũ S € .0
' OK € 9 .0 3 0 .Q 3 Ó .0
OK 6 9 .0 3 0 .0 8 € .0
OK 6 9 .0 3 0 .0 8 6 .0
z l
Í 7 AutosaoS I No line ending jr j Ị9600 baud jJ
# in c lu d e " D H T .h "
T iế p th e o là tạ o đ ố i tư ợ n g c h o th ư v iệ n :
D H T d h t;
V à c h ú n g ta s ẽ k h ở i tạ o c á c p h ầ n c ứ n g s ẽ s ử d ụ n g n h ư b ộ tr u y ề n dữ
liệu n ố i tiế p ( s e ria l), b ộ c ả m b iế n đ ư ợ c k ế t n ố i v à o c h â n tư ơ n g tự AO:
v o id s e tu p O
3E7
CHƯƠNG«: B Ó ny IÍT qOẢ 81 T< CẢM l í » MIỆT Bệ V* Bề ẨM IW U W C H null ỈH I
d h t.s e tu p (A O );
C h ú n g ta sẽ lựa c h ọ n c h â n đ ọ c giá trị c ù a c ả m b iế n là AO vì c ả m biến
c h ú n g ta c h â n n g õ ra n ố i vớ i c h â n tương tự 0 c ù a b o m ạ c n A rd u in o .
T iế p đ ế n c h ú n g ta sẽ ch ú ý đ ế n chư ơ ng trin h c h ín h vì v iệ c đ ọ c giá tri
c ả m b iế n đ ề u n ằ m ỏ chư ơ ng trìn h n à y . B ạ n h ã y c h ú ý c á c d ò n g lệ n h này
tro n g chư ơ ng trin h c h ín h :
P h ầ n cứ ng
368
UNIMIANH CHO H6ƯƠI Tự Hge CHƯƠNG 8: HIỂN THỊ KẾT QUÁ DO TƯ CẨM BIẾN NHIỆT eệ VA flộ ẨM
C h â n s ố 10 C hân chung
h o ặ c th ô n g
qua
tr a n s is to r
Chân tư ơ n g tự DATA
AO hoặc
OUT
H ìn h tra n g b ê n lá ả n h k ế t n ố i 3 L E D 7 đ o ạ n v à b iế n trỏ .
369
CHƯỜM»: lẩ n TI! IÍT »Ẩ 80 Tĩr CẢM IẾII MHÊĨ Bệ V* M ẤM O tU H BANK CHO NtHl lặ lật
DUIN01
H o ạ t đ ộ n g c ủ a c h ư ơ n g tr ì n h
B à i tậ p n à y c h ú n g ta sẽ đ ọ c g iá trị n h iệ t đô c ù a c ả n t i ế n D H T -1 1 và
g iả i m ã c á c giá trị đ ọ c đư ợc từ c ả m b iế n v à h iể n th ị trê n L E D 7 đ o a n N h ié t đõ
đ ọ c được tro n g b à i tậ p n à y sẽ là ° c . B ạ n c ũ n g c ó th ể đ o c g.3 ' r đó ầ m vá giá
trị n h iệ t độ là °F đ ể h iể n th ị trê n LE D 7 đ o ạ n .
370
M— I I À ẵ i C i m ế Ì I H H Ệ C CM m e »: t i t I I I I Ế Ĩ W Ầ 8 1 T l CÁM HẾH HHỆT Bệ VÁ Bệ ẦM
Phán mém
Đ ể lậ p trìn h c h o b à i tậ p n à y b ạ n c ũ n g th ự c h iệ n q u é t L E D v à đ ọ c g iá
trị c ả m b iế n D H T - 1 1 d ự a v à o thư v iệ n D H T . N ế u b ạ n k h ô n g c ó s ầ n thư v iệ n ,
có th ể tả i v ề h a y n h ậ p th e o p h ầ n s o u r c e c o d e trìn h b à y tr o n g s á c h .
Chường trình đọc cảm biến và hiển thị trẽn LED 7 đoạn:
II Khai báo các tên LED ứng với các LED 7 đoạn
#define LE D 1 8
#define L E D 2 9
#define L E D 3 10
// Mảng chứa các giá trị điều khiển LED 7 đoạn anode chung
unsigned c h a r
L E D S E G []= (0 x C 0 ,0 x F 9 ,0 x A 4 ,0 x B 0 ,0 x 9 9 ,0 x 9 2 ,0 x 8 2 ,0 x F 8 ,0 x 8 0 ,0 x 9 0 ,0 x 8 8 ,0 x 8
3 ,0 x C 6 ,0 x A 1 ,0 x 8 6 ,0 x 8 E ,0 x B F ) ;
II Biến tạm
unsig ned c h a r L E D O U T P U T ;
bo olean x b it;
u n s ig n e d c h a r x c h a r = - 1 ;
x b it= x c h a r;
re tu rn x b it;
371
CaTOM I: l t » Tlj IÍT ỊIẦ w T« CÁMIỊẾ Ị M tT r t n M ẮM u a CM K i l l u ME
v o id C h a n g e O u tp u tQ
{
fo r(in t i= 0 ;i< 8 ;i+ + )
{
d ig ita lW rite (i,B itS ta te (L E D O U T P U T ,i));
{
// Sáng LED 1 trong một thời gian ngán
L E D O U T P U T = D e c o d e N u m b e r(n u m L E D 1 );
C h a n g e O u tp u tQ ;
C h a n g e O u tp u tO ;
d ig ita lW rite (L E D 2 ,L O W );
C h a n g e O u tp u tQ ;
d ig ita lW rite (L E D 3 ,L O W );
372
UNIMIÀM CHWrtllMfC CBƯđNC1: HIẾHHI IÍT ỊỊBẨ ca CÁMBIẾMMMÊT Bệ VÀ BỘẦM
(
fo r(in t i = 0 ;i< tim e ;i+ + ) D is p la y L E D Q ;
// Hàm giải mã số đếm thành các giá trị mã xuất cho LED 7 đoạn
u n s ig n e d c h a r D e c o d e N u m b e r ( c h a r n u m )
re tu rn L E D S E G [n u m ];
pinMode(i,OUTPUT);
pinMode(11,INPUT);
d h t.s e tu p (A O );
te m p = d h t.g e tT e m p e r a tu r e ( ) ; // Dọc n h iệ t độ
873
cacm »: IIẾI TỊỊ »ẾT ỆIẨ M Tl CẲHIẾM r t T lệ HÀ lệ ẨM !>■ CM KM I TfWC
n u m L E D 2 = (te m p /1 0 )% 1 0 ;
n u m L E D 3 = te m p % 1 0;
H ã y b iê n d ịc h v à tả i chư ơ ng trin h x u ố n g bo m ạ c h A rd u in o .
T im h iể u p h ẩ n m ề m
• C ầ n c h ú ý m ộ t s ố p h ầ n m ã lệ n h tro n g b à i tậ p n à y nh ư v iệ c b ạ n vừa
p h ả i đ ọ c g iá trị n h iệ t đ ộ , đợ i v à h iể n th ị trê n L E D 7 đ o a n .
v o id loopO
n u m L E D 2 = (te m p /1 0 )% 1 0;
n u m L E D 3 = te m p % 1 0 ;
374
U IIM IA H C 1 0 m W l Tf IỌC CHƯƠNG 9: ARDUINO VÀ MODULE CẨM B Ế H A H ĩm m
CHUÔNG 9
V í d ụ : B ạ n c ó th ể d ù n g m o d u le c ả m b iế n â m th a n h d ù n g đ ể đ ó n g m ở
cửa p h ò n g tr o n g n h à h o ặ c m ở đ è n . C h ỉ v ớ i h a i h o ặ c 3 tiế n g v ỗ ta y th ì h ệ
thống đ è n h o ặ c h ệ th ố n g r è m c ử a s ẽ tự đ ộ n g m ỏ v à đ ó n g v à o . V iệ c n à y s ẽ
giúp b ạ n d ễ d à n g đ iề u k h iể n c á c đ ố i tư ợ n g v à tư ơ n g tá c v ớ i đ ố i tư ợ n g t ố t h ơ n
lầ v iệ c d ù n g c á c c h u y ể n m ạ c h cơ k h í n h ư c ô n g tắ c h a y n ú t n h ấ n .
H ìn h dư ớ i v à tra n g b ê n là ả n h c ủ a m o d u le e le c tr e t.
375
CHƯƠNG 9: M U M VA M O D ILE CÁM IIẾ N Ầ M H A U utn» BAWB CMO ncưai T» MC
T rê n m o d u le có m ộ t b iế n trở d ù n g để
c h ỉn h m ứ c ng ư ỡ n g đ ể p h á t h iệ n â m th a n h . B ạ n
có th ể c h ỉn h đ ộ n h ạ y th e o ý m u ố n đ ể đ ả m b ả o
chươ ng trìn h k h ô n g bị n h iễ u bởi tạ p ã m .
Lưu ý: Các bạn có thề dùng nhiều module bán sẩn Uorg tư để thưc
hành. Ở đây giới thiệu module electret đo module này có bár -at nhiéu tai các
cửa hàng điện tử cũng như trên mang với giá không mác (khcă' 5 45.000 đ vào
thời điểm tháng 1-2015) nếu mua mạch rời vế lắp ráp sẽ rrẫ: i~ơ gian, khóng
đẹp và có giá còn cao hơn mua module bán sẩn.
376
CHƯƠNG 9 : ARDUINQ V À M O DULE C Ả M B IÊ N Â M THANH
U IIM DANH CHO H6ƯƠI Tự BỌC
C h ú n g ta c ầ n m ộ l m o d u le e le c tr e t, đ iệ n trỏ v à m ộ t đ è n L E D đ ể th ự c
hiện v iệ c n à y . B ạ n k ế t n ố i b o m ạ c h A r d u in o v ớ i c ả m b iế n n h ư h ìn h d ư ớ i.
Đ o ạ n m ã lậ p trìn h đ ể đ iề u k h iể n L E D 7 đ o ạ n s ử d ụ n g m o d u le E le c tr e t
trinh b à y ỏ c á c tr a n g s a u .
Ỉ7 7
m m m a cm Htưm Tf MC
CBƯ0NG9: AIDINt VAMODULI CÁMn i l ẲMriAH
b o o le a n S tate; / / B iế n trạ n g th á i
{
p in M o d e (0 ,O U T P U T );
p in M o d e (A 0 , IN P U T );
{
if(d ig ita lR e a d (A 0 )= = 1 ) II Kiểm tra xem có âm thanh hay khõng
{
d e la y (1 0 0 ); / / Dảm bảo ảm thanh có đủ độ dài
if(d ig ita lR e a d (A 0 )= = 1 ) // Dảm bảo không phải tạp âm
(
w h ile (d ig ita lR e a d (A 0 )= = 1 ); / / Đợi âm thanh kết thúc
s ta te = !s ta te ; // Đảo trạng thái LED
d ig ita lW rite (0 ,S ta te );
d e la y (1 0 0 0 ); / / Tạo thời gian trễ đảm bảo không liên tục tất mở LED
}
}
B ạ n b iê n d ịc h và tà i c hư ơ ng trin h x u ố n g bo m ạ c h A rd u in o . H ã y cán
c h ỉn h b iế n trở đ ể c ó đ ô n h ạ y th ậ t hợ p lý đ ể k hi b ạ n đ ứ n g từ xa vỗ la y sẽ thay
đ ổ i được trạ n g th á i L E D . B ạ n sẽ th ấ y rấ t thú vị k h i tắ t mở L E D b á n g c á c h vỗ
ta y th a y v i sử d ụ n g c á c c ô n g tắ c hay n ú t n h ấ n .
N g o à i ra b ạ n có th ể đ iề u k h iể n c ả hệ th ố n g đ è n c ủ a õ t p h ò n g bã ng
cá ch k ế t n ố i t h ê o m ộ t tra n s is to r để đ iề u k h iể n m ô t rơ -le th a y . JÓI m ô t LED
đơn như t r o n g b ồ i n à y . B ạ n có th ể k ế t n ố i c h â n số 0 c ủ a b o '- ■ 5 Z - A rd u in o vói
đầ u “ A rd u in o diQ ’tal p in " c ủ a m ạ c h tra n g b ê n đẽ’ đ iề u k h iể n ' i g . i - á ié n 2 2 0 V
378
CHƯƠNG 9 : ARDUINO V À MO DULE C Ả M B IẾ U Ẩ M THANH
O IIM M H C B 8 N 6 Ư Ư I ĩự BỘC
M ạ c h đ iệ n th a y th ế c h o L E D d ù n g đ ể đ iể u
như hình dưới.
Đ o ạ n m ã lậ p trin h c h o b à i tậ p n à y k h á đ ơ n g iả n n h ư n g b ạ n c ẩ n c h ú ý
chương tr in h c h ỉn h :
379
CHƯƠNG 3: A l i g n ) VA MODCLE CẢM IIẾN iM TIẲ H U n M IẤ M C H N t ế l l Tự H C
v o id loopO
{
if(d ig ita lR e a d (A O )= = 1 ) // Kiềm tra xem có àm thanh hay không
{
d e la y (1 0 0 ); / / Dảm bảo âm thanh có đủ ớó ca
if(d ig ita lR e a d (A O )= = 1 ) // Dàm bào không phải lap âm
{
w h ile (d ig ita lR e a d (A 0 )= = 1 ); // DƠI âm thanh két thúc
P h ầ n c ứ n g c h o b à i tậ p n à y b ạ n là: 1 b o m ạ c h A rd u in o U N O 2 m odule
c ả m b iế n D H T -1 1 và 1 m o d u le c ả m b iế n â m th a n h . N g o a i ra c h ú n g ta sẽ sừ
d ụ n g 3 LE D 7 đ o ạ n đ ể h iể n thị n h iệ t độ.
P hần cứ ng
C hân số 8 Chân
chu ng
hoặc
th ô n g q u a
tr a n s is to r
C hân s ố 9 Chân
chung
h o ặ c th ô n g
qua
tr a n s is to r
C h â n s ố 10 Chân
chung
h o ặ c th ô n g
qua
tr a n s is to r
C h â n s ố 11
OUT
C hần tư ơ n g OUT
tự AO hay
DATA
H ìn h k ế t n ố i 3 L E D 7 đ o ạ n v à c á c c ả m b iế n n h ư h ìn h tr a n g b ê n .
CHƯONe 9: AIDOMt VAIMIIIE CẢMIIẼN ỈMT1AM u m a UM CM w « l TỊ HC
Bạn phải cấp nguốn cho các cảm b iế n vả lấ y c á c chán ngõ ra vào
c h â n s ô 11 đ ố i v ớ i c ả m b iế n â m th a n h và ngõ ra v à o c n á n a n a l o g 0 d o i VOI
c ả m b iế n n h iệ t độ.
DUIN01
ARDUtaOUNOR3
<ĩ&x>
CHƯƠNG 9 : ABDUINO V À M O D U L f C Ả M B IÊ N Â M THANH
U IIM IA M C II m i l n r M C
Phần mềm
V iệ c lậ p trìn h c h o b à i tậ p n à y tư ơ n g đ ố i p h ứ c tạ p b ở i v ì: C h ú n g ta v ừ a
phải q u é t L E D 7 đ o ạ n , đ ọ c n h iệ t đ ộ từ c ả m b iế n v à s o n g s o n g đ ó là k iể m tra
xem c ó p h á t h iệ n â m th a n h h a y k h ô n g .
// Chương trình điều khiển đo nhiệt độ bàng module cảm biến âm thanh
II Khai báo các tên LED ứng với các LED 7 đoạn
#define L E D 1 8
#d efine L E D 3 10
// Mảng chứa các giá trị điều khiển LED 7 đoạn anods chung
u n s ig n e d c h a r
b o o le a n v a l; / / Biến kiều đo
II Biến tạm
383
CHƯƠNG J: A M M O V * MIDDLE CÁM BIẾN i H ĨI A M U H IM [ÍN * CHO K IM I T f MC '
{
b o o le a n xb it;
u n s ig n e d c h a r x c h a r= -1 ;
x b it= x c h a r;
re tu rn xb it;
C h a n g e O u tp u tO :
d ig ita lW r ite (L E D 1 H IG H ): 1căp điện áp cao cho chán ch^-~ _EZ '
d e la y M ic ro s e c o n d s (3 0 ):
384
GHƠđNG 9: ABDUINO VÀ MODULE CÂM BIẾM ÂM THANH
mmn i Ả « q i H ế t f i n f M {
C h a n g e O u tp u tO ;
d ig ita lW rite (L E D 2 ,L O W );
C h a n g e O u tp u tQ ;
d ig ita lW rite (L E D 3 ,L O W );
II Tạo thời gian delay cùng lúc hiển thị và kiểm tra cảm biến âm thanh
void D e la y D is p la y 1 M S (c h a r tim e ) / / Delay 1MS mỗi lần gọi
{
for(int i = 0 ;i< tim e ;i+ + )
D isp la yL E D O ;
if (d ig ita lR e a d (1 1 )= = 0 ){
w h ile ( d ig ita lR e a d (1 1 )= = 0 ) ;
va l= !va l;
II Hàm g iả i mã s ổ dếm thành các giá trị mã xuấ t cho LED 7 đoạn
u n sig n e d c h a r D e c o d e N u m b e r ( c h a r n u m )
re tu rn L E D S E G [n u m ];
c iM m 1 U I I M VẢ M H U E CẢM I i f i *M T I U I K W C W M W lT f W t
p in M o d e (i,O U T P U T );
p in M o d e (1 1 ,IN P U T );
d h t.s e tu p (A O );
in t te m p ;
te m p = d h t.g e tT e m p e ra tu re ();
e lse
num LE D 3=15;
386
U n m H m c n m M lĩỊ H t CHtftfNC 9: AROOINO VA MODULE CÀM BẾM ẲM H A W
n u m L E D 2 = te m p % 1 0 ;
D e la y D is p la y 1 M S ( d h t.g e tM in im u m S a m p lin g P e r io d ( ) ) ;
)
L ậ p trin h c h o b à i tậ p n à y tư ơ n g đ ố i p h ứ c tạ p v ì c h ú n g ta c ầ n c ó th ê m
p h ấ n k iể m tra c ả m b iế n â m th a n h v à đ ọ c c ả m b iế n n h iệ t đ ộ . B ạ n cần xem lạ i
p h ấ n lậ p trìn h (g iả i th íc h ) tro n g b à i lậ p trư ớ c đ ể h iể u rõ p h ầ n lậ p trìn h tr o n g
bài tậ p n à y .
C á c p h ầ n k h a i b á o tư ơ ng đ ố i g iố n g v ớ i c á c c h ư ơ n g trìn h trư ớ c . T u y
nhiên tro n g b à i tậ p n à y b ạ n p h ả i c h ú ý c á c th a y đ ổ i v ề th ờ i g ia n q u é t L E D v à
hàm D e la y D is p la y lM S .
T ro n g p h ẩ n q u é t L E D c h ú n g ta g iả m th ờ i g ia n s á n g c ủ a 1 L E D 7 đ o ạ n
từ 3 m ilig iâ y xuống còn 30 m ic ro g iâ y . Và th a y hàm d e la y bằng hàm
d e la y M ic ro s e c o n d s . C h ú n g ta lấ y tư ợ n g trư n g v iệ c đ iề u k h iể n L E D 1:
L E D O U T P U T = D e c o d e N u m b e r (n u m L E D 1 );
C h a n g e O u tp u t();
d ig ita lW r ite (L E D 1 ,H IG H );
d e la y M ic ro s e c o n d s (3 0 );
d ig ita lW r ite ( L E D l ,L O W );
C h ú n g ta th ự c h iệ n v iệ c n à y là đ ể đ ả m b ả o liê n tụ c k iể m tr a đ ư ợ c c ả m
biến âm th a n h ở h à m D e la y D is p la y lM S .
D is p la y L E D O ;
if ( d ig ita lR e a d ( 1 1 )= = 0 ) {
while(digitalRead(11)==())•
v a l= !v a l;
217
CHƯƠNG 9: ARDUINO V* MODULE CẮM IIẾN ẦM THAHB . . . i n »»<1 TV n c
Lưu ỷ:
• Phương pháp quét cũng có mặt trái của nó. Ban đáu chúng tôi chua
bàn đến vấn đề độ sáng của LED 7 đoạn. Thế nhưng một Khi đã hiếu
khá sãu về phương pháp quét LED, các bạn cấn hiều rõ những hạn chế
‘ của LED 7 đoạn khi dùng phương pháp quét.
• Khi bạn dùng phương pháp quét, nếu thời g i a n duy tri thời g i a n sáng
của một LED nhỏ thì đ ộ sáng của LED sẽ mờ. Ngược lai. nếu ban duy
trì thơi gian sáng LED lớn thì độ sáng của LED sẽ rõ hơn Vi vậy, trong
bài tập này khi bạn giảm thời gian sáng của 1 LED xuống chi con 30
micro giây bạn sẽ thấy LED sáng mờ hơn các bài trước. Chúng la
không có cách nào khác phục ngoại trừ sử dụng phương pháp điéu
khiển khác.
388
A I H M I I * M i C M H6ƯỚI T f BQC CHƯƠNG 10: AKDUINO V * I M t l l E CAM IẾN AND SANG
CHƯƠNG 10
C h ú n g ta c ó th ể d ù n g q u a n g trở c h o rấ t n h iề u ứ n g d ụ n g v à tạ o ra m ô t
mạch điện để phát hiện ngưỡng củ a quang trở để phục vụ cho m ục đích điếu
k h iể n n à o đ ó . N g o à i c á c h s ử d ụ n g p h ầ n c ứ n g đ ể p h á t h iệ n m ứ c n g ư ỡ n g c ủ a
q u a n g tr ỏ c h ú n g ta c ò n c ó th ể s ử d ụ n g q u a n g trỏ đ ể p h á t h iệ n c á c m ứ c
n g ư ỡ n g c ủ a q u a n g trở .
Giới th iệu m odule cảm biến ánh sáng kết nối với bo mạch Arduino
M o d u le n à y ( c ó g iá k h o ả n g 3 5 .0 0 0 đ v à o th ờ i đ iể m th á n g 1 - 2 0 1 5 ) g ố m
4 c h â n n g õ ra g ồ m 2 c h â n đ ể b ạ n c ấ p n g u ồ n v à 2 c h â n k h á c g ồ m :
• M ộ t c h â n c u n g c ấ p đ iệ n á p rơ i tr ê n q u a n g trở (A 0 ), v à đ iệ n trở n à y
p h ụ th u ộ c v à o c ư ờ n g đ ộ á n h s á n g c h iế u v à o q u a n g trở , n ế u k h ô n g c ó
á n h s á n g n à o lọ t v à o q u a n g trở th i đ iệ n á p rơi tr ê n q u a n g trở là x ấ p xì
5 V . V à k h i c ư ờ n g đ ộ á n h s á n g c à n g tă n g th ì đ iệ n á p n à y c à n g g iả m .
• C h â n c ò n lạ i là c h â n b á o k h i
quang trở đạt mức ngưỡng
(D O ). K h i á n h s á n g c h iế u v à o
quang trở đạt mức ngưỡng
n à o đ ó th i c h â n n à y s ẽ ở m ú c
cao. K hi ánh sang k h ô n g đủ
th ì c h â n n à y ở m ứ c th ấ p . Đ ể
c h ỉn h m ứ c n g ư õ n g b ạ n c ó th ể
c h ỉn h b iế n trở tr ê n m o d u le .
M ộ t s ố h ìn h ả n h c ủ a m o d u le
c ả m b iế n á n h s á n g :
113
CBIÍÍNt M: A1IIMI VÀINIILE CẦMI Ế I ÁMIXK IẰHC1I K W IT f H (
T rẽ n m o d u le có
m õ: b iế n trò để ban
c h in h m ú c ng ư ỡ ng ph át
hiẽn ánh sáng.
Ban có thể
chinh đò nhay theo ỷ
m u ô n m in h đ ể th a y đổi
trạ n g th á i chân DO
phục vụ cho mục đích
của bạn.
H ìn h dư ỏ i la
Q uang trở. cảm biến
chinn cùa module
Quang trò tương tự như
một biến trở vì điện trà
c ủ a c h ú n g c ó th ể thay
đ ổ i db'Oc.
M ạch so sánh
d ù n g O p .A m p đ ể p h á t
hiệ n n g ư ỡ n g á n h s á n g
như h ln h b ê n .
'-rexTs
391
CHƯƠNGH: MDIM 1« MODULECẦMIẾI ÁMSÀK IIAM C H K M lT fH t
v o id setu pO
{
p in M o d e (A O .IN P U T );
S e ria l.b e g in (9 6 0 0 );
)
// Chương trình chính
v o id loopO
{
S e r ia l.p r in tfC u o n g do a n h s a n g : ");
S e ria l. p r in t(1 0 0 -m a p (a n a lo g R e a d (A 0 ),0 ,1 0 2 4 ,0 ,1 0 0 ));
d e la y (1 0 0 0 );
}
H ã y b iê n d ịc h v à tả i chư ơ ng trìn h x u ố n g b o m a c h A rd u in o và mò
chư ơ ng trìn h th e o d õ i c ổ n g n ố i tiế p c ủ a A rd u in o ID E đ ể ỉấ y dữ liệ u từ m odule
c ả m b iế n á n h s á n g . Đ ể mở chư ơ ng trin h th e o d õ i c ổ n g n ố i tiế p , c h ọ n menu
T o o ls > S e ria l M o n ito r . T ro n g c ử a s ổ tru y ề n ta th ấ y c ư ờ n g đ ộ á n h s á n g đo tại
m ô i trư ờ ng tố i v à ít á n h s á n g .
Cucng do anh
san g : 11%
Cucng dc anh
3-ang: 8%
Cucxig do enh
3 a n g : 3%
Cu ong dc anh
aang: 8%
Cucng do enh
s s n g : IC'%
Cu eng do anh
sa n g : 13%
Cucng do sn h
s s n g : 6%
Cuong dc anh
sa n g : 1%
Cucng do anh
3 a n g : 81
Cuong do anh
3.ang : 10%
Cuong dc anh
3 ang : 9%
Cucng dc anh
san g : 10%
Cucng dc anh
sa n g : 51
Cucng úc &nh 3 ang: 6%
Cuong đc anh san g : 11%
39?
U I I N I BANH CIO K ilftfl Tự IOC CHƯƠNG 10: AROUINO VÀ MODULE CẢM BIẾN ÁNH SANE
Tắt/mở LED theo cường độ ánh sáng từ module cảm biến ánh sáng
B ạ n c ó th ể sử d ụ n g m ứ c n g ư ỡ n g đ ư ợ c h iệ u c h ỉn h tr o n g m o d u le c ả m
biế n á n h s á n g đ ể tắ t m ở L E D th e o c ư ờ n g đ ộ á n h s á n g . N ế u m ô i trư ờ n g t ố i th ì
LED sẽ b ậ t v à k h i m ô i trư ờ n g s á n g th i L E D s ẽ tắ t.
P h ẩ n c ứ n g d ù n g tro n g b à i tậ p n à y b ạ n s ử d ụ n g th ê m đ iệ n trở h ạ n
dò ng và đ è n L E D đ ể sử d ụ n g m o d u le c ả m b iế n á n h s á n g . B ạ n h ã y k ế t n ố i
m ạ ch đ iệ n n h ư h ìn h dư ớ i:
Phần mềm cho chương trình tắt/m ỏ LED theo cường độ án h sáng:
pinMode(0,INPUT);
pinMode(13 ,OUTPUT)'
S erial. b e g in (9 6 0 0 )-
v o id loopO
{
d ig ita lW rite (1 3 ,!d ig ita lR e a d (0 ));
if (d ig ita lR e a d (O )) S e ria l.p rin tln ("O ff");
e lse S e ria l.p rin tln C 'O n 1');
d e la y (1 0 0 0 ); / / Tạo thời gian trễ đảm bảo không Hên tục tất mở LED
}
H ã y b iê n d ịc h v à tả i c hư ơ ng trin h x u ố n g b o m ạ c h A rd u in o . B ạ n có thể
m ở chư ơ ng trin h th e o d õ i c ổ n g n ố i tiế p đ ể th e o d õ i sự p h á t h iệ n c ù a m odule
c ả m b iế n á n h s á n g . K h i m ô i trư ờ ng x u n g q u a n h c ả m b iế n ít á n h s á n g hay tối
th i L E D sẽ b ậ t (s á n g ). N ế u m ô i trư ờ ng x u n g q u a n h c ả m b iế n s á n g m ạ n h thi
L E D sẽ tắ t.
B ạ n c ũ n g c ó th ể sử d ụ n g rơ -le th a y vì sử d ụ n g L E D đ ể đ iề u k h iể n các
m ứ c đ iệ n á p lớ n hơ n. G iả sử b ạ n c ó th ể đ iể u k h iể n h ệ th ố n g đ è n th e o ánh
s á n g c ủ a m ô i trư ờ n g x u n g q u a n h c ủ a c ả m b iế n đ ể c h iế u s á n g tro n g vườn
hoặc sâ n nhà.
T ro n g b à i tậ p n à y c h ú n g ta ứ ng d ụ n g m o d u le c ả m b iế n á n h s á n g dể tự
đ ộ n g b ậ t n h ữ n g b ả n g q u ả n g c á o k hi th ò i g ia n đ ã n h á n h e m tố i h o ă c buổi
c h i ề u tà đ ể đ ả m b ả o v i ệ c q u ả n g c á o là h i ệ u q u ả v à k h ô n g g ã y lã n g phi.
C h ú n g ta sẽ th ự c h iệ n p h é p đ ế m th ờ i g ia n trê n L E D 7 đ o ạ n và khi
b u ổ i s á n g th ì L E D 7 đ o ạ n h o à n to à n tắ t v à k h i trờ i tố i th i L E D 7 đ o ạ n sẽ sáng
trỏ lại.
Lưu ý: Cảm biến của bạn phải đật ngoài trời vá có những phương
pháp bảo vệ module.
P hần cứ ng
394
UHW lAW CM wttftfl TỰIfc ___________________ CHtftfHC M: ABDU1W0 VẦ MODULE CÂM8IÊK ÁHHSAjjS
C hân tư ơ ng
AO
tự AO
H ìn h dư ớ i là ả n h k ế t n ố i 3 L E D 7 đ o ạ n v à m o d u le c ả m b iế n á n h s á n g .
H o ạ t đ ộ n g c ủ a c h ư ơ n g tr ìn h
T h ự c tế th i c á c đ è n đ ư ờ n g c ủ a c h ú n g ta đ ề u h o ạ t đ ộ n g th e o n g u y ê n lý
náy để tiế t k iệ m tố i đ a n ă n g lư ợ ng đ iệ n . B u ổ i s á n g th ì đ è n h o à n to à n t ă t v à
buổi ch iề u tà s ẽ tự đ ộ n g m ở .
Phẩn mềm
C hư ơng trìn h c h o b à i tậ p n à y th ự c h iệ n p h ư ơ n g p h á p q u é t c h o L E D 7
doạn và thự c h iệ n k iể m tra c ả m b iế n đ ể tắ t m ở q u é t L E D 7 đ o ạ n . B ạ n c ó th ể
thay đổi m ứ c n g ư ỡ n g đ ể c h o p h é p s á n g LED 7 đoạn tạ i b iế n th r e s h o ld
(ngưỡng) ỏ đ ầ u ch ư ơ n g trìn h .
Chương trình tắt/mở led 7 đoạn dựa vào môi trường xung quanh:
II Chương trình tắt mở led 7 đoạn dựa vào m ôi trường xung quanh
II Khai báo các tên LED ứng với các LED 7 đoạn
#define LE D 1 8
#define L E D 2 9
((define L E D 3 10
II Mảng chứa các giá trị diều khiển LED 7 ơoạn Anoơe cnung
unsigned c h a r
LEDSEG[]={OxCO,OxF9,OxA4,OxBO,0 x 9 9 ,0 x 9 2 ,0 x 8 2 ,0 x F 8 ,0 x 8 0 ,0 x 9 0 0 x 8 8 0 x 8
3,O xC 6 ,O x A 1 ,0 x 8 6 ,0 x 8 E ,0 x B F };
II Biến tạm
unsigned c h a r L E D O U T P U T ’
unsigned c h a r x c h a r =-1 •
397
CHƯƠNG to : ARDUINO VÀ MODULE CẨM BIỂN ÁNH SÁ N . im trtiiT y n t
}
)
// Hàm quét LED
v o id D is p la y L E D O
{
if (a n a lo g R e a d (A O )> th re s h o ld ) / / Đọc chân AO của cảm biến
// và so sánh mức ngưỡng
{
// Sáng LED 1 trong một thời gian ngắn
L E D O U T P U T = D e c o d e N u m b e r (n u m L E D 1 );
C h a n g e O u tp u t();
d ig ita lW rite (L E D 1 ,H IG H ); / / Cấp điện áp cao cho chân chung LED 1
d e la y (3 );
d ig ita lW r ite (L E D 1 ,L O W );
}
e ls e d e la y (1 0 );
)
// Tạo thời gian delay cùng lúc hiển thị
v o id D e la y D is p la y 1 0 M S ( c h a r tim e ) {
fo r (in t i = 0 ;i< tim e ;i+ + ) D is p la y L E D O ;
}
AJUfM lAH Cfll NCƯŨI TựHỌC tr ttt II: U IIM VẦMODULE c
// Hàm giải mã số đếm thành các giá trị mã xuất cho LED 7 ổoạn
u n s ig n e d c h a r D e c o d e N u m b e r ( c h a r n u m )
{
r e tu r n L E D S E G [ n u m ] ;
}
// Chương trình khởi tạo
v o id s e tu p O
{
fo r ( in t i= 0 ;i< 1 4 ;i+ + )
{
p in M o d e ( i, O U T P U T ) ;
}
p in M o d e ( A 0 , IN P U T );
}
// Chương trình chính
v o id lo o p O
{
// Vòng lặp cho biến dếm
fo r ( in t i = 0 ; i< 1 0 0 0 ; i+ + )
{
n u m L E D 1 = i/1 0 0 ;
n u m L E D 2 = ( i/1 0 ) % 1 0 ;
n u m L E D 3 = i% 1 0 ;
D e la y D is p la y 1 0 M S ( 1 0 0 ) ; / / Dợi 1 giây
)
}
Đ o ạ n m ã lậ p trìn h tr o n g b à i tậ p n à y c h o p h é p b ạ n đ ế m từ c
v à h iể n th ị tr ẽ n L E D 7 đ o ạ n k h i m o d u le c ả m b iế n á n h s á n g p h
trư ờ n g x u n g q u a n h là ít á n h s á n g v à tắ t k h i m o d u le c ả m b iế n á n l
h iệ n m ô i trư ờ n g x u n g q u a n h là c ó á n h s á n g m ạ n h .
B ạ n h ã y đ iề u c h ỉn h m ứ c n g ư ỡ n g đ ể p h ù hợp vớ i m ô i t
q u a n h c ủ a nơ i đ ặ t b ả n g q u ả n g c á o .
K h i á n h s á n g cò c ư ò n g đõ lởn h o n m ức n g u õ n g m , sẽ - . à L E D 7 đ o a n
V à v iệ c so s á n h n a y đư oc lâ p trin h ta i ha m q u e t L E D 7 d o a n
v o id D is p ia y L E D O
{ : A.
if (a n a lo g R e a d (A O )> th re s h o ld ) // Doc chân AO của cam bién
II vá so sánh mức ngưỡng
(
L E D O U T P U T = D e c o d e N u m b e r(n u m L E D 1 ):
C h a n g e O u tp u tO ;
d ig ita lW rite (L E D 1 .H IG H );
đ e la y (3 );
d ig ita lW rite (L E D 1 .LO W ):
L E D O U T P U T = D e c o d e N u m b e r(n u m L E D 2 );
C h a n g e O u tp u t();
d ig ita lW rite (L E D 2 .H IG H );
d e la y (3);
d ig ita l W rite (L E D 2 .L O W );
L E D O U T P U T = D e c o d e N u m b e r(n u m L E D 3 );
C h a n g e O u tp u tO ;
d ig ita lW rite (L E D 3 ,H IG H );
d e la y (3 );
d ig ita lW rite (L E D 3 .L O W );
)
els e d e la y ( 10):
}
Lưu ý: Trong chương trinn trẽn, chúng la dung cấu trúc if đề so sánh
giá trị dọc từ cảm biến VỚI biến threshold đ ể quyết đinh có O ùéí LED hay
không. Chúng ta dùng phép so sánh analogRead(AO)>lhreshoỉơ bà
K h i k h ô n g có án h s á n g th i giá trị đ ọ c văo của cảm ũ ié n 3 ;ón hơn m ứ c
ngưỡng và chúng ta sẽ cho sáng LED 7 đoan ùắng cách thjz - én phương
pháp quét trong khối lệnh của cấu trúc if. Nếu giá tri doc '.'30 ~~ò hơn mức
ngưởng t h ì c ó nghĩa: M ô i t r ư ũ n g x u n g quanh c á m b i ể n đ u a ' “ s á n g V I v ậ y
chúng ta tạo ơelay(10ị ơể đàm bào ham DelayDisplaylOMS t h j c - é ' đúng
400
AINIM lA M C H M fllT fllC PHỤ lụ c A : GIỚI TH IỆU SẤCH T IẾ N 6 V IỆ T HỌC ARDUIMO VÁ B A S P B E B B ì
PHỤ LỤC I
VÀ RASPBERRY
Đ ể c ó th ể h ọ c k h a i th á c , s ử d ụ n g A r d u in o v à R a s p b e r r y n ộ i d u n g s á c h
h ọ c c ầ n p h ả i trìn h b à y n h iề u c h ủ đ ề cơ b ả n n h ấ t m à n g ư ờ i n à o lậ p tr in h ứ nc
dụng tr o n g c ô n g n g h iệ p c ầ n p h ả i b iế t n h ư :
• C à i đ ặ t, lậ p trìn h c ă n b ả n v ớ i A r d u in o v à R a s p b e rr y .
• Đ iề u k h iể n L E D đ ơ n , L E D 7 đ o ạ n , L C D , L E D m a tr ậ n .
• H iể n th ị ra m à n h ìn h L E D 7 đ o ạ n , L C D 1 6 x 2 , L E D m a tr ậ n từ c á c cảm
b iế n n h iệ t đ ộ , đ ộ ẩ m , á n h s á n g , h ồ n g n g o ạ i, s iê u â m , c h u y ể n đ ộ n g v.v
q u a c á c g ia o t iế p S P I, I2 C .
• Đ iề u k h iể n đ ộ n g cơ D C , đ ộ n g cơ s e r v o , đ ộ n g cơ b ư ớ c q u a c h â n P W M
G P IO .
• K ế t n ố i v à đ iề u k h iể n trự c t iế p q u a 2 b o m ạ c h A r d u in o , A r d u in o vớ i
R a s p b e rry .
• Đ iề u k h iể n b ậ t t ắ t n g u ồ n v à c á c th iế t b ị k h á c q u a in te r n e t.
• Đ iề u k h iể n n h à th ô n g m in h .
• K ế t n ố i m ạ n g v à x ử lý ả n h
C á c b ạ n đ ã đ ư ợ c h ư ớ n g d ẫ n h ọ c lậ p tr in h A r d u in o q u a 2 c h u y ê n đ ề :
1. LẬ P T R ÌN H Đ IỂ U K H IỂ N V Ó I A R D U IN O .
2. VI Đ IỂ U K H IỂ N V À ỨNG D Ụ N G - A R D U IN O D À N H C H O NGƯỜI T ự H Ọ C
N ộ i d u n g c h ín h c h o h a i c h u y ê n đ ề n à y là g iớ i th iệ u n h ữ n g p h ầ n cơ b ả n
đ ể k h a i th á c v à s ử d ụ n g A r d u in o n h ư : T ìm h iể u p h ầ n c ứ n g v à p h ầ n m ề m
A rd u in o , lậ p trìn h đ iề u k h iể n v à tạ o h iệ u ứ n g c h o L e d đ ơ n , L e d 7 đ o ạ n , L e d
m a trậ n . B iế t c á c h m ô p h ỏ n g m ạ c h đ iề u k h iể n A r d u in o tr ê n P r o te u s c ũ n g n h u
lậ p trìn h đ iể u k h iể n h iể n th ị c h o 3 lo ạ i c ả m b iế n d ù n g k h á p h ổ b iế n đ ó là : c ả m
b iế n n h iệ t đ ộ v à đ ộ ẩ m , c ả m b iế n â m th a n h v à c ả m b iế n á n h s á n g là m c ơ sở
c h o lậ p trìn h n h ữ n g v ấ n đ ề p h ứ c tạ p h ơ n tr o n g d â n d ụ n g c ũ n g n h ư tr o n g c ô n g
n g h iệ p .
C ò n n h iề u v ấ n đ ề p h ả i tìm h iể u v à h ọ c v ó i A rc iu in o v à R a s p b e rry .
T ro n g n ă m 2 0 1 5 tủ s á c h S T K s ẽ b iê n s o ạ n v à p h á t h à n h 2 tà i liệ u s a u th u ộ c
họ sá c h H ư ớ n g d ẫ n s ử d ụ n g A r d u in o v à R a s p b e r r y ” .
401
m lie A: tm Tilt I » a l ế u ntT wc A IIIW in i m t t u T u iia ir t » '1 » c
• A R D U I N O D A N H C H O NGƯỞI B Ắ T Đ Á U .
Cấn lưu ỷ: Một số nội dung trong sách khi biên soar xong có the hơi
khác so VỚI phán trinh bày dưới đây. Rất m ong sự tham gia. công tác cùa các
bạn đọc có kinh nghiệm về lập trình Arduino nhất là các tháy, cà giảng dạy liên
quan về chù dế này củng với tủ sách STK biên soạn nhiéu ta hẻu hơn nữa vê
điều khiền và lập trình cho bo mạch Arduino sao cho dễ hiểu, cễ sử dụng, các
mạch điện trình bày sát với thực tế, người học có thề mua linh kiện dễ dàng
đáp ứng việc đồi mói việc dạy và học tại các trường.
• Tìm h iể u c á c cà m b iế n th ô n g d ụ n g tro n g c ô n g n g h iệ p (c ả m b iế n n h iệ t
độ, đô ẩ m , âm th a n h , á n h s á n g , áp lực, h ổ n g n g o ạ i, s iê u â m .
• L ậ p trin h đ iề u kh iể n đ ộ n g CO D C , đ ộ n g cơ s e rv o , đ ộ n g cơ bướ c.
• Đ iế u k h iể n R obot.
• M ờ r ộ n g n g õ ra A r d u i n o v ó i t h a n h g h i d ịc h .
• L â p trìn h đ iề u k h iể n L E D m a trâ n c h o n h iề u k iể u c h a y và h iệ u ứ ng
k h á c n h a u c h o LE D m a trâ n 8x8. LE D m a trâ n 1 6 x8 q u é t th e o h a n g
c ũ n g như q u é t th e o côt.
• L ậ p trin h đ iề u k h iể n LC D h iể n th ị c á c k ế t q u à đo -à -n b iế n ' h
sáng, n hiét đõ. đỏ ẩm.
• M õ p h ỏ n g lâp tr in h đ iều k h i ế n bo m a c h A r d u in o VÓI Pr--C s
• Đ iề u k h iể n d ô n g có s e rv o h iể n th ị trẽ n LC D
• T ạ o m à n hìn h L o a d in g và v u m e te r h iể n th ị trẽ n LC D
• Sử d u n g R e a ltim e h iể n tn ị trể n LC D
402
A ỈM IM IA N CH K t t l ĩự l|C PHỤ LỤC A : t lỡ l THIẼO iA C H T IẾH B V IỆ T HỌC ABDUIW0 « A K A S P B EB B Y
• M à n h ln h v à b à n p h ím c ả m ứ n g .
• C ô n g n g h ệ n h ậ n d ạ n g b ằ n g s ó n g v ô tu y ế n R F ID v à đ iề u k h iể n lậ p
trìn h A r d u in o sử dụng bộ đọc th ẻ R F ID (R A D IO FR EQ U EN CY
ID E N T IF IC A T IO N ).
P h ẩ n n ộ i d u n g trìn h b à y tr o n g c h u y ê n đ ề “T ự H Ọ C LẬ P T R ÌN H Đ IỂ U
K H IỂ N VỚI R A S P B E R R Y P I" c ó lẽ là lý tư ỏ n g n h ấ t k h i b iê n s o ạ n c á c tà i liệ u h ọ c
v i x ử lý , v i đ iề u k h iể n , tấ t n h iê n A r d u in o c ũ n g k h ô n g nằm tr o n g n g o ạ i lệ .
N h ư n g đ ể lậ p trìn h R A S P B E R R Y PI, b ạ n c ầ n p h ả i h ọ c lậ p trìn h P y th o n c ò n
tư ơ n g đ ố i lạ v ớ i n h iề u n g ư ờ i.
• G iớ i th iệ u b o m ạ c h R a s p b e r r y P i.
• R a s p b e rry P i và c á c ứ ng d ụ n g .
• C hư ơng 1 - P h ầ n cứ ng và p h ầ n m ề m .
> G iớ i th iệ u b o m ạ c h R a s p b e r r y P i v à c á c lin h k iệ n đ i k è m .
> C à i đ ặ t h ệ đ iề u h à n h R a s p b e r r y P i.
• C h ư ơ n g 2 - Đ iề u k h iể n v à tạ o h iệ u ứ n g c h o L E D đ ơ n .
• C h ư ơ n g 3 - C à i đ ặ t p h ầ n m ề m s ử d ụ n g c á c c h â n G P IO .
• C h ư ơ n g 4 - L ậ p tr in h P y th o n c h o R a s p b e r r y P i.
• C h ư ơ n g 6 - T r u n g tâ m tr u y ề n th ô n g v ớ i R a s p b e r r y P i.
• C h ư ơ n g 7 - L à m v iệ c v ớ i c o m m a n d lin e (d ò n g lệ n h ) .
• C h ư ơ n g 8 - L à m v iệ c v ớ i S o u n d v à V id e o .
• C hương 9 - Sử d ụ n g W e b ca m .
• C h ư ơ n g 1 0 - L ậ p trìn h G a m e s v ớ i S r a tc h .
• C h ư ơ n g 11 - M ạ n g tr o n g R a s p b e r r y P i.
• C h ư ơ n g 1 3 - H iể n th ị m à n h ìn h L e d 7 đ o ạ n v à L C D .
• C h ư ơ n g 1 4 - K ế t n ố i v à đ iề u k h iể n A r d u in o v à R a s p b e r r y P i.
403
PHU LHC *: (101 T llíl i>g lẾK l f ĩ HC A IIIW 1» l « m u i U M UM CM wvot TV HC
• C á c k h á i n iê m cơ bả n.
• C hư o ng 2 - L â p trìn h P y th o n c á n b ả n vớ i R a s p b e rry p
• C hư ơng 3 - Đ ọ c n ú t n h ấ n v à đ iể u k h iể n đ è n L E D .
• C hư ơ ng 6 - H iể n th ị ra m à n hình L C D 16x2.
• C hư ơ ng 9 - Đ ọ c c ả m b iế n n h iệ t đ ộ a n a lo g q u a IC A D C .
• C hư ơ ng 10 - Đ ọ c hình ả n h từ w e b c a m .
• C hư ơ ng 11 - Đ ọ c c ả m b iế n từ đ ể p h á t h iệ n v ậ t th ể .
• C hư ơng 12 - Đ ọ c c ả m b iế n h ổ n g n g o ạ i đ ể p h á t h iệ n ng ư ờ i d a n g đi.
• C hư ơng 13 - Đ ọ c c ả m b iế n độ ẩm .
• C hư o ng 14 - Đ iể u k h iể n đ ộ n g ca DC qua ch â n P W M .
• C hư o ng 15 - Đ iề u k h iể n đ ộ n g cơ D C s e rv o q u a c h â n P W M .
• C hư o ng 16 - Đ iế u k h iể n đ ộ n g c o bư ớc D C q u a c h â n G P IO th ư ờ n g .
• C hư o ng 1 8 - C h e c k e m a il v à b á o h iệ u q u a đ è n L E D .
• C hư o ng 19 - D ù n g R a s p b e rry Pi để n g h e in te rn e t ra d io
• C hư ờ ng 1 8 - C h e c k e m a il và b á o hiẽ u q u a đ è n L E D .
• C h ư o n g 1 9 - D u n g R a s p b e r r y Pi đ ể n g h e i n t e r n e t r a d i -
• C h ư ơ n g 2 0 - Đ i ế u k h i ể n b ã ! t á t n g u ồ n t h i ế t bị q u a i n > r - f
• C h ư o n g 2 2 - K ế t n ối R a s p b e r r y Pi v ả A r d u in o q u a C1 3 - • í.r .
^ 'OI tié p v à
lậ p trin h nai phia.
X i n t r â n t r o n g g i ó i t h i ê u t r ư ó c :ỎI t a n 3 o c
404
A U IM IÂ U CM K i l l ĩỊlỊC PBỊ LỊCI: tlểl TBỆB EBOOK VA PHIH gạc lAtFIEIE
PHỤ LỤC I
• B e g in n in g S e n s o r N e tw o r k s w ith A r d u in o a n d R a s p b e r r y P i (C h a rle s
B e ll)
■ D a s R a s p b e r r y P i K o m p e n d iu m ( R u d ig e r F o llm a n n ).
■ H a c k in g R a s p b e r r y P i 2 0 1 3 - S te p - b y - S te p In s tr u c tio n s a re S tu n n in g lv
C le a r a n d E a s y ( T im o th y L . W a r n e r ) .
■ L e a rn R a s p b e r r y P i w ith L in u x ( P e te r M e m b r e y - D a v id H o w s ) .
• P r a c tic a l R a s p b e r r y P i (B r e n d a n H o r a n ) .
■ P r a g m a tic R a s p b e r r y P I - A Q u ic k s t a r t G u id e ( M a ik S c h m id t ) .
■ R a s p b e r r y P i 21 B r illia n t P r o je c ts - 2 0 1 4 ( G a r e th H a lfa c r e e ) .
■ R a s p b e rry P i A Q u ic k s t a r t G u id e ( M a ik S c h m id t) .
■ R a s p b e rry P i C o o k b o o k fo r P y th o n P r o g r a m m e r s (T im C o x ).
■ R a s p b e r r y P i P ro je c ts (D r. A n d r e w R o b in s o n - M ik e C o o k - J o n a th a n
E va n s - S e a n M c M a n u s ).
■ R a s p b e r r y P i P r o je c ts fo r th e E v il G e n iu s 2 0 1 4 ( D o n a ld N o r r is ) .
■ R a s p b e rry P i S e r v e r E s s e n tia ls ( P io tr J . K u la ).
«5
■ Raspberry Pi The Complete Manual (Imagin Ptb lis" ig i
■ T ạ p c h í M A G P I từ s ố 1 đ ế n s ố 27.
• T e a c h Y o u rs e lf V IS U A L L Y R a s p b e rry Pi (R ic h a rd W e n ik ).
P H IM H Ọ C R A S P B E R R Y PI
• M y F irs t R a s p b e rry Pi G a m e (1 ,4 2 G B )
■ Up a n d R u n n in g w ith R a s p b e rry Pi (1 4 9 M B ).
1. O b ta in in g a R a s p b e rry Pi a n d A c c e s s o rie s .
2. B o o tin g Up.
3. J u s t E n o u g h L in u x .
4. S e ttin g Up V N C .
5. W o rk in g w ith S o u n d .
7. U s in g G P IO .
MỤC LỤC
■ ■
CHƯƠNG 1: GIỚI T H IỆ U 3
CHƯƠNG 2: P H Ẩ N C Ứ N G VÀ P H Ấ N M Ể M A R D U IN O 41
CHƯƠNG 3: Đ IẾ U K H lỂ N v à t ạ o h i ệ u ứ n g v ớ i 6 LE D 111
CHƯƠNG 5: Đ lỂ U K H IỂ N v à t ạ o h i ệ u ứ n g v ớ i 12 LE D T H E O M Ả N G 195
CHƯỜNG 7: Đ IỂ U K H IỂ N LE D 7 Đ O Ạ N 327
CHƯƠNG 8: H lỂ N T H Ị K Ế T Q U Ả Đ O N H IỆ T Đ Ộ VÀ Đ Ộ Ẩ m b ằ n g l e d 357
7 ĐOẠN
CHƯƠNG 9: A R D U IN O V À M O D U LE C Ả M B IẾ N Â M T H A N H 375
C H ỊU T R Á C H N H IỆ M X U Ấ T B Ả N
T S. P H Ù N G LAN HƯƠNG
B IỂ N T Ậ P
PH Ạ M Q UAN G HUY
S Ử A B Ả N IN
N G U Y Ề N T R Ọ N G H IẾ U
T H I Ế T K Ể B ÌA
C Ô N G TY T N H H THƯ Ơ NG M ẠI STK
L IÊ N K Ế T X U Ấ T B Ả N
Đ iê n th o ạ i: (0 8 ) 3 8 3 3 4 1 6 8 - 0 9 0 3 7 2 8 3 4 4
Fax: 08 3 8 3 3 4 1 6 8
W e b s it e w w w .n h a s a c h s tk .c o m ; w w w .s tk b o o k com
M a il: n h a s a c h s t k © y a h o o . c o m . v n - s tk b o o k © y a h o o com V