Se necesita:
Una placa Arduino (cualquier sabor funciona bien) y el software
1 LED
1 puente de alambre
(Ejemplo de cableado al día debajo de...)
Soy un ingeniero de 20 años y acabo de descubrir la plataforma Arduino hace unos meses. Ni que decir caí en amor con él y ahora estoy enganchado a proyectos. Para la Navidad este año, quería hacer algunos regalos muy sincero, uno de tipo para mis padres. Para mi madre, era sin duda un ' uno-de ' reloj de diseño. No estaba preocupado por mantener el horario de verano o años bisiestos - mantener simplemente con precisión el día de la semana y el tiempo.
¿Cómo generar los pulsos de reloj en una manera única, pero precisa aunque? Seguro que podría utilizar un reloj incrustado Fantasia IC o el oscilador de 32.768 cristal común, pero quería algo diferente al resto. Que empecé a usar un temporizador 555 para generar una onda cuadrada de 100Hz constante. Esto funcionó bastante bien pero perdía aproximadamente 1 segundo por hora. No hay problema - acabo de escribir un algoritmo para corregir la falta segunda en software. Yo estaba feliz. Entonces descubrí que aunque no era totalmente fiable temporizador interno de Arduino para cronometraje, las salidas analógicas PWM tenía una onda cuadrada muy estable de 490Hz. El ciclo de trabajo se determina por el valor escrito el pin análogo. (ej.: 0 es cero voltios, 127 es un ciclo de deber del 50%, 255 es una lógica alta/5V).
Decidí probar la salida PWM analógica por cable directamente al pin de interrupción 2 y funcionó muy bien! Además, mantuvo perfectamente con reloj en tiempo real de mi computadora al segundo sin necesidad de compensación de software. Yo he estado funcionando durante días y continúa para llevar a cabo tal como yo esperaba... todo con un alambre y algo de código.
El regalo final tendrá Eagle CAD personalizada PCB para la alimentación y la lógica, alojados en una caja de plexiglás. El tema todo es hielo azul LED de iluminación para simular un reloj analógico. Mientras que el recinto tiene un blanco en azul pantalla LCD muestra el día, hora y temperatura, un cable serial se conecta desde el cuadro de proyecto al reloj real. Utilizando un contador de década de 12 bits, un servo y un montón de LED azul yo soy iluminación la hora apropiada segmentos en un reloj analógico de diseño personalizado frente impreso en plexiglás. El servo está montado en el centro de la esfera del reloj y ha montado una armadura conectada un LED a la luz los minutos tras el cristal. (cada minuto el servo gira 6 grados, iluminando el minuto apropiado). Espero tenerlo terminado pronto y hará un video del producto final... Espero que ella lo ama!!
Simple cableado diagrama y demostración de código de Arduino para hacer tu propio reloj utilizando este método. También un enlace al laboratorio de circuito que muestra cómo utilizar el temporizador 555 @ 100Hz método si lo desea.
Código y enlaces...
Circuito del oscilador Temporizador 555 (si desea probar este método)
https://www.circuitlab.com/Circuit/b575r9/555-100Hz-Oscillator/
Reloj código de demostración:
/ * Demo simple reloj interno: por Joseph Unik aka Relic1974
Utiliza la salida PWM analógica de 490Hz con un ciclo de deber del 50% para
tiempo de la subsistencia muy exacta;) Conecte un LED al pin 13 a
reloj segundos pestañeo. Conecte un puente del pin analógico 0
al Pin Digital 2 (interrupción 0). Salida de minutos a serial
monitor. http://www.planetxresearch.com 'Arduino' logo
para más proyectos y trucos...
(No dude en utilizar este código para expandirse en un completamente funcional
reloj u otro proyecto bajo licencia Creative Commons ;)
*/
int clockInt = 0; pin digital 2 ahora es interrupción 0
masterClock int = 0; cuenta las señales de reloj borde de levantamiento
int segundos = 0; variable
int minutos = 0; variable
int ledPin = 13;
void setup()
{
attachInterrupt (clockInt, clockCounter, RISING);
clockInt es la interrupción, cuando se llama a función de clockCounter
invoca en un borde de reloj de aumento
analogReference(DEFAULT);
pinMode (ledPin, salida);
Serial.Begin(57600);
analogWrite (0, 127); Esto inicia nuestro PWM 'reloj' con un ciclo de trabajo 50%
}
void clockCounter() / / llamado por interrupción
{
masterClock ++; con cada subida de reloj añadir 1 a masterclock cuenta
if(masterClock == 489) / 490 Hz alcanzó
{
segundos ++; después de un ciclo de 490Hz añadir 1 segundo ;)
masterClock = 0; Después se llega a 1 segundo
tono (13, 100, 500); uso de tono a pulso LED sin llamada retraso ;)
}
retorno;
}
void loop()
{
if(seconds == 60) / / ahora conociendo tiempo REAL de mantenimiento
{
minutos ++; incremento de minutos por 1
segundos = 0; restablecer la variable segundos
Serial.Print ("minutos =");
Serial.println(minutes);
}
}
Demo de mi proyecto en los trabajos aquí