diff --git a/notes/technologie/HX711 ESP32 - balance connectée WiFi - annexe installation Arduino IDE.md b/notes/technologie/HX711 ESP32 - balance connectée WiFi - annexe installation Arduino IDE.md new file mode 100644 index 0000000..47a5c13 --- /dev/null +++ b/notes/technologie/HX711 ESP32 - balance connectée WiFi - annexe installation Arduino IDE.md @@ -0,0 +1,69 @@ +# Annexe — Installation de l'environnement de développement (Windows 10) + +## 1. Arduino IDE + +Télécharger et installer la dernière version depuis le site officiel : +👉 https://www.arduino.cc/en/software + +Choisir **Windows Win 10 and newer, 64 bits** (installeur `.exe`). + +--- + +## 2. Pilote CP2102 (USB → UART) + +Le DevKit V1 utilise une puce **Silicon Labs CP2102** pour la communication USB/série. +Windows 10 ne l'installe pas toujours automatiquement. + +**Vérification :** brancher l'ESP32 en USB → ouvrir le Gestionnaire de périphériques → si le port COM n'apparaît pas (ou apparaît avec un `!`), le pilote est absent. + +**Installation :** +1. Télécharger le pilote sur le site Silicon Labs : https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers +2. Choisir **CP210x Windows Drivers** +3. Décompresser et lancer `CP210xVCPInstaller_x64.exe` +4. Débrancher / rebrancher l'ESP32 → un port **COMx** apparaît dans le Gestionnaire de périphériques + +--- + +## 3. Support ESP32 dans Arduino IDE + +Le support ESP32 ne fait pas partie d'Arduino IDE par défaut — il faut ajouter le gestionnaire de cartes Espressif. + +### 3a. Ajouter l'URL du gestionnaire de cartes + +1. Dans Arduino IDE : **Fichier → Préférences** +2. Dans le champ **URL de gestionnaire de cartes supplémentaires**, ajouter : + ``` + https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json + ``` +3. Valider avec OK + +### 3b. Installer le paquet ESP32 + +1. **Outils → Type de carte → Gestionnaire de cartes** +2. Rechercher `esp32` +3. Sélectionner **esp32 by Espressif Systems** → **Installer** +4. Attendre la fin du téléchargement (~200 Mo) + +### 3c. Sélectionner la carte + +1. **Outils → Type de carte → esp32 → ESP32 Dev Module** +2. **Outils → Port** → sélectionner le port COMx du DevKit + +--- + +## 4. Vérification + +Ouvrir **Fichier → Exemples → WiFi → WiFiScan**, téléverser. +Si la compilation et le téléversement réussissent sans erreur, l'environnement est opérationnel. + +--- + +## 5. Bibliothèques du projet + +À installer via **Outils → Gérer les bibliothèques** : + +| Bibliothèque | Auteur | Rechercher | +|---------------------|-----------|---------------------| +| HX711 | bogde | `HX711 bogde` | +| ESPAsyncWebServer | me-no-dev | `ESPAsyncWebServer` | +| AsyncTCP | me-no-dev | `AsyncTCP` | diff --git a/notes/technologie/HX711 ESP32 - balance connectée WiFi - code.cpp b/notes/technologie/HX711 ESP32 - balance connectée WiFi - code.cpp new file mode 100644 index 0000000..4819e35 --- /dev/null +++ b/notes/technologie/HX711 ESP32 - balance connectée WiFi - code.cpp @@ -0,0 +1,338 @@ +/* + Balance connectée WiFi — ESP32 + HX711 + ---------------------------------------- + - L'ESP32 crée un point d'accès WiFi (mode AP) + - Un portail captif redirige automatiquement le smartphone vers la page de pesée + - La page se met à jour en temps réel via Server-Sent Events (SSE) + - La calibration se fait depuis la page web, le facteur est sauvegardé en NVS + + Bibliothèques requises : + - HX711 (bogde) + - ESPAsyncWebServer (me-no-dev) + - AsyncTCP (me-no-dev) + - Preferences (intégrée ESP32) + + Câblage HX711 : + DOUT → GPIO 4 + SCK → GPIO 5 + VCC → 3V3 (ou 5V si module compatible) + GND → GND +*/ + +#include +#include +#include +#include +#include "HX711.h" + +// --- Pins HX711 --- +static const int PIN_DOUT = 4; +static const int PIN_SCK = 5; + +// --- WiFi AP --- +static const char* AP_SSID = "Balance-ESP32"; +static const char* AP_PASS = ""; // réseau ouvert + +// --- Objets globaux --- +HX711 scale; +DNSServer dnsServer; +AsyncWebServer server(80); +AsyncEventSource events("/events"); +Preferences prefs; + +float calibrationFactor = 1.0f; // chargé depuis NVS au démarrage + +// --- Flags inter-tâches (handler HTTP → loop) --- +// AsyncWebServer tourne dans une tâche séparée ; les opérations HX711 +// doivent rester dans loop() pour éviter les conflits de timing. +volatile bool pendingTare = false; +volatile bool pendingCalib = false; +volatile float pendingCalibMass = 0.0f; + +// --- Page HTML embarquée --- +static const char HTML[] PROGMEM = R"rawliteral( + + + + + + Balance + + + + + +
+

Balance connectée

+
+
grammes
+
+ + Connexion… +
+
+ + +
+

Calibration

+
+ +
+

① Vider la balance, puis mettre à zéro :

+ +
+
+ +
+

② Poser une masse connue et entrer sa valeur :

+
+ + +
+
+
+ +
+
+
+ + + + +)rawliteral"; + +// --- Portail captif --- +static void handleCaptiveRedirect(AsyncWebServerRequest* req) { + req->redirect("http://192.168.4.1/"); +} + +void setup() { + Serial.begin(115200); + delay(200); + + // --- Chargement facteur de calibration depuis NVS --- + prefs.begin("balance", true); // lecture seule + calibrationFactor = prefs.getFloat("calib", 1.0f); + prefs.end(); + Serial.printf("Facteur de calibration : %.2f%s\n", + calibrationFactor, + calibrationFactor == 1.0f ? " (défaut — calibration requise)" : " (chargé)"); + + // --- HX711 --- + scale.begin(PIN_DOUT, PIN_SCK); + if (!scale.is_ready()) { + Serial.println("HX711 non détecté — vérifier câblage."); + } + scale.set_scale(); + scale.tare(20); + scale.set_scale(calibrationFactor); + Serial.println("HX711 prêt."); + + // --- WiFi AP --- + WiFi.mode(WIFI_AP); + WiFi.softAP(AP_SSID, AP_PASS); + Serial.printf("AP démarré — SSID : %s — IP : %s\n", AP_SSID, + WiFi.softAPIP().toString().c_str()); + + // --- DNS captif --- + dnsServer.start(53, "*", WiFi.softAPIP()); + + // --- Routes HTTP --- + server.on("/", HTTP_GET, [](AsyncWebServerRequest* req) { + req->send_P(200, "text/html", HTML); + }); + + // Tare + server.on("/tare", HTTP_POST, [](AsyncWebServerRequest* req) { + pendingTare = true; + req->send(200, "text/plain", "OK"); + }); + + // Calibration + server.on("/calibrate", HTTP_POST, [](AsyncWebServerRequest* req) { + if (req->hasParam("mass", true)) { + float m = req->getParam("mass", true)->value().toFloat(); + if (m > 0.0f) { + pendingCalibMass = m; + pendingCalib = true; + req->send(200, "text/plain", "OK"); + } else { + req->send(400, "text/plain", "Masse invalide"); + } + } else { + req->send(400, "text/plain", "Parametre mass manquant"); + } + }); + + // Portail captif Android / iOS + server.on("/generate_204", HTTP_GET, handleCaptiveRedirect); + server.on("/connecttest.txt", HTTP_GET, handleCaptiveRedirect); + server.on("/redirect", HTTP_GET, handleCaptiveRedirect); + server.on("/hotspot-detect.html", HTTP_GET, handleCaptiveRedirect); + server.on("/library/test/success.html", HTTP_GET, handleCaptiveRedirect); + server.onNotFound(handleCaptiveRedirect); + + // --- SSE --- + events.onConnect([](AsyncEventSourceClient* client) { + client->send("0.0", "weight", millis(), 500); + }); + server.addHandler(&events); + + server.begin(); + Serial.println("Serveur web démarré."); +} + +void loop() { + dnsServer.processNextRequest(); + + // --- Tare --- + if (pendingTare) { + pendingTare = false; + scale.set_scale(); // remet le facteur à 1 avant la tare + scale.tare(20); + scale.set_scale(calibrationFactor); + events.send("tare_ok", "info", millis()); + Serial.println("Tare effectuée."); + } + + // --- Calibration --- + if (pendingCalib) { + pendingCalib = false; + scale.set_scale(1.0f); // facteur neutre pour lire la valeur brute + float raw = scale.get_value(20); + float factor = raw / pendingCalibMass; + calibrationFactor = factor; + scale.set_scale(calibrationFactor); + + prefs.begin("balance", false); // écriture + prefs.putFloat("calib", calibrationFactor); + prefs.end(); + + Serial.printf("Calibration : brut=%.0f masse=%.1fg facteur=%.2f\n", + raw, pendingCalibMass, calibrationFactor); + + String msg = "calib_ok:" + String(calibrationFactor, 2); + events.send(msg.c_str(), "info", millis()); + } + + // --- Lecture et diffusion du poids --- + if (scale.is_ready()) { + float grams = scale.get_units(5); + events.send(String(grams, 1).c_str(), "weight", millis()); + Serial.printf("Poids : %.1f g\n", grams); + } + + delay(500); +} diff --git a/notes/technologie/HX711 ESP32 - balance connectée WiFi - projet.md b/notes/technologie/HX711 ESP32 - balance connectée WiFi - projet.md new file mode 100644 index 0000000..5003497 --- /dev/null +++ b/notes/technologie/HX711 ESP32 - balance connectée WiFi - projet.md @@ -0,0 +1,142 @@ +# Projet — Balance connectée WiFi (HX711 + ESP32) + +## Objectif + +L'ESP32 lit la cellule de charge via le HX711, crée un réseau WiFi auquel un smartphone se connecte, et affiche le poids en temps réel sur une page web servie par l'ESP32. + +**Comportement réseau :** +- L'ESP32 crée un point d'accès WiFi (mode AP) +- Dès connexion du smartphone, un portail captif redirige automatiquement vers la page de pesée +- La page se met à jour en temps réel via Server-Sent Events (SSE) — pas de rechargement + +--- + +## Matériel nécessaire + +| Élément | Quantité | +|--------------------------------------|----------| +| ESP32 DevKit V1 (ESP-WROOM-32) | 1 | +| Module HX711 | 1 | +| Cellule de charge (1–50 kg) | 1 | +| Câbles Dupont | 8 | +| Alimentation USB 5 V / 1 A minimum | 1 | + +--- + +## Bibliothèques requises + +À installer via le gestionnaire de bibliothèques Arduino ou PlatformIO : + +| Bibliothèque | Auteur | Usage | +|-----------------------|----------------|--------------------------------| +| `HX711` | bogde | Lecture du capteur | +| `ESPAsyncWebServer` | me-no-dev | Serveur web asynchrone | +| `AsyncTCP` | me-no-dev | Dépendance d'AsyncWebServer | + +`WiFi`, `DNSServer` et `Preferences` sont intégrés au SDK ESP32 (pas d'installation nécessaire). + +--- + +## Alimentation + +### ESP32 DevKit V1 + +| Entrée | Tension | Remarque | +|---------------------|------------|------------------------------------------------------| +| Connecteur micro-USB | **5 V** | Voie normale — régulateur AMS1117 embarqué → 3,3 V | +| Broche **VIN** | **5 V** | Même régulateur que l'USB | +| Broche **3V3** | **3,3 V** | Bypass régulateur — source externe régulée requise | + +Le module ESP-WROOM-32 fonctionne en **3,3 V** en interne. Le DevKit intègre un régulateur AMS1117-3,3 V qui convertit le 5 V (USB ou VIN) en 3,3 V. + +Pendant les émissions WiFi, l'ESP32 peut consommer jusqu'à **~500 mA en pic**. Utiliser une alimentation USB d'au moins **1 A**. + +### Alimentation du module HX711 + +> **Brancher VCC du HX711 sur la broche `3V3` de l'ESP32**, même si le module accepte le 5 V. + +| Option | Avantage | Risque | +|-----------------------------|---------------------------------|---------------------------------------------------------------| +| HX711 VCC → **3V3** (recommandé) | DOUT à 3,3 V : compatible GPIO ESP32 | Tension d'excitation cellule légèrement plus faible | +| HX711 VCC → **5V / VIN** | Excitation cellule plus forte | DOUT à 5 V → **endommage les GPIO ESP32 (max 3,3 V)** | + +Le module HX711 bleu (le plus courant) accepte 3,3 V sans problème. La différence de sensibilité entre 3,3 V et 5 V est négligeable pour un usage de pesée classique. + +--- + +## Câblage + +### Cellule de charge → HX711 + +| Fil cellule de charge | Fonction | Broche HX711 | +|-----------------------|-------------|--------------| +| Rouge | Excitation+ | E+ | +| Noir | Excitation− | E− | +| Blanc | Signal− | A− | +| Vert | Signal+ | A+ | + +> ⚠️ Les couleurs varient selon le fabricant — vérifier la fiche technique de la cellule. + +### HX711 → ESP32 + +| Broche HX711 | Broche ESP32 | Rôle | +|--------------|--------------|-------------------| +| VCC | **3V3** | Alimentation | +| GND | GND | Masse | +| DT (DOUT) | GPIO 4 | Données série | +| SCK (PD_SCK) | GPIO 5 | Horloge série | + +> Les GPIO 4 et 5 peuvent être changés dans le code (`PIN_DOUT`, `PIN_SCK`). + +--- + +## Fichiers + +- [Code complet ESP32](HX711%20ESP32%20-%20balance%20connectée%20WiFi%20-%20code.cpp) +- [Schéma de câblage HX711](HX711-%20Amplificateur%2024-bits%20pour%20cellule%20de%20charge%20-%20schema%20de%20cablage.md) +- [Datasheet HX711](HX711-%20Amplificateur%2024-bits%20pour%20cellule%20de%20charge%20-%20datasheet.md) +- [Annexe — Installation Arduino IDE (Windows 10)](HX711%20ESP32%20-%20balance%20connectée%20WiFi%20-%20annexe%20installation%20Arduino%20IDE.md) + +--- + +## Calibration (depuis la page web) + +La calibration se fait directement depuis la page web, sans toucher au code ni à l'ordinateur. +Le facteur calculé est sauvegardé en mémoire non-volatile (NVS) de l'ESP32 et rechargé automatiquement à chaque démarrage. + +**Procédure (une seule fois, ou après remplacement de la cellule) :** + +1. Connecter le smartphone au réseau `Balance-ESP32` et ouvrir la page +2. **Vider complètement la balance** +3. Appuyer sur **Tare (zéro)** → attendre la confirmation verte +4. Poser une **masse connue** (ex. une bouteille d'eau de 500 ml ≈ 500 g) +5. Saisir la valeur en grammes dans le champ, puis appuyer sur **Calibrer** +6. La confirmation et le facteur calculé s'affichent → la balance est opérationnelle + +> Si le poids affiché est négatif quand on pose une charge, inverser les fils A+ / A− sur le HX711. + +Le facteur est conservé même après une coupure de courant. Une nouvelle calibration n'est nécessaire que si la cellule de charge ou le module HX711 est remplacé. + +--- + +## Utilisation + +1. Alimenter l'ESP32 +2. Sur le smartphone, aller dans les paramètres WiFi +3. Se connecter au réseau **`Balance-ESP32`** (sans mot de passe) +4. Une notification « Se connecter au réseau » apparaît → appuyer dessus + - Ou ouvrir un navigateur et aller sur `http://192.168.4.1` +5. La page de pesée s'affiche et se met à jour automatiquement toutes les 500 ms + +--- + +## Dépannage + +| Symptôme | Cause probable | Solution | +|-----------------------------------|---------------------------------------------|------------------------------------------------| +| Poids toujours à 0 | Cellule non câblée ou HX711 non alimenté | Vérifier câblage et alimentation | +| Valeur négative | Polarité A+ / A− inversée | Inverser les fils ou le signe du facteur | +| Poids instable / bruit | Câblage long ou alimentation bruyante | Raccourcir les fils, filtrer alimentation | +| Réseau WiFi invisible | ESP32 pas encore démarré | Attendre 5 s après mise sous tension | +| Page non affichée automatiquement | Comportement variable selon OS smartphone | Ouvrir manuellement `http://192.168.4.1` | +| Valeurs bloquées | HX711 en attente (DOUT haut) | Vérifier broche SCK, redémarrer l'ESP32 | diff --git a/notes/technologie/HX711- Amplificateur 24-bits pour cellule de charge - datasheet.md b/notes/technologie/HX711- Amplificateur 24-bits pour cellule de charge - datasheet.md index 1e02235..43cb66b 100644 --- a/notes/technologie/HX711- Amplificateur 24-bits pour cellule de charge - datasheet.md +++ b/notes/technologie/HX711- Amplificateur 24-bits pour cellule de charge - datasheet.md @@ -1,6 +1,6 @@ ## HX711 — Amplificateur 24-bits pour cellule de charge -**Type :** Convertisseur analogique-numérique (ADC) différentiel avec amplificateur programmable intégré +**Type :** Convertisseur analogique-numérique (ADC) différentiel 24 bits avec amplificateur programmable intégré **Applications typiques :** balances électroniques, systèmes de pesée, capteurs de force, instrumentation basse fréquence --- @@ -10,15 +10,25 @@ * ADC 24 bits à faible bruit, optimisé pour capteurs de pont de Wheatstone * Amplificateur à gain programmable : **32, 64 ou 128** * Deux canaux d'entrée différentiels : - * **Canal A :** gain 128 ou 64 - * **Canal B :** gain 32 -* Fréquences d'échantillonnage : **10 Hz ou 80 Hz** + * **Canal B :** gain 32 (fixe) +* Fréquences d'échantillonnage : **10 Hz ou 80 Hz** (sélection par broche RATE) * Alimentation : **2,6 V à 5,5 V** -* Interface série propriétaire à deux fils (DATA, CLOCK) -* Consommation typique : ~1,5 mA en fonctionnement +* Interface série propriétaire à deux fils (DOUT, PD\_SCK) +* Consommation typique : ~1,5 mA en fonctionnement, ~1 µA en veille * Oscillateur interne (pas de quartz requis) * Filtre numérique intégré (réjection 50/60 Hz) +* Plage de température : −40 °C à +85 °C + +--- + +## Plage d'entrée selon gain et canal + +| Canal | Gain | Plage différentielle d'entrée | +|-------|------|-------------------------------| +| A | 128 | ±20 mV | +| A | 64 | ±40 mV | +| B | 32 | ±80 mV | --- @@ -27,7 +37,8 @@ * Amplificateur différentiel faible bruit * Multiplexeur de canal * ADC sigma-delta 24 bits -* Régulateur analogique interne +* Régulateur analogique interne (alimente le pont via AVDD) +* Référence de tension interne (bandgap) * Oscillateur interne * Interface série synchrone @@ -35,46 +46,57 @@ ## Brochage (package SOP-16) -* **VSUP** : alimentation analogique -* **AVDD** : sortie régulateur analogique -* **AGND** : masse analogique -* **VBG** : référence interne -* **INA+, INA-** : entrée différentielle canal A -* **INB+, INB-** : entrée différentielle canal B -* **PD_SCK** : horloge et mise en veille -* **DOUT** : sortie données -* **DVDD** : alimentation logique -* **DGND** : masse logique -* Autres broches : non connectées (selon package) +| Broche | Nom | Direction | Description | +|-----------|----------|-----------|--------------------------------------------------| +| 1 | VSUP | Entrée | Alimentation analogique | +| 2 | AVDD | Sortie | Tension régulée interne (~VSUP) → excite le pont | +| 3–4 | AGND | — | Masse analogique | +| 5 | VBG | Sortie | Référence bandgap interne | +| 6 | INA− | Entrée | Entrée différentielle canal A (−) | +| 7 | INA+ | Entrée | Entrée différentielle canal A (+) | +| 8 | INB− | Entrée | Entrée différentielle canal B (−) | +| 9 | INB+ | Entrée | Entrée différentielle canal B (+) | +| 11 | PD\_SCK | Entrée | Horloge série et contrôle veille | +| 12 | DOUT | Sortie | Sortie données série | +| 13 | DVDD | Entrée | Alimentation logique | +| 14 | DGND | — | Masse logique | +| 15 | RATE | Entrée | Sélection fréquence : GND → 10 Hz, DVDD → 80 Hz | +| 16 | XO | — | Non connecté | + +> ⚠️ AVDD est une **sortie** : c'est la tension régulée interne utilisée pour alimenter le pont de la cellule de charge. Ne pas injecter de tension sur cette broche. --- -## Fonctionnement +## Fonctionnement — interface série -1. Le HX711 amplifie la tension différentielle issue du pont de jauge. -2. Le signal est converti par un ADC sigma-delta 24 bits. -3. Les données sont lues via une interface série synchrone : +1. Quand la conversion est terminée, **DOUT passe à 0** +2. Envoyer **24 impulsions** sur PD\_SCK → lit les 24 bits (MSB en premier) +3. Les impulsions supplémentaires définissent le **gain et le canal** pour la prochaine conversion : - * DOUT passe à 0 lorsque la conversion est prête - * 24 impulsions d'horloge lisent la valeur - * 25–27 impulsions définissent le gain et le canal suivant +| Impulsions totales | Canal suivant | Gain suivant | +|--------------------|---------------|--------------| +| 25 | A | 128 | +| 26 | B | 32 | +| 27 | A | 64 | + +4. **Mode veille :** maintenir PD\_SCK à l'état haut pendant > 60 µs +5. **Réveil :** abaisser PD\_SCK à 0 --- ## Performances électriques (typique) -* Résolution effective : ~18 à 20 bits (selon bruit) +* Résolution effective : ~18 à 20 bits (selon bruit et gain) * Bruit d'entrée (gain 128, 10 Hz) : ~50 nV RMS -* Tension pleine échelle : ±20 mV (gain 128) -* Dérive thermique : faible (adapté métrologie) +* Dérive thermique : faible (adapté à la métrologie de pesée) --- ## Modes de fonctionnement -* **Mode normal :** conversions continues -* **Mode veille :** maintenir PD_SCK à 1 > 60 µs -* **Sélection gain/canal :** nombre d'impulsions après lecture +* **Mode normal :** conversions continues, lecture sur demande +* **Mode veille :** PD\_SCK maintenu haut > 60 µs, consommation < 1 µA +* **Sélection gain/canal :** nombre d'impulsions après les 24 bits de données --- @@ -82,16 +104,18 @@ * Très faible coût et intégration minimale * Pas de composants externes critiques -* Excellente réjection du bruit secteur -* Directement compatible microcontrôleurs (Arduino, ESP, etc.) +* Excellente réjection du bruit secteur (50/60 Hz) +* Directement compatible microcontrôleurs (Arduino, ESP32, etc.) +* AVDD intégré : pas besoin d'alimentation externe pour le pont --- ## Limitations -* Bande passante faible (pesée statique) +* Bande passante faible (pesée statique uniquement) * Interface non standard (pas SPI/I²C natif) * Sensible au routage PCB et au bruit d'alimentation +* Un seul composant par bus (pas d'adressage) --- @@ -104,4 +128,7 @@ --- -Si nécessaire, fournir un schéma de câblage type avec cellule de charge ou un résumé timing interface. +## Fichiers associés + +* [Schéma de câblage avec cellule de charge et Arduino](HX711-%20Amplificateur%2024-bits%20pour%20cellule%20de%20charge%20-%20schema%20de%20cablage.md) +* [Code ESP32 (Arduino framework)](HX711-%20Amplificateur%2024-bits%20pour%20cellule%20de%20charge%20-%20code.c) diff --git a/notes/technologie/VL53L1X vs VL6180X - comparatif.md b/notes/technologie/VL53L1X vs VL6180X - comparatif.md new file mode 100644 index 0000000..b93006c --- /dev/null +++ b/notes/technologie/VL53L1X vs VL6180X - comparatif.md @@ -0,0 +1,28 @@ +# Comparatif VL53L1X vs VL6180X + +Deux capteurs de distance Time-of-Flight de STMicroelectronics, pour des usages différents. + +| Caractéristique | VL53L1X | VL6180X | +|---------------------------|----------------------------------|--------------------------------------| +| Technologie | ToF (FlightSense) | ToF | +| Longueur d'onde laser | 940 nm | 850 nm | +| Portée minimale | ~4 cm | ~0 mm | +| Portée maximale | 4 m | ~100 mm (200 mm selon conditions) | +| Résolution | ~1 mm | 1 mm | +| Précision typique | — | ±3 mm (< 50 mm) | +| Fréquence de mesure | jusqu'à 50 Hz | jusqu'à 50 Hz (configurable) | +| Champ de vision | ~27° (réductible via ROI) | ~25° | +| Modes de distance | Short / Medium / Long | — | +| ROI programmable | Oui | Non | +| Capteur de lumière (ALS) | Non | Oui (jusqu'à 100 klux) | +| Interface | I²C (400 kHz) | I²C (400 kHz) | +| Tension d'alimentation | 2.6 – 3.5 V (5.5 V avec module) | VDD : 2.6 – 3.5 V / I/O : 1.8 – 3.3 V | +| Courant actif | 15 – 25 mA | ~20 mA | +| Courant veille | < 100 µA (mode ULP) | < 5 µA | +| Taille boîtier IC | 4.9 × 2.5 × 1.56 mm | LGA compact | +| Interruptions | — | Oui (seuil distance / lumière) | + +## En résumé + +- **VL6180X** : idéal pour la **courte portée** (0–20 cm), la détection de proximité, et quand on a besoin d'un capteur de lumière ambiante intégré. +- **VL53L1X** : choix pour les **distances longues** (jusqu'à 4 m), la robotique, ou quand la flexibilité du champ de vision (ROI) est utile.