Louis Reynier

Systèmes numériques, électronique et communications

CIEL, mon BTS ! À vélo avec Arduino…

À la rentrée de septembre 2023, le BTS SN (Systèmes Numériques) va laisser la place au BTS CIEL (Cybersécurité, Informatique et réseaux, ELectronique). Ce BTS aussi se décline en deux options l’option ER (Electronique et Réseaux) et l’option IR (Informatique et Réseaux).

Ce nouveau BTS remet la fabrication électronique à l’honneur. Dans ce contexte, je vous présente ici une activité à réaliser avec des étudiants de BTS CIEL 1ere année, en tout début d’année scolaire.

Il s’agit de câbler et de tester un « shield » Arduino « fait maison » réalisant la fonction compteur de vélo. J’ai appelé ça Véloduino !

Un compteur de vélo

Le schéma de la carte est donné ci-après.

Schéma structurel du compteur de vélo
Schéma structurel du compteur de vélo Véloduino

C’est assez minimaliste : la carte comprend l’emplacement pour l’Arduino, un afficheur LCD de 2 lignes de 16 caractères, deux boutons-poussoirs et un petit bornier à vis. Ce bornier à vis permet de connecter un interrupteur type ILS de vélo. On rencontre aussi quelques petits composants : résistances, condensateurs, diode.

À chaque tour de roue, l’aimant présent sur un rayon de la roue passe devant le capteur ILS, et ferme l‘interrupteur à lames souples. Le signal récupéré passe alors de 1 à 0.

Capteur ILS de vélo pour compteur de vélo

ILS et aimant de compteur de vélo

Pour déterminer la distance parcourue, l’Arduino doit incrémenter la distance affichée de la longueur d’un tour de roue.

La mesure de la durée entre deux impulsions successives permet de déterminer la vitesse.

Le circuit imprimé

Le schéma a été saisi et le circuit routé sous KiCAD. Le circuit a été sous-traité en externe.

Circuit imprimé du compteur de vélo
Circuit imprimé Véloduino – vue de dessus et vue de dessous

Câblage de la carte

Les étudiants de BTS CIEL doivent donc câbler le circuit à partir des documents techniques fournis.

Carte du compteur de vélo cablée
Circuit imprimé câblé

Cette séance de câblage est aussi l’occasion d’une « leçon de choses ». Qu’est ce qu’un composant traversant ? Un composant CMS ? À quoi ressemble une résistance ? Un condensateur ? Est que la LED à un sens ? (Réponse : oui, il y a une anode et une cathode).

Test unitaire du circuit

Une fois que le circuit est câblé, les étudiants doivent valider le fonctionnement du circuit.

Dans un premier temps, on valide le matériel avec un logiciel de test qui permet de s’assurer que le circuit a bien été cablé, que les composants sont bien reliés entre eux.

Voici comment se présente l’écran de l’afficheur LCD avec l’Arduino équipé du logiciel de test. Quand on appuie sur un des bouton-poussoir, la valeur affichée passe de 1 à 0. Remarque : la photo a été faite avec le prototype réalisé au lycée.

Programme de test du compteur de vélo
Test unitaire de la carte avec le programme de test

A l’issue de cette phase, on sait que la carte est fonctionnelle : toutes les entrées sont reconnues, toutes les sorties fonctionnent : la LED s’allume, l’afficheur affiche correctement.

Test intégré de la carte

Une fois ces étapes validées, on peut maintenant tester le produit avec son programme définitif et vérifier qu’il mesure correctement la vitesse du vélo et la distance parcourue.

Voici le diagramme d ‘état correspondant au logiciel interne du compteur de vélo.

Diagramme d'état du programme du compteur de vélo
Diagramme d’état du compteur de vélo

Le programme de test et le programme du compteur sont disponibles sur Github.

Lien vers les programmes

Une procédure de test est donnée : les étudiants doivent suivre cette procédure et remplir un PV de test correspondant.

Cette séance de test est l’occasion d’un premier contact avec les appareils de mesure : un générateur basse fréquence permet de générer des impulsions calibrées correspondant à une vitesse donnée. On observe le signal de test du compteur à l’oscilloscope.

Et voila, une fois ces opérations effectuées, il n’y a plus qu’à installer ce compteur sur votre vélo et aller faire un petit tour.

Et qui on est, hein ?

Palmes académiques

C’est le mois de juin ! Qui dit juin dit été, qui dit été dit vacances, qui dit vacances dit mer, qui dit mer dit plongée , qui dit plongée dit palmes ! C’est de palmes de plongée que nous allons parler aujourd’hui ! Cette année, le projet de nos BTS SN 2eme année était un banc de mesure de palmes de plongée. Avec mes collègues et nos étudiants, nous avons travaillé sur un projet pluridisciplinaire avec les BTS CPI du lycée Cabanis. L’entreprise partenaire est Lomacor Composites, une PME dynamique de notre région. Ils fabriquent et vendent, entre autres, des palmes de plongée sous la marque JFE-made to perform.

Il s’agit de palmes pour l’apnéiste ou le chasseur sous-marin. Attention, ce ne sont pas des palmes comme celles que vous pouvez trouver chez D*c*thl*n. Ici, c’est du travail d’artisan, voire d’artiste, du haut de gamme en fibre de carbone. Et made in France !

En vrai professionnel, Lomacor souhaite caractériser finement les palmes qu’ils produisent. Ils testent systématiquement la raideur de leur palmes et plus précisément le profil de raideur de leurs palmes. Nous avons travaillé sur la réalisation d’un prototype permettant de réaliser simplement cette mesure.

Roberto, mio palmo ! Ce mois-ci, plongeons dans le grand bleu !

La raideur des palmes

C’est un paramètre important la raideur des palmes ! Si vous êtes débutant, il vous faut des palmes souples, sinon vous allez avoir des crampes. Si vous avez un peu de bouteille (bien qu’apnéiste, ahah !), vous préférerez des palmes rigides. Elles vous propulseront plus rapidement avec vos muscles d’acier vers des profondeurs abyssales. Chez JFE, vous précisez à la commande ce paramètre et c’est indiqué sur vos palmes avec des petites barres. Les fabricants de palmes emploient le terme de dureté mais en le terme scientifique approprié est plutôt raideur.

Palmes et barre de dureté
Barre de « dureté » des palmes JFE

Principe de la mesure

Pour mesurer la raideur d’une palme, on va placer la voile de la palme entre deux rouleaux et appliquer avec un troisième rouleau une déformation, une flèche comme disent les mécaniciens. On mesure ensuite la force de réaction de la palme. Si la palme est souple, cette force est faible, si elle est raide, elle est importante.

Banc de mesure palme pricipe vu de profil
Principe de la mesure – vue de profil
Principe de la mesure – vue « 3D »

Pour obtenir le profil de raideur de la palme, on effectue cette mesure sur toute la longueur de la palme en la déplaçant. Compte tenu de la géométrie de la palme, la palme est normalement plus souple au bout, qu’au début (proche du pied).

Le banc réalisé

L’organisation de notre banc de mesure est la suivante :

Organisation du banc de mesure

Un PC avec une application Windows communique avec un boîtier électronique qui commande une partie opérative.

La partie opérative

Banc de mesure palme
La partie opérative du banc de mesure

C’est les mécanos de CPI qui ont bossé sur ce prototype. Remarquez les deux moteurs pas à pas. L’un permet de déplacer la palme horizontalement, l’autre d’appliquer une flèche (de haut en bas). Ce sont des vis sans fin de pas 1 mm qui permettent de transformer les mouvements de rotation en mouvements de translation.

Le capteur de force est intégré dans la pièce verticale, que nous appelons (entre nous) « la guillotine » ! C’est une jauge de contrainte de valeur 20 kg.

Banc de mesure – détail capteur de force

Le boîtier de commande

Boîtier de commande

Le boîtier de commande est équipé d’un écran LCD 4 lignes, de 5 boutons-poussoirs permettant de naviguer dans les différents menus. Sous le capot, un Arduino Méga ! Mais nous avons aussi développé une version PSoC. L’IHM utilise une MAE. J’ai déjà parlé de cette méthode sur ce site.

L’application PC

Banc de mesure de palme - application PC
L’application PC

Le programme a été développé sous Visual Studio C#. Ça aussi, j’en ai déjà parlé ici.

L’application permet d’ouvrir le port COM, de spécifier une longueur de mesure (correspondant à la palme mesurée), une flèche à l’angle et une flèche à la pointe. La flèche évolue linéairement le long de la mesure. Un bouton permet d’envoyer les données et de lancer les mesures, et on obtient ensuite les relevés sous forme de courbe. On peut ensuite sauver les données sous forme de fichier csv ou d’un PV de mesure au format rtf.

Et ça marche ?

Ce projet a été mené au bout ! Nos étudiants ont présenté leurs travaux au jury d’examen et les démos ont été convaincantes. Quelques améliorations sont encore possibles, aussi bien mécaniques qu’électroniques, mais ce prototype a bien montré la faisabilité de cette machine !

Et qui on est, hein ?

Des signaux au tableur

Pourquoi dessiner des signaux ?

Voici un petit article pour mes collègues prof, mais pas que.

Nous autres, enseignants, avons souvent besoin de représenter des signaux BF (basse fréquence) tels qu’on les voit à l’oscilloscope. Exemple ici, un signal en dent de scie.

On peut faire ainsi des petits contrôle avec des questions du genre :

  • Quelle est la période de ce signal, sa fréquence ?
  • Si on applique ce signal à l’entrée de l’amplificateur étudié précédemment, dessinez la forme du signal de sortie, etc.

Vous voyez un peu notre besoin ?

Comment générer numériquement et facilement ces signaux avec un tableur ?

Bien sûr, vous allez rencontrer des petits malins qui vous diront : facile, il suffit de décomposer ton signal en série de Fourier, et après tu n’as plus qu’à tracer 10 harmoniques et hop…

Mais on est pas comme ça, nous, on a des astuces, des trucs. Du métier, quoi !

Et je vais vous donner mes tuyaux !

La sinusoïde

Ça c’est très facile.

Y = SIN(X) ou Y = COS(X) !

Sur une colonne on place t, sur l’autre V et on trace V(t).

Exemple : un sinus d’amplitude 5 V et de fréquence 1000 Hz, 20 points par période, soit un point toutes les 50 µs. Voila ce que ça donne

Signal sinusoïdal

Vraiment facile !

Le carré

Un peu plus dur. Il suffit maintenant de se dire qu’un signal carré peut être obtenu en prenant le signe d’un signal sinusoïdal. On utilise donc la fonction signe du tableur. Rappelons ici comment cette fonction fonctionne !

Pour obtenir un signal carré, il suffit donc d’écrire

Y = SIGNE (SIN(X))

Signal carré

Quelques remarques :

  • le temps de montée/descente est égal au pas d’échantillonnage
  • éviter Signe(sinus(0)) = 0 , qui fait un point à 0, préférer Signe(sinus(ε))

Le signal triangulaire

C’est le plus difficile. Avant je galérais et puis je suis tombé sur cette formule, je ne me souviens plus où :

Y = ARCSIN(SIN(X))

C’est l’équation d’un signal triangulaire. Voici ce que ça donne !

Signal triangulaire
Signal triangulaire

La période est la même que le sinus associé.

Le signal évolue entre +π/2 à -π/2, il faut en tenir compte et multiplier l’amplitude par 2/π.

La rampe

Une fois qu’on connait le truc de Arcsin(sin(x)), on peut chercher d’autres trucs. Pour la rampe, j’ai choisi :

Y = ARCTAN(TAN(X))

Voila ce que ça donne :

Signal rampe
Signal rampe

La période est la moitié de la période du sinus. Le signal évolue entre entre -π/2 à +π/2. mais la forme de rampe est bien là. Vous pouvez aussi ajouter de l’offset en X et en Y.

Voila, vous avez maintenant tous les outils pour faire des chouettes évaluations et représenter des oscillogrammes comme des pros. Pas mal, non ?

Et qui on est, hein ?

Gravé dans le marbre

Gravé dans le marbre, ça signifie écrit pour longtemps, intangible… Dans nos projets, il est parfois nécessaire de sauvegarder une donnée de manière non volatile. Pour cela, on mémorise la donnée en EEPROM. J’ai récemment mis en œuvre cette opération avec Arduino et avec PSoC. Je vous raconte ça ici…

Arduino et EEPROM

Avec Arduino, le projet était un compteur de vélo. J’avais besoin de sauvegarder en EEPROM la variable p, le périmètre de la roue en cm. Pour une roue de vélo normale cette grandeur est <255. En effet une roue de vélo de 700 ( diamètre 700 mm) correspond à un périmètre de π.D soit 220 cm environ. Le périmètre de la roue correspond à la distance parcourue avec 1 tour de roue. C’est un paramètre important ici à modifier en fonction de la taille des roue du vélo.

Nous allons utiliser la bibliothèque EEPROM (documentation ici), pour cela, dans le programme Arduino, il est nécessaire d’écrire dans l’en-tête du programme :

#include <EEPROM.h>

La taille de la mémoire EEPROM de l’Arduino UNO est de 1024 octets. Les adresses disponibles sont donc comprises entre 0 et 1023. Les données stockées sont sur un octet et donc comprises entre 0 et 255. Pour lire la donnée p stockée à l’adresse 0 , on utilisera l’instruction suivante :

p = EEPROM.read(0); // lecture perimetre de la roue à l'@0

Pour écrire la donnée p à l’adresse 0, on peut utiliser l’instruction suivante :

EEPROM.write(0,p);

Mais attention, la durée de vie de l’EEPROM de l’Arduino est limitée à 100.000 cycles ! C’est pas mal, mais ce n’est pas infini. C’est pourquoi j’ai préféré utiliser l’instruction suivante :

EEPROM.update(0,p);

L’instruction update n’écrit la donnée que si celle-ci est différente de la donnée présente. On économise ainsi la durée de vie de la mémoire en évitant les écritures inutiles.

Bon maintenant, si vous vous amusez à changer ce paramètre une fois par jour, 100.000 écritures, ça va marcher pendant 274 ans ! C’est pas mal !

Ecrire et lire dans l’EEPROM avec Arduino : pas si difficile finalement…

PSoC et EEPROM

Je n’avais jamais utilisé l’EEPROM sur un projet PSoC. Nous en avons besoin cette année sur un projet mené avec nos étudiants. J’ai donc fait un petit programme sur le kit PSoC-050 pour valider l’écriture et la lecture en EEPROM sur PSoC 5. Le PSoC de ce kit possède 2 ko (2048 octets) de mémoire EEPROM. Le design implémenté est le suivant :

Design PSoC

Juste le minimum : 1 EEPROM (c’est ça qu’on teste), 1 afficheur LCD pour la visu, 2 boutons-poussoirs (pull-uppés en interne), 1 led.

Informations et tuto sur kit PSoC-050 disponibles sur ce site ici.

Le programme est le suivant :

Programme en C

Au démarrage, le programme va lire la case mémoire EEPROM d’adresse 0000 avec l’instruction EEPROM_1_ReadByte(adresse). Celle ci s’affiche pendant 4 s. Ensuite l’utilisateur peut incrémenter la valeur lue par appui sur BP1 (cette valeur repasse à 0 dès que la valeur est >255). Un appui sur BP2 permet de sauver dans la case mémoire d’adresse 0000 cette nouvelle valeur en utilisant l’instruction EEPROM_1_WriteByte(donnée,adresse). La led s’allume furtivement lors de l’écriture EEPROM.

Si on débranche puis on rebranche le kit on peut vérifier que la donnée a bien été écrite.

Démonstration programme. Affichage des deux ecrans

Sur PSoC, l’EEPROM est donnée pour 1 million de cycles d’écriture et 20 ans de rétention d’info !

Nos projets méritent bien ça, non ?

Et qui on est, hein ?

Si carré et pourtant… sinus !

En 2019, au Lycée Cabanis de Brive, un des projets de nos étudiants de BTS SN était un boîtier de commande d’un onduleur IGBT. Le but de ce boîtier, interfacé à un PC en USB, était de générer les signaux de commande pour réaliser un hacheur ou un onduleur. Ce projet utilisait un circuit PSoC5. Durant la phase de pré-étude de ce projet, je me suis posé une question :

Comment générer un signal sinusoïdal à f = 50 Hz, à partir d’un signal PWM avec un PSoC ?

On rappelle PWM : pulse width modulation ou MLI en français (modulation de largeur d’impulsion). On ne présente plus le PSoC, on en parle souvent sur ce site !

Conception PSoC

La structure retenue est la suivante :

Schéma PWM PSoC
Onduleur sinus PWM

On utilise un composant PWM 8 bits attaqué par une horloge Clock_1.

La configuration du PWM est la suivante :

Configuration du PWM PSOC
Configuration PWM

