Dự án 10: Cảnh báo va chạm - MakerEdu Inventor Kit for Micro:bit
Jump to navigation
Jump to search
Mức độ: Trung bình ★★★★★★☆☆☆☆
Danh sách thiết bị
- 1x [MKE-S01] - Siêu âm
- 1x MakerEdu Shield for micro:bit
- 1x Micro:bit
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".
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
- 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. - 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. - Tạo biến có tên "vol".
→ Đặt độ lớn âm thanh của còi khi phát. - Tạo biến có tên "speed".
→ Đặt tốc độ còi báo nhanh hay chậm. - 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. - 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
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
- 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".
Blocks
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
- 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
Javascript
basic.forever(function () { if (distance <= 30) { music.setVolume(vol) music.ringTone(988) basic.pause(speed) music.stopAllSounds() } })
Nạp code
- Kết nối [MKE-S01] - Siêu âm đến Port P2+P8 của MakerEdu Shield.
- Nhấp vào Download để nạp code của bạn sang micro:bit.
- Đặ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