Працюємо з 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 размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
Датчик відстані 10 ... 80 см інфрачервоний

Датчик відстані 10 ... 80 см інфрачервоний

Датчик відстані на інфрачервоному світлодіоді з аналоговим виходом для підключення прямо на аналогов..

138.03грн.

Трансформатор струму 0-10А

Трансформатор струму 0-10А

Трансформатор струму призначений для вимірювання сили змінного струму, що тече через дріт. Для підкл..

52.85грн.

Помпа для відсмоктування припою

Помпа для відсмоктування припою

Інструмент для відбору зайвого припою з друкованої плати.Необхідно попередньо розплавити припой за д..

57.48грн.

Уроки Arduino для новачків 1.1.3 Пряме програмування мікроконтролера ICSP

Уроки Arduino для новачків 1.1.3 Пряме програмування мікроконтролера ICSP

На цей раз ми поговоримо про те, як програмувати Arduino, не звичайним способом, не через звичн..

Тримач для батарейок 3хAA

Тримач для батарейок 3хAA

Бокс для трьох пальчикових батарейок типу ААЗагальна напруга на вихідних дротах бокса вийде 4,5 В..

20.47грн.