Le PWM est constitué d’un (dé)compteur qui compte de 255 à 0. La sortie PWM est à 1 lorsque l’état du compteur est inférieur ou égal (Less or Equal) à un entier CMP_Value_1. La fréquence du signal PWM est donc égale à la fréquence de l’horloge divisée par 256.

Pour obtenir un signal PWM à valeur moyenne sinusoïdale, nous allons alors à chaque fin de cycle du compteur PWM (détecté par la broche TC = Terminal Count) déclencher une interruption (ISR_1). Cette interruption va modifier la valeur de CMP_Value_1. La suite des valeurs de CMP_Value_1 suit une loi sinusoïdale.

La figure suivante illustre ce principe :

PWM et sinus
PWM sinusoïdale

Nous avons choisi une suite de 256 valeurs pour les valeurs de CMP_Value_1. Pour obtenir une sinusoïde de fréquence 50 Hz, il faut que la fréquence de l’horloge soit égale à 256 x 256 x 50 = 3,2768 MHz.

Le programme

Le programme est donné ci-après :

Programme en C du PWM sinus
Programme PSoC

On définit d’abord un tableau TabSinus de 256 éléments. Celui-ci va contenir les 256 points constituants la sinusoide.

La routine d’interruption Cy_ISR, appelée à chaque fois que le compteur du PWM a terminé son comptage, configure le nouveau rapport cyclique du PWM avec la valeur qu’elle va chercher dans le tableau TabSinus.

Le programme principal fait clignoter la led et, si le bouton-poussoir est appuyé, on diminue l’amplitude du signal sinusoïdal en écrivant une nouvelle suite de valeurs dans TabSinus.

Les résultats

Et ca marche ? Regardons un peu les mesures que j’ai faites avec mon vieux Tektro. C’est un scope analogique mais avec de la mémoire numérique (Tektronix 2212). Une antiquité (cet appareil a une trentaine d’années), mais qui fait très bien le job !

Signal PWM et sinus obtenu
PWM et sinus

En haut avec un calibre 5V/carreau, le signal PWM.

En bas, le même signal filtré par un passe-bas du 1°ordre (RC = 1kΩ.1µF), calibre 1V/carreau.

On remarquera que le PWM est plutôt à 1 quand le sinus est max et plutôt à 0 quand le sinus est bas.

Le détail est visible ici :

PWM et sinus : zoom
PWM et sinus – zoom échelle des temps

Sur cette deuxième figure, on observe bien que le rapport cyclique du PWM (donc la largeur des impulsions) diminue quand le signal sinusoïdal est décroissant !

Alors, pas mal, non ?

Et qui on est, hein ?

Au tableur !

Maitriser le tableur est, à mon avis, un savoir-faire indispensable pour un technicien supérieur. Voici un TP que nous faisons, mon collègue et moi, en début de BTS SN première année. Les exemples étudiés ici sont adaptés et contextualisés pour des électroniciens. Et un tableur traite des données : écrire des formules dans des cases, c’est aussi de la programmation !

Prochainement, notre BTS SN va devenir le BTS CIEL (Cybersécurité, Informatique et réseaux, ELectronique). Ce nouveau BTS intègre un co-enseignement mathématiques et sciences et techniques de l’ingénieur. Ce TP peut donc être une activité de co-enseignement intéressante. À discuter avec le prof de maths… Le texte complet du TP est à télécharger en fin d’article.

Ce TP se fait sur Calc de LibreOffice, mais pourrait aussi bien se faire sur Microsoft Excel.

Formules magiques

Le premier exercice consiste à remplir le tableau suivant (en rouge, les résultats attendus). C’est un tableau de conversion dBm – mW – Volts sur 600 Ω.

Tableau de conversion dBm mW
Conversion dBm – mW – Volts

Bien entendu, les étudiants doivent saisir les formules qui donnent les résultats. Je précise ça parce qu’une fois, j’ai vu un étudiant faire les calculs avec sa calculette et remplir le tableau avec ses résultats !

Vous avez remarqué comme je suis peau de vache ? Parfois je demande des mV, parfois des Volts. C’est bourré de chausse-trappes ce TP !

Un capteur à thermistance

Un tableur, ca sert aussi à tracer des courbes ! Dans cet exercice, il s’agit de tracer la caractéristique d’un capteur à thermistance. Je ne vais pas trop le détailler ici car j’ai déjà consacré un article à ce capteur (le mois dernier). Ca se passe ici : lien vers l’article capteur à thermistance

Voici la courbe que les étudiants doivent tracer :

Caractéristique du capteur à thermistance

Tracé impédance -fréquence

Plus compliqué, on va tracer ici des courbes sur une échelle semi-logarithmique. Il s’agit de tracer l’impédance d’entrée d’un système en fonction de la fréquence. On doit aussi faire figurer sur la courbe un gabarit afin de savoir si la courbe est dans la spécification (ou pas). Les points de mesure sont donnés ainsi que le gabarit. Voilà ce que ca donne !

Impédance en fonction de la fréquence

Pas mal ? Moi, quand j’étais étudiant, je devais tracer ce type de courbes sur du papier millimétré semi-logarithmique 4 décades ou 5 décades (je ne vieillis pas, je deviens vintage !).

Un comparateur à ALI

On peut aussi utiliser le tableur pour simuler un circuit électronique. En voilà un exemple :

Voici le circuit :

Circuit comparateur ALI

Et voici les signaux d’entrée et de sortie. V+ est une tension continue de 1.2 V et V- est une sinusoïde de fréquence 1 kHz et d’amplitude 3 V.

Signaux comparateur ALI

Cet exercice permet de voir quelques fonctions comme le sinus et la fonction SI. SI(Test; Alors Valeur ; Sinon Valeur) : on fait bien de l’informatique !

Un peu de tout

A la fin du TP, on fait un peu de tout.

Du calcul de moyennes pondérées avec les coefficients du BTS et détermination si le candidat est admis ou collé (SI moyenne >= 1 0, alors « REÇU », sinon « COLLÉ »). Ça permet de voir les $ et aussi les mises en forme conditionnelles (on affiche en vert ou en rouge les notes en fonction de leurs valeurs).

Un diagramme de Gantt ou l’emploi du temps de la classe (pratique en période de rentrée scolaire).

En bonus, ceux qui sont en avance peuvent faire le convertisseur binaire-décimal-hexadécimal :

Convertisseur binaire - décimal -  hexadécimal
Convertisseur binaire – décimal – hexadécimal

Et enfin, des courbes de fonction de transfert de filtre passe-bas du second ordre en 3 D ! Avec échelle semi-logarithmique, s’il vous plait ! Mais ça c’est vraiment le super-bonus, pour les cracks !

Courbes de transfert de filtre du second ordre

Bref, le TP est disponible ici :

Le tableur, ça nous fait pas peur !

Et qui on est, hein ?

Thermoduino, un thermomètre Arduino

C’est un TP de BTS SN (Systèmes numériques) 1° année. C’est le premier TP avec l’Arduino. Il s’agit de réaliser un thermomètre avec Arduino. Pour cela, nous allons modéliser un capteur de température réalisé avec une thermistance CTN puis calculer et afficher la température mesurée ! Le cahier des charges est le suivant :

Réaliser un thermomètre Arduino avec affichage de la température sur la liaison série.

Plage de température : -20°C à 50°C

Précision < +/- 1°C

La thermistance

Pour réaliser notre capteur, nous avons utilisé une thermistance. Nous avions au lycée un petit stock de thermistance 4,7 kΩ. La loi de variation de la résistance RTH (la résistance de la thermistance) en fonction de la température est donnée ci-après :

RTH = R0 e B(1/T -1/T0)

avec R0 = 4700 Ω et B = 3980 K-1 et T0 = 298,15 K

C’est assez facile à tracer avec un tableur. Voilà ce que ca donne entre -20°C et 50°C avec un point tout les 5°. J’utilise LibreOffice : efficace, gratuit et libre !

Caractéristique thermistance R en fonction de T°C
Caractéristique R(T) de la thermistance 4.7 k

C’est une CTN (résistance à coefficient de température négatif) cela signifie que lorsque la température augmente, la résistance diminue. Remarquez qu’à la température ambiante (25°C), la résistance a une valeur de 4700 Ω.

Le capteur

L’Arduino sait mesurer des tensions, pas des résistances. Il est donc nécessaire de transformer la variation de résistance en variation de tension. Pour cela, on réalise un pont diviseur en y associant une résistance de 4,7 kΩ conformément au schéma suivant.

Capteur de température diviseur de tension thermistance résistance
Capteur de température à thermistance

Calculons Vt, la tension fournie par le diviseur de tension :

Vt = Vcc. RTH / (RTH+R1)

Lorsque la température est basse, la résistance est haute, la tension est élevée (proche de 5V). Lorsque la température est haute, la résistance est faible, la tension est basse (proche de 0V). À la température de 25°C, la thermistance a une résistance de 4,7 kΩ et la tension est à Vcc/2.

Avec le tableur, nous pouvons maintenant tracer la courbe Vt(T°C), c’est-à-dire la tension fournie par le capteur en fonction de la température.

Caractéristique Vt(T) du capteur de température à thermistance
Caractéristique Vt(T°C) du capteur à thermistance

Entre -20 et 50°C, la tension Vt varie entre 4,5V et 1,2V.

Maintenant, ne perdons pas de vue notre objectif, ce qui nous intéresse, c’est de connaitre la température à partir de la mesure de Vt. En fonction de la tension mesurée, quelle température dois-je afficher ? C’est donc la courbe inverse qui nous intéresse soit T°C(Vt) :

Caractéristique T(Vt) du capteur à tehrmistance
Caractéristique T(Vt) du capteur à thermistance

Si la tension mesurée est égale à 2,5V, c’est que la température est à 25°C. Si par exemple, la tension mesurée est à 3,5V, la température est alors de l’ordre de 7°C.

Modélisation

La question est la suivante : à partir de la mesure de la tension, comment mon Arduino va déterminer la température. Comment l’Arduino peut-il reconstituer la courbe Vt(T°C) ? Il nous faut modéliser cette courbe.

Modèle linéaire

Demandons à notre tableur de calculer une courbe de tendance qui approxime la caractéristique T(Vt). Sur LibreOffice : clic droit sur la courbe puis « Insérer une courbe de tendance ».

Caractéristique du capteur et modélisation par courbe de tendance linéaire
T(Vt) et courbe de tendance linéaire

L’équation fournie par le tableur est (avec arrondi) :

T(°C) = -20,1 Vt + 75,69

C’est l’équation d’une droite.

Facile maintenant pour l’Arduino de calculer la température avec cette formule magique. Mais la courbe linéaire ne « colle » pas parfaitement avec la courbe réelle. En analysant les résultats donnés par le tableur, on constate une erreur de température comprise entre -4°C et +2 °C. On ne respecte pas notre cahier des charges puisque nous voulions une erreur inférieure à 1°C !

Modèle du second degré

On demande maintenant à notre tableur de calculer une courbe de tendance polynomiale de degré 2.

Caractéristique du capteur et modélisation par courbe de tendance polynomiale de degré 2.
T(Vt) et courbe de tendance de degré 2

L’équation fournie par le tableur est :

T(°C) = -0,82.Vt2-15,22.Vt+69,4

C’est mieux mais l’équation ne colle pas encore parfaitement à la courbe. On constate une erreur comprise entre -2.6°C et + 2°C. On ne respecte toujours pas le cahier des charges ! Il faut trouver autre chose !

Modèle du troisième degré

On demande maintenant à notre tableur de calculer une courbe de tendance de degré 3.

Caractéristique du capteur et modélisation courbe de tendance de degré 3
T°C(Vt) et courbe de tendance de degré 3

T°C = -1,634.Vt3 + 13,66.Vt2 – 54.93.Vt +102,43

Le modèle colle maintenant parfaitement à la courbe.

On constate maintenant une erreur comprise entre -0,6°C et +0,5°C. Notre cahier des charges est respecté. Notre Arduino pourra maintenant calculer précisément la température en fonction de Vt.

Le programme

Le programme est réalisé à partir de l’exemple AnalogReadSerial. Voici un exemple d’implémentation avec le rendu sur le terminal :

Code arduino thermomètre  et visualisation mesure température
Code Arduino et visualisation sur terminal Arduino

Le TP complet

Comment on le fait alors notre thermomètre ? Le TP complet est disponible si dessous. Enjoy !

Fabriquer un thermomètre avec un Arduino et deux composants de fond de tiroir ? Précis au degré près ? Facile !

Et qui on est, hein ?

Codage : IA vs étudiant de BTS

J’ai testé pour vous l’IA ChatGPT d’OpenAI dont tout le monde parle en ce moment. Moi qui suis fan de S-F, j’ai trouvé cela vraiment intéressant, je n’ai pas été déçu ! J’ai essayé de voir si cet IA avait ou pas le niveau d’un étudiant de BTS Systèmes numériques sur du codage en C ou un exercice d’électronique. Je vous raconte ça ici…

OpenAI

Logo OpenAI

Après avoir vu passer plusieurs articles intéressants, je me suis inscrit sur le site OpenAI. Il faut laisser une adresse mail et un numéro de téléphone. Cela permet d’accéder gratuitement à plusieurs outils dont ChatGPT, l’IA avec laquelle on peut converser et DALL-E 2 une IA qui produit une image correspondant à la description que vous écrivez. L’inscription est très rapide. J’ai d’abord essayé ChatGPT.

ChatGPT en BTS SN ?

J’ai demandé à ChatGPT de se présenter :

peux tu te présenter en quelques mots ?
Je suis Assistant, un grand modèle de langage entraîné par OpenAI. Je suis une intelligence artificielle conçue pour répondre aux questions et aider à résoudre les problèmes des gens. Mon savoir est limité à la date de coupe de 2021 et je n'ai pas accès à Internet pour effectuer des recherches ou accéder à de nouvelles informations. Je suis là pour vous aider à trouver des réponses et à comprendre les sujets qui vous intéressent. N'hésitez pas à poser des questions ou à demander de l'aide !

Je me suis demandé : « Est-ce que ChatGPT pourrais faire un bon étudiant de BTS Systèmes numériques ?« .

Lettre de motivation

Il faudrait d’abord passer la première étape : ParcourSup ! J’ai donc demandé à l’IA de rédiger une lettre de motivation. Voici ce que ca donne

Lettre de motivation pour aller en BTS Systèmes numériques électronique et communication
Lettre de motivation BTS SN-EC

Alors là, chapeau ! J’ai été impressionné. Rien à dire sur le style, c’est clair et concis. Aucune faute d’orthographe. Sur le fond, rien à dire non plus, franchement, la plupart des lettres de motivation que nous recevons sont moins intéressantes que celle-ci. Du coup, je vais être bien embêté cette année lorsque il va falloir trier les dossiers à la prochaine commission Parcoursup. Si une lettre de motivation est pertinente et sans faute d’orthographe est-ce le candidat qui l’a rédigé ou ChatGPT ?

Une question d’électronique

Et les connaissances ? J’ai fait un test avec une question d’électronique simple, avec une LED, une question du genre de celle qu’on pose en devoir :

Représenter le schéma et calculer la valeur de la résistance permettant d’allumer une led verte (VD = 2,1 V) avec un courant de 15 mA avec une tension d’alimentation de 12 V.
Pour représenter le schéma et calculer la valeur de la résistance nécessaire pour allumer une LED verte avec un courant de 15 mA et une tension d'alimentation de 12 V, vous pouvez utiliser la formule suivante:

R = (V - VD) / I

où R est la résistance en ohms, V est la tension d'alimentation en volts, VD est la tension en volts à laquelle la LED doit être alimentée pour s'allumer, et I est le courant en ampères.

En utilisant cette formule, vous pouvez calculer la valeur de la résistance nécessaire comme suit:

R = (12 - 2,1) / 0,015 = 633,3 ohms

Pour une précision accrue, vous pouvez arrondir cette valeur à la résistance la plus proche disponible dans votre boîte à outils, comme 630 ohms ou 640 ohms.

Voici un schéma représentant ce circuit:

Voltage source (12 V) -- R (630 ohms) -- LED (verte) -- GND

Vous pouvez utiliser un multimètre pour vérifier que la résistance que vous avez sélectionnée est correcte et que la LED s'allume avec un courant de 15 mA.

J'espère que ces informations vous seront utiles! N'hésitez pas à me poser d'autres questions si vous avez besoin d'aide ou si vous avez des doutes.

Voila une réponse intéressante ! J’aimerais bien que mes étudiants rédigent comme cela lors des devoirs surveillés ! C’est bien expliqué. Bon, le schéma c’est léger, il ne sait pas dessiner mais c’est juste, bien qu’il ne précise pas où sont l’anode et la cathode. Pareil pour les résistances proposées 630 et 640 ne sont pas des valeurs normalisées mais franchement, c’est pas mal du tout ! Mon collègue et moi travaillons dur pour que nos étudiants arrivent à faire ce calcul juste en première année.

Coder en C

