Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Analoge-stijl LED Persistence-of-Vision Klok – DIY Arduino Nano Project

Onderdelen en benodigdheden

  • 1x Arduino Nano R3
  • 17x LED (algemeen)
  • 1x Hall Effect Sensor
  • 17x Weerstand 100 ohm
  • 1x DC Motor (algemeen)
  • 1x Boost (Opwaarts) Schakelende Regelaar, Vast

Benodigde tools en machines

  • Solderbout

Apps en online diensten

  • Arduino IDE

Over dit project

Persistence of Vision (POV) displays zijn LED-displays die beelden tonen door een deel van het beeld op een gegeven moment weer te geven, in snelle opeenvolging. De menselijke hersenen waarnemen dit als een continu beeld.

Op de website "hobby projects" wordt een eenvoudig maar visueel effectieve analoge-stijl klok gepresenteerd. De elektronica bestaat uit een Arduino Nano, 17 LED-diodes en een Hall-effect sensor. LED-groepen d1-d11, d12-d16 en d17 hebben verschillende kleuren voor beter visueel effect. Het apparaat wordt gevoed door een Li-ion accu via een opwaarts-converter (boost regulator).

De grootste uitdaging was mechanische stabiliteit. In de eerste poging was de accu excentrisch gemonteerd, wat bij hogere draaisnelheid grote trillingen gaf. Oplossing: accu in het draaicentrum plaatsen.

Analoge-stijl LED Persistence-of-Vision Klok – DIY Arduino Nano Project

Voor rotatie: 12V DC-motor op variabele voeding voor snelheidscontrole. Afhankelijk van de draaisnelheid moet in de code de waarde van delayMicroseconds aangepast worden.

De gepresenteerde video is niet helder genoeg; hiervoor is een camera met hogere framerate nodig.

Code

Arduino Code
// hobbyprojects // ArduinoNanoPropellerLEDAnalogClock20190403A
int LED1 = 2; int LED2 = 3; int LED3 = 4; int LED4 = 5; int LED5 = 6;
int LED6 = 7; int LED7 = 8; int LED8 = 9; int LED9 = 10; int LED10 = 11;
int LED11 = 12; int LED12 = A1; int LED13 = A2; int LED14 = A3;
int LED15 = A4; int LED16 = A5;
int sensorPin = A0;

unsigned int n, ADCvalue, propeller_posn;
unsigned long previousTime = 0;
byte hours = 12;   // uren instellen
byte minutes = 15; // minuten instellen
byte seconds = 0;  // seconden instellen
int val;

void setup() {
  pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT); pinMode(LED5, OUTPUT); pinMode(LED6, OUTPUT);
  pinMode(LED7, OUTPUT); pinMode(LED8, OUTPUT); pinMode(LED9, OUTPUT);
  pinMode(LED10, OUTPUT); pinMode(LED11, OUTPUT); pinMode(LED12, OUTPUT);
  pinMode(LED13, OUTPUT); pinMode(LED14, OUTPUT); pinMode(LED15, OUTPUT);
  pinMode(LED16, OUTPUT);
  pinMode(sensorPin, INPUT_PULLUP);
  if (hours == 12) hours = 0;
}

void loop() {
  val = digitalRead(sensorPin);
  while (val == LOW) { val = digitalRead(sensorPin); }

  if (millis() >= previousTime) {
    previousTime += 1000;
    seconds++;
    if (seconds == 60) { seconds = 0; minutes++; }
    if (minutes == 60) { minutes = 0; hours++; }
    if (hours == 12) { hours = 0; }
  }

  propeller_posn = 30;
  n = 0;
  while (n < 60) {
    drawMinuteMarker();
    if ((propeller_posn == 0) || (propeller_posn == 5) || (propeller_posn == 10) || (propeller_posn == 15) ||
        (propeller_posn == 20) || (propeller_posn == 25) || (propeller_posn == 30) || (propeller_posn == 35) ||
        (propeller_posn == 40) || (propeller_posn == 45) || (propeller_posn == 50) || (propeller_posn == 55))
      drawHourMarker();
    if ((propeller_posn == 0) || (propeller_posn == 15) || (propeller_posn == 30) || (propeller_posn == 45))
      drawQuarterMarker();
    if ((propeller_posn == hours * 5) || ((propeller_posn == 0) && (hours == 0)))
      drawHoursHand();
    if (propeller_posn == minutes)
      drawMinutesHand();
    if (propeller_posn == seconds)
      drawSecondsHand();

    delayMicroseconds(140); // LED pixel breedte (aanpassen aan motorsnelheid)
    displayClear();
    drawInner_Circle();
    delayMicroseconds(600); // Tussenruimte pixels/markers (aanpassen aan motorsnelheid)

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

  val = digitalRead(sensorPin);
  while (val == HIGH) { val = digitalRead(sensorPin); }
}

// ========================= Helper Functions =========================
void displayClear() {
  digitalWrite(LED1, LOW); digitalWrite(LED2, LOW); digitalWrite(LED3, LOW);
  digitalWrite(LED4, LOW); digitalWrite(LED5, LOW); digitalWrite(LED6, LOW);
  digitalWrite(LED7, LOW); digitalWrite(LED8, LOW); digitalWrite(LED9, LOW);
  digitalWrite(LED10, LOW); digitalWrite(LED11, LOW); digitalWrite(LED12, LOW);
  digitalWrite(LED13, LOW); digitalWrite(LED14, LOW); digitalWrite(LED15, LOW);
  digitalWrite(LED16, LOW);
}

void drawMinuteMarker() { digitalWrite(LED16, HIGH); }

void drawHourMarker() { digitalWrite(LED15, HIGH); digitalWrite(LED14, HIGH); }

void drawQuarterMarker() { digitalWrite(LED13, HIGH); digitalWrite(LED12, HIGH); }

void drawHoursHand() {
  digitalWrite(LED1, HIGH); digitalWrite(LED2, HIGH); digitalWrite(LED3, HIGH);
  digitalWrite(LED4, HIGH); digitalWrite(LED5, HIGH); digitalWrite(LED6, HIGH);
  digitalWrite(LED7, HIGH);
}

void drawMinutesHand() {
  digitalWrite(LED1, HIGH); digitalWrite(LED2, HIGH); digitalWrite(LED3, HIGH);
  digitalWrite(LED4, HIGH); digitalWrite(LED5, HIGH); digitalWrite(LED6, HIGH);
  digitalWrite(LED7, HIGH); digitalWrite(LED8, HIGH); digitalWrite(LED9, HIGH);
}

void drawSecondsHand() {
  digitalWrite(LED1, HIGH); digitalWrite(LED2, HIGH); digitalWrite(LED3, HIGH);
  digitalWrite(LED4, HIGH); digitalWrite(LED5, HIGH); digitalWrite(LED6, HIGH);
  digitalWrite(LED7, HIGH); digitalWrite(LED8, HIGH); digitalWrite(LED9, HIGH);
  digitalWrite(LED10, HIGH); digitalWrite(LED11, HIGH);
}

void drawInner_Circle() {
  digitalWrite(LED1, HIGH);
  delayMicroseconds(30);
  digitalWrite(LED1, LOW);
}

Schema

Analoge-stijl LED Persistence-of-Vision Klok – DIY Arduino Nano Project

Productieproces

  1. Koekeklok: geschiedenis, vakmanschap en moderne evolutie
  2. Bouw Je Eigen LUMAZOID: Een DIY Arduino Muziek Visualizer
  3. Arduino POV-klok: Bouw een Persistence-of-Vision LED-display
  4. Precisie druk- en luchtstroommeting met analoge sensor en Arduino
  5. Bouw Je Eigen 37-LED Roulette-spel met Arduino Nano
  6. Bouw een Aangepaste LED Hoofdklok met Alarm – Zichtbaar vanaf 12 Meter
  7. 3D RGB Arduclock – Bluetooth LED Tijdstuk met Real-Time Clock
  8. Compacte Analog Trim Tab Wiel voor FlightGear met Arduino Nano
  9. Interactieve LED-matrix deurdisplay met PIR-bewegingsensor – Arduino vakantiegroet
  10. Een Arduino LED besturen met Cortana via Bluetooth op Windows 10
  11. LED Sequencer Bouwen met 555 Timer & 4017 Teller – Frequentiedeling & Debounce