Con un solo LED RGB o una tira de LED para mostrar información: reloj, termómetro y un comunicador raro (2 / 7 paso)

Paso 2: OnePixel reloj

Debido a la naturaleza de los LEDs RGB no puede producir cualquier color oscuro sobre ellos: no hay ninguna cosa tal como un LED de color marrón. También siempre tendrá los colores más ricos, más saturados. Así que lo que nos queda aquí es el círculo del espectro de brillo uniforme, y tenemos que extraer la cantidad máxima de colores claros sin lugar a dudas. Estos colores deben ser sin esfuerzo y al instante le dijo aparte: ¿de qué sirve nuestro reloj será si deja lugar a dudas? Pasé mucho tiempo experimentando, uno mismo-persuadir y tratando de exprimir más de los LEDs que puede hacer y finalmente tuvieron que admitir: hay sólo seis colores distinguibles fácilmente, absolutamente y sin lugar a dudas del RGB LED:

Rojo, naranja, verde, cian, azul y Magenta.

¿Por qué naranja y amarillo no? Porque amarillo en un solo LED se ve demasiado verde y no es fácilmente identificable sin referencia. Usted puede ver por sí mismo: escriba un bosquejo sencillo cambiar un LED RGB de rojo (255, 0, 0) a amarillo (127, 127, 0) cada segundo. Verás colores rojos y verdes.

Mientras que el seis es un número bueno para tratar con los relojes, no es razonablemente suficiente para mis necesidades. Es posible exprimir algo en la gama del púrpura, dando por resultado siete colores, pero que exactamente no ayudar con un reloj. Así que decidí utilizar un conjunto de diez colores para las tareas donde es aceptable un pequeño error (confundir tonos vecinos):

Rojo, naranja, amarillo, verde, aguamarina, celeste, azul, morado, fucsia y blanco.

(los nombres son provisionales, por supuesto. Palabras simplemente agradables. De hecho, es más como cian-verde, Azul cyan, azul-magenta, rojo magenta, etc.. Consulte la tabla en el bosquejo abajo).

El blanco está en esta lista porque no es definitivo. Como no es un color, pero, de hecho, la ausencia de cualquier tono, deja mucho a la imaginación y puede ser fácilmente confundido con algo más (en particular, cian). Es más, como un LED RGB hace blanco de la combinación de tres colores base, de hecho parece diferente según un ángulo de visión: si nos fijamos en el LED de un punto verá más rojo, la otra – más verde etc.

El último color importante (o, más correctamente, la falta de ella) es 'negra'. Mientras que no puede transmitir ninguna información significativa (porque ve lo mismo que un LED apagado) es muy útil como separador.

Así que tuve dos conjuntos de colores. Mientras que inicialmente esperaba hacer un reloj analógico intuitivo fue claro en ese momento que voy a tener que seguir con la digital. Es decir, con la exhibición de los dígitos con códigos de color. Los dos sistemas son, por supuesto, ideales para mostrar los minutos (o segundos): el uno de seis colores puede mostrar decenas, el diez-color es bueno para unos (como no es un gran problema si confunde los colores vecinos, sólo tienes un error de un minuto). Sólo dos parpadea un LED RGB.

¿Qué horas? El mismo enfoque no es bueno aquí: en primer lugar el conjunto de 10 colores no es lo suficientemente definitivo, y en segundo lugar, la pantalla será llanura aburrida con el mismo diez colores repitiendo una y otra vez. Se trata de algunas soluciones, pero luego miré en mi reloj de pulsera y me golpeó: Si la cara de reloj normal puede dividir el número de horas en un día por dos (mostrando 12 en lugar de 24) entonces ¿por qué no puedo yo dividirlos aún más? Después de todo, estoy haciendo una guirnalda, no un reloj atómico. ¿Y, realmente, puede uno confundir 6:00 con la medianoche? Por lo que se hizo la Convención: una cara de reloj de mi reloj OnePixel será 6-horas, que significa mismo colores para 12 y 6, 1 y 7, 2 y 8, etc.. Esta Convención resultó para ser muy adecuada: la única vez que fui capaz de leer la hora exacta de lo LED fue el 1 de enero y tuvo que ver con el partido de ayer que nada más (despertar, fui capaz de decir si es oscuro todavía o ya).

Mientras que es posible correlacionar los dígitos y los colores de cualquier manera, prefiero hacerlo según el espectro – no hay necesidad de recordar nada. Vea las tablas anteriores.

Al final el reloj garland fue mostrando el tiempo en guiones: uno para horas de largo, dos cortos unos minutos. En el año siguiente llené mi casa con muy diversas variaciones del mismo dispositivo, la mayoría de ellos se divierten más un LED, pero el principio seguía siendo (ver vídeo). Lo único que no estoy seguro acerca de hoy en día es el color blanco para 9: creo debo hacerlo un poco más pinkyish para evitar la confusión con el cian. Pudo haber sido mejor insertar blanco entre dos tonalidades de cian del ciclo 10-color, pero ahora es demasiado tarde para mí, como estoy ya bastante acostumbrado a estos relojes como son.

Aquí es un bosquejo que le permitirá ver el tiempo en un único LED RGB de tres maneras diferentes (cambiar por el un botón de modos; la voluntad de modo cuarto se explica en el paso 4). Usted necesitará un módulo de reloj externo. Si usted no tiene uno puede utilizar la biblioteca en tiempo de convertir a tu Arduino en un dispositivo de tiempo de mantenimiento (cambiar el boceto en consecuencia). Sugiero llegar el módulo RTC va a cavar en relojes de Arduino – es realmente algo barato y útil.

< p > #include < Wire.h >< br > #define rojo 3 / pines RGB LED está conectado a #define verde 5 #define #define BUTTON_PIN 7 < /p >< p > de azul 6 int temperatura; byte, segundo, minuto, hora; temperPos bytes, prevPos, nextPos; byte r, g, b; modo de byte = 0; < /p >< p > / / onda de seno matriz const uint8_t luces [360] = {0, 0, 0, 0, 0, 1, 1, 2, //8 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 15, 17, 18, 20, 22, 24, 26, 28, 30, 32, 35, 37, 39, //32 42, 44, 47, 49, 52, 55, 58, 60, 63, 66 , 69, 72, 75, 78, 81, 85, //48 88, 91, 94, 97, 101, 104, 107, 111, 114, 117, 121, 124, 127, 131, 134, 137, //64 141, 144, 147, 150, 154, 157, 160, 163, 167, 170, 173, 176, 179, 182, 185, 188, //96 191, 194, 197, 200, 202, 205, 208, 210, 213, 215, 217, 220, 222, 224, 226, 229, 231, 232, 234, 236 , 238, 239, 241, 242, 244, 245, 246, 248, 249, 250, 251, 251, 252, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255, 254, 254, 253, 253, 252, 251, 251, 250, 249, 248, 246, 245, 244, 242, 241, 239, 238, 236, 234, 232, 231, 229, 226, 224, 222, 220, 217, 215, 213, 210, 208, 205, 202, 200, 197, 194, 191 , 188, 185, 182, 179, 176, 173, 170, 167, 163, 160, 157, 154, 150, 147, 144, 141, 137, 134, 131, 127, 124, 121, 117, 114, 111, 107, 104, 101, 97, 94, 91, 88, 85, 81, 78, 75, 72, 69, 66, 63, 60, 58, 55, 52, 49, 47, 44, 42, 39, 37, 35, 32, 30, 28, 26, 24, 22, 20, 18, 17, 15 , 13, 12, 11, 9, 8, 7, 6, 5, 4, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; una matriz de valores preestablecidos de RGB / / para 10 mm RGB LED. byte RGBready [13] [3] = {{255, 0, 0}, / / hora = 0, min = 0 {229, 26, 0}, / / min = 1 {201, 54, 0}, / / hora = 1 {181, 74, 0}, / / min = 2 {0, 255, 0}, / / hora = 2, min = 3 {0, 218, 36}, / / min = 4 {0, 174, 81}, / / hora = 3 {0, 99, 156}, / / min = 5 {0, 0, 255}, / / hora = 4, min = 6 {74, 0, 181}, / / min = 7 {131 0, 124}, / / hora = 5 {196, 0, 59}, / / min = 8 {95, 78, 81}, / / min = 9}; < /p >< p > / / punto de estos arreglos de discos para colores exactos de horas y minutos en RGBready / / utilizarlos porque en mis proyectos RGBready puede sostener más predispuesto / más colores que el reloj sólo (como termómetro). Y es más fácil. byte hourColor [6] = {0,2,4,6,8,10}; minuteColor Byte [10] = {0,1,3,4,5,7,8,9,11,12} < /p >< p > void setup() {Wire.begin(); Serial.Begin(9600); Serial.println("Starting"); pinMode (BUTTON_PIN, INPUT_PULLUP); botón conecta a GND} < /p >< p > void loop() {< /p >< p > / / obtener e imprimir tiempo getTime(); Serial.Print ("tiempo es"); Serial.Print(hour); Serial.Print(":"); Serial.Print(minute); Serial.Print(":"); Serial.Print(Second); Serial.println("."); hora % = 6; convertir horas a 6 horas reloj de cara //hour = minutos %6; minutos = segundo; < /p >< p > / / cambiar los modos debe Presione y mantenga presionado el botón / / (la lectura ocurre entre los ciclos de la pantalla) / / he decidido contra ISR aquí para mantener el boceto hasta el punto de si ()
! digitalRead(BUTTON_PIN)) modo ++; % de modo < /p >< p > = 4; tenemos sólo tres modos < /p >< p > interruptor (modo) {caso 0: showTimeFades(); break; caso 1: showTimeTransitions(); break; caso 2: simpleMode(); break; case 3: analogClock(); break;}} < /p >< p > / / las dos funciones siguientes se utilizan para obtener un tiempo de un chips DS3231 / / fueron rescatados de la biblioteca de tiempo creo que / / la biblioteca de tiempo sí mismo convierte su Arduino en un reloj, así que si usted / / no tiene un módulo RTC, usted debe descargar / / y cambio la función getTime() trabajar con él vacío getTime () {/ / la dirección de chip RTC DS3231 es 0x68 Wire.beginTransmission(0x68); Wire.Write(byte(0)); Wire.endTransmission(); < /p >< p > Wire.requestFrom (0x68, 3, 1); solicitar los primeros tres bytes, cerrar conexión segundo = bcdToDec (Wire.read()); minutos = bcdToDec (Wire.read()); hora = bcdToDec(Wire.read()); no necesitamos más información como el día de la semana, año, etc. / del reloj, así que lea solo primeros 3 bytes. } < /p >< p > / / convierte binario codificado decimal a números decimales normales byte bcdToDec(byte val) {regresar ((val/16 * 10) + (val % 16));} < /p >< p > / OnePixel el reloj modos / / 1 - el modo utiliza en un showTimeFades() vacío de garland {int delayVal = 4; / / establece la velocidad de la presentación general < /p >< p > / / horas de fade-in fade-out de color para (int k = 0; k < 241; k ++) {r = (uint16_t)(RGBready[hourColor[hour]][0]*lights[k]) >> 8; g = (uint16_t)(RGBready[hourColor[hour]][1]*lights[k]) >> 8; b = (uint16_t)(RGBready[hourColor[hour]][2]*lights[k]) > > 8; setRGBpoint (0, r, g, b); Delay(delayVal); } < /p >< p > / / minuto-decenas de fade-in fade-out de color para (int k = 0; k < 241; k ++) {r = (uint16_t)(RGBready[hourColor[minute/10]][0]*lights[k]) >> 8; g = (uint16_t)(RGBready[hourColor[minute/10]][1]*lights[k]) >> 8; b = (uint16_t)(RGBready[hourColor[minute/10]][2]*lights[k]) >> 8; setRGBpoint (0, r, g , b); retardo (delayVal >> 1); dos veces más rápido que horas} < /p >< p > / / fade-in fade-out minutos-que color para (int k = 0; k < 241; k ++) {r = (uint16_t)(RGBready[minuteColor[minute%10]][0]*lights[k]) >> 8; g = (uint16_t)(RGBready[minuteColor[minute%10]][1]*lights[k]) >> 8; b = (uint16_t)(RGBready[minuteColor[minute%10]][2]*lights[k]) >> 8; setRGBpoint (0 r, g, b); retardo (delayVal >> 1); dos veces más rápido que horas}} < /p >< p > / / 2 - onda transiciones entre colores void showTimeTransitions() {int delayVal = 4; / / conjunto de transiciones velocidad / / fade para (int k = 0; k < 121; k ++) {r = (uint16_t)(RGBready[hourColor[hour]][0]*lights[k]) >> 8; g = (uint16_t)(RGBready[hourColor[hour]][1]*lights[k]) >> 8; b = (uint16_t)(RGBready[hourColor[hour]][2]*lights[k]) >> 8; setRGBpoint (0 r, g, b); Delay(delayVal); } < /p >< p > / / transiciones shiftColors (hourColor [hora], hourColor [minuto/10], delayVal); Delay(50); detener brevemente en el shiftColors de valor de decenas de minutos (hourColor [minuto/10], minuteColor [minuto % 10], delayVal); fade-out para (int k = 120; k < 241; k ++) {r = (uint16_t)(RGBready[minuteColor[minute%10]][0]*lights[k]) >> 8; g = (uint16_t)(RGBready[minuteColor[minute%10]][1]*lights[k]) >> 8; b = (uint16_t)(RGBready[minuteColor[minute%10]][2]*lights[k]) >> 8; setRGBpoint (0, r, g, b); delay(delayVal);}} < /p >< p > / / 3 - el modo más simple posible, puede ser útil como un comienzo para algo void simpleMode() {int delayVal = 333; r = RGBready [hourColor [hora]] [0]; g = RGBready [hourColor [hora]] [1]; b = RGBready [hourColor [hora]] [2]; setRGBpoint (0, r, g, b); delay(delayVal); < /p >< p > r = RGBready [hourColor [minuto/10]] [0]; g = RGBready [hourColor [minuto/10]] [1]; b = RGBready [hourColor [minuto/10]] [2]; setRGBpoint (0 r, g, b); Delay(delayVal); < /p >< p > r = RGBready [minuteColor [minuto % 10]] [0]; g = RGBready [minuteColor [minuto % 10]] [1]; b = RGBready [minuteColor [minuto % 10]] [2]; setRGBpoint (0, r, g, b); Delay(delayVal); < /p >< p > setRGBpoint (0, 0, 0, 0); retardo (delayVal >> 1); } < /p >< p > void analogClock() {int delayVal = 8; para (int k = 0; k < 52; k ++) {r = (float)(RGBready[hourColor[hour]][0]*(60-minute) + RGBready [hourColor [(hour+1) %6]] [0] * minuto) / 60; g = (float)(RGBready[hourColor[hour]][1]*(60-minute) + RGBready [hourColor [(hour+1) %6]] [1] * minuto) / 60; b = (float)(RGBready[hourColor[hour]][2]*(60-minute) + RGBready [hourColor [(hour+1) %6]] [2] * minutos) / 60; < /p >< p > r = (uint16_t) (r * (luces [k] * 2 + 30)) >> 8; g = (uint16_t)(g*(lights[k]*2+30)) >> 8; b = (uint16_t)(b*(lights[k]*2+30)) >> 8; setRGBpoint (0, r, g, b); Delay(delayVal); } para (int k = 51; k > 0; k--) {r = (float)(RGBready[hourColor[hour]][0]*(60-minute) + RGBready [hourColor [(hour+1) %6]] [0] * minuto) / 60; g = (float)(RGBready[hourColor[hour]][1]*(60-minute) + RGBready [hourColor [(hour+1) %6]] [1] * minuto) / 60; b = (float)(RGBready[hourColor[hour]][2]*(60-minute) + RGBready [hourColor [(hour+1) %6]] [2] * minuto) / 60; < /p >< p > r = (uint16_t)(r*(lights[k]*2+30)) >> 8; g = (uint16_t) (g * (luces [k] * 2 + 30)) >> 8; b = (uint16_t)(b*(lights[k]*2+30)) >> 8; setRGBpoint (0, r, g, b); Delay(delayVal); } delay(delayVal*30); } < /p >< p > / / función para cambio de color entre / / posiciones en la matriz de RGBready. Este uno utiliza el / / onda sinusoidal algoritmo y luces [] concertado matriz anterior / delayVal establece la velocidad de transición vacío shiftColors (cur byte, byte byte siguiente, delayVal) {uint16_t color [3], nextColor [3]; colorStep largo [3]; showRGBcolor(cur); / empezar con color claro primera / / calcular pasos en formato unsigned int para evitar el uso de flotadores para (k bytes = 0; k < 3; k ++) {color [k] = RGBready [cur] [k] << 8; nextColor [k] = RGBready [siguiente] [k] << 8; colorStep [k] = (nextColor (larga) [ k] - colores [k]) / 255; } / / set colores 120 pasos (360/3), conversión a bytes para (byte k = 0; k < 120; k ++) {setRGBpoint (0, (color[0]+colorStep[0]*lights[k]) >> 8, (color[1]+colorStep[1]*lights[k]) >> 8, (color[2]+colorStep[2]*lights[k]) >> 8); delay(delayVal);} showRGBcolor(next); acabado con color claro segundo} < /p >< p > / / dos funciones heredadas para encender LEDs. Les utilizo aquí para mantener la coherencia entre los dibujos de ejemplo / / ambos códigos son de ánodo común LED. Si utilizas cátodo común unos, / quite el 255-' bits. void setRGBpoint (uint8_t LED uint8_t rojo, uint8_t verde, uint8_t azul) {analogWrite (rojo, 255); analogWrite (verde, verde 255); analogWrite (azul, azul 255);} < /p >< p > void showRGBcolor (byte rizado) {analogWrite (rojo, 255-RGBready[curLED][0]); analogWrite (verde, 255-RGBready[curLED][1]); analogWrite (azul, 255-RGBready[curLED][2]);} < /p >

¿Observe la tabla de colores en el dibujo? Voy a volver a él en el último paso.

Artículos Relacionados

Detener el tiempo con un estroboscopio LED!

Detener el tiempo con un estroboscopio LED!

Un estroboscopio es un instrumento que utiliza una luz intermitente para permitir que un usuario ver los objetos que se están moviendo rápidamente en forma periódica. Cuando la frecuencia de la luz intermitente se asocia a la velocidad del objeto, el
Con un LED para un Sensor de luz

Con un LED para un Sensor de luz

hasta hace poco, Foto-resistencias de CD ' s (sulfuro de cadmio) se han utilizado comúnmente para aplicaciones de detección de luz. Por desgracia, tienen problemas. Puesto que las células CdS contienen cadmio, un metal pesado tóxico, presentan un pro
Que se inclina estanterías con iluminación LED

Que se inclina estanterías con iluminación LED

cazadas alrededor por todas partes para un conjunto de estanterías que se inclinan, pero no podía encontrar ninguna que me gustó mucho... así que hice mi propio.Lo bueno de este tipo de estantería es que mantiene más abierta que la tradicional estant
Instalación de una turbina de viento para alimentar mi casa!

Instalación de una turbina de viento para alimentar mi casa!

Finalmente conseguí mi Aleko WG400 aerogenerador instalado. Este generador de potencia alimenta en mi casa que ya es solar powered. Me he convertido en la primera persona en mi hermosa isla para implementar un híbrido (solar y viento) energía sistema
Arduino - termómetro analógico de LED

Arduino - termómetro analógico de LED

originalmente pensé que este proyecto podría ser demasiado básico para compartir en Instructables, pero desde entonces he realizado hay espacio para el aprendizaje en cada nivel de habilidad. Espero que lo disfruten.Después de leer numerosos libros y
Termómetro al aire libre de LED

Termómetro al aire libre de LED

si no quieres leer cualquier cháchara sin sentido puede sentirse libre saltar a la página dos.Estáis avisados.Durante el verano una vez más estaba buscando un divertido proyecto, que podría aprender algo de (AKA lío hasta veinte veces y corregir mis
Cómo hacer una caja de luz para fotografía

Cómo hacer una caja de luz para fotografía

Para fotografiar objetos pequeños en toda su gloria, necesita iluminación cuidadosamente controlada. La iluminación es fundamental para cualquier fotografía. El término 'Fotografía' realmente implica que es un arte de dibujar imágenes con luz. Con la
Arduino Nano: Leer DS1820/DS18S20 Maxim un cable termómetro dirección con Visuino

Arduino Nano: Leer DS1820/DS18S20 Maxim un cable termómetro dirección con Visuino

OneWire Maxim DS1820 DS18S20 / / DS18B20 son termómetros muy populares y con razón. Termómetros de múltiples se pueden conectar e incluso funciona con sólo 2 hilos. Ya postee Instructable sobre cómo conectar y leer OneWire termómetro aquí.Cada termóm
Crear una UFD de arranque para flashear BIOS AMI

Crear una UFD de arranque para flashear BIOS AMI

tanto portátil y PC de escritorio en ocasiones requiere actualizaciones de BIOS. Cuando usted visite sitio de Web de un vendedor (la PC mfgr o el fabricante del BIOS) y descubre una BIOS nueva con las características que desee, o actualizaciones requ
Hacer una simple aplicación para tu smartphone (no codificación necesaria)

Hacer una simple aplicación para tu smartphone (no codificación necesaria)

Mi primera aplicación publicada está disponible para descargar en el Android Market la aplicación aquí. El siguiente es un tutorial rápido sobre cómo prácticamente cualquier persona puede crear uno. Esta es una aplicación que puede mostrar informació
Descoloramiento tira Led Rgb en una montaña dos de Copa

Descoloramiento tira Led Rgb en una montaña dos de Copa

esta dos taza de montaña es de 10 "x 3" x 2 5/16". Tiene una tira de led Rgb que cambia de forma de azul a verde.Paso 1:Paso 2: Construcción de la vivienda The drill bit is about 3".Paso 3: Pintar y colocarle luces de la vivienda Pinta
Cómo controlar una tira de LED RGB - Tutorial de Arduino

Cómo controlar una tira de LED RGB - Tutorial de Arduino

En este tutorial vamos a utilizar una tira con 8 LED ' s RGB con la placa de Arduino uno. Usaremos la biblioteca de NeoPixel de Adafruit para cambiar el color de cada led.Vamos a empezar!Paso 1: Lo que se necesitaPara este proyecto necesitarás:Arduin
Una proyección Simple trazado pantalla con Pixel traz LEDs

Una proyección Simple trazado pantalla con Pixel traz LEDs

Como diseñador de circuitos que se ocupa sobre todo de sistemas de control LED, acumulo un alijo de tira de LED, barras, discos y otros controladores de las compañías que hemos adquirido para clientes, conciertos o evaluaciones. Cada ahora y después
Cómo soldar cables en una tira de LED común

Cómo soldar cables en una tira de LED común

este es un manual muy simple y rápido sobre cómo soldar los cables en una tira de LED común.Se necesita:Tijeras o alambre cortadores (disponibles para uso en TechShop)Peladores de alambre (disponibles para uso en TechShop)Soldador (disponible para us