Управление шаговым двигателем на ардуино через блютуз

Обновлено: 06.07.2024

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

Приложение для телефона позволяющее управлять шаговым двигателем.

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

Интерфейс приложения достаточно простой. Несколько текстовых полей, кнопок, бегунок и список.

Интерфейс приложения достаточно простой. Несколько текстовых полей, кнопок, бегунок и список.

Блоки программы для mit app inventor.

Блоки программы для mit app inventor.

Эта часть программы, отвечающая за подключение по bluetooth.

Эта часть программы, отвечающая за подключение по bluetooth.

Управление шаговыми двигателями происходит с помощью данных элементов.

Управление шаговыми двигателями происходит с помощью данных элементов.

Я сделал процедуру, которая позволяет реже отправлять значения при перемещении бегунка.

Я сделал процедуру, которая позволяет реже отправлять значения при перемещении бегунка.

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

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

Для проекта понадобиться следующая электроника:

Схема подключения шагового двигателя 28BYJ-48, Bluetooth модель HC-05 к Arduino.

Схема подключения шагового двигателя 28BYJ-48, Bluetooth модель HC-05 к Arduino.

Как видно из схемы к Arduino NANO, подключаем шаговый двигатель 28BYJ-48, Bluetooth модель HC-05. Драйвер шагового двигателя ULN2003 запитать лучше от отдельного блока питания 5-12 В.

схема Arduino NANO, подключаем шаговый двигатель 28BYJ-48, Bluetooth модель HC-05. Драйвер шагового двигателя ULN2003 з

Если делать умные рулонные шторы, то желательно добавить в схему конечный выключатель. А лучше геркон или KY-003 модуль датчика Холла. На штору поместить магнит. Что позволит определять границы перемещения полотна.

Код (скетч) управления шаговым двигателем на Arduino через bluetooth.

В коде всего 2 переменные, которые нужно поменять в том случае если вы будете использовать другой шаговый двигатель. Первая переменная устанавливает скорость по умолчанию – это 5 оборотов в минуту. Вторая определяет сколько нужно шаговому двигателю сделать шагов, чтобы совершить 1 оборот вала.

В следующем блоке кода подключаем библиотеку AccelStepper, которую можно скачать внизу статьи в разделе «Файлы для скачивания ».

Затем определяем тип двигателя (точнее тип драйвера шагового двигателя), данное подключение можно использовать с другими драйверами, такими как L293, L298 и пр.

Дальше идут переменные, которые нужны для работы алгоритма.

В блоке setup() определяем параметры скорости и ускорения шагового двигателя.

И инициализируем соединение с Bluetooth модулем и скорость работы. У вашего Bluetooth модуля скорость работы может быть другая.

В основном цикле loop() проверяем, пришли данные или нет. Если данные получили, сохраняем их в переменную val и поднимаем флаг.

После поднятия флага проверяем, какую команду получили. Если ни одна не совпадает, то проверяем, возможно, это число скорости вращения шагового двигателя.

Затем переходим к алгоритму управления шаговым двигателем, в котором определяем статус запуска вращения шагового двигателя «flagStart».

После чего, проверяем направление вращения двигателя и устанавливаем скорость вращения с учетом направления.

Следующие 2 строчки заставляют шаговый двигатель сделать один оборот.

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

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

Умные рулонные шторы своими руками на Arduino.

На основе приложения и кода можно сделать своими руками умные рулонные шторы на Arduino. Даже без добавления дополнительных элементов. Для этого достаточно замерить, сколько оборотов делает штора, чтобы достигнуть конечного положения. И добавить в программу данное значение, вместо значения перемещения на 1 оборот. И после чего, при нажатии у вас будет сворачиваться, и разворачиваться штора. Но для безопасной работы лучше установить конечный выключатель или, как рассказывал ранее датчик холла. Чтобы определять конечное положение.

Механическая часть умной рулонной шторы.

Чтобы реализовать механизм умной рулонной шторы можно воспользоваться готовыми 3D моделями для печати и модернизировать обычную штору.

Чтобы реализовать механизм умной рулонной шторы можно воспользоваться готовыми 3D моделями для печати

Используя электронику из проекта, получится вот такая умная рулонная штора.

Используя электронику из проекта, получится вот такая умная рулонная штора.

Заключение.

Управление шаговым двигателем через Bluetooth имеет ряд ограничений. Самое главное ограничение – это возможность подключиться только к одному устройству. Соответственно управлять сможем одновременно только одним устройством. А в случае со шторой, как правило, их в квартире 3-4 и больше и управлять ими желательно одновременно, что можно реализовать с помощью Wi-Fi управления. Если вам интересно продолжение данной темы, пишите в комментарии.

Понравился проект Умные шторы. Управление шаговым двигателем на Arduino через bluetooth? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Сегодня поговорим о том, как можно сделать управление шаговым двигателем на Arduino через bluetooth.

Надеюсь моя информация будет полезной.

Спасибо! Всем добра!


Arduino & Pi

1.1K поста 18.1K подписчиков

Правила сообщества

В нашем сообществе запрещается:

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

• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском

• Рассуждать на темы политики

Держите стартап, лежишь такой в гамаке, в тени. Умный мангал, а приложение как игра, вертиш шампурины с мясом куда надо и по камере видишь всё. Кулером поддул или водичкой брызнул. И у кого лучше шашлык, тот победил ))

Как-то не так обороты определяются. Двигатель на ползунке 9 делает один оборот за 5 секунд. Это примерно 12 оборотов в минуту.

Контроль позиции производится чтением содержимого буфера?

День добрый. Без драйвера можно запустить шаговый двигатель? У меня скопилось некоторое количество Nema 23, хотелось бы проверить работоспособность.

ТС использовал библиотеку Accelstepper. Довольно геморройная библиотека, я тоже пользовался. То что у него обороты не совпадают с паспортными это нормально для этой библиотеки. Видно что чел не парился и использовал Run() вместо RunToPosition(). Называется "я видео записал, я молодец, дальше еб. тесь сами".

А можно как то по воздуху передавать данные на lcd дисплей, и поворот/нажатие энкодера? На стм32

информация полезна, спасибо. Не видел программ с настолько высоким уровнем абстракции, да ещё и онлайн.

В основном зачёт, но на будущее рекомендую не спешить и поработать над дикцией

Хоть убей не пойму зачем брать ардуину и приделывать к ней радиомодуль, когда можно тупо сразу взять esp32. Который мало того что имеет wifi/bt by design, так ещё и в 30 раз мощнее. Атмега очень и очень устарела


Косячный Arduino CNC Shield v4. Полное восстановление работоспособности

Купил я себе Arduino CNC Shield v4. Как оказалась данный шилд косячный, и про эту проблему известно давно, а китайские производитель так и продают их с данным браком. Но я решил не выбрасывать данную плату, а реанимировать.

Первое что нужно сделать, это настроить прошивку, так как при разводке платы перепутаны местами контакты step и dir.

Косячный Arduino CNC Shield v4. Полное восстановление работоспособности Arduino, Arduino Nano V3, ЧПУ, Своими руками, Ремонт техники, Туториал, Видео, Видеоблог, Длиннопост

Второе что не работает это деление шага. Чтобы сделать максимальное деление шага можно припаять 3 перемычки. Внимание джамперы ставить в данном случае нельзя, ЗАМКНЕТ!

Косячный Arduino CNC Shield v4. Полное восстановление работоспособности Arduino, Arduino Nano V3, ЧПУ, Своими руками, Ремонт техники, Туториал, Видео, Видеоблог, Длиннопост

Если вам нужно выставлять деление шага можно перерезать дорожки и припаять 5 перемычек. Подробнее про данный способ читайте на сайте.

Косячный Arduino CNC Shield v4. Полное восстановление работоспособности Arduino, Arduino Nano V3, ЧПУ, Своими руками, Ремонт техники, Туториал, Видео, Видеоблог, Длиннопост

Что меня удивляет это факт того, что CNC Shield v4 стоит дороже чем его не бракованный брат Arduino CNC Shield v3. Почему так?

Косячный Arduino CNC Shield v4. Полное восстановление работоспособности Arduino, Arduino Nano V3, ЧПУ, Своими руками, Ремонт техники, Туториал, Видео, Видеоблог, Длиннопост

Если что то не понятно смотрите тут.

Надеюсь моя информация будет полезной.

Спасибо! Всем добра!


Детская игровая кухня своими руками

Всем добра и мира!

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

Пока созревал план-банан, шерстил бескрайние просторы всемогущего интернета, и вот зацепил меня один проект. Евгений собрал для своей дочки чудо-кухню, и готовит, и стирает, пени поёт, а еще и сказки рассказывает. Ух как мне понравилось, аж прям загорелось всё ярким пламенем (внутри). Вот ссылка на проект кухни Евгения.

Имея неплохой опыт сборки мебели с нуля, навыки программирования (но не Ардуино, его я уже изучал в процессе), опыт радиодела, то решил, а почему бы и не. Сказано - сделано! Я связался с Евгением и просто замучал его вопросами по размерам, некоторым нюансам программирования, озвучки, технологическим хитростям, за что еще раз приношу свои извинения за свою назойливость. Вот просто огромная человеческая Благодарность за его терпение и подробные разъяснения, это мне очень помогло, иначе бы проект так и остался бы проектом. Вот еще ссылочка с видео проекта кухни Евгения.

И вот, по прошествии некоторого времени разродился проект, который вам и предоставляю.

Общий вид кухни, уже оккупированной нетерпеливой шеф-поваром =)

Детская игровая кухня своими руками Кухня, Своими руками, Arduino, Длиннопост, Видео

Детская игровая кухня своими руками Кухня, Своими руками, Arduino, Длиннопост, Видео

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

Детская игровая кухня своими руками Кухня, Своими руками, Arduino, Длиннопост, Видео

Имитация микроволной печи. На имеющийся вращающийся столик будет прикреплена более широкая тарелка, чтобы всё цивильно было =) Есть 2 режима работы микроволновки: 1. Ручной - задается время в ручную, 2. Предустановленные режимы - Время и режим приготовления уже заданы, осталось только выбрать =) Всё крутится, светится, становится на паузу при открытии дверцы, либо в ручную, чтобы проверить степень приготовления пищи =)

Детская игровая кухня своими руками Кухня, Своими руками, Arduino, Длиннопост, Видео

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

Детская игровая кухня своими руками Кухня, Своими руками, Arduino, Длиннопост, Видео

Детская игровая кухня своими руками Кухня, Своими руками, Arduino, Длиннопост, Видео

А вот некоторые моменты обратной стороны медали =)

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

При включении кухня приветствует ребенка разными фразами, в зависимости от времени суток, причём, фразы выбираются рандомно. Для каждого времени суток я записал по 3 фразы, чтобы не надоедало =)

Детская игровая кухня своими руками Кухня, Своими руками, Arduino, Длиннопост, Видео

Детская игровая кухня своими руками Кухня, Своими руками, Arduino, Длиннопост, Видео

Детская игровая кухня своими руками Кухня, Своими руками, Arduino, Длиннопост, Видео

Детская игровая кухня своими руками Кухня, Своими руками, Arduino, Длиннопост, Видео

Здесь живёт крутилка и шумелка, а так же пищалка, которая озвучивает нажатия кнопок на матрице (можно отключать в настройках энкодера)

Детская игровая кухня своими руками Кухня, Своими руками, Arduino, Длиннопост, Видео

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

Детская игровая кухня своими руками Кухня, Своими руками, Arduino, Длиннопост, Видео

И, наконец, общий вид ЦПУ =)

Детская игровая кухня своими руками Кухня, Своими руками, Arduino, Длиннопост, Видео

Небольшой обзорчик работы кухни =)

Схема соединения модулей готовится. Будет здесь опубликована. Вот ссылка на некоторые материалы проекта (звуки, библиотеки, скетчи. Важно - библиотека на кнопки модифицирована именно под матрицу 4*4).

Всем спасибо за внимание и радуйте своих детей =)

Детская игровая кухня своими руками Кухня, Своими руками, Arduino, Длиннопост, Видео


Сенсорный кодовый замок своими руками

Сегодня расскажу, как сделать сенсорный кодовый замок своими руками. На подобии тех, что были популярны в фильмах лет 7-10 назад. Тему контроля доступа я уже затрагивал в одной из предыдущих публикаций. А сегодня в меню кодовый замок.

Сенсорный кодовый замок своими руками Arduino, Дисплей, Замок, Кодовый замок, Видео, Своими руками, Видеоблог, Длиннопост

Вот так это выглядит у меня.

Сенсорный кодовый замок своими руками Arduino, Дисплей, Замок, Кодовый замок, Видео, Своими руками, Видеоблог, Длиннопост

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

Сенсорный кодовый замок своими руками Arduino, Дисплей, Замок, Кодовый замок, Видео, Своими руками, Видеоблог, Длиннопост

А с кодовым замком ничего искать не нужно. Главное пароль не забыть!

Надеюсь моя информация будет полезной.

Спасибо! Всем добра!


Bluetooth-модуль, который не фонит

Bluetooth-модуль, который не фонит Bluetooth, Своими руками, Электроника, Магнитола

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

Я пробовал вещи из разряда китайских VHM-314-V2.0 и такое же 3.0, если не ошибаюсь - этот сейчас в магнитоле.

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

Пробовал по-всякому: ставить перемычку с акустической земли на землю питания, ставил конденсатор на питание, ставил линейный стабилизатор на питание - кардинально ничего не влияет. Может быть, что-то ещё можно попробовать?

PS: Магнитолу курочил своими руками, значит, пост пусть будет в Рукодельниках)


Подключение энкодера к Ардуино и полнофункциональный код обработки для него

Энкодер - это устройство преобразования механического перемещения или угловых изменений положения в цифровой сигнал. В статье рассматривается самый популярный в DIY сообществе инкрементальный энкодер EC11 с кнопкой. При его вращении на выходах A и B формируются TTL сигналы в виде импульсов сдвинутые между собой по фазе на 90 градусов. Таким образом с его помощью, можно определить направление и скорость вращения, а так же рассчитать угол поворота. В отличие от потенциометров, энкодер KY-040 гораздо надежней и долговечный.

Подключение энкодера к Ардуино и полнофункциональный код обработки для него Arduino, Энкодер, Своими руками, Видео, Длиннопост

Немного подробностей

Собирая один из проектов с использованием encoder. Я не смог найти код для Ардуино выполняющий все мои условия. Так как для проекта нужно обрабатывать следующие команды: "Вращение без нажатия", "Вращение с нажатием", "Нажатие" и "Длинное нажатие", а так же требуется стабильная работа энкодера. Скетчи использующие один пин с прерыванием INT0 или INT1, работают отвратительно и при вращении вала энкодера вылетает очень много ошибок. Код без использования прерываний работает стабильно, но он не работает в фоновом режиме, его нужно встраивать в тело основной программы, что в свою очередь приводит к не своевременному срабатыванию обработчика и пропускам при вращении энкодера. Еще хуже обстоят дела с обработкой нажатия с вращением вала энкодера и обычным с нажатием. Пришлось написать свой код обработки, который исключает описанные выше проблемы. С дребезгом контактов я не стал бороться программно, так как это приводит к задержкам обработки. Проще и надежней использовать керамические конденсаторы.

Схема подключения энкодера к Ардуино

Для считывания сигналов с выходов EC-11, нужно использовать три цифровых входа Arduino. В схеме подключения я использовал редко используемые мной в своих проектах выводы Arduino(A1, A2 и A3). Внешние подтягивающие резисторы отсутствуют, так как я использовал внутреннюю подтяжку микроконтроллера. Конденсаторы нужны для гашения импульсов дребезга контактов. Если у вас новый и хороший энкодер, то можно обойтись и без них. Но на кнопку в любом случае потребуется конденсатор, так как ее дребезг неизбежен.

Используемые в схеме компоненты:

Подключение энкодера к Ардуино и полнофункциональный код обработки для него Arduino, Энкодер, Своими руками, Видео, Длиннопост

Скетч для Ардуино

Для того что бы отслеживать изменение положения энкодера в фоновом режиме, я использую прерывание PCINT1. Обработка всех функций происходит в прерывании, обработчик в зависимости от произошедшего действия изменяет переменную enc_state. Если значение переменной enc_state=0 - ничего не произошло, enc_state=1 - экодер вращался без нажатия, enc_state=2 - экодер вращался с нажатием, enc_state=3 - было нажатие на кнопку, enc_state=4 - было длинное нажатие на кнопку, Прерывание будет срабатывать каждый раз по изменению состояния входов, как с высокого уровня на низкий, так и наоборот. То есть при одном щелчке энкодера прерывание сработает 4 раза. Или по 2 раза для каждого из входов. Но обработчик выдаст сигнал поворота только 1 раз на все 4 прерывания.

Код обработчика при каждом срабатывании записывает в переменную lastcomb состояние входов, к которым подключен энкодер. И ждет состояние когда выходы A и B будут замкнуты на GND, это гарантированный сигнал того, что энкодер вращается. После того как этот сигнал получен, обработчик проверяет в какую сторону было вращение. Для этого он сравнивает его предыдущее значение из переменной lastcomb и в зависимости от фазы сдвига определит в какую сторону был поворот ротора. Как я писал ранее, сложнее всего отслеживать нажатие кнопки.

Так как использовать определенные тайминги я не планировал, потому, что они неизбежно приводят длительным задержкам работы обработчика и основной программы, или требуют использование таймера, которых в микроконтроллере всего 3 шт. их, как правило никогда не хватает. Собственно проблема состояла в том, чтобы разделить "нажатие с последующим вращением" от простого нажатия. В итоге как вы уже можете убедиться, я решил эту задачу. Оптимизацией кода я не стал заниматься, потому как все работает и меня все устраивает. Для наглядности в коде все действия с энкодером, отображаются в Serial мониторе программы Adruino IDE.

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

Если у Вас остались вопросы и замечания, пишите их в комментариях. Я с удовольствием на них отвечу.

Управление шаговым двигателем 28BYJ-48 через bluetooth

Управление шаговым двигателем 28BYJ-48 через bluetooth.jpg

Управление шаговым двигателем 28BYJ-48 через bluetooth Управление шаговым двигателем 28BYJ-48 через bluetooth.jpg (112.87 КБ) 871 просмотр Убедитесь, что вы отключили модуль bluetooth HC-06 при загрузке кода!

// com0 STOP
// com1 шаг+
// com2 шаг-
// com3 ход+
// com4 ход-
// comZ СТОП после отключения Bluetooth

//ПРИМЕЧАНИЕ. Последовательность 1-3-2-4 требуется для правильной последовательности 28BYJ-48

AccelStepper stepper1 ( HALFSTEP , motorPin1 , motorPin3 , motorPin2 , motorPin4 );

boolean validCommand = false ;
boolean justRun = false ; //если правда, указывает нужно работать на постоянной скорости

long mySteps = 2048 ; //Предполагая, что номинально 4096 шагов на оборот

float mySpeed = 500.0 ;

void setup ()
Serial . begin ( 9600 );
Serial . println ( "Bluetooth is NOT connected" ); //Bluetooth не подключен
Serial . println ( "Waiting for data" ); //Ожидание данных
stepper1 . disableOutputs (); // отключить мотор катушки, пока не потребуется
stepper1 . setMaxSpeed ( 1000.0 );
>

void loop ()
validCommand = false ;

switch ( command )
case '0' : //Прекратите немедленно
Serial . println ( "STOP immediately" ); //Прекратите немедленно
stopNow ();
break ;
>
case '1' : // двигаться половиной оборота по часовой стрелке, ускорение и замедление
Serial . println ( "step clockwise" ); //шаг по часовой стрелке
moveSteps ( mySteps );
break ;
>
case '2' : //перейти половину оборота против часовой стрелки, ускорение и торможение
Serial . println ( "step anti-clockwise" ); //шаг против часовой стрелки
moveSteps (- mySteps );
break ;
>
case '3' : // бегите медленно по часовой стрелке на постоянной скорости, без ускорения
Serial . println ( "бежать по часовой стрелке" );
runAtSpeed ( mySpeed );
break ;
>
case '4' : //бегите медленно против часовой стрелки на постоянной скорости, без ускорения
Serial . println ( "бегите против часовой стрелки" );
runAtSpeed (- mySpeed );
break ;
>
case 'Z' : // Bluetooth отключен; немедленно остановитесь
Serial . println ( "Bluetooth отключен; немедленно остановитесь" );
stopNow ();
break ;
>
default : // символ команды не соответствует диапазону допустимых команд
Serial .print( command );
Serial . println ( " . не находится в допустимом диапазоне команд" );
break ;
>
>
//-------------------------------------------------------------------------------------------
//
// Функция настройки шагового двигателя для перемещения на определенное количество шагов
//
void moveSteps ( long steps )
stepper1 . setAcceleration ( 10.0 );
stepper1 . setSpeed ( 5.0 );
stepper1 . setCurrentPosition ( 0 );
stepper1 . moveTo ( steps );
>
//-------------------------------------------------------------------------------------------
//
// Функция настройки шагового двигателя для работы с определенной скоростью
//
void runAtSpeed ( float cSpeed )
stepper1 . setSpeed ( cSpeed );
justRun = true ;
>
//-------------------------------------------------------------------------------------------
//
//Функция для того чтобы остановить stepper мотор немедленно и отключить катушки мотора
//
void stopNow ()
stepper1 . stop ();
stepper1 . setCurrentPosition ( 0 );
stepper1 . run (); // остановки и набор команд только "активные" после звонка на ("побегать") "run"
stepper1 . disableOutputs (); // отключите катушки двигателя для экономии энергии
>

Arduino CxemCAR


Первая часть статьи проекта CxemCAR находится здесь. Там же находятся исходники для Android и другая полезная информация. В этой статье я покажу сборку CxemCAR для платформы Arduino. В качестве платы Arduino можно использовать практически любую Arduino-совместимую плату: UNO, Nano, Mega, Leonardo и даже на основе STM32 - Arduino DUE. Я использовал платку Arduino Nano V3, приобретенную на eBay за 9$.

Схема подключения Arduino к Bluetooth модулю HC-06 и драйверу двигателей L298N:

Схема подключения Arduino к Bluetooth-модулю и драйверу двигателей


В схеме я использовал джампер (на схеме Jmp1), т.к. при подключенном Bluetooth модуле невозможно было загрузить скетч в Arduino. На время прошивки, снятием перемычки обесточивается Bluetooth-модуль.

В качестве платформы я использовал небольшую RC DIY платформу, купленную на eBay за 25$. Сама платформа представляет из себя алюминиевое основание, куда крепится два двигателя, редуктор и 4 карданные передачи для 4-х колес. Сверху, на 3-х стойках ставится макетная плата.

Платформа RC DIY Mini


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

После этого, я припаял Bluetooth-модуль к Arduino и вывел для него светодиод состояния. О разновидностях Bluetooth модулей, их подключении к Arduino, работы с ними и т.п. можете почитать в данной статье: Arduino и Bluetooth. Модуль HC-06 поместил в термоусадочную трубку 10мм. Светодиод Bluetooth-состояния с токоограничительным резистором также были помещены в термоусадку, но более тонкую - 5мм.

Подключаем Bluetooth модуль


В макетной плате, которая шла вместе с платформой, я просверлил отверстия и закрепил драйвер двигателей L298N. Плату Arduino прикрепил при помощи двухстороннего скотча.

CxemCAR


Между алюминиевой платформой машинки и макетной платой я разместил 3 Li-Po аккумулятора 3.7В 1100 мА*Ч. Питание контроллера и двигателей раздельное: Arduino запитывается от одного аккумулятора 3.7В, а моторчики и драйвер L298N от двух последовательно соединенных аккумуляторов 3.7В. Предусмотрено два 2-х позиционных выключателя питания - в одном положение питание идет от аккумуляторов к потребителям, в другом положении на клеммы зарядки.

Фото машинки на подзарядке:

Зарядка аккумуляторов машинки

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

Программа писалась в среде Arduino IDE 1.01. Код программы я постарался хорошо прокомментировать, но если будут вопросы - спрашивайте на форуме, в теме поддержке проекта CxemCAR .

Плата Arduino по USART от Bluetooth модуля получает готовые данные для левого и правого двигателя. Т.е. все основные расчеты происходят в Android приложении.

Читайте также: