🔌 Module Numérique de Gestion pour Alimentation Linéaire : Contrôle 0-30V avec ESP32 (Guide 2026)
Salut les makers ! Ici Electro. Vous avez une vieille alimentation linéaire qui dort dans un coin de votre atelier ? Transformateur, pont de diodes, condensateur de filtrage, transistor de puissance… tout est là, mais les réglages se font encore au tournevis sur un vieux potentiomètre usé. Aujourd'hui, on modernise tout ça avec un module numérique de gestion : afficheur OLED, boutons poussoirs, contrôle précis de 0 à 30 V par pas de 0,1 V, et même pilotage WiFi avec un ESP32 !
🔄 Guide mis à jour en 2026 : schéma complet avec ESP32, DAC MCP4725, code Arduino prêt à téléverser, écran OLED et option Home Assistant.
Le concept : piloter une alimentation linéaire classique avec une interface numérique moderne.
🧠 Principe de Fonctionnement
L'idée est simple : on garde la partie puissance analogique (transformateur + pont + filtrage + transistor série) qui est robuste et fiable, et on remplace le potentiomètre de réglage par un contrôle numérique piloté par un microcontrôleur.
Architecture du système
- Partie puissance : transformateur 24V → pont de diodes → condensateur 4700µF → transistor série (TIP35C ou 2N3055)
- Partie commande : ESP32 génère une tension de référence via DAC (ou PWM filtré)
- Boucle de régulation : un ampli op (LM358) compare la tension de référence avec la tension de sortie et ajuste le transistor
- Interface utilisateur : écran OLED + 3 boutons (UP, DOWN, VALIDATE)
📊 Caractéristiques Techniques
| Paramètre | Valeur |
|---|---|
| Tension de sortie | 0 à 30 V (réglable par pas de 0,1 V) |
| Courant max | 3 A (selon transistor et dissipateur) |
| Résolution | 12 bits (4096 niveaux avec MCP4725) |
| Précision | ±20 mV |
| Affichage | OLED 128×64 I2C |
| Contrôle | 3 boutons poussoirs + WiFi (optionnel) |
🛒 Liste des Composants (BOM)
| Composant | Modèle | Rôle |
|---|---|---|
| Microcontrôleur | ESP32 DevKit | Cerveau du système + WiFi |
| DAC (convertisseur numérique-analogique) | MCP4725 (I2C) | Génère la tension de référence 0-5V |
| Écran OLED | SSD1306 128×64 I2C | Affichage tension/courant |
| Boutons poussoirs | 3 × tactiles 6mm | UP / DOWN / VALIDATE |
| Ampli op | LM358 (double) | Comparateur + amplificateur d'erreur |
| Transistor de puissance | TIP35C ou 2N3055 | Élément série de régulation |
| Transistor driver | BD139 | Pilote le transistor de puissance |
| Transformateur | 220V → 24V / 3A | Alimentation de puissance |
| Pont de diodes | W10 (1000V / 10A) | Redressement |
| Condensateur filtrage | 4700µF / 50V | Lissage tension redressée |
| Dissipateur | Aluminium 2-3 °C/W | Refroidissement transistor |
| Résistances précision | 10kΩ / 1kΩ (1%) | Diviseur de mesure |
| Shunt de mesure courant | 0,1Ω / 5W | Mesure de courant |
📐 Schéma de Principe
Boucle de régulation
Le cœur du système est une boucle de contre-réaction classique :
- Le DAC MCP4725 génère une tension de référence Vref (0 à 5V) proportionnelle à la tension de sortie désirée.
- Un diviseur résistif (10kΩ + 1kΩ) prélève un échantillon de la tension de sortie (Vout / 11).
- L'ampli op LM358 compare Vref avec Vout/11 et amplifie l'erreur.
- Le transistor BD139 pilote le transistor de puissance TIP35C pour corriger l'erreur.
Interface utilisateur
- Écran OLED SSD1306 connecté en I2C (SDA = GPIO21, SCL = GPIO22 sur ESP32)
- 3 boutons poussoirs :
- UP (GPIO32) : augmente la tension de 0,1V
- DOWN (GPIO33) : diminue la tension de 0,1V
- VALIDATE (GPIO25) : active/désactive la sortie
💻 Code ESP32 : Contrôle Complet
// Module numérique alimentation linéaire - Electro (TechFix Hub)
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_MCP4725.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
Adafruit_MCP4725 dac;
const int PIN_BTN_UP = 32;
const int PIN_BTN_DOWN = 33;
const int PIN_BTN_VALIDATE = 25;
const int PIN_ENABLE = 26; // Active/désactive la sortie
float tensionConsigne = 0.0; // 0 à 30V
bool sortieActive = false;
void setup() {
Serial.begin(115200);
// Initialisation OLED
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 failed"));
for(;;);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
// Initialisation DAC
dac.begin(0x60);
// Boutons
pinMode(PIN_BTN_UP, INPUT_PULLUP);
pinMode(PIN_BTN_DOWN, INPUT_PULLUP);
pinMode(PIN_BTN_VALIDATE, INPUT_PULLUP);
pinMode(PIN_ENABLE, OUTPUT);
digitalWrite(PIN_ENABLE, LOW); // Sortie désactivée au démarrage
afficherEcran();
}
void loop() {
// Gestion des boutons
if (digitalRead(PIN_BTN_UP) == LOW) {
if (tensionConsigne < 30.0) {
tensionConsigne += 0.1;
delay(150); // Anti-rebond
}
}
if (digitalRead(PIN_BTN_DOWN) == LOW) {
if (tensionConsigne > 0.0) {
tensionConsigne -= 0.1;
delay(150);
}
}
if (digitalRead(PIN_BTN_VALIDATE) == LOW) {
sortieActive = !sortieActive;
digitalWrite(PIN_ENABLE, sortieActive ? HIGH : LOW);
delay(300);
}
// Mise à jour DAC
if (sortieActive) {
// Conversion tension -> valeur DAC (0-4095)
// Vref = tensionConsigne / 11 (diviseur)
// DAC_value = (Vref / 5.0) * 4095
uint16_t dacValue = (tensionConsigne / 11.0 / 5.0) * 4095;
dac.setVoltage(dacValue, false);
} else {
dac.setVoltage(0, false);
}
afficherEcran();
delay(50);
}
void afficherEcran() {
display.clearDisplay();
// Titre
display.setCursor(0, 0);
display.setTextSize(1);
display.println("ALIM LINEAIRE");
// Tension consigne
display.setCursor(0, 16);
display.setTextSize(2);
display.print(tensionConsigne, 1);
display.println(" V");
// État sortie
display.setCursor(0, 40);
display.setTextSize(1);
display.print("Sortie: ");
display.println(sortieActive ? "ON " : "OFF");
// Instructions
display.setCursor(0, 52);
display.print("UP/DOWN | VALID");
display.display();
}
🛠️ Montage Pas à Pas
- Partie puissance d'abord : câblez le transformateur → pont de diodes → condensateur 4700µF. Testez au multimètre : vous devez mesurer ~34V DC non régulés.
- Transistor de puissance : montez le TIP35C sur un gros dissipateur avec pâte thermique. Collecteur → sortie pont, Émetteur → sortie alimentation.
- Boucle de régulation : câblez le LM358 en comparateur avec le diviseur 10kΩ/1kΩ et le BD139 en driver.
- Interface numérique : connectez l'ESP32, le DAC MCP4725 et l'écran OLED sur le bus I2C. Ajoutez les 3 boutons avec résistances pull-up internes.
- Premier test : sans charge, réglez 5V via les boutons et vérifiez au multimètre. Ajustez le diviseur si nécessaire.
- Test en charge : branchez une résistance de puissance (10Ω / 10W) et vérifiez la régulation.
🤖 Le Twist Moderne 2026 : Pilotage WiFi + Home Assistant
Avec l'ESP32, vous pouvez piloter votre alimentation depuis votre téléphone ou l'intégrer à Home Assistant :
#include <WiFi.h>
#include <WebServer.h>
const char* ssid = "VOTRE_WIFI";
const char* password = "VOTRE_PASSWORD";
WebServer server(80);
void handleSetVoltage() {
if (server.hasArg("voltage")) {
tensionConsigne = server.arg("voltage").toFloat();
server.send(200, "text/plain", "OK");
}
}
void setup() {
// ... code précédent ...
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
server.on("/set", handleSetVoltage);
server.begin();
}
void loop() {
server.handleClient();
// ... reste du code ...
}
Vous pouvez maintenant régler la tension via une requête HTTP : http://192.168.1.100/set?voltage=12.5
💡 Astuces de Pro (Par Electro)
- Condensateur de sortie : ajoutez un 100µF + 100nF en parallèle à la sortie pour améliorer la stabilité.
- Protection court-circuit : ajoutez un fusible rapide 3A en sortie + un transistor de limitation de courant.
- Mesure de courant : le shunt 0,1Ω + un ampli op vous permet de mesurer le courant et de l'afficher sur l'OLED.
- Dissipation thermique : à 30V / 3A avec 12V en entrée, le transistor dissipe (30-12) × 3 = 54W ! Prévoyez un ventilateur.
- Calibration : mesurez la tension réelle avec un multimètre de précision et ajustez le coefficient dans le code.
❓ Questions Fréquentes (FAQ)
Pourquoi un DAC externe (MCP4725) et pas le PWM de l'ESP32 ?
Le PWM filtré peut fonctionner, mais il est moins précis et plus sensible aux parasites. Le MCP4725 offre une sortie analogique pure 12 bits, beaucoup plus stable pour une alimentation de labo.
Puis-je utiliser un Arduino Nano à la place de l'ESP32 ?
Oui, mais vous perdez le WiFi et devez utiliser un DAC externe (l'Arduino n'en a pas). Le code est compatible à 95%, changez juste les numéros de broches.
Comment protéger contre les surtensions accidentelles ?
Ajoutez une diode Zener 30V en parallèle de la sortie + un crowbar circuit (thyristor + Zener) qui court-circuite la sortie si la tension dépasse 32V.
Puis-je atteindre 50V avec ce montage ?
Théoriquement oui (le DAC peut sortir 5V × 11 = 55V), mais le TIP35C doit supporter Vce = 50V + marge. Préférez un MJ15003 ou limitez-vous à 30V pour la sécurité.
🎯 Conclusion
Ce module numérique transforme une vieille alimentation linéaire en un instrument de labo moderne et précis. Avec un ESP32, un DAC 12 bits et un écran OLED, vous avez un contrôle au dixième de volt près, une interface intuitive, et même le pilotage WiFi en bonus. Le tout pour moins de 30€ de composants !
Vous avez modernisé votre alimentation ? Partagez vos photos et vos mesures en commentaire, je lis chacun d'entre eux !

