🔬 DIY : Système de Projection Smartphone avec ESP32 - Optique et Électronique (Guide Complet)
Les "amplificateurs d'écran" vendus dans le commerce ne sont en réalité que de simples lentilles de Fresnel qui agrandissent l'image de votre smartphone par réfraction. En tant que makers, nous pouvons faire bien mieux : créer un système de projection qui combine l'optique, l'électronique et la programmation pour transformer votre téléphone en véritable projecteur intelligent.
1. 🔍 La Science Derrière l'Agrandissement d'Écran
Principe Optique Fondamental :
Un amplificateur d'écran fonctionne sur le principe de la lentille convergente. La lentille de Fresnel (une lentille plate à gradins) capture la lumière émise par l'écran du smartphone et la projette sur un mur ou un écran.
Formule des lentilles minces :
1/f = 1/p + 1/p'
où :
- f = distance focale de la lentille
- p = distance objet-lentille (smartphone)
- p' = distance lentille-image (mur)
- Grandissement G = p'/p
2. 📦 Projet 1 : Amplificateur Passif (Lentille de Fresnel)
Liste des Composants :
- Lentille de Fresnel : Format A4, distance focale ~200-300mm (~5-8€)
- Boîtier en carton ou bois : Pour maintenir la lentille et le smartphone
- Tissu noir : Pour éliminer les réflexions internes
- Support smartphone : Pour positionner précisément le téléphone
🔧 Guide de Construction :
- Calculer la distance optimale : Placez la lentille à une distance égale à sa focale (f) de l'écran du smartphone.
- Inverser l'image : L'image projetée sera inversée (haut/bas et gauche/droite). Activez l'option "Rotation 180°" dans les paramètres d'accessibilité de votre smartphone.
- Obscurité requise : La lentille de Fresnel ne concentre pas beaucoup de lumière. Utilisez le projecteur dans une pièce sombre pour un résultat optimal.
- Luminosité maximale : Réglez la luminosité du smartphone à 100%.
3. 🚀 Projet 2 : Système de Projection Intelligent avec ESP32
Pour aller au-delà du simple agrandissement optique, construisons un système de projection actif qui contrôle automatiquement l'environnement et optimise l'expérience visuelle.
Matériel Requis :
- ESP32 DevKit : Microcontrôleur WiFi/Bluetooth (~5€)
- Capteur de luminosité : BH1750 (I2C) pour mesurer l'ambiance (~2€)
- Capteur de distance : HC-SR04 (ultrason) pour ajuster la mise au point (~2€)
- Servo-moteur SG90 : Pour ajuster automatiquement la position de la lentille (~3€)
- LED RGB WS2812B : Pour l'éclairage d'ambiance ambilight (~4€)
- Lentille de Fresnel : Montée sur bras mobile
Coût total : ~16-20€ (vs 50-100€ pour un projecteur commercial basique)
🔌 Schéma de Câblage :
ESP32 Composants
────── ──────────
GPIO 21 (SDA) ──────→ BH1750 (SDA)
GPIO 22 (SCL) ──────→ BH1750 (SCL)
GPIO 5 ──────→ HC-SR04 (Trig)
GPIO 18 ──────→ HC-SR04 (Echo)
GPIO 13 ──────→ Servo SG90 (Signal)
GPIO 4 ──────→ WS2812B (Data)
3.3V ──────→ BH1750 (VCC)
5V ──────→ Servo, WS2812B (VCC)
GND ──────→ Tous les GND
💻 Code Arduino pour ESP32 :
/*
* Système de Projection Smartphone Intelligent
* TechFix Hub - Optique + Électronique DIY
* Contrôle automatique de la mise au point et de l'ambiance
*/
#include
#include
#include
#include
// Définition des broches
#define TRIG_PIN 5
#define ECHO_PIN 18
#define SERVO_PIN 13
#define LED_PIN 4
#define NUM_LEDS 30
// Objets
BH1750 lightMeter;
Servo focusServo;
CRGB leds[NUM_LEDS];
// Variables
int currentFocus = 90; // Position servo (0-180)
float targetDistance = 250.0; // Distance focale en mm
void setup() {
Serial.begin(115200);
// Initialisation capteur de lumière
Wire.begin();
lightMeter.begin();
// Initialisation capteur ultrason
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
// Initialisation servo
focusServo.attach(SERVO_PIN);
focusServo.write(90); // Position neutre
// Initialisation LEDs
FastLED.addLeds(leds, NUM_LEDS);
Serial.println("Système de projection intelligent démarré");
delay(2000);
}
void loop() {
// 1. Mesurer la luminosité ambiante
float lux = lightMeter.readLightLevel();
Serial.print("Luminosité: ");
Serial.print(lux);
Serial.println(" lux");
// 2. Mesurer la distance au mur
float distance = measureDistance();
Serial.print("Distance au mur: ");
Serial.print(distance);
Serial.println(" cm");
// 3. Ajuster automatiquement la mise au point
adjustFocus(distance);
// 4. Ajuster l'éclairage d'ambiance
adjustAmbientLight(lux);
delay(1000); // Mise à jour chaque seconde
}
float measureDistance() {
// Envoyer une impulsion ultrasonique
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Mesurer le temps de retour
long duration = pulseIn(ECHO_PIN, HIGH);
// Calculer la distance (cm)
float distance = duration * 0.034 / 2;
return distance;
}
void adjustFocus(float distance) {
// Calculer la position optimale du servo pour la mise au point
// Plus le mur est loin, plus la lentille doit être proche du smartphone
int targetPosition = map((int)distance, 100, 500, 60, 120);
targetPosition = constrain(targetPosition, 30, 150);
if (abs(targetPosition - currentFocus) > 5) {
focusServo.write(targetPosition);
currentFocus = targetPosition;
Serial.print("Mise au point ajustée: ");
Serial.println(targetPosition);
}
}
void adjustAmbientLight(float lux) {
// Créer un effet ambilight basé sur la luminosité ambiante
if (lux < 10) {
// Pièce très sombre : LEDs bleues faibles
fill_solid(leds, NUM_LEDS, CRGB(0, 0, 50));
} else if (lux < 50) {
// Pénombre : LEDs violettes
fill_solid(leds, NUM_LEDS, CRGB(30, 0, 50));
} else {
// Lumière normale : LEDs éteintes
fill_solid(leds, NUM_LEDS, CRGB(0, 0, 0));
}
FastLED.show();
}
4. 🌐 Méthodes de Projection Numérique (Sans Lentille)
Pour une qualité d'image supérieure, utilisez les technologies de screen mirroring :
A. Projection Filaire (HDMI/USB-C)
- Adaptateur USB-C vers HDMI : Pour les smartphones modernes (Samsung, Xiaomi)
- Adaptateur Lightning vers HDMI : Pour iPhone
- Avantage : Qualité Full HD, latence minimale
B. Projection Sans Fil (WiFi/Bluetooth)
- Miracast : Standard Android natif
- AirPlay : Pour appareils Apple
- Chromecast : Solution Google universelle
C. Solution DIY avec ESP32-CAM
Pour les makers avancés, utilisez un ESP32-CAM comme récepteur vidéo et affichez le flux sur un petit écran LCD TFT :
- Capturez l'écran du smartphone via une app de streaming
- Transmettez via WiFi local
- Affichez sur un écran ILI9341 connecté à l'ESP32
5. ⚠️ Santé et Utilisation Prolongée
Précautions à Prendre :
- Fatigue oculaire : Limitez les sessions à 20-30 minutes. Suivez la règle 20-20-20 (toutes les 20 minutes, regardez à 20 pieds pendant 20 secondes).
- Lumière bleue : Activez le mode "Filtre lumière bleue" ou "Night Shift" sur votre smartphone.
- Distance de visionnage : Pour un écran de 6 pouces projeté à 2 mètres, asseyez-vous à au moins 1,5 mètre.
- Éclairage ambiant : Ne regardez jamais un écran dans l'obscurité totale. Maintenez un éclairage d'ambiance faible.
6. 🛠️ Améliorations Possibles
- Contrôle vocal : Ajoutez un microphone INMP441 pour commander le système par la voix
- Intégration domotique : Connectez l'ESP32 à Home Assistant pour automatiser l'éclairage de la pièce
- Mode cinéma : Programmez des scénarios (extinction des lumières, fermeture des volets) via MQTT
- Suivi de mouvement : Utilisez un capteur PIR pour allumer/éteindre automatiquement le système
7. Conclusion
Construire un système de projection DIY est bien plus qu'un simple agrandissement d'écran : c'est une opportunité d'apprendre l'optique géométrique, la programmation embarquée et l'automatisation. Que vous choisissiez la lentille de Fresnel passive ou le système intelligent avec ESP32, vous maîtriserez des concepts fondamentaux de l'électronique et de la physique.
Prochaine étape : Explorez nos autres projets IoT pour intégrer votre projecteur dans un écosystème domotique complet !
