Domotique : Commander l'éclairage d'une pièce
vendredi 26 juillet 2013 à 10:21 Navez-vous jamais rêvé de concevoir par vous-même un système qui vous permettrait de gérer léclairage dans chacune des pièces de votre maison ? Eh bien, au nom du Do it yourself (aussi connu sous le nom DIY), je vais vous montrer comment réaliser un tel montage en utilisant une Arduino, ce fameux circuit imprimé libre et open source qui a rendu lélectronique accessible à presque tout le monde de nos jours.
Nous avons bien ici 2 photodiodes légèrement écartées qui recevront chacune le rayon dun pointeur laser ainsi quune troisième servant à mesurer lillumination globale. A droite, on trouve 2 LED : celle de gauche permettra dindiquer si le système est activé et celle de droite de droite simulera la « lampe ». Enfin, au milieu, on trouve un bouton poussoir pour activer et désactiver le système (on aurait pu utiliser un véritable interrupteur ici).
Je pense que le code est assez simple à comprendre. De plus, j'ai pris soin de bien commenter toutes les parties importantes. Néanmoins, si vous ne comprenez pas une partie du programme, n'hésitez pas à mon contacter.
Une alternative à lutilisation de laser aurait été de mettre en place des récepteurs à ultrason à la place des photodiodes. En effet, en fonction du retard entre lémission de londe et sa réception, on aurait facilement pu détecter le passage dune personne.
Objectif de notre montage
A terme, le système devra être capable de détecter lintensité de la lumière ambiante (inutile dallumer la lumière de votre table de nuit en plein jour), de différencier une entrée dune personne de sa sortie, de compter le nombre de personnes présentes dans la pièce à un moment donné, de gérer léclairage en conséquence et bien sûr dêtre désactivable pour ne pas gêner lutilisateur à terme.Cependant, dans notre exemple, au lieu de raccorder notre montage directement au secteur, ce qui devrait en principe être le cas, jutiliserai plutôt une simple LED ce qui sera à mon avis beaucoup moins dangereux.
Liste du matériel nécessaire
Avant de commencer quoi que ce soit, il est important que vous vous procuriez les éléments nécessaires au montage :- Une carte , ce qui devrait être largement suffisant pour notre montage
- 3 photodiodes qui permettront dune part de détecter la lumière provenant des lasers et dautre part dévaluer lintensité lumineuse dans la pièce. Il est recommandé de choisir une de longueur d'onde puisque les lasers sont des lumières monochromatiques
- 2 pointeurs laser dune puissance denviron 5mw : cela permettra de détecter doù vient la personne et de compter ainsi le nombre de personnes présentes dans la pièce
- qui servira dinterrupteur pour allumer ou éteindre le système
- 2 LED, une pour indiquer létat du système et une qui servira simplement de « lampe »
- Des résistances de 10K Ohm pour protéger les éléments branchés : il m'est déjà arrivé de griller certains de mes capteurs en omettant de placer une résistance
- Personnellement, jutilise une (ou platine d'expérimentation) pour faire facilement mes branchements
Etape 1 : le montage
Voici donc maintenant un schéma réalisé à l'aide du logiciel du montage quil vous faudra réaliser pour notre futur système :Nous avons bien ici 2 photodiodes légèrement écartées qui recevront chacune le rayon dun pointeur laser ainsi quune troisième servant à mesurer lillumination globale. A droite, on trouve 2 LED : celle de gauche permettra dindiquer si le système est activé et celle de droite de droite simulera la « lampe ». Enfin, au milieu, on trouve un bouton poussoir pour activer et désactiver le système (on aurait pu utiliser un véritable interrupteur ici).
Etape 2 : le programme
Il sagit maintenant de créer le programme permettant de faire fonctionner ce montage. Ni une ni deux, je vous donne mon propre code commenté :Code : c
#define BUTTON_INTERRUPTEUR 9 //bouton poussoir pour activer/désactiver le système #define LED_INTERRUPTEUR 8 //LED affichant l'état de l'interrupteur #define LED_LAMPE 7 //LED servant de lampe #define LDR_IN 0 //photodiode détectant l'entrée dans la pièce #define LDR_OUT 1 //photodiode détectant la sortie de la pièce #define LDR_AMBIANT 2 //photodiode détectant l'illumination ambiante int allume = 1; int jour = 0; int lampe_allume = 0; int ldr_in_position = 0; //permet de savoir quelle photodiode a été déclenchée en première int ldr_out_position = 0; //permet de savoir quelle photodiode a été déclenchée en première int number_person = 0; int buttonEtatCourant; long time = 0; // temps écoule entre 2 appuis sur le bouton long delaiChangement = 200; // temps minimum entre 2 appuis void setup() //fonction d'initialisation de la carte { pinMode(LED_INTERRUPTEUR, OUTPUT); pinMode(LED_LAMPE, OUTPUT); } void loop() { getButton(); getDayNight(); displayLedInterrupteur(); if(jour == 0 && allume == 1) //on exécute le reste du script que si il fait nuit { detectPassage(); displayLedLamp(); } } void getButton() { buttonEtatCourant = digitalRead(BUTTON_INTERRUPTEUR); //on lit l'état du bouton poussoir if (buttonEtatCourant == HIGH && millis() - time > delaiChangement) { if(allume == 0) allume = 1; //on dit alors que le système est activé else allume = 0; //on dit alors que le système est éteint time = millis(); } } void getDayNight() { if(analogRead(LDR_AMBIANT) > 800) //la lumière dans la pièce est forte { if(lampe_allume == 0) //si la lampe est allumé, alors on dit que il fait forcément nuit { jour = 0; } else { jour = 1; } } else //la mumière est faible, il fait forcément nuit { jour = 0; } } void displayLedInterrupteur() { if(allume == 1) { analogWrite(LED_INTERRUPTEUR, HIGH); } } void detectPassage() { if(analogRead(LDR_IN) < 500) //on vient de passer devant le capteur d'entre { if(ldr_out_position == 0) //le capteur extérieur a été le premier déclenché, la personne entre { ldr_in_position = 1; } else if(ldr_out_position == 1) //le capteur extérieur a été déclenché en 2ème, la personne sort { ldr_in_position = 2; } } if(analogRead(LDR_OUT) < 500) //on vient de passer devant le capteur de sortie { if(ldr_in_position == 0) //le capteur intérieur a été le premier déclenché, la personne sort { ldr_out_position = 1; } else if(ldr_in_position == 1) //le capteur intérieur a été déclenché en 2ème, la personne entre { ldr_out_position = 2; } } if(ldr_in_position == 1 && ldr_out_position == 2) //la personne sort { number_person --; if(number_person < 0) number_person = 0; } else if(ldr_in_position == 2 && ldr_out_position == 1) //la personne entre { number_person ++; } if(number_person == 0) { lampe_allume = 0; } else { lampe_allume = 1; } if(ldr_in_position > 0 && ldr_out_position >0)// on remet à 0 après un passage { ldr_in_position = 0; ldr_out_position = 0; } } void displayLedLamp() { if(lampe_allume == 1) analogWrite(LED_LAMPE, HIGH); else analogWrite(LED_LAMPE, LOW); }
Je pense que le code est assez simple à comprendre. De plus, j'ai pris soin de bien commenter toutes les parties importantes. Néanmoins, si vous ne comprenez pas une partie du programme, n'hésitez pas à mon contacter.
Conclusion
Et voilà, vous possédez maintenant un petit système permettant dautomatiser léclairage dune pièce basé sur lutilisation de pointeurs laser et de photodiodes.Une alternative à lutilisation de laser aurait été de mettre en place des récepteurs à ultrason à la place des photodiodes. En effet, en fonction du retard entre lémission de londe et sa réception, on aurait facilement pu détecter le passage dune personne.
Sources :
- [/puce][puce]
- pour le schéma