L’objectif de ce premier billet est de :
– présenter ce qu’on souhaite faire in fine
– commencer la partie technique très doucement, avec présentation de la photorésistance et comment l’exploiter
Un objectif
L’idée de départ est venue d’un vieux frigo, qui se ferme avec réticence.
Je souhaite savoir quand le frigo est mal fermé, pour pouvoir faire des choses sensées en conséquence. Par exemple, me notifier d’une manière ou d’une autre, mettre à jour un statut dans un dashboard accessible depuis le net, ou soyons fou un moteur qui prendrait le soin de fermer la porte à ma place.
Le Comment
Quelques minutes de recherche sur le web ont suffit à orienter sur la plateforme Arduino.
Il est très simple d’aborder le monde Arduino. Déjà, l’environnement de développement logiciel est ultra simplifié (on verra plus tard) et surtout entièrement centralisé.
Physiquement, l’Arduino est une petite carte tout en un, alimenté par câble USB standard, on branche les capteurs et les trucs qui bougent / font de la lumière sur les trous déjà présent et c’est fini. Du vrai plug&play! Pas besoin de programmateur hardware, pas besoin de régulateurs de tension et autre soudure.
Un lego électronique, en (beaucoup!) moins cher.
On adore.
Mais encore?
Suite du programme: il faut ensuite trouver les bons éléments à brancher dessus, faire un petit programme et s’enorgueillir du résultat.
- que brancher dessus : capteur
- comment faire marcher tout ça ensemble : le programme
Que brancher dessus?
Dans le cadre du premier projet, il s’agit de détecter une porte de frigo ouverte. Par chance, mon frigo moderne dispose d’une lampe, qui -oh miracle technique- s’allume quand la porte est ouverte.
Il aurait été dommage de ne pas en profiter.
Ainsi, une photorésistance va faire l’affaire. Ce petit composant ressemble à ceci:
Sa résistance varie en fonction de l’intensité de la lumière qui lui parvient.
1.7 Kohms sous lumième ambiante,2 MOhms dans la quasi obscurité, un peu moins de 190 ohms à 2 cm sous une lampe philips donnée à 741 lumen. La mesure est faite avec un multimètre lowcost (le gentil facteur devrait prochainement apporter un instrument un peu plus précis, et original, surprise réservée aux fidèles lecteurs).
Histoire de ne pas répéter « photorésistance » moults fois dans ce blog, parce que je n’ai pas envie de répéter ce mot, et que j’ai la prérogative de mettre ce que je veux dans ce blog, je l’appellerai Brigitte.
Pour brancher la chose à l’Arduino, une pin de Brigitte sera à la masse (voltage 0V de référence), et on va souhaiter mesurer le potentiel sur l’autre pin.
On va ainsi mesurer la différence de potentiel entre la 2ème pin et la 1ère, ce qui est exactement la même chose qu’une tension.
On remarque que la seule chose que l’on peut mesurer avec un Arduino sur une de ses pins, c’est une tension. Et c’est tout.
Heureusement pour nous, il existe une loi facile à retenir en électronique (peut être la seule à connaitre par cœur): U = R * I, aussi connue comme la loi d’Ohm (oui, le même ohm qui mesure les résistances et on s’en doute, ce n’est pas une coïncidence).
U, c’est la tension entre 2 points. R c’est la résistance entre ces deux points. I, c’est la quantité de courant qui passe entre ces deux points. Pour les puristes, la réalité est plus complexe, car il faut aussi prendre en compte des comportements capacitifs, inductifs et autres joyeusetés non linéaires mais oublions ceci pour l’instant.
Nous disions, U = R * I. Donc la tension mesurée aux bornes de Brigitte est proportionnelle à la résistance de celle ci. Bingo, on va pouvoir mesurer ça avec l’Arduino.
J’en entends certains s’interroger à pensée haute.
Très bien, nous savons que l’on peut mesurer une tension au niveau d’une pin de l’Arduino et qu’il existe une tension aux bornes de Brigitte proportionnelle à la quantité de lumière qu’on souhaite mesurer, mais comment relier tout ça?
Il nous manque une dernière notion essentielle en électronique, en fait dérivée de la loi d’Ohm. Regardons un peu l’image suivante:
La loi d’ohm donne : U = (R1+R2)*I, car c’est la même intensité qui passe dans un circuit donné (les choses se corsent quand le chemin se sépare en deux, mais on n’aura pas à se poser ce genre de questions avant très longtemps). Oh lecteur, si tu insistes pour avoir le pourquoi du comment de cette affirmation, alors Mario entrera en jeu (sans mauvais jeu de mot, bien entendu).
Bref, U = (R1+R2)*I. Nous avons aussi U=U1+U2 (c’est le même Mario que nous appellerons à la rescousse pour justifier ceci, si tu l’exiges). Quelques savantes opérations mathématiques plus tard (si tu ne vois pas lesquelles, alors tu ne lis probablement pas ces lignes), nous obtenons U2=(R2/(R1+R2))*U ou son sombre maléfique, U=(R1/(R1+R2))*U (on voit bien la symétrie, non?).
Lecteur, si tu me permets de continuer à te tutoyer, tu es invité à imaginer que le point en bas de l’illustration est à la masse, qui par définition/construction est le point dans un circuit au potentiel de référence « 0 V ».
Voilà, maintenant tu peux imaginer que le point en haut est fixé à une tension fixe, mettons 5 V. Elle même ne se comprend que par rapport à l’existence du potentiel 0 V, qui lui même, on le comprend aisément, est relié à la source d’énergie, l’alimentation du circuit, étiqueté soit masse (bien trouvé comme nom), soit dans les cas des piles familières (AA, AAA et cie) est appelé « – » par opposition au « + » qui est à 1.5 V, 9 V, 3.6 V selon le type de pile).
Ainsi, si mettons R2 est la résistance de Brigitte, qui rappelons le est notre inconnue, il ne reste qu’une inconnue dans l’équation, R1.
Fixons arbitrairement R1 à 20 Kohms, par exemple.
Il n’y a plus d’inconnue: si on mesure U2, on mesure R2.
Ca tombe bien, c’était exactement notre but.
Un dernier point maintenant.
Tentons de glorifier un peu son rôle, à cette fameuse résistance R1, qui semble jouer un rôle fort ingrat, celui d’être l’intermédiaire à la relation entre Brigitte et Arduino.
Elle peut être explicitement ajoutée par le créateur pas forcément omniscient mais clairement omnipotent du circuit. Elle peut aussi être cachée par les tripes de notre Arduino. En effet, quand on programme l’Arduino, la première chose (ou quasi) que l’on fait, c’est dire pour chacune de ses pins utilisée si on souhaite le configurer en entrée (INPUT pour les francophones coincés) ou en sortie (OUTPUT). Dans notre cas, on aura compris que l’on souhaite configurer la pin de l’Arduino reliée à Brigitte en INPUT, et même à vrai dire en INPUT_PULLUP.
Lorsqu’une pin est configurée en INPUT_PULLUP, tout se passe comme si une résistance était placée entre la pin physique en question et la ligne d’alimentation 5V.
En INPUT_PULLDOWN, tout se passe comme si une résistance était placée entre la pin physique en question et la masse.
D’ailleurs, dans un article à venir, j’aimerais mesurer cette impédance interne pour valider ces propos.
Dans les deux cas, il s’agit de limiter le courant qui passe par cette pin, mais aussi de pouvoir faire un pont diviseur de tension « implicite ».
Si on peut ainsi théoriquement brancher Brigitte directement sur l’Arduino, on va quand même intercaler une résistance entre les deux. Comme on ne sait pas toujours ce qui se passe dans ces cas là (un court circuit est si vite arrivé), on s’assure qu’il y a un minimum de résistance entre les deux loustics.
Mettons 10 Kohms, parce que c’est plus que peu, et moins que beaucoup.
Maintenant, place à une petite galerie d’images pour confronter attentes théoriques et expérimentations.
Incroyable, on retrouve bien les 0.4 mA calculés 🙂
Pour référence, voici le code arduino qui fait tourner notre exemple:
int pinLecture = A0;
void setup() { Serial.begin(9600); pinMode(pinLecture, INPUT); } void loop() { int valeurLue = analogRead(pinLecture); Serial.println("Valeur lue: "); Serial.println(valeurLue); delay(1000); }
Conclusion
Si vous trouvez que cet article n’est pas très homogène, c’est normal. C’est mon premier article, que je trouve beaucoup trop long, trop ambitieux à tout vouloir décrire.
Se voulant exhaustif, son écriture s’est étalée sur une trop longue période.
Je n’oublie pas l’objectif initial de l’article, à savoir faire une alarme de frigo. Cependant, j’aimerais poursuivre ce blog avec des articles plus courts, et pas forcément dans une continuité.
Une bonne dizaine de thèmes trottent actuellement dans ma tête pour faire de prochains articles:
– tentative de réparation de matériels divers
– essayer de « vérifier » des principes élémentaires en électronique (mesurer charge/décharge d’un condensateur, mesure d’impédances internes)
– reverse engineering dans un premier temps simpliste de choses et d’autres (contrôleur, bus, protocoles)
– des mesures concrètes des transmetteurs RF low cost rRFL01 (j’en ai reçu une bonne dizaines dernièrement, de types différents), mesures de consommation, de portée
– faire de l’apnée en consommation du microcontrôleur au coeur de l’Arduino (dans un premier temps avec des astuces software, dans un deuxième temps en faisant subir une cure de régime à l’Arduino)
– finir le projet d’alarme de frigo, et en initier d’autres!
– et plein d’autres choses
N’hésitez pas à laisser vos messages/commentaires, je débute dans le petit monde des blogs et je prends tout ce qui pourrait améliorer le bonheur de toi, lecteur.
Cher Fabidouille
Il me semble que brancher Brigitte directement sur un pin de l’Arduino ne permet pas de mesurer sa résistance puisqu’on ne connaît ni U ni I.. Ne faudrait-il pas réaliser un diviseur de tension avec Brigitte et la résistance, ce qui éviterait par la même occasion d’utiliser le pin d’entrée comme source de courant (même si la résistance de protection évite la catastrophe, je doute que ça soit conçu pour) ?
Cher Cyril,
déjà merci pour ta remarque oh combien légitime.
Elle m’a permis de préciser un point absent au moment de ta lecture, l’article étant alors en état d’ébauche alpha.
C’est donc grâce l’existence d’une impédance interne sur la pin d’entrée (de l’ordre de la dizaine de kohms) que l’on pourrait « théoriquement » se passer d’une vraie résistance. Toutefois, il est d’usage d’en utiliser une, car en électronique plus qu’ailleurs, on préfère croire ce que l’on voit.
L’article a été complété à la lumière de ton commentaire, bonne continuation
Merci pour toutes ces infos, voici une bonne lecture. J’ai appris différentes choses en vous lisant, merci à vous. Bonne journée à tout le monde ! Fabienne Huillet neonmag.fr
Merci beaucoup pour le commentaire!
Après des vacances de plusieurs mois, j´aimerais trouver le temps de m´y remettre, et je le trouverai 🙂
Voilà donc un bon article, bien passionnant. J’ai beaucoup aimé et n’hésiterai pas à le recommander, c’est pas mal du tout ! Elsa Mondriet / june.fr
Merci Elsa, de nombreuses idées se bousculent à l´entrée, ne manque plus que le temps de s´y remettre.
Ce temps est bientôt venu!
Article fort sympathique, une lecture agréable. Ce blog est vraiment pas mal, et les sujets présents plutôt bons dans l’ensemble, bravo !