Bài 8: Đồng hồ đếm ngược - MakerEdu Inventor Kit for Micro:bit

From MakerLab Wiki
Jump to navigation Jump to search

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ị

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

Các bước thực hiện

  1. Tạo một dự án mới trong phần mềm MakeCode.
  2. 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.
  3. Nạp chương trình vào Micro:Bit.

Blocks

B8 MicrobitEdu.png

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 ]:

  1. Đầ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... ].
  2. Đặt giá trị biến "mode"0.
  3. 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.

  1. 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".
  2. Dùng khối [ map... ] để "ánh xạ" giá trị analog sang thang đo giây, với khoảng "từ 0s đến 60s".
  3. 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ở.
  4. 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.

  1. Micro:bit giảm dần giá trị trong biến "pot" đi từng 1 đơn vị.
  2. Đồ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... ].
  3. Và điều khiển Servo quay theo góc tương ứng.
  4. 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