Categoría: Microcontroladores

  • 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.

  • 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: