Dự án 10: Cảnh báo va chạm - MakerEdu Inventor Kit for Micro:bit

From MakerLab Wiki
Jump to navigation Jump to search

Mức độ: Trung bình ★★★★★★☆☆☆

Danh sách thiết bị

Sơ đồ kết nối

MakerEDU Shield Thiết bị
Port P2+P8 [MKE-S01] - Siêu âm

Mô tả dự án

Trong dự án này, bạn sẽ làm một bộ cảnh báo va chạm. Khi micro:bit phát hiện có vật thể trong phạm vi cài đặt, nó sẽ bật còi báo. Nếu đối tượng càng ngày tiến gần, còi báo sẽ càng lớn và càng nhanh để gây chú ý.

Bạn sẽ được học cách lấy giá trị trung bình từ cảm biến, mục đích của việc này là để hạn giảm thiếu các yếu tố gây nhiễu xung quanh, và kết quả nhận được có tính ổn định, đáng tin cậy hơn.

Ngoài ra bạn sẽ được làm quen với 1 khối có thể giúp bạn chạy song song được nhiều việc cùng lúc, trong lập trình thuật ngữ đó gọi là "đa nhiệm".

Icon-Attention-White.png Chú ý:
Dự án có sử dụng khối cảm biến Siêu âm trong [S01] bạn cần cài đặt thêm Extension "MakerEdu_Hardware" vào dự án của mình (nếu chưa có) theo bài hướng dẫn này.

Các bước thực hiện (Giai đoạn 1)

Tạo code

  1. Tạo biến có tên "sum".
    → Để ghi lại tổng giá trị sau nhiều lần đọc cảm biến Siêu âm.
  2. Tạo biến có tên "distance".
    → Để lưu giá trị trung bình khoảng cách, bằng cách lấy "sum" chia số lần lấy mẫu.
  3. Tạo biến có tên "vol".
    → Đặt độ lớn âm thanh của còi khi phát.
  4. Tạo biến có tên "speed".
    → Đặt tốc độ còi báo nhanh hay chậm.
  5. Tạo 1 hàm có tên "readAverage".
    Chọn thẻ Number, đặt tên biến là "sample", xong bấm nút Done.
  6. Trong vùng code, bạn tạo chức năng cho khối function readAverage như hình dưới.
    → Khối này khi nhận một giá trị, sẽ cho cảm biến Siêu âm đọc liên tục, với số lần lấy mẫu theo giá trị này.
    → Sau đó tính ra giá trị trung bình cho lưu vào biến "distance".

Blocks

MakeCode Kit 10a.png

Javascript

let sum = 0
let distance = 0
let vol = 0
let speed = 0

function readAverage(sample: number) {
  sum = 0
  for (let index = 0; index < sample; index++) {
    sum += ultraSonic.readDistance(ultraSonic.PingUnit.Centimeters, ultraSonic.PinKit.Port2)
  }
  distance = Math.round(sum / sample)
}

Các bước thực hiện (Giai đoạn 2)

Tạo code

  1. Vào [Loops] thêm khối every 500 ms và tạo như hình dưới.
    → Khối này được thực hiện lại cứ sau mỗi một khoảng thời gian do bạn cài đặt (đơn vị micro giây).
    → Khối này thực hiện các công việc theo trình tự:
    • Tính giá trị khoảng cách trung bình và lưu vào biến "distance".
    • Gửi giá trị "distance" này lên máy tính.
    • Dựa theo giá trị "distance" tính ra mức âm lượng cho còi và lưu vào biến "vol".
    • Dựa theo giá trị "distance" tính ra tốc độ cho còi báo và lưu vào biến "speed".
Icon-Done-White.png Giải thích:
Giá trị khoảng cách được tính "trung bình cộng" sau 5 lần lấy mẫu.

Bạn có thể nhấp vào Show data Device để xem giá trị khoảng cách trả về trên máy tính.

Micro:bit cho phép chỉnh âm lượng của còi bằng giá trị trong khoảng [ 0 ; 255 ]. Trong dự án này với khoảng cách từ 0cm đến 30cm mình cho đặt mức âm lượng từ 255 đến 55. Tức khi khoảng cách vật thể càng gần, âm lượng còi phát ra càng lớn và ngược lại.

Mình cho còi phát cảnh báo bằng cách bật tắt còi liên tục, "khoảng dừng mỗi lần bật tắt" này càng nhỏ, nhịp còi báo càng nhanh và ngược lại. Cụ thể ở đây mình đặt với khoảng cách từ 0cm đến 30cm nhịp nghỉ là từ 0ms đến 200ms, đơn vị (micro giây).

Blocks

MakeCode Kit 10b.png

Javascript

loops.everyInterval(500, function () {
  readAverage(5)
  serial.writeLine("" + (distance))
  vol = Math.map(distance, 0, 30, 255, 55)
  speed = Math.map(distance, 0, 30, 0, 200)
})

Các bước thực hiện (Giai đoạn 3)

Tạo code

  1. Tạo 1 khối forever như hình dưới.
    → Khối này chỉ thực hiện khi phát hiện khoảng cách từ dưới 30cm.
    → Nó sẽ bật còi với mức âm lượng theo biến "vol" và với tốc độ theo biến "speed".

Blocks

MakeCode Kit 10c.png

Javascript

basic.forever(function () {
  if (distance <= 30) {
    music.setVolume(vol)
    music.ringTone(988)
    basic.pause(speed)
    music.stopAllSounds()
  }
})

Nạp code

  1. Kết nối [MKE-S01] - Siêu âm đến Port P2+P8 của MakerEdu Shield.
  2. Nhấp vào Download để nạp code của bạn sang micro:bit.
  3. Đặt một vật cản bất kì trước cảm biến với cách khoảng cách khác nhau và nghe âm thanh phản hồi về như thế nào.

Kết quả

... hình dự án