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 IoT RGB HexMatrix – Pantalla LED Hexagonal Dinámica

Componentes y suministros

Componente Cantidad
Arduino UNO 1
NodeMCU ESP8266 Breakout Board 1
LEDs NeoPixel WS2811 (96 unidades) 1 tira
Fuente conmutada 5V 2.5A 1

Herramientas y máquinas necesarias

Aplicaciones y servicios en línea

Sobre este proyecto

Reloj IoT RGB HexMatrix – Pantalla LED Hexagonal Dinámica

Reloj IoT RGB HexMatrix – Pantalla LED Hexagonal Dinámica

HexMatrix es una matriz LED formada por píxeles triangulares; seis píxeles forman un hexágono. Permite mostrar animaciones variadas (librería FastLED) y dígitos del 0 al 9 usando 10 segmentos por dígito, funcionando como reloj IoT.

Suministros

Paso 1: Impresión 3D

Reloj IoT RGB HexMatrix – Pantalla LED Hexagonal Dinámica

Reloj IoT RGB HexMatrix – Pantalla LED Hexagonal Dinámica

Reloj IoT RGB HexMatrix – Pantalla LED Hexagonal Dinámica

Reloj IoT RGB HexMatrix – Pantalla LED Hexagonal Dinámica

Reloj IoT RGB HexMatrix – Pantalla LED Hexagonal Dinámica

Paso 2: Conexiones del circuito

Reloj IoT RGB HexMatrix – Pantalla LED Hexagonal Dinámica

Reloj IoT RGB HexMatrix – Pantalla LED Hexagonal Dinámica

Paso 3: Nota importante

Paso 4: Montaje

Reloj IoT RGB HexMatrix – Pantalla LED Hexagonal Dinámica

Reloj IoT RGB HexMatrix – Pantalla LED Hexagonal Dinámica

Reloj IoT RGB HexMatrix – Pantalla LED Hexagonal Dinámica

Reloj IoT RGB HexMatrix – Pantalla LED Hexagonal Dinámica

Reloj IoT RGB HexMatrix – Pantalla LED Hexagonal Dinámica

Reloj IoT RGB HexMatrix – Pantalla LED Hexagonal Dinámica

Reloj IoT RGB HexMatrix – Pantalla LED Hexagonal Dinámica

Reloj IoT RGB HexMatrix – Pantalla LED Hexagonal Dinámica

Paso 5: Programación

HexMatrix.ino (animaciones):

  1. Abre en Arduino IDE.
  2. Instala librería FastLED.
  3. Selecciona placa, puerto y sube.

Reloj IoT RGB HexMatrix – Pantalla LED Hexagonal Dinámica

Reloj IoT RGB HexMatrix – Pantalla LED Hexagonal Dinámica

Reloj IoT RGB HexMatrix – Pantalla LED Hexagonal Dinámica

Clock1 y Clock2 (reloj IoT):

  1. Abre en Arduino IDE.
  2. Personaliza colores dígitos y fondo:
// Color dígitos (RGB)
int r = 255, g = 255, b = 255;
// Color fondo (RGB)
int br = 0, bg = 20, bb = 10;
  1. Configura Wi-Fi y zona horaria:
const char* ssid = "Tu_WiFi";
const char* password = "Tu_Password";
// Zona horaria (ej. India UTC+5:30 = 5.5 * 3600)
int timezone = -5.5 * 3600; // Ajusta a tu zona (negativo = oeste de UTC)
  1. Selecciona placa ESP8266, puerto y sube.

Reloj IoT RGB HexMatrix – Pantalla LED Hexagonal Dinámica

Reloj IoT RGB HexMatrix – Pantalla LED Hexagonal Dinámica

Además, FastLED incluye muchos ejemplos de animaciones adicionales.

Código

clock1.ino (reloj con fondo estático)

#include <ESP8266WiFi.h>
#include <time.h>
#include <FastLED.h>

#define LED_PIN 2
#define NUM_LEDS 96
#define BRIGHTNESS 255
#define LED_TYPE WS2811
#define COLOR_ORDER RGB

CRGB leds[NUM_LEDS];

// Color dígitos
int r = 255, g = 255, b = 255;
// Color fondo
int br = 0, bg = 20, bb = 10;

const char* ESP_HOST_NAME = "esp-" + ESP.getFlashChipId();
const char* ssid = "Wifi_Name";
const char* password = "Password";
int timezone = -5.5 * 3600;
int dst = 0;

WiFiClient wifiClient;

void connectWifi() {
  WiFi.begin(ssid, password);
  Serial.print("Connecting to "); Serial.println(ssid);
  while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); }
  Serial.println(); Serial.println("WiFi connected!");
  Serial.println(WiFi.localIP()); Serial.println();
}

void setup() {
  Serial.begin(115200);
  delay(500);
  connectWifi();
  configTime(timezone, dst, "pool.ntp.org", "time.nist.gov");
  FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
  FastLED.setBrightness(BRIGHTNESS);
}

void loop() {
  time_t now = time(nullptr);
  struct tm* p_tm = localtime(&now);
  Serial.printf("Date & Time: %02d/%02d/%04d %02d:%02d:%02d\n",
    p_tm->tm_mday, p_tm->tm_mon + 1, p_tm->tm_year + 1900,
    p_tm->tm_hour % 12 ?: 12, p_tm->tm_min, p_tm->tm_sec);

  int hour = p_tm->tm_hour;
  int minute = p_tm->tm_min;
  if (hour > 12) hour -= 12;

  background(); // Fondo

  // Horas (funciones hour0()...hour11())
  switch (hour) {
    case 0: case 12: hour12(); break;
    case 1: hour1(); break;
    case 2: hour2(); break;
    case 3: hour3(); break;
    case 4: hour4(); break;
    case 5: hour5(); break;
    case 6: hour6(); break;
    case 7: hour7(); break;
    case 8: hour8(); break;
    case 9: hour9(); break;
    case 10: hour10(); break;
    case 11: hour11(); break;
  }

  // Minutos (funciones min0()...min59())
  switch (minute) {
    case 0: min0(); break;  case 1: min1(); break;  case 2: min2(); break;
    case 3: min3(); break;  case 4: min4(); break;  case 5: min5(); break;
    case 6: min6(); break;  case 7: min7(); break;  case 8: min8(); break;
    case 9: min9(); break;  case 10: min10(); break; case 11: min11(); break;
    case 12: min12(); break; case 13: min13(); break; case 14: min14(); break;
    case 15: min15(); break; case 16: min16(); break; case 17: min17(); break;
    case 18: min18(); break; case 19: min19(); break; case 20: min20(); break;
    case 21: min21(); break; case 22: min22(); break; case 23: min23(); break;
    case 24: min24(); break; case 25: min25(); break; case 26: min26(); break;
    case 27: min27(); break; case 28: min28(); break; case 29: min29(); break;
    case 30: min30(); break; case 31: min31(); break; case 32: min32(); break;
    case 33: min33(); break; case 34: min34(); break; case 35: min35(); break;
    case 36: min36(); break; case 37: min37(); break; case 38: min38(); break;
    case 39: min39(); break; case 40: min40(); break; case 41: min41(); break;
    case 42: min42(); break; case 43: min43(); break; case 44: min44(); break;
    case 45: min45(); break; case 46: min46(); break; case 47: min47(); break;
    case 48: min48(); break; case 49: min49(); break; case 50: min50(); break;
    case 51: min51(); break; case 52: min52(); break; case 53: min53(); break;
    case 54: min54(); break; case 55: min55(); break; case 56: min56(); break;
    case 57: min57(); break; case 58: min58(); break; case 59: min59(); break;
    case 60: min60(); break;
  }

  FastLED.show();
  FastLED.clear();
  FastLED.show();
}

void background() {
  for (int i = 0; i < NUM_LEDS; i++) leds[i] = CRGB(br, bg, bb);
}

/* Funciones hourX() y minX() definen qué LEDs encender para cada dígito.
   Cada una asigna CRGB(r,g,b) a índices específicos del array leds[].
   El código completo incluye 12 funciones hour y 61 funciones min. */

clock2.ino (reloj con fondo animado "pride")

#include <ESP8266WiFi.h>
#include <time.h>
#include <FastLED.h>

#if FASTLED_VERSION < 3001000
#error "Requiere FastLED 3.1 o posterior"
#endif

#define DATA_PIN 2
#define LED_TYPE WS2811
#define COLOR_ORDER RGB
#define NUM_LEDS 96
#define BRIGHTNESS 255

CRGB leds[NUM_LEDS];
int r = 255, g = 255, b = 255;

const char* ESP_HOST_NAME = "esp-" + ESP.getFlashChipId();
const char* ssid = "Wifi_Name";
const char* password = "Password";
int timezone = -5.5 * 3600;
int dst = 0;

WiFiClient wifiClient;

void connectWifi() { /* igual que clock1 */ }

void setup() {
  Serial.begin(115200);
  delay(500);
  connectWifi();
  configTime(timezone, dst, "pool.ntp.org", "time.nist.gov");
  FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS)
    .setCorrection(TypicalLEDStrip).setDither(BRIGHTNESS < 255);
  FastLED.setBrightness(BRIGHTNESS);
}

void loop() {
  time_t now = time(nullptr);
  struct tm* p_tm = localtime(&now);
  int hour = p_tm->tm_hour;
  int minute = p_tm->tm_min;
  if (hour > 12) hour -= 12;

  pride(); // Fondo animado arcoíris

  // Mismo switch-case para hourX() y minX() que clock1
  // ...

  FastLED.show();
  FastLED.clear();
  FastLED.show();
}

void pride() {
  static uint16_t sPseudotime = 0, sLastMillis = 0, sHue16 = 0;
  uint8_t sat8 = beatsin88(87, 220, 250);
  uint8_t brightdepth = beatsin88(341, 96, 224);
  uint16_t brightnessthetainc16 = beatsin88(203, 25*256, 40*256);
  uint8_t msmultiplier = beatsin88(147, 23, 60);
  uint16_t hue16 = sHue16;
  uint16_t hueinc16 = beatsin88(113, 1, 3000);
  uint16_t ms = millis();
  uint16_t deltams = ms - sLastMillis;
  sLastMillis = ms;
  sPseudotime += deltams * msmultiplier;
  sHue16 += deltams * beatsin88(400, 5, 9);
  uint16_t brightnesstheta16 = sPseudotime;

  for (uint16_t i = 0; i < NUM_LEDS; i++) {
    hue16 += hueinc16;
    uint8_t hue8 = hue16 / 256;
    brightnesstheta16 += brightnessthetainc16;
    uint16_t b16 = sin16(brightnesstheta16) + 32768;
    uint16_t bri16 = (uint32_t)b16 * b16 / 65536;
    uint8_t bri8 = (uint32_t)bri16 * brightdepth / 65536;
    bri8 += (255 - brightdepth);
    CRGB newcolor = CHSV(hue8, sat8, bri8);
    uint16_t pixelnumber = (NUM_LEDS - 1) - i;
    nblend(leds[pixelnumber], newcolor, 64);
  }
}

/* Funciones hourX() y minX() idénticas a clock1 */

Esquemáticos

Reloj IoT RGB HexMatrix – Pantalla LED Hexagonal Dinámica

Reloj IoT RGB HexMatrix – Pantalla LED Hexagonal Dinámica

Proceso de manufactura

  1. Prevención de uniones de soldadura en frío: Garantizando electrónica industrial fiable mediante calor adecuado
  2. Reloj de cuco: historia, artesanía y evolución moderna
  3. Botón IoT AWS Controlado por Movimiento con Raspberry Pi, Sensor PIR y MQTT
  4. Extensión de GoPiGo v2 en Windows 10 IoT Core para Raspberry Pi 3
  5. Reloj POV con Arduino: Construye una pantalla LED de persistencia de visión
  6. Planta Inteligente IoT: Construye un Invernadero Conectado con Arduino y Azure
  7. Reloj Espejo Infinito: Elegancia infinita y hora precisa
  8. Guía Profesional del Proceso de Soldadura Blanda (Soldering): Técnica, Materiales y Pasos
  9. Soldadura Blanda (Soldadura con Estaño) Explicada: Tipos, Técnicas y Guía Paso a Paso
  10. Guía Experta: Solución de Problemas de Soldadura por Onda en PCB
  11. Dominando la soldadura en PCB: Tipos, técnicas y recursos clave