SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
Giao trinh lap_trinh_adruino
1. Học phần đào tạo điện tử (e-learning) và ứng dụng
Nhóm 11: Hải Sơn, Minh Phi , Mỹ Huyền
1
TRƯỜNG ĐẠI HỌC SƯ PHẠM TPHCM
KHOA CÔNG NGHỆ THÔNG TIN
KHÓA HỌC
LẬP TRÌNH ARDUINO
TẠO CHƯƠNG TRÌNH MÔ PHỎNG HỆ THỐNG
ĐIỀU KHIỂN ĐÈN GIAO THÔNG
04 - TPHCM
2. Học phần đào tạo điện tử (e-learning) và ứng dụng
Nhóm 11: Hải Sơn, Minh Phi , Mỹ Huyền
2
TRƯỜNG ĐẠI HỌC SƯ PHẠM TPHCM
KHOA CÔNG NGHỆ THÔNG TIN
KHÓA HỌC
LẬP TRÌNH ARDUINO
TẠO CHƯƠNG TRÌNH MÔ PHỎNG HỆ THỐNG
ĐIỀU KHIỂN ĐÈN GIAO THÔNG
Giáo viên thực hiện:
1. Phạm Hải Sơn 41.01.103.059
2. Huỳnh Nguyễn Minh Phi 42.01.103.058
3. Nguyễn Thị Mỹ Huyền 41.01.103.025
04 - TPHCM
3. Học phần đào tạo điện tử (e-learning) và ứng dụng
Nhóm 11: Hải Sơn, Minh Phi , Mỹ Huyền
3
MỤC LỤC
CHƯƠNG 1: TÌM HIỂU CHUNG VỀ ARDUINO ..........................................................4
1.1 Phân loại Arduino: .................................................................................................4
1.2 Một số ứng dụng của Arduino:...............................................................................5
1.3 Cấu tạo và chức năng các thành phần Arduino Uno R3 .......................................6
CHƯƠNG 2: LÀM QUEN VỚI LẬP TRÌNH TRÊN ARDUINO UNO R3.....................8
2.1 Cấu trúc (structure): ...............................................................................................8
2.2 Giá trị (value): .........................................................................................................8
2.3 Hàm và thủ tục(Function).......................................................................................8
2.4 Bài tập cơ bản về điều khiển tín hiệu đèn Led .......................................................9
CHƯƠNG 3: TÌM HIỂU VỀ PROCESSING ..................................................................10
3.1 Cấu trúc (structure): .............................................................................................10
3.2 Bảng giá trị máu:...................................................................................................10
3.3 Các hàm đồ họa (Graphic):...................................................................................11
CHƯƠNG 4 :TÌM HIỂU GIAO TIẾP GIỮA ARDUINO VÀ PROCESSING..............14
BÀI TẬP TỔNG KẾT.......................................................................................................15
TÀI LIỆU THAM KHẢO...................................................................................................17
4. Học phần đào tạo điện tử (e-learning) và ứng dụng
Nhóm 11: Hải Sơn, Minh Phi , Mỹ Huyền
4
CHƯƠNG 1: TÌM HIỂU CHUNG VỀ ARDUINO
- Arduino là một board mạch vi xử lý, nhằm xây dựngcác ứng dụng tương tác với nhau hoặc
với môi trường được thuận lợi hơn.
1.1 Phân loại Arduino:
a. Arduino Mega 2560 R3
- Arduino Mega 2560 R3 sử dụng Vi điều
khiển ATmega2560:
b. Arduino Due
- Arduino due sử dụng vi điều khiển dựa trên
chip SAM3X8E ARM – M3 của Atmel với lõi
ARM 32 bit:
c. Arduino Uno R3
- Arduino Uno là Board mạch rất phổ biến
trong các dòng Arduino hiện nay, phiên bản Uno
Revision 3 (Arduino Uno R3) là phiên bản mới
nhất hiện giờ, các bạn nên lưu ý điểm này rất quan
trọng vì ở 1 số nơi bán loại không phải R3 mà là
các phiên bản cũ với cấu trúc phần cứng dễ lỗi và
board sẽ dễ cháy hơn với phiên bản R3 mới nhất:
5. Học phần đào tạo điện tử (e-learning) và ứng dụng
Nhóm 11: Hải Sơn, Minh Phi , Mỹ Huyền
5
d. Arduino Leonardo
- Arduino Leonardo sử dụng Vi điều
khiển ATmega32u4 có module USB Device
tích hợp và được lập trình để module này có
thể giả lập COM Port:
1.2 Một số ứng dụng của Arduino:
a. Robot
b. Nhà thông minh
6. Học phần đào tạo điện tử (e-learning) và ứng dụng
Nhóm 11: Hải Sơn, Minh Phi , Mỹ Huyền
6
1.3 Cấu tạo và chức năng các thành phần Arduino Uno R3
a) Một vài thông số của Arduino Uno R3:
- Arduino UNO có thể sử dụng 3 vi điều khiển họ 8bit AVR là ATmega8, ATmega168,
ATmega328:
7. Học phần đào tạo điện tử (e-learning) và ứng dụng
Nhóm 11: Hải Sơn, Minh Phi , Mỹ Huyền
7
b) Các cổng ra vào:
c) Một số chân digital có các chức năng đặc biệt như sau:
- 2 chân Serial: 0 (RX) và 1 (TX): dùng để gửi (transmit – TX) và nhận (receive – RX) dữ
liệu TTL Serial. Arduino Uno có thể giao tiếp với thiết bị khác thông qua 2 chân này. Kết nối
bluetooth thường thấy nói nôm na chính là kết nối Serial không dây. Nếu không cần giao tiếp
Serial, bạn không nên sử dụng 2 chân này nếu không cần thiết
- Chân PWM (~): 3, 5, 6, 9, 10, và 11: cho phép bạn xuất ra xung PWM với độ phân giải
8bit (giá trị từ 0 → 28
-1 tương ứng với 0V → 5V) bằng hàm analogWrite(). Nói một cách đơn
giản, bạn có thể điều chỉnh được điện áp ra ở chân này từ 0V đến 5V thay vì chỉ cố định ở mức
0V và 5V như những chân khác.
- Chân giao tiếp SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Ngoài các chức năng
thông thường, 4 chân này còn dùng để truyền phát dữ liệu bằng giao thức SPI với các thiết bị
khác.
- LED 13: trên Arduino UNO có 1 đèn led màu cam (kí hiệu chữ L). Khi bấm nút Reset, bạn
sẽ thấy đèn này nhấp nháy để báo hiệu. Nó được nối với chân số 13. Khi chân này được người
dùng sử dụng, LED sẽ sáng.
- Arduino UNO có 6 chân analog (A0 → A5) cung cấp độ phân giải tín hiệu 10bit (0 → 210
-
1) để đọc giá trị điện áp trong khoảng 0V → 5V. Với chân AREF trên board, bạn có thể để đưa
vào điện áp tham chiếu khi sử dụng các chân analog. Tức là nếu bạn cấp điện áp 2.5V vào chân
này thì bạn có thể dùng các chân analog để đo điện áp trong khoảng từ 0V → 2.5V với độ phân
giải vẫn là 10bit.
- Đặc biệt, Arduino UNO có 2 chân A4 (SDA) và A5 (SCL) hỗ trợ giao tiếp I2C/TWI với các
thiết bị khác.
8. Học phần đào tạo điện tử (e-learning) và ứng dụng
Nhóm 11: Hải Sơn, Minh Phi , Mỹ Huyền
8
CHƯƠNG 2: LÀM QUEN VỚI LẬP TRÌNH TRÊN ARDUINO UNO R3
- Cấu trúc chương trình Arduino có thể được chia thành các phần: cấu trúc (structure),
biến số (variable), hằng số (constant), hàm và thủ tục (function).
2.1Cấu trúc (structure):
- Cấu trúc chương trình gồm hai phần là: setup(): Chạy một lần khi bắt đầu chương
trình; loop(): Chạy lặp đi lặp lại đến khi dừng chương trình.
- Các loại cấu trúc cơ bản trong lập trình: + if() : Cấu trúc điều kiện dạng thiếu.
+ if()….else : Cấu trúc điều kiện dạng đủ.
+ for() : Cấu trúc lặp.
+ while() : Cấu trúc lặp.
- Ngoài ra còn có các từ khóa: break, continue, return,…
- Toán tử số học: = (phép gán), + (phép cộng), - (phép trừ), * (phép chia), / (phép
chia), % (phép chia lấy dư).
- Toán tử so sánh: == (so sánh bằng), != (so sánh khác), > (lớn hơn), < (bé hơn), >=
(lớn hơn hoặc bằng), <= (bé hơn hoặc bằng).
- Toán tử logic: && (và), || (hoặc), ! (phủ định), ^ (loại trừ).
- Phép toán hợp nhất: ++ (cộng thêm một đơn vị), -- (trừ đi một đơn vị), += (rút gọn
của phép cộng), -= (rút gọn của phép trừ), *= (rút gọn của phép nhân), /= (rút gọn của phép
chia), %= (rút gọn của phép chia lấy dư).
2.2Giá trị (value):
- Hằng số: HIGH, LOW, INPUT, INPUT_PULLUP, OUTPUT, LED_BUILTIN,
LOW, TRU, FALSE.
- Kiểu dữ liệu:
+ Kiểu logic: boolean
+ Kiểu ký tự: char, unsigned char
+ Kiểu số nguyên: byte, short, int, unsigned int, long, unsigned long
+ Kiểu số thực: float, double
+ Kiểu mảng: array + Kiểu chuỗi: string
2.3 Hàm và thủ tục(Function)
- Nhập xuất Digital: pinMode(), digitalWrite(), digitalRead()
- Nhập xuất Analog: analogReference(), analogWrite(), analogRead()
- Hàm toán học: min(), max(), abs(), map(), pow(), sqrt(), sq(), isnan(), constrain(),
exp(x), frexp(x, int *exp), ldexp(x, int exp), log(x), log10(x), modf(x, *i), ceil(x), floor(x),
atoi(a[])
9. Học phần đào tạo điện tử (e-learning) và ứng dụng
Nhóm 11: Hải Sơn, Minh Phi , Mỹ Huyền
9
- Hàm lượng giác: cos(), sin(), tan(), asin(x), acos(x), atan(x), atan2(x, y),
cosh(x), sinh(x), tanh(x)
2.4 Bài tập cơ bản về điều khiển tín hiệu đèn Led
Bài Tập 1: Viết chương trình trên IDE Arduino để điều khiển đèn Led nhấp nháy trong 1/10s
= 100ms, với cổng tín hiệu 13 và điện trở cho Led là 220 ohm.
Hướng dẫn: Thể hiện cụ thể ở ghi chú trong code (Có video kết quả và file code kèm theo).
Hình ảnh kết quả như sau:
Bài Tập 2: Viết chương trình trên IDE Arduino để điều khiển đèn 08 Led sắp xếp theo một
hàng ngang sáng tuần tự từ Led 1 đến Led 8 với thời gian trễ là 1/10s = 100ms, với các
cổng tín hiệu 2, 3, 4, 5, 6, 7, 8, 9 và điện trở cho mỗi Led là 220 ohm.
Hướng dẫn: Thể hiện cụ thể ở ghi chú trong code (Có video kết quả và file code kèm theo).
Hình ảnh kết quả như sau:
10. Học phần đào tạo điện tử (e-learning) và ứng dụng
Nhóm 11: Hải Sơn, Minh Phi , Mỹ Huyền
10
CHƯƠNG 3: TÌM HIỂU VỀ PROCESSING
- Processing là một ngôn ngữ lập trình mã mở, thiết kế với mục đích lập trình đồ họa trên
nhiều môi trường khác nhau: Linux, Window, Mac, Android, và cả Web. Ngôn ngữ được Casey
Reas và Benjamin Fry của phòng thí nghiệm đa phương tiện đại học MIT sáng tạo, nên nó cũng
thích hợp cho học tập, nghiên cứu những khái niệm cơ sở của đồ họa máy tính. Dự án processing bắt
đầu năm 2001, xây dựng trên ngôn ngữ Java, nhưng sử dụng cú pháp đơn giản hơn.
- Cú pháp của Processing khá giống ngôn ngữ lập trình C/C++ và Arduino đã đề cập ở trên.
- Điều quan trọng của Processing mà chúng ta cần khai thác trong chủ đề này là về đồ họa của nó.
3.1Cấu trúc (structure):
- Cấu trúc chương trình gồm hai phần là: setup(): Chạy một lần khi bắt đầu
chương trình; draw(): Chạy lặp đi lặp lại đến khi dừng chương trình.
- Các loại cấu trúc cơ bản tương tự như Arduino.
3.2 Bảng giá trị máu:
- Khi lập trình trên Processing chúng ta sử dụng 3 màu cơ bản là: Đỏ (Red);
Xanh lá (Green); Xanh dương (Blue). Mỗi màu có giá trị từ 0 đến 255. Sau đây là bảng màu tương
ứng với các giá trị của 3 màu cơ bản trên:
11. Học phần đào tạo điện tử (e-learning) và ứng dụng
Nhóm 11: Hải Sơn, Minh Phi , Mỹ Huyền
11
3.3Các hàm đồ họa (Graphic):
- Một số hàm đồ họa, xử lý thông dụng:
+ point(x,y): Vẽ điểm trong đó x, y là chỉ số tọa độ của điểm được vẽ.
+ line(x,y,z,t): Vẽ đường thẳng trong đó (x,y) là tọa độ của điểm đầu và (z,t) là tọa độ của
điểm cuối.
+ strokeWeight(x): Độ rộng của nét vẽ các đối tượng với giá trị x.
+ rect(x,y,z,t): Vẽ hình chữ nhật trong đó (x,y) là tọa độ của điểm góc trái trên và z,t lần
lượt là chiều dài và rộng của hình chữ nhật.
+ rect(x,y,z,t,k): Vẽ hình chữ nhật trong đó x,y,z,t tương tự như hàm rect(x,y,z,t) trên, chỉ
số k là độ cong của góc hình chữ nhật. + quad(x1,y1,x2,y2,x3,y3,x4,y4): Vẽ hình tứ giác
với giá trị tọa độ của bống đỉnh tương ứng là (x1,y1); (x2,y2); (x3,y3); (x4,y4).
+ ellipse(x,y,z,t): Vẽ hình elip trong đó (x,y) là tọa độ của điểm tâm và z, t tương ứng với bề
rộng của chiều rộng và chiều cao của hình. + triangle(x1,y1,x2,y2,x3,y3): Vẽ hình tam giác;
trong đó (x1,y1); (x2,y2); (x3,y3) lần lượt là tọa độ của ba điểm trong tam giác.
+ fill(x,y,z): Tô màu cho hình; trong đó x, y, z là chỉ số màu tương ứng với đỏ, xanh lá, xanh
dương có giá trị từ 0 đến 255…
+ noFill(): Chế độ không màu, trong suốt cho các đối tượng.
+ mousePressed: Kiểm tra sự kiện click chuột.
+ mouseX, mouseY: Tọa độ tương ứng (x,y) của con trỏ chuột trên màn hình chạy code.
12. Học phần đào tạo điện tử (e-learning) và ứng dụng
Nhóm 11: Hải Sơn, Minh Phi , Mỹ Huyền
12
+ keyPressed: Kiểm tra sự kiện bấm phím. + keyCode: Giá trị của phím bấm. + fill(x,y,z):
Màu nền của đối tượng đồ họa với (x, y, z) tương ứng với giá trị của 3 màu đỏ, xanh lá, xanh
dương.
+ background(x,y,z): Màu nền của màn hình chạy code Processing với (x, y, z) tương ứng
với giá trị.
+ text(key,x,y): Hiển thị giá trị key lên màn hình code với tọa độ (x,y).
+ textSize(x): Kích thước chữ với giá trị x.
+ textAlign(string_value): Căn lề cho text với các giá trị là string_value:
LEFT, RIGHT, CENTER.
+ delay(x): Độ trễ của chương trình với giá trị x tính bằng ms.
Bài Tập 1: Thiết kế màn hình hiển thị với yêu cầu sau: Màn hình chạy code kích thước là
500:500 pixcel, màu nền là xanh lá cây; Một hình chữ nhật có tọa độ hai điểm đầu và cuối là:
(100,100) và (300,300), có màu nền vàng; Một hình tròn có tâm là (250,250), bán kính là
100, màu nền là màu đỏ.
Hướng dẫn: Code (có file kèm theo), kết quả là hình ảnh bên dưới.
Bài Tập 2: Thiết kế màn hình hiển thị với yêu cầu sau: Màn hình chạy code kích thước là
500:500 pixcel, màu nền là đỏ; Hiển thị ký tự nhập từ bàn phím ở giữa với kích thước là 150,
có màu đen.
Hướng dẫn: Code (có file kèm theo), kết quả là hình ảnh bên dưới:
13. Học phần đào tạo điện tử (e-learning) và ứng dụng
Nhóm 11: Hải Sơn, Minh Phi , Mỹ Huyền
13
Bài Tập 3: Thiết kế màn hình hiển thị với yêu cầu sau: Màn hình chạy code kích thước là
700:700 pixcel, màu nền là vàng; Vẽ đường tương ứng khi nhấn và di chuyển chuột.
Hướng dẫn: Code (có file kèm theo), kết quả là hình ảnh bên dưới:
14. Học phần đào tạo điện tử (e-learning) và ứng dụng
Nhóm 11: Hải Sơn, Minh Phi , Mỹ Huyền
14
CHƯƠNG 4 :TÌM HIỂU GIAO TIẾP GIỮA ARDUINO VÀ PROCESSING
- Để giao tiếp giữa Arduino (board) và Processing (computer) chúng ta cần cài đặt các
mức baudrate sau: 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, hoặc
115200. Trong chủ này chúng ta sử dụng baudrate là 9600.
Code phần Arduino:
+ Khai báo baudrate: Serial.begin(9600);
+ Kiểm tra giá trị tín có hay không: Serial.available();
+ Đọc dữ liệu từ Processing: Serial.read();
+ Ghi dữ liệu data ra Processing: Serial.write(data);
Code phần Processing:
+ Khai báo thư viện: import processing.serial.*;
+ Khai báo biến với kiểu Serial: Serial myPort;
+ Khai báo baudrate: myPort = new Serial(this, Serial.list()[0], 9600);
+ Kiểm tra giá trị tín có hay không: myPort.available();
+ Đọc dữ liệu từ Arduino: myPort.read();
+ Đọc dữ liệu từ Arduino đến ký tự data: myPort.readStringUntil(data);
+ Ghi dữ liệu data ra Arduino: myPort.write(data);
- Chú ý: Chúng ta còn nhiều hàm khác về liên kết giữa Arduino và Processing. Nhưng
trong chủ đề này chúng ta chỉ làm việc với một số hàm cơ bản trên. Ngoài ra, chúng ta hoàn toàn có
thể tự viết các hàm phục vụ theo nhu cầu công việc.
Bài Tập: Thiết kế màn hình hiển thị với yêu cầu sau:
- Đối với Processing: Màn hình chạy code kích thước là 500:300 pixcel, màu nền là
xám; Trên màn hình code gồm:
+ Hai hình tròn màu đỏ và xanh lá cây, dùng để khi click vào vòng tròn đỏ thì đèn Led
trên Arduino điều sẽ bật, ngược lại khi click vào vòng tròn màu xanh lá cây thì đèn Led sẽ tắt.
+ Phía trên là dòng chữ hiển thị số lần bật đèn.
- Đối với Arduino: Điều khiển đèn Led từ tín hiệu của Processing và phản hồi lại giá trị
số lần bật đèn. Cổng điều khiển là 10.
Hướng dẫn: Thể hiện cụ thể ở ghi chú trong code (Có video kết quả và file code kèm theo). Hình
ảnh kết quả như sau:
15. Học phần đào tạo điện tử (e-learning) và ứng dụng
Nhóm 11: Hải Sơn, Minh Phi , Mỹ Huyền
15
BÀI TẬP TỔNG KẾT
Mục đích: Nhằm giúp các em hệ thống lại toàn bộ kiến thức của chuyên đề thì bài tập mang tính
tổng quát và thực tế là điều rất cần thiết. Bài tập về thiết kế điều khiển hệ thống đèn giao thông sẽ
giúp các em tự tay thực hiện và hiểu rõ hơn những kiến thức đã được học. Qua bài tập này, các em
sẽ có thêm động lực học tập và có thể ứng dụng những kiến thức vào đời sống. Bài tập được nêu cụ
thể như sau:
Bài Tập: Thiết kế chương trình điều khiển đèn giao thông đơn giản, với yêu cầu như sau:
- Đối với Processing: Màn hình chạy code kích thước tùy chọn (ví dụ: 500:500 pixcel,
màu nền tùy chọn; Trên màn hình code gồm:
+ Trên cùng là tiêu đề của sản phẩm, thiết kế tự do, với nội dung: "HE THONG DIEU KHIEN
DEN GIAO THONG"
+ 8 ô vuông kích thước tùy chọn (ví dụ: 100:100 pixcel) ghi số tương ứng từ 1 đến 8, với màu ô
vuông tùy chọn, mục đích các ô vuông là để điều khiển vị trí tương ứng của đèn Led từ 1 đến 8: Mỗi
đèn Led tương ứng với một vị trí đèn giao thông. Ngoài ra, thiết kế thêm một nút nhấn để điều khiển
tắt/mở toàn bộ 8 đèn Led. Chú ý: Khi nhấn vào một ô bất kỳ với số hiển thị trên tô thì Led hoặc ô
điều khiển toàn bộ Led thì màu sắc tương tứng trên ô sẽ hiển thị tương ứng giúp người dùng nhận
biết đèn đang sáng hay tắt.
- Đối với Arduino: Điều khiển đèn 08 Led từ tín hiệu của Processing. Cổng điều khiển là 2, 3,
4, 5, 6, 7, 8, 9 và điện trở cho mỗi Led là 220 ohm. Ghi chú: Mẫu thiết kế tham khảo:
16. Học phần đào tạo điện tử (e-learning) và ứng dụng
Nhóm 11: Hải Sơn, Minh Phi , Mỹ Huyền
16
Hướng dẫn: Thể hiện cụ thể ở ghi chú trong code (Có video kết quả và file code kèm theo). Hình
ảnh kết quả như sau:
17. Học phần đào tạo điện tử (e-learning) và ứng dụng
Nhóm 11: Hải Sơn, Minh Phi , Mỹ Huyền
17
TÀI LIỆU THAM KHẢO
1. "Tự học nhanh Arduino cho người mới bắt đầu" – Thạc sỹ: Huỳnh Minh Phú.
2. Tài liệu học Arduino – Học viện KAIST – Hàn Quốc.
3. "Arduino - Home". Arduino.cc. N. p., 2017. Web. 4 June 2017 (link:
https://www.arduino.cc/)
4. "Cộng Đồng Arduino Việt Nam | Tôi Yêu Việt Nam". Arduino.vn. N. p., 2017. Web. 4
June 2017. (Link: http://arduino.vn/)
5. "Processing.Org". Processing.org. N. p., 2017. Web. 4 June 2017 (link:
https://processing.org/)
-- HẾT --