Bonjour. On va parler de capteurs. Ce qui est intéressant autour d'un système microcontrôleur, c'est tous les capteurs que l'on peut mettre autour et qui vont animer l'application. Alors, le choix est assez considérable, et on va passer en revue un certain nombre de capteurs, dans une optique non industrielle, qui est à la portée du débutant. Donc, on ne va pas faire beaucoup de programmation aujourd'hui, mais on va découvrir des tas de composants intéressants. Le premier, que vous connaissez bien, c'est le poussoir, le contact Reed, on l'a déjà mentionné, les microswitch, qu'on utilise comme fin de course, qui peuvent être simples, et c'est nettement préférable d'utiliser des fins de course des contacteurs qui ont une petite mécanique à l'intérieur qui font que le contact bascule brusquement quand le levier se déplace. Ceci réduit les rebonds de contact et permet d'avoir des basculements francs, ici, si ça appuie à moitié, vous avez deviné que cela peut faire des rebonds de contact de durée excessive. Vous trouvez des capteurs d'inclinaison, qui sont de bêtes billes à l'intérieur d'une capsule, et, évidemment, ça c'est des capteurs en tout-ou-rien, que l'on a appris à utiliser, qui génèrent des rebonds de contact. Vous avez d'autres capteurs qui ne travaillent pas avec un contact mécanique mais par proximité. Vous avez les capteurs de Hall, on va y revenir. Vous avez des capteurs inductifs, comme ils sont abondamment utilisés dans l'industrie, vous avez des jolis petits cylindres avec une bobine, et ça détecte des variations fluo, la présence d'une partie métallique. Vous avez aussi des capteurs optiques de proximité, comme celui-ci, et on va revenir aussi sur ces photodiodes. Et, vous connaissez bien, à travers vos tablettes, le potentiel énorme des "Touch sensors", des contacts que l'on a sur une surface, et là, la complexité est beaucoup trop grande, mais on peut acheter les tablettes avec un interface qui vous donne directement les coordonnées de l'endroit qui a été pressé. Alors, si je reviens sur les capteurs à effet Hall, donc là, la présence d'un champ magnétique va induire du courant et ce, avec un amplificateur, vous pouvez trouver des circuits Hall, ça ressemble à des boîtiers de transistors, qui ont une sortie analogique, on utilise le terme de "radiometric", c'est-à-dire que la valeur de sortie dépend, est liée la tension d'alimentation. Donc si vous avez 5 Volts sur la tension d'alimentation, et bien, à 2,5 Volts, vous aurez une valeur qui est numériquement la moitié, et si vous avez 3 Volts sur la tension d'alimentation, 1,5 Volts, vous aurez la même valeur. Donc c'est proportionnel à la tension extérieure, ce qui, évidemment, n'est pas tellement utilisable pour mesurer une pile, par exemple, 1,5 Volts, si la tension d'alimentation du capteur varie, et bien, vous aurez des valeurs différentes. Alors, on utilise beaucoup ces capteurs de Hall en tout-ou-rien, comme capteurs de proximité, avec un effet tout-ou-rien, et ce qui est un petit peu troublant, et peut conduire à des achats qui ne correspondent pas à la tension, c'est que vous avez quatre types de circuits qui ont une fonctionnalité un petit peu différente. Alors, voilà typiquement un champ magnétique positif, négatif, qui change. Si vous avez une valeur analogique, vous avez, en général, un niveau bas, qui vous est donné, qui vous permet de, d'obtenir des valeurs, à la fois pour des champs négatifs et positifs, mais aussi à un certain nombre, un certain choix de circuits. Le modèle le plus courant, que vous avez tout avantage à acheter, c'est le modèle unipolaire. Si le champ magnétique est supérieur à une certaine valeur, la sortie est active, et il faut tourner vraiment du bon côté, pour que la sortie soit active. C'est un général du collecteur ouvert, donc le signal sera plutôt inversé par rapport à ce que je viens de représenter. Mais, ce qui m'intéresse, c'est d'exprimer des fonctionnalités, et pas des caractéristiques de circuits. Le circuit bipolaire est beaucoup plus sensible, et il va rebasculer dans l'autre sens, seulement s'il y a changement de polarité. Alors, il est beaucoup plus fiable à cause de ça. Si vous avez, par exemple, un objet tournant, en alternant les pôles plus et moins, le basculement va être extrêmement précis et fiable, puisque c'est un changement d'aimant, de type d'aimant, qui va conduire, et ce n'est pas un changement de niveau, comme ici, où, tout à coup, le capteur de Hall pourrait être plus loin, et le réglage devenir un petit peu critique. Vous avez encore des circuits omnipolaires, qui vont vous donner des impulsions en sortie. Si le champ magnétique est positif ou négatif. Et, vous avez encore un modèle latch, qui ressemble beaucoup au modèle unipolaire, mais qui, en fait, va attendre que le niveau soit vraiment passé à une valeur très faible pour perdre l'information. Bon, voilà, dans la pratique, on utilise soit le modèle analogique, soit le modèle unipolaire. Du côté des photorésistances, et bien, vous les connaissez, c'est des circuits très faciles à mettre en oeuvre. Les phototransistors ont simplement des résistances un petit peu plus élevées, les photodiodes pin sont très rapides et un peu plus délicates à mettre en oeuvre. C'est surtout en télécommunication qu'on les utilise. Dès que vous avez un objet sensible à la lumière, et bien c'est intéressant de savoir quelle est la sensibilité de ses circuits aux différentes longueurs d'onde, la réponse spectrale, et, traditionnellement, tous ses circuits sont plutôt sensibles à l'infra-rouge, ce qui peut, avec des revêtements spéciaux, se filtrer, mais ça augmente considérablement le prix des éléments. Alors, ce qu'il faut bien réaliser avec ces capteurs de lumière, c'est qu'en plein soleil, vous avez 1000 Watt par mètre carré 10 puissance 5 Candela par mètre carré. L'éclairage artificiel, c'est mille fois moins. Le clair de lune, c'est encore mille fois moins. Notre œil est vraiment quelque chose d'exceptionnel qui couvre plus que 10 puissance 6, ici il couvre 10 puissance 8, avec l'aide de quelques petits trucs, comme cligner des yeux. Ce qui veut dire que notre œil ne nous aide pas du tout à comprendre ce que voit un capteur. Une LDR, par exemple, elle est utilisable dans un domaine de 10 puissance 2. Et 10 puissance 2, c'est un appartement plus ou moins éclairé, c'est la différence de lumière entre vers la fenêtre et au fond de la chambre, donc évidemment, les réglages avec des LDR sera toujours extrêmement pointu et les robots ne fonctionneront bien que dans le même environnement lumineux. Vous allez dans une exposition, c'est la catastrophe. Comment est-ce qu'on lit une LDR? Et bien, évidemment, avec le schéma traditionnel de diviseur de tension, et vous prenez l'instruction analogRead, et ce que je viens de dire maintenant, avec un éclairage normal, vous avez 2,5 Volts, vous avez choisi votre résistance pour que justement, vous soyez au milieu de la gamme. analogRead va vous donner la valeur 512 puisque c'est une valeur entre 0 et 1024. Vous êtes 10 fois plus lumineux. Calculez le diviseur de tension. Vous avez 4,54 Volts dans les 931, 10 fois moins lumineux, la valeur sera même un 3. Evidemment, ce qui est grave C'est, quand vous avez un éclairage normal et que vous le modifiez de 10%, par exemple, vous avez une très grande variation ici, tandis que quand vous êtes dix fois moins lumineux, la variation deviendra beaucoup, beaucoup plus faible, ce sera quelques unités, alors que là c'est quelques dizaines. Donc il faut savoir en tenir compte dans son algorithme. Il y a une autre façon de mesurer cette résistance interne d'une L D R ou d'un phototransistor, ce type de transistor, de phototransistor couplé à une photodiode infrarouge est beaucoup utilisé en robotique pour mesurer des distances. Son schéma est ici, une diode avec une résistance. On peut avoir avantage à piloter cette diode par le processeur pour réduire l'énergie dissipée. Le phototransistor n'est pas connecté à une résistance. Il est connecté à un condensateur, et le truc, maintenant, qui est facile à programmer, c'est de charger le condensateur en mettant le processeur en sortie et imposer l'état 1, et puis ensuite, on change du côté du processeur, on le commute en entrée, qu'est-ce qui va se passer? Le condensateur va se décharger à travers la résistance qui dépend de la lumière. Donc le temps de décharge va dépendre de la lumière. Et l'intérêt, ici, c'est qu'on mesure des quantités lumineuses selon des gammes beaucoup plus longues parce que vous n'avez qu'à attendre plus longtemps, si ça se décharge lentement, donc on peut avoir des durées de décharge importantes et ça sera ajuster maintenant le condensateur en fonction de la quantité de lumière. Alors, la procédure qui permet de lire le signal, j'ai pris les notations avec un AVR, je me suis connecté sur la pin 0 du port B. D D R B, je dois forcer cette pin à 1, je suis en sortie, je dois écrire un 1 sur cette pin, je dois attendre un petit peu pour être sûr que le condensateur a eu le temps de se charger, le processeur va fournir le courant. Pour avoir la charge complète, c'est peut-être des microsecondes, on a du temps donc on va tout de suite mettre une ou deux millisecondes et vérifier à l'oscilloscope que ce temps est suffisant. Alors maintenant je change la direction pour me mettre en entrée et tant que le signal est supérieur à 1, je compte à toute vitesse. Donc je me trouve dans cette boucle, où je compte. Je vérifie ici, le signal est toujours à 1, et dès que le signal passe à 0, je vais quitter cette boucle while et rendre au programme principal une valeur, qui a été déclarée, de type int ici, qui est l'intensité lumineuse. Donc le comptage va dépendre de la durée de cette boucle, mais c'est facile de faire ensuite une règle de trois pour ramener la valeur light à une valeur utilisable. Donc, vous voyez que ce n'est pas du tout difficile de lire ça, mais évidemment, cette procédure est bloquante, puisque pendant tout ce temps-là, qui peut devenir relativement important, si on veut mesurer quelque chose d'obscur, ça peut faire quelques dizaines de secondes, mais à calibrer selon chaque application. Alors vous avez un très joli circuit qui n'est pas si cher que ça, en fait, qui fait ce travail, il fait une conversion de lumière en fréquence, et selon chaque chaque rectangle correspond à une décade, donc une puissance de dix, vous voyez que ce circuit couvre six décades, c'est l'irradiance là, en microwatts par centimètre carré, et vous avez une fréquence qui varie entre une fraction de hertz dans l'obscurité à 1000 kilohertz, donc un mégahertz, si on atteignait le plein soleil, mais le circuit sature un petit peu avant. Donc on est dans cette zone de travail, usuellement, ce qui nous convient bien. Mesurer des fréquences entre 1 et 100 kilohertz, ça va occuper le processeur, mais comment est-ce qu'on va faire? J'aimerais faire une boucle de lecture entre 1 et 100 kilohertz, et je vais compter les impulsions pendant dix millisecondes. Alors si je n'ai qu'un kilohertz, je n'aurai que dix impulsions, ça me fera une erreur de 10%, mais évidemment qu'à 100 kilohertz j'aurai bien assez d'impulsions et bien assez de précision. Alors, pour compter ces dix millisecondes, ça vous avez vu comment il faut faire. On va utiliser l'instruction millis qui nous permet de connaître le temps, et puis, dire, je regarde un certain instant, et puis je mémorise ce temps dans finMillis parce que je vais rajouter les dix millisecondes, puis ce sera le temps où je devrai arrêter ma mesure. Ensuite je dois définir la variable light, et pour repérer les impulsions, il faut que je définisse deux variables, qui sont des copies de l'état d'entrée. J'ai décidé que c'était sur le port B, par exemple, mais de nouveau, là, je n'ai qu'à changer ça pour changer de processeur. Alors, dans ma boucle, je vais, ça c'est un petit programme de test, en fait, je décide que finMillis c'est le temps actuel plus dix millisecondes, et maintenant tant que le temps que je vais mesurer à chaque boucle est inférieur à finMillis, il faut que j'observe s'il y a une transition, donc on reprend l'état sur la pin, et puis ensuite on fait la différence entre l'état précédent, l'état actuel pour déterminer si c'est un flanc descendant, et chaque fois qu'on a un flanc descendant, on incrémente le compteur. Et puis maintenant, il faut, avant de sortir de cette petite boucle, remettre à jour l'état passé en lui donnant la valeur de l'état actuel, donc l'état actuel devient l'état passé qui sera considéré dans la prochaine boucle. Alors c'est effectivement un raisonnement qui vous a déjà été expliqué, mais qui n'est pas si facile à bien comprendre et maîtriser. Alors, un autre type de capteur de distance, c'est le PSD. Les capteurs de Sharp sont bien connus et souvent très mal expliqués. Le principe du PSD est très simple. Vous avez un circuit qui est sensible à l'endroit où la lumière va l'atteindre. Donc vous allez récupérer de ce circuit une tension qui dépend où on a éclairé. Donc ici, vous aurez par exemple la tension de deux volts, et puis là vous aurez quatre volts, et c'est un petit mystère de la technologie de bien comprendre comment ça se passe. Alors maintenant avec un petit peu d'optique, vous envoyez un petit faisceau laser, une diode infrarouge bien collimatée. Elle va éclairer un obstacle proche qui va diffuser la lumière dans tous les sens et venir éclairer ce point. Si l'obstacle est plus loin, vous avez compris que le spot se déplace, la tension est différente, vous obtenez une tension qui n'est pas du tout linéaire par rapport à la distance mais vous n'avez qu'à calibrer, et évidemment avec ce système optique Les distances sont relativement étroites, 10 à 80 centimètres, les capteurs vous donnent une sortie analogique, et attention, certains de ces capteurs vous donnent une sortie en tout ou rien et, soit 5 centimètres soit 10 centimètres, ça commute et c'est assez facile de les confondre avec ceux-là qui vous donnent une valeur de distance et pas simplement un seuil tout ou rien qu'on n'avait pas avec les capteurs précédents qui étaient adéquats pour des distances beaucoup plus courtes. Alors, vous n'êtes pas content des distances jusqu'à 80 centimètres, vous avez des systèmes qui vont jusqu'à 5 mètres, 20 millimètres à 5 mètres, qui balaient sur toute la largeur visible mais qui coûtent un petit peu cher. Alors, là ça travaille avec le temps de vol de la lumière, le faisceau laser que vous émettez va rebondir sur l'obstacle et revenir, c'est des temps de la nanoseconde, d'où le prix de l'électronique. Alors si vous faites ça avec des sons, et bien vous avez des capteurs ultrasoniques, vous émettez le son avec un capteur, vous le recevez sur l'autre parce que l'émission perturbe passablement, vous pouvez faire avec un seul capteur, et puis là vous mesurez de 2 centimètres à 5 mètres, mais le prix est beaucoup plus raisonnable, donc ce sont des capteurs qui s'utilisent beaucoup en robotique. Alors le principe, vous envoyez une impulsion pour que cette petite électronique, je ne suis même pas sûr s'il y a un processeur là-dessus, envoie un train de huit impulsions à 40 kilohertz, c'est ce qui se propage bien avec ces capteurs piézoélectriques, et l'électronique, une bascule, vous indique que l'on attend l'écho, ce qui n'est pas dessiné ici, c'est le signal reçu par l'écouteur où, tout à coup, vous allez avoir ces 40 impulsions qui reviennent complètement déformées, atténuées, il faut les amplifier et faire basculer un flip-flop pour remettre à zéro cette bascule. Et puis, évidemment, si vous êtes trop loin, vous risquez de ne pas avoir ce signal, et là ce sera nécessaire de prévoir quelque chose, puisque, comment est-ce qu'on va gérer ce signal? Il faut détecter la fin avec, précisément, donc là, on pourrait se débrouiller avec des timers, mais si vous avez un Arduino, il y a une fonction Arduino qui vous facilite le travail, qui s'appelle pulseIn, on veut mesurer une impulsion en entrée, on donne le numéro de la pin, on dit si cette impulsion est à 1, comme ici, et puis il y a un deuxième appel possible avec un paramètre de plus où vous pouvez dire, je ne vais pas attendre éternellement si l'impulsion ne vient pas, c'est facile de calculer du son qui rebondit sur 5 mètres, vous connaissez la vitesse du son, donc vous pouvez dire, si je n'ai pas de réponse un dixième de seconde, et bien je vais quitter cette procédure qui est bloquante. Ça c'est le défaut, un peu, de cette gestion simplifiée, mais c'est pas évident de faire une gestion plus performante des capteurs ultrasoniques. Donc ça, c'est un joli petit système à mettre sur un robot et à tester. Alors vous avez des capteurs qui, en fait, sont plus faciles à mettre en oeuvre à certains points de vue, puisqu'un accéléromètre, c'est quelque chose d'extrêmement compliqué, avec des petites masses suspendues à l'intérieur, mais le fabricant vous fournit trois sorties analogiques ou bien des sorties S P I I carré C, donc là il y a plusieurs fabricants qui vous proposent ces circuits accéléromètre dans une gamme tout à fait utilisable, c'est ce que vous avez dans vos tablettes. La boussole vous permet d'avoir le nord, d'avoir un repère absolu, avec des magnétorésistances également intégrées dans un circuit intégré. Tous ces circuits récents, capteurs, utilisent des alimentations trois volts et puis vous les trouvez de plus en plus avec des interfaces I 2 C qu'on a déjà vues. Un peu plus simple, c'est les capteurs d'environnement. Alors, capteurs d'environnement, vous voulez mesurer une température, vous avez un petit boîtier transistor qui vous donne une valeur analogique. Vous voulez mesurer une humidité, vous avez ce genre de petit capteur, chaque fois il faut au moins les trois fils pour avoir l'alimentation. Là on a un truc beaucoup plus compliqué à planter dans le sol, qui évidemment est à une échelle différente. Vous voulez mesurer la vitesse et la direction du vent, achetez ce genre de construction, qui est fiable. C'est assez difficile à construire. Vous avez ici un encodeur de rotation, vous avez ici un autre encodeur, mais avec un point de repère pour savoir où se trouve exactement le nord. Vous voulez mesurer la pluie, là aussi, pour quelques dizaines de dollars, vous trouvez ce genre de gadget. Donc l'intérêt, c'est de couper le fil et puis de comprendre quel est le protocole utilisé entre deux deux appareils. Donc si vous voulez construire votre station météo, il vous reste naturellement des problèmes d'affichage, il vous reste des problèmes de stockage de données, on a vu l'utilisation des iii, par exemple. Vous avez des problèmes d'économiser de l'énergie, ça sera un système autonome, et même si c'est du solaire, il faut gérer cette énergie. Vous avez assez facilement des problèmes de communication pour transmettre l'information en temps réel en plus de la stocker, et vous avez des problèmes d'environnement, la foudre qui peut perturber l'exécution du système, ça ne le détruira pas, parce que ce sera naturellement dans un boîte métallique qui protègera, mais il y a des phénomènes assez bizarres qui se produisent quand il y a de la foudre. Si maintenant c'est la domotique qui vous intéresse, vous allez surtout gérer des poussoirs, des contacts, vous aurez des problèmes de câblage, et puis vous aurez aussi des problèmes de gestion d'énergie, et naturellement d'affichage et de stockage éventuellement, des données. Donc on vient de voir qu'il existe une très grande diversité de capteurs, qui sont le plus souvent très simples à gérer parce qu'ils ont des sorties analogiques, mais si c'est I carré C ou S P I, on utilise des librairies, et avec ces capteurs on peut construire un très grand nombre d'applications et répondre ainsi à tous les besoins que l'on peut avoir pour l'industrie, pour les loisirs, et pour d'autres applications que je vous laisse imaginer.