Mục lục:
2025 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2025-01-13 06:58
Trong hướng dẫn này, chúng tôi đang làm cho GiggleBot giải quyết những khó khăn của một mê cung.
Chúng tôi đang gắn một servo trên GiggleBot trên đó chúng tôi gắn một cảm biến khoảng cách. Trong khi chạy, servo sẽ quay qua lại để cảm biến khoảng cách có thể đo khoảng cách đến từng chướng ngại vật. Điều này hoạt động giống như một cảm biến LIDAR thường đắt hơn nhiều.
Đồng thời, GiggleBot đang gửi dữ liệu này tới một vi điều khiển BBC từ xa: bit hiển thị trên ma trận 5 x 5 đèn LED của nó vị trí tương đối của nó với các chướng ngại vật.
Công việc của bạn là có thể điều hướng GiggleBot chỉ bằng cách xem những gì nó được hiển thị trên micro BBC: bit khác. Để điều khiển GiggleBot, các nút trên micro: bit BBC từ xa được sử dụng.
Nghe có vẻ như thú vị! Chúng ta hãy đi xuống nó, phải không?
Bước 1: Các thành phần bắt buộc
Chúng tôi sẽ cần:
- Một GiggleBot.
- Một bộ pin cho BBC micro: bit. Nó đi kèm với một micro: bit BBC trong gói của nó.
- x3 pin AA cho GiggleBot.
- Cáp Grove để kết nối cảm biến khoảng cách với GiggleBot.
- Một bộ Servo từ DexterIndustries.
- x3 BBC vi mô: bit. Một cho GiggleBot và một dùng để điều khiển robot từ xa.
- Một cảm biến khoảng cách từ DexterIndustries.
Nhận robot GiggleBot cho BBC micro: bit tại đây!
Bước 2: Lắp ráp Robot
Để làm cho GiggleBot sẵn sàng được lập trình, chúng ta cần phải lắp ráp nó, mặc dù không cần phải làm gì nhiều.
Lắp 3 pin AA vào ngăn bên dưới GiggleBot.
Lắp ráp gói servo. Đối với cánh tay quay của servo, hãy sử dụng lỗ cuối cùng của nó để cố định servo vào các đầu nối phía trước của GiggleBot. Bạn có thể sử dụng vít và / hoặc một số dây để làm cho nó ổn định hơn ở vị trí của nó. Hoặc bạn có thể dán keo nóng vào bảng. Trong trường hợp của tôi, tôi đã sử dụng vít và dây ngắn để buộc cánh tay servo vào bảng GiggleBot.
Khi lắp cánh tay servo vào servo, hãy đảm bảo rằng servo đã được đặt ở vị trí 80. Bạn có thể thực hiện việc đó bằng cách gọi gigglebot.set_servo (gigglebot. RIGHT, 80). Bạn có thể đọc về điều ấy nhiều hơn tại đây.
Tiếp theo, đặt cảm biến khoảng cách ở mặt trước của gói servo và sửa nó như trong ví dụ trên.
Cuối cùng, kết nối cảm biến khoảng cách bằng cáp Grove với bất kỳ cổng nào trong số 2 cổng I2C và động cơ servo với cổng bên phải trên GiggleBot - cổng bên phải được đề cập trên đó.
Bước 3: Tạo mê cung của riêng bạn - Tùy chọn
Trong trường hợp này, tôi đã sử dụng một loạt các hộp để tạo một đường dẫn vòng kín, tương tự như một đường dẫn NASCAR.
Ở bước này, bạn có thể thực sự sáng tạo và làm cho nó xoắn như thế nào bạn muốn hoặc làm cho nó siêu dài vì điều đó thực sự tùy thuộc vào bạn.
Hoặc nếu bạn không muốn theo dõi, bạn có thể đặt GiggleBot trong nhà bếp hoặc phòng khách chẳng hạn - điều đó đủ tốt vì có rất nhiều bức tường và chướng ngại vật mà bạn vẫn cần phải tránh.
Bước 4: Thiết lập môi trường
Để bạn có thể lập trình BBC micro: bit trong MicroPython, bạn phải thiết lập một trình chỉnh sửa cho nó (Mu Editor) và đặt GiggleBot MicroPython Runtime làm thời gian chạy của nó. Đối với điều đó, bạn phải làm theo hướng dẫn trên trang này. Tại thời điểm này, phiên bản v0.4.0 của thời gian chạy được sử dụng.
Bước 5: Lập trình GiggleBot - Phần I
Đầu tiên, hãy thiết lập tập lệnh của GiggleBot. Tập lệnh này sẽ làm cho GiggleBot quay động cơ servo của nó 160 độ (mỗi hướng 80 độ) trong khi đồng thời lấy 10 giá trị đọc từ cảm biến khoảng cách mỗi lượt.
Khi được bật, GiggleBot sẽ ở chế độ chờ cho đến khi nhận được lệnh từ điều khiển từ xa. Chỉ có thể có 3 lệnh: di chuyển về phía trước, sang trái hoặc sang phải.
Lưu ý: Tập lệnh sau có thể thiếu khoảng trắng và điều này có vẻ là do một số vấn đề khi hiển thị GitHub Gists. Nhấp vào ý chính để đưa bạn đến trang GitHub nơi bạn có thể sao chép và dán mã.
GiggleBot dựa trên LIDAR được điều khiển từ xa
từ nhập gigglebot * |
from distance_sensor import DistanceSensor |
từ chế độ ngủ nhập microbit |
từ utime nhập ticks_us, sleep_us |
nhập khẩu |
nhập radio |
# dừng robot nếu nó đang di chuyển |
ngừng lại() |
# bật đài |
radio.on () |
# đối tượng cảm biến khoảng cách |
ds = DistanceSensor () |
ds.start_continuous () |
xoay_time = 0,7 # đo bằng giây |
xoay_span = 160 # đo bằng độ |
xoay_ bước = 10 |
overhead_compensation = 1,05 # được xác định theo tỷ lệ phần trăm |
time_per_step = 10 ** 6 * xoay_giờ / (xoay_bước * chi phí_phân_phục) |
last_read_time = 0 |
radar = bytearray (bước quay) |
servo_rotate_direction = 0 # 0 để đi lên (0-> 160) và 1 ngược lại |
radar_index = 0 |
set_servo (RIGHT, 0) |
whileTrue: |
# đọc từ radar |
nếu ticks_us () - last_read_time> time_per_step: |
# đọc từ cảm biến khoảng cách |
radar [radar_index] = int (ds.read_range_continuous () / 10) |
last_read_time = ticks_us () |
print (radar_index) |
# thực hiện logic để xoay servo từ trái sang phải |
nếu radar_index == xoay_ bước -1 và servo_rotate_direction == 0: |
set_servo (RIGHT, 0) |
servo_rotate_direction = 1 |
elif radar_index == 0 và servo_rotate_direction == 1: |
set_servo (RIGHT, xoay_span) |
servo_rotate_direction = 0 |
khác: |
radar_index + = 1if servo_rotate_direction == 0else-1 |
# và gửi các giá trị radar |
radio.send_bytes (radar) |
cố gắng: |
# đọc lệnh rô bốt |
lmotor, rmotor = ustruct.unpack ('bb', radio.receive_bytes ()) |
# và khởi động động cơ nếu có bất kỳ lệnh nào nhận được |
set_speed (lmotor, rmotor) |
lái xe() |
exceptionTypeError: |
đi qua |
xem rawgigglebot_lidar_robot.py được lưu trữ với ❤ bởi GitHub
Bước 6: Lập trình điều khiển từ xa - Phần II
Những gì còn lại phải làm là lập trình vi BBC thứ hai: bit hoạt động như một điều khiển từ xa.
Điều khiển từ xa được sử dụng để hiển thị trên màn hình 5 x 5 pixel của nó khoảng cách tương đối với chướng ngại vật. Tối đa, sẽ có 10 pixel được bật.
Đồng thời, điều khiển từ xa cung cấp cho bạn khả năng điều khiển GiggleBot từ xa bằng cách nhấn 2 nút của nó: di chuyển về phía trước, sang trái và sang phải.
Lưu ý: Tập lệnh sau có thể thiếu khoảng trắng và điều này có vẻ là do một số vấn đề khi hiển thị GitHub Gists. Nhấp vào ý chính để đưa bạn đến trang GitHub nơi bạn có thể sao chép và dán mã.
GiggleBot dựa trên LIDAR được điều khiển từ xa - Mã từ xa
từ chế độ ngủ nhập microbit, hiển thị, button_a, button_b |
nhập khẩu |
nhập radio |
nhập toán |
radio.on () |
xoay_ bước = 10 |
xoay_span = 160 # độ |
xoay_step = xoay_span / xoay_ bước |
max_distance = 50 # tính bằng cm |
side_length_leds = 3 # được đo bằng # pixel |
radar = bytearray (bước quay) |
xar = bytearray (bước quay) |
yar = bytearray (bước quay) |
save_xar = bytearray (bước quay) |
save_yar = bytearray (bước quay) |
motor_speed = 50 |
whileTrue: |
status = radio.receive_bytes_into (radar) |
nếu trạng thái isnotNone: |
# display.clear () |
đối với c, val inenumerate (radar): |
nếu radar [c] <= max_distance: |
# tính toán tọa độ 2d của mỗi khoảng cách |
angle = xoay_ bước / (xoay_ bước -1) * xoay_bước * c |
góc + = (180- xoay_sải) /2.0 |
x_c = math.cos (angle * math.pi /180.0) * radar [c] |
y_c = math.sin (angle * math.pi /180.0) * radar [c] |
# chia tỷ lệ khoảng cách để vừa với màn hình 5x5 microbit |
x_c = x_c * (side_length_leds -1) / max_distance |
y_c = y_c * (side_length_leds +1) / max_distance |
# tọa độ định vị lại |
x_c + = (side_length_leds -1) |
y_c = (side_length_leds +1) - y_c |
# vòng tọa độ chính xác nơi các đèn LED được tìm thấy |
nếu x_c - math.floor (x_c) <0,5: |
x_c = math.floor (x_c) |
khác: |
x_c = math.ceil (x_c) |
nếu y_c - math.floor (y_c) <0,5: |
y_c = math.floor (y_c) |
khác: |
y_c = math.ceil (y_c) |
xar [c] = x_c |
yar [c] = y_c |
khác: |
xar [c] = 0 |
yar [c] = 0 |
display.clear () |
cho x, y inzip (xar, yar): |
display.set_pixel (x, y, 9) |
# print (list (zip (xar, yar, radar))) |
stateA = button_a.is_pressed () |
stateB = button_b.is_pressed () |
nếu stateA và stateB: |
radio.send_bytes (ustruct.pack ('bb', motor_speed, motor_speed)) |
print ('chuyển tiếp') |
if stateA and not stateB: |
radio.send_bytes (ustruct.pack ('bb', motor_speed, -motor_speed)) |
print ('left') |
ifnot stateA và stateB: |
radio.send_bytes (ustruct.pack ('bb', -motor_speed, motor_speed)) |
print ('right') |
ifnot stateA andnot stateB: |
radio.send_bytes (ustruct.pack ('bb', 0, 0)) |
print ('stop') |
xem rawgigglebot_lidar_remote.py được lưu trữ với ❤ bởi GitHub
Bước 7: Thông dịch màn hình từ xa
"loading =" lazy "điều khiển GiggleBot, bạn có các tùy chọn sau:
- Nhấn nút A và nút B để di chuyển GiggleBot về phía trước.
- Nhấn nút A để quay GiggleBot sang trái.
- Nhấn nút B để quay GiggleBot sang phải.
Để xem các chướng ngại vật gần nhất được phát hiện ở hướng nào, chỉ cần nhìn trên màn hình của điều khiển từ xa (micro: bit BBC từ xa mà bạn đang cầm). Bạn sẽ có thể điều khiển GiggleBot từ xa mà không cần nhìn vào nó.