• I






      
           

Научно-популярный образовательный ресурс для юных и начинающих радиолюбителей - Popular science educational resource for young and novice hams

Основы электричества, учебные материалы и опыт профессионалов - Basics of electricity, educational materials and professional experience

КОНКУРС
language
 
Поиск junradio

Радиодетали
ОК
Сервисы

Stock Images
Покупка - продажа
Фото и изображений


 
Выгодный обмен
электронных валют

Друзья JR



JUNIOR RADIO

 

Ровер на Raspberry Pi

 

Он просто едет прямо, пока не обнаружит объект, блокирующий его путь. В этот момент он поворачивает, пока не найдет свободный путь, а затем снова набирает полную скорость. Сердце Rover - это Raspberry Pi под управлением Window 10 IoT Core. Два двигателя приводятся в действие через двойной контроллер двигателя с Н-мостом, а ультразвуковой датчик расстояния используется для обнаружения препятствий. Rover может быть построен на любом ходовом шасси; Я выбрал недорогой, который можно легко купить в различных магазинах по всему миру.

Это проект для начинающих, и никаких продвинутых навыков в области программного или аппаратного обеспечения не требуется. За исключением предварительных условий, этот проект можно завершить за 1,5–2 часа, если у вас есть опыт работы с Arduino или аналогичными микроконтроллерами. Если это ваш самый первый проект в области электроники, я рекомендую вам потратить пару часов на просмотр нескольких вводных видеороликов об Arduino и Raspberry Pi, прежде чем начать.

Мне нужно сделать еще несколько улучшений:

Фоторезистор и светодиоды для фар.

Код для имитации сигнала ШИМ на цифровых контактах GPIO для регулировки скорости ровера.

Напечатайте на 3D-принтере корпус, чтобы скрыть всю электронику (можно также распечатать шасси).

Если вы попробуете какие-либо из этих улучшений или любые другие, которые придумаете, пожалуйста, оставьте комментарий и дайте мне знать, как это прошло.

Вот несколько онлайн-ресурсов, которые мне очень пригодились на протяжении всего проекта:

В Microsoft Windows Dev Center for IoT есть очень хорошее пошаговое руководство по началу работы с Windows 10 IoT Core.

Сообщение в блоге ModMyPi об использовании ультразвукового датчика расстояния с Raspberry Pi

Предварительные требования

Установите Windows 10 IoT Core на Raspberry Pi 2 (инструкции здесь ).

Загрузите Windows 10 и Visual Studio 2015 на свой компьютер (инструкции здесь ).

Разверните простое приложение Windows на Raspberry Pi, чтобы убедиться, что все работает (инструкции здесь ).

Примечание. На выполнение предварительных требований у вас уйдет 2-3 часа, но большую часть этого времени никто не оставляет без внимания.

 

Что вам понадобится

Части:

Raspberry Pi 2 и стандартные аксессуары: блок питания 5 В, 2 А, карта micro SD 8 ГБ класса 10, чехол и сетевой кабель

Перемычки - штекер / штекер и штекер / гнездо

Мини-макет

Комплект шасси автомобиля-робота, который включает в себя основание, двигатели и колеса.

Контроллер мотора L298N

Ультразвуковой датчик расстояния HC-SR04

Резисторы 1 кОм и 2,2 кОм

LM2577 DC-DC модуль регулируемого повышающего преобразователя мощности

Держатель для батареек 3 x 1,5 В AA

Дополнительно: 4 батарейных отсека AA по 1,5 В с переключателем включения / выключения и крышкой

Дополнительно: двусторонний скотч, липучка или резинка.

Инструменты:

Мультиметр

Отвертка с крестообразным шлицем # 1

плоскогубцы

Дополнительно: инструмент для зачистки проводов

Дополнительно: паяльник

Дополнительно: изолента

Raspberry Pi 2 Pin Out

Распиновка Raspberry Pi 2

 

На рынке есть несколько наборов роботов, которые будут работать с этим проектом. Вам просто понадобится комплект с двумя ведущими колесами и третьим для балансировки. Следуйте инструкциям, прилагаемым к комплекту шасси робота, чтобы собрать опорную плиту, двигатели и колеса.  Если у вас есть паяльник, припаяйте прилагаемые провода к моторам. Если у вас нет паяльника, вы можете просто согнуть оголенные концы проводов и прикрепить их к клеммам двигателя, а затем обернуть изолентой оба проводных / клеммных соединения на двигателе, чтобы закрепить их.

Совет: я пропускаю провода двигателя через отверстия в основании, чтобы они не зацепились за колеса.

Вместо держателя батареек 4 x AA, поставляемого с комплектом робота, я использовал другой держатель с крышкой и переключателем включения / выключения. Это необязательная замена, поскольку она вообще не меняет производительности или функциональности робота. Мне просто нравится удобство простого отключения питания двигателей с помощью переключателя, встроенного в держатель батареи. Поскольку я устанавливаю Raspberry Pi непосредственно на держателе батареи, немного сложнее извлечь батарею, чтобы отключить питание двигателей. Батарейный отсек можно установить на основание несколькими способами. Если в основании робота есть отверстия, которые совпадают с отверстиями в отсеке для батареи, и у вас есть винты подходящего размера, вы можете прикрутить корпус к основанию. В противном случае используйте липучку, двусторонний скотч или резинки. Я использовал резинки, и они работали нормально. Я установил корпус посередине основания, чтобы центр тяжести находился ближе к середине основания. Драйвер двигателя L298N позволяет вращать двигатели вперед И назад, используя несколько контактов GPIO. Сначала подключите два провода, которые вы закрепили к каждому двигателю на предыдущем шаге, к паре клемм двигателя - красный и черный провод от одного двигателя к «двигателю A» и красно-черный провод от другого двигателя к «двигателю B». . Полярность не важна, и вы всегда можете поменять порядок проводов позже, если ваш мотор начинает вращаться неправильно при развертывании кода. Затем подключите провода от держателя батареек 4 x AA к клеммам питания - красный к входу +12 В и черный к заземлению; 4 батарейки AA служат источником энергии для двигателей. Также обязательно проложите провод от клеммы заземления на L298N к контакту GND GPIO на Raspberry Pi (контакт 6).

 

 

L298N был разработан для поддержки одного источника питания как для двигателей, так и для микроконтроллера / компьютера. Полное напряжение от источника питания подается на двигатели. В то же время напряжение от источника питания преобразуется и регулируется до 5 В для микроконтроллера / компьютера и подается через клемму + 5 В на блоке питания. Однако в прошлых проектах, ориентированных на двигатели, я обнаружил слишком большую вариабельность мощности от источника питания 5 В L298N - то есть, когда двигатель глохнет, на выходе 5 В возникает большое падение напряжения (достаточно большое, чтобы сбросить Raspberry Pi). Вдобавок, даже если двигатели не работали, я измерил только 4,35 В на выходе от источника питания 5 В. Хотя на самом деле этого было достаточно для питания Raspberry Pi (хотя в спецификации Raspberry Pi указано, что оно ниже минимально необходимого напряжения), Я не хотел рисковать - гоняться за нестабильным поведением Raspberry Pi - неинтересно, особенно когда это может быть связано с очень незначительными изменениями напряжения. Поэтому для этого проекта я решил использовать два источника питания - один для двигателей и один для Raspberry Pi. Ранее на этом этапе мы подключили 4 батарейки AA к клемме +12 В для питания двигателей. На следующем этапе мы подключим 3 батарейки AA для питания Raspberry Pi. Но пока мы настраиваем L298N, мы продолжим и подключим питание от Raspberry Pi к L298N. Во-первых, снимите физическую перемычку, обозначенную на фотографии как «5v enable», с L298N. Это настраивает логику контроллера мотора на питание от Raspberry Pi через клемму + 5В на блоке питания, а не от источника питания, подключенного к клемме + 12В.

 

Важно: убедитесь, что вы сняли физическую перемычку включения 5 В на L298N. Если вы этого не сделаете, то L298N будет выводить переменную 4-5 В через терминал + 5 В, что может вызвать проблемы с производительностью Raspberry Pi.

К сожалению, у Raspberry Pi всего два контакта 5 В, а для этого проекта мне нужно три. Итак, я решил создать на своей макетной плате шину питания - использовать соединенный ряд на макетной плате для распределения мощности от Raspberry Pi. Чтобы создать шину питания, подключите перемычку «мама / папа» от контакта 2 Raspberry Pi (контакт 5 В) к любому неиспользуемому ряду на макетной плате (я обычно использую первый или последний ряд). Теперь 5 В от Raspberry Pi можно распределить по проекту, подключив его к той же строке на макете. Используйте перемычку «папа-вилка» для подключения клеммы + 5В на L298N к шине питания. Последние необходимые подключения - это подключить 4 контакта GPIO от Raspberry Pi к 4 входным контактам двигателя на L298N. IN1 и IN2 управляют направлением двигателя A, а IN3 и IN4 управляют направлением двигателя B. Оставьте перемычки на L298N, прикрепленные к двум наборам выводов включения двигателя - ENA и ENB - на своих местах. Мои связи следующие:

                IN1 -> GPIO 27 / физический 13

                IN2 -> GPIO 22 / физический 15

                IN3 -> GPIO 5 / физический 29

                IN4 -> GPIO 6 / физический 31

Теперь ваши соединения должны соответствовать этой диаграмме:

 

 

К сожалению, Raspberry Pi не поддерживает широкий диапазон входной мощности - 3 батарейки AA будет недостаточно, а 4 - слишком много - поэтому вам нужно использовать что-то между аккумулятором и Raspberry Pi для вывода стабильных 5 В. Чтобы попытаться облегчить нагрузку, где это возможно, я решил использовать 3 батарейки AA, а не 4. Повышающий преобразователь DC-DC может принимать входное напряжение 4,5 В от 3 батареек AA и может выводить 5 В для Raspberry Pi.

 

 

Либо припаяйте красный и черный провода от держателя батарей 3 x AA к контактным площадкам In + и In- соответственно на преобразователе постоянного тока, либо, для тех, у кого нет паяльника, зацепите концы проводов в контактные площадки с надписью «Power». вход от батареи на фото - и несколько раз оберните их изолентой. Вставьте три батареи в держатель и с помощью мутлиметра измерьте напряжение постоянного тока на преобразователе постоянного тока. Используйте встроенный потенциометр преобразователя, чтобы «набрать» выход 5 В.

Важно: убедитесь, что вы установили выход преобразователя постоянного тока на 5 В, прежде чем подключать его к Raspberry Pi. По умолчанию выходная мощность преобразователя обычно намного выше - достаточно, чтобы повредить Raspberry Pi.

Наконец, подключите выход преобразователя постоянного тока к Raspberry Pi. С помощью приспособлений для зачистки проводов я отрезал концы вилок от двух перемычек «папа / мама», снял немного изоляции, залудил оголенный провод и припаял их к Out + (красная перемычка) и Out- (черная перемычка). В качестве альтернативы скрутите оголенные жилы проводов, зацепите их за контактные площадки преобразователя постоянного тока и закрепите лентой. Подключите женские концы перемычек к контакту 5 В (красный провод к контакту 4) и контакту GND (черный провод к контакту 14) на Raspberry Pi.

 

 

HC-SR04 имеет 4 контакта - VCC, Trig, Echo и GND. Я установил датчик в миниатюрную макетную плату, чтобы закрепить его на роботе, а также упростить все необходимые соединения. VCC на датчике должен быть подключен к 5 В, поэтому используйте перемычку вилка / вилка, чтобы подключить VCC датчика расстояния к шине питания на макетной плате, которая была создана на шаге 2. 

 

 

Теперь, когда на датчик подано питание, давайте завершим подключения к трем другим контактам. Подключите перемычку «мама / папа» от контакта GPIO на Raspberry Pi к контакту Trig датчика - в моем проекте я использую GPIO 23 / физический контакт 16 Raspberry Pi. Сделайте то же самое для контакта Echo, но сначала установите сопротивление 1 кОм. резистор между выводом эхо-сигнала датчика и выводом GPIO Raspberry Pi - в моем проекте я подключил GPIO 24 / физический вывод 18 Raspberry Pi к резистору, а затем резистор к выводу эхо-сигнала датчика. Подключите второй резистор - 2,2 кОм - к перемычке от GPIO 24 и к контакту GND датчика. Подключите еще одну перемычку от контакта GND датчика к контакту заземления в Raspberry Pi, то есть контакту 20. (Датчик выдает 5 В по контакту эхо, но RPi любит только 3,3 В на контактах GPIO, поэтому нам нужно разделить напряжение).

 

 

Доступны различные варианты компоновки, и это, конечно, зависит от выбранного вами набора роботов. Для себя я поместил 4-элементный аккумуляторный блок в середину шасси, Raspberry Pi в его корпус поверх аккумуляторного блока и L298N сверху Raspberry Pi - все они были закреплены резиновыми лентами. Повышающий преобразователь DC-DC размещается на шасси рядом с 4-элементным аккумуляторным блоком и удерживается на месте с помощью резиновой ленты, удерживающей аккумуляторный блок, Raspberry Pi и контроллер двигателя. За этой стопкой находится трехэлементный аккумулятор.

 

 

Загрузите исходный код с GitHub и загрузите проект в Visual Studio. Основная часть программы проста - всего два цикла while. Пока контакты GPIO инициализированы правильно, первый цикл while перемещает робота вперед на неопределенное время. Внутри вложен второй цикл while, который просто поворачивает робота, чтобы изменить его курс, пока на его пути есть препятствие. Поскольку мы оставили перемычки на выводах включения двигателя на L298N, двигатели всегда включены. Вы можете двигать их вперед, останавливать и двигать назад с помощью входных штифтов (по 2 штифта на каждый двигатель). Если вы установите оба штифта в низкое положение, двигатель остановится. Если вы установите один штифт на высокий уровень, а другой на низкий, мотор вращается; измените настройку высокого / низкого уровня на обоих входных контактах, чтобы вращать двигатель в противоположном направлении.

Совет: если двигатель вращается в неправильном направлении, либо поменяйте местами настройки контактов в коде, либо поменяйте местами физические провода от двигателя в клеммной колодке.

Этот первоначальный проект требовал только движения вперед, поворота направо и остановки. Однако в коде вы также увидите подпрограммы для обратного и левого поворота. Эта функция пока закомментирована; Я оставил его, так как он скоро понадобится, когда я буду расширять свой проект.  Подпрограмма ObstacleDetected просто сравнивает расстояние робота до обнаруженного объекта и определяет, находится ли робот достаточно близко, чтобы гарантировать изменение курса. В спецификациях датчика расстояния указано, что он может измерять расстояния до нескольких сотен сантиметров. Тот факт, что стена с другой стороны комнаты находится на расстоянии 300 см, не означает, что она в настоящее время является препятствием и что роботу необходимо скорректировать курс. Поэтому я произвольно выбрал расстояние 30 см - любой объект менее 30 см перед роботом считается препятствием и, следовательно, его нужно избегать с помощью коррекции курса. 

Подпрограмма DistanceReading управляет датчиком расстояния для снятия показаний. Процесс чтения на расстоянии выглядит следующим образом:

Убедитесь, что спусковой крючок выключен, и дайте ему время, чтобы он успокоился.

Включите триггер на 10 микросекунд.

Подождите, пока не включится эхо

Как только загорится эхо, включите секундомер

Подождите, пока не выключится эхо

Как только эхо выключится, остановите секундомер.

Рассчитайте расстояние до объекта на основе записанного времени 

После того, как все работает идеально, вы можете настроить запуск программы при запуске, чтобы вам не приходилось запускать ее вручную; инструкции можно найти здесь о том , как установить программу в качестве приложения запуска.

 

Исходный код

Rover

 




Необходимо добавить материалы...
Результат опроса Результаты Все опросы нашего сайта Архив опросов
Всего голосовало: 373



          

Радио для всех© 2024