- #1
Cet article intéressera peut-être les électroniciens amateurs ou utilisateurs d'Arduino.
Une utilisation assez fréquente de l'Arduino, c'est la réalisation d'un montage très simple permettant d'allumer ou d'éteindre un dispositif électrique en fonction de la luminosité. Les exemples sont nombreux : allumer des lampes extérieures le soir quand la nuit tombe, et les éteindre au lever du jour, ouvrir ou fermer une porte (exemple : poulailler) au jour ou à la nuit tombée.
On utilise pour ça une photorésistance, qui agit comme un potentiomètre "automatique" : quand la cellule reçoit peu ou pas de lumière, sa résistance interne devient très élevée, quand elle reçoit de la lumière, sa résistance devient très petite.
ça ressemble à ceci, et ne coûte que quelques dizaines de cents dans n'importe quel magasin d'électronique :
On réalise alors un montage ultra simple, comme celui-ci :
La photorésistance se comporte comme un potentiomètre, sa résistance varie avec la luminosité, et on lit avec le programme la valeur renvoyée sur l'entrée A0 la valeur renvoyée, un nombre entre 0 et 1023. Quand il fait "nuit", la valeur est toute petite, quand il fait "clair", la valeur devient grande. On lit cette valeur, et en fonction, avec quelques lignes de code, on décide par exemple d'activer ou non un relais pour allumer/éteindre un dispositif.
Le problème, bien connu et qui constitue un vrai problème, c'est que la variation de la résistance de la photorésistance n'est pas linéaire, mais logarithmique :
La courbe bleue est la variation de résistance en fonction du flux lumineux, la courbe orange pointillée est un logarithme parfait. On voit que la réponse de la photorésistance est bien logarithmique. La courbe verte toute droite est la courbe linéaire idéale que je souhaitais obtenir.
On voit qu'au départ, une toute petite variation de flux entraîne un énorme et rapide changement de valeur, alors que plus on avance, plus la courbe devient plate.
Tout le problème est là :
L'astuce retenue est simple (je simplifie) : on réalise un tableau de correspondance entre la valeur "brute" renvoyée par le capteur, et la valeur linaire souhaitée. Il faut un peu chipoter et faire des mesures, mais assez rapidement, on peut réaliser un tel tableau de correspondance : voici les valeurs pour mon diagramme :
Il faut un peu de prog en plus, mais rien de méchant.
Voici pour info ce que j'obtiens en vrai : en bleu la réponse brute du capteur, en orange la réponse linéarisée comme expliqué ci dessus.On va bien de 0 à 1023 dans les 2 cas, mais de façon bien plus fine et contrôlée avec la réponse orange
Ceci rend le réglage très facile, et surtout permet si on veut de faire par exemple de vraies mesures fines d'ensoleillement par exemple. Le même principe est utilisable avec un potentiomètre (la plupart sont aussi logarithmiques) pour le rendre linéaire.
J'espère que ça aura intéressé quelques lecteurs, ça m'a donné aussi l'occasion de taper sur mon clavier ce qui d'après le chirurgien est une très bonne kiné pour revalider la mobilité de mon index blessé
Une utilisation assez fréquente de l'Arduino, c'est la réalisation d'un montage très simple permettant d'allumer ou d'éteindre un dispositif électrique en fonction de la luminosité. Les exemples sont nombreux : allumer des lampes extérieures le soir quand la nuit tombe, et les éteindre au lever du jour, ouvrir ou fermer une porte (exemple : poulailler) au jour ou à la nuit tombée.
On utilise pour ça une photorésistance, qui agit comme un potentiomètre "automatique" : quand la cellule reçoit peu ou pas de lumière, sa résistance interne devient très élevée, quand elle reçoit de la lumière, sa résistance devient très petite.
ça ressemble à ceci, et ne coûte que quelques dizaines de cents dans n'importe quel magasin d'électronique :
On réalise alors un montage ultra simple, comme celui-ci :
La photorésistance se comporte comme un potentiomètre, sa résistance varie avec la luminosité, et on lit avec le programme la valeur renvoyée sur l'entrée A0 la valeur renvoyée, un nombre entre 0 et 1023. Quand il fait "nuit", la valeur est toute petite, quand il fait "clair", la valeur devient grande. On lit cette valeur, et en fonction, avec quelques lignes de code, on décide par exemple d'activer ou non un relais pour allumer/éteindre un dispositif.
Le problème, bien connu et qui constitue un vrai problème, c'est que la variation de la résistance de la photorésistance n'est pas linéaire, mais logarithmique :
La courbe bleue est la variation de résistance en fonction du flux lumineux, la courbe orange pointillée est un logarithme parfait. On voit que la réponse de la photorésistance est bien logarithmique. La courbe verte toute droite est la courbe linéaire idéale que je souhaitais obtenir.
On voit qu'au départ, une toute petite variation de flux entraîne un énorme et rapide changement de valeur, alors que plus on avance, plus la courbe devient plate.
Tout le problème est là :
- ça empêche de faire des mesures précises
- ça rend le réglage du dispositif (transition jour/nuit) extrêmement pénible
L'astuce retenue est simple (je simplifie) : on réalise un tableau de correspondance entre la valeur "brute" renvoyée par le capteur, et la valeur linaire souhaitée. Il faut un peu chipoter et faire des mesures, mais assez rapidement, on peut réaliser un tel tableau de correspondance : voici les valeurs pour mon diagramme :
Il faut un peu de prog en plus, mais rien de méchant.
Voici pour info ce que j'obtiens en vrai : en bleu la réponse brute du capteur, en orange la réponse linéarisée comme expliqué ci dessus.On va bien de 0 à 1023 dans les 2 cas, mais de façon bien plus fine et contrôlée avec la réponse orange
Ceci rend le réglage très facile, et surtout permet si on veut de faire par exemple de vraies mesures fines d'ensoleillement par exemple. Le même principe est utilisable avec un potentiomètre (la plupart sont aussi logarithmiques) pour le rendre linéaire.
J'espère que ça aura intéressé quelques lecteurs, ça m'a donné aussi l'occasion de taper sur mon clavier ce qui d'après le chirurgien est une très bonne kiné pour revalider la mobilité de mon index blessé