Cómo convertir un cargador USB-C en una fuente inteligente controlada por Web

Tener el voltaje correcto para cualquier proyecto es de suma importancia y poder controlarlo se vuelve necesario en algunos proyectos.

En este tutorial realizaremos el control de una fuente de voltaje desde una interfaz web, para esto usaremos la Pulsar C6 y el módulo HUSB238; implementaremos una interfaz web capaz de controlar dinámicamente perfiles USB-PD como 5V, 9V, 12V y 15V directamente desde un navegador sin necesidad de aplicaciones externas ni conexión a internet.

Introducción

¿Qué son los perfiles USB-PD?

USB Power Delivery (USB-PD) es una tecnología de carga versátil diseñada para alimentar una amplia gama de dispositivos USB. Normalmente, cada dispositivo con carga USB tendría su propio adaptador, pero eso ya no es así.

Un único cargador PD universal puede alimentar una amplia gama de dispositivos. La última generación de USB-PD ofrece la máxima potencia de salida, pero solo cuando se combina con la tecnología de puerto USB-C PD más reciente. Este estándar permite que los cables y conectores USB Tipo-C entreguen hasta 240 W de potencia, lo que proporciona una carga más rápida y eficiente en comparación con las tecnologías anteriores, la carga PD admite varios niveles de voltaje.

Material

Diagrama de Conexión

Para alimentar nuestra HUSB238 se puede usar un cargador que máximo de 20V y 5A, y que sea compatible con PD para el cambio de voltaje en esta ocasión usamos una fuente para Raspberry tipo C que es igual de efectiva, la conectaremos a la HUSB238 por medio del puerto USB C.

Para conectar a nuestra pulsar C6 utilizaremos los pines D4 y D5 , estos conectaran a SDA y SCL respectivamente, y conectaremos el GND con GND.

Requerimientos Previos

Instalación de librerías

Para poder hacer que nuestra pulsar C6 pueda desplegar nuestra interfaz web necesitamos las siguientes librerías.

  • Para instalarla:
  • Ve a Programa > Incluir librería > Gestionar bibliotecas…
  • En el buscador escribe: WebSocketsServer
  • Instala la librería WebSockets (normalmente aparece como “WebSockets by Markus Sattler”).

Realizamos el mismo procedimiento para la librería Adafruit_HUSB238.h

  • Ve a Programa > Incluir librería > Gestionar bibliotecas…
  • En el buscador escribe: Adafruit_HUSB238
  • Instala la librería Adafruit_HUSB238 (normalmente aparece como Adafruit_HUSB238 Library by Adafruit”).

Código

El siguiente código nos dará la dirección IP que deberemos colocar en el buscador para entrar a la interfaz web, por lo que será necesario verla desde el monitor serial del IDE de Arduino.

En caso de que nuestra Pulsar C6 no detecte a la HUSB238, se mostrará un mensaje de error ‘HUSB238 ERROR’ y el código se detendrá. En ese caso, habrá que revisar la conexión física.

// ============================
// LIBRERÍAS NECESARIAS
// ============================

// Librería para funciones WiFi del ESP32
#include <WiFi.h>;

// Librería para crear el servidor web
#include <WebServer.h>;

// Librería para comunicación I2C
#include <Wire.h>;

// Librería del controlador USB PD HUSB238
#include "Adafruit_HUSB238.h";


// ============================
// CONFIGURACIÓN DE PINES I2C
// ============================


#define SDA_PIN 15// D4
#define SCL_PIN 19// D5


// ==============================
// CONFIGURACIÓN DEL ACCESS POINT
// ==============================

// Nombre de la red WiFi que creará el ESP32
const char* ssid = "Control_Voltage";

// Contraseña de la red WiFi
const char* password = "12345678";


// Se crea el servidor web en el puerto 80
WebServer server(80);

// Objeto del controlador HUSB238
Adafruit_HUSB238 husb238;


// Variable donde se guarda el voltaje actual
// Se mostrará en la página web
String currentVoltage = "5V";


// ============================
// FUNCIÓN PARA CAMBIAR VOLTAJE
// ============================

// Esta función selecciona el voltaje USB PD y actualiza la variable mostrada en la web
void setVoltage(HUSB238_PDSelection pd, String txt)
{
  // Mensaje por monitor serial
  Serial.println("Solicitando " + txt);

  // Selecciona el perfil de voltaje PD
  husb238.selectPD(pd);

  // Espera para el cambio de voltaje
  delay(200);

  // Envía la solicitud al cargador USB PD
  husb238.requestPD();

  // Espera para aplicar el cambio
  delay(500);

  // Guarda el voltaje actual
  currentVoltage = txt;

  // Mensaje de confirmación
  Serial.println("Voltaje cambiado");
}


// ============================
// INTERFAZ WEB
// ============================

// Función principal que genera la página web
void handleRoot()
{
  // Se inicia el contenido HTML
  String html = R"rawliteral(
<!DOCTYPE html>
<html>

<head>

<meta name="viewport" content="width=device-width, initial-scale=1">

<style>

/* Estilo general de la página */
body{
  font-family: Arial;
  text-align:center;
  background:#111;
  color:white;
}

/* Margen del título */
h1{
  margin-top:30px;
}

/* Diseño de botones */
button{
  width:120px;
  height:70px;
  font-size:24px;
  margin:10px;
  border:none;
  border-radius:15px;
  cursor:pointer;
}

</style>

</head>

<body>

<h1>Control de Voltaje</h1>

<h2>Voltaje actual:
)rawliteral";

  // Inserta el voltaje actual en la web
  html += currentVoltage;

  // Continúa el HTML
  html += R"rawliteral(
</h2>

<!-- Botones para seleccionar voltaje -->
<a href="/5"><button>5V</button></a>
<a href="/9"><button>9V</button></a>
<a href="/12"><button>12V</button></a>
<a href="/15"><button>15V</button></a>

</body>
</html>
)rawliteral";

  // Envía la página al navegador
  server.send(200, "text/html", html);
}


// ============================
// CONFIGURACIÓN INICIAL
// ============================

void setup()
{
  // Inicia monitor serial
  Serial.begin(115200);

  // Inicia comunicación I2C
  Wire.begin(SDA_PIN, SCL_PIN);

  // Espera de inicio
  delay(1000);

  // Inicializa el HUSB238
  if (!husb238.begin(HUSB238_I2CADDR_DEFAULT, &Wire))
  {
    // Error si no detecta el módulo
    Serial.println("HUSB238 ERROR");

    // Detiene el programa
    while (1);
  }

  // Confirmación de funcionamiento
  Serial.println("HUSB238 OK");

  // Solicita negociación USB PD inicial
  husb238.requestPD();

  // Crea el Access Point WiFi
  WiFi.softAP(ssid, password);

  // Obtiene la IP del ESP32
  IPAddress IP = WiFi.softAPIP();

  // Muestra IP en monitor serial
  Serial.print("AP IP address: ");
  Serial.println(IP);


  // ============================
  // RUTAS DEL SERVIDOR WEB
  // ============================

  // Página principal
  server.on("/", handleRoot);

  // Ruta para seleccionar 5V
  server.on("/5", []()
  {
    setVoltage(PD_SRC_5V, "5V");
    handleRoot();
  });

  // Ruta para seleccionar 9V
  server.on("/9", []()
  {
    setVoltage(PD_SRC_9V, "9V");
    handleRoot();
  });

  // Ruta para seleccionar 12V
  server.on("/12", []()
  {
    setVoltage(PD_SRC_12V, "12V");
    handleRoot();
  });

  // Ruta para seleccionar 15V
  server.on("/15", []()
  {
    setVoltage(PD_SRC_15V, "15V");
    handleRoot();
  });

  // Inicia el servidor web
  server.begin();

  // Mensaje de confirmación
  Serial.println("WEB SERVER STARTED");
}

void loop()
{
  // Atiende clientes conectados al servidor web
  server.handleClient();
}

Conexion con navegador

Prmero debemos conectarnos, para esto buscamnos la señal wifi, en este caso ”Control_Voltage”, y colocaremos la contraseña: “12345678”, y nos conectamos, esto puede hacerse desde una computadora o un celular.

Ya conectados podemos ir al navegador y colocar la direccion IP que nosa da en nuetro monitor serial de nuestro arduino IDE, esta direccion siempre sera la misma, entramos al navegador colocando la direccion IP en la barrra superior del buscador.

Al ingresar nos muestra la interfaz para poder cambiar los voltajes.

Demostración

Se puede observar en el multímetro el cambio de voltaje; asimismo, el ventilador realiza variaciones de velocidad debido a dichas modificaciones. El cambio se puede ver en el monitor serial como confirmación, asimismo en la interfaz web nos muestra el voltaje en el que estamos.

Conclusiones

Este proyecto demuestra cómo la Pulsar C6, puede utilizarse para controlar de forma inalámbrica un módulo HUSB238 mediante una interfaz web local. Gracias a la conectividad WiFi integrada es posible seleccionar distintos niveles de voltaje compatibles con USB-PD desde cualquier dispositivo conectado a la red creada por el microcontrolador.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *