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 Pared RGB Animado – Arduino Nano y Control Bluetooth

Componentes y materiales

Arduino Nano R3 1
Módulo Bluetooth HC-06 1
Módulo RTC DS3231 (Maxim Integrated) 1
Tira LED RGB 1
Piezas imprimibles en 3D 1

Herramientas y máquinas necesarias

Descripción del proyecto

Si recuerda, presentamos diseños de relojes como INFINITY MIRROR CLOCK y 7-SEGMENT DIGITAL CLOCK en secciones anteriores. Ahora volvemos con una pieza diferente, especial y muy bonita.

Sin duda le encantará este reloj de pared. Usamos again tira LED RGB. Y la impresora 3D es fundamental. Diseñamos e imprimimos varias piezas necesarias. No es solo un reloj: también incluye diferentes ANIMACIONES. Puede usarlo solo como animación si lo desea.

¿Cómo controla el reloj y las animaciones? Muy sencillo: desarrollamos una app simple para usted. Descárguela en el enlace.

Arduino es indispensable. Usamos Arduino Nano para ahorrar espacio. Nuestro proyecto RELOJ RGB DE PARED, con electrónica compacta, no le decepcionará. ¡Le invitamos a ver el vídeo a continuación!

Funcionamiento

Código

Código Arduino Nano

Código de hora y animaciones en archivos:

#include <DS3231.h>
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif

#define PIN 6
#define PIN2 7
#define NUMPIXELS 60

DS3231 rtc(SDA, SCL);
Time t;
int hr, mnt, sc;
char data, color_select;
int h_red=255, h_green=0, h_blue=0;
int m_red=0, m_green=255, m_blue=0;
int s_red=255, s_green=255, s_blue=0;

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel pixels2 = Adafruit_NeoPixel(12, PIN2, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, PIN, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(12, PIN2, NEO_GRB + NEO_KHZ800);
int delayval = 10;

void setup() {
  Serial.begin(9600);
  rtc.begin();
  #if defined (__AVR_ATtiny85__)
    if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
  #endif
  pixels.begin(); pixels2.begin();
  strip.begin(); strip.show();
  strip2.begin(); strip2.show();
}

void loop() {
  while(Serial.available() > 0) {
    delay(10);
    char c = Serial.read(); data = c;
    
    if(data=='m') { // Ajuste hora
      data=' '; t=rtc.getTime(); hr=t.hour; mnt=t.min; sc=t.sec;
      while(data!='m') {
        data=Serial.read();
        if(data=='+') hr++;
        if(data=='-') hr--;
        for(int i=0;i<12;i++) pixels2.setPixelColor(i, pixels2.Color(0,255,10));
        pixels2.show();
        if(hr>=12) hr-=12;
        if(hr<0) hr+=12;
        pixels2.setPixelColor(hr, pixels2.Color(255,0,0));
        pixels2.show(); delay(100);
        pixels2.setPixelColor(hr, pixels2.Color(0,0,0));
        pixels2.show(); delay(100);
      }
      rtc.setTime(hr,mnt,sc);
      
      if(data=='m') { // Ajuste minutos
        data=' '; t=rtc.getTime(); hr=t.hour; mnt=t.min; sc=t.sec;
        while(data!='m') {
          data=Serial.read();
          if(data=='+') { mnt++; if(mnt==60) mnt=0; }
          if(data=='-') { if(mnt==0) mnt=60; mnt--; }
          for(int k=0;k<60;k++) pixels.setPixelColor(k, pixels.Color(0,0,0));
          for(int k=0;k<60;k++) { pixels.setPixelColor(k, pixels.Color(25,25,255)); k+=4; }
          pixels.setPixelColor(mnt, pixels.Color(0,250,0));
          pixels.show(); delay(100);
          pixels.setPixelColor(mnt, pixels.Color(0,0,0));
          pixels.show(); delay(100);
        }
      }
      rtc.setTime(hr,mnt,sc); data=' ';
    }
    
    // Selección de color para H/M/S
    if(data=='H') color_select=data;
    if(data=='M') color_select=data;
    if(data=='S') color_select=data;
    
    // Modo animación
    if(data=='A') {
      data=' ';
      colorWipe(strip.Color(255,0,0), 50);
      colorWipe(strip.Color(0,255,0), 50);
      colorWipe(strip.Color(0,0,255), 50);
      theaterChase(strip.Color(127,127,127), 50);
      theaterChase(strip.Color(127,0,0), 50);
      theaterChase(strip.Color(0,0,127), 50);
      rainbow(20);
      rainbowCycle(20);
      theaterChaseRainbow(50);
    }
    
    // Ajuste componentes RGB según selección (H/M/S)
    if(data=='r' && color_select=='H') { h_red=Serial.parseInt(); pixels2.setPixelColor(hr, pixels2.Color(h_red,h_green,h_blue)); pixels2.show(); }
    if(data=='g' && color_select=='H') { h_green=Serial.parseInt(); pixels2.setPixelColor(hr, pixels2.Color(h_red,h_green,h_blue)); pixels2.show(); }
    if(data=='b' && color_select=='H') { h_blue=Serial.parseInt(); pixels2.setPixelColor(hr, pixels2.Color(h_red,h_green,h_blue)); pixels2.show(); }
    
    if(data=='r' && color_select=='M') { m_red=Serial.parseInt(); pixels.setPixelColor(mnt, pixels.Color(m_red,m_green,m_blue)); pixels.show(); }
    if(data=='g' && color_select=='M') { m_green=Serial.parseInt(); pixels.setPixelColor(mnt, pixels.Color(m_red,m_green,m_blue)); pixels.show(); }
    if(data=='b' && color_select=='M') { m_blue=Serial.parseInt(); pixels.setPixelColor(mnt, pixels.Color(m_red,m_green,m_blue)); pixels.show(); }
    
    if(data=='r' && color_select=='S') { s_red=Serial.parseInt(); pixels.setPixelColor(sc, pixels.Color(s_red,s_green,s_blue)); pixels.show(); }
    if(data=='g' && color_select=='S') { s_green=Serial.parseInt(); pixels.setPixelColor(sc, pixels.Color(s_red,s_green,s_blue)); pixels.show(); }
    if(data=='b' && color_select=='S') { s_blue=Serial.parseInt(); pixels.setPixelColor(sc, pixels.Color(s_red,s_green,s_blue)); pixels.show(); }
  }
  
  // Bucle principal: actualiza display cada 10ms
  t = rtc.getTime(); hr=t.hour; mnt=t.min; sc=t.sec;
  pixels.setPixelColor(sc, pixels.Color(s_red,s_green,s_blue));
  pixels.setPixelColor(mnt, pixels.Color(m_red,m_green,m_blue));
  pixels.show();
  
  for(int i=0;i<12;i++) {
    if(i==hr) i++;
    pixels2.setPixelColor(i, pixels2.Color(0,255,0));
  }
  pixels2.show();
  if(hr>=12) hr-=12;
  pixels2.setPixelColor(hr, pixels2.Color(h_red,h_green,h_blue));
  pixels2.show(); delay(10);
  
  pixels.setPixelColor(sc, pixels.Color(0,0,0));
  for(int k=0;k<60;k++) pixels.setPixelColor(k, pixels.Color(0,0,0));
  for(int k=0;k<60;k++) { pixels.setPixelColor(k, pixels.Color(25,25,255)); k+=4; }
  pixels.setPixelColor(mnt, pixels.Color(0,0,0));
  pixels.show();
}

// Funciones de animación: colorWipe, rainbow, rainbowCycle, theaterChase, theaterChaseRainbow, Wheel
// ... (incluidas en el código completo)

Esquemáticos

Esquema de conexiones y control por smartphone.

clockconnect__Ieit1qA91l.apk (App Android para control)

Proceso de manufactura

  1. Reloj de cuco: historia, artesanía y evolución moderna
  2. Reloj POV con Arduino: Construye una pantalla LED de persistencia de visión
  3. Construye un Reloj de Pared Elegante con Anillo Neopixel 60 LEDs Adafruit y Arduino
  4. Reloj de Palabras DIY con Arduino: Construye una Pantalla Elegante en Tiempo Real
  5. Construye un Reloj Maestro LED Personalizado con Alarma – Visible desde 12 Metros
  6. Reloj 3D RGB Arduclock – Bluetooth, LED NeoPixel y RTC
  7. Reloj de Palabras en Italiano con Arduino Nano, NeoPixel, LCD y RTC
  8. Generador de Ondas JX – Oscilador DDS Compatible con Arduino con Pantalla OLED
  9. Construye un Reloj Berlín con Arduino UNO – Reloj de Matriz LED DIY
  10. Reloj Preciso de 7 Segmentos con Arduino Pro Mini y RTC DS1302
  11. Reloj Espejo Infinito: Elegancia infinita y hora precisa