Professional Documents
Culture Documents
Chuyên đề Tin11 HK2
Chuyên đề Tin11 HK2
Chuyên đề Tin11 HK2
TỔ TIN HỌC
----------
LỜI MỞ ĐẦU
Ngày này, xu hướng tự động hóa, robot hóa ngày càng phát triển. Trong thời đại
Công nghệ Thông tin này, với sự phát triển mạnh mẽ của Khoa học Kỹ thuật, những
máy móc thông minh hỗ trợ con người từ công việc thường nhật đến tận những việc
nặng nhọc, nguy hiểm liên tục được ra đời. Những máy móc, robot đó không chỉ phục
vụ trên Trái đất mà còn được đem ra ngoài vũ trụ, khai thác vô số thông tin hữu ích về
các thiên thể khác phục vụ cho công cụ tìm kiếm sự sống ngoài hành tinh của con
người.
Cùng với sự ra đời của mạch Arduino, nó đã thúc đẩy sự yêu thích, tìm tòi
nghiên cứu, ứng dụng tự động hóa, robot hóa vào đời sống và công nghiệp. Với những
ưu điểm riêng của mình, Arduino đã nhanh chóng nổi tiếng toàn thế giới và được giới
học sinh, sinh viên, giới nghiên cứu, những người yêu thích kỹ thuật, những người thích
làm đồ tự chế sử dụng rộng rãi. Tại Việt Nam, số lượng người sử dụng mạch Arduino
ngày càng tăng.
Hòa chung với nhịp điệu phát triển khoa học kỹ thuật của thế giới, nhóm chúng
em quyết định sẽ nghiên cứu về đề tài Arduino, và thông qua đó tạo nên những sản
phẩm hữu ích phục vụ cho cuộc sống. Chuyên đề này của chúng em vừa sơ thiệu sơ
lược vầ phần cứng và cách lập trình Arduino, đồng thời cũng qua đó giới thiệu mẫu
robot “Xe đồng hồ báo thức” mà chúng em dày công chế tạo.
Mỗi người chúng ta, khi cần dậy đúng giờ, thường có thói quen đặt đồng hồ báo
thức. Tuy nhiên, khi đồng hồ bắt đầu reo lên, thì ta lại có xu hướng tắt đồng hồ đi và
chìm vào giấc ngủ tiếp. Thế nhưng, giả sử chiếc đồng hồ đó biết … chạy thì sao? Sau
khi mệt mỏi tìm kiếm, rượt đuổi để tắt chiếc đồng hồ này, có lẽ ai cũng đã tỉnh hẳn khỏi
giấc ngủ rồi. Dựa vào ý tưởng này, chúng em sẽ tạo ra một chiếc đồng hồ báo thức gắn
trên chiếc xe.
Khi tới thời gian đã được đặt trước đó, chiếc đồng hồ sẽ bắt đầu chạy đi một cách
ngẫu nhiên. Bằng cách sử dụng cảm biến siêu âm để đo khoảng cách, mỗi khi xe chuẩn
bị va chạm với vật cản, thì nó sẽ lập tức chuyển hướng một cách ngẫu nhiên, không theo
một quy luật có thể đoán trước nào đó.
Dù đã cố gắng nhiều trong quá trình viết tài liệu, nhưng chắc chắn tài liệu không
thể tránh khỏi sai sót trong quá trình biên soạn. Chúng em rất mong nhận được sự góp ý
chân thành của mọi người để chúng em có thể hoàn thiện hơn nữa tài liệu này. Mọi ý
kiến đóng góp xin gửi về địa chỉ email: thienlongtpct@gmail.com. Chúng em xin chân
thành cảm ơn.
-1-
Chuyên đề nghiên cứu và ứng dụng Arduino
NỘI DUNG
I. Giới thiệu về Arduino
1) Arduino là gì ?
Arduino là một bo mạch vi điều khiển do một nhóm giáo sư và sinh viên
Ý thiết kế và đưa ra đầu tiên vào năm 2005. Mạch Arduino được sử dụng để
nhận biết và điều khiển nhiều đối tượng khác nhau. Nó có thể thực hiện nhiều
nhiệm vụ, từ lấy tín hiệu của cảm biến cho đến điều khiển đèn, động cơ, và nhiều
đối tượng khác. Ngoài ra mạch còn có khả năng liên kết với nhiều module khác
nhau như module đọc thẻ từ, module Ethernet shield, module 298N, ….để tăng
khả năng ứng dụng của mạch.
Arduino mang đến một phương thức dễ dàng, không tốn kém cho những
người yêu thích, sinh viên và giới chuyên nghiệp để tạo ra những thiết bị có khả
năng tương tác với môi trường thông qua các cảm biến và chương trình lập trình
được tự bản thân viết ra.
Ảnh: Arduino Diecimila in. Ảnh: Arduino Mega. Ảnh: Arduino Uno.
-2-
Chuyên đề nghiên cứu và ứng dụng Arduino
2) Cấu tạo Arduino
Phần cứng bao gồm một board mạch nguồn mở được thiết kế trên nền
tảng vi xử lý AVR Atmel 8bit, hoặc ARM Atmel 32-bit. Những phiên bản hiện
tại được trang bị 1 cổng giao tiếp USB, 6 chân đầu vào analog, 14 chân I/O kỹ
thuật số tương thích với nhiều board mở rộng khác nhau. Hiện tại Arduino có tất
cả 6 phiên bản. Tuy nhiên phiên bản thường được sử dụng nhiều nhất là Arduino
Uno. Vì vậy, trong chuyên đề này chúng em sẽ giới thiệu phiên bản này.
Arduino được chọn làm bộ não xử lý của rất nhiều thiết bị từ đơn
giản đến phức tạp. Trong số đó có một vài ứng dụng thực sự chứng tỏ khả năng
vượt trội của Arduino do chúng có khả năng thực hiện nhiều nhiệm vụ rất phức
tạp. Sau đây là danh sách ba ứng dụng nổi bật của Arduino.
Điều khiển ánh sáng: Bằng các kết hợp các cảm biến, từ những tác vụ
đơn giản như đóng ngắt đèn LED cho đến việc phức tạp hơn như điều khiển ánh
sáng theo nhạc hoặc tương tác với ánh sáng laser đều có thể thực hiện với
Arduino.
-3-
Chuyên đề nghiên cứu và ứng dụng Arduino
Robot: Do kích thước nhỏ gọn và khả năng xử lý mạnh mẽ, Arduino
được chọn làm bộ xử lý trung tâm của rất nhiều loại robot, đặc biệt là robot di
động.
Thiết bị bay không người lái UAV: Với những cảm biến hỗ trợ đi kèm
như cảm biến góc nghiêng (Gyro sensor), cảm biến gia tốc (accelerometer), …
Arduino hoàn toàn thích hợp để tạo nên những thiết bị bay không người lái.
-4-
Chuyên đề nghiên cứu và ứng dụng Arduino
Arduino UNO là dòng Arduino phổ biến nhất, hiện đã phát triển tới phiên
bản thứ 3 (R3). Trong chuyên đề này, chúng em sẽ giới thiệu và sử dụng mạch
Arduino UNO R3.
Arduino UNO có thể được cấp nguồn 5V thông qua cổng USB hoặc cấp
nguồn ngoài với điện áp khuyên dùng là 7-12V DC và giới hạn là 6-20V.
Thường thì cấp nguồn bằng pin vuông 9V là hợp lí nhất nếu không có sẵn nguồn
từ cổng USB. Nếu cấp nguồn vượt quá giới hạn trên, mạch Arduino UNO sẽ bị
hỏng.
-5-
Chuyên đề nghiên cứu và ứng dụng Arduino
b/ Motor DC 3-6VDC
Motor DC 3-6VDC là động cơ giảm tốc, có trọng lượng nhẹ và lực xoắn
lớn. Nó có khả năng vượt địa hình với lực kéo lớn và có thể gắn bánh xe ở cả 2
phía của động cơ. Hiệu điện thế hoạt động từ 3-6V, tuy nhiên, thực tế cho thấy,
motor vẫn hoạt động hiệu quả ở hiệu điện thế 12V. Đối với motor, lưu ý khi thiết
lập tốc độ không nên để tốc độ quá thấp, vì khi đó sức quay của động cơ sẽ
không thắng được ma sát nghỉ của các bánh răng, từ đó động cơ sẽ không chuyển
động.
c/ Module 298N
Module 298N, còn gọi là mạch khuếch đại, có tác dụng cung cấp hiệu
điện thế phù hợp với chế độ làm việc của động cơ (5V hoặc 12V).
-6-
Chuyên đề nghiên cứu và ứng dụng Arduino
d/ Cảm biến siêu âm HY-SRF05
Cảm biến có 2 loa (thu và phát), cùng với 5 chân để kết nối với Arduino.
Theo tài liệu của nhà sản xuất thì tầm hoạt động tối đa của cảm biến này nằm
trong khoảng 5m.
Cảm biến siêu âm HY-SRF05 hoạt động trên nguyên tắc:
Ban đầu một loa (loa phát) của cảm biến phát ra một sóng âm có
tầng số cao (tai người không thể nghe được).
Sóng âm này va chạm với môi trường và phản xạ lại, loa còn lại
(loa thu) sẽ thu nhận sóng âm này.
Dựa vào thời gian phát/ thu, ta có thể tính toán được khoảng cách
giữa cảm biến và vật cản.
-7-
Chuyên đề nghiên cứu và ứng dụng Arduino
f/ Mạch 4 LED 7 đoạn
Trong module đó có các pin gồm: 4 chân GND – nếu là chung cực âm
(COMMON_CATHODE) hoặc Vcc – nếu là chung cực dương
(COMMON_ANODE), 4 led đơn. Các chân A, B, C, D, E, F, G, DP của từng led
đơn được nối chung lại như hình dưới, tổng cộng là 12 chân tất cả.
-8-
Chuyên đề nghiên cứu và ứng dụng Arduino
g/ Đế pin Lithyum 18650 (2 viên)
Gồm một hộp đế có thể chứa 2 viên pin, mỗi viên có một đầu âm và
dương được ghép nối tiếp với nhau. Dòng điện từ nguồn pin sẽ thông qua 2 dây
nóng và nguội để cung cấp năng lượng cho mạch, cảm biến và motor hoạt động.
Do đó, muốn động cơ hoạt động thì lắp pin vào, và ngược lại, muốn động cơ
ngưng hoạt động thì chỉ cần tháo pin ra.
Ở thiết bị “Xe đồng hồ cảm biến” của chúng em, để tiện cho việc sử dụng,
bọn em đã lắp thêm một công tắc nguồn để có thể bật/ tắt nguồn dễ dàng hơn
thay vì phải thao tác tháo lắp pin.
h/ Tấm mica
Tấm mica được dùng để làm khung cho robot, với thiết kế có những lỗ
đục nhỏ nhằm luồn các sợi dây điện hoặc dùng để vặn ốc cố định các bộ phận lại.
-9-
Chuyên đề nghiên cứu và ứng dụng Arduino
2) Chuẩn bị về phần mềm IDE Arduino
Về phần mềm IDE Arduino, chúng em sẽ hướng dẫn sơ lược cách cài đặt
và sử dụng phần mềm phục vụ cho chuyên đề chúng em.
a/ Hướng dẫn cài đặt phần mềm
- Vào trang chủ https://www.arduino.cc/.
- 10 -
Chuyên đề nghiên cứu và ứng dụng Arduino
- 11 -
Chuyên đề nghiên cứu và ứng dụng Arduino
- Lựa chọn hệ điều hành phù hợp, ở đây chúng em sẽ sử dụng Windows
Installer, nhấn vào đường link đó sẽ chuyển vào giao diện trang
https://www.arduino.cc/en/Main/Donate.
- Kéo xuống và nhấn Just Download nếu bạn chỉ cần Download miễn phí,
nếu có điều kiện thì có thể đóng góp tiền bằng cách nhấn vào Contribute
& Download.
- 12 -
Chuyên đề nghiên cứu và ứng dụng Arduino
- 13 -
Chuyên đề nghiên cứu và ứng dụng Arduino
- Các phần giao diện cơ bản của phần mềm IDE:
c/ Cấu trúc của một chương trình trong phần mềm IDE
Phần khai báo:
Định nghĩa:
o #define <bị gán> <giá trị được gán>
o Phần <bị gán>, <giá trị gán> có thể là số nguyên, chuỗi
hay thậm chí là một lệnh, một hàm.
o Lưu ý: Không thêm dấu “;” vào sau dòng lệnh.
void setup(){
// Put your setup code here, to run once:
}
void loop(){
//Put your main code here, to run repeatedly:
}
- 14 -
Chuyên đề nghiên cứu và ứng dụng Arduino
Kiểu dữ liệu tương tự như trong ngôn ngữ C/C++:
o int: kiểu dữ liệu số nguyên 16bit.
o long: kiểu dữ liệu số nguyên 32bit.
o double: kiểu dữ liệu số thực 32bit.
Lưu ý:
Đối với các kiểu dữ liệu số nguyên, khi thêm vào trước tên
kiểu dữ liệu từ <unsigned> thì sẽ trở thành kiểu dữ liệu số
nguyên không âm.
Ngoài ra, xem kỹ phần kiểu dữ liệu, vì giới hạn int, float
trong Arduino khác int, float trong C++.
Khai báo biến cũng tương tự như C/ C++:
o Một biến: <Kiểu dữ liệu> <biến>;
o Nhiều biến: <Kiểu dữ liệu> <biến 1>, <biến 2>, …;
o Khai báo đồng thời gán giá trị cho 1 biến:
<Kiểu dữ liệu> <biến> = <giá trị>;
o Khai báo đồng thời gán giá trị cho nhiều biến:
<Kiểu dữ liệu> <biến 1> = <giá trị 1>, <biến 2> = <giá trị 2>, …;
o Lưu ý: Những biến được khai báo ở phần này mang giá trị
toàn cục (global variable), tức là nó mang giá trị ở tất cả chương
trình con trong chương trình.
- 15 -
Chuyên đề nghiên cứu và ứng dụng Arduino
Xác định kiểu chân: pinMode(cổng, vào/ra)
o Cổng: Khai báo cổng chân đó cắm vào (ví dụ: cổng A0, A1,
…, 12, 13, …)
Có thể dùng một biến chứa giá trị thay thế.
o Vào/ra: Xác định kiểu vào (INPUT) hoặc ra (OUTPUT).
void setup() {
int trig = 12;
int echo = 13;
void loop(){
}
Phần code thiết lập (setup) trong chương trình.
- 16 -
Chuyên đề nghiên cứu và ứng dụng Arduino
3) Các câu lệnh cơ bản về động cơ và cảm biến
a/ Các câu lệnh về động cơ
Khai báo
Tiêu chuẩn analogWrite(motorPort, speed)
Mô tả Hàm điều khiển tốc độ quay của motor.
Thông số
motorPort Cổng analog kết nối với động cơ.
speed Tốc độ quay của motor (0 ≤ speed ≤ 255).
Khai báo
Tiêu chuẩn digitalWrite(trig, switch)
Mô tả Hàm điều khiển cảm biến siêu âm phát sóng.
Thông số
motorPort Cổng digital kết nối với cảm biến.
switch Trạng thái của motor.
switch = 1 hoặc switch = HIGH, cảm biến phát sóng.
switch = 0 hoặc switch = LOW, cảm biến dừng phát sóng.
Khai báo
Tiêu chuẩn pulseIn(echo, switch)
Mô tả Hàm trả về khoảng thời gian (microseconds) tính từ lúc cảm biến
phát ra sóng siêu âm đến lúc nhận lại sóng phản xạ.
Thông số
motorPort Cổng digital kết nối với cảm biến.
switch Trạng thái của motor.
switch = 1 hoặc switch = HIGH, cảm biến thu sóng.
switch = 0 hoặc switch = LOW, cảm biến dừng thu sóng.
- 17 -
Chuyên đề nghiên cứu và ứng dụng Arduino
c/ Các câu lệnh thuộc thư viện SegSev
Khai báo
Tiêu chuẩn myDisplay.Begin(displayType, numberOfDigits, digit1, digit2,
digit3, digit4, segA, segB, segC, segD, segE, segF, segG, segDP)
Mô tả Hàm khởi tạo mạch 4 LED 7 đoạn.
Thông số
motorPort Mạch 4 LED 7 đoạn.
displayType Kiểu LED của mạch.
COMMON_CATHODE: Kiểu LED chung cực âm.
COMMON_ANODE: Kiểu LED chung cực dương.
numberOfDigits Số lượng chữ số hiển thị (ở mạch 4 LED là 4).
digit1 Cổng của pin chung nhóm 1.
digit2 Cổng của pin chung nhóm 2.
digit3 Cổng của pin chung nhóm 3.
digit4 Cổng của pin chung nhóm 4.
segA Cổng của nhánh A.
segB Cổng của nhánh B.
segC Cổng của nhánh C.
segD Cổng của nhánh D.
segE Cổng của nhánh E.
segF Cổng của nhánh F.
segG Cổng của nhánh G.
segDP Cổng dấu chấm.
Khai báo
Tiêu chuẩn myDisplay.SetBrightness(percentBright)
Mô tả Hàm điều khiển độ sáng của mạch 4 LED 7 đoạn.
Thông số
myDisplay Mạch 4 LED 7 đoạn.
percentBright Độ sáng (tính theo phần trăm độ sáng tối đa của mạch).
- 18 -
Chuyên đề nghiên cứu và ứng dụng Arduino
Khai báo
Tiêu chuẩn myDisplay.DisplayString(toDisplay, DecAposColon)
Mô tả Hàm điều khiển đèn LED sáng theo ký tự.
Thông số
myDisplay Mạch 4 LED 7 đoạn.
toDisplay Xâu được in ra (ở kiểu char).
DecAposColon Vị trí của các dấu chấm được hiển thị (ở hệ thập lục phân).
Khai báo
Tiêu chuẩn millis()
Mô tả Hàm trả về kiểu long là thời gian tính bằng mili giây từ lúc bật mạch
(quay về 0ms sau 50 ngày).
Khai báo
Tiêu chuẩn delay(delayTime)
Mô tả Hàm tạm dừng chương trình (tiếp tục thực hiện những gì trước đó).
Thông số
delayTime Thời gian dừng (tính bằng mili giây).
- 19 -
Chuyên đề nghiên cứu và ứng dụng Arduino
Khai báo
Tiêu chuẩn delayMicroseconds(delayTime)
Mô tả Tương tự như hàm delay.
Thông số
delayTime Thời gian dừng (tính bằng micro giây).
Khai báo
Tiêu chuẩn Serial.print (value)
Mô tả Hàm in giá trị ra trong Serial Monitor.
Thông số
value Giá trị muốn in ra, có thể là xâu hoặc là số thực (tự động làm tròn 3
chữ số).
Cảm biến:
Trig Echo GND VCC
1 0 GND mạch 5V
- 20 -
Chuyên đề nghiên cứu và ứng dụng Arduino
b/ Thiết kế
Vị trí tương đối trong phần này sẽ xét theo chiều từ cảm biến siêu
âm HY-SRF05 đến mạch Arduino UNO (xem hình để thấy rõ hơn).
Ảnh: Xe nhìn theo chiều từ cảm biến siêu âm HY-SRF05 đến mạch Arduino UNO.
- 21 -
Chuyên đề nghiên cứu và ứng dụng Arduino
Mạch 4 LED 7 đoạn:
Được gắn về phía bên tay phải của cảm biến siêu âm HY-SRF05,
được lắp sao cho phần các dấu chấm quay xuống.
Đế pin:
Lắp đế pin nẳm giữa xe, phần có dây nối quay về phía mạch (để
tiện nối dây nguồn về sau).
- 22 -
Chuyên đề nghiên cứu và ứng dụng Arduino
Bánh xe:
Bánh xe gồm hai màu – vàng và đen. Bánh xe màu vàng được gắn
vào phía bên trái, bánh xe màu đen được gắn vào phía bên phải.
- 23 -
Chuyên đề nghiên cứu và ứng dụng Arduino
Mạch Arduino:
Gắn mạch Arduino vào phần cuối của tấm mica, về phía bên trái.
Phần cổng USB được quay về bên trái, để tiện cho việc kết nối.
Module 298N:
Gắn module 298N vào phần cuối của tấm mica, về phía bên phải,
kế bên mạch Arduino.
- 24 -
Chuyên đề nghiên cứu và ứng dụng Arduino
2) Lập trình
// timer
const int setHour = 2; // giờ báo thức
const int setMin = 5; // phút báo thức
const int setDelay = 1; // thời gian kéo dài (phút)
// current-time
const int curHour = 2; // giờ hiện tại
const int curMin = 0; // phút hiện tại
//ultra-sonic
const int trig = A0; // cổng của chân trig là cổng A0
const int echo = A1; // cổng của chân echo là cổng A1
//motor
const int mtR1 = A5; // cổng của IN1 của module là A5
const int mtR2 = A4; // cổng của IN2 của module là A4
const int mtL1 = A3; // cổng của IN3 của module là A3
const int mtL2 = A2; // cổng của IN4 của module là A2
const int Speed = 150; // tốc độ quay motor là 150
//digit
const int digit1 = 8; // cổng của pin chung nhóm 1 là 8
const int digit2 = 11; // cổng của pin chung nhóm 2 là 11
const int digit3 = 12; // cổng của pin chung nhóm 3 là 12
const int digit4 = 2; // cổng của pin chung nhóm 4 là 2
//seven-segment
const int segA = 9; // cổng của nhánh A là 9
const int segB = 13; // cổng của nhánh B là 13
const int segC = 4; // cổng của nhánh C là 4
const int segD = 6; // cổng của nhánh D là 6
const int segE = 7; // cổng của nhánh E là 7
const int segF = 10; // cổng của nhánh F là 10
const int segG = 3; // cổng của nhánh G là 3
const int segDP = 5; // cổng của dấu chấm là 5
const int disType = COMMON_CATHODE; // kiểu 4 LED 7 đoạn chung cực âm
const int numberOfDigits = 4; // số lượng số hiện thị là 4
- 25 -
Chuyên đề nghiên cứu và ứng dụng Arduino
Phần thiết lập:
Ở phần này, ta thiết lập các cổng cho motor, mạch LED và cảm biến.
Đối với motor và cảm biến, ta chỉ cần khai báo cổng và kiểu chân, riêng
với mạch LED thì cần phải khai báo theo thư viện.
void setup() {
//sevseg
myDisplay.Begin(disType, numberOfDigits, digit1, digit2, digit3,
digit4, segA, segB, segC, segD, segE, segF, segG, segDP);
// Thiết lập cách chân của mạch 4 LED 7 đoạn
myDisplay.SetBrightness(100); // Thiết lập độ sáng cho mạch LED
//ultra-sonic
pinMode(trig, OUTPUT); // Thiết lập kiểu của trig là OUTPUT
pinMode(echo, INPUT); // Thiết lập kiểu của echo là INPUT
//motor
pinMode(mtR1, OUTPUT); // Thiết lập kiểu của mtR1 là OUTPUT
pinMode(mtR2, OUTPUT); // Thiết lập kiểu của mtR2 là OUTPUT
pinMode(mtL1, OUTPUT); // Thiết lập kiểu của mtL1 là OUTPUT
pinMode(mtL2, OUTPUT); // Thiết lập kiểu của mtL2 là OUTPUT
}
Vì chương trình này là một sự kết hợp từ động cơ, mạch cho đến cảm
biến, nên việc nhồi nhét tất cả vào một chương trình chính sẽ gây ra nhiều bất
tiện cho việc lập trình.
Bởi vậy mà, chúng em quyết định sẽ chia ra làm nhiều phần nhỏ, từ đó có
thể quản lý nó được tốt hơn, dễ chỉnh sửa, trực quan hơn.
// chương trình con để xe chạy thẳng với tham số truyền vào là tốc độ
void Forward(int Speed) {
analogWrite(mtR1, 0);
analogWrite(mtR2, Speed);
analogWrite(mtL1, 0);
analogWrite(mtL2, Speed);
}
- 26 -
Chuyên đề nghiên cứu và ứng dụng Arduino
// hàm chuyển từ mili giây về cm (dùng cho cảm biến khoảng cách)
double msToCm(int ms) {return ((double)ms/29.412)/2.0;}
// hàm trả về khoảng cách từ cảm biến khoảng cách đến vật cản
double checkDis() {
digitalWrite(trig, 0);
delayMicroseconds(2);
digitalWrite(trig, 1);
delayMicroseconds(10);
digitalWrite(trig, 0);
long duration = pulseIn(echo, 1);
double cm = msToCm(duration);
return cm;
}
Tiếp theo là phần chương trình chính nằm trong vòng lặp – loop. Ở phần
này, ta sẽ kết hợp và sử dụng các câu lệnh đã viết bên trên để hoàn thành chương
trình.
Nhắc lại về “Xe đồng hồ báo thức” – khi tới giờ báo thức, xe sẽ chạy
thẳng mãi cho đến khi gần chạm vật cản, xe sẽ đổi hướng một cách ngẫu nhiên
và chạy tiếp.
Dự vào ý tưởng trên, ta xây dựng được tư tưởng lập trình sau:
- Khi chưa tới giờ báo thức, xe sẽ đứng im và chỉ chạy đồng hồ.
- Khi đã tới giờ báo thức, xe sẽ chạy thẳng mãi đến khi gần tới vật
cản, xe sẽ chuyển hướng ngẫu nhiên.
- Sau khi đã cách đủ xa vật cản, xe lại tiếp tục chạy thẳng.
- Hết thời gian kéo dài báo thức, xe đứng yên và tiếp tục chạy đồng
hồ, quá trình quay về lại từ đầu.
- 27 -
Chuyên đề nghiên cứu và ứng dụng Arduino
Đoạn mã dưới đây được xây dựng dựa vào tư tưởng trên:
void loop() {
unsigned long times = millis(); // Thời gian từ thời điểm mở mạch
char b[4];
// kiểm tra trong thời gian báo thức đến hết thời gian kéo dài không
if (times >= toSec && times < toSec+setDelay*60) {
double distance = checkDis(); // đo khoảng cách
if (distance > 8.0) // khoảng cách dưới 20cm thì đi tiếp
Forward(200);
else { // ngược lại xử lý rẽ ngẫu nhiên
Backward(Speed); // lùi xe lại một khoảng
delay(250);
int tmp = rand()%2;
if (tmp) TurnRight(Speed);
else TurnLeft(Speed);
delay(500);
}
}
else {
// chuyển times thành kiểu “hh:mm” để biểu thị trên mạch LED
b[0] = (times/3600)/10+'0';
b[1] = (times/3600)%10+'0';
b[2] = ((times%3600)/60)/10+'0';
b[3] = ((times%3600)/60)%10+'0';
- 28 -
Chuyên đề nghiên cứu và ứng dụng Arduino
KẾT LUẬN
I. Kết quả thu được
Học tập lập trình và ứng dụng của Arduino.
Tạo ra được một sản phẩm phần cứng thú vị, bổ ích.
Kinh nghiệm về lập trình phần cứng.
- 29 -
Chuyên đề nghiên cứu và ứng dụng Arduino
- 30 -
Chuyên đề nghiên cứu và ứng dụng Arduino
MỤC LỤC
LỜI MỞ ĐẦU .............................................................................................................. 0
NỘI DUNG .................................................................................................................. 2
I. Giới thiệu về Arduino ............................................................................................. 2
1) Arduino là gì ?...................................................................................................................... 2
2) Cấu tạo Arduino .................................................................................................................. 3
3) Ứng dụng trong đời sống..................................................................................................... 3
II. Phương hướng chuẩn bị ........................................................................................ 5
1) Chuẩn bị về phần cứng: ...................................................................................................... 5
a/ Arduino Uno ................................................................................................................................... 5
b/ Motor DC 3-6VDC ........................................................................................................................... 6
c/ Module 298N .................................................................................................................................. 6
d/ Cảm biến siêu âm HY-SRF05 ........................................................................................................... 7
e/ Bánh xe và mắt trâu ....................................................................................................................... 7
f/ Mạch 4 LED 7 đoạn......................................................................................................................... 8
g/ Đế pin Lithyum 18650 (2 viên) ....................................................................................................... 9
h/ Tấm mica ........................................................................................................................................ 9
III. Lập trình và lắp ráp “Xe đồng hồ báo thức” .......................................................... 20
1) Lắp rắp ............................................................................................................................... 20
a/ Nối dây ......................................................................................................................................... 20
b/ Thiết kế ......................................................................................................................................... 21
2) Lập trình............................................................................................................................. 25
KẾT LUẬN ................................................................................................................. 29
I. Kết quả thu được ................................................................................................. 29
II. Thuận lợi và khó khăn .......................................................................................... 29
1) Thuận lợi ............................................................................................................................ 29
2) Khó khăn ............................................................................................................................ 29
III. Hướng phát triển ................................................................................................. 29
TÀI LIỆU THAM KHẢO ............................................................................................... 30
- 31 -