vendredi 27 janvier 2017

Fabrication d'un petit traqueur solaire


Je vous propose aujourd'hui la construction d'un petit traqueur solaire, c'est à dire un dispositif qui tourne sur lui-même afin de toujours faire face à la direction d'où provient la lumière.

Le montage est constitué de composants classiques (aucun microcontrôleur): 
  • Un moteur à courant continu.  Il m'a semblé préférable d'utiliser un modèle dont la vitesse de rotation est réduite par un système d'engrenages, du genre qu'on utilise pour entraîner les roues d'une base robotique.
  • Une paire de photorésistances
  • Deux amplificateurs opérationnels sur le même circuit intégré.  J'ai utilisé un modèle CA1458 (identique à LM1458).
  • Deux transistors NPN et deux transistors PNP.  J'ai choisi les modèles 2N4401 et 2N4403, qui m'avaient donné de bons résultats dans une expérience similaire.
  • Quelques diodes, résistances et potentiomètres.

Circuit et principe de fonctionnement

Il s'agit d'un circuit classique, j'ai utilisé la version publié sur le site de CdS Electronics, qui vendent un kit pour le réaliser, si par hasard vous ne disposez pas du matériel nécessaire.  J'ai indiqué sur ce schéma une tension d'alimentation de 12 V, dans les faits j'ai utilisé une pile de 9 V car c'était plus pratique (pour éviter les fils qui s'emmêlent, il est pratique que tout le circuit, incluant l'alimentation, soit superposé au moteur de façon à ce que tout tourne ensemble).


Voyons voir comment ça fonctionne...  Du côté gauche du schéma, les deux photorésistances sont branchées en série.  Si les deux photorésistances sont éclairées exactement de la même façon, la tension au point A sera de 6 V.  Mais si la photorésistance 1 reçoit plus de lumière que la photorésistance 2, la tension au point A deviendra supérieure à 6 V.  Si la photorésistance 2 reçoit plus de lumière que la photorésistance 1, c'est le contraire:  la tension au point A devient inférieure à 6 V.  Notez que le point A est branché à la fois à l'entrée non-inverseuse de l'amplificateur A, et à l'entrée inverseuse de l'amplificateur B.

Jetons maintenant un oeil un peu plus à droite:  4 résistances sont également branchées en série:  un potentiomètre de 100 kΩ, une résistance fixe de 15 kΩ, un potentiomètre de 20 kΩ et une résistance fixe de 47 kΩ.

Le potentiomètre de 100 kΩ sert à assurer la symétrie de votre circuit:  vous ajustez sa valeur pour que le circuit demeure immobile lorsque la lumière se trouve droit devant lui.  Le potentiomètre de 20 kΩ sert à ajuster la sensibilité du circuit:  plus sa valeur est faible, plus le circuit sera "nerveux" et impatient de changer d'orientation.  Plus la résistance de ce potentiomètre est grande, plus votre circuit exigera une grande différence de luminosité avant de se donner la peine de tourner.

Une fois les deux potentiomètres réglés à leur valeur optimale, la tension au point B et la tension au point C conserveront une valeur constante, qui ne dépendra pas de l'éclairement.   De plus, si vous observez ce groupe de 4 résistances, vous devriez convenir que la tension du point B est toujours plus élevée que la tension du point C.

Nous disposons maintenant de suffisamment d'informations pour analyser le comportement des deux amplificateurs opérationnels.  L'absence de rétroaction nous permet de conclure qu'ils agissent tous les deux en comparateurs de tension (j'ai déjà écrit un article sur les comparateurs de tension, si vous voulez en savoir un peu plus sur le sujet).

La sortie de l'amplificateur A sera d'une dizaine de volts si la tension du point A devient plus élevée que celle du point B, et nulle si c'est le contraire.

La sortie de l'amplificateur B sera d'une dizaine de volts si la tension du point A devient moins élevée que celle du point C, et nulle si c'est le contraire.