J’ai demandé à l’IA de résoudre des exercices simples en langage C que je pose en évaluation de TP en milieu de première année.

Le code est juste, bien aéré. La variable temporaire qui permet de stocker la donnée a été judicieusement nommée temp. L’énoncé a été bien compris. L’IA complète sa réponse avec un petit commentaire décrivant le fonctionnement du programme. C’est parfait !

On en essaye un plus dur ? Voici l’énoncé :

1°) Écrire un programme qui demande de saisir une chaîne de caractères (maximum 100 caractères)
en utilisant gets.
2°) Le programme doit ensuite re-afficher la chaîne saisie avec un message (Ex : « Vous avez saisi :
toto ») en utilisant printf.
3°) Ensuite le programme doit déterminer le nombre de caractères de la chaîne et l’afficher. On
utilisera une boucle while et on détectera le caractère de fin de chaîne.
4°) Enfin le programme doit vérifier si le dernier caractère est un s ou un S. Si c’est n’est pas le cas,
il doit alors écrire : « le mot saisi semble être au singulier ! ». Sinon, il écrit : « le mot saisi semble
être au pluriel ! ». Il doit alors créer une nouvelle chaîne de caractère égale au mot amputé du s ou S
et afficher cette chaîne avec le message « Au singulier ce mot s’ecrit ... ».

Voici le programme que j’ai obtenu (je l’ai mis en forme avec Carbon).

Le programme est commenté (ce que ne font pas souvent les étudiants). Les variables portent des noms pertinents. Le programme est juste. Il fait juste deux fois l’affichage du nombre de caractères avec deux méthodes mais c’est vrai que l’énoncé pourrait le laisser croire.

À chaque fois, la réponse est quasi instantanée…

Ces deux manips nous montrent que l’IA code aussi bien, voire mieux qu’un étudiant de BTS en milieu de première année et surtout beaucoup plus vite !

Analyser un programme

OK, l’IA code bien mais est-elle capable d’analyser un programme ? Je l’ai fait plancher sur un exercice posé en devoir écrit. Voici l’exercice.

Et voici la réponse de ChatGPT :

Q.1) Les variables chaine et compte sont toutes deux des variables de type char.

Q.2) Le programme utilise une boucle while pour compter le nombre de caractères de la chaîne de caractères saisie par l'utilisateur. La variable compte contient le nombre de caractères de la chaîne à la ligne 16.

Q.3) Le programme utilise une boucle for pour parcourir chaque caractère de la chaîne de caractères et vérifie si le caractère est compris entre 'a' et 'z' inclus. Si c'est le cas, le caractère est converti en majuscule en lui soustrayant 32.

Q.4) Lorsque l'on exécute le programme et que l'utilisateur saisit "abBA!", le programme affiche "Controle !", "Saisir un mot en minuscule :", "Avant : abBA! compte : 5", "Apres : ABBA!".

Bravo ! Le programme est bien analysé. Il n’a juste pas très bien répondu à la question 1 : compte est un entier et chaine est une chaine de 100 caractères maximum. Mais c’est bien rédigé, et il a bien compris ce que faisait le programme, ce qui n’était pas le cas de la plupart de mes étudiants lorsque j’avais posé cette question en devoir !

Et qui on est, hein ?

Je termine souvent les articles par l’expression « Et qui on est, hein ? ». C’est une expression qu’on emploie souvent en Corse. L’IA est-elle capable de comprendre ce qu’elle veut dire ?

Une exclamation qui sous entend que la personne qui parle est confiante ou sure d’elle-même. C’est plutôt bien vu !

Le sens de l’humour ?

Est-ce que ChatGPT a le sens de l’humour ? J’ai testé.

raconte moi 4 blagues d'électroniciens
Pourquoi les électroniciens ne font jamais d'erreurs ? Parce qu'ils ont toujours un oscilloscope sous la main pour vérifier leurs circuits !
Pourquoi les électroniciens sont-ils toujours si calmes et posés ? Parce qu'ils savent que s'ils ne le sont pas, ils risquent de finir en court-circuit !
Pourquoi les électroniciens ont-ils toujours l'air si concentrés ? Parce qu'ils savent que s'ils relâchent leur attention, ils pourraient finir en surtension !
Pourquoi les électroniciens ont-ils toujours l'air si professionnels ? Parce qu'ils savent que s'ils ne le sont pas, ils risquent de finir en court-jus !
Blagues d’IA

Vous trouvez, ça drôle ? Moi, non. C’est nul !

Heureusement, mes étudiants ont bien plus d’humour !

DALL-E 2

J’ai aussi essayé DALL-E 2. Je lui ait demandé de me dessiner un professeur d’électronique et d’informatique (Digital art). Voici l’image que j’ai obtenu.

Un professeur d’électronique et d’informatique Digital Art

Est-ce que cette image me ressemble ?

Le gars a un peu la gueule de travers, c’est un défaut courant lorsque l’IA invente des visages. Sinon, la coupe de cheveux, les lunettes et la barbe de quelques jours matchent assez bien ! Les écrans et le prototype improbable aussi ! Que ceux qui me connaissent donnent leur avis !

Bravo l’artiste !

Et maintenant, qu’est-ce qu’on fait ?

Oui, après cette expérience, que fait-on ?

On continue à enseigner comme avant, comme si ce truc n’existait pas ?

Personnellement, lorsque je lirai une bonne lettre de motivation, je ne pourrais m’empêcher d’avoir un doute. Qui a écrit cette lettre : un jeune humain ou une IA ?

Est-ce pertinent de demander à un étudiant un exercice de codage à la maison ?

Doit-on continuer à coder comme avant ? À apprendre à coder comme avant ?

Et cette IA va progresser. Ca va très vite dans ce domaine. Et plus on l’utilise, plus elle progresse !

Quelles tâches seront sous-traitées aux IA dans le futur ?

Quels seront les boulots des humains dans le futur ?

Je vous laisse méditer cela en cette période de vœux et de nouvelle année !

Et qui on est, hein ?

Au-delà du spectre…

Non, ce n’est pas une histoire de fantômes, il s’agit bien d’électronique ! C’est un TP sur un analyseur de spectres. On va faire ici des mesures radio. Des mesures de puissance et de bande passante en RF.

Le TP

C’est un TP de BTS SN (Systèmes numériques) 2° année. Le texte du TP est ici :

En plus des fonctions classiques de l’analyseur de spectre, nous utilisons ici deux fonctions de mesures spécifiques : la fonction « channel power » et la fonction « occupied bandwidth » .

La fonction « Channel power »

Mesurer une puissance à l’analyseur ? Facile, me diriez-vous, il suffit de mesurer l’amplitude de la raie avec un marqueur ! Certes, sur un signal CW (continuous wave, un sinus quoi), c’est facile : il n’y a qu’une seule raie et on mesure l’amplitude de cette raie. Mais quand on a plusieurs raies ou un spectre compact ? On fait comment, chef ?

C’est là qu’on utilise la fonction « Channel power » . Cette fonction permet de mesurer toute la puissance dans une bande de fréquence donnée (dans un canal).

Voici la mesure effectuée sur un signal FM. Le générateur FM est configuré comme suit :

P = 0 dBm ; fréquence porteuse = 100 MHz ; modulation FM ; Excursion de fréquence Δf = 100 kHz ; fréquence du signal modulant 10 kHz.

Génrateur HF réglé en modulation FM
Générateur HF

Voici le spectre obtenu et la mesure de puissance.

Mesure de puissance d'un générateur HF modulé en FM
Mesure puissance signal FM

L’analyseur mesure -0.35 dBm (pour 0 dBm affichés). La bande de mesure est visualisée par la flèche à deux pointes. Bien entendu, tout le signal doit être compris dans la bande de mesure.

Voici un autre exemple de mesure sur un signal TNT.

Mesure de puissance sur modulateur TNT
Mesure puissance modulateur TNT

La source est un modulateur TNT réglé à -16 dBm. Joli, non ?

La fonction « Occupied bandwidth »

Une autre fonction utile est la mesure de la bande occupée par un signal. On peu faire ça à vue de nez (a bisto de nas, comme on dit en Occitanie), en comptant les carreaux mais on peut faire plus scientifique !

C’est la fonction « Occupied Bandwidth » .

Voyons ce que ca donne avec le signal modulé en fréquence.

Mesure bande utile signal FM
Mesure de la bande utile d’un signal FM

L’appareil donne deux mesures. La mesure à 99% : l’analyseur détermine la bande dans laquelle on trouve 99% de la puissance totale et la largeur à -26 dB du maximum du spectre.

La mesure est elle cohérente ? Vous souvient-il de la règle de Carson ? Non ? Voici ce que nous dit Wikipedia :

La règle de Carson, énoncée en 1922 par l’ingénieur d’AT&T John R. Carson, permet d’évaluer la largeur de bande passante d’un signal modulé en fréquence.

Dans le cas d’un signal modulant sinusoïdal, le signal modulé présente un spectre en raies (signal périodique). En ne gardant alors que les raies contenant au moins 98 % de la puissance du signal modulé, on obtient l’expression: B = 2(Δf+fm)

Alors ça marche ? Ici Δf = 100 kHz et fm = 10 kHz, on devrait trouver B = 2(100+10) = 220 kHz. On en mesure 236 ! C’est pas trop mal (on est à 99% pas à 98%).

Voyons ce que cela donne avec notre modulateur TNT.

Mesure bande utile modulateur TNT

On mesure 7,955 MHz à -26 dB pour une bande donnée à 8 MHz.

Intéressant ces mesures, non ?

Notre analyseur de spectre n’est pas tout neuf. On sauvegarde les mesures sur une diskette 3,5 pouces. Mais il marche encore très bien !

Et qui on est, hein !

Une IHM avec une MAE !

IHM ? MAE ? Késaco ?

Nous allons voir ici comment mettre en œuvre une interface homme-machine (IHM) à l’aide d’une machine à états (MAE). La solution est implémentée dans un Arduino Uno.

Dans nos projets et mini-projets de BTS SN, nous avons souvent besoin de mettre en œuvre des interfaces homme-machine simples. Bien souvent, on utilise un petit écran LCD avec deux lignes et quelques boutons-poussoirs.

Pour bien gérer les différents menus et la navigation entre ceux-ci, rien de mieux qu’une machine à états ! C’est une méthode rigoureuse et efficace.

Ici nous allons le mettre en œuvre sur une carte Arduino, mais la méthode est transposable à n’importe quelle autre plateforme ou microcontrôleur.

Un minuteur Arduino

Au cours de ce TP, nous allons réaliser un minuteur en utilisant un Arduino et un shield LCD-RGB Adafruit. Cette carte comprend un afficheur 2 lignes de 16 caractères et 6 boutons poussoirs (←;↓;↑;→;Sélection; et un bouton Reset).

Minuteur Arduino

Dans ce TP, nous allons implémenter les menus d’affichage de ce minuteur. Ces menus s’enchainent selon le diagramme d’état suivant.

Le codage se fait en utilisant une structure switch – case. Le switch se fait sur la variable d’état.

Le document complet est ici :

En bonus, les étudiants peuvent coder le minuteur complet, mais c’est un peu plus long. Et ça fonctionne !

C'est fini
C’est fini !

Et qui on est, hein ?

« Older posts

© 2024 Louis Reynier

Theme by Anders NorenUp ↑

Bannière de Consentement aux Cookies par Real Cookie Banner