Éclairage AC intelligent avec Arduino UNO et relais – Contrôle automatique
Composants et fournitures
| Composant | Quantité | Note |
|---|---|---|
| Arduino UNO | 1 | |
| Lampe à économie d'énergie | 1 | |
| Adaptateur 5V DC | 1 | |
| Fils de connexion (jumper wires) | 1 | |
| Relais (générique, 1 canal minimum) | 1 | |
| Composants électroniques UTSOURCE | 1 |
Outils et machines nécessaires
| Outil |
|---|
| Tournevis (cruciforme pour module relais) |
Applications et services en ligne
| Outil |
|---|
| Microsoft Visual Studio 2015 (gratuit) ou Arduino IDE |
| Arduino IDE |
À propos de ce projet
Lumières connectées pour maison intelligente
Dans ce projet, nous apprenons à utiliser un relais avec un capteur à ultrasons et un Arduino pour rendre l'éclairage domestique (ou tout appareil) intelligent.
Objectif : faire qu'une ampoule à économie d'énergie s'éteigne quand vous quittez la pièce et se rallume quand vous y revenez. C'est très simple à mettre en œuvre et prend peu de temps.
Ce tutoriel suppose des connaissances de base Arduino. Si vous avez déjà utilisé Arduino, c'est parti.
⚠ ATTENTION : ce projet utilise le secteur haute tension (230V AC). Si vous avez moins de 16 ans ou manquez d'expérience, vous DEVEZ être assisté par une personne compétente pour la partie secteur.
Cependant, vous pouvez valider le concept avec des appareils basse tension (DC) sans danger. Je signalerai clairement le moment où le danger commence.
Composants détaillés
- Arduino Uno
- Multimètre
- Fils de connexion (Jumpers)
- Breadboard
- Module Relais
- Capteur à ultrasons HC-SR04 + bibliothèque
NewPingpour Arduino (disponible ici, appelée "New Ping"). Si première installation bibliothèque externe, voir ce guide.
- Source d'alimentation DC (optionnelle)
- Tournevis cruciforme (pour bornes relais)
- Ampoule économie d'énergie avec douille et fiche secteur (j'ai récupéré la fiche sur un vieux câble radio).
J'ai aussi utilisé un pistolet à colle pour isoler les fils – préférez du ruban isolant.
- Visual Studio pour coder (totalement gratuit) – voir ce guide – ou Arduino IDE classique.
Préparation du capteur à ultrasons
Connexion du HC-SR04 à l'Arduino (voir image). Le test du capteur est décrit plus bas.
Module Relais
On utilise un canal du module (le mien en a 2) :
- VCC → 5V Arduino
- IN1 → Broche 8 Arduino (ou autre au choix)
Important : Mon module est actif bas (active-low). Différence active-low / active-high : voir ici. Pour identifier le vôtre : alimentez VCC/GND, puis mettez IN sur 5V → si rien ne se passe, c'est active-low (confirmez en mettant IN sur GND).
L'ampoule (partie secteur – DANGER)
⚠ ZONE HAUTE TENSION – PERSONNE EXPÉRIMENTÉE REQUISE
Préparez l'ampoule pour la brancher sur la prise murale et le relais :
- Un fil va directement de la prise au relais
- L'autre fil est coupé en deux : une extrémité → borne NO (Normalement Ouvert) du relais, l'autre → borne COM (Commun) du relais, puis vers la prise
Circuit final complet (ampoule simplifiée) :
Le code effectue :
- Mesure de distance par ultrasons
- Détection passage devant la porte
- Inversion de l'état de la lumière
Lecture des valeurs ultrasons
Test du capteur avec l'exemple de la bibliothèque – affiche simplement la distance.
Distance en cm ou pouces :
sonar.ping_cm();
// Ou
sonar.ping_inch();
Configuration broches et portée max :
Problème : le capteur renvoie parfois une valeur erronée (bruit).
Cela ferait clignoter la lumière involontairement. Solutions :
- Moyenne sur plusieurs lectures
- Filtre médian : prend N lectures, trie, prend la valeur centrale – excellent pour éliminer le bruit ponctuel.
Heureusement, NewPing implémente ce filtre :
sonar.ping_median(unsigned byte numReadings);
Passez le nombre de lectures (max 512 – type unsigned byte). Retourne le temps d'écho aller-retour, à convertir :
sonar.convert_cm(unsigned int echoTime);
// Ou
sonar.convert_in(unsigned int echoTime);
Dernier point : le capteur renvoie 0 si rien devant lui. Solution : forcer la distance à MAX_DISTANCE si lecture = 0.
Code final de lecture (variable globale distance) :
Détection de passage
Logique : l'ultrason doit détecter une distance critique (ex: moitié largeur de porte) → certitude qu'on franchit le seuil.
La lumière ne bascule que quand quelque chose passe devant. Si on reste immobile devant, rien ne se passe.
Code de détection :
Félicitations ! C'est terminé. Je joins le projet Visual Studio complet (petite modif bibliothèque : allocation dynamique au lieu de tableaux à taille variable – VS ne les supporte pas – + documentation).
Composants électroniques sur utsource.net
Merci de respecter ce projet si utile. Autres projets :
- Mélangeur de couleurs Arduino
- Voiture RC avec 1Sheeld
- Articles : Développement Arduino avec Visual Studio
Code
- Smart House Light
- Ultrasonic test
Smart House Light (Arduino)
Ce code lit l'ultrason et pilote le relais en conséquence :
#define TRIGGER_PIN 12 // Broche Arduino reliée à Trig du HC-SR04
#define ECHO_PIN 11 // Broche Arduino reliée à Echo du HC-SR04
#define MAX_DISTANCE 200 // Distance max ping (cm). Capteur max 400-500cm. [valeur arbitraire]
#define RELAY_LINE1_PIN 8
#include "NewPing.h"
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Config broches et distance max
unsigned int critical_distance_cms = 50; // Distance seuil bascule lumière [arbitraire]
bool state = 0;
void setup() {
Serial.begin(9600); // Moniteur série 115200 baud pour voir les pings
pinMode(RELAY_LINE1_PIN, OUTPUT);
digitalWrite(RELAY_LINE1_PIN, HIGH); // Éteint la lumière (relais actif bas)
}
void loop() {
delay(50); // 50ms entre pings (~20/sec). 29ms min.
unsigned int distance = readDistance(); // Distance actuelle objet face au capteur
Serial.print("Ultrasonic: ");
Serial.print(distance);
Serial.println("cm");
// Quelqu'un près de la porte ?
if (distance < critical_distance_cms) {
// Attend qu'il s'éloigne
while (distance < critical_distance_cms) {
distance = readDistance();
delay(5);
}
state = !state; // Inverse état relais
if (state) {
Serial.println("Porte Ouverte!");
digitalWrite(RELAY_LINE1_PIN, LOW); // Allume (actif bas)
} else {
Serial.println("Porte Fermée!");
digitalWrite(RELAY_LINE1_PIN, HIGH); // Éteint
}
}
}
// Met à jour la lecture ultrason (filtre médian + gestion 0)
unsigned int readDistance() {
// Lit 7 valeurs, prend la médiane (filtre médian) – élimine bruit
unsigned int distance = sonar.convert_cm(sonar.ping_median(7));
// 0 = rien devant → mettre à MAX_DISTANCE pour éviter bascule intempestive
if (distance == 0) {
distance = MAX_DISTANCE;
}
return distance;
}
Ultrasonic test (Arduino)
Code test simple – affiche la distance lue :
// ---------------------------------------------------------------------------
// Exemple NewPing : ping ~20 fois/seconde
// ---------------------------------------------------------------------------
#include <NewPing.h>
#define TRIGGER_PIN 12
#define ECHO_PIN 11
#define MAX_DISTANCE 200
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
void setup() {
Serial.begin(115200);
}
void loop() {
delay(50);
Serial.print("Ping: ");
Serial.print(sonar.ping_cm()); // Distance cm (0 = hors portée)
Serial.println("cm");
}
Smart House Lights (Projet Visual Studio complet)
Projet complet pour Visual Studio avec bibliothèque modifiée :
https://github.com/shakram02/Arduino_SmartHouseLights.git
Schématiques
Schéma complet du projet :
Processus de fabrication
- Détecteur de langue TinyML avec Edge Impulse sur Arduino Nano 33 BLE Sense
- Construire un jeu gyroscopique temps réel avec Arduino Nano et capteur MPU-6050
- Dé numérique Arduino sur écran LCD 16x2 – Générateur aléatoire à bouton poussoir
- Enregistreur de Température et Humidité Arduino avec DHT11 et Shield Ethernet
- Système d'arrosage automatique pour plantes piloté par Arduino
- Find Me : Localisateur d'objets intelligent avec Arduino et Bluetooth
- Chaussures auto-laçantes intelligentes avec récupération d'énergie piézoélectrique
- Mesure de distance en temps réel par sonar Arduino et visualisation Processing
- Célébrez avec Lumière et Son : Projet Arduino Anniversaire DIY