Je veux depuis longtemps détecter le niveau de lumière dans mon garage pour déclencher automatiquement l’éclairage quand quelqu’un passe et qu’il fait trop sombre. Je me suis enfin décidée à réaliser un prototype. Je l’ai fait en deux temps : en simulation, en réel sur breadboard. Dans ce premier article de la série Arduino : détection de lumière et de mouvement, j’explique les étapes de simulation puis de montage en prototype. D’autres articles expliqueront comment communiquer les données à un serveur, et comment actionner une lampe à partir de ce montage.
Ce que je veux obtenir
Je veux un système qui, lorsqu’il détecte une présence exécute les actions suivantes :
- afficher « motion detected » sur l’écran LCD ;
- afficher la luminosité mesurée sur l’écran LCD ;
- émettre un son pour indiquer qu’une présence a été détectée ;
- allumer une LED rouge pour indiquer qu’une présence a été détectée.
Lorsqu’aucune présence n’est détectée, le montage ne fait rien d’autre que d’afficher « Waiting for motion ».
Un montage simulé sur ordinateur !
J’ai longtemps utilisé https://circuits.io/ pour simuler des montages avec Arduino. Mais maintenant il est intégré à Tinkercad (fonction circuits).
Processus d’expérimentation par simulation
J’ai procédé par itérations successives :
- placer un arduino et un détecteur de mouvement
- ajouter un écran LCD ;
- Ajouter une LED rouge ;
- Ajouter une cellule photoélectrique ;
- Ajouter un haut-parleur ;
- Faire défiler le texte d’attente pour économiser l’écran.
A chaque étape, je valide le code avec la fonction « start simulation » inclue dans Tinkercad.
Toutes ces étapes sont finalisées sur Tinkercad, dans le circuit « Arduino with PIR and light sensor, LCD display and speaker«
Le code
Le code complet est téléchargeable :
- en version txt : Arduino, mouvement, luminosité, LCD et speaker : le code TXT
- en version ino : Arduino, mouvement, luminosité, LCD et speaker : le code ARDUINO
Dans le code, on notera simplement que :
- le détecteur de lumière répond par une valeur analogique de 0 à 1023 ;
- le détecteur de présence est soit HIGH, soit LOW.
- L’écran LCD est compatible avec le driver Hitachi HD44780 (comme la plupart des écrans avec 16 broches) et utilise la bibliothèque LiquidCrystal.h .
- On utilise lcd.print(photocellReading); et surtout pas lcd.write(photocellReading); pour afficher la valeur de résistance photoélectrique. La deuxième commande aurait affiché le caractère ASCII correspondant à la valeur de photorésistance (par exemple « a » si la photorésistance avait une valeur de 97).
Les composants
J’avais certains composants et j’ai commandé les autres. Je n’indique la source des composants que pour ceux que j’ai commandé récemment (octobre 2017).
La liste des composants
Nom | Quté | Source / commentaire | Prix |
Arduino Uno R3 | 1 | ||
Photorésistance | 1 | Sur Amazon.fr ici | 5.90 € les 10 |
Capteur de mouvement (PIR Sensor) | 1 | Sur Amazon.fr ici | 7.99 € les 3 |
écran LCD 16 x 2 | 1 | Sur Amazon.fr ici. Attention, les broches ne sont pas fournies avec, il faut en souder. | 5.99 € les 2 |
Résistance 1 kΩ | 1 | marron / noir / noir / marron, pour l’écran LCD | |
Potentiomètre | 1 | Remplacé plus tard par une résistance 1.5kΩ | |
Résistance 10 kΩ | 1 | marron / rouge / noir / noir pour la photorésistance | |
LED rouge | 1 | ||
Résistance 220 Ω | 1 | rouge/rouge/marron, pour la LED rouge | |
Haut-parleur | 1 | Je l’avais démonté d’un appareil usagé. |
Tous mes composants (ou presque) sont prêts :

Arduino, mouvement et luminosité : Les composants (manque led rouge)
Sur la photo, il manque la led rouge et le haut-parleur. On notera aussi que je me suis trompée pour la résistance de 10KΩ, qui ne faisait que 1kΩ en fait. J’ai corrigé dans le montage.
Choix de la résistance associée à la cellule photoélectrique
J’ai lu attentivement ce tutoriel d’Adafruit. Il explique en anglais comment choisir la valeur de la résistance « pull-down » selon l’environnement lumineux que l’on a. On choisira une valeur faible (1 KΩ) si on veut différencier des niveaux importants de lumière. On préférera une résistance de 10 KΩ si on veut différencier des ambiances sombres, ce qui est mon cas.
Choix de l’alimentation
L’Arduino peut être alimenté en USB en 5V mais il est préférable de l’alimenter en 7-12V par l’intermédiaire de la prise jack. Pour le prototype, j’ai utilisé une alimentation 12V (DC, attention à ne pas choisir une alimentation en courant alternatif) et 500 mA.
Passage à la phase prototype
Il nous faut monter en réel ce schéma (sur Tinkercad ici) :

Le schéma complet du montage Arduino + détecteur de mouvement + détecteur de luminosité + écran LCD + LED rouge + haut-parleur
Préparer le montage
Le schéma est assez complexe à réaliser. J’ai donc préparé trois éléments pour être certaine de ne pas me tromper et j’ai réalisé les cablages dans l’ordre de ces trois documents :
Elément 1 : câblage de l’arduino
De | A | Couleur |
5V | breadboard | rouge |
GND | breadboard | noir |
A0 | Photorésistance | mauve |
2 | RS LED | marron |
3 | E LED | gris |
4 | DB4 LED | bleu clair |
5 | DB5 LED | violet |
6 | DB6 LED | vert |
7 | DB7 LED | orange |
8 | PIR | jaune |
11 | LED | bleu vif |
Elément 2 : câblage de l’écran LCD 16×2 :
De | A | Couleur |
GND | breadboard | noir |
VCC | breadboard | rouge |
V0 | Potentiomètre | orange |
RS | Arduino 2 | marron |
RW | GND breadboard | noir |
E | Arduino 3 | gris |
DB0 | / | |
DB1 | / | |
DB2 | / | |
DB3 | / | |
DB4 | Arduino 4 | bleu clair |
DB5 | Arduino 5 | violet |
DB6 | Arduino 6 | vert |
DB7 | Arduino 7 | orange |
LED | 5V breadboard | rouge |
LED | Résistance 1 kohm | noir |
Elément 3 : cablage du breadboard (plaque de prototypage) :

Arduino, mouvement et luminosité : préparation branchements
Le code
J’ai utilisé ce code Arduino, mouvement, luminosité, LCD et speaker : le code ARDUINO.
Vérifier le fonctionnement

Arduino, mouvement et luminosité : mouvement détecté, luminosité mesurée

Arduino, mouvement et luminosité : en attente de mouvement
Ca fonctionne comme je veux. Et l’affichage défile lorsqu’il est en attente.
Remplacement du potentiomètre
J’ai mesuré avec un ohmmètre la valeur de la résistance du potentiomètre correspondant à un affichage correct sur l’écran LCD (contraste permettant la lecture). J’ai obtenu 1.2 KΩ. J’ai enlevé le potentiomètre et mis une résistance de 1.5 KΩ (pas de 1.2 sous la main), qui fonctionne très bien. J’ai mis une borne de la résistance sur GND, supprimé le fil rouge pour le VCC du potentiomètre et mis l’autre borne de la résistance sur le fil orange qui va à V0 de l’écran LCD.
Le code qui inclut le potentiomètre n’a pas besoin d’être changé puisque le potentiomètre n’était pas lu par l’Arduino.
Et maintenant ?
Il va falloir que je place ce prototype dans un boitier et que je réalise les soudures pour rendre les branchements définitifs. Mais je veux aussi pouvoir envoyer les données mesurées à un serveur externe. Ces projets feront l’objet d’articles à venir, dans cette série Arduino : détection de lumière et de mouvement.
pas mal
Bjr merci pour ce tuto j’ai un problème quand je veux simuler ton schéma sur un autre logiciel du nom de proteus pour tant j’ai suivi tes instructions à la lettre. stp le composant rond et bleue qu’on voit sur ton montage à plaque à essai là c’est quoi?
bonjour
je doit utiliser un capteur jour nuit pour capter la lumière d’une voiture sur un parking extérieur mais je ne vois comment pouvoir le détecter avec la lumière extérieur (soleil..) et je doit faire la même chose la nuit en inversant le fonctionnement mais je ne vois pas comment faire
pourriez vous m’aidez sil vous plait ?