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