Il ne reste plus qu'à parler de la partie droite du circuit, qui est constituée du moteur, de 4 transistors et de 4 diodes:  il s'agit d'un pont en H, un circuit spécialement conçu pour permettre à un moteur électrique de tourner dans deux directions différentes.  Je n'analyserai pas en détail cette partie du circuit, je vous réfère plutôt à cet article sur le pont en H.

Nous pouvons constater que 3 situations sont possibles:
  • Si l'éclairement est similaire pour les deux photorésistances, la tension du point A aura une valeur plus petite que la tension du point B, et plus grande que la tension du point C.  La sortie de l'amplificateur A (point D) sera nulle, et la sortie de l'amplificateur B (point E) sera nulle aussi.  Par conséquent, le moteur ne tourne pas.
  • Si la photorésistance 1 est plus éclairée que la photorésistance 2, la tension du point A devient plus grande que la tension du point B.  La sortie de l'amplificateur A (point D) devient environ 10 V, alors que la sortie de l'amplificateur B (point E) est nulle.  Le moteur tourne dans une direction.
  • Si la photorésistance 2 est plus éclairée que la photorésistance 1, la tension du point A devient plus petite que la tension du point C.  La sortie de l'amplificateur A (point D) est nulle, alors que la sortie de l'amplificateur B (point E) prend une valeur d'environ 10 V.  Le moteur tourne dans l'autre sens.



Voici une vidéo du traqueur solaire pendant qu'on déplace une lampe autour de lui:


  

Yves Pelletier   (TwitterFacebook)



mardi 24 janvier 2017

Tracer la courbe caractéristique d'une diode grâce à Arduino

Je vous explique aujourd'hui comment j'ai utilisé une carte Arduino Uno pour tracer la courbe caractéristique du courant en fonction de la tension (I = f(U)) pour plusieurs types de diodes en polarisation directe.

Tout d'abord, un tout petit peu de théorie

Comme vous le savez probablement, une diode est un composant qui laisse circuler le courant dans une direction, mais le bloque dans l'autre direction.

Mais en polarisation directe, une tension minimale est nécessaire pour que la diode conduise le courant:  c'est la tension de seuil.  Aussi longtemps que la tension de la diode est inférieure à la tension de seuil, le courant demeure négligeable.

La courbe caractéristique d'une diode montre comment se comporte le courant traversant la diode pour différentes tensions.

La méthode traditionnelle pour obtenir cette courbe consisterait à construire un circuit constitué d'une source de tension variable, d'une diode et d'une résistance.  Au moyen d'un multimètre, on mesure le courant dans le circuit et la tension aux bornes de la diode à mesure qu'on augmente la tension de la source.

J'ai choisi d'automatiser le processus en utilisant une carte Arduino qui sert à la fois de source de tension variable et d'appareil de mesure.

Le circuit utilisé

La partie la plus compliquée consiste à produire au moyen de l'Arduino une tension continue pouvant prendre différentes valeurs entre 0 et 5 V.  Heureusement, nous avions déjà traité ce sujet par le passé, et deux fois plutôt qu'une:  sortie PWM associée à un filtre passe-bas et un réseau R2R.

J'ai opté pour une sortie PWM associée à un filtre passe-bas, puisque ça nécessite moins de composants qu'un réseau R2R de 16 résistances.

La sortie 11 de l'Arduino est donc reliée à un filtre passe-bas constitué d'une résistance de 15 kΩ et d'un condensateur de 1 µF.  Sans trop de surprise, un amplificateur opérationnel branché en suiveur de tension s'est révélé nécessaire pour isoler la source de tension du reste du circuit (j'ai opté pour un lm358 alimenté par une source de tension externe de 10 V).


La sortie 11 de l'Arduino peut ainsi fournir une tension continue pouvant prendre n'importe quelle valeur entre 0 et 5 V.

Cette tension servait ensuite à alimenter un circuit constitué d'une diode (dont on cherchait à mesurer les caractéristiques) en série avec une résistance (dont la valeur était choisie de façon à ne pas trop s'approcher du courant maximal de 40 mA pouvant être supporté par une entrée/sortie de l'Arduino).

Il ne reste plus qu'à mesurer la tension à deux endroits dans le circuit:  à la sortie de l'amplificateur opérationnel et entre la résistance et la diode.

Si vous préférez la version Fritzing:



Le sketch

Le sketch est plutôt simple:  il produit une tension modulée en largeur d'impulsion (PWM) à la sortie numéro 11, avec un rapport cyclique de plus en plus élevé à chaque passage dans la boucle principale. Grâce à notre filtre, cette tension deviendra une tension continue qui augmente progressivement à chaque passage dans la boucle principale.

La tension aux bornes de la diode et la tension aux bornes de la résistance sont ensuite affichées dans le moniteur série (pour la résistance, on soustrait les deux tensions mesurées de part et d'autre).

Ces données demeurent sous forme brute (c'est à dire une valeur entière située entre 0 et 1023). J'avais d'abord fait un sketch qui faisait la conversion en volts et en ampères, mais les valeurs comportant un point décimal n'étaient pas compatibles avec ma version française d'Excel.


La saisie de données commence automatiquement, et s'interrompt lorsque la tension fournie par la pin 11 est de 5 V.  Il s'agit d'appuyer sur le bouton "reset" ou d'afficher la fenêtre du moniteur série pour reprendre une nouvelle série de mesures.


Traitement des données dans Excel

Puisque les deux tensions sont séparées par une tabulation, il s'agit de copier le contenu entier du moniteur série et de le coller dans Excel pour qu'elles se répartissent automatiquement sur deux colonnes.

Il ne reste plus qu'à convertir en volts la tension de la diode, et à appliquer la loi d'Ohm à la résistance pour connaître le courant en milliampères.

Tension de la diode en volts = (valeur de la colonne 1) * 5 / 1024

Courant à travers la diode = (valeur de la colonne 2) * 5 *  1000/ (1024 * 270 Ω)

Les résultats

D'abord, la courbe d'une diode au silicium 1N4003.  Un faible courant devient perceptible à partir d'une tension d'environ 0,5 V,  et la tension plafonne ensuite aux abords de 0,7 V peu importe la valeur du courant.   La tension de seuil est d'environ 0,7 V, tel que prévu



Maintenant, une diode Schottky 1N5817:  la tension de seuil est beaucoup plus faible que pour la diode au silicium:  environ 0,3 V.


Essayons maintenant quelques diodes électroluminescentes.  Plus la longueur d'onde émise est faible, plus la tension de seuil est grande.

Donc une LED infrarouge a une tension de seuil bien inférieure à 1,5 V:



... alors que la tension de seuil d'une LED rouge se situe entre 1,5 V et 2,0 V.

Pour une LED jaune, ça tourne autour de 2,0 V:


On dépasse un peu 2 V pour une LED verte:



Et puisque chaque photon de couleur bleue doit transporter beaucoup d'énergie, la tension de seuil dépasse nettement 3 V pour une LED bleue.


Terminons par un résultat qui m'a surpris:  une diode au germanium 1N34A commence à conduire à une tension beaucoup plus faible qu'une diode au silicium, mais ensuite la courbe est beaucoup moins abrupte que pour tous les autres types de diode.  Le graphique n'est pas très éloigné de la droite qu'on obtiendrait pour une résistance!:

Yves Pelletier   (TwitterFacebook)

vendredi 20 janvier 2017

Un autre plagiaire!?!?!?

Il y a quelques jours, j'ai attiré votre attention sur un blogueur sans scrupules qui avait publié deux de mes articles en remplaçant mon nom par le sien.

Je viens d'en trouver un autre: sur le blog intitulé "Amri Mohamed Electronique et Informatique", on retrouve pas moins de 6 articles dont je suis l'auteur.  Bien sûr, mon nom n'y apparaît nulle part, puisqu'il a été remplacé par selui d'Amri Mohamed.

En voici quelques exemples:  cet article expliquant comment contrôler un moteur pas à pas avec un Raspberry Pi, publié le 4 septembre 2015:



Et mon propre article sur le même sujet, publié le 10 décembre 2014:





Un article expliquant comment établir une communication USB entre un Raspberry Pi et un Arduino, publié le 21 juillet 2015:


...et l'article original, publié ici même le 5 mai 2014:



Vous voulez des conseils pour écrire sur une carte SD avec un Arduino?  Amri Mohamed vous l'explique dans "son" article daté du 4 juillet 2015: 



...qui est la copie conforme de mon article du 29 juin 2012:


Qui est ce sympathique Amri Mohamed?  D'après sa page LinkedIn, il serait ingénieur maintenance chez Bio Instruments, diplômé de l'École nationale supérieure d'ingénieur de Tunis.

Un lien vers son blog (dont près de 10% des articles sont de moi), y est fièrement exhibé.




Donc, si je comprends bien, un ingénieur en électronique a plagié le travail d'un amateur dans le but d'impressionner des employeurs potentiels?

Ça fait un peu peur, vous ne trouvez pas?

Mise à jour (24 janvier 2017):  Les 6 articles plagiés ont été retirés par Blogger. Le blog d'Amri Mohamed existe toujours, toutefois.


Yves Pelletier   (TwitterFacebook)

jeudi 19 janvier 2017

Blockly@rduino: programmez votre Arduino par glisser-déposer

Vous pensez que l'Arduino est facile à programmer?  Je suis bien d'accord avec vous, mais il faut quand même admettre qu'il est nécessaire d'apprendre la syntaxe (en anglais), ne pas oublier les points virgules à la fin des lignes, éviter les coquilles typographiques (au fait, c'est digitalread, DigitalRead, Digitalread, ou digitalRead?), etc.

Conçu par Sébastien Canet pour être utilisé en salle de classe, Blockly@rduino a pour objectif de faciliter la programmation d'une carte Arduino.  Pour construire votre programme, il s'agit de d'agencer, au moyen de la souris, des blocs de codes déjà prêts, rédigés en français, à l'intérieur même de votre fureteur web (Chrome ou Firefox).

Pour accéder à Blockly@rduino sur le web, vous pouvez aller sur le site technologiescollege ou encore sur ce miroir québécois.  Vous n'avez pas besoin de vous inscrire, et il n'y a rien à installer sur votre ordinateur.

Vous devriez voir s'afficher cette page:


Vous pouvez faire disparaître le dialogue de bienvenue (bouton "J'ai compris, merci").

Pour sélectionner votre modèle de carte Arduino, vous cliquez sur le petit bouton jaune, en bas à gauche, qui présente la silhouette d'une roue d'engrenage.  Le même dialogue vous permet également de sélectionner la langue d'affichage.


De retour sur la page principale, cliquez sur le bouton jaune, en haut à gauche, intitulé "configurer les blocs".  Dans le dialogue qui apparaît, sélectionnez "TOUT".


À moins d'avoir des besoins très spécifiques, vous pouvez vous contenter des catégories qui sont déjà cochées par défaut.



Vous devriez maintenant voir s'afficher une liste de catégories:  logique, boucles, maths, variables, procédures et fonctions, arduino.


Comme premier exemple, nous allons tenter  le traditionnel clignotement de la LED intégrée à la carte.

Je clique sur la catégorie Arduino:



Parmi les choix proposés, je choisi le bloc "initialisation (setup)/répéter indéfiniment (loop)", qui constitue la base habituelle de tout programme Arduino.   Je vais glisser ce bloc dans l'espace de travail (la moitié droite de la fenêtre).

Je veux d'abord que la LED soit allumée.  Je clique sur la catégorie "sorties":


...dans laquelle je choisis le bloc "mettre la DEL sur la carte à l'état logique 1 (état haut)".  Je fais glisser ce bloc à l'intérieur de ma boucle:

J'aimerais que la LED demeure allumée pendant 1 seconde.  Je vais donc dans la catégorie "temps et durées":



Et cette fois je choisis le bloc "faire une temporisation (en ms) de 1000":

(le nombre 1000 pourrait être remplacé par autre chose, mais je le laisse tel quel, puisqu'il me convient).

Ensuite, je veux que la LED s'éteigne, j'ajoute donc un nouveau bloc tiré de la catégorie "sorties":


...mais je remplace l'état "1 (état haut)" par "0 (état bas)":

Et on ajoute un autre délai d'une seconde:

Je clique sur le bouton "code Arduino", pour voir à quoi ressemble mon sketch:


C'est bien ce que je voulais.  Remarquez que la pin 13 (qui contrôle la LED intégrée à la carte) à été automatiquement déclarée en sortie à l'intérieur de setup.

Il reste à téléverser mon sketch dans la carte.  En principe, il est possible de le faire directement à partir de Blockly@rduino à la condition d'installer le plugin de Codebender.  Je n'ai pas testé cette fonction; je ne sais pas si elle fonctionne encore, suite à la fermeture de Codebender.  Par contre il y a un bouton "sauver le code en INO" qui fonctionne très bien:  votre sketch est enregistré sous la forme d'un fichier .ino que vous pouvez ensuite ouvrir avec l'IDE conventionnel.  Vous pouvez aussi copier le sketch et le coller dans l'IDE.

Maintenant, je tente un deuxième sketch:  une LED (branchée à la pin numéro 4) sera contrôlée par un bouton (branché à la pin numéro 3).  Je commence donc avec la structure générale du programme.



J'ai besoin d'une boucle "si", que je trouve, logiquement, dans la catégorie "logique":




En fait, j'aimerais faire une bouche de type "if...else":  si bouton enfoncé, LED allumée, sinon, LED éteinte.  Pour ajouter cette partie supplémentaire, je clique sur le petit bouton bleu en forme de roue d'engrenage:

et dans le nouveau rectangle qui est apparu, je glisse "sinon" sous "si":

...et je clique à nouveau sur le bouton en forme d'engrenages pour faire disparaître ce rectangle.

J'ajoute maintenant un opérateur d'égalité, trouvé dans la catégorie logique:

...et j'y insère un bloc "'l'état logique de la broche Numérique", trouvé dans la catégorie "entrées":

J'indique le numéro de la broche à laquelle j'ai branché mon bouton:

Et un bloc d'état logique trouvé dans la catégorie "logique":

Dans la catégorie "sorties", je trouve un bloc permettant de modifier l'état d'une sortie numérique:


La LED sera branchée à la broche numéro 4:

Sinon, on éteint la LED:


Un coup d'oeil au sketch (bouton "code Arduino"):


Ça correspond bien à ce que je voulais faire (encore une fois, la pin 3 a été déclarée en entrée et la pin 4 a été déclarée en sortie automatiquement, sans que j'aie à le faire moi-même à partir des blocs).

Il ne me reste plus qu'à enregistrer le fichier .ino afin de l'ouvrir avec l'IDE Arduino.

Voilà, il ne s'agit bien sûr que d'un survol rapide.  Il semble y avoir une grande quantité de blocs spécialement conçu pour utilisation avec des capteurs ou actuateurs spécifiques, permettant de simplifier le code au maximum.

Pour en savoir plus, vous pouvez consulter le wiki, visiter le forum, télécharger les fichiers sur GitHub pour installation locale, visionner une présentation vidéo très détaillée,  voir comment c'est utilisé dans des ateliers de robotique pour enfants, ou lire cet article par Daniel Pers.

Attention de ne pas confondre Blockly@rduino avec d'autres logiciels similaires portant des noms presque identiques:  Blocklyduino est une vieille version qui a servi de départ à Blockly@rduino. Mais Ardublockly n'est pas exactement la même chose.  Puis il y a aussi eu Ardublock...


Yves Pelletier   (TwitterFacebook)