
Для реализации данного примера нам понадобится:
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 | 
Если двигатель у Вас вращается в другую сторону, то поменяйте местами провода.
Ну и подробности сборки и нюансы в видео: