Las pantallas de persistencia de la visión (POV) son generalmente pantallas LED que "muestran" imágenes mostrando una sección de una imagen en un momento dado, en rápida sucesión. El cerebro humano percibe esto como la visualización de una imagen continua.
En el sitio web del "proyecto de hobby" se presenta este reloj de esfera de estilo analógico relativamente simple pero visualmente efectivo. La parte electrónica contiene los diodos LED Arduino Nano 17 y el sensor de efecto Hall. Los grupos de diodos LED d1-d11, d12-d16 y d17 son de diferentes colores para un mejor efecto visual. El dispositivo funciona con una batería de iones de litio a través de un convertidor elevador.
La parte más difícil de los proyectos para mí fue la estabilidad mecánica. En el primer intento, la batería se colocó excéntricamente y a mayor velocidad de rotación hubo una gran vibración. Luego hice una modificación y puse la batería en el centro de rotación.
Para la rotación, utilizo un motor eléctrico de 12V conectado a una fuente de alimentación variable para que la velocidad de rotación del dispositivo se pueda controlar fácilmente. Dependiendo de la velocidad de rotación del dispositivo, en el código debe establecer el valor de "delayMicroseconds" en un valor determinado.
El video presentado no es lo suficientemente claro, porque para este propósito necesito una cámara con mejores cuadros por segundo.
Código
código Arduino
// proyectos hobby // ArduinoNanoPropellerLEDAnalogClock20190403Aint 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; // establece horasbyte minutos =15; // establecer minutosbyte segundos =00; // establecer segundosint val; void setup () {pinMode (LED1, SALIDA); pinMode (LED2, SALIDA); pinMode (LED3, SALIDA); pinMode (LED4, SALIDA); pinMode (LED5, SALIDA); pinMode (LED6, SALIDA); pinMode (LED7, SALIDA); pinMode (LED8, SALIDA); pinMode (LED9, SALIDA); pinMode (LED10, SALIDA); pinMode (LED11, SALIDA); pinMode (LED12, SALIDA); pinMode (LED13, SALIDA); pinMode (LED14, SALIDA); pinMode (LED15, SALIDA); pinMode (LED16, SALIDA); pinMode (sensorPin, INPUT_PULLUP); if (horas ==12) horas =0;} bucle vacío () {val =digitalRead (sensorPin); while (val ==LOW) {val =digitalRead (sensorPin); } if (millis ()> =(hora anterior)) {hora anterior =hora anterior + 1000; segundos =segundos + 1; if (segundos ==60) {segundos =0; minutos =minutos + 1; } si (minutos ==60) {minutos =0; horas =horas + 1; } if (horas ==12) {horas =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) || (posición_hélice ==30) || (posición_hélice ==35) || (posición_hélice ==40) || (posición_hélice ==45) || (posición_hélice ==50) || (posición_hélice ==55)) drawHourMarker (); if ((propeller_posn ==0) || (propeller_posn ==15) || (propeller_posn ==30) || (propeller_posn ==45)) dibujarQuarterMarker (); if ((propeller_posn ==horas * 5) || ((propeller_posn ==0) &&(horas ==0))) drawHoursHand (); if (propeller_posn ==minutos) drawMinutesHand (); if (propeller_posn ==segundos) drawSecondsHand (); delayMicroseconds (140); // para el ancho de píxel del LED (cambie el valor de acuerdo con la velocidad del motor. Aumente para baja velocidad, disminuya para motor de alta velocidad) displayClear (); drawInner_Circle (); delayMicroseconds (600); // para el espacio entre los marcadores LED de píxeles / minutos (cambie el valor de acuerdo con la velocidad del motor. Aumente para baja velocidad, disminuya para alta velocidad) n ++; propeller_posn ++; if (propeller_posn ==60) propeller_posn =0; } val =digitalRead (sensorPin); while (val ==HIGH) {val =digitalRead (sensorPin); }} // =========================void displayClear () {digitalWrite (LED1, LOW); escritura digital (LED2, BAJA); escritura digital (LED3, BAJA); escritura digital (LED4, BAJA); escritura digital (LED5, BAJA); escritura digital (LED6, BAJA); escritura digital (LED7, BAJA); escritura digital (LED8, BAJA); escritura digital (LED9, BAJA); escritura digital (LED10, BAJA); escritura digital (LED11, BAJA); escritura digital (LED12, BAJA); digitalWrite (LED13, BAJO); escritura digital (LED14, BAJA); escritura digital (LED15, BAJA); escritura digital (LED16, BAJA); } vacío drawMinuteMarker () {digitalWrite (LED16, ALTO); } anular drawHourMarker () {digitalWrite (LED15, HIGH); escritura digital (LED14, ALTA); } anular drawQuarterMarker () {digitalWrite (LED13, HIGH); escritura digital (LED12, ALTA); } void drawHoursHand () {digitalWrite (LED1, HIGH); escritura digital (LED2, ALTA); escritura digital (LED3, ALTA); escritura digital (LED4, ALTA); escritura digital (LED5, ALTA); escritura digital (LED6, ALTA); escritura digital (LED7, ALTA); } vacío drawMinutesHand () {digitalWrite (LED1, HIGH); escritura digital (LED2, ALTA); escritura digital (LED3, ALTA); escritura digital (LED4, ALTA); escritura digital (LED5, ALTA); escritura digital (LED6, ALTA); escritura digital (LED7, ALTA); escritura digital (LED8, ALTA); escritura digital (LED9, ALTA); } vacío drawSecondsHand () {digitalWrite (LED1, HIGH); escritura digital (LED2, ALTA); escritura digital (LED3, ALTA); escritura digital (LED4, ALTA); escritura digital (LED5, ALTA); escritura digital (LED6, ALTA); escritura digital (LED7, ALTA); escritura digital (LED8, ALTA); escritura digital (LED9, ALTA); escritura digital (LED10, ALTA); escritura digital (LED11, ALTA); } vacío drawInner_Circle () {digitalWrite (LED1, HIGH); delayMicroseconds (30); escritura digital (LED1, BAJA); }
Esquemas