1. Digispark или его клон.
2. Шаговый двигатель с драйвером 28BYJ-48
3. Блок питания на 5В или 12В (зависит от моторчика) и с током не менее 1А.
4. Провода.
Подключаем входы 1-2-3-4 драйвера к пинам 0-1-2-3 Дигиспарка, подаем на оба питание. На пин 4 Дигиспарка вешаем кнопку, замыкающую пин на общий. После включения реле поворачивает мотор на 180 градусов каждый час. Вращение реверсивное. Раз крутим туда, другой обратно. Можно выключить в коде и крутить в одну сторону. Кнопка для установки механизма лотка в нужное начальное положение. Пока кнопка нажата и удерживается, мотор плавно вращается в одном направлении с шагом 1 градус и паузой 0,2 сек.
Код: Выделить всё
#include <Stepper.h>
#define buttonPin 4
#define STEPS 100
# define waitTime 30 //3600 каждый час на 180 градусов
unsigned long loopTime;
boolean direct;
Stepper egg_stepper(STEPS, 0, 2, 1, 3);
void setup() {
egg_stepper.setSpeed(100);
pinMode (buttonPin, INPUT_PULLUP);
}
void loop()
{
unsigned long currentTime;
currentTime = millis() / 1000;
byte i;
if (!digitalRead(buttonPin)) {
egg_stepper.step(5);
delay(200);
for (i = 0; i < 4; i++) digitalWrite(i, LOW);
}
if (currentTime > (loopTime + waitTime)) {
direct = !direct;
loopTime = currentTime;
turnEgg(direct);
}
}
void turnEgg(boolean dir) {
byte i;
if (dir) egg_stepper.step(1019);
else egg_stepper.step(-1019);
for (i = 0; i < 4; i++) digitalWrite(i, LOW);
}