Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Reloj de 7 segmentos con Arduino Nano + DS3231 + LDR

Componentes y suministros

Arduino Nano R3
funciona bien con Arduino Uno o Elegoo Uno
× 1
Mochila Adafruit de 7 segmentos - 1,2 "dígitos de altura
- 1.2 "Dígitos altos en mi caso (opcional si compras el paquete)
× 1
Pantalla Adafruit 1.2 de 4 dígitos y 7 segmentos con mochila I2C - Verde
× 1
Adafruit DS3231
o DS1307 si lo prefiere
× 1
Resistencia 100k ohm
× 1
Foto resistor
× 1
Breadboard (genérico)
× 1
Cables de puente (genéricos)
10-14 piezas
× 1
Batería tipo botón CR1220
× 1

Aplicaciones y servicios en línea

Arduino IDE

Acerca de este proyecto

Introducción

En momentos en los que siempre tienes un reloj en tu muñeca, ya sea un reloj en tu muñeca o un teléfono inteligente, el Arduino Uno / Nano es un poco aburrido. De lo contrario, tiene dispositivos sincronizados con el servidor NTP en este artículo externo, que están constantemente en línea a través de su conexión a Internet.

Historia

Uno de mis amigos rechazó por razones personales un dispositivo con conexión WiFi en su habitación y por eso tengo el Arduino equipado con un reloj separado.

Elija el producto adecuado

Me sorprendió la cantidad de productos diferentes que incluso Adafruit tenía disponibles:¡dependiendo de la tensión deseada, así como con diferente precisión! Aquí me decidí por dos productos:el DS1307 más económico y el DS3231 probablemente más preciso .

Para ser claros:ambos productos se pueden utilizar en este reloj. Para usar el DS1307, preste atención a la asignación correcta del PIN y la restricción a la opción de visualización de temperatura: comentario "//" el displayTemp (); función dentro del bucle ().

Adaptar el boceto

Fui a buscar un boceto y encontré algo con otro miembro. Reestructuré y ajusté este boceto, pero mantuve sus comentarios en checo y agregué comentarios en inglés.

Se suponía que el anuncio era lo más grande posible, así que me decidí por un anuncio de 7 segmentos:después de todo, solo quería tener el tiempo en mente.

La siguiente sorpresa positiva que experimenté al revisar los bocetos:aquí, el DS3231 brinda la opción para usar la temperatura , que el DS1307, además de su inexactitud, falta.

Inicie los relojes

Si tiene una pila de botón CR1220, puede seguir el breve tutorial de Adafruit sobre cómo configurar los relojes. En resumen, la hora no se descarga de Internet, sino a lo largo del tiempo desde la PC local. La marca de tiempo de carga se transfiere a los temporizadores.

Funciones

Luego agregué la matriz de LED al circuito para salida de tiempo y temperatura . El período para el cambio de tiempo y temperatura se puede configurar mediante variables.

En particular, cómo funciona y se controla el control de los puntos y dígitos individuales (parpadeantes) en la matriz de LED, se describe bien en el esquema.

Aquí me refiero a más fuentes de Adafruit.

El boceto se completa con el ajuste del horario de verano / invierno . y el brillo de la matriz LED en función de la luz ambiental (por la noche, la pantalla debe ser más oscura que a la luz del día).

En el video, ciertamente notó el cambio de hora y temperatura. ¿Prestaste atención al punto de la izquierda en la imagen? Este cambia su posición (arriba o abajo) dependiendo de los segundos.

Envíeme sus comentarios si sabe cómo emitir un "ERR" en la matriz de LED en caso de falla del reloj. En este momento aparecerá "bEEF":

  // ¡oh no, no hay datos! Serial.println ("Error del sensor DS3231 - no se puede leer la temperatura"); matrix.print (0xBEEF, HEX); // informa al usuario con BEEF matrix.writeDisplay (); retraso (5000);  

Expansión

Una alarma o hora de alarma tampoco está integrada todavía.

Posiblemente también logre una extensión mediante módulo Bluetooth y Blynk.

Actualización 01.02.2019:

La transferencia del tablero a una apuesta permanente en una tarjeta perforada se completó hoy. Algunas fotos para los interesados:

Encontrará un código actualizado v1.1 en el archivo adjunto, así como una imagen de frización personalizada.

Código

  • MyClock v1.0
  • MyClock v1.1
MyClock v1.0 C / C ++
 // MyClock v1.0 // Ingo Lohs // Hardware:probado con Arduino Uno y Arduino Nano (ATmega328P [Old Bootloader]) usando Arduino IDE v1.8.8 / * Teoría para Matrix ht16k33 Lo más fácil es simplemente llamar imprimir - al igual que lo hace con Serialprint (variable, HEX) - esto imprimirá un número hexadecimal, desde 0000 hasta FFFFprint (variable, DEC) o print (variable) - esto imprimirá un entero decimal, desde 0000 hasta 9999 Si usted necesita más control, puede llamar a writeDigitNum (ubicación, número); esto escribirá el número (0-9) en una sola ubicación. La ubicación # 0 está completamente a la izquierda, la ubicación # 2 son los puntos de dos puntos, por lo que probablemente desea omitirlo, la ubicación # 4 está completamente a la derecha.Para controlar los dos puntos y los puntos decimales, use la función writeDigitRaw (ubicación, mapa de bits). (Tenga en cuenta que ambos puntos de los dos puntos centrales están conectados entre sí dentro de la pantalla , por lo que no es posible abordarlos por separado.) Especifique 2 para la ubicación y los bits se asignan de la siguiente manera:0x02 - dos puntos centrales (ambos d ots) 0x04 - dos puntos a la izquierda - punto inferior0x08 - dos puntos a la izquierda - punto superior 0x10 - punto decimal Si desea un punto decimal, llame a writeDigitNum (ubicación, número, verdadero) que pintará el punto decimal. Para dibujar los dos puntos, use drawColon (verdadero o false) Si desea un control total de los segmentos en todos los dígitos, puede llamar a writeDigitRaw (ubicación, máscara de bits) para dibujar una máscara de 8 bits sin procesar (como se almacena en un uint8_t) en cualquier ubicación Todas las rutinas de dibujo solo cambian la pantalla memoria guardada por el Arduino. No olvide llamar a writeDisplay () después de dibujar para 'guardar' la memoria en la matriz a través de I2C. Fuente:https://www.mouser.com/ds/2/737/adafruit-led-backpack-932846. pdf * / # include  // Habilite esta línea si usa Arduino Uno, Mega, etc. # include  #include "Adafruit_LEDBackpack.h" #define DS3231_I2C_ADDRESS 0x68int ldr_sensor =A0; // Fotorresistor LDR con 100k Ohm a GND, otro tramo 5Vint ldr_value =0; // Valor de LDR - var store valueint shine_matrix; // Brillo de la matriz de LED - valor de almacenamiento var en el umbral_brillo =400; // Thresholdint blinkrate_value =0; // LED Matrix parpadea rateint delay_matrix_time =20; // cuánto tiempo de visualización (20 segundos) int delay_matrix_temp =2000; // cuánto tiempo muestra la temperatura (2 segundos) int blinky_dot =2; // no parpadea nada - en el lado izquierdo 2 puntos individuales Adafruit_7segment matrix =Adafruit_7segment (); byte decToBcd (byte val) {return ((val / 10 * 16) + (val% 10));} byte bcdToDec (byte val) { return ((val / 16 * 10) + (val% 16));} void setup () {Serial.begin (9600); Wire.begin (); matrix.begin (0x70);} bucle vacío () {lightBrightness (); // Matrix-Brightness Justierung matrixBlinkrate (); // Mattrix-Blinkrate Jusitierung displayTime (); // muestra los datos del reloj en tiempo real displayTemp (); // mostrar la temperatura} void lightBrightness () {// setBrightness (brillo) - le permitirá cambiar el brillo general de toda la pantalla. 0 es el menos brillante, 15 es el más brillante y es lo que se inicializa en la pantalla cuando inicia ldr_value =analogRead (ldr_sensor); Serial.print ("LDR:"); Serial.println (ldr_value); if (ldr_value <=reshold_brightness) {// medición de brillo vs Threshold shine_matrix =0; // brillante a la luz del día} else {shine_matrix =15; // oscuro por la noche}} void matrixBlinkrate () {// blinkRate (rate) - Puede hacer parpadear toda la pantalla. 0 no parpadea. 1, 2 o 3 es para que la pantalla parpadee. matrix.blinkRate (blinkrate_value);} void displayTime () {matrix.setBrightness (brillo_matrix); matrix.clear (); // cuánto tiempo de visualización en matrix en segundos para (uint16_t i =0; i > Cambio al horario de verano - último domingo de marzo a las 2 en punto si ((dayOfWeek ==7) &&(dayOfMonth> =25) &&(month ==3) &&(hora ==2)) {// nastavení hodin na 3 hodinu // ajusta el reloj a 3 horas setDS3231time (se, mi, 3, we, dm, mo, ye); } // změna času na zimní //>> Cambiar al horario de invierno if ((dayOfWeek ==7) &&(dayOfMonth> =25) &&(month ==10) &&(hour ==1) &&(year! =1 )) {// rok použit jako indikace, že bylo léto // año utilizado como indicación de que era verano setDS3231time (se, mi, ho, we, dm, mo, 1); } if ((dayOfWeek ==7) &&(dayOfMonth> =25) &&(month ==10) &&(hour ==3) &&(year ==1)) {// nastavení hodin na 2 hodinu a příznak na 0 // establece el reloj en 2 horas y marca el año en 0 setDS3231time (se, mi, 2, we, dm, mo, 0); } / * Especifique 2 para la ubicación y los bits se mapean de la siguiente manera:0x02 - dos puntos centrales (ambos puntos) 0x04 - dos puntos izquierdos - punto inferior 0x08 - dos puntos izquierdos - punto superior 0x10 - punto decimal * / / * controles de ubicación # 2 también la izquierda 2 puntos individuales como este (=blinky_dot):2 =parpadea nada 3 =parpadea nada 4 =parpadea arriba a la izquierda (un solo punto superior) 5 =parpadea arriba a la izquierda (un solo punto superior) 6 =parpadea arriba a la izquierda (un solo punto superior) ) + ambos dos puntos en el medio 7 =parpadea en la parte superior izquierda (un solo punto superior) + ambos dos puntos en el medio 8 =parpadea en la parte inferior izquierda (un solo punto inferior) 9 =parpadea en la parte inferior izquierda (un solo punto inferior) 10 =parpadea en la parte inferior izquierda (un solo punto inferior) ) + ambos dos puntos a la mitad de 11 =parpadea en la parte inferior izquierda (un punto inferior) + ambos dos puntos a la mitad de 12 =parpadea ambos dos puntos (ambos puntos individuales a la izquierda) sin ambos dos puntos a la mitad de * / // formato de horas:_0:mm if (hora> 9) {matrix.writeDigitNum (0, (hora / 10), falso); matrix.writeDigitNum (1, (hora% 10), falso); // esto escribirá el número (0-9) en una sola ubicación usando el módulo https://www.arduino.cc/reference/en/language/structure/arithmetic-operators/modulo/} else {matrix.writeDigitNum ( 1, hora, falso); } // matriz.drawColon (verdadero); // Ambos dos puntos en el medio están activos:en caso de que no quieras parpadear los puntos a la izquierda, puedes activar ambos dos puntos aquí // dale a los segundos la oportunidad de mostrar los puntos de la ubicación izquierda if (se <=30) {blinky_dot =10; // parpadea en la parte inferior izquierda (un solo punto inferior) + ambos dos puntos en el medio} else if (se> 30) {blinky_dot =6; // parpadea arriba a la izquierda (un solo punto superior) + ambos dos puntos en el medio} matrix.writeDigitRaw (2, blinky_dot); matrix.writeDigitNum (3, (minuto / 10), falso); matrix.writeDigitNum (4, (minuto% 10), falso); matrix.writeDisplay (); // Parpadeo de puntos dobles durante medio segundo de retraso (500); matrix.drawColon (falso); matrix.writeDisplay (); retraso (500); }} vacío displayTemp () {matrix.setBrightness (brillo_matrix); matrix.clear (); byte temp =get3231Temp (); int abs_temp =abs (temp); // número absoluto de un valor matrix.writeDigitNum (1, (abs_temp% 10), false); // posición 1, valor 9, mostrar decimal) if (temp <0) matrix.writeDigitRaw (0,64); if (temp <=-10) matrix.writeDigitRaw (2,12); // y si la temperatura es negativa, graficamos el signo menos en el primer lugar. if (temp>
 =10) matrix.writeDigitNum (0, (abs_temp / 10), falso); // posición 0, valor 1, mostrar decimal) if (temp <=-10) matrix.writeDigitNum (0, (abs_temp / 10), false); // posición 0, valor 1, mostrar decimal) // matrix.writeDigitRaw (2,0x10); // matriz de puntos decimal.writeDigitRaw (3,99); // 99 ="°" matrix.writeDigitRaw (4,57); // 57 =matriz "C ".writeDisplay (); // muestra los valores de temperatura en la línea serial // zobrazí hodnoty teploty na seriove lince Serial.print ("Temperatura en C:"); Serial.println (get3231Temp ()); // +/- 3 Grad Celsius // cuánto tiempo muestra la temperatura en la matriz en segundos delay (delay_matrix_temp);} void setDS3231time (byte segundo, byte minuto, byte hora, byte dayOfWeek, byte dayOfMonth, byte mes, byte año) {/ / establecer datos de fecha y hora en DS3231 Wire.beginTransmission (DS3231_I2C_ADDRESS); Wire.write (0); // establece la siguiente entrada para que comience en el registro de segundos Wire.write (decToBcd (segundo)); // establecer segundos Wire.write (decToBcd (minuto)); // establecer minutos Wire.write (decToBcd (hora)); // establecer horas Wire.write (decToBcd (dayOfWeek)); // establecer el día de la semana (1 =domingo, 7 =sábado) Wire.write (decToBcd (dayOfMonth)); // establecer fecha (1 a 31) Wire.write (decToBcd (mes)); // establecer el mes Wire.write (decToBcd (año)); // establece el año (0 a 99) Wire.endTransmission ();} void getDateDs3231 (byte * segundo, byte * minuto, byte * hora, byte * dayOfWeek, byte * dayOfMonth, byte * mes, byte * año) {Wire. beginTransmission (DS3231_I2C_ADDRESS); Wire.write (0); Wire.endTransmission (); Wire.requestFrom (DS3231_I2C_ADDRESS, 7); * segundo =bcdToDec (Wire.read () &0x7f); * minuto =bcdToDec (Wire.read ()); * hora =bcdToDec (Wire.read () &0x3f); * dayOfWeek =bcdToDec (Wire.read ()); * dayOfMonth =bcdToDec (Wire.read ()); * mes =bcdToDec (Wire.read ()); * año =bcdToDec (Wire.read ());} float get3231Temp () {byte tMSB, tLSB; flotar temp3231; Wire.beginTransmission (DS3231_I2C_ADDRESS); Wire.write (0x11); Wire.endTransmission (); Wire.requestFrom (DS3231_I2C_ADDRESS, 2); if (Wire.available ()) {tMSB =Wire.read (); // Complemento a 2 int parte tLSB =Wire.read (); // porción de fracción temp3231 =(tMSB &B01111111); // hacer 2 matemáticas en Tmsb temp3231 + =((tLSB>> 6) * 0.25); // solo se preocupan por los bits 7 y 8 return temp3231; } else {// ¡oh no, no hay datos! Serial.println ("Error del sensor DS3231 - no se puede leer la temperatura"); matrix.print (0xBEEF, HEX); // informa al usuario con BEEF matrix.writeDisplay (); retraso (5000); }} 
MyClock v1.1 C / C ++
Actualización de verano / invierno
 // MyClock v1.1 // Ingo Lohs // Hardware:probado con Arduino Uno y Arduino Nano (ATmega328P [Old Bootloader]) usando Arduino IDE v1.8.8 // Cambiar v1.0> v1.1 // dayOfWeek ==1 anstatt 7 abgeändert in displayTime () zur korrekten Ermittlung des Sonntages für die Zeitumstellung / * Teoría para Matrix ht16k33 Lo más fácil es simplemente llamar a print, tal como lo hace con Serialprint (variable, HEX) - esto imprimirá un número hexadecimal, desde 0000 hasta FFFFprint (variable, DEC) o print (variable) - esto imprimirá un entero decimal, desde 0000 hasta 9999 Si necesita más control, puede llamar a writeDigitNum (ubicación, número) - Esto escribirá el número (0-9) en una sola ubicación. La ubicación # 0 está completamente a la izquierda, la ubicación # 2 son los puntos de dos puntos, por lo que probablemente quiera omitirla, la ubicación # 4 está completamente a la izquierda Para controlar los dos puntos y los puntos decimales, utilice la función writeDigitRaw (ubicación, mapa de bits). (Tenga en cuenta que ambos puntos de los dos puntos centrales están conectados en ternal a la pantalla, por lo que no es posible direccionarlos por separado.) Especifique 2 para la ubicación y los bits se mapean de la siguiente manera:0x02 - dos puntos centrales (ambos puntos) 0x04 - dos puntos izquierdos - punto inferior0x08 - dos puntos izquierdos - punto superior0x10 - punto decimal Si desea un punto decimal, llame a writeDigitNum (ubicación, número, verdadero) que pintará el punto decimal. Para dibujar los dos puntos, use drawColon (verdadero o falso) Si desea un control total de los segmentos en todos los dígitos, puede llamar a writeDigitRaw (ubicación, máscara de bits) para dibujar una máscara sin procesar de 8 bits (como se almacena en un uint8_t) en cualquier ubicación. Todas las rutinas de dibujo solo cambian la memoria de pantalla que mantiene el Arduino. No olvide llamar a writeDisplay () después de dibujar para 'guardar' la memoria en la matriz a través de I2C. Fuente:https://www.mouser.com/ds/2/737/adafruit-led-backpack-932846. pdf * / # include  // Habilite esta línea si usa Arduino Uno, Mega, etc. # include  #include "Adafruit_LEDBackpack.h" #define DS3231_I2C_ADDRESS 0x68int ldr_sensor =A0; // Fotorresistor LDR con 100k Ohm a GND, otro tramo 5Vint ldr_value =0; // Valor de LDR - var store valueint shine_matrix; // Brillo de la matriz de LED - valor de almacenamiento var en el umbral_brillo =400; // Thresholdint blinkrate_value =0; // LED Matrix parpadea rateint delay_matrix_time =20; // cuánto tiempo de visualización (20 segundos) int delay_matrix_temp =2000; // cuánto tiempo muestra la temperatura (2 segundos) int blinky_dot =2; // no parpadea nada - en el lado izquierdo 2 puntos individuales Adafruit_7segment matrix =Adafruit_7segment (); byte decToBcd (byte val) {return ((val / 10 * 16) + (val% 10));} byte bcdToDec (byte val) { return ((val / 16 * 10) + (val% 16));} void setup () {Serial.begin (9600); Wire.begin (); matrix.begin (0x70);} bucle vacío () {lightBrightness (); // Matrix-Brightness Justierung matrixBlinkrate (); // Mattrix-Blinkrate Jusitierung displayTime (); // muestra los datos del reloj en tiempo real displayTemp (); // mostrar la temperatura} void lightBrightness () {// setBrightness (brillo) - le permitirá cambiar el brillo general de toda la pantalla. 0 es el menos brillante, 15 es el más brillante y es lo que se inicializa en la pantalla cuando inicia ldr_value =analogRead (ldr_sensor); Serial.print ("LDR:"); Serial.println (ldr_value); if (ldr_value <=reshold_brightness) {// medición de brillo vs Threshold shine_matrix =0; // brillante a la luz del día} else {shine_matrix =15; // oscuro por la noche}} void matrixBlinkrate () {// blinkRate (rate) - Puede hacer parpadear toda la pantalla. 0 no parpadea. 1, 2 o 3 es para que la pantalla parpadee. matrix.blinkRate (blinkrate_value);} void displayTime () {matrix.setBrightness (brillo_matrix); matrix.clear (); // cuánto tiempo de visualización en matrix en segundos para (uint16_t i =0; i > Cambio al horario de verano - último domingo de marzo a las 2 en punto si ((dayOfWeek ==1) &&(dayOfMonth> =25) &&(month ==3) &&(hora ==2)) {// nastavení hodin na 3 hodinu // ajusta el reloj a 3 horas setDS3231time (se, mi, 3, we, dm, mo, ye); } // změna času na zimní //>> Cambiar al horario de invierno if ((dayOfWeek ==1) &&(dayOfMonth> =25) &&(month ==10) &&(hour ==1) &&(year! =1 )) {// rok použit jako indikace, že bylo léto // año utilizado como indicación de que era verano setDS3231time (se, mi, ho, we, dm, mo, 1); } if ((dayOfWeek ==1) &&(dayOfMonth> =25) &&(month ==10) &&(hour ==3) &&(year ==1)) {// nastavení hodin na 2 hodinu a příznak na 0 // establece el reloj en 2 horas y marca el año en 0 setDS3231time (se, mi, 2, we, dm, mo, 0); } / * Especifique 2 para la ubicación y los bits se mapean de la siguiente manera:0x02 - dos puntos centrales (ambos puntos) 0x04 - dos puntos izquierdos - punto inferior 0x08 - dos puntos izquierdos - punto superior 0x10 - punto decimal * / / * controles de ubicación # 2 también la izquierda 2 puntos individuales como este (=blinky_dot):2 =parpadea nada 3 =parpadea nada 4 =parpadea arriba a la izquierda (un solo punto superior) 5 =parpadea arriba a la izquierda (un solo punto superior) 6 =parpadea arriba a la izquierda (un solo punto superior) ) + ambos dos puntos en el medio 7 =parpadea en la parte superior izquierda (un solo punto superior) + ambos dos puntos en el medio 8 =parpadea en la parte inferior izquierda (un solo punto inferior) 9 =parpadea en la parte inferior izquierda (un solo punto inferior) 10 =parpadea en la parte inferior izquierda (un solo punto inferior) ) + ambos dos puntos a la mitad de 11 =parpadea en la parte inferior izquierda (un punto inferior) + ambos dos puntos a la mitad de 12 =parpadea ambos dos puntos (ambos puntos individuales a la izquierda) sin ambos dos puntos a la mitad de * / // formato de horas:_0:mm if (hora> 9) {matrix.writeDigitNum (0, (hora / 10), falso); matrix.writeDigitNum (1, (hora% 10), falso); // esto escribirá el número (0-9) en una sola ubicación usando el módulo https://www.arduino.cc/reference/en/language/structure/arithmetic-operators/modulo/} else {matrix.writeDigitNum ( 1, hora, falso); } // matriz.drawColon (verdadero); // Ambos dos puntos en el medio están activos:en caso de que no quieras parpadear los puntos a la izquierda, puedes activar ambos dos puntos aquí // dale a los segundos la oportunidad de mostrar los puntos de la ubicación izquierda if (se <=30) {blinky_dot =10; // parpadea en la parte inferior izquierda (un solo punto inferior) + ambos dos puntos en el medio} else if (se> 30) {blinky_dot =6; // parpadea arriba a la izquierda (un solo punto superior) + ambos dos puntos en el medio} matrix.writeDigitRaw (2, blinky_dot); matrix.writeDigitNum (3, (minuto / 10), falso); matrix.writeDigitNum (4, (minuto% 10), falso); matrix.writeDisplay (); // Parpadeo de puntos dobles durante medio segundo de retraso (500); matrix.drawColon (falso); matrix.writeDisplay (); retraso (500); }} vacío displayTemp () {matrix.setBrightness (brillo_matrix); matrix.clear (); byte temp =get3231Temp (); int abs_temp =abs (temp); // número absoluto de un valor matrix.writeDigitNum (1, (abs_temp% 10), false); // posición 1, valor 9, mostrar decimal) if (temp <0) matrix.writeDigitRaw (0,64); if (temp <=-10) matrix.writeDigitRaw (2,12); // y si la temperatura es negativa, graficamos el signo menos en el primer lugar. if (temp>
 =10) matrix.writeDigitNum (0, (abs_temp / 10), falso); // posición 0, valor 1, mostrar decimal) if (temp <=-10) matrix.writeDigitNum (0, (abs_temp / 10), false); // posición 0, valor 1, mostrar decimal) // matrix.writeDigitRaw (2,0x10); // matriz de puntos decimal.writeDigitRaw (3,99); // 99 ="°" matrix.writeDigitRaw (4,57); // 57 =matriz "C ".writeDisplay (); // muestra los valores de temperatura en la línea serial // zobrazí hodnoty teploty na seriove lince Serial.print ("Temperatura en C:"); Serial.println (get3231Temp ()); // +/- 3 Grad Celsius // cuánto tiempo muestra la temperatura en la matriz en segundos delay (delay_matrix_temp);} void setDS3231time (byte segundo, byte minuto, byte hora, byte dayOfWeek, byte dayOfMonth, byte mes, byte año) {/ / establecer datos de fecha y hora en DS3231 Wire.beginTransmission (DS3231_I2C_ADDRESS); Wire.write (0); // establece la siguiente entrada para que comience en el registro de segundos Wire.write (decToBcd (segundo)); // establecer segundos Wire.write (decToBcd (minuto)); // establecer minutos Wire.write (decToBcd (hora)); // establecer horas Wire.write (decToBcd (dayOfWeek)); // establecer el día de la semana (1 =domingo, 7 =sábado) Wire.write (decToBcd (dayOfMonth)); // establecer fecha (1 a 31) Wire.write (decToBcd (mes)); // establecer el mes Wire.write (decToBcd (año)); // establece el año (0 a 99) Wire.endTransmission ();} void getDateDs3231 (byte * segundo, byte * minuto, byte * hora, byte * dayOfWeek, byte * dayOfMonth, byte * mes, byte * año) {Wire. beginTransmission (DS3231_I2C_ADDRESS); Wire.write (0); Wire.endTransmission (); Wire.requestFrom (DS3231_I2C_ADDRESS, 7); * segundo =bcdToDec (Wire.read () &0x7f); * minuto =bcdToDec (Wire.read ()); * hora =bcdToDec (Wire.read () &0x3f); * dayOfWeek =bcdToDec (Wire.read ()); * dayOfMonth =bcdToDec (Wire.read ()); * mes =bcdToDec (Wire.read ()); * año =bcdToDec (Wire.read ());} float get3231Temp () {byte tMSB, tLSB; flotar temp3231; Wire.beginTransmission (DS3231_I2C_ADDRESS); Wire.write (0x11); Wire.endTransmission (); Wire.requestFrom (DS3231_I2C_ADDRESS, 2); if (Wire.available ()) {tMSB =Wire.read (); // Complemento a 2 int parte tLSB =Wire.read (); // porción de fracción temp3231 =(tMSB &B01111111); // hacer 2 matemáticas en Tmsb temp3231 + =((tLSB>> 6) * 0.25); // solo se preocupan por los bits 7 y 8 return temp3231; } else {// ¡oh no, no hay datos! Serial.println ("Error del sensor DS3231 - no se puede leer la temperatura"); matrix.print (0xBEEF, HEX); // informa al usuario con BEEF matrix.writeDisplay (); retraso (5000); }} 
Github
https://github.com/ILohs/MySketches

Esquemas

Ruta LDR corregida

Proceso de manufactura

  1. Reloj de visión pov de Arduino
  2. El reloj IV9 Numitron más simple de bricolaje con Arduino
  3. Reloj de pared simple con Adafruit 1/4 60 Ring Neopixel
  4. Reloj Arduino con tiempos de oración islámicos
  5. Reloj maestro
  6. Arduino Temp. Monitor y reloj en tiempo real con pantalla 3.2
  7. Arduino Nano:Controla 2 motores paso a paso con joystick
  8. Arduino Apple Watch
  9. Reloj de matriz de 7 segmentos
  10. Contador Geiger de mano con Arduino Nano
  11. Reloj despertador simple con DS1302 RTC