Dự án 12: Xe điều khiển qua Bluetooth - MakerEdu Inventor Kit for Micro:bit
Jump to navigation
Jump to search
Mức độ: Khó ★★★★★★★★☆☆
Danh sách thiết bị
- 1x Khung xe
- 1x MakerEdu Shield for micro:bit
- 1x Micro:bit
Sơ đồ kết nối
MakerEDU Shield | Thiết bị |
---|---|
Motor_A | Động cơ DC bên phải xe (bánh trước + bánh sau) |
Motor_B | Động cơ DC bên trái xe (bánh trước + bánh sau) |
Mô tả dự án
Trong bài này, bạn sẽ học cách làm một chiếc xe điều khiển từ xa bằng Bluetooth qua điện thoại.
Chú ý: Để sử dụng được tính năng Driver tích hợp trên MakerEDU Shield, 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. Bên cạnh, để Motor hoạt động ổn định, các bạn cần cấp nguồn riêng 5V qua cổng microUSB trên Shield. |
Dự án này có tất cả 5 giai đoạn và một giai đoạn kiểm tra.
Giai đoạn kiểm tra bạn phải thực hiện đầu tiên, để đảm bảo đã thực hiện thành công kết nối Bluetooth và kết nối đúng các Động cơ DC tương thích với code.
Tiếp theo trong 5 giai đoạn này:
- Giai đoạn 1 - Tạo sẵn trước một số "biến" cần dùng và tạo tính năng hiển thị "tốc độ" của xe lên Led Matrix.
- Giai đoạn 2 - Sử dụng các "biến" để lưu thao tác các nút sử dụng, gồm nút [A] - [B] - [C] - [D] - [1] - [2].
- Giai đoạn 3 - Tạo các "hàm" chức năng điều khiển xe đi Tới [ ↑ ], Lùi [ ↓ ], Xoay Trái [ ← ], Xoay Phải [ → ], Dừng [ - ].
- Giai đoạn 4 - Tạo các "hàm" chức năng điều khiển xe đi Tới Trái [ ↖ ], Tới Phải [ ↗ ], Lùi Trái [ ↙ ], Lùi Phải [ ↘ ].
- Giai đoạn 5 - Thực hiện kết nối giữa các thao tác nút tương ứng từng hàm điều khiển xe.
Các bước thực hiện (Giai đoạn kiểm tra)
Trước tiên, bạn cần kiểm tra kết nối Bluetooth theo bài hướng dẫn này.
Tạo code
- Bạn tạo 2 khối on start và forever như hình sau.
→ Khối mã này điều khiển kênh Motor A quay chiều "forward" trong 5s, kế tiếp là kênh Motor B cũng trong 5s và cứ lặp lại.
→ Thời điểm đang sử dụng kênh motor nào sẽ hiển thị tên A hoặc B lên Led Matrix.
Blocks
Javascript
l9110.pauseMotor(l9110.Motor.MotorA) l9110.pauseMotor(l9110.Motor.MotorB) basic.forever(function () { l9110.pauseMotor(l9110.Motor.MotorB) l9110.controlMotor(l9110.Motor.MotorA, l9110.Rotate.Forward, 100) basic.pause(5000) l9110.pauseMotor(l9110.Motor.MotorA) l9110.controlMotor(l9110.Motor.MotorB, l9110.Rotate.Forward, 100) basic.pause(5000) })
Nạp code
- Nhấp vào Download để nạp code của bạn sang micro:bit.
- Gắn micro:bit lên MakerEdu Shield.
Lưu ý phải ngắt kết nối micro:bit với máy tính. - Kết nối nguồn riêng 5V qua cổng microUSB trên Shield.
- Kết nối 2 cặp Động cơ DC đến port domino Motor_A và Motor_B của MakerEdu Shield.
- Kiểm tra chiều quay của cặp Motor bên trái và bên phải có giúp xe đi tới không.
Nếu cặp nào không, bạn "đảo chiều đầu nối dây" motor lại.
Chú ý: Khối code trên giúp các bạn kiểm tra phần kết nối dây các Động cơ đã đúng hết chưa. Từ phần sau trở đi chính thức bắt đầu vào dự án, bạn nhớ xóa hết khối code hiện tại trước khi bắt đầu. |
Các bước thực hiện (Giai đoạn 1)
Tạo code
- Tạo biến có tên "btnA", "btnB", "btnC", "btnD", "btn1", "btn2", "speed".
→ Các biến này lưu trạng thái thao tác nút nhấn trên điện thoại.
→ Biến "speed" lưu giá trị tốc độ hiện tại của xe. - Tạo 1 khối on start như hình dưới.
→ Khi mới khởi động micro:bit cài đặt giá trị ban đầu cho các biến.
→ Và cho hiển thị tốc độ đang cài đặt hiện tại.
- Vào [Devices] thêm khối on gamepad button 4 down và on gamepad button 3 down như hình sau.
→ 2 khối này để tăng/giảm tốc độ xe khi bạn nhấn nút 4 và nút 3.
→ Khối constrain giúp đảm bảo giá trị biểu thức trả về luôn trong khoảng 20 đến 100.
Javascript
let btnA = 0 let btnB = 0 let btnC = 0 let btnD = 0 let btn1 = 0 let btn2 = 0 let speed = 0 devices.onGamepadButton(MesDpadButtonInfo._4Down, function () { speed = Math.constrain(speed + 10, 20, 100) basic.showNumber(speed / 10 - 1) }) devices.onGamepadButton(MesDpadButtonInfo._3Down, function () { speed = Math.constrain(speed - 10, 20, 100) basic.showNumber(speed / 10 - 1) })
Các bước thực hiện (Giai đoạn 2)
Tạo code
- Tạo các khối on gamepad button ? down như hình sau.
→ Mỗi khi một trong các nút [A], [B], [C], [D], [1], [2] được nhấn, micro:bit sẽ đặt các biến tương ứng thành giá trị 1 (nút đang nhấn).
- Tạo các khối on gamepad button ? up như hình sau.
→ Sau khi một trong các nút [A], [B], [C], [D], [1], [2] được thả ra, micro:bit sẽ đặt các biến tương ứng thành giá trị 0 (nút đã nhả).
Javascript
devices.onGamepadButton(MesDpadButtonInfo.ADown, function () { btnA = 1 }) devices.onGamepadButton(MesDpadButtonInfo.BDown, function () { btnB = 1 }) devices.onGamepadButton(MesDpadButtonInfo.CDown, function () { btnC = 1 }) devices.onGamepadButton(MesDpadButtonInfo.DDown, function () { btnD = 1 }) devices.onGamepadButton(MesDpadButtonInfo._1Down, function () { btn1 = 1 }) devices.onGamepadButton(MesDpadButtonInfo._2Down, function () { btn2 = 1 }) /* ------------------------------------------------------------------------- */ devices.onGamepadButton(MesDpadButtonInfo.AUp, function () { btnA = 0 }) devices.onGamepadButton(MesDpadButtonInfo.BUp, function () { btnB = 0 }) devices.onGamepadButton(MesDpadButtonInfo.CUp, function () { btnC = 0 }) devices.onGamepadButton(MesDpadButtonInfo.DUp, function () { btnD = 0 }) devices.onGamepadButton(MesDpadButtonInfo._1Up, function () { btn1 = 0 }) devices.onGamepadButton(MesDpadButtonInfo._2Up, function () { btn2 = 0 })
Các bước thực hiện (Giai đoạn 3)
Tạo code
- Tạo 2 hàm có tên "go" và "back".
- Trong vùng code, bạn tạo chức năng cho 2 khối function go và function back như hình dưới.
→ Hàm "go" điều khiển xe đi tới, hàm "back" đi lùi.
- Tạo 2 hàm có tên "left" và "right".
- Trong vùng code, bạn tạo chức năng cho 2 khối function left và function right như hình dưới.
→ Hàm "left" điều khiển xe xoay trái, hàm "right" xoay phải.
- Tạo 1 hàm có tên "stop".
- Trong vùng code, bạn tạo chức năng cho khối function stop như hình dưới.
→ Hàm "stop" làm xe dừng lại.
Javascript
function go() { l9110.controlMotor(l9110.Motor.MotorA, l9110.Rotate.Forward, speed) l9110.controlMotor(l9110.Motor.MotorB, l9110.Rotate.Forward, speed) } function back() { l9110.controlMotor(l9110.Motor.MotorA, l9110.Rotate.Backward, speed) l9110.controlMotor(l9110.Motor.MotorB, l9110.Rotate.Backward, speed) } /* ------------------------------------------------------------------------- */ function left() { l9110.controlMotor(l9110.Motor.MotorA, l9110.Rotate.Forward, speed) l9110.controlMotor(l9110.Motor.MotorB, l9110.Rotate.Backward, speed) } function right() { l9110.controlMotor(l9110.Motor.MotorA, l9110.Rotate.Backward, speed) l9110.controlMotor(l9110.Motor.MotorB, l9110.Rotate.Forward, speed) } /* ------------------------------------------------------------------------- */ function stop() { l9110.pauseMotor(l9110.Motor.MotorA) l9110.pauseMotor(l9110.Motor.MotorB) }
Các bước thực hiện (Giai đoạn 4)
Tạo code
- Tạo 2 hàm có tên "goLeft" và "goRight".
- Trong vùng code, bạn tạo chức năng cho 2 khối function goLeft và function goRight như hình dưới.
→ Hàm "goLeft" điều khiển xe đi tới hướng trái, hàm "goRight" đi tới hướng phải.
- Tạo 2 hàm có tên "backLeft" và "backRight".
- Trong vùng code, bạn tạo chức năng cho 2 khối function backLeft và function backRight như hình dưới.
→ Hàm "backLeft" điều khiển xe đi lùi hướng trái, hàm "backRight" đi lùi hướng phải.
Javascript
function goLeft() { l9110.controlMotor(l9110.Motor.MotorA, l9110.Rotate.Forward, speed) l9110.pauseMotor(l9110.Motor.MotorB) } function goRight() { l9110.pauseMotor(l9110.Motor.MotorA) l9110.controlMotor(l9110.Motor.MotorB, l9110.Rotate.Forward, speed) } /* ------------------------------------------------------------------------- */ function backLeft() { l9110.controlMotor(l9110.Motor.MotorA, l9110.Rotate.Backward, speed) l9110.pauseMotor(l9110.Motor.MotorB) } function backRight() { l9110.pauseMotor(l9110.Motor.MotorA) l9110.controlMotor(l9110.Motor.MotorB, l9110.Rotate.Backward, speed) }
Các bước thực hiện (Giai đoạn 5)
Tạo code
- Tạo 1 khối forever như hình dưới.
→ Khối này liên tục kiểm tra "các biến lưu trạng thái nút" để ra quyết định điều khiển xe tương ứng.
Blocks
Javascript
basic.forever(function () { if (btnA) { left() } else if (btnB) { right() } else if (btnC) { if (btn1) { backLeft() } else if (btn2) { backRight() } else { back() } } else if (btnD) { if (btn1) { goLeft() } else if (btn2) { goRight() } else { go() } } else { stop() } })
Nạp code
- Nhấp vào Download để nạp code của bạn sang micro:bit.
- Gắn micro:bit lên MakerEdu Shield.
Lưu ý phải ngắt kết nối micro:bit với máy tính. - Kết nối nguồn riêng 5V qua cổng microUSB trên Shield.
- Kết nối 2 cặp Động cơ DC đến port domino Motor_A và Motor_B của MakerEdu Shield.
- Mở App micro:bit trên điện thoại có hệ điều hành iOS.
(yêu cầu đã thực hiện nhận diện kết nối qua Bluetooth giữa điện thoại và micro:bit trước đó). - Bấm vào Monitor and Control sẽ xuất hiện giao diện điều khiển như hình dưới.
(nếu chưa có, bạn vào Set và Add để cài đặt). - Cuối cùng, bấm Start để bắt đầu ghép nối Bluetooth.
(nếu đã ghép nối thành công, bạn bấm các nút xem code có vận hành xe đúng không).
Kết quả
... hình dự án