Un détecteur de mouvement et de luminosité Arduino, avec affichage LCD

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 , 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 :

  1. placer un arduino et un détecteur de mouvement
  2. ajouter un écran LCD ;
  3. Ajouter une LED rouge ;
  4. Ajouter une cellule photoélectrique  ;
  5. Ajouter un haut-parleur ;
  6. 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 :

Dans le code, on notera simplement que :

  1. le détecteur de lumière répond par une valeur analogique de 0 à 1023 ;
  2. le détecteur de présence est soit HIGH, soit LOW.
  3. 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 .
  4. 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)
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
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
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é : mouvement détecté, luminosité mesurée
Arduino, mouvement et luminosité : en attente de mouvement
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 .

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *