Fuente de Alimentación Programable de Bolsillo con Pantalla OLED – Compatible con Arduino
Componentes y Suministros
| Componente | Cantidad | Notas |
|---|---|---|
| Arduino UNO | 1 | |
| Arduino Nano R3 | 1 | |
| Módulo Boost DC-DC XL6009 | 1 | |
| Pulsador 12mm (SparkFun) | 1 | |
| Cristal 16 MHz | 1 | |
| Conector Bloque Terminal | 1 | |
| Regulador Lineal Ajustable | 1 | |
| Regulador Lineal 7805 | 1 | |
| Diodo 1N4007 | 1 | Alto voltaje, alta corriente |
| Cable USB-A a B | 1 | |
| Potenciómetro Multivuelta Precisión 10k Ω (25 vueltas) | 1 | |
| Amplificador Operacional de Instrumentación OP07 | 1 | |
| Caja Socket Genérica | 1 | |
| Placa Proto FR4 | 1 | |
| Cables Jumper (genéricos) | 1 | |
| Header Macho 40 Posiciones 1 Fila (0.1") | 1 | |
| Resistencia 10k Ω | 1 | |
| Resistencia 22.1k Ω | 1 | |
| Resistencia 1k Ω | 1 | |
| Relé Latching 5V 2A | 1 | |
| Potenciómetro Digital MCP4131 10k (SparkFun) | 1 | |
| Cinta de Cobre Arduino | 1 | |
| Amplificador Operacional LM358 | 1 | |
| Pantalla OLED 1306 | 1 |
Herramientas Necesarias
- Soldador (genérico)
- Pistola de pegamento caliente (genérica)
- Mini Taladro
Aplicaciones y Servicios Online
- Arduino IDE
Descripción del Proyecto
La Idea
Como aficionados, frecuentemente necesitamos alimentar nuestros prototipos, comprobar voltaje, corriente, límites de potencia de nuestros proyectos, probar un componente recién comprado. La necesidad de una fuente de alimentación variable siempre está ahí. Pero no todos tenemos fuentes de banco/laboratorio. También son caras si se compran, voluminosas si hay que transportarlas. Buscaba una fuente programable a menor coste, con portabilidad y productividad para alimentar prototipos y testear componentes. Así que decidí hacer una.
Tiene las siguientes características:
- Programable
- Recargable
- Portátil
- Voltaje por pasos
- Medidor de Voltaje/Corriente/Potencia
- Relé Protegido
- Personalizable, Compacta y Bonita
- Interfaz OLED Genial
- Control por Pulsador y Navegación por Menús
- Firmware Actualizable para más funciones
La fuente más versátil para proyectos de electrónica de baja potencia.
Especificaciones del Dispositivo
- Corriente de Carga DC Máxima: 400 mA
- Rango de Voltaje: 2.0 V - 12.0 V
- Paso de Voltaje: ~0.1 V
- Mejor Eficiencia: 75%
- Precisión Medición Corriente: ±1 mA
- Precisión Medición Voltaje: ±0.02 V
Nota: Este dispositivo es un prototipo rápido. Es posible hacer 0-30V, incluso fuente negativa y más corriente de salida usando baterías de mayor capacidad, electrónica adicional y diseño mejorado.
Principio de Funcionamiento
El diseño es intensivo en hardware. Un diagrama de bloques simplificado:
- Fuente de alimentación: Batería Li-Po 3.7V recargable por USB.
- Módulo Boost XL6009 genera 15.6V desde la Li-Po. Regulador 7805 genera 5V para el MCU.
- Arduino UNO clon (ATmega328P) conectado a 2 pulsadores con interrupción, pantalla OLED, puerto Rx/Tx/DTR para subida de firmware por USB/Serie (módulo 1).
- Corazón del proyecto: Potenciómetro Digital MCP4131 (Digipot) + OpAmp LM358 Generador de Voltaje por Pasos. Este voltaje es el Voltaje de Control del Regulador Ajustable LM317 (módulo 2).
- Digipot controlado desde Arduino mediante comandos tipo SPI por software. LM317 diseñado para que el Voltaje Pin Salida sea siempre 1.25V superior al Voltaje Pin Adjust si el Pin Input tiene voltaje suficiente (aquí 15.6V) (módulo 3).
- El voltaje por pasos se alimenta al Pin Adjust para crear salida variable desde Arduino según necesidad del usuario.
- ADC mide todos los voltajes de supervisión y protección: batería, voltaje boost, voltaje carga, voltaje salida, acondicionados por divisores de voltaje para rango ADC (0-1.1V). Uso REFERENCIA INTERNA de Arduino (1.1V).
- Para detección de corriente: retorno (GND Carga) conectado en serie con Resistencia Sensor 1Ω a GND Sistema. La caída de voltaje se amplifica con OpAmp OP07 Precisión y va a pin ADC.
- Carga de batería: 5V USB en serie con diodo 1N4007 y resistencia 5Ω limitadora a batería Li-Po. Método rudimentario, no óptimo para Li-Po.
Resumen de Operación: El MCP4131 crea voltajes por pasos en rango 0-5V con paso ~40mV (7-bit 10K Digipot = 129 pasos, 5V/128 = 40mV), amplificado 2.5x por LM358 dando 0-12.5V control con pasos 0.1V. Esta señal va al Pin Adjust del LM317. LM317 genera salida V_Step+1.25V para cargas externas. El retorno de carga pasa por 1Ω Sense. Si fluyen x mA, crea x mV caída (Ley Ohm V=I*R). Esta señal va a OpAmp OP07 (offset 10µV) con ganancia 2.5x, generando 2.5x mV. ADC Arduino con referencia 1.1V interna detecta 0-1100mV en pasos ~1mV (1100/1023). Por eso límite 400mA. Aumentable/reducible cambiando ganancia OP07. Rango voltaje salida cambiante cambiando voltaje boost y ganancia LM358. Otros voltajes medidos con divisores resistivos atenuando a rango ADC. Relé latch tiene 2 bobinas. Aplicando pulso momentáneo a una bobina, contactos conmutan. Una vez conmutado permanece, bobina se apaga.
Construcción del Proyecto
- Empiece con una caja de enchufe simple, haga cortes y alineaciones para batería, puerto USB carga, interruptor potencia, etc.
- Disipador con cinta de cobre y moneda para módulo DC-DC boost.
- Coloque módulo boost dentro de la caja.
- Construya 3 módulos: Arduino + I/O + Control; Generador Voltaje Pasos + Regulador Ajustable; Detección Corriente.
- Conecte y suelde todas las interconexiones entre placas.
- Use pegamento caliente como relleno final.
Desarrollo del Firmware y Procedimiento de Operación
El firmware (Sketch Arduino) es versión 1.0.2 Beta. No todas las funciones están disponibles aún. Las más importantes (control voltaje, conectar/desconectar relé, ver información) están habilitadas. En void setup() hay funciones de inicialización para calentar pines Arduino asociados a hardware externo.
ENTRADA: 2 pulsadores basados en interrupción para aumentar/disminuir voltaje salida, acceder menú (no disponible en esta versión). INT0 e INT1 en pines Arduino 2 y 3 codificados para FLANCO DESCENDENTE. Verá 2 condensadores en paralelo con interruptores mecánicos para anti-rebote. Código dispara interrupciones al pulsar para encender/apagar salida por relé o aumentar/disminuir voltaje (Beta).
SALIDA: OLED 1306 muestra información adquiriendo datos de ADC, temporizador interno (tiempo encendido) y variables bandera para informar usuario sobre estado habilitado/deshabilitado salida. Basado en librería U8G, OLED imprime info como texto y numérico. Planes para representación gráfica (tipo analógico).
5 pines digitales SSD1306 (OLED Waveshare) clk, din, cs, d/c, res conectados a Arduino 10, 9, 11, 13, 12 y programados accordingly. En loop principal se llama update_display() cada vez para actualizar info en OLED.
Temporizador Interno 1 de ATmega328P configurado para disparar cada 1 seg para llevar cuenta del tiempo.
CONTROL: MCP4131 Digipot controlado con increment_digipot() y decrement_digipot() donde datos se desplazan con clock y delay apropiados usando Pines 6, 7, 8 como CS, Clk, Data. Es tipo SPI software lento. Como ya usé pines SPI hardware en otra parte, esta fue la única solución.
Pines digitales 4 y 5 controlan relé latch. Pulso alto corto alimenta transistores drivers para energizar las 2 bobinas y conmutar relé. Ocurre automáticamente (sobrecarga/cortocircuito) o manualmente por usuario.
ADC: Función calc_VI() en loop principal realiza analogRead promediado 20 veces para info Voltaje y Corriente y actualiza variables para nueva info que se imprime en display.
El sketch está en múltiples pestañas para organizar código: ADC, Digipot, Display_Fn, Interrupt, Relay, Timer.
Limitaciones
- Voltaje no puede bajar de 2.0V
- Salida de voltaje es por pasos, no continua
- Medición de corriente crea desplazamiento de tierra en alta corriente
- Medición ADC tiene baja resolución
- Eficiencia es la peor de su clase en baja voltaje alta carga
- Carga Li-Po no estándar, ligeramente insegura
Referencias
- Tutorial potenciómetro rotativo
- Tutorial botón
Conclusión
Esta fuente programable me ayudará a hacer proyectos/prototipos más eficientemente. Medición de voltaje, corriente, potencia sin multímetro.
Código
Fuente Programable Portátil Arduino (Ver 1.0.1 con info pines en comentarios)
// Pin Reset, D0 y D1 para subir Sketch
// Pin D9,D10,D11,D12,D13 para controlar OLED Display
// ADC A0 Pin para Sensar V_boost
// ADC A2 Pin para Sensar V_batt (LiPo)
// ADC A3 Pin para Sensar I_Output (Carga)
// ADC A4 Pin para Sensar V_USB (Carga)
// ADC A5 Pin para Sensar V_Output (Carga)
// Pines Driver Bobinas Relé Latch D4 y D5
#define RC1 4
#define RC2 5
// Pulsadores Usuario en Pin D2 y D3
#define SW1 2
#define SW2 3
// Pin D6,D7,D8 para Control Digipot
#define CS_PIN 6
#define CLK_PIN 7
#define DATA_PIN 8
volatile uint8_t Switch1 = 1;
volatile uint8_t Switch2 = 1;
float V_Out = 0.0;
float I_Out = 0.0;
float V_Bat = 0.0;
float V_Bst = 0.0;
float V_Chg = 0.0;
uint32_t time = 0;
#include "U8glib.h"
// OLED Display Control Pins
// SSD1306 oled waveshare(clk,din,cs,d/c,res); // ESTO PARA WAVESHARE
U8GLIB_SSD1306_128X64 u8g(10, 9, 11, 13, 12);
void setup(void) {
analogReference(INTERNAL);
u8g.setRot180();
button_init();
relay_init();
init_timer1();
digipot_init();
}
void loop(void) {
update_display();
calc_VI();
if (Switch1 == 0) { rc1_latch(); Switch1 = 1; increment_digipot(); }
if (Switch2 == 0) { rc2_latch(); Switch2 = 1; decrement_digipot(); }
delay(100);
}
Código Ver 1.0.1 Beta
Sin vista previa (solo descarga).
Código Ver 1.0.2 Beta
Corrección alineación Texto/Caja
Corrección disparo Sobrecarga
Pocos bugs más se corregirán en próxima versión
Sin vista previa (solo descarga).
Código Ver 1.0.3
Corrección relé salida deshabilitado durante encendido
Corrección auto ajuste voltaje salida 5.00V tras encendido
Sin vista previa (solo descarga).
Esquemáticos
- Dibujado en pizarra blanca
- https://circuits.io/circuits/4762970-arduino-based-programmable-power-supply
- Múltiples diagramas PNG disponibles en proyecto original
Proceso de manufactura
- Construya el clásico juego Pong en Arduino UNO con pantalla OLED: Tutorial paso a paso
- Alcancía Inteligente: Controla un Aceptador de Monedas con Arduino Nano
- Centro de Control de Potencia Arduino: N-FET, P-FET, Relé y RTC
- Monitor de Temperatura y Reloj en Tiempo Real con Arduino Due y Pantalla TFT 3.2"
- Controla un LED por Bluetooth con Arduino – Guía DIY paso a paso
- Soluciones de Alimentación Optimizadas para Proyectos Arduino
- Proyecto HMI Interactivo con Nextion, Arduino Mega y Múltiples Sensores
- Construye un voltímetro DIY con Arduino y pantalla Nokia 5110 – Guía paso a paso
- Kit de Entrenamiento Arduino Completo con Mega 2560, Sensores, Motores y PCB Personalizada
- Construye la App Fridgeye con una Pantalla Nextion: Guía Paso a Paso
- Medición Precisa de Radiación Solar con Arduino UNO y Shield Ethernet