Працюємо з 09:00 до 20: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 разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Блок питания 9 В 1 А с разъемом 5,5мм x 2,1мм

Блок питания 9 В 1 А с разъемом 5,5мм x 2,1мм

Входное напряжение переменного тока 100...240 В 50/60 ГцВыходное стабилизированное напряжение 9 ВМак..

81.41грн.

Светодиодный индикатор для часов на TM1637

Светодиодный индикатор для часов на TM1637

Цифровой светодиодный индикатор для часовКрасный цветУправляется микросхемой TM1637Работает с уровня..

33.23грн.

Универсальная плата под микросхемы SOP8, SSOP8

Универсальная плата под микросхемы SOP8, SSOP8

Универсальная монтажная плата, позволяет проводить монтаж различных микросхем с поверхностным монтаж..

3.89грн.

Винтовой коннектор на два провода

Винтовой коннектор на два провода

Монтируется на печатную плату или макетную платуРасстояние между выводами 5 мм..

3.17грн.

Терминальный модуль для Arduino UNO

Терминальный модуль для Arduino UNO

Терминальный шилд под плату контроллера Arduino UNO для удобного монтажа кабелей периферийных датчик..

122.69грн.