Съдържание:
- Стъпка 1: Необходими компоненти
- Стъпка 2: Сглобяване на робота
- Стъпка 3: Създайте свой собствен лабиринт - по избор
- Стъпка 4: Настройване на околната среда
- Стъпка 5: Програмиране на GiggleBot - Част I
- Стъпка 6: Програмиране на дистанционното - Част II
- Стъпка 7: Тълкуване на отдалечения екран
Видео: Направете робот, ръководен от Lidar, с GiggleBot: 8 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:52
В този урок правим GiggleBot да се справи с трудностите на лабиринта.
Монтираме серво на GiggleBot, към което прикрепяме сензор за разстояние. Докато работи, сервото ще се върти напред -назад, така че сензорът за разстояние може да измери разстоянието до всяко препятствие. Това работи много като сензор LIDAR, който обикновено е много по -скъп.
В същото време GiggleBot изпраща тези данни до отдалечен микробит на BBC, който показва върху своята матрица 5 на 5 светодиоди относителното си положение спрямо препятствията.
Вашата работа е да можете да навигирате в GiggleBot само като гледате какво е показано на другия BBC micro: bit. За да управлявате GiggleBot, се използват бутоните на отдалечения BBC micro: bit.
Това звучи забавно! Нека да се заемем с това, нали?
Стъпка 1: Необходими компоненти
Ще ни трябва:
- A GiggleBot.
- Батерия за BBC micro: bit. Той идва заедно с BBC micro: bit в опаковката си.
- x3 AA батерии за GiggleBot.
- Кабел Grove за свързване на сензора за разстояние с GiggleBot.
- Серво комплект от DexterIndustries.
- x3 BBC micro: битове. Един за GiggleBot и един за управление на робота от далеч.
- Сензор за разстояние от DexterIndustries.
Вземете робота GiggleBot за BBC micro: bit тук!
Стъпка 2: Сглобяване на робота
За да направим GiggleBot готов за програмиране, трябва да го сглобим, въпреки че не е нужно много да се прави.
Поставете 3 -те батерии AA в отделението отдолу на GiggleBot.
Сглобете серво пакета. Към въртящото се рамо на серво, използвайте последния му отвор, за да фиксирате серво към предните конектори на GiggleBot. Можете да използвате винт и/или някакъв проводник, за да го направите по -стабилен на мястото си. Или можете да го залепите горещо към дъската. В моя случай използвах винт и къса жица, за да завържа серво рамото към платката GiggleBot.
Когато монтирате серво рамото на серво, уверете се, че серво е вече настроено на позиция 80. Можете да направите това, като се обадите на gigglebot.set_servo (gigglebot. RIGHT, 80). Можете да прочетете повече за това тук.
След това поставете сензора за разстояние от предната страна на серво пакета и го фиксирайте както в горния пример.
И накрая, свържете сензора за разстояние с кабел Grove към всеки от 2 -те I2C порта и серво мотора към десния порт, разположен на GiggleBot - десният порт е споменат върху него.
Стъпка 3: Създайте свой собствен лабиринт - по избор
В този случай съм използвал куп кутии, за да създам затворена писта, подобна на тази на NASCAR.
На тази стъпка можете да станете наистина креативни и да го направите толкова изкривен, колкото искате, или да го направите супер дълъг, защото наистина зависи от вас.
Или ако изобщо не искате песен, можете да поставите GiggleBot в кухня или хол например - това би трябвало да е достатъчно добро, защото има много стени и препятствия, които все още трябва да избягвате.
Стъпка 4: Настройване на околната среда
За да можете да програмирате BBC micro: bit в MicroPython, трябва да настроите редактор за него (Mu Editor) и да зададете GiggleBot MicroPython Runtime като време за изпълнение. За целта трябва да следвате инструкциите на тази страница. Към този момент се използва версия v0.4.0 на времето за изпълнение.
Стъпка 5: Програмиране на GiggleBot - Част I
Първо, нека настроим скрипта на GiggleBot. Този скрипт ще накара GiggleBot да завърти своя серво мотор на 160 градуса (80 градуса във всяка посока), като в същото време вземе 10 показания от сензора за разстояние на ход.
Когато е включен, GiggleBot ще стои в готовност, докато не получи команда от дистанционното управление. Може да има само 3 команди: придвижване напред, наляво или надясно.
Забележка: В следния скрипт може да липсват интервали и това изглежда се дължи на някакъв проблем при показването на GitHub Gists. Щракнете върху същността, за да ви отведе до страницата на GitHub, където можете да копирате и поставите кода.
GiggleBot, базиран на LIDAR, с дистанционно управление
от gigglebot import* |
от distance_sensor import DistanceSensor |
от микробитов импорт сън |
от utime import ticks_us, sleep_us |
ustruct за импортиране |
внос на радио |
# спрете робота, ако вече се движи |
Спри се() |
# активирайте радиото |
radio.on () |
# обект на сензор за разстояние |
ds = DistanceSensor () |
ds.start_continuous () |
rotate_time = 0.7# измерено в секунди |
rotate_span = 160# измерено в градуси |
rotate_steps = 10 |
компенсация за режийни разходи = 1.05# дефинирано в проценти |
time_per_step = 10 ** 6* rotate_time / (rotate_steps* overhead_compensation) |
last_read_time = 0 |
радар = байтов ред (завъртане на стъпки) |
servo_rotate_direction = 0# 0 за изкачване нагоре (0-> 160) и 1 в противен случай |
radar_index = 0 |
set_servo (НАДЯСНО, 0) |
whileTrue: |
# четене от радара |
ако ticks_us () - last_read_time> time_per_step: |
# отчитане от сензора за разстояние |
радар [radar_index] = int (ds.read_range_continuous () /10) |
last_read_time = ticks_us () |
печат (radar_index) |
# направете логиката за завъртане на серво от ляво на дясно |
ако radar_index == rotate_steps -1 и servo_rotate_direction == 0: |
set_servo (НАДЯСНО, 0) |
servo_rotate_direction = 1 |
elif radar_index == 0и servo_rotate_direction == 1: |
set_servo (RIGHT, rotate_span) |
servo_rotate_direction = 0 |
иначе: |
radar_index += 1 ако servo_rotate_direction == 0else-1 |
# и изпратете стойностите на радара |
radio.send_bytes (радар) |
опитвам: |
# четете команди на робота |
lmotor, rmotor = ustruct.unpack ('bb', radio.receive_bytes ()) |
# и задействайте двигателите, ако има получени команди |
set_speed (lmotor, rmotor) |
задвижване () |
с изключение наTypeError: |
пропуск |
вижте rawgigglebot_lidar_robot.py, хоствано с ❤ от GitHub
Стъпка 6: Програмиране на дистанционното - Част II
Остава да се направи програмирането на втория BBC micro: bit, който действа като дистанционно.
Дистанционното се използва за показване на неговия екран с размери 5 на 5 пиксела относителното разстояние до препятствията. Най -много ще има включени 10 пиксела.
В същото време дистанционното ви дава възможности за дистанционно управление на GiggleBot чрез натискане на неговите 2 бутона: придвижете се напред, наляво и надясно.
Забележка: В следния скрипт може да липсват интервали и това изглежда се дължи на някакъв проблем при показването на GitHub Gists. Щракнете върху същността, за да ви отведе до страницата на GitHub, където можете да копирате и поставите кода.
Дистанционно управляван LIDAR базиран GiggleBot - Код за дистанционно управление
от microbit импортиране на сън, дисплей, button_a, button_b |
ustruct за импортиране |
внос на радио |
внос на математика |
radio.on () |
завъртане на стъпки = 10 |
rotate_span = 160# в градуси |
rotate_step = завъртане_span / rotate_steps |
max_distance = 50# в сантиметри |
side_length_leds = 3 # измерено в # пиксела |
радар = байтов ред (завъртане на стъпки) |
xar = байтов ред (завъртане на стъпки) |
yar = bytearray (rotate_steps) |
записан_xar = байтов масив (завъртане на стъпки) |
записан_годишен = байтов масив (завъртане на стъпки) |
скорост на двигателя = 50 |
whileTrue: |
status = radio.receive_bytes_into (радар) |
ако състоянието не е Няма: |
# display.clear () |
за c, val безброй (радар): |
ако радар [c] <= max_distance: |
# изчислете 2d координати на всяко разстояние |
ъгъл = завъртане на стъпки / (завъртане на стъпки -1) * завъртане на стъпка * c |
ъгъл += (180- завъртане_размах) /2.0 |
x_c = math.cos (ъгъл * math.pi /180.0) * радар [c] |
y_c = math.sin (ъгъл * math.pi /180.0) * радар [c] |
# мащабирайте разстоянията, за да се поберат на 5x5 микробитов дисплей |
x_c = x_c * (side_length_leds -1) / max_distance |
y_c = y_c * (side_length_leds +1) / max_distance |
# координати за преместване |
x_c += (side_length_leds -1) |
y_c = (side_length_leds +1) - y_c |
# кръгли координати, точно където се намират светодиодите |
ако x_c - математически етаж (x_c) <0,5: |
x_c = математически етаж (x_c) |
иначе: |
x_c = math.ceil (x_c) |
ако y_c - математически етаж (y_c) <0,5: |
y_c = math.floor (y_c) |
иначе: |
y_c = math.ceil (y_c) |
xar [c] = x_c |
yar [c] = y_c |
иначе: |
xar [c] = 0 |
yar [c] = 0 |
display.clear () |
за x, y inzip (xar, yar): |
display.set_pixel (x, y, 9) |
# печат (списък (zip (xar, yar, радар))) |
stateA = button_a.is_pressed () |
stateB = button_b.is_pressed () |
ако stateA и stateB: |
radio.send_bytes (ustruct.pack ('bb', motor_speed, motor_speed)) |
print ('напред') |
ако stateA, а не stateB: |
radio.send_bytes (ustruct.pack ('bb', motor_speed, -motor_speed)) |
печат ('вляво') |
ако не е състояние A и състояние B: |
radio.send_bytes (ustruct.pack ('bb', -motor_speed, motor_speed)) |
печат ('вдясно') |
ifnot stateA andnot stateB: |
radio.send_bytes (ustruct.pack ('bb', 0, 0)) |
печат ('стоп') |
вижте rawgigglebot_lidar_remote.py, хоствано с ❤ от GitHub
Стъпка 7: Тълкуване на отдалечения екран
"loading =" lazy "контролира GiggleBot, имате следните опции:
- Натиснете бутон A и бутон B, за да преместите GiggleBot напред.
- Натиснете бутон А, за да завъртите GiggleBot наляво.
- Натиснете бутон B, за да завъртите GiggleBot надясно.
За да видите в коя посока са открити най -близките препятствия, просто погледнете екрана на дистанционното управление (дистанционното BBC micro: bit, което държите). Трябва да можете да контролирате GiggleBot от далеч, без да го гледате.
Препоръчано:
Направете робот за хранене с Arduino Nano - Златен винт: 5 стъпки
Направете робот за хранене с Arduino Nano | Gold Screw: Идеята за този проект идва от дъщеря ми. Тя иска робот и този робот може да отвори устата си, за да може да слага храна в устата си. И така, потърсих на закрито неща, които бяха налични: картон, arduino nano, ултразвуков сензор, серво мотор
Направете танцуващ робот без 3D принтер и Arduino/#smartcreativity: 11 стъпки (със снимки)
Направете танцуващ робот без 3D принтер и Arduino/#smartcreativity: Здравейте приятели, в този урок ще ви покажа как да си направите танцуващ робот у дома без 3D принтер и без Arduino. Този робот е в състояние да танцува, да балансира автоматично, да произвежда музика и да ходи. И дизайнът на Robot също изглежда толкова готин
Балансиращ робот / робот на 3 колела / STEM робот: 8 стъпки
Балансиращ робот / робот на 3 колела / STEM робот: Създадохме комбиниран робот за балансиране и три колела за учебни цели в училища и след училищни образователни програми. Роботът е базиран на Arduino Uno, персонализиран щит (предоставени са всички подробности за конструкцията), Li Ion батерия (всички конструкции
[Робот Arduino] Как да си направим робот за улавяне на движение - Робот Thumbs - Серво мотор - Изходен код: 26 стъпки (със снимки)
[Робот Arduino] Как да си направим робот за улавяне на движение | Робот Thumbs | Серво мотор | Изходен код: Thumbs Robot. Използва се потенциометър на серво мотор MG90S. Много е забавно и лесно! Кодът е много прост. Има само около 30 реда. Изглежда като заснемане на движение. Моля, оставете всеки въпрос или обратна връзка! [Инструкция] Изходен код https: //github.c
Изградете много малък робот: Направете най -малкия колесен робот в света с грайфер: 9 стъпки (със снимки)
Изградете много малък робот: Направете най -малкия колесен робот в света с грайфер. Постройте робот от 1/20 кубически инча с грайфер, който може да вдига и премества малки обекти. Управлява се от микроконтролер Picaxe. В този момент считам, че това може да е най -малкият колесен робот в света с грайфер. Това без съмнение ще