
Для реализации данного примера нам понадобится:
Arduino nano: http://ali.pub/1x1jri
Драйвер шаговых двигателей вместе с самим шаговым двигателем: http://ali.pub/2bq1hs
Труба латунная 8 mm ну или любая труба или Вал данного диаметра.
Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.
Для начала давайте разберемся что такое шаговый двигатель
Шаговые двигатели — основа точной робототехники. В отличие от двигателей постоянного вращения, один оборот «шаговика» состоит из множества микроперемещений, которые и называют шагами. Другими словами, мы можем повернуть вал двигателя ровно на 90 градусов, и зафиксировать его в этом положении. Грубым аналогом шагового двигателя является серводвигатель.
Шаговики применяют там, где требуется очень точно дозировать перемещение актуатора. Самый очевидный пример — робот манипулятор. Чтоб механическая рука коснулась рабочим инструментом нужной точки, необходимо чтобы каждый из узлов повернулся на строго заданный угол. Погрешность в доли градуса в основании руки, приведет к огромной погрешности на эффекторе.
В данном примере мы используем маленький шаговый двигатель 28BYj-48 , а драйвер к нему ULN2003.
Выглядят они таким образом:

В моем случае данный драйвер и двигатель пришли с разными разъемами не подходящими друг к другу, но я решил данную проблему подключив двигатель к драйверу по этой схеме:

Важно! обратите внимание на перекрестие проводов, иначе если подключить все прямо работать не будет. И к ардуино часы подлючаются не по этой схеме! а к аналоговым пинам A1,A2,A3,A4.
Данный часы напечатаны на 3d принтере. Схемы взяты от сюда: https://www.thingiverse.com/thing:2738384 и отсюда https://www.thingiverse.com/thing:2381829
Крепление для квадратного шагового двигателя уже имеется в данной статье Thingiverse. Вам останется только скачать все и собрать.
Как видно будет ниже в видео и на картинке в начале статьи, у меня цифры приклеены термоклеем, и видно всякую “требуху” торчащую из под цифр. Так вот, не делайте моей ошибки и клейте только на прозрачный клей. Так как силикон потом не вычистишь.
Как собираются данные часы я показываю в видео вконце статьи.
Скетч для работы с данными часами:
// NuMechRon design by Victorrr161 https://www.thingiverse.com/thing:2381829
// Conversion for Arduino Nano and stepperboard ULN2003A by Jeroen Jonkman, 30/12/2017
// Wiring:
// Connect pin GND of the Arduino to pin GND of the stepper board
// Connect pin 5V of the Arduino to pin VCC of the stepper board
#define OUT1 A1 // Connect pin A1 of the Arduino to pin IN4 of the stepper board
#define OUT2 A2 // Connect pin A2 of the Arduino to pin IN3 of the stepper board
#define OUT3 A3 // Connect pin A3 of the Arduino to pin IN2 of the stepper board
#define OUT4 A4 // Connect pin A4 of the Arduino to pin IN1 of the stepper board
int countStep = 0; // Initialize countStep
void setup() // Handle setup
{
pinMode(OUT1, OUTPUT); // Use A1 as a digital output
pinMode(OUT2, OUTPUT); // Use A2 as a digital output
pinMode(OUT3, OUTPUT); // Use A3 as a digital output
pinMode(OUT4, OUTPUT); // Use A4 as a digital output
}
void loop() // Handle loop
{
stepping(); // Call stepping
delayMicroseconds(30943); // Pause loop, use value of 30943 for timekeeping or 1000 for testing at high speed
}
void stepping() // Handle stepping
{
switch(countStep) // Handle each step of countStep
{
case 0:
digitalWrite(OUT1, LOW);
digitalWrite(OUT2, LOW);
digitalWrite(OUT3, HIGH);
digitalWrite(OUT4, HIGH);
break;
case 1:
digitalWrite(OUT1, LOW);
digitalWrite(OUT2, LOW);
digitalWrite(OUT3, HIGH);
digitalWrite(OUT4, LOW);
break;
case 2:
digitalWrite(OUT1, LOW);
digitalWrite(OUT2, HIGH);
digitalWrite(OUT3, HIGH);
digitalWrite(OUT4, LOW);
break;
case 3:
digitalWrite(OUT1, LOW);
digitalWrite(OUT2, HIGH);
digitalWrite(OUT3, LOW);
digitalWrite(OUT4, LOW);
break;
case 4:
digitalWrite(OUT1, HIGH);
digitalWrite(OUT2, HIGH);
digitalWrite(OUT3, LOW);
digitalWrite(OUT4, LOW);
break;
case 5:
digitalWrite(OUT1, HIGH);
digitalWrite(OUT2, LOW);
digitalWrite(OUT3, LOW);
digitalWrite(OUT4, LOW);
break;
case 6:
digitalWrite(OUT1, HIGH);
digitalWrite(OUT2, LOW);
digitalWrite(OUT3, LOW);
digitalWrite(OUT4, HIGH);
break;
case 7:
digitalWrite(OUT1, LOW);
digitalWrite(OUT2, LOW);
digitalWrite(OUT3, LOW);
digitalWrite(OUT4, HIGH);
break;
default:
digitalWrite(OUT1, LOW);
digitalWrite(OUT2, LOW);
digitalWrite(OUT3, LOW);
digitalWrite(OUT4, LOW);
break;
}
countStep=countStep+1; // After each cycle add 1 to countStep
if(countStep==8)
{countStep=0;} // Reset countStep on rollover
}
Из скетча и можно понять что подключение к двигателю осуществляется вот таким образом:
| A1 | IN4 |
| A2 | IN3 |
| A3 | IN2 |
| A4 | IN1 |
Если двигатель у Вас вращается в другую сторону, то поменяйте местами провода.
Ну и подробности сборки и нюансы в видео: