Uln2003 подключение к ардуино нано

Схема подключения ULN2003A

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

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

  • напряжение (максимальное): до 50V;
  • пиковый ток: 600 мА (на канал-500);
  • питание катушки: 12-48В;
  • тип корпуса: SO-16;
  • рабочие температуры: -60°C…+150°C;
  • имеются защитные диоды на выходе;
  • коэффициент заполнения: 100%.

Электрическая схема:

Важно! При разработке схем с этим модулем следует обращать внимание на пороги регулирования тока.

Т.к. микросхема универсальна, но все же предназначена для работы с p-МОП логикой (5В), в дальнейшем мы рассмотрим подключение ULN2003A к Arduino с применением униполярного шагового двигателя (модель может быть любой). С такими моторами данный модуль обычно работает в «паре». Оба – бюджетны по стоимости и отлично «ладят».

Для реализации сборки нам понадобятся такие аппаратные компоненты как: микроконтроллер Arduino Mini, ШД BYJ48 5В, драйвер ULN2003, источник питания на 5В, провода.

Схема подключения ULN2003A к Ардуино показана на скриншоте:


Для программирования и дальнейшего применения сборки нужен скетч. Он стандартный, его можно отыскать в среде разработки IDE по пути: Файл/Примеры. Подключаем.

Теперь заливаем прошивку:

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

Источник

Подключение шагового двигателя 28BYJ-48-5V к Arduino. Часть 1.

В этой статье мы подключаем шаговый двигатель 28BYJ-48-5V к плате Arduino через драйвер шагового двигателя на безе микросхемы ULN2003.

Для подключения понадобится:

Для реализации проекта подключения необходимо установить библиотеку Stepper_28BYJ в среду разработки Ардуино IDE.

Библиотека Stepper_28BYJ это оптимальная библиотека, написанная на основе стандартной общей библиотеки Stepper являющейся частью среды Arduino IDE. Она была созданна конкретно для этого шагового двигателя 28BYJ-48-5V и учитывающая все его индивидуальные параметры.

Установить библиотеку Stepper_28BYJ в среду Arduino IDE Вам поможет статья «Установка библиотек в Arduino IDE» =>>

Сборка и подключение:

Внимание!
Для драйвера на основе микросхемы ULN2003 DARLINGTON и соответственно мотора 28BYJ-48-5V, который получает питание от драйвера рекомендуется подавать питание от внешнего источника, в нашем случае (только для осуществления программирования) коммутируем подачу питания непосредственно от контроллера Ардуино (мотор работает без нагрузки и непродолжительное время) через контакты (Vin) для (+) и (GND) для (-).

Драйвер управляется через четыре управляющих входа обозначенные как (IN1, IN2, IN3, IN4), именно к ним необходимо подключить соответственно выходы (Pin) с номерами 8 Pin, 9 Pin, 10 Pin и 11 Pin на плате контроллера Ардуино (как это показано на изображении ниже).

Схема подключения на примере платы контроллера Arduino UNO R3, модуля драйвера ULN2003 и шагового двигателя 28BYJ-48-5V.

Загружаем скетч:

Для загрузки скетча необходимо в среде разработки Ардуино IDE нажать вкладку новый проект и в открывшиеся окошко поместить скетч приведенный ниже:

Скетч, который необходимо загрузить в контроллер через среду разработки Ардуино IDE:

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

Если по каким либо причинам Вы не смогли самостоятельно разобраться в подключении или программировании шагового двигателя 28BYJ-48, обратитесь к сотрудникам магазина робототехники и мехатроники — Robot-Kit.ru.

Наш сайт: www.Robot-kit.ru
Электронная почта: mos@robot-kit.ru

У нас Вы найдете необходимую поддержку и помощь.

Источник

«Шаговый двигатель 28BYJ-48-5V с драйвером на ULN2003» — Урок № 8

Скоро на моём канале в YOUTUBE появится новый урок «Шаговый двигатель 28BYJ-48-5V с драйвером на ULN2003».

Характеристики

  • Номинальное напряжение: 5 В
  • Угол шага 5,625 ° / 64
  • Передаточное отношение редуктора:1/64
  • Частота 100 Гц/> Сопротивление постоянному току 50Ω ± 7% (25 ℃)
  • Крутящий момент> 34.3mN.m (120 Гц)
  • Момент трения 600-1200 gf.cm
  • Класс изоляции 600VAC/1mA/1s
  • Шум Пример из видеоурока

Новости

На выставке CES 2020 также было представлено новое поколение плат Arduino Portenta. Оно было разработано на требовательные промышленные приложения. Portenta H7 поддерживает код Arduino, Python и JavaScript, что делает его доступным для разработчиков с различными знаниями языков .

Производитель Arduino запускает новую серию плат Nano — Arduino Nano 33 BLE. Платы имеют те же размеры, что и плата Ардуино Нано, на чипе U-blox NINA-B306 с микроконтроллером Nordic nRF52840 и беспроводным модулем Bluetooth BLE

Последнее из блога

CashCode-SM 2073

Приветствую всех моих подписчиков и гостей канала.
Давненько я ничего не выкладывал. Вот и это видео не совсем в моём формате. Решил я купить себе 3-d принтер,
Вот я и избавляюсь от некоторых вещей. Все они в хорошем состоянии и покупались под какой-нибудь проект или просто для съёмок видеоурока. У меня накопилось уже много такого добра, так что начинается распродажа.

Сегодня я расскажу про функцию pinMode в Ардуино и нестандартном присваивании значений пинам Ардуино. Так же вы узнаете про состояние OUTPUT и INPUT, в чём разница и многое другое.

Источник

Шаговый мотор 28BYJ-48 (5V) + драйвер SBT0811 (на микросхеме ULN2003) + Arduino NANO.

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

В этой и нескольких следующих статьях я планирую продемонстрировать, как управлять различными видами моторов.
Начнём мы своё изучение с шагового двигателя Step motor 28BYJ-48 (5V).


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

Шаговый двигатель — это двигатель, который может точно перемещаться на минимально возможный угол, называемый шагом. Этот угол обусловлен устройством каждого конкретного мотора.
Преимуществом шаговых двигателей является возможность его неприрывного вращения, подобно двигателю постоянного тока, тогда как сервоприводы, обычно, ограничены углом поворота в диапазоне от 0 до 180°.
Недостатком шаговых двигателей является более сложное управление, чем в случаях с другими типами моторов.
Двигатель данного мотора имеет четыре обмотки, которые запитываются последовательно, чтобы повернуть вал с магнитом.

Получается 4 фазы, поэтому такой электромагнитный прибор называют шаговый 4-х фазный двигатель. Каждый из контактов четырех фаз соединен с красным проводом. Двигатель является к униполярным (однополярным) благодаря схеме соединения фаз. К красному проводу подключается питание. Перемещение вала на шаг происходит под действием импульса тока.
28BYJ-48-5V содержит пластмассовый понижающий редуктор с передаточным числом 64:1.

Основные характеристики мотора:

Тип мотора униполярный шаговый двигатель
Число фаз 4
Рабочее напряжение 5 вольт
Угол шага двигателя без учета редуктора при 4-ступенчатой последовательности (шаговый режим) 11,25 ° (32 шага на оборот),

при 8-ступенчатой последовательности (полушаговый режим — рекоммендован) 5,625 ° (64 шага на оборот)

Передаточное отношение редуктора 64:1
Количество шагов вала мотора за один оборот в 4-ступенчатой последовательности 32 x 64 = 2048

в 8-ступенчатой последовательности 64 x 64 = 4096.

Cкорость вращения номинальная 15 об/мин,

максимальная 25 об/мин

Подключение 5-выводов (к контроллеру двигателя)
Частота 100 Гц
Сопротивление по постоянному току 50 Ом ± 7%(25°C)
Частота под нагрузкой > 600 Гц
Частота на холостом ходу > 1000 Г
Крутящий момент > 34.3 мН*м (120 Гц)
Момент самопозиционирования > 34.3 мН*м
Стопорящий момент 600-1200 г*см
Тяга 300 г*см
Сопротивление изоляции > 10 МОм (500 В)
Класс изоляции A
Шум /*Программа для шагового двигателя 28BYJ-48 (5V). Двигатель делает полный оборот в одну сторону, затем в другую*/

/*У данного мотора 4 провода (син., розов., жёлт., оранж.), которые мы подключаем к контактам ардуино. Номера контактов
указываем в массиве MotorPins, в порядке, соответствующем перечислению цветов, в нашем случае с D9 по D12*/

/*Целочисленная константа, показывающая количество фаз подачи сигналов для одного шага мотора. Для полушагового режима — 8
Для шагового — 4*/
const int OneTurnPhasesCount = 8;

/*Целочисленная константа, показывающая задержку в миллисекундах между фазами подачи сигналов мотору. Для полушагового режима — 2,
для шагового — 3*/
const int TurnPhasesDelay = 2;

/*Целочисленная константа, показывающая задержку в миллисекундах между переходами к вращению в другую сторону*/
const int Turn360Delay = 100;

/*Целочисленная константа, показывающая количество шагов, которые должен выполнить двигатель за полный оборот на 360 град.
Внутренний вал мотора совершает 64 шага за полный оборот, с учётом передаточного числа редуктора 64:1, то мотор должен совершать 64×64=4096 шагов*/
const int CountStepsOneDirection = 4096;

/*Целочисленная переменная, показывающая количество шагов, которые выполнил двигатель в одном направлении*/
int CurrentStepOneDirection = 0;

/*Целочисленная переменная, показывающая номер текущей фазы*/
int CurrentPhase = 0;

/*Целочисленная переменная, показывающая направление вращения мотора: 1 — по часовой стрелке, -1 — против*/
int TurnDirection = 1;

// Для полушагового режима

/*Массив, в котором указано какие сигналы подавать на контакты мотора в той или иной фазе. [фаза][контакт]. Контакты даются в порядке, перечисленном в массиве MotorPins — оранж., жёлт., розов., син. 0 — нет сигнала, 1 — есть сигнал*/
bool MotorTurnPhases[8][4] = <
< 1, 0, 0, 0>,
< 1, 1, 0, 0>,
< 0, 1, 0, 0>,
< 0, 1, 1, 0>,
< 0, 0, 1, 0>,
< 0, 0, 1, 1>,
< 0, 0, 0, 1>,
< 1, 0, 0, 1>>;

/*Функция CheckLastPhase проверяет не вышел ли номер текущей фазы за пределы размера массива MotorTurnPhases, который определяется переменной OneTurnPhasesCount и не пора ли поменять направление вращения*/
void CheckLastPhase()
<
if (CurrentPhase >= OneTurnPhasesCount)
<
CurrentPhase = 0;
>
if (CurrentPhase //Увеличиваем шаг на 1
CurrentStepOneDirection++;

//проверяем не совершил ли мотор полный оборот
if(CurrentStepOneDirection == CountStepsOneDirection)
<
CurrentStepOneDirection = 0;
TurnDirection *= -1;
delay(Turn360Delay);
>
>

/*Функция, в которой происходит инициализация всех переменных программы*/
void setup()
<
/*перебираем в цикле все контакты массива MotorPins и присваиваем им значение выходных, то есть дающих напряжение в 5В*/
for (int i = 0; i /*Функция-цикл в которой задаётся поведение программы*/
void loop()
<
//проверяем индекс текущей фазы
CheckLastPhase();

/*подаём напряжения на контакты мотора соответственно фазе, заданной в массиве MotorTurnPhases*/
for (int i = 0; i //переходим к другой фазе
CurrentPhase += TurnDirection;

// Пауза между фазами
delay(TurnPhasesDelay);
>

Если мы имеем дело с другими, моторами, требующими напряжение более 5В, то нужен дополнительный драйвер. Обычно, вместе с мотором 28BYJ-48 поставляется модуль SBT0811, содержащий микросхему ULN2003.

Он позволяет управлять мощными нагрузками с током до 500 мА и напряжением до 12 В на канал с помощью слабого тока микроконтроллера, такого как Arduino.
Плата содержит 4 контакта IN1-IN4, которые следует соединить проводами с контактами платы Arduino. От них будут поступать управляющие сигналы с микроконтроллера.
Белый разъём на плате — для подключения мотора.
Два контакта: «- + 5-12V» — это выводы для подключения внешнего источника питания от 5 до 12В. В нашем случае, источником питания будет сама плата Arduino NANO, так как наш мотор питается от 5V. Поэтому эти два контакта драйвера мы подключаем к 5V и GND разъёмам на плате Arduino.
Четыре светодиода на плате — это индикаторы шага, показывают на какой из четырёх проводов мотора подаётся напряжение.

Схема соединения такая.

Для того, чтобы её собрать воспользуемся такими, заблаговременно подготовленными проводочками, у которых на одном конце разъём, на другом штырёк.

Для удобства их присоединения к плате Arduino UNO, воспользуемся пластиковым элементом, напечатанным на 3D принтере, к которому приклеены два ряда контактов попарно спаянные с обратной стороны. В один ряд втыкается плата Arduino, в другой провода.

Вот так выглядит наша схема в сборке.

Подключаем питание к плате Arduino с предыдущей залитой программой. Устройство должно работать точно таким же образом, как и в предыдущем примере, с прямым подключением мотора к Arduino.
Если мы имеем дело с, скажем, 9ти вольтовым мотором, то у нас появляется в схеме блок питания на 9V. Тогда, «+» контакт на драйвере, для внешнего источника питания мы соединяем не с платой Arduino, а с проводом питания от блока, по такой схеме:

Добавляем кнопку и потенциометр (переменный резистор) в схему.

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

Мы к ним припаяли провода со штырьками.
Для подключения их к плате Arduino, нам понадобятся еще вот такие провода и два резистора на 10 КОМ.

Всё подключаем согласно схеме.

Вот что получилось.

Пишем код программы.

/*Программа для шагового двигателя 28BYJ-48 (5V). В схеме есть кнопка и потенциометр. В зависимости от положения кнопки (пол. 1, пол. 2, выключено) мотор вращается либо в одну сторону, либо в другую, либо стоит на месте, а потенциометр влияет на скорость вращения.*/

/*У данного мотора 4 провода (оранж., жёлт., розов., син.), которые мы подключаем к контактам ардуино. Номера контактов указываем в массиве MotorPins, в порядке, соответствующем перечислению цветов, в нашем случае с D12 по D9*/
int MotorPins[4] = <9, 10, 11, 12>;

/*Контакты от двух положений кнопки — цифровые*/
const int ButtonOn1 = 5;
const int ButtonOn2 = 4;

/*Контакт регистрирующий значение потенциометра — аналоговый*/
const int PotenciomData = 3;

/*Целочисленная константа, показывающая количество фаз подачи сигналов для одного шага мотора. Для полушагового режима — 8
Для шагового — 4*/
const int OneTurnPhasesCount = 8;

/*Целочисленная переменная, показывающая задержку в миллисекундах между фазами подачи сигналов мотору. Для полушагового режима — 2,
для шагового — 3*/
int TurnPhasesDelay = 2;

/*Целочисленная переменная, показывающая номер текущей фазы*/
int CurrentPhase = 0;

//состояние кнопки включено-выключено
int ButtonState = 0;

/*Целочисленная переменная, показывающая направление вращения мотора: 1 — по часовой стрелке, 0 — против*/
int TurnDirection = 1;

/*целочисленная константа, показывающая временную задержку между считыванием состояния кнопки и потенциометра*/
const int CheckButtonDelay = 15;

/*Целочисленная переменная показывающая, сколько прошло времени и не пора ли считывать состояние кнопки*/
int CurrentButtonDelay = 0;

//Для полушагового режима

/*Массив, в котором указано какие сигналы подавать на контакты мотора в той или иной фазе. [фаза][контакт]. Контакты даются в порядке, перечисленном в массиве MotorPins — оранж., жёлт., розов., син. 0 — нет сигнала, 1 — есть сигнал*/
bool MotorTurnPhases[8][4] = <
< 1, 1, 0, 0>,
< 0, 1, 0, 0>,
< 0, 1, 1, 0>,
< 0, 0, 1, 0>,
< 0, 0, 1, 1>,
< 0, 0, 0, 1>,
< 1, 0, 0, 1>,
< 1, 0, 0, 0>>;

/*Функция, в которой происходит инициализация всех переменных программы*/
void setup()
<
/*перебираем в цикле все контакты массива MotorPins и присваиваем им значение выходных, то есть дающих напряжение в 5В*/
for (int i = 0; i /*Функция-цикл в которой задаётся поведение программы*/
void loop()
<
if(CurrentButtonDelay >= CheckButtonDelay)
<
CheckButtonState();
CurrentButtonDelay = 0;
>

if(ButtonState != 0)
<
//проверяем индекс текущей фазы
CheckLastPhase();

/*подаём напряжения на контакты мотора соответственно фазе, заданной в массиве MotorTurnPhases*/
for (int i = 0; i //переходим к другой фазе
CurrentPhase += TurnDirection;

// Пауза между фазами
delay(TurnPhasesDelay);
>

/*Функция CheckLastPhase проверяет не вышел ли номер текущей фазы за пределы размера массива MotorTurnPhases, который определяется переменной OneTurnPhasesCount*/
void CheckLastPhase()
<
if (CurrentPhase >= OneTurnPhasesCount)
<
CurrentPhase = 0;
>
if (CurrentPhase /*функция, в которой проверяется текущее состояние кнопки*/
void CheckButtonState()
<
int CurrentButtonState = 0, CurrentButtonDirection = 0, CurrentTurnPhasesDelay = 0;

//считываем данные с положения кнопки I
bool readbuttonparam = digitalRead(ButtonOn1);

if(readbuttonparam)
<
CurrentButtonState = 1;
CurrentButtonDirection = 1;
>

//считываем данные с положения кнопки II
readbuttonparam = digitalRead(ButtonOn2);

if(readbuttonparam)
<
CurrentButtonState = 1;
CurrentButtonDirection = -1;
>

/*Проверяем, изменилось ли состояние кнопки по сравнению с предыдущим, и если изменилось, то записываем изменения в глобальные переменные*/
if(ButtonState != CurrentButtonState)
<
ButtonState = CurrentButtonState;
>

if(TurnDirection != CurrentButtonDirection)
<
TurnDirection = CurrentButtonDirection;
>

CurrentTurnPhasesDelay = map(analogRead(PotenciomData), 0, 1023, 2, CheckButtonDelay);

if(TurnPhasesDelay != CurrentTurnPhasesDelay)
<
TurnPhasesDelay = CurrentTurnPhasesDelay;
>
>

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

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

Источник

Adblock
detector