Lafvin smart robot car kit инструкция 4wd

Raspberry Pi HDMI Display

5 inch HDMI Display-B

Download Tutorials

7 inch HDMI Display-C

Download Tutorials

7inch HDMI Display-H

Download Tutorials

10.1inch HDMI Display-H

Download Tutorials

Raspberry Pi GPIO Display

2.4 inch RPi Display

Download Tutorials

2.8 inch RPi Display

Download Tutorials

3.2 inch RPi Display

Download Tutorials

3.5 inch RPi Display

Download Tutorials

Starter Learning Kit

LA036 Super Starter Kit for Arduino UNO(CH340)

Download Tutorials

LA037 Basic Starter Kit for Arduino UNO(CH340)

Download Tutorials

LA009 Ultimate Starter Kit for UNO R3

Download Tutorials

LA008 Ultimate Starter Kit for Mega 2560

Download Tutorials

LA010 Super Learning Kit for UNO R3

Download Tutorials

LA026 Super Learning Kit for UNO R3(CH340)

Download Tutorials

LA023 Super Starter Kit for Raspberry Pi

Download Tutorials

LA002 Basic Starter Kit UNO R3 Project

Download Tutorials

LA007 Power Supply Learning Kit UNO R3 Project

Download Tutorials

LA012 Basic Learning Kit

Download Tutorials

LA019  37 Sensor Kit

Download Tutorials

H001 Hosyond Super Starter Kit

Download Tutorials

LA043 ESP32 Basic Starter Kit

Download Tutorials

LA045 Raspberry Pi Pico Starter Kit

Download Tutorials

Arduino Robot Kit

LA015 Multi-Functional Smart Car Kit

Download Tutorials

LA016 4WD Smart Robot Car Kit V1

Download Tutorials

LA018 2WD Smart Robot Car Kit V1

Download Tutorials

LA038 4WD Smart Robot Car Kit V2

Download Tutorials

LA039 2WD Smart Robot Car Kit V2

Download Tutorials

LA040 4WD Robot Arm Smart Car

Download Tutorials

LA033 Smart Robot Tank Kit

Download Tutorials

LA035 Smart Home Kit

Download Tutorials

LA027 4DOF Smart Robot Arm Kit

Download Tutorials

LA028 4DOF Panda Robot Kit

Download Tutorials

LA013 iBot Programming Education Robot Car

Download Tutorials

LA029 Micro:bit Smart Robot Car

Download Tutorials

LA017 Smart Turtle Robot Car Kit

Download Tutorials

H003 2WD Smart Robot Car Kit 

Download Tutorials

H004 4WD Smart Robot Car Kit 

Download Tutorials

LA041 ESP32 Cam Robot Car

Download Tutorials

LA042 Solar Tracking Kit

Download Tutorials

LA044 WiFi Camera Smart Robot Car

Download Tutorials

Набор для сборки Smart Car Kit позволит вам собрать полноприводного (4WD) колесного робота на базе Arduino-совместимого контроллера. Управление роботом можно организовать с помощью ИК-сенсора или с использованием Bluetooth модуля. С помощью функциональных модулей, входящих в набор, робот может работать в режиме следования по линии, режиме избегания препятствий, режиме охранной сигнализации и др.

Для сборки вам потребуется только самый простой ручной инструмент, паяльник и немного воображения.

Состав набора:

1) Платформа-основа — 2 шт. (верх, низ);

2) Колесо для робота 66 мм — 4 шт.

3) Мотор-редуктор для робота — 4 шт.

4) Контроллер UNO R3 — 1 шт.

5) Плата расширения Sensor Shield V5.0 — 1 шт.

6) Кабель USB 2.0 (A-B) — 1 шт.

7) Драйвер двигателя L298N — 1 шт.

8) Батарейный отсек 6*АА без разъема — 1 шт.

9) Отсек для батарейки «Крона» 9В с разъемом питания — 1 шт.

10) ИК пульт управления (21 кнопка) с батарейкой — 1 шт.

11) Модуль инфракрасного датчика VS1838B — 1 шт.

12) Breadboard mini — 1 шт.

13) Сервопривод SG90 (180 град) или ES08MAII — 1 шт.

14) Кронштейн для сервопривода SG90 и HC-SR04 с крепежом — 1 шт.

15) Датчик линии TCRT5000 4 канала — 2 шт.

16) Bluetooth модуль HC-06 — 1 шт.

17) Ультразвуковой датчик измерения расстояния HC-SR04 — 1 шт.

18) Шлейф из 40 проводов П-П 20см — 1 шт.

19) Шлейф из 40 проводов П-М 20см — 1 шт.

20) Крепления для мотор-редукторов на платформе — 8 шт.

21) Крепеж (стойки М-М M3*30 — 6 шт., винты с потайной головкой M3*30 — 8 шт., винты М3*5 — 12 шт., винты М3*10 — 8 шт., винты М3*8 c потайной головкой -2 шт., винт 2*12 — 4 шт, гайки М3 — 18 шт., гайка М2 — 4 шт.)

Внешний вид деталей может отличаться от представленного на фото.

Пример скетча для колесного робота Smart Car Kit — в данном скетче реализована возможность ручного управления роботом через ИК-канал. А также есть автоматический режим, в котором робот «гуляет» сам, избегая столкновений с препятствиями.

Бумажной инструкции по сборке в комплекте нет.

Инструкция по сборке набора Smart Car.

Смотреть Видео-инструкцию

Инструкция по установке и настройке Arduino_IDE

Для работы робота не забудьте приобрести 4 батарейки АА и 1 батарейку «Крона».

Обратите внимание! Набор представляет собой конструктор и предполагает наличие у пользователя базовых навыков конструирования, программирования и отладки.

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

Схема сборки колесного робота

  • Роман 17.04.2019 20:26

    хороший магазин качественные товары

    Оценка:

Время на прочтение
12 мин

Количество просмотров 63K

Вы понимаете, — втолковывал редактор, — это должно быть занимательно, свежо, полно интересных приключений… Так, чтобы читатель не мог оторваться.
И.Ильф, Е.Петров «Как создавался Робинзон».

Начинать работу с Arduino, как и с любой другой платформой программной или аппаратной, всегда интереснее с какого-нибудь реального проекта. Программисты при этом пишут код выводящий «Hello, world», ардуинисты моргают светодиодом. И все радуются как дети.

Я же решил начать с продвинутого проекта, в том числе с тайной надеждой оторвать молодое поколение от Counter-Strike (не получилось).

Как можно догадаться из названия RoboCar4W, первым проектом стал робот-машина о четырех колесах. Начиная работу я уже имел опыт программирования, умел когда-то давно паять, но совершенно не знал даже распиновки Arduino и документацию совершенно не читал. Все премудрости изучал по ходу пьесы и Гугл в помощь.

Поскольку сам проект принципиально не нов, подобных описаний в сети достаточно, все компоненты известны, то никаких неожиданностей не предполагалось. Поэтому задумка была сформулирована в самых общих чертах и главной целью являлось погружение в «мир вещей» с помощью Arduino, как платформы для быстрого прототипирования. В этом опусе возможно кто-то узнает себя в самом начале пути.

Всё «железо» приобреталось на ebay, и по своему опыту хочу сказать, что проще приобрести сразу стартер кит (ищите по словам Arduino Starter Kit), а не собирать подетально. Да и приедет все сразу вместе. Решено было не мелочиться, купить нормальное шасси, нормальные колеса, нормальные моторы, чтоб было «дорохобохато».

Главный секрет успешных покупок на eBay — покупать у продавцов с высоким рейтингом и при этом внимательно читать описание товара. Об этом есть много статей в интернете.

Какую плату семейства Arduino выбрать?

Я взял Arduino UNO, под нее много проектов с описаниями. Но сейчас бы взял Arduino Mega 2560, у нее больше цифровых и аналогов выводов и полная совместимость по проектам с UNO.

Общее описание проекта

В мире разработки программного обеспечения это называют еще «требования к системе».

Задумка проекта была следующей. Первый вариант машины-робота под названием RoboCar4W должен выполнять незамысловатые действия:

  • двигаться вперед, назад, выполнять повороты
  • измерять расстояние до препятствий
  • уметь автоматически объезжать препятствия находящиеся впереди.

Второй вариант машины должен управляться вручную по bluetooth с Android телефона.

Чтобы вам лучше работалось вот весь финальный проект RoboCar4W в сборе (тут без блютуза).

Arduino. RoboCar4W

Вот видео ходовых испытаний.

На первом видео RoboCar4W ездит в автоматическом режиме с объездом препятствий на двух разных версиях «прошивки», т.е. скетча, поэтому, если кто самый зоркий и заметил, что поведение робота в разных эпизодах немного отличается.

Робот-машина RoboCar4W

На втором видео RoboCar4W передвигается при помощи команд, передаваемых «водителем» по Bluetooth с мобильного телефона под Android. На телефоне установлена программа «Bluetooth RC Car». Причем, если близко впереди оказывается препятствие, то робот останавливается, т.е. протаранить что-нибудь не получится (однако есть «секретная» кнопка, которая отключает безопасный режим).

Робот-машина RoboCar4W

На третьем видео RoboCar4W показывает заранее запрограммированную демо-программу движения с поворотами. Демо-программа активируется по команде с того же мобильного телефона под Android. Робот просто едет некоторое время и делает повороты.

Робот-машина RoboCar4W

Алгоритм управления движением

Ошибочно называть наш способ «алгоритм объезда препятствий» или «поиском пути». Это отдельные математические дисциплины, чистая математика. Если вам очень-очень сильно нравится математика, то погуглите указанные словосочетания, чтивом на полгода будете обеспечены.

Пока же нас интересуют вещи гораздо проще. Поэтому мы назовем это просто — алгоритм управления движением 4-х колёсного робота. Разумеется речь идет об автоматическом управлении без участия человека.

Вот этот простой алгоритм записанный словами, для более сложных алгоритмов придется (хочется или нет) составлять блок-схемы.

Сейчас одновременно смотрите в исходник скетча RoboCar4W-1.ino.

  1. Измеряем расстояние до препятствия впереди.
  2. Если это измеренное расстояние меньше значения DST_TRH_BACK (сокращение от distance threshold), то останавливаемся и едем задним ходом одновременно поворачивая. Направление поворота выбираем так: если ранее уже поворачивали влево, то поворачиваем вправо и наоборот.
  3. Если измеренное расстояние больше чем DST_TRH_BACK, но меньше чем DST_TRH_TURN, то просто поворачиваем. Направление поворота выбираем случайно.
  4. Если до препятствия далеко, то просто едем вперед.
  5. Повторяем все сначала.

Чем хорошо, что у нас 4 колеса и все ведущие? Мы можем выполнить (запрограммировать) несколько типов поворотов:

  • Плавный поворот. Все колеса вращаются, но колеса с одной стороны вращаются быстрее.
  • Резкий поворот. Колеса вращаются только с одной стороны.
  • Разворот на месте. Как трактор, колеса одной стороны вращаются назад, а другой — вперед.

Во втором варианте программы, при управлении с Android-телефона безопасный режим, когда робот старается не допускать лобовых столкновений, может быть отключен, если в программе два раза нажать кнопку
Кнопка

и включен обратно однократным её нажатием.

Важное примечание. Вся логика находится под управлением Arduino. Android здесь выступает просто как игровой пульт (без мозгов) от консоли, его задача — тупо передавать нажатия кнопок (т.е. команды) посредством Bluetooth в Arduino RoboCar4W.

Компоненты

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

Нет худа без добра, зато скетч стал немного проще.

На будущее, сервопривод покупайте самый простой и дешевый, особая мощность, скорость и точность поворота на заданный угол не нужны, а вывести серво из строя довольно легко, как оказалось. Вполне подойдет SG90 стоимостью $2.

Итак составные части проекта RoboCar4W, описание на английском дается для облегчения поиска на ebay и ему подобных:

  • Arduino UNO R3
  • Готовое шасси 4 Wheel Drive Mobile Robot Platform Smart Car Chassis Arduino Compatible
  • Моторы постоянного тока (DC) с вращением в обе стороны — 4 шт.
  • Колеса — 4 шт.
  • Плата для управления 4-мя DC моторами Motor Drive Shield L293D
  • Ультразвуковой измеритель расстояния HC-SR04 Ultrasonic Module Distance Measuring Sensor
  • Аккумуляторы Ni-MH 1.2 В — 8 шт.
  • Пластиковый бокс держатель для батареек, Battery Box holder 4 AA Batteries — 2 шт.
  • Аккумулятор типа «Крона» 8.4 В — 1 шт.
  • Опционально тумблер — выключатель питания

Шасси, DC моторы и колеса приобретались сразу в комплекте и даже с инструкцией по сборке.

Распиновка

Аналоговые входы могут использоваться как цифровые выводы портов ввода/вывода. Выводы Arduino, соответствующие аналоговым входам, имеют номера от 14 до 19. Это относится только к выводам Arduino, а не к физическим номерам выводов микроконтроллера Atmega.

Рисовать не обязательно, можно просто свести все в таблицу. У меня получилось так.

Распиновка

Пины D4, D7, D8, D12 будут заняты, если используются любые DC моторы или шаговые.

Пины D9 (Servo #1 control), D10 (Servo #2 control) будут заняты, только если используются сервомоторы.

Сама по себе плата для управления моторами Motor Drive Shield L293D пины Arduino не занимает.

Пины питания 3.3 В, 5 В и «земля» дублируются на Motor Drive Shield в достаточном количестве. Поэтому об их нехватке не стоит беспокоиться.

Если все-таки хотите красиво нарисовать, то бесплатная программа Fritzing вам в помощь.

Питание

Это второй очень важный момент. От питания зависит очень многое. Например, серво-мотор при повороте вала на заданный угол начинает потреблять большой ток. При этом если серво подключен по питанию на 5 В Arduino, то происходит «просадка» по напряжению и вся остальная схема начинает глючить, а Arduino даже может перезагружаться при этом.

В любом случае, если в поделке используете моторы, то Motor Drive Shield необходим (или подобная ему схема).

Итак, имеем 4 мотора постоянного тока (DC), сервопривод, саму плату Arduino и несколько датчиков. Моторы самые прожорливые, а вот датчики могут успешно запитываться с разъемов самой платы Arduino, поэтому с ними все просто. Для удобства я свел всё хозяйство в одну таблицу.

Напряжение рекомендованное или типовое. Потребляемый ток Максимальное напряжение Чем планируется питать Примечания
Плата Arduino UNO R3 7 — 12V, 200mA (среднее) 6 — 20 «Крона 9V» Li-ion 650mAh, 8.4V Разъем с плюсом в центре
Сервомотор MG-995 5—6 V, 0.1 — 0.3A (пиковое) 4.8 — 7.2 Аккумуляторы (5) шт. Ni-Mh 1.2V = 6V Питание только от отдельного источника. Если запитать вместе с Arduino, то будет глючить всё. Напряжения Ni-Mh аккумуляторов 4шт. * 1.2В = 4.8V не хватает. Некоторые утверждают, что данную серву не стоит использовать на 6 вольтах только 4,8
DC двигатели (4 шт.) 6 — 8V, ток от 70mA до 250mA 3 — 12 аккумуляторы (5+3) шт. Ni-Mh 1.2V = 9.6V Вы не сможете нормально запустить двигатели от 9В батареи, так что даже не тратьте время (и батареи)!
Motor Drive Shield L293D не требуется 4.5 — 36 не требуется
Модуль Bluetooth HC-0506 3.3 V, 50 mA 1.8—3.6 С пина 3.3V платы Arduino
Ультразвуковой измеритель расстояния HC-SR04 5 V, 2 mA 5 С пина 5V платы Arduino

DC/DC преобразователя напряжения у меня не было в наличии. Крона 9V оказался не очень хорошим источником питания, просто у меня он уже был.

А вот от использования Li-ion аккумуляторов большой емкости я отказался. Во-первых, из-за высокой стоимости, во-вторых в китайских интернет-шопах легко нарваться на подделку. Точнее не «легко», а «всегда». Кроме этого Li-ion требует особого обращения, и он не безопасен.

Итак, как видим из таблицы, нам требуется 3 независимых источника питания:

  • Для платы Arduino и датчиков.
  • Для сервомотора.
  • Для 4-х DC моторов.

Где ж столько набрать? Саму плату Arduino в любом случае надо питать от отдельного источника, т.к. при «проседании» напряжения, например от включения моторов, плата может перезагружаться или просто глючить. Здесь применяем аккумулятор форм-фактора «Крона 9В», причем разъем который будет подключаться к Arduino должен быть с «плюсом в центре».

Для сервомотора и 4-х DC моторов можно обойтись одним источником питания. Проблема только в том, что сервомотор рассчитан на напряжение 5-6В (максимум 7.2В) и ток 100 — 300мA (пиковое), а DC моторам требуется 6 — 8В (максимум 12В) и ток 250мА.

Для решения проблемы существуют DC-DC преобразователи, но у меня таких не оказалось. В итоге я применил свою «фирменную» схему соединения (безо всяких понижающих электронных схем, только экологически чистые напряжение и ток!): подключил 8 шт. аккумуляторов на 1.2V последовательно и сделал отводы в нужных местах, как показано на схеме.

Питание

6В пошло на сервомотор, а 9.6 на DC моторы. Понятно, что аккумуляторы 1—5 будут испытывать повышенную нагрузку.

Для управления серво и DC моторами использовал 4-х канальный Motor Drive Shield на базе микросхемы L293D.

Сборка

Собрать готовое шасси небольшая проблема. Но не думайте, что без допиливания у вас всё сразу соберется. Поэтому приготовьте надфили.

Сборка

Сборка

Подключить нормально несколько моторов, сервомотор или шаговый напрямую к Arduino не удастся. Так как пины (выводы) Arduino являются слаботочными. Для решения проблемы существует дополнительный модуль управления приводами — Motor Drive Shield на базе микросхемы L293D, которая является одной из самых распространенных микросхем, предназначенных для этой цели. Чип L293D известен также как H-мост (H-Bridge).

Я использовал плату, которая обеспечивает 4 канала для подключения на двух микросхемах L293D и сдвиговом регистре. Приобретается на eBay за $5.

Данная плата модуля управления приводами имеет следующие характеристики.

  • L293D Motor Drive Shield совместим с Arduino Mega 1280 и 2560, UNO, Duemilanove, Diecimila
  • 4-х канальное управление
  • питание моторов от 4.5В до 36В
  • допустимый ток нагрузки 600мА на канал, пиковый ток — 1.2A
  • защита от перегрева
  • 2 интерфейса с точным таймером Arduino (не будет «дрожания») для подключения сервомоторов на напряжение 5В, если напряжение питания нужно повыше, то подключение по питанию нужно переделать как описано ниже
  • можно одновременно управлять 4 двунаправленными DC коллекторными моторами или 2 шаговыми, и 2 сервомоторами
  • 4 двунаправленные DC моторы подключены каждый к 8-битной шине для выбора индивидуальной скорости
  • подключение до 2 шаговых приводов (однополярных или биполярных), с одной катушкой, двойной катушкой или с чередованием шага
  • разъем для подключения внешнего источника для раздельного питания управляющей логики и моторов
  • Кнопка RESET Arduino
  • для управления используется библиотека Adafruit AFMotor.

Motor Drive Shield требует небольшой доработки, чтобы можно было после него хоть что-нибудь подключить. Я подпаял сверху необходимые разъемы, получилось вот что.

Motor Drive Shield

Моторы могут быть подключены к дополнительному по отношению к плате Arduino источнику питания. Я рекомендую именно такой способ подключения. Для этого нужно снять, разомкнуть перемычку, как показано на картинке.

4-х канальный L293D Motor Drive Shield. Перемычка для внешнего питания

В этом случае питание Arduino и питание моторов производится независимо друг от друга.

Светодиод на мотор-шилде светится при наличии питания для моторов, если он не горит, то моторы работать не будут.

Новая проблема.

Сервомоторов положение джампера питания не касается, они по прежнему будут запитаны от 5V Arduino. Так как сервомоторы обычно потребляют большой ток и если питания недостаточно, то всё устройство начинает глючить, в «лучшем» случае будет глючить только сервопривод — не будет поворачиваться на заданный угол, либо все время перед каждым поворотом поворачивать сначала в 0 градусов, а уже потом на заданный угол (и если будет успевать). Поэтому я рекомендую питать сервопривод также от дополнительного источника питания. Для этого придется немного переделать схему подключения: откусить плюсовой провод (обычно красный) от стандартного разъема и соединить его с плюсом источника питания напрямую.

Доработка для подключения питания сервомотора

При подключении Motor Drive Shield аналоговые пины не используются. Цифровые пины 2, 13 не используются.

Указанные ниже пины используются, только если подключены и используются соответствующие DC двигатели или шаговые двигатели (Stepper):

  • D11: DC Motor #1 / Stepper #1 (активация и контроль скорости)
  • D3: DC Motor #2 / Stepper #1 (активация и контроль скорости)
  • D5: DC Motor #3 / Stepper #2 (активация и контроль скорости)
  • D6: DC Motor #4 / Stepper #2 (активация и контроль скорости)

Эти пины будут заняты, если используются любые DC/steppers: D4, D7, D8, D12.

Указанные ниже пины будут заняты, только если используются соответствующие сервомоторы:

  • D9: Servo #1 управление
  • D10: Servo #2 управление

Таблица подключений

Для начала работы с Motor Drive Shield необходимо скачать и установить библиотеку Adafruit AFMotor.

Пример кода для управления моторами:

#include <AFMotor.h> // подключить библиотеку Adafruit
#include <Servo.h>  // подключить библиотеку для сервомотора

AF_DCMotor motor(1); // создать объект мотор, указав номер разъема DC мотора на плате Motor Shiled и, опционально, частоту frequency
Servo servo;  // создать объект сервомотор

servo.attach(10);  // присоединить серво на пин 9 или 10 (крайний разъем на плате Motor Shiled)

motor.setSpeed(speed); // установить скорость DC мотора от 0 (останов) до 255 (полный газ)
motor.run(RELEASE); // DC мотор стоп
motor.run(FORWARD); // DC мотор вперед
motor.run(BACKWARD); // DC мотор назад

servo.write(90); // повернуть серво на 90 град.

DC мотор у меня начал крутиться только при указании скорости больше 100, если меньше — просто жужжит. Минимальную скорость вашего мотора вам придется определить экспериментально.

Для моторов, подключенных к M1 и M2 можно задать частоту: MOTOR12_64KHZ, MOTOR12_8KHZ, MOTOR12_2KHZ, MOTOR12_1KHZ. Наибольшая скорость вращения достигается при 64KHz эта частота будет слышна, меньшая частота и скорость на 1KHz но и использует меньше энергии. Моторы 3 и 4 всегда работают на 1KHz другие значения игнорируются. По умолчанию везде 1KHz.

После этого необходимо прогнать тест моторов. Скетч для тестирования можно взять здесь. В начале скетча измените номер мотора в строке (или в строках) типа:

AF_DCMotor motor(…);

Скетч некоторое время вращает мотор(ы) вперед по ходу движения робота, а затем назад. Посмотрите внимательно в ту ли сторону вращается мотор, и измените полярность подключения если нужно.

Подключаем ультразвуковой измеритель расстояния HC-SR04 Ultrasonic Module. Распиновка выводов:

  • Vcc
  • Trig (T)
  • Echo ( R )
  • GND

Время затрачиваемое ультразвуковым дальномером на измерения (определено опытным путем):

  • максимум 240 мсек, если расстояние слишком велико (out of range)
  • минимум 1 мсек, если расстояние слишком мало
  • расстояние в 1.5 м определяется примерно за 10 мсек

Ультразвуковой измеритель расстояния HC-SR04 Ultrasonic Module

Ультразвуковой датчик дальномер, в силу своей физической природы, а не потому что Китай, в некоторых случаях плохо определяет расстояние до препятствия:

  • если препятствие сложной формы, то ультразвук отражается под разными углами и датчик ошибается,
  • ультразвук отлично поглощается (т.е. не отражается) мягкой мебелью или игрушками, и датчик считает что перед ним ничего нет.

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

Некоторые проблемы можно решить с помощью инфракрасного датчика расстояния. Но он тоже не идеален:

  • небольшая максимальная дальность по сравнению с ультразвуковым: 0,3—0,8 м против 4 м
  • большое минимальное расстояние по сравнению с ультразвуковым: 10 см против 2 см
  • зависимость чувствительности датчика от общей освещенности.

Хотя если установить эти дальномеры в паре, то эффективность их работы заметно повысилась бы.

Подключаем Bluetooth HC-05

Как видим из даташита основные пины «голого» HC-05:

  • TX (pin 1) передача
  • RX (pin 2) прием
  • 3,3V (pin 12) питание 3.3В
  • GND (pin 13) земля
  • PIO8 (pin 31) индикатор режима
  • PIO9 (pin 32) статус соединения, если соединение установлено, то на выходе будет высокий уровень
  • PIO11 (pin 34) для включения режима AT-команд

Наш модуль припаян к плате Breakout/Base Board, где уже есть делитель напряжения, поэтому диапазон рабочих напряжений у него от 3.3В до 6В.

Подключаем наш Bluetooth модуль в сборе :

  • Arduino (TX) — (RX) HC-05
  • Arduino (RX) — (TX) HC-05
  • Arduino (+5В) — (VCC) Bluetooth
  • Arduino (GND) — (GND) Bluetooth
  • пины LED, KEY не используются

После подачи питания на модуль Bluetooth HС-05 на нем должен заморгать светодиод, что означает работоспособность блютуза.

Включаем bluetooth на мобиле, находим устройство с именем HC-05 и подключаемся, пароль 1234.

Для тестирования заливаем в Arduino простой скетч:

int count = 0;

void setup() {
  Serial.begin(9600);
  Serial.println("Test Arduino + Bluetooth. http://localhost");
}

void loop() {
  count++;
  Serial.print("Count = ");
  Serial.println(count);
  delay(1000);
}

На Android телефон устанавливаем Bluetooth Terminal. Подключаемся к устройству HC-05 и наблюдаем на экране телефона бегущие строки с увеличивающимся счетчиком.

Чтобы модуль мог принимать AT-команды, нужно его перевести в соответствующий режим — для этого нужно установить вывод KEY (PIO11) в логическую 1. На некоторых Breakout/Base Board вместо вывода KEY есть вывод EN (ENABLE), который может или не может быть припаян к выводу на самом чипе. Это касается только чипов HC05. Вот как раз у меня вывод EN платы никуда не припаян. Поэтому его можно припаять отдельным проводом к выводу KEY(PIO11) чипа. Либо во время работы, чтобы перевести HC05 в режим AT-команд на пару секунд закоротить вывод чипа KEY(PIO11) на вывод питания Vcc. Для HC06 вывод KEY не нужен.

Программное обеспечение

Примечание. Каждый раз перед загрузкой программы в Arduino, убедитесь, что модуль Bluetooth не подключен к Arduino. Это вызовет проблемы заливки скетча. Просто отсоедините питание от Bluetooth модуля или провода, соединяющие Arduino и RX, TX контакты модуля.

В начале скетча измените номера моторов в строках типа:

AF_DCMotor motor(…);

Скетч для автоматического режима с объездом препятствий скачать здесь.

Если заменить строку

byte debug = 0;

на

byte debug = 10;

то включится режим отладки.

В режиме отладки робот RoboCar4W реально ездить или крутить колесами не будет. Вместо этого активируйте монитор последовательного порта и там увидите как он «ездит» виртуально. Вместо реальной езды вперед в монитор последовательного порта будет писаться строка «Forward», вместо заднего хода с поворотом влево — «Turn Back L(eft)» и т.д. Датчик ультразвукового измерения расстояния тоже ничего не делает, вместо этого расстояния до препятствий генерируются программно и случайно.

Этот режим отладки удобен, если вы меняете алгоритм движения и вместо того, чтобы ловить машинку по комнате, просто проверяете всё на «холостом» ходу.

Скетч для ручного управления по блютуз скачать здесь. Скетч не имеет режима отладки, так как там всё прозрачно. Вы нажимаете кнопку — робот едет.

Программа для Adnroid Bluetooth RC Car.

Ну вот и все! Счастливой дороги!

Счастливой дороги!

  1. Manuals
  2. Brands
  3. LAFVIN Manuals
  4. Robotics
  5. Obstacle Avoidance Smart Car Kit

Manuals and User Guides for LAFVIN Obstacle Avoidance Smart Car Kit. We have 1 LAFVIN Obstacle Avoidance Smart Car Kit manual available for free PDF download: Manual

Данная статья устарела 1 января 2018 года. Есть смысл рассматривать её только как инструкцию по сборке. Вопросы программирования гораздо лучше освещены в новой статье.

Возникла задача реализовать роботизированную машинку на колёсах. Обзор опубликованных в свободном доступе решений позволил сразу отказаться от рудиментов и выработать уникальные технические требования:

  • Для всей системы должен быть только один источник питания. Желательно, аккумуляторы. Любимый формат — 18650.
  • Простая и надёжная силовая часть. Никаких гипер-сложных «силовых шилдов«.
  • Поведение, целиком определяемое прошивкой
  • Отладка в результате натурных испытаний (смена режимов сопровождается звуковым сигналом).

Рассмотрим этапы решения.

В первую очередь был заказан набор для сборки механической части шасси из Китая. Через месяц пришёл хорошо укомплектованный набор.

Состав набора:

  • Две акриловые пластины корпуса
  • Четыре мотора
  • Четыре колеса
  • Футляр для аккумуляторов
  • Метизы

Далее пришлось открывать верхний ящик стола и на ощупь искать дополнительные комплектующие. Нам пригодятся:

  • Микроконтроллерный модуль
  • Плата расширения Sensor Shield v.5
  • Модуль драйвера моторов на базе L298N
  • Сонар HC-SR04 с крепёжной скобой
  • Соединительные провода

В качестве микроконтроллерного модуля был выбран один из клонов платформы Arduino на базе Atmel ATmega 328/P. После долгих размышлений и взглядов в сторону Raspberry Pi или «голого» PIC16 с аскетичным ассемблером решено было остановиться именно на этой платформе, т.к. она обеспечивает простоту сопряжений с другими блоками, имеет массу примеров кода, опубликованных в свободном доступе, унифицирована с колоссальным количеством датчиков — другими словами, развязывает руки разработчику и позволяет сосредоточиться на воплощении задумки.

Более того, неоспоримый дополнительный плюс — это масштабируемость.

Исполнение выбиралось с точки зрения дизайна: я постарался выдержать всю конструкцию в жёлто-чёрной палитре.

Фактически, вся сборка начинается с модуля драйвера моторов на базе L298N и крутится вокруг него. На мой взгляд, именно этот модуль следовало бы назвать ядром всей системы. Фактически, это умощнённая версия выпускаемой ранее микросхемы/платы L293D. Совместимость сохранена.

L298N

Важно отметить, что входы ENABLE A/B отвечают за возможность вращения моторов, причём на них можно подавать как логические уровни («низкий» — запрет, «высокий» — разрешено), так и аналоговые сигналы (например, посредством ШИМ) для регулировки скорости вращения. Разработчики предусмотрели два пятивольтовых вывода рядом с ENABLE A/B — они позволяют установить «намертво» перемычки на плату, тогда всегда будет разрешена полная скорость вращения; таким образом можно сэкономить две выходные линии микроконтроллера. Подавать отдельно +5В на эти вспомогательные выводы не требуется!

Ещё одна перемычка видна вблизи колодки питания, в глубине платы: она должна быть установлена, если питание модуля L298N будет превышать +12В. Можно запитывать модуль L298N и большим напряжением (вплоть до 30 вольт), тогда придётся снять данный джампер, а также придётся дополнительно подводить к модулю +5В. В моём случае планируется применение аккумуляторов на 7-8 вольт, поэтому я смело оставил джампер установленным и радостно воспользовался имеющимися пятью вольтами для питания логики.

Сборка робота начинается с подготовки модуля L298N: он с трудом влезает на шасси, а очень хочется установить его по центру. Кроме того, клеммы выходов на моторы оказываются расположены совершенно впритык к корпусам моторов, как туда впихнуть провода — остаётся загадкой. Было принято решение всё же зафиксировать драйвер строго по центру (радиатор будет смотреть назад), для чего пришлось выпаивать колодки, заменяя их проводами. В итоге вся силовая часть оказалась пропаяна, что лично меня весьма устраивает.

Стойки для драйвера оказались слишком высоки (радиатор не влезал), поэтому пришлось изготовить собственные низкопрофильные стоечки.

Все тонкости пайки показаны на рисунке выше. Моторы запаиваем крест-накрест между собой, затем припаиваем выходные (красные) провода от драйвера.

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

И, да, не забываем, что редукторы у нас не железные, колёса придётся насаживать нежно! Есть смысл капнуть каплю клея на оси, так как практика показала, что колёса имеют тенденцию отваливаться на поворотах по ковру.

Теперь выполняем соединения. Самое главное правило: присоединить шлейф красиво к драйверу — то есть все шесть проводов выстраиваются в ряд. Это очень важно, ибо туда мы больше не полезем, скорее всего.

Сведём все коммуникации в один понятный рисунок.

 

Собираем второй этаж.

Теперь заложим в нашего робота простой алгоритм, который позволит машине самостоятельно перемещаться, избегая соударения с препятствиями.

Суть алгоритма:

  • При подаче питания исполняем патриотические ноты
  • Выполняем тестовые движения: вперёд, назад, разворот через правое плечо, разворот через левое плечо
  • Едем вперёд, пока не увидим перед собой препятствие на расстоянии 12 см или меньше
  • Меняем траекторию: немного откатываемся назад (на случайное расстояние) и выполняем разворот в случайную сторону на случайный угол.
  • см. (3)

Листинг программы для прошивки.

// 4WD RoboCar
// With Sonar
// 2017-July-24

long randomNumber;

// Описываем подключение драйвера к микроконтроллеру
// A - правый борт
// В - левый борт

int pinB1 = 1;
int pinB2 = 2;
int enableB = 3;
int pinA2 = 4;
int pinA1 = 5;
int enableA = 6; // Setup Ultrasonic Sensor pins #define trigPin 8 #define echoPin 9 // Setup passive buzzer pins int tonePin = 12; void setup() { // Направление работы портов: pinMode (enableA, OUTPUT); pinMode (pinA1, OUTPUT); pinMode (pinA2, OUTPUT); pinMode (enableB, OUTPUT); pinMode (pinB1, OUTPUT); pinMode (pinB2, OUTPUT); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(13 , OUTPUT); // Warming-up movement midi(); // play song enableMotors(); pisk(); delay(500); forward(1300); delay(500); pisk(); backward(1300); delay(500); pisk(); right(1300); delay(500); pisk(); left(1300); disableMotors(); delay(1000); pisk(); digitalWrite(13, LOW); // Выключаем встроенный диод } // Управление моторами void motorAforward() { digitalWrite (pinA1, HIGH); digitalWrite (pinA2, LOW); } void motorBforward() { digitalWrite (pinB1, LOW); digitalWrite (pinB2, HIGH); } void motorAbackward() { digitalWrite (pinA1, LOW); digitalWrite (pinA2, HIGH); } void motorBbackward() { digitalWrite (pinB1, HIGH); digitalWrite (pinB2, LOW); } void motorAstop() { digitalWrite (pinA1, HIGH); digitalWrite (pinA2, HIGH); } void motorBstop() { digitalWrite (pinB1, HIGH); digitalWrite (pinB2, HIGH); } void motorAcoast() { digitalWrite (pinA1, LOW); digitalWrite (pinA2, LOW); } void motorBcoast() { digitalWrite (pinB1, LOW); digitalWrite (pinB2, LOW); } void motorAon() { digitalWrite (enableA, HIGH); } void motorBon() { digitalWrite (enableB, HIGH); } void motorAoff() { digitalWrite (enableA, LOW); } void motorBoff() { digitalWrite (enableB, LOW); } // Управление движениями void forward (int duration) { motorAforward(); motorBforward(); delay (duration); } void backward (int duration) { motorAbackward(); motorBbackward(); delay (duration); } void right (int duration) { motorAbackward(); motorBforward(); delay (duration); } void left (int duration) { motorAforward(); motorBbackward(); delay (duration); } void coast (int duration) { motorAcoast(); motorBcoast(); delay (duration); } void breakRobot (int duration) { motorAstop(); motorBstop(); delay (duration); } void disableMotors() { motorAoff(); motorBoff(); } void enableMotors() { motorAon(); motorBon(); } // Setup Ultrasonic Sensor distance measuring int distance() { int duration, distance; digitalWrite(trigPin, HIGH); delayMicroseconds(1000); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = (duration/2) / 29.1; return distance; } // Setup the main car function void launch() { int distance_0; distance_0 = distance(); // Debugging: Serial.print(distance_0); Serial.println(" inch. "); // Keep moving forward in a straight line while distance of objects in front > 12 cm away while(distance_0 > 12) { motorAon(); motorBon(); forward(10); // Сколько ехать вперёд? distance_0 = distance(); } breakRobot(0); } void avoid() { // Go back and turn slightly right to move car in new direction if object detected tone(tonePin, 999, 400); delay (1000); randomNumber = random(1,2); backward(randomNumber); tone(tonePin, 900, 400); delay (400); randomNumber = random(1,10); if (randomNumber < 5) { right(random(50,460)); } else { left(random(50,460)); }; } void pisk(){ tone(tonePin, 700, 350); delay(350); tone(tonePin, 900, 350); delay(350); tone(tonePin, 1100, 750); delay(550); noTone(tonePin); } void midi() { tone(tonePin, 174, 249.99975); delay(277.7775); tone(tonePin, 233, 499.9995); delay(555.555); tone(tonePin, 174, 374.999625); delay(416.66625); tone(tonePin, 195, 124.999875); delay(138.88875); tone(tonePin, 220, 499.9995); delay(555.555); tone(tonePin, 146, 249.99975); delay(277.7775); tone(tonePin, 146, 249.99975); delay(277.7775); tone(tonePin, 195, 499.9995); delay(555.555); tone(tonePin, 174, 374.999625); delay(416.66625); tone(tonePin, 155, 124.999875); delay(138.88875); tone(tonePin, 174, 499.9995); delay(555.555); tone(tonePin, 116, 249.99975); delay(277.7775); tone(tonePin, 116, 249.99975); delay(277.7775); tone(tonePin, 130, 499.9995); delay(555.555); tone(tonePin, 130, 374.999625); delay(416.66625); tone(tonePin, 146, 124.999875); delay(138.88875); tone(tonePin, 155, 499.9995); delay(555.555); tone(tonePin, 155, 374.999625); delay(416.66625); tone(tonePin, 174, 124.999875); delay(138.88875); tone(tonePin, 195, 499.9995); delay(555.555); tone(tonePin, 220, 374.999625); delay(416.66625); tone(tonePin, 233, 124.999875); delay(138.88875); tone(tonePin, 261, 749.99925); delay(833.3325); tone(tonePin, 174, 249.99975); delay(277.7775); } void loop() { randomNumber = random(2,5); // increase randomization :) launch(); // function keeps moving car forward while... avoid(); // function makes car go back, turn slightly right to move forward in new direction }

Фрагмент реального заезда на видео прекрасно иллюстрирует поведение подопытного.

В результате имеем работающую машинку, которая способна самостоятельно избегать соударения!

Хотелось бы отметить, что очень тщательно выбиралась пара переменных: критическое расстояние Distance и время движения вперёд, т.е. параметр для Forward(). Дело в том, что от пары этих переменных будет очень сильно зависеть поведение робота вблизи препятствий. Я постарался сделать максимально точный аппарат, который будет тормозить в самый последний миг, останавливаясь в миллиметрах от преграды. С другой стороны, ударов тоже допускать нельзя (домашнюю мебель жалко).

Для программирования и прошивки использовалась интегрированная среда разработки UECIDE. Крайне рекомендую данную ИСР, т.к. во-первых, она бесплатна. Во-вторых, она обладает развитым функционалом текстового редактора кода, после которого тяжело перейти на любой другой пакет. Иллюстрирую феноменальную разметку с помощью одного скриншота:

uecide

Не прошло и полгода, а уже захотелось доработать поделку.

Ниже приведён листинг доработанной программы для прошивки. Добавлен фотосенсор, теперь в темноте зажигаются фары, а скорость моторов немного снижена, чтобы машинка была не такой резвой. Встроенный светодиод теперь сигнализирует об обнаружении препятствия и о движении назад или развороте.

// 4WD RoboCar
// Sonar (NO Servo) + fara + LED13
// 2017-December-10
// v.0.4 (хорошая версия)

// Global variables:
long randomNumber;
int velocity = 220;

int light = 0; // Сюда подключены фары

// Описываем подключение драйвера к микроконтроллеру
// A - правый борт
// В - левый борт

int pinB1   = 1;
int pinB2   = 2;
int enableB = 3;
int pinA2   = 4;
int pinA1   = 5;
int enableA = 6;

// Подключаем ультразвуковой датчик
#define trigPin 8
#define echoPin 9

// Фоторезистор висит на А0
#define PHOTO_SENSOR A0 

// Подключаем зуммер
int tonePin = 12;

void setup() {
  
  // Определяем направление работы линий
   pinMode (enableA, OUTPUT);
   pinMode (pinA1, OUTPUT);
   pinMode (pinA2, OUTPUT);
   pinMode (enableB, OUTPUT);
   pinMode (pinB1, OUTPUT);
   pinMode (pinB2, OUTPUT); 
   pinMode(trigPin, OUTPUT);
   pinMode(echoPin, INPUT);
   pinMode(13 , OUTPUT);

// Warming-up
midi();
enableMotors();
pisk();
delay(2000);
digitalWrite(13,  LOW); // Выключаем встроенный диод
// Serial.begin(9600);     // Отправляем данные на ПЭВМ
}

// Описываем варианты работы моторов
void motorAforward() {
 digitalWrite (pinA1, HIGH);
 digitalWrite (pinA2, LOW);
}
void motorBforward() {
 digitalWrite (pinB1, LOW);
 digitalWrite (pinB2, HIGH);
}
void motorAbackward() {
 digitalWrite (pinA1, LOW);
 digitalWrite (pinA2, HIGH);
}
void motorBbackward() {
 digitalWrite (pinB1, HIGH);
 digitalWrite (pinB2, LOW);
}
void motorAstop() {
 digitalWrite (pinA1, HIGH);
 digitalWrite (pinA2, HIGH);
}
void motorBstop() {
 digitalWrite (pinB1, HIGH);
 digitalWrite (pinB2, HIGH);
}
void motorAon() {
 digitalWrite (enableA, HIGH);
}
void motorBon() {
 digitalWrite (enableB, HIGH);
}
void motorAoff() {
 digitalWrite (enableA, LOW);
}
void motorBoff() {
 digitalWrite (enableB, LOW);
}

// Описываем варианты движения машины
void forward (int duration) {
 motorAforward();
 motorBforward();
 delay (duration);
}
void backward (int duration) {
 motorAbackward();
 motorBbackward();
 delay (duration);
}
void right (int duration) {
 motorAbackward();
 motorBforward();
 delay (duration);
}
void left (int duration) {
 motorAforward();
 motorBbackward();
 delay (duration);
}
void FullStop (int duration) {
 motorAstop();
 motorBstop();
 delay (duration);
}
void disableMotors() {
 motorAoff();
 motorBoff();
}
void enableMotors() {
 motorAon();
 motorBon();
}

// Пользуемся УЗ датчиком расстояния
int distance() {
  int duration, distance;
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(1000);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1; // Переводим в сантиметры
  return distance;
}

// Функция запуска автомобиля
void launch() {
int distance_0;
distance_0 = distance();
// Debugging:
//  Serial.print(distance_0);
//  Serial.println(" сантиметров. ");

// Движемся вперёд, пока расстояние до преграды > 12 cm
while(distance_0 > 12)
  {
     // motorAon();
     // motorBon();
     analogWrite (enableA, velocity);
     analogWrite (enableB, velocity);
     forward(10); // Сколько ехать вперёд?
     distance_0 = distance();
  }
FullStop(0);
}

void avoid()
{
    digitalWrite(13,  HIGH); // Включаем встроенный диод!
    // Сначала откатываемся назад на случайное количество шагов
    tone(tonePin, 999, 400);
    delay (1000);
    randomNumber = random(2,3);
    backward(randomNumber);
    tone(tonePin, 900, 400);
    delay (400);
    // Случайным образом выбираем направление и угол поворота:
    randomNumber = random(1,10);
    if (randomNumber < 5) { right(random(50,460)); } else { left(random(50,460)); };
    digitalWrite(13,  LOW); // Выключаем встроенный диод
}

void pisk(){
    tone(tonePin, 700, 350);
    delay(350);
    tone(tonePin, 900, 350);
    delay(350);
    tone(tonePin, 1100, 750);
    delay(550);
    noTone(tonePin);
}

void midi() {

tone(tonePin, 174, 249.99975);
    delay(277.7775);
    tone(tonePin, 233, 499.9995);
    delay(555.555);
    tone(tonePin, 174, 374.999625);
    delay(416.66625);
    tone(tonePin, 195, 124.999875);
    delay(138.88875);
    tone(tonePin, 220, 499.9995);
    delay(555.555);
    tone(tonePin, 146, 249.99975);
    delay(277.7775);
    tone(tonePin, 146, 249.99975);
    delay(277.7775);
    tone(tonePin, 195, 499.9995);
    delay(555.555);
    tone(tonePin, 174, 374.999625);
    delay(416.66625);
    tone(tonePin, 155, 124.999875);
    delay(138.88875);
    tone(tonePin, 174, 499.9995);
    delay(555.555);
    tone(tonePin, 116, 249.99975);
    delay(277.7775);
    tone(tonePin, 116, 249.99975);
    delay(277.7775);
    tone(tonePin, 130, 499.9995);
    delay(555.555);
    tone(tonePin, 130, 374.999625);
    delay(416.66625);
    tone(tonePin, 146, 124.999875);
    delay(138.88875);
    tone(tonePin, 155, 499.9995);
    delay(555.555);
    tone(tonePin, 155, 374.999625);
    delay(416.66625);
    tone(tonePin, 174, 124.999875);
    delay(138.88875);
    tone(tonePin, 195, 499.9995);
    delay(555.555);
    tone(tonePin, 220, 374.999625);
    delay(416.66625);
    tone(tonePin, 233, 124.999875);
    delay(138.88875);
    tone(tonePin, 261, 749.99925);
    delay(833.3325);
}

void fara () {
  int val = analogRead(PHOTO_SENSOR);
  if (val < 500) {
    // Светло, выключаем фары
    digitalWrite(light, HIGH);
  } else {
    // Темновато, включаем фары
    digitalWrite(light,  LOW);
  }
}

void loop() {
     randomNumber = random(2,5); // вхолостую выбираем псевдо-случайное число
     launch(); // запускаем автомобиль вперёд
     avoid(); // откатываемся от препятствия и как-то поворачиваемся
     fara ();  // проверяем, не пора ли зажигать фары?
}

В результате движения стали более плавными и точными, зажигаются фары (т.е. светодиоды) в соответствии с показаниями датчика освещённости, но их можно и не подключать. Моторы работают в чуть более щадящем режиме. Обо всех действиях сообщает писк зуммера.

Car Moving

Тип Поставщика

От оригинального производителя

Время выполнения заказа:

Quantity (шт.) 1 — 20 21 — 100 101 — 500 > 500
Примерное время (в днях) 3 5 14 Подлежит согласованию

Сведения о покупке

Защита с помощью

Транспортировка:

Связаться с поставщиком для согласования деталей доставки

Платежи:

···

Шифрование и повышенная безопасность платежей Подробнее

Возврат товаров и возмещение средств

Доступны возврат товаров и возмещение средств Подробнее

Покупайте с уверенностью

Лидер рейтинга за последние 90 дней

Понравилась статья? Поделить с друзьями:
  • Кератин кофе премиум хонма токио инструкция
  • Gorenje bm1310 хлебопечка инструкция по применению
  • Om926la руководство по ремонту
  • Декапрол от запора инструкция по применению цена в аптеках отзывы
  • Варка на пару в мультиварке редмонд инструкция