Працюємо з 09:00 до 19:00 без вихідних.
Самовивіз - Київ біля ТЦ Квадрат бул.Перова

Постановка задачи проекта

Ставим задачу автоматически таскать двигателем постоянного тока полезный вес линейно вперёд-назад с задержкой между реверсами. Скорость перемещения полезного веса должна вручную регулироваться в диапазоне 0 ... 100% при помощи переменного резистора. Так же при помощи второго переменного резистора необходимо вручную регулировать время задержки между моментами реверса двигателя. Сам двигатель с редуктором и устройство его управления должны быть размещены на подвижной части устройства. Остановка двигателя должна происходить при срабатывании концевиков.

Напряжение питания двигателя 12 В, а ток потребления до 1 А. Принцип механического перемещения подвижной коробки двигателем в данной статье не имеет значения (червячная передача, зубчатая, колёсная, ременная ...).

Схемное решение и выбор компонентов

Для реализации проекта необходим недорогой, компактный, легко программируемый контроллер с двумя аналоговыми входами для подключения двух переменных резисторов, двумя дискретными входами для подключения концевых выключателей и двумя дискретными широтноимпульсными выходами для управления драйвером двигателя. Идеально подойдёт плата контроллера ATtiny85 со стабилизатором напряжения 5 В на борту (но в этом проекте он не понадобится).

В качестве силовой части следующий по мощности и стоимости после самого дешового драйвера двигателей L9110S идет двухамперный L298N - его то я и возьму. Он компактный, способен коммутировать напряжение до 35 В, имеет удобные разъемы под винтовое соединение проводов. Так же у него на борту стоит стабилизатор напряжения 5 В, от которого будем запитывать контроллер, просто для удобства монтажа (иначе, если подавать 12 В прямо на вход стабилизатора напряжения контроллера, то нужно будет два провода втыкать в один коннектор драйвера).


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

Схема соединений

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

Переменные резисторы поставим номиналом 10 кОм. Обычное подключение - крайние выводы резистора на плюс и минус питания, а средний вывод на аналоговый вход ATtiny85.

Датчики Холла тоже в привычном включении с подтяжкой выхода на плюс питания.

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


Монтаж устройства

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

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

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

Резисторы я припаял красивыми шлейфами. +5 В драйвера тут берётся не с винтового коннектора, а снизу с контактной площадки платы.

Верхний винтовой коннектор демонтирован для удобства монтажа - он в данном проекте лишний.

Программа контроллера

int motor1 = 0;
int motor2 = 1; 
int analogPin = 5; int WaitPin = 4;
int val = 0;     // переменная для хранения значения int twait = 0; // переменная для хранения значения
const int koncevik1 = 2;
const int koncevik2 = 3;
int stage = 0;
void setup()
{
   pinMode(koncevik1, INPUT);
   pinMode(koncevik2, INPUT);
   pinMode(motor1, OUTPUT);
   pinMode(motor2, OUTPUT);
   digitalWrite(motor1, LOW);
   digitalWrite(motor2, LOW);
}
void loop()
{
   val = analogRead(analogPin);  // считываем значение с порта, подключенному к потенциометру скорости вращения twait = analogRead(WaitPin);  // считываем значение с порта, подключенному к потенциометру времени ожидания
   if (stage==100) {
     digitalWrite(motor1, LOW); //остановить двигатель
     digitalWrite(motor2, LOW); //остановить двигатель
     delay(2000 + twait * 57); //задержка 2 ... 60 сек
     stage = 200;
   }
   if (stage==300) {
     digitalWrite(motor1, LOW); //остановить двигатель
     digitalWrite(motor2, LOW); //остановить двигатель
     delay(2000 + twait * 57); //задержка 2 ... 60 сек
     stage = 0;
   }
   if (stage==0) {
     digitalWrite(motor2, LOW);
     analogWrite(motor1, val / 4); // analogRead возвращает значения от 0 до 1023, analogWrite должно быть в диапозоне от 0 до 255
     if (!digitalRead(koncevik1)) stage = 100;
   }
   if (stage==200) {
     digitalWrite(motor1, LOW);
     analogWrite(motor2, val / 4); // analogRead возвращает значения от 0 до 1023, analogWrite должно быть в диапозоне от 0 до 255
     if (!digitalRead(koncevik2)) stage = 300;
   }
   delay(10);
}

Диапазон регулирования задержки перед обратным ходом двигателя здесь задан 2 ... 60 сек. Для задания другого диапазона задержки необходимо подправить формулу 2000 + twait * 57

Выводы

Программа и схема прекрасно себя зарекомендовали. Получилось законченное цельное автономное устройство. Магнитные концевики не изнашиваются механически со временем, драйвер выбран с запасом мощности. Хотя КПД драйвера был бы на много выше, если он был на основе MOSFET-транзисторов.

Время задержки изменения направления движения 2 ... 60 сек и скорости перемещения 0 ... 100 % прекрасно регулируются переменными резисторами. Их можно прикрутить к панельке, на которой можно нанести шкалы для удобства перенастройки. А для уменьшения габаритов устройства, можно вместо переменных резисторов установить миниатюрные подстроечные.

Проект будет интересен для широких масс робототехников как теоретическая пища к реализации своих актуальных задач.

Написать отзыв

Примечание: HTML разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Arduino - что это такое? Популярно для начинающих

Arduino - что это такое? Популярно для начинающих

Самые популярные платы контроллеров популярно для начинающихArduino это недорогая, доступная в смысл..

Датчик температуры аналоговый

Датчик температуры аналоговый

Пределы измеряемой температуры -20 ...105 °C Подключается к аналоговому входу контроллера. ..

37.51грн.

Выбор шагового двигателя

Выбор шагового двигателя

Вам уже приходилось делать выбор между разными шаговыми двигателями для реализации своих амбициозных..

Статический IP адрес ESP8266

Статический IP адрес ESP8266

Как задать статический IP адрес контроллеру ESP8266?Будем рассматривать этот вопрос на примере ..

Повышающий преобразователь напряжения 0,9...5В в 5В

Повышающий преобразователь напряжения 0,9...5В в 5В

Миниатюрный преобразователь напряжения до 5ВВходное напряжение постоянного тока 0,9 ... 5 ВНа выходе..

24.40грн.