Bài 8: Đồng hồ đếm ngược - MakerEdu Inventor Kit for Micro:bit
Mô tả dự án
Trong bài này bạn sẽ học cách sử dụng "biến trở", một thiết bị như các núm xoay. Kết hợp với "động cơ Servo", "nút nhấn", "còi báo" và "màn hình Led" để tạo nên một bộ đồng hồ đếm ngược thật xịn xò.
... hình thumnail
Các bước thực hiện
Danh sách thiết bị
- 1x Cáp MicroUSB.
- 1x Bo mạch Micro:Bit.
- 1x MakerEdu Shield for micro:bit
- 1x [MKE-M04] - Biến trở
- 1x Động cơ RC Servo.
Sơ đồ kết nối
MakerEDU Shield | Thiết bị |
---|---|
Port P1 | [MKE-M04] - Biến trở |
Port P0 | Động cơ RC Servo |
Chuẩn bị trước dự án
- Tham khảo: Cách kết nối và nạp chương trình cho mạch Micro:bit trên máy tính với phần mềm MakeCode - MakerLab Wiki.
Các bước thực hiện
- Tạo một dự án mới trong phần mềm MakeCode.
- Bạn có thể lập trình kéo thả từng mã khối theo hình dưới trong mục [Blocks] hoặc copy đoạn code dưới và paste vào mục [JavaScript] để tiến hành nhanh hơn.
- Nạp chương trình vào Micro:Bit.
Blocks
Javascript
// Khối input - thực hiện khi nhấn nút A input.onButtonPressed(Button.A, function () { mode = 1 }) // Khối input - thực hiện khi nhấn nút B input.onButtonPressed(Button.B, function () { mode = 0 }) // Khai báo các biến let pot = 0 let mode = 0 // Khối "on start" - thực hiện 1 lần khi khởi động music.setVolume(255) mode = 0 basic.showIcon(IconNames.Happy) basic.pause(1000) basic.clearScreen() loops.everyInterval(1000, function () { if (mode == 1) { pot += -1 led.plotBarGraph( pot, 60, false ) pins.servoWritePin(AnalogPin.P12, pot * 3) if (pot <= 0) { mode = 0 } } }) // Khối "forever" - vòng lặp chính của chương trình basic.forever(function () { if (mode == 0) { pot = pins.analogReadPin(AnalogPin.P0) pot = Math.map(pot, 0, 1023, 0, 60) led.plotBarGraph( pot, 60, false ) pins.servoWritePin(AnalogPin.P12, pot * 3) } })
Giải thích code
Chương trình sẽ hoạt động như sau:
Trong khối [ on start ]:
- Đầu tiên cài đặt mức âm lượng còi báo lên cao nhất là 255 bằng khối [ set volume... ].
- Đặt giá trị biến "mode" là
0
. - Cho Micro:bit hiển thị "mặt cười" trong 1 giây rồi tắt.
Phần khởi động này nói cho chúng ta biết Micro:bit đã sẵn sàng.
Vai trò của biến "mode":
- Khi bằng
0
, bạn đang trong chế độ chọn thời gian đếm ngược. - Khi bằng
1
, Micro:bit bắt đầu đếm ngược với giá trị bạn chọn.
Khối sự kiện [ on button A pressed ]:
Khối này được thực hiện khi nhấn nút A.
- Đặt biến "mode" thành
1
→ để bắt đầu đếm ngược.
Khối sự kiện [ on button B pressed ]:
Khối này được thực hiện khi nhấn nút B.
- Đặt biến "mode" thành
0
→ để dừng (kết thúc) quá trình đếm.
Trong khối [ forever ]:
Khối được thực hiện lại liên tục khi mode = 0
.
- Micro:bit đọc giá trị analog từ chân
P0
đang kết nối với module Biến trở, và cho lưu vào biến "pot" với dãi giá trị nhận được "từ 0 đến 1023". - Dùng khối [ map... ] để "ánh xạ" giá trị analog sang thang đo giây, với khoảng "từ 0s đến 60s".
- Cho hiển thị mức giá trị trong biến "pot" lên màn hình Led bằng khối [ plot bar graph of... ]. → Khối này giúp các bạn xem được mức thời gian đang chọn khi xoay biến trở.
- Sau đó điều khiển Servo ở chân
P12
quay đến góc theo công thức{ pot * 3 }
.
Theo công thức trên, cứ mỗi 1 giây đếm ngược sẽ tương ứng với góc quay 3º.
Nghĩa là khi bạn xoay biến trở để chọn mức thời gian đếm ngược từ 0s đến 60s. Servo sẽ quay tương ứng từ góc 0º đến góc 180º.
Trong khối [ every "1000" ms ]:
Khối được thực hiện lại cách mỗi 1 giây, khi mode = 1
.
- Micro:bit giảm dần giá trị trong biến "pot" đi từng 1 đơn vị.
- Đồng thời cho hiển thị mức giá trị đó lên màn hình Led qua khối [ plot bar graph of... ].
- Và điều khiển Servo quay theo góc tương ứng.
- Cuối cùng kiểm tra, nếu
pot ≤ 0
, mới cho quay lại chế độmode = 0
.
Kết quả
...
... hình dự án