Проект придумывался для совместной работы с моими детьми: Николаем (12 лет) и Алексеем (8 лет). В попытке заинтересовать детей чем-то развивающим, купил для экспериментов платы Стрела (Arduino Leonardo) и RaspberryPi B+.
После некоторых мучений Стрелу удалось подружить с детской средой разработки Scratch. (Мучения заключались в модификации протокола связи в Scratch 1.4 (сделан на Squeak Smalltalk). На стороне Arduino просто С, так что всё намного проще.)
Мы сделали пару интересных проектов, например, радар из сервопривода и ультразвукового датчика расстояния. С младшим мы написали программу на Скретче для вращения сенсора в секторе 180 градусов, со старшим получали по сети на его компьютере данные о расстоянии до препятствия и текущий угол. Затем рисовали на круговой диаграмме. Делали на PascalABC.NET, они его в школе используют.
Но, конечно, всё это стало не интересно когда дети увидели в Интернете многочисленных подвижных роботов на базе Arduino.
Пока я придумывал как-бы к этому подступиться без особых капитальных затрат, у нас сгорел пылесос 🙂 Ну, я его разобрал, там внутри какая-то ерунда (с). Накрылся двигатель, из которого он вообщем-то и состоит. После демонтажа двигателя остался отличный, переживший годы жестокой эксплуатации корпус, с двумя колёсами сзади и одним поворотным роликом впереди. Так мы получили платформу для нашего прототипа. И вот что вышло:
Управление
Я использовал обе платы. Стрела отвечает за базовые функции “реального времени”. Синхронное управление двигателями, реакция на датчики.
Raspberry отвечает за функции “высокого уровня”. Подключение по Wi-Fi в домашнюю сеть, сервер “Remote Sensors Protocol” для интеграции со Scratch по TCP/IP, небольшой WWW сервер для альтернативного канала управления, видео сервер. Между собой платы общаются по последовательному порту USB, с помощью простенького самодельного текстового протокола. Для Raspberry всё написано на Python’е, ну кроме видео сервера, он готовый.
Платформа
Все печатные платы прикручены к общей панели. Под ней расположена свинцовая аккумуляторная батарея на 12В от ИБП, и два серво мотора постоянного вращения.
Моторы закреплены с помощью изогнутых деталей от детского конструктора (вот где пригодился бы 3D принтер!). Вращение на колёса передаётся через пластиковые “звёздочки”, которые шли в комплекте с мотором. Для них в колёсах пылесоса были сделаны пропилы. Серво двигатели были выбраны из-за большого крутящего момента, тогда как большая скорость не нужна, диаметра колёс достаточно большой.
Питание
Напряжение от 12В батареи подаётся параллельно на три устройства. На плату Стрела, которая имеет собственный стабилизатор напряжения. На DC-DC конвертер для преобразования в 5В для питания Raspberry. И на DC-DC конвертер в 7В для подачи на двигатели. В принципе, двигатели и Raspberry можно было запитать от одного конвертера, но я опасался просадки напряжения при старте или из-за блокировки двигателей и, как следствие, перезагрузки Raspberry. Получилась схема, устойчивая к падению напряжения на батарее до 7В.
Кнопка включения питания взята от самого пылесоса. Замечательная вещь, проработала много лет, коммутируя килловатную нагрузку, и хоть бы что.
Дополнительные сенсоры
Стрела имеет множество цифровых и аналоговых вводов/выводов, а также четыре кнопки и четыре светодиода на борту. Так что потенциал для развития большой. Пока я только подключил ультразвуковой датчик к аналоговому входу. Он позволяет роботу останавливаться перед препятствием, не врезаясь в него.
RaspberryPi B+ имеет четыре порта USB. Кроме Стрелы и Wi-Fi адаптера, я подключил веб камеру и мышку.
Камеру использует стандартный пакет motion, благодаря нему изображение с камеры можно посмотреть в обыкновенном броузере с любого компьютера в квартире. К сожалению, присутствует приличная задержка и Raspberry этот сервис грузит примерно на 25%. Но всё равно дистанционно управлять роботом получая с него картинку реально круто 🙂
Мышка стала попыткой создать датчик движения. Оказалось что в Python’е достаточно просто считывать координаты с USB мышки, вращение колёсика и нажатия кнопок. План был составлять карту передвижений робота и рисовать её на удалённом компьютере.
К сожалению, не могу сказать, что ни одна мышь не пострадала в этом опыте. Но надпись Microsoft на мышке существенно облегчила мои моральные страдания при сверлении дырки и отламывании кнопок 🙂
В принципе идея работает, но обнаружились две проблемы:
- для корректной работы сенсора мыши нужно, чтобы он был близко к поверхности. Перефокусировать сенсор на большее расстояние не вышло. Под рукой у меня нашлась всего пара линз, и они не подошли. В качестве временного решения я собрал узел для подвижного крепления мыши. Он позволяет мыши скользить по полу и подниматься вверх. Так что робот может наезжать на небольшие препятствия типа ковра или порожка.
- для полного определения положения робота на плоскости нужно знать две точки (=мышки). С помощью одной, даже расположенной впереди, не получается точно построить траекторию. При повороте колёса пробуксовывают, и нельзя точно определить точку вокруг которой поворачивает корпус даже на ровном месте. Ну и геометрия тут уже получается сложновата для 6-го класса.
Leave a Reply
You must be logged in to post a comment.