Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Аналоговые POV-часы на Arduino Nano: персистенция зрения с 17 светодиодами

Компоненты и материалы

Принцип POV

Persistence of Vision — светодиоды последовательно зажигаются в определённых углах вращения. Мозг складывает вспышки в непрерывное изображение. Здесь — аналоговое циферблат: часы, минуты, секунды, часовые деления, внутренний круг.

Механика

Светодиоды на радиальной плате, вращаемой мотором. Аккумулятор в центре вращения — иначе вибрация на высоких оборотах. Скорость регулируется лабораторным БП. Значение delayMicroseconds в коде подбирается под обороты.

Распределение светодиодов

Код

// hobbyprojects // ArduinoNanoPropellerLEDAnalogClock20190403A
int LED[16] = {2,3,4,5,6,7,8,9,10,11,12,A1,A2,A3,A4,A5};
int sensorPin = A0;

unsigned long previousTime = 0;
byte hours = 12, minutes = 15, seconds = 0;

void setup() {
  for (int i=0;i<16;i++) pinMode(LED[i], OUTPUT);
  pinMode(sensorPin, INPUT_PULLUP);
  if (hours == 12) hours = 0;
}

void loop() {
  // ожидание прохода магнита (LOW)
  while (digitalRead(sensorPin) == LOW);
  // синхронизация времени каждую секунду
  if (millis() >= previousTime) {
    previousTime += 1000;
    if (++seconds == 60) { seconds=0; if(++minutes==60){ minutes=0; if(++hours==12) hours=0; } }
  }

  int propeller_posn = 30; // стартовый угол (подстройка)
  for (int n=0; n<60; n++) {
    drawMinuteMarker();           // LED16
    if (isHourMarker(propeller_posn)) drawHourMarker();      // LED15,14
    if (isQuarterMarker(propeller_posn)) drawQuarterMarker();// LED13,12
    if (isHourHand(propeller_posn)) drawHoursHand();         // LED1-7
    if (propeller_posn == minutes) drawMinutesHand();        // LED1-9
    if (propeller_posn == seconds) drawSecondsHand();        // LED1-11

    delayMicroseconds(140); // ширина пикселя (подстройка под скорость)
    displayClear();
    drawInnerCircle();          // LED1 мигает
    delayMicroseconds(600);     // зазор между пикселями

    propeller_posn++; if (propeller_posn==60) propeller_posn=0;
  }

  while (digitalRead(sensorPin) == HIGH); // ждём следующий оборот
}

// функции отрисовки: установка HIGH на нужных LED
void displayClear() { for(int i=0;i<16;i++) digitalWrite(LED[i],LOW); }
void drawMinuteMarker() { digitalWrite(LED[15],HIGH); }
void drawHourMarker() { digitalWrite(LED[14],HIGH); digitalWrite(LED[13],HIGH); }
void drawQuarterMarker() { digitalWrite(LED[12],HIGH); digitalWrite(LED[11],HIGH); }
void drawHoursHand() { for(int i=0;i<7;i++) digitalWrite(LED[i],HIGH); }
void drawMinutesHand() { for(int i=0;i<9;i++) digitalWrite(LED[i],HIGH); }
void drawSecondsHand() { for(int i=0;i<11;i++) digitalWrite(LED[i],HIGH); }
void drawInnerCircle() { digitalWrite(LED[0],HIGH); delayMicroseconds(30); digitalWrite(LED[0],LOW); }

bool isHourMarker(int p) { return p%5==0; }
bool isQuarterMarker(int p) { return p%15==0; }
bool isHourHand(int p) { return (p == hours*5) || (p==0 && hours==0); }

Настройка: измените delayMicroseconds(140) и 600 под скорость мотора. Начальный propeller_posn=30 — угол от метки Холла до 12 часов.

Схема

Светодиоды через резисторы 100 Ом к пинам. Датчик Холла: сигнал → A0, питание → 5V/GND. Мотор от внешнего БП. Step-up от Li-ion питает Arduino.

Производственный процесс

  1. Сборка светодиодного секвенсора на таймере 555 и счетчике 4017: деление частоты и устранение дребезга
  2. Кукушка: история, мастерство и современная эволюция
  3. Сделай свой LUMAZOID: DIY Arduino музыкальный визуализатор
  4. Arduino POV-часы: сборка дисплея на эффекте сохранения образа
  5. Устройство точного измерения давления и расхода воздуха на аналоговом датчике
  6. Создание рулетки на 37 светодиодов с Arduino Nano
  7. Создание пользовательских LED-часов с будильником — видно с 12 метров
  8. 3D RGB Arduclock — Bluetooth-часы на адресных LED с RTC
  9. Компактное руль-триммер для FlightGear на Arduino Nano
  10. Интерактивный LED-дисплей в двери с PIR-датчиком — новогоднее приветствие на Arduino