Код для поиска

Использование шагового двигателя 28BYJ-48 с драйвером ULN2003 и Arduino

Использование шагового двигателя 28BYJ-48 с драйвером ULN2003 и Arduino

В этом учебном пособии мы научимся управлять шаговым двигателем 28BYJ-48 с помощью драйвера ULN2003 и Arduino. Эта конфигурация позволяет точно контролировать положение и скорость двигателя. К концу этого проекта вы сможете вращать двигатель в обе стороны и эффективно контролировать его шаги.

Мы будем использовать шаговый двигатель 28BYJ-48, который является популярным выбором для различных проектов в области робототехники и автоматизации благодаря своей низкой стоимости и простоте использования. Плата драйвера ULN2003 соединяет шаговый двигатель с Arduino, позволяя нам отправлять сигналы шагов, которые контролируют движение двигателя. Этот учебник проведет вас через необходимую проводку и код, чтобы заставить ваш двигатель вращаться.

Для дальнейшего разъяснения, пожалуйста, обратитесь к видео, связанному с этим учебным пособием (в видео на 0:45).

Объяснение аппаратного обеспечения

Ключевыми компонентами этого проекта являются шаговый двигатель 28BYJ-48 и драйверная плата ULN2003. Шаговый двигатель состоит из нескольких катушек, которые могут быть активированы в определенной последовательности для создания вращения. Драйвер ULN2003 действует как переключатель, позволяя Arduino контролировать подачу питания на каждую катушку.

Драйвер ULN2003 использует массив транзисторов Дарлингтона для управления более высоким током, необходимым для шагового двигателя. Когда вывод с Arduino подает сигнал HIGH, это позволяет току течь к соответствующей катушке в двигателе, заставляя его двигаться. Это обеспечивает точный контроль над углом вращения и скоростью двигателя.

Технические характеристики

ПроизводительULN2003
Номер деталиULN2003
Логическое/входное напряжение5 В
Напряжение питания5-30 В (макс)
Выходной ток (на канал)500 мА макс
Пиковый ток (на канал)2 A макс
Руководство по частоте ШИМN/A
Входные логические пороги0.8 В (низкое), 2.4 В (высокое)
Падение напряжения / RDS(включено)/ насыщение1,5 В макс
Термические пределымакс. 70 °C
ПакетDIP-16
Заметки / вариантыОбычно используется с шаговыми двигателями на 5 В.

  • Убедитесь, что драйвер может справиться с текущими требованиями вашего мотора.
  • Используйте радиаторы, если необходимо, для управления тепловыми пределами.
  • Проверьте, чтобы все соединения были надежными, чтобы избежать плавающих входов.
  • Проверьте мотор, запустив простые последовательности шагов, прежде чем интегрировать его в более крупные проекты.
  • Убедитесь, что мотор питается от достаточного напряжения.

Инструкции по проводке

Чтобы подключить шаговый двигатель 28BYJ-48 к драйверу ULN2003 и Arduino, выполните следующие шаги:

Сначала подключите мотор к драйверу ULN2003. У мотора четыре провода, обычно закодированные цветами: оранжевый, желтый, розовый и синий. Подключите эти провода к соответствующим выходным контактам на драйвере ULN2003. Подключения следующие:

  • Orangeпровод кOUT1
  • Yellowпровод кOUT2
  • Pinkпровод кOUT3
  • Blueпровод кOUT4

Затем подключите драйвер ULN2003 к Arduino. Входные контакты драйвера соответствуют четырем цифровым контактам на Arduino. Например:

  • IN1к Pin 10
  • IN2кPin 11
  • IN3кPin 12
  • IN4кPin 13

Наконец, подключите выводы питания и заземления драйвера ULN2003 к Arduino. ПодключитеVCCподключите к выходу 5В Arduino иGNDподключите к земле Arduino. Убедитесь, что все соединения надежны, прежде чем включать систему.

Примеры кода и пошаговое руководство

В разделе настройки кода Arduino мы определяем контакты, подключенные к драйверу ULN2003:

int Pin1 = 10; 
int Pin2 = 11; 
int Pin3 = 12; 
int Pin4 = 13; 

Здесь мы объявляем четыре целочисленные переменные:Pin1,Pin2,Pin3, иPin4, которые соответствуют цифровым выводам на Arduino. Эти выводы будут управлять движением шагового двигателя.

В вsetup()функция, мы настраиваем эти контакты как выходы:

void setup() { 
 pinMode(Pin1, OUTPUT);  
 pinMode(Pin2, OUTPUT);  
 pinMode(Pin3, OUTPUT);  
 pinMode(Pin4, OUTPUT);  
} 

Эта настройка обеспечивает возможность Arduino отправлять сигналы драйверу ULN2003 для управления мотором.pinModeфункция устанавливает каждый вывод в режим OUTPUT, позволяя им отправлять сигналы.

Наконец, в основном цикле мы создаем оператор switch case для управления шагами мотора в зависимости от переменной._step:

switch(_step){ 
   case 0: 
     digitalWrite(Pin1, LOW);  
     digitalWrite(Pin2, LOW); 
     digitalWrite(Pin3, LOW); 
     digitalWrite(Pin4, HIGH); 
   break;  
   // Additional cases follow
}

В этом отрывке мы используемdigitalWriteотправлять HIGH или LOW сигналы на каждый вывод в зависимости от тока_step. Это управляет тем, какие катушки активированы, позволяя двигателю вращаться. Полный код, который интегрирует эти фрагменты, будет загружен под статьей.

Демонстрация / Что ожидать

Как только всё будет подключено правильно и код загружен, шаговый двигатель должен вращаться в ответ на сигналы от Arduino. Вы можете протестировать двигатель, изменив задержку в цикле или изменив количество шагов, чтобы увидеть, как он реагирует. Имейте в виду, что если двигатель не будет правильно запитан, он может не двигаться или вести себя непредсказуемо.

Главы

  • Введение - 0:00
  • Объяснение аппаратного обеспечения - 1:30
  • Инструкции по проводке - 3:15
  • Примеры кода и пошаговое руководство - 5:00
  • Демонстрация / Что ожидать - 7:45
6-The source code for stepper motor 28BYJ-48 with ULN2003 for Arduino
Язык: C++
/*
 * Нужна схема подключения из этого кода: https://youtu.be/0glBk917HPg
 * Приобретите мой курс по Arduino на Udemy.com http://robojax.com/L/?id=62
 * 
 * Получите этот код и другие коды Arduino на RoboJax.com
 * Учитесь программировать на Arduino шаг за шагом в структурированном курсе со всеми материалами, схемами подключения и библиотеками
 * в одном месте. Приобретите мой курс на Udemy.com http://robojax.com/L/?id=62
 * 
 * Если вы нашли этот урок полезным, пожалуйста, поддержите меня, чтобы я мог продолжать создавать
 * контент подобного рода.
 * 
 * или сделайте пожертвование с помощью PayPal http://robojax.com/L/?id=64
 * 
 * Этот код предоставлен "КАК ЕСТЬ" без каких-либо гарантий или обязательств. Свободно используется, если вы оставите это уведомление нетронутым.
 * Этот код был загружен с RoboJax.com
 * Эта программа является бесплатным программным обеспечением: вы можете перераспределять и/или изменять
 * ее на условиях Общей публичной лицензии GNU, опубликованной
 * Фондом свободного программного обеспечения, либо версии 3 этой лицензии, либо
 * (по вашему выбору) любой более поздней версии.
 * 
 * Эта программа распространяется в надежде на то, что она будет полезной,
 * но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии
 * ТОВАРНОГО СООТВЕТСТВИЯ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. См. Общую публичную лицензию GNU для получения дополнительных сведений.
 * 
 * Вы должны были получить копию Общей публичной лицензии GNU
 * вместе с этой программой. Если нет, смотрите <https://www.gnu.org/licenses/>.
 */
int Pin1 = 10;
int Pin2 = 11;
int Pin3 = 12;
int Pin4 = 13;
int _step = 0;
boolean dir = true; // ложь=по часовой стрелке, истина=против часовой стрелки
int count=0;
void setup()
{
 pinMode(Pin1, OUTPUT);
 pinMode(Pin2, OUTPUT);
 pinMode(Pin3, OUTPUT);
 pinMode(Pin4, OUTPUT);
}
 void loop()
{
 switch(_step){
   case 0:
     digitalWrite(Pin1, LOW);
     digitalWrite(Pin2, LOW);
     digitalWrite(Pin3, LOW);
     digitalWrite(Pin4, HIGH);
   break;
   case 1:
     digitalWrite(Pin1, LOW);
     digitalWrite(Pin2, LOW);
     digitalWrite(Pin3, HIGH);
     digitalWrite(Pin4, HIGH);
   break;
   case 2:
     digitalWrite(Pin1, LOW);
     digitalWrite(Pin2, LOW);
     digitalWrite(Pin3, HIGH);
     digitalWrite(Pin4, LOW);
   break;
   case 3:
     digitalWrite(Pin1, LOW);
     digitalWrite(Pin2, HIGH);
     digitalWrite(Pin3, HIGH);
     digitalWrite(Pin4, LOW);
   break;
   case 4:
     digitalWrite(Pin1, LOW);
     digitalWrite(Pin2, HIGH);
     digitalWrite(Pin3, LOW);
     digitalWrite(Pin4, LOW);
   break;
   case 5:
     digitalWrite(Pin1, HIGH);
     digitalWrite(Pin2, HIGH);
     digitalWrite(Pin3, LOW);
     digitalWrite(Pin4, LOW);
   break;
     case 6:
     digitalWrite(Pin1, HIGH);
     digitalWrite(Pin2, LOW);
     digitalWrite(Pin3, LOW);
     digitalWrite(Pin4, LOW);
   break;
   case 7:
     digitalWrite(Pin1, HIGH);
     digitalWrite(Pin2, LOW);
     digitalWrite(Pin3, LOW);
     digitalWrite(Pin4, HIGH);
   break;
   default:
     digitalWrite(Pin1, LOW);
     digitalWrite(Pin2, LOW);
     digitalWrite(Pin3, LOW);
     digitalWrite(Pin4, LOW);
   break;
 }
 if(dir){
   _step++;
 }else{
   _step--;
 }
 if(_step>7){
   _step=0;
 }
 if(_step<0){
   _step=7;
 }
 delay(1);

}

Вещи, которые могут вам понадобиться

Файлы📁

Нет доступных файлов.