Autor: Ger

  • Control de Fase en Corriente Alterna vs Conversión DC-DC: La Tecnología Buck

    Control de Fase en Corriente Alterna vs Conversión DC-DC: La Tecnología Buck

    La eficiencia en la gestión de energía eléctrica se fundamenta en la capacidad de transformar niveles de tensión con el mínimo desperdicio calórico. Existen diversos métodos para lograr este objetivo, diferenciándose drásticamente según el tipo de corriente y la tecnología aplicada.

    Control de Fase en Corriente Alterna (AC)

    En sistemas de corriente alterna a 50Hz, se suele utilizar el control de fase mediante dispositivos semiconductores como Triacs. Este método consiste en seccionar la onda senoidal original, eliminando una fracción del semiciclo para reducir la potencia entregada a la carga.

    Se observa que el resultado es una onda “mordida” o incompleta. Si bien resulta efectivo para aplicaciones de baja precisión como calefactores o iluminación incandescente, la deformación de la onda genera armónicos y ruido eléctrico significativo. La frecuencia de operación queda limitada a la de la red eléctrica, lo que impide una entrega de energía verdaderamente continua.

    Conversión DC-DC: La Tecnología Buck

    A diferencia del recorte de fase, el convertidor reductor o Buck opera en corriente continua mediante conmutación de alta frecuencia, típicamente a 50kHz. En este esquema, se extraen “rebanadas” de energía de una fuente superior (como 12V) para conformar una tensión inferior (como 5V).

    Mecánica del Proceso:La conmutación a 50.000 veces por segundo permite que los componentes reactivos (inductor y capacitor) actúen como un filtro de suavizado constante. Mientras que en AC el recorte es lento y evidente, en un sistema Buck la alta velocidad permite “derretir” los pulsos cuadrados de energía, transformándolos en una corriente continua casi pura.

    [Image of buck converter voltage waveforms]

    Comparativa Técnica

    Característica Control de Fase (AC) Convertidor Buck (DC)
    Frecuencia típica 50 Hz / 60 Hz 50 kHz – 1 MHz
    Método Recorte de onda senoidal Conmutación por PWM
    Salida Onda pulsante deformada Corriente continua suavizada
    Eficiencia Media (pérdidas por fase) Alta (superior al 90%)

    La implementación de un sistema Buck requiere un control preciso, generalmente un algoritmo PID discreto, para ajustar el ancho de pulso en microsegundos. Esta sofisticación técnica permite que dispositivos electrónicos sensibles reciban energía estable sin el estrés térmico asociado a los reguladores lineales o la inestabilidad de los controles de fase tradicionales.

    Documentación técnica sobre topologías de potencia y eficiencia energética. Análisis basado en implementaciones de control digital sobre hardware AVR y simulación de plantas de potencia.
  • Arquitectura e Instalaciones

    Arquitectura e Instalaciones

    Diseño arquitectónico con la precisión de la Ingeniería Aplicada. La práctica integra desde instalaciones en viviendas hasta el desarrollo de sistemas de control PID y electrónica para infraestructuras industriales. Es arquitectura resuelta como un sistema operativo: eficiente, funcional y automatizada. El enfoque es directo: transformar la complejidad técnica en espacios que funcionan con absoluta fluidez.

    Arquitectura

    • Arquitectura e Instalaciones

      Arquitectura e Instalaciones

      Diseño arquitectónico con la precisión de la Ingeniería Aplicada. La práctica integra desde instalaciones en viviendas hasta el desarrollo de sistemas de control PID y electrónica para infraestructuras industriales. Es arquitectura resuelta como un sistema operativo: eficiente, funcional y automatizada. El enfoque es directo: transformar la complejidad técnica en espacios que funcionan con absoluta fluidez.…

    • Circuito, Programación, Fabricación de PCB de Máquina Contadora de Tarjetas.

      Circuito, Programación, Fabricación de PCB de Máquina Contadora de Tarjetas.

      En entornos de producción, la precisión en el conteo de insumos es crítica para evitar fugas financieras y errores logísticos. Este proyecto surge como una solución robusta para automatizar el conteo de tarjetas plásticas y hojas mediante un sistema embebido basado en el ESP32. El objetivo principal fue desarrollar un dispositivo que no solo fuera…

    • Trabajando con el Arduino OPTA

      Trabajando con el Arduino OPTA

      Al integrar un microcontrolador de grado industrial como el Opta, es importante diferenciarlo de las placas de desarrollo convencionales. Este Hardware exige un protocolo de inicio específico para garantizar la estabilidad del sistema y su correcta operación en entornos de automatización. A continuación la configuración, alimentación y manejo de señales para una implementación profesional.  …

    • Paisajismo Sonoro Integrado: Estudio de Luz y Silencio: Reproducción de MP3 con ESP32 y DFPlayer Mini

      Paisajismo Sonoro Integrado: Estudio de Luz y Silencio: Reproducción de MP3 con ESP32 y DFPlayer Mini

      Actualizado: 3/7/2025: Ahora es compatible con familia de uC Espressif ESP8266 y ESP32. Este proyecto detalla cómo utilizar un ESP32 y un módulo DFPlayer Mini para reproducir archivos MP3 de manera automática cada cierto tiempo. Se abordan los aspectos del módulo DFPlayer Mini, las conexiones necesarias y el código de programación, proporcionando una guía completa…

    • Prototipo Mecatrónica: Máquina Encapsuladora de Café

      Prototipo Mecatrónica: Máquina Encapsuladora de Café

      El núcleo del desarrollo se centró en la creación de un sistema capaz de gestionar múltiples variables críticas en tiempo real: desde el movimiento coordinado de motores paso a paso para el posicionamiento de las cápsulas, hasta el control de un motor DC y una resistencia de sellado térmico. Este prototipo no solo buscaba la…

    • Reforma en Hub logístico

      Reforma en Hub logístico

      La intervención en nodos críticos de transporte, como el Aeroparque Jorge Newbery, requiere trascender la simple remodelación para ejecutar una reingeniería espacial de precisión. Ante un escenario de infraestructura degradada y bajo la estricta presión de un cronograma de 72 horas, la prioridad fue orquestar una recuperación integral que no admitiera márgenes de error. Se…

    • Arquitectura efímera y Arduino IDE: Ampliación de cámara de frío

      Arquitectura efímera y Arduino IDE: Ampliación de cámara de frío

      ¿Cómo ampliar la superficie de una cámara de frío en 4 días? Con reefer ultramarinos El proyecto consistió en conectar, por medio de una antecámara (también de temperatura controlada) 2 reefer como los que llevan mercancía congelada de un continente a otro. Cliente: OCASA (Organización Courier Argentina Sociedad Anónima) Trabajo: Obra civil y Automatización de sistema para control…

    • Propuesta Club náutico en Beccar

      Propuesta Club náutico en Beccar

      Club náutico barrial ubicado en la localidad de Beccar, Argentina. El diseño se centra en un playón central donde los jóvenes preparan sus embarcaciones, permitiendo que sus familias observen el proceso cómodamente. La infraestructura utiliza materiales duraderos como el hormigón armado y la chapa para albergar talleres, vestuarios y áreas administrativas. El complejo está específicamente…

    Arquitectura | Electrónica | Programación

  • Sistema de gestión de batería avanzado Analogico + SBS

    Sistema de gestión de batería avanzado Analogico + SBS

    A veces, en ingeniería, el reto no es solo crear algo nuevo, sino hacer que conviva con lo que ya existe. Hace poco estuve trabajando en un proyecto muy interesante que resume perfectamente esta idea: un sistema de gestión y registro de baterías (Datalogger) capaz de hablar dos “idiomas” distintos.

    El problema: Lo viejo vs. Lo nuevo

    En el mundo de las baterías hay, básicamente, dos grandes grupos conviviendo:

    1. Las baterías “inteligentes” (SBS): Son las modernas. Ellas mismas te dicen “estoy al 80%”, “tengo esta temperatura” o “me quedan tantos ciclos de vida”. Se comunican digitalmente.
    2. Las baterías “tradicionales” (Analógicas): Son las de toda la vida. No “hablan”, así que para saber cómo están tienes que medir físicamente su voltaje, la corriente que entra y sale, y usar sondas externas para vigilar que no se calienten.

    El objetivo era crear un cerebro único que pudiera manejar ambas situaciones sin despeinarse.

    La solución: Un sistema híbrido

    Desarrollé un firmware capaz de trabajar en dos modos. Si el sistema detecta una batería moderna, se comporta como un “host” digital: lee directamente los datos internos (voltaje, amperaje, salud de la batería) a través de protocolos de comunicación estándar. Es limpio y preciso.

    Pero, si conectamos una batería analógica, el sistema cambia el chip. Pasa a usar sensores físicos para leer la corriente y el voltaje, y gestiona sondas de temperatura externas para asegurarse de que todo opera dentro de los márgenes de seguridad.

    ¿Por qué es útil esto?

    Lo bonito de este desarrollo es la versatilidad. El dispositivo no solo gestiona la carga, sino que actúa como una “caja negra”:

    • Registro de datos: Guarda un historial diario en una tarjeta SD con todo lo que pasa (ciclos de carga, temperaturas, potencias…).
    • Seguridad: Tiene alarmas programadas. Si una batería se calienta demasiado o baja de cierto nivel, el sistema avisa y corta para prevenir daños, da igual si la batería es digital o analógica.
    • Visualización: Toda la info se muestra sencilla en una pantalla OLED para que el usuario sepa qué pasa de un vistazo.

    Al final, este proyecto ha sido un buen ejercicio de adaptación. La electrónica sirve para hacer de puente entre tecnologías distintas, alargando la vida útil de los equipos y mejorando la seguridad, sea cual sea la batería que se use.

  • Circuito, Programación, Fabricación de PCB de Máquina Contadora de Tarjetas.

    Circuito, Programación, Fabricación de PCB de Máquina Contadora de Tarjetas.

    En entornos de producción, la precisión en el conteo de insumos es crítica para evitar fugas financieras y errores logísticos. Este proyecto surge como una solución robusta para automatizar el conteo de tarjetas plásticas y hojas mediante un sistema embebido basado en el ESP32. El objetivo principal fue desarrollar un dispositivo que no solo fuera preciso, sino también capaz de operar en condiciones industriales, integrando sensores ópticos de alta velocidad y una lógica de control avanzada para garantizar la integridad de los datos en tiempo real.

    El proyecto consta de un ESP32 con un sistema contador de hojas y 2 foto-células/sensores para el procedimiento de trabajo.

    El núcleo del sistema reside en una Máquina de Estados Finitos (FSM) programada en el ESP32, la cual gestiona el ciclo de trabajo evitando falsos positivos mediante el filtrado de señales de dos fotocélulas dispuestas en configuración diferencial. La arquitectura de hardware se centraliza en una PCB diseñada específicamente para este propósito, que integra una interfaz I2C para la visualización en LCD, una botonera industrial de cuatro comandos y salidas optoacopladas mediante relays para el control de actuadores externos. Este enfoque modular permite una alta mantenibilidad y una inmunidad superior al ruido electromagnético, factor común en plantas de fabricación.

    La lista de Hardware de este proyecto es:

    -ESP32

    -Sensores digitales/fotocélulas

    -LCD 1602 con módulo I2C

    -Botonera de 4 salidas simple

    -Salidas con relay

    SUMINISTRO CONTROLADO

    Fabricado en España

    El resultado es un equipo compacto, escalable y de alta fiabilidad, Fabricado que transforma un proceso manual propenso a errores en una operación automatizada y auditable. La implementación de este sistema demuestra cómo la integración de microcontroladores modernos y un diseño de hardware dedicado puede optimizar costos en la pequeña y mediana industria. Actualmente, el diseño se encuentra optimizado para su integración en líneas de producción existentes, reafirmando el compromiso con la ingeniería de precisión y la eficiencia operativa.

  • Reforma en oficina en Caballito, CABA

    Reforma en oficina en Caballito, CABA

    Oficina 125m2 en Caballito CABA

    Año: 2025

    Presupuesto: 4.5M (u$s3200)

    Obra mínima de puesta en valor

    Piso:

    -Había una alfombra en mal estado debido a canalizaciones mal cerradas en la parte inferior.

    -Se decidió colocar piso flotante de alto tránsito para lograr un excelente resultado por una baja inversión.

    -Reparación de contrapiso y carpeta

    Instalaciones:

    -Se repararon y completaron y unificaron los dispositivos lumínicos

    -Reparación de Aires Acondicionados

    -Se reconectaron tomacorrientes reconsituyendo circuito cortado en mudanza. Se aprovechó cablecanal 100 50 existente

  • Trabajando con el Arduino OPTA

    Trabajando con el Arduino OPTA

    Al integrar un microcontrolador de grado industrial como el Opta, es importante diferenciarlo de las placas de desarrollo convencionales.

    Este Hardware exige un protocolo de inicio específico para garantizar la estabilidad del sistema y su correcta operación en entornos de automatización.

    A continuación la configuración, alimentación y manejo de señales para una implementación profesional.

     


    1. Configuración del Entorno (IDE 2.3.7)

    Es habitual que, al iniciar el IDE por primera vez, no se visualicen los ejemplos específicos del dispositivo. Esto responde a la arquitectura del Opta (basada en Mbed OS), la cual difiere de la arquitectura AVR clásica. El entorno de desarrollo requiere la instalación explícita del núcleo para acceder a las librerías de hardware.

    1. Abrir el Gestor de Tarjetas (Board Manager) en el menú lateral del IDE.
    2. Buscar el término “Opta” en la barra de búsqueda.
    3. Seleccionar e instalar el paquete “Arduino Mbed OS Opta Boards”.
    4. Verificar en Archivo > Ejemplos > OPTA la disponibilidad de los códigos de referencia (Ethernet, Modbus, Digital I/O).

    2. Matriz de Alimentación

    Para evitar errores comunes en la puesta en marcha, es necesario distinguir entre la alimentación lógica y la operativa:

    Fuente de Energía Uso Correcto Limitación Técnica
    Puerto USB-C Programación, depuración serial y lógica de control. Insuficiente para conmutar salidas. No alimenta la etapa de potencia de los relés.
    Bornera (12-24V DC) Operación en campo, activación de relés y sensores. Requiere fuente externa regulada. Es necesario unificar tierras (GND) al usar múltiples fuentes.
    Diferencias operativas según la fuente de alimentación.

    3. Gestión de Señales y Entradas

    La versatilidad de las entradas es un factor clave en la integración de sistemas. Las 8 entradas disponibles permiten una configuración híbrida mediante software, facilitando la lectura de señales analógicas de 0-10V, estándar en la industria para sensores de nivel o presión, sin necesidad de hardware adicional.

    void setup() {
      // Inicializar comunicación serial para monitoreo
      Serial.begin(9600);
      
      // Aumentar la resolución de lectura a 12 bits (0-4095)
      // por defecto la resolución es de 10 bits (0-1023)
      analogReadResolution(12);
    }
    
    void loop() {
      // Lectura de la entrada A0 (I1 en la bornera)
      int sensorValue = analogRead(A0);
      
      // Conversión básica a voltaje (referencia 10V estimada)
      float voltage = sensorValue * (10.0 / 4095.0);
      
      Serial.println(voltage);
      delay(100);
    }

    Nota técnica sobre los Relés:
    Las salidas integradas son electromecánicas. Aunque robustas, poseen un ciclo de vida mecánico finito. No se recomienda utilizarlas para conmutación de alta frecuencia (PWM). Para aplicaciones que requieran pulsos rápidos, se debe optar por Relés de Estado Sólido (SSR) externos.

  • Sensor de humedad de suelo con control de alimentación (moisture-sensor-for-plants)

    Sensor de humedad de suelo con control de alimentación (moisture-sensor-for-plants)

    moisture-sensor-for-plants

    Este proyecto implementa un sistema básico para medir la humedad del suelo mediante un microcontrolador, optimizando el consumo de energía de la sonda gracias a un pin de alimentación controlado por software. Está diseñado para facilitar la integración en entornos de bajo consumo o alimentados por baterías.

    Ver repositorio en Github

    Objetivo

    Obtener lecturas confiables del nivel de humedad del suelo mientras se evita la corrosión y el consumo innecesario de corriente de la sonda, encendiéndola solo durante el tiempo mínimo necesario para la medición.

    Estructura del proyecto

    El código está organizado en tres partes principales:

    1. Encabezado (moisture.h)

    Define la interfaz de uso:

    • moistureInit(): inicializa los pines para alimentar la sonda y leer la señal analógica.
    • moistureSetWarmup(): permite configurar el tiempo de precalentamiento antes de la medición.
    • moistureRead(): realiza la lectura del valor crudo del ADC.

    2. Implementación (moisture.cpp)

    Contiene la lógica de funcionamiento:

    • Al inicializar, configura el pin de alimentación como salida y lo apaga por defecto.
    • Durante la lectura, habilita la alimentación, espera el tiempo de calentamiento configurado (300 ms por defecto) y luego toma la muestra analógica.
    • Apaga la alimentación inmediatamente después de la lectura para reducir la corrosión y el consumo.

    3. Sketch principal (moisture1.ino)

    Ejemplo de uso que inicializa el sensor con pines definidos, configura el precalentamiento si es necesario y lee los valores de humedad periódicamente, mostrando los resultados por el puerto serial.

    Características destacadas

    • Control programático de la alimentación de la sonda.
    • Configuración flexible del tiempo de precalentamiento.
    • Lectura directa del valor analógico en formato crudo (0–1023).
    • Diseño modular para facilitar la reutilización en otros proyectos.

    Aplicaciones

    El sistema está pensado para proyectos de riego automático, monitoreo de jardines o cultivos, y cualquier implementación que requiera reducir el consumo y prolongar la vida útil de sondas de humedad

  • Proyecto con Módulo WT32-SC01 Plus (ESP32-S3) con LVGL y funciones WiFi+Telegram

    Proyecto con Módulo WT32-SC01 Plus (ESP32-S3) con LVGL y funciones WiFi+Telegram

    1. Interfaz Gráfica con LVGL y LovyanGFX

    La interfaz gráfica se desarrolla utilizando LVGL y LovyanGFX, aprovechando la pantalla táctil IPS 480×320 del WT32-SC01 Plus.

    • Widgets como botones, sliders, gráficos, gauges, arcos, tablas, calendarios y teclados numéricos.
    • Navegación sencilla entre pantallas usando botones.
    • Estética consistente y moderna.

    Ejemplo de creación de un botón en LVGL:

    lv_obj_t *btn = lv_btn_create(screen_main);
    lv_obj_set_size(btn, 100, 50);
    lv_obj_align(btn, LV_ALIGN_CENTER, 0, 0);
    lv_obj_t *label = lv_label_create(btn);
    lv_label_set_text(label, "Enviar");
    lv_obj_center(label);
    lv_obj_add_event_cb(btn, sendBtn_event_cb, LV_EVENT_CLICKED, NULL);
      
    

    2. Conectividad WiFi y Bot de Telegram

    El ESP32-S3 gestiona WiFi en paralelo con LVGL sin interrumpir la interfaz gráfica. Ejemplo de envío de mensajes a Telegram al pulsar un botón:

    #include <WiFiClientSecure.h>
    WiFiClientSecure client;
    client.setInsecure();
    if(client.connect("api.telegram.org", 443)) {
      String url = String("/bot") + BOT_TOKEN + "/sendMessage?chat_id=" + CHAT_ID + "&text=Botón+presionado";
      client.println(String("GET ") + url + " HTTP/1.1");
      client.println("Host: api.telegram.org");
      client.println("Connection: close");
      client.println();
    }
      
    

    3. Información útil del Hardware WT32-SC01 Plus

    Función / Bus GPIO(s) Uso en WT32-SC01 Plus
    GPIO Expansión 10, 11, 12, 13, 14, 21 Libres para usuario
    BOOT0 0 Strapping pin, evitar uso general
    I²C Touch 5 (SCL), 6 (SDA) Reservados FT6336U
    SPI SD 39, 38, 40, 41 MicroSD opcional
    UART0 43 (TX0), 44 (RX0) Programación/Serial
    Internos 45 (LCD_BL), 4 (LCD_RST), 7 (TP_INT) Pantalla y touch internos

    4. Organización del Código del Proyecto

    El código se organiza en:

    • main.cpp: Control de alto nivel, setup, loop, callbacks eventos.
    • sc01.cpp/.h: Inicialización de hardware/UI y funciones específicas del WT32-SC01 Plus.

    Ejemplo simplificado del loop principal:

    void loop() {
        lv_timer_handler();
        if(current_screen != prev_screen) {
            switch(current_screen) {
                case SCREEN_MAIN: lv_scr_load(screen_main); break;
                case SCREEN_DEMO: lv_scr_load(screen_demo); break;
                case SCREEN_INFO: lv_scr_load(screen_info); break;
            }
            prev_screen = current_screen;
        }
        delay(5);
    }
      
    

    5. Explicación Detallada del Proyecto y Recomendaciones

    La estructura modular facilita expansión, mantenibilidad y claridad. Se recomienda:

    • Dividir tareas intensivas usando ambos núcleos del ESP32.
    • Evitar bloqueos largos en el loop principal.
    • Monitorear el uso de memoria.
    • Asegurar que cualquier acceso concurrente a LVGL sea seguro.

    Referencias útiles:

  • Paisajismo Sonoro Integrado: Estudio de Luz y Silencio: Reproducción de MP3 con ESP32 y DFPlayer Mini

    Paisajismo Sonoro Integrado: Estudio de Luz y Silencio: Reproducción de MP3 con ESP32 y DFPlayer Mini

    Actualizado: 3/7/2025: Ahora es compatible con familia de uC Espressif ESP8266 y ESP32. Este proyecto detalla cómo utilizar un ESP32 y un módulo DFPlayer Mini para reproducir archivos MP3 de manera automática cada cierto tiempo. Se abordan los aspectos del módulo DFPlayer Mini, las conexiones necesarias y el código de programación, proporcionando una guía completa para la implementación de este sistema de reproducción de audio.

    El DFPlayer Mini es un módulo de reproducción de audio compacto y de bajo costo que puede reproducir archivos MP3 y WAV almacenados en una tarjeta microSD. Es ampliamente utilizado en proyectos de electrónica debido a su facilidad de uso y a su capacidad para manejar archivos de audio de manera autónoma, sin necesidad de una fuente de control compleja. El módulo cuenta con varias funciones, incluyendo el ajuste de volumen, control de reproducción, y la capacidad de seleccionar pistas mediante comandos simples.

    El Desafío (El “Brief”)

    El cliente requiere la sonorización de un espacio arquitectónico de vanguardia, inspirado en las obras de James Turrell (manipulación de la luz y el espacio) y la materialidad cálida de Herzog & de Meuron.

    El objetivo es crear una atmósfera inmersiva de audio (sonidos ambientales, texturas sonoras) sin que la tecnología sea intrusiva. El sistema debe ser extremadamente fiable (grado industrial para operar 24/7), pero el núcleo de reproducción de audio debe ser modular y de bajo coste para fácil reemplazo. Los altavoces deben ser visibles pero integrarse como elementos de diseño, no como meras “cajas negras”.

    2. La Solución: Arquitectura Híbrida

    Propusimos una solución de hardware híbrida que combina la robustez del IoT industrial con la flexibilidad del hardware abierto.

    • El Cerebro (Control Industrial): Se seleccionó un Arduino Opta (PLC micro) como controlador maestro del espacio. El Opta gestiona los horarios de encendido, se integra con los sensores de ocupación de la sala y coordina la iluminación ambiental (DALI/Modbus).
    • La Voz (Módulo de Audio Especializado): Para la reproducción de audio, se implementó el módulo exacto detallado en la nota técnica de ger.ar: un ESP32 gestionando un DFPlayer Mini.
    • La Integración: El Arduino Opta envía comandos vía Serial (UART) o I2C al ESP32, indicándole qué pista de la tarjeta SD reproducir según el “estado de ánimo” del espacio (ej. mañana luminosa vs. tarde íntima). El ESP32 actúa como un esclavo de audio dedicado.

    3. La Estética (Turrell + Herzog & de Meuron)

    El espacio es un “estudio despoblado”. Paredes de hormigón texturizado con tonos cálidos (terracota, beige). La luz es indirecta, bañando las paredes desde foseados ocultos, creando volúmenes de color casi tangibles.

    Los altavoces no se esconden, se celebran. Son elementos colgantes, tipo péndulo, de diseño cilíndrico simple, acabado en metal cepillado oscuro o cerámica mate, sin logotipos visibles, suspendidos por cables delgados desde el techo alto.


    4. Visualización del Proyecto (Imágenes Conceptuales)

    IMAGEN 1: El Plano General (La Arquitectura)

    Objetivo: Mostrar el espacio inmersivo y la integración de los altavoces.

    Conexiones del Proyecto

    Para conectar el DFPlayer Mini con el ESP32, es importante seguir las siguientes indicaciones:

    • VCC: Conectar a una fuente de alimentación de 5V. El ESP32 puede proporcionar esta salida.
    • GND: Conectar al pin de tierra (GND) del ESP32.
    • TX del DFPlayer Mini: Conectar al pin GPIO 16 del ESP32.
    • RX del DFPlayer Mini: Conectar al pin GPIO 17 del ESP32.
    • SPK1 y SPK2: Conectar a un altavoz pasivo, si se desea una salida de audio. Alternativamente, se puede usar un conector de auriculares para salida de línea.

    Es fundamental asegurarse de que las conexiones sean correctas para evitar daños en los componentes y garantizar un funcionamiento óptimo del sistema.

    3. Código de Programación

    El siguiente código muestra cómo configurar el ESP32 para comunicarse con el DFPlayer Mini y reproducir un archivo MP3 cada 10 segundos. Se utiliza el puerto Serial1 del ESP32/ESP8266 para la comunicación, aprovechando la capacidad del microcontrolador para manejar múltiples puertos UART de hardware.

    #include <Arduino.h>
    #include <DFPlayerMini_Fast.h>
    
    #if defined(ESP32)
      // En ESP32 podemos usar HardwareSerial en un segundo puerto
      HardwareSerial playerSerial(2);  // UART2: GPIO16=RX2, GPIO17=TX2 por defecto
      const int DF_RX = 16;  // al TX del DFPlayer
      const int DF_TX = 17;  // al RX del DFPlayer
    #elif defined(ESP8266)
      #include <SoftwareSerial.h>
      const int DF_RX = D5;  // ESP8266: conecta a TX del DFPlayer
      const int DF_TX = D6;  // ESP8266: conecta a RX del DFPlayer
      SoftwareSerial playerSerial(DF_RX, DF_TX);
    #else
      #error "Este código sólo es para ESP32 o ESP8266"
    #endif
    
    DFPlayerMini_Fast myDFPlayer;
    const unsigned long intervalReproduccion = 10000;  // 10 s
    unsigned long lastMillis = 0;
    
    void setup() {
      Serial.begin(115200);
      Serial.println();
      Serial.println("=== DFPlayer en ESP32/ESP8266 ===");
    
      // Inicializar puerto al módulo
      #if defined(ESP32)
        playerSerial.begin(9600, SERIAL_8N1, DF_RX, DF_TX);
      #elif defined(ESP8266)
        playerSerial.begin(9600);
      #endif
    
      if (! myDFPlayer.begin(playerSerial)) {
        Serial.println(F("ERROR: No se detectó DFPlayer Mini"));
        while (true) delay(100);
      }
    
      myDFPlayer.volume(20);   // 0–30
      myDFPlayer.play(1);      // empieza en pista 001
      lastMillis = millis();
    }
    
    void loop() {
      unsigned long now = millis();
    
      // Cada 10 s, reproducir siguiente pista
      if (now - lastMillis >= intervalReproduccion) {
        lastMillis = now;
        myDFPlayer.playNext();
      }
    
      // Procesar eventos del DFPlayer (fin de pista, errores…)
      if (myDFPlayer.available()) {
        DFPlayerEventType type = myDFPlayer.readType();
        int state = myDFPlayer.readState();
        Serial.print(F("Evento DFPlayer: "));
        Serial.print(type);
        Serial.print(F("  Estado interno: "));
        Serial.println(state);
      }
    
      // Aquí puedes gestionar botones u otras tareas no bloqueantes
    
      delay(20);
    }
    
    

    En este código, se utilizan las siguientes funciones y configuraciones:

    • mySerial.begin(9600, SERIAL_8N1, 16, 17); Esta línea configura el puerto Serial1 del ESP32 con una velocidad de comunicación de 9600 baudios y establece los pines GPIO 16 y 17 como RX y TX, respectivamente.
    • myDFPlayer.begin(mySerial); Esta función inicializa el DFPlayer Mini y lo prepara para recibir comandos.
    • myDFPlayer.volume(20); Se ajusta el volumen del reproductor a un nivel de 20 (en una escala de 0 a 30).
    • myDFPlayer.play(1); Este comando indica al DFPlayer Mini que reproduzca el archivo de audio numerado como 1 en la tarjeta microSD.
    • delay(10000); Introduce una pausa de 10 segundos antes de repetir el ciclo.

    Este código permite la reproducción continua de un archivo MP3, con una espera de 10 segundos entre reproducciones. Es posible modificar el tiempo de espera o cambiar el archivo a reproducir ajustando los parámetros del código según las necesidades del proyecto.

  • Sensor de Temperatura y Humedad SHT31: Precisión y Fiabilidad en tus Proyectos

    Sensor de Temperatura y Humedad SHT31: Precisión y Fiabilidad en tus Proyectos

    Estamos en busca de componentes que ofrezcan la mejor calidad y precisión para proyectos de electrónica y sistemas embebidos.

    Características del SHT31

    El sensor SHT31, desarrollado por Sensirion, es conocido por su alta precisión y fiabilidad en la medición de temperatura y humedad. Sus principales características incluyen:

    • Alta Precisión: Con una precisión de ±2% RH para la humedad y ±0.3°C para la temperatura, garantiza datos exactos para aplicaciones críticas.
    • Interfaz I2C: Facilita la integración con diversos microcontroladores y plataformas de desarrollo como Arduino y Raspberry Pi.
    • Rápida Respuesta: Su diseño avanzado permite obtener lecturas en tiempo real, ideal para sistemas de monitoreo continuo.
    • Compensación de Calor: Mejora la precisión en ambientes con fluctuaciones térmicas, asegurando mediciones consistentes.

    Aplicaciones del SHT31

    El SHT31 es versátil y se adapta a diversas aplicaciones, tales como:

    • Sistemas HVAC: Optimiza el control de climatización en edificios inteligentes.
    • Estaciones Meteorológicas: Proporciona datos precisos para el análisis del clima.
    • Agricultura de Precisión: Monitoriza las condiciones ambientales en invernaderos y cultivos.
    • Dispositivos IoT: Integra fácilmente en soluciones de hogar inteligente y monitoreo ambiental.

    Integración Sencilla

    Se valora la facilidad de uso y la versatilidad. El SHT31 se conecta mediante una interfaz I2C, simplificando su uso con cualquier microcontrolador compatible.

    Código para compilar en IDE Platformio

    #include <Wire.h>
    #include <Adafruit_SHT31.h>
    #include <FS.h>
    #include <SD_MMC.h>
    
    Adafruit_SHT31 sht31 = Adafruit_SHT31();
    
    void setup() {
      Serial.begin(115200);
      while (!Serial) delay(10);  // wait for serial port to open
      
      if (!sht31.begin(0x44)) {   // Set to 0x45 for alternate i2c addr
        Serial.println("Couldn't find SHT31");
        while (1) delay(1);
      }
    
      if (!SD_MMC.begin("/sdcard", true)) {
        Serial.println("SD Card Mount Failed");
        return;
      }
    
      uint8_t cardType = SD_MMC.cardType();
      if (cardType == CARD_NONE) {
        Serial.println("No SD card attached");
        return;
      }
    
      Serial.println("SD Card initialized.");
    }
    
    void loop() {
      float t = sht31.readTemperature();
      float h = sht31.readHumidity();
      
      if (!isnan(t)) {  // check if 'is not a number'
        Serial.print("Temp *C = "); Serial.println(t);
      } else {
        Serial.println("Failed to read temperature");
      }
    
      if (!isnan(h)) {  // check if 'is not a number'
        Serial.print("Hum. % = "); Serial.println(h);
      } else {
        Serial.println("Failed to read humidity");
      }
    
      // Open the file in write mode
      File dataFile = SD_MMC.open("/sdcard/data.txt", FILE_APPEND);
    
      // If the file opened successfully, write the temperature and humidity
      if (dataFile) {
        dataFile.print("Millis: ");
        dataFile.print(millis());
        dataFile.print(", Temp: ");
        dataFile.print(t);
        dataFile.print(" *C, Humidity: ");
        dataFile.print(h);
        dataFile.println(" %");
        dataFile.close();
        Serial.println("Data written to file");
      } else {
        // If the file didn't open, print an error
        Serial.println("Error opening data.txt");
      }
    
      // Wait for 2 seconds before reading again
      delay(2000);
    }