Подключение энкодера к Ардуино. Управление мотором энкодер.

Подключение энкодера к Ардуино. Управление мотором энкодер.

Сегодня познакомимся с энкодером и сделаем так, что он будет управлять мотором.
Энкодер вращения — это электромеханическое устройство, предназначенное для преобразования угла поворота вращающегося объекта в электрический сигнал (цифровой или аналоговый).
В следующих видео я покажу как с помощью энкодера сделать меню управления и систему настройки электронных часов, для установки и изменении даты и времени.

В примере я буду использовать энкодер собранный в виде модуля KY-040. А ещё нам понадобятся электрический моторчик, Транзистор, я взял МОСФЕТ и Ардуино, куда же теперь без неё.
Вот схема подключение, подробнее я расскажу позже.

Для питания моторчика нужен отдельный блок питания.
А также нам понадобятся 2 резистора, зачем, я расскажу чуть позже.

Для сегодняшнего примера управления скоростью мотора я подключил энкодер в виде модуля KY-040 и мотор на 12 вольт. Но я решил не просто плавно регулировать скорость, а сделать дискретное переключение. Я определил приблизительно при каком напряжении у меня начинает вращаться мотор, и присвоил это значение первому переключению энкодера. Все последующие переключения идут с приращиванием значений. И так до шестой скорости. Это можно видеть в мониторе порта. Количество скоростей и шаг вращения может быть любым.
Для первого движения, при сбрасывании в ноль, или при изменении скорости в другую сторону, счётчик меняется через один щелчок.

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

Что бы заполнить паузу, пока вы будете смотреть как управлять мотором, я расскажу как ещё можно использовать энкодер.
Очень часто его используют для отображения различных меню. В одном из следующих уроков, я обязательно такое сделаю. Как только получу дисплей, а то я все уже использовал.
Другое применение — это использовать его в настройке и установке часов. Это намного удобнее, чем устанавливать кучу кнопок, а потом запоминать для чего нужна каждая из них. Про это тоже будет видео.
При изготовлении различных моделей и роботов. И ещё много где.

Как работает скетч, я объясню чуть позже, а пока посмотрим с схему подключения.
Я подключил к Ардуино НАНО, но без проблем подойдёт любая Ардуино.
Сначала рассмотрим подключение энкодера.

  • Выход clock я подключил к пину D2
  • Data  к пину D3,
  • а switch к пину D4.
  • Питание к +5 вольт ардуино.
  • Земля к земле


Так как я взял мотор работающий от 12 вольт, то для его управления нужен транзистор. Я использовал MOSFET, так как он намного лучше обычных биполярных транзисторов.
Меня часто спрашивают, зачем использовать два резистора, если и так всё работает.
Рассказываю.
Резистор на 10 ком нужен для того чтобы при отсутствии сигнала на входе транзистора было хоть какое-то напряжение, которое не даст ему ловить разные наводки и переключаться в разное состояние.
Установив этот резистор вы подаёте низкий уровень на вход, а так как сопротивление резистора большое, то при подаче на вход сигнала с Ардуино, оно никак не повлияет на работу.
А резистор на 100 ом нужен для предотвращения Ардуино от перегрузки по току. Он работает как обычный ограничитель тока. В момент открытия транзистора через него может пойти большой ток.
Ставить их или нет решать вам, но я бы советовал всё же их установить.
Это примерный список транзисторов которые можно подключать. Но их список гораздо больше. В основном они работают с приборами до 30 вольт, но есть и для большего напряжения и силы тока.

Мотор просто устанавливается разрыв между стоком и питанием мотора.
Желательно ещё параллельно включению установить диод и конденсатор, но я обычно это не делаю, и зря.

Работа скетча.
Для работы с энкодером надо установить вот эту библиотеку. Установить можно из диспетчера библиотек.
Дальше надо указать к каким контактам платы Ардуино вы будете подключать выводы data и clock. Я подключил их к выводам 3 и 2.
Мотор я подключил к контакту 9, но можно было бы подключить к любому контакту который может работать в режиме ШИМ.
Создаём переменную для хранения текущей позиции и присваиваем ей значение ноль.
Кнопку энкодера подключаем к контакту 4 платы, чтобы все провода были в одной кучке.
Дальше создаём переменные для хранения значений отвечающих за скорость вращения. У меня мотор начинает вращаться со значения 50.
Шестую скорость я установил в 120. Хоть это и является всего половиной от возможной скорости. Можно задать до 255. Остальные значения я просто плавно раскидал между оставшихся шагов.
А ещё я создал переменную для полной остановке мотора, со значением 0.
В переменную newpos будут попадать новые шаги при переключении энкодера.

В setup ничего нового.
Объявляем скорость работы серийного порта.
9 пин Ардуино объявляем как выход, а 4 pin, к которому подключеня кнопка сделаем входом, да ещё подключим внутреннюю подтяжку. Так, что при не нажатой кнопке, там всегда будет высокий уровень.
Выводим значение начальной позиции энкодера. Она у нас равна нулю.

В loop постоянно проверяем положение энкодера, а здесь получаем позицию и сохраняем в переменную new pos.
Это условие проверки нажатия кнопки энкодера. Если кнопка нажата, то сбрасываем значение энкодера в ноль. Кстати можно эту строчку закомментировать и мотор остановится, но в ноль не сбросится. Получается как бы пауза и при следующих вращениях энкодера, значения будут продолжаться. Ну и небольшой делейчик. Не помешает.

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

Чуть расскажу про Оператор множественного выбора switch.
Сначала он получает значение из переменной pos и ищет его среди своих кейсов.
Если значение было найдено, то выполняются все команды находящиеся внутри, до оператора break.
После этого происходит выход.
Если значение не было найдено, то выполняется default и выход из оператора.
Кстати в одном кейсе могут находится несколько, и все они будут выполнены.  

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

Скетчи