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

Module numérique de gestion pour alimentation linéaire avec ESP32, afficheur OLED et contrôle 0-30V

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

  1. Partie puissance : transformateur 24V → pont de diodes → condensateur 4700µF → transistor série (TIP35C ou 2N3055)
  2. Partie commande : ESP32 génère une tension de référence via DAC (ou PWM filtré)
  3. Boucle de régulation : un ampli op (LM358) compare la tension de référence avec la tension de sortie et ajuste le transistor
  4. Interface utilisateur : écran OLED + 3 boutons (UP, DOWN, VALIDATE)
    Module numérique alimentation linéaire avec ESP32, écran OLED et contrôle 0-30V

📊 Caractéristiques Techniques

ParamètreValeur
Tension de sortie0 à 30 V (réglable par pas de 0,1 V)
Courant max3 A (selon transistor et dissipateur)
Résolution12 bits (4096 niveaux avec MCP4725)
Précision±20 mV
AffichageOLED 128×64 I2C
Contrôle3 boutons poussoirs + WiFi (optionnel)

🛒 Liste des Composants (BOM)

ComposantModèleRôle
MicrocontrôleurESP32 DevKitCerveau du système + WiFi
DAC (convertisseur numérique-analogique)MCP4725 (I2C)Génère la tension de référence 0-5V
Écran OLEDSSD1306 128×64 I2CAffichage tension/courant
Boutons poussoirs3 × tactiles 6mmUP / DOWN / VALIDATE
Ampli opLM358 (double)Comparateur + amplificateur d'erreur
Transistor de puissanceTIP35C ou 2N3055Élément série de régulation
Transistor driverBD139Pilote le transistor de puissance
Transformateur220V → 24V / 3AAlimentation de puissance
Pont de diodesW10 (1000V / 10A)Redressement
Condensateur filtrage4700µF / 50VLissage tension redressée
DissipateurAluminium 2-3 °C/WRefroidissement transistor
Résistances précision10kΩ / 1kΩ (1%)Diviseur de mesure
Shunt de mesure courant0,1Ω / 5WMesure de courant

📐 Schéma de Principe
Schéma module numérique alimentation linéaire : ESP32, DAC MCP4725, ampli op LM358 et transistor de puissance

Boucle de régulation

Le cœur du système est une boucle de contre-réaction classique :

  1. Le DAC MCP4725 génère une tension de référence Vref (0 à 5V) proportionnelle à la tension de sortie désirée.
  2. Un diviseur résistif (10kΩ + 1kΩ) prélève un échantillon de la tension de sortie (Vout / 11).
  3. L'ampli op LM358 compare Vref avec Vout/11 et amplifie l'erreur.
  4. Le transistor BD139 pilote le transistor de puissance TIP35C pour corriger l'erreur.
💡 Astuce d'Electro : le rapport du diviseur (11:1) signifie que pour 30V en sortie, vous aurez 2,73V à l'entrée de l'ampli op. Avec un DAC qui sort 5V max, vous pouvez théoriquement atteindre ~55V, mais limitez-vous à 30V pour la sécurité du transistor.

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

  1. 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.
  2. Transistor de puissance : montez le TIP35C sur un gros dissipateur avec pâte thermique. Collecteur → sortie pont, Émetteur → sortie alimentation.
  3. Boucle de régulation : câblez le LM358 en comparateur avec le diviseur 10kΩ/1kΩ et le BD139 en driver.
  4. 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.
  5. Premier test : sans charge, réglez 5V via les boutons et vérifiez au multimètre. Ajustez le diviseur si nécessaire.
  6. 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 !

📚 À lire aussi sur TechFix Hub

Bottom Ad [Post Page]