Bài 9: Radar phát hiện xâm nhập - MakerEdu Inventor Kit for Micro:bit
Jump to navigation
Jump to search
Mô tả dự án
Trong bài này các bạn sẽ sử dụng kết hợp "cảm biến siêu âm" để quét vật thể phía trước và "động cơ Servo" để xoay hướng quét cảm biến, thêm "còi báo" tích hợp sẵn trên mạch Micro:bit nữa là ta có ngay một bộ Radar rồi.
... 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-S01] - Cảm biến Siêu âm
- 1x Động cơ RC Servo.
Sơ đồ kết nối
MakerEDU Shield | Thiết bị |
---|---|
Port P2+P8 | [MKE-S01] - Siêu âm |
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.
Chú ý: Dự án có sử dụng khối [S01] cho cảm biến Siêu âm, bạn cần cài đặt thêm Extension "MakerEdu_Hardware" vào dự án của mình theo bài hướng dẫn này (nếu chưa có). |
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
// Khai báo các biến let distance = 0 // Khối "on start" - thực hiện 1 lần khi khởi động music.setVolume(255) let angle = 0 let rotate = 1 pins.servoWritePin(AnalogPin.P0, angle) // Khối "forever" - vòng lặp chính của chương trình // Thực hiện lại ngay vừa khi kết thúc khối basic.forever(function () { distance = ultraSonic.readDistance(ultraSonic.PingUnit.Centimeters, ultraSonic.PinKit.Port2) distance = Math.constrain(distance, 0, 50) led.plotBarGraph( distance, 50 ) if (distance < 20) { music.play(music.createSoundExpression(WaveShape.Sine, 5000, 0, 255, 0, 100, SoundExpressionEffect.None, InterpolationCurve.Linear), music.PlaybackMode.UntilDone) } else { music.stopAllSounds() } }) // Khối "loop" - vòng lặp phụ // Thực hiện lại sau mỗi 0.03s, kể từ lúc vừa kết thúc khối loops.everyInterval(30, function () { if (rotate == 1) { angle += 1 } else if (rotate == 0) { angle += -1 } if (angle >= 180) { rotate = 0 } else if (angle <= 0) { rotate = 1 } pins.servoWritePin(AnalogPin.P0, angle) })
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 "angle" là
0
. - Đặt giá trị biến "rotate" là
1
. - Điều khiển Servo đang kết nối ở chân
P0
quay theo giá trị biến "angle".
Trong khối [ forever ]:
Khối được thực hiện lặp lại liên tục, đảm nhận việc đọc cảm biến.
- Đọc giá trị khoảng cách (cm) từ cảm biến Siêu âm đang kết nối, để lưu vào biến "distance".
- Dùng khối [ constrain... ] để lọc giá trị trong biến "distance" đảm bảo kết quả chỉ nằm trong khoảng "từ 0cm đến 50cm".
- Cho hiển thị mức giá trị (cm) trong biến "distance" lên màn hình Led bằng khối [ plot bar graph of... ].
- Kiểm tra nếu
distance < 20cm
, cho bật còi báo. Ngược lại thì tắt còi.
Trong khối [ every "30" ms ]:
Khối được thực hiện lại cách mỗi 0.03 giây, đảm nhận việc điều khiển Servo.
- Kiểm tra nếu
rotate = 1
, nghĩa là Servo đang quay từ góc 0º đến 180º. Biến "angle" tăng thêm 1 giá trị. - Ngược lại nếu
rotate = 0
, nghĩa là Servo đang quay từ góc 180º đến góc 0º. Biến "angle" giảm đi 1 giá trị. - Tiếp tục kiểm tra nếu
angle ≥ 180
, biến "rotate" đặt thành 0 để Servo quay về 0º. - Ngược lại nếu
angle ≤ 0
, biến "rotate" đặt thành 1 để Servo quay về 180º. - Đồng thời Micro:bit điều khiển Servo quay theo giá trị biến "angle".
Kết quả
...
... hình dự án