Louis Reynier

Systèmes numériques, électronique et communications

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 ?

Un multimètre PSoC

Un mini projet

En BTS Systèmes numériques au lycée Cabanis de Brive, nos étudiants travaillent en mini-projet à la réalisation d’un multimètre rudimentaire.

Ce multimètre est construit autour d’un kit PSoC 5 (KIT-059). Il réalise les fonctions Voltmètre continu (0 à 50V) et Ohmmètre (1 Ω à 1MΩ) avec des calibres automatiques, bien entendu !

Ce projet est découpé en plusieurs phases entre la fin de la première année (avant de partir en stage) et le début de la deuxième année.

Pré-requis : avoir pris en main PSoC. C’est fait sur ce TP.

PSOC KIT-059
PSoC KIT-059

Phase 1 : saisie du schéma

Le schéma structurel est donné aux étudiants dans sa version papier. Les étudiants doivent le saisir sous KiCAD qu’ils découvrent à ce moment-là. KiCAD est un très bon outil de CAO électronique gratuit et libre.

Schéma structurel multimètre PSoC
Schéma multimètre PSoC

Il n’y a pas beaucoup de composants : le kit PSoC-059, un afficheur LCD, un petit interrupteur (pour basculer Voltmètre/Ohmmètre), 2 leds (dont 1 témoin d’alimentation), un buzzer, quelques composants pour l’alimentation. La carte est alimentée par un boitier d’alimentation en sortie jack (V> environ 8V). Le pont de diode à l’entrée permet de s’affranchir de la polarité de la tension d’entrée (et d’éviter de « griller » notre PSoC par inversion de polarité). Sur l’entrée Voltmètre, un pont diviseur /11 permet de mesurer des tensions jusqu’à 50V. Les résistances sont à calculer par les étudiants !

Après la saisie du schéma vient la phase d’affectation des empreintes et passage au routage.

Phase 2 : routage

Le routage se fait avec KiCAD. Pour les étudiants, c’est leur premier routage, les contraintes ne sont pas trop sévères :

  • taille de la carte < 1/2 page A4 ( max 10 cm x 15 cm)
  • le placement des composant doit respecter le bon sens et un minimum d’esthétisme.
  • Les tailles des pistes et vias sont imposés.
  • La carte étant réalisée localement, il n’y a pas de trous métallisés : toutes les pistes des composants doivent partir de dessous.

Le routage se termine avec la remise des fichiers GERBER.

Phase 3 : câblage

Les étudiants récupèrent le circuit imprimé nu. Ils câblent les composants. La plupart des composants sont traversants, à l’exception des résistances et des condensateurs <100 nF qui sont des composants CMS. Généralement, cette phase est effectuée en fin de première année. Ils n’oublient pas de câbler les traversées (vias). La plupart des composants (afficheur LCD, PSoC, douilles, etc…) sont récupérés d’une année sur l’autre. C’est aussi ça le développement durable !

Phase 4 : programmation

C’est l’essentiel du développement. Il faut concevoir le circuit interne au PSoC et écrire le code C. Cette phase se déroule normalement à la rentrée de deuxième année.

L’architecture interne est la suivante :

Architecture interne circuit multimètre PSoC

L’architecture interne est articulée autour d’un CAN 12 bits (ADC_SAR).

Un multiplexeur analogique permet de commuter entre les voies Ohmmètre et Voltmètre sur l’entrée du CAN .

Sur l’entrée Ohmmètre, un CNA (DAC) 8 bits à sortie en courant injecte un courant dans la résistance de mesure. En jouant sur plusieurs valeurs du courant, on obtient plusieurs calibres de mesure de résistance. La résistance est calculée en appliquant la loi d’ohm R = Umesuré/Iinjecté.

Sur l’entrée Voltmètre, un amplificateur programmable PGA (programmable Gain Amplifier) permet d’amplifier le signal avant de le mesurer. En jouant sur plusieurs gains, on obtient plusieurs calibres. Ainsi, le CAN travaille toujours à niveau important, on obtient alors une meilleure précision.

L’afficheur LCD permet d’afficher les mesures.

Un PWM permet de piloter le buzzer (il doit sonner si la résistance mesurée est faible).

Le code C permet de gérer l’IHM (comme la gestion du switch) et les algorithmes de calibres automatiques. Pour chaque calibre, un étalonnage et réalisé ce qui permet d’obtenir une précision <5%.

Phase 5 : recette

A la fin du projet, les étudiants effectuent la recette de leur produit et rédigent un rapport où ils expliquent les solutions retenues et les résultats obtenus.

Ca ressemble à quoi ce multimètre ?

Voici la photo d’une carte multimètre réalisée par un binôme d’étudiants.

Maquette Multimètre PSoC
Multimètre PSoC

Pas mal, non ? Et qui on est, hein ?

Aux origines d’Arduino…

Carte Arduino

Cet été, je suis rentré de Corse en passant par l’Italie. Nous avons choisi de passer par le Val d’Aoste et le tunnel du Mont-Blanc. La route passait par Ivrea (Ivrée en français). Je me suis dit que c’était l’occasion d’un pèlerinage arduinesque… Oui, la fameuse carte Arduino a ses origines dans le coin. C’est une longue histoire…

Ivrea

Ivrea est une petite ville dans le nord de l’Italie. C’est dans le Piémont, pas bien loin de Turin (Torino). La ville d’Ivrea marque l’entrée de la vallée d’Aoste. Ivrea est connu pour être le berceau de la société Olivetti.

Olivetti, ca ne dit pas grand chose aux jeunes d’aujourd’hui, mais pour les boomers comme moi, Olivetti, c’était d’abord des machines à écrire.

Machine à écrire Olivetti

C’est sur une machine comme celle-ci que j’ai tapé avec deux doigts mon rapport de projet en Terminale F3 ! C’était en 1984. (Ohlala, presque 40 ans !).

Deux ans après, je voyais pour la première fois un IBM-PC, c’était un Olivetti !

Une petite carte

En l’an 2001, s’est ouvert à Ivrea une école nommée IDII : Interaction Design Institut Ivrea. Si j’ai bien compris, il s’agissait d’une école financée par Olivetti et Telecom Italia qui dispensait une formation à bac+2 orientée design et technologie.

https://en.wikipedia.org/wiki/Interaction_Design_Institute_Ivrea

C’est dans cette école qu’intervenait Massimo Banzi, un prof d’élec un peu fou génial (comme tous les profs d’élec, non ?). Massimo a eu l’idée de développer pour ces étudiants une petite carte électronique facile à programmer et à mettre en œuvre. Aidé par quelques collègues, le projet open-source s’est rapidement développé et à un moment donné, il a fallu donner un nom à ce projet…

C’est qui cet Arduino ?

Autour de l’an 1000, Arduin, un nobliau d’Ivrée (Arduino d’Ivrea en italien) a très brièvement régné sur l’Italie.

https://fr.wikipedia.org/wiki/Arduin_d%27Ivr%C3%A9e

À Ivrea, c’est la vedette locale, un peu comme Napoléon à Ajaccio. Et donc, la rue principale d’Ivrea s’appelle la Via Arduino, et dans cette rue, il y a le bar Arduino.

Comme Massimo et ses amis allaient boire des bières au bar Arduino, ils ont appelé leur projet Arduino.

Un pèlerinage arduinesque

C’est avec ces informations que je me suis rendu à Ivrea, à la recherche du bar Arduino.

La via Arduino est assez facile à trouver. C’est une longue rue piétonne qui traverse la vieille ville.

Via Arduino à Ivrea

Et finalement, j’ai bien trouvé le bar Arduino. C’est à vrai dire une cafétéria qui ressemble à une librairie. Aucune mention de la carte Arduino.

Pas de chance, c’était fermé. De toute manière à 10h du matin, c’était trop tôt pour la bière.

Un peu plus bas, nous avons dégusté un très bon expresso. Ristretto !

Et qui on est, hein ?

Géolocalisation – SNT

Géolocalisation - image d'illustration une carte avec un point GPS
Image d’illustration par Andrey_Photos de Pixabay

Durant l’année scolaire 2019-2020, j’ai enseigné (en/le/les ?) SNT (Sciences Numériques et Technologie) en classe de seconde. Ce fut une expérience très intéressante qui m’a permis de changer un peu d’enseignement et de public. On travaille avec un manuel, des supports pédagogiques ( des clips vidéos très bien faits, par exemple). C’est très différent de l’enseignement en BTS. Hélas, je n’ai pas terminé l’année en présentiel. Oui, en mars 2020, l’année scolaire a basculé en télétravail intégral. Vous souvient-il ? Je n’ai pas renouvelé l’année suivante car j’ai dû récupérer d’autres heures en BTS. Je présente ici deux TPs sur la géolocalisation. Ce sont des TPs assez courts, en seconde SNT, les séances ne durent que 1h30.

TP1 : quelques manips avec what3words

Le premier TP tourne autour de what3words : une application géniale qui permet de donner une adresse avec 3 mots à chaque point du globe.

TP2 : quelques manips avec Google Maps

Ce TP propose des manips avec Google Maps et permet également de bien appréhender les notions de latitude et de longitude. On joue aussi avec la notion d’antipode.

La géolocalisation est un sujet qui m’a toujours intéressé en tant que randonneur-montagnard et ancien marin-hydrographe (j’ai effectué mon service militaire à la Mission Océanographique du Pacifique).

Et qui on est, hein ?

Microbit

Prise en main de la carte microbit

La carte microbit est une petite carte (petite par la taille) très intéressante. Nous l’utilisons en début de première année avec nos étudiants de BTS SN-EC. En effet, le langage de programmation graphique (qui ressemble à Scratch) est idéal pour des débutants. C’est une très bonne initiation à l’électronique embarquée.

Le premier TP permet la prise en main de la carte, de l’environnement de développement outil MakeCode.

Le second TP permet de réaliser l’équivalent d’un niveau à bulle électronique 2D en utilisant l’accéléromètre intégré à la microbit.

Nous avons même utilisé la carte microbit dans un projet de seconde année. Il s’agissait d’une application de mesure de mouvement à distance d’un mobile en utilisant l’accéléromètre et la liaison radio.

Et qui on est, hein ?

Modulation et démodulation FSK avec PSOC 5

Est-il possible de réaliser un modulateur et un démodulateur FSK dans un PSoC ? Voilà un TP qui permettrait d’illustrer les modulations numériques ! Et bien regardons ensemble comment s’y prendre.

Pour ce TP, je me suis rajouté une contrainte. Je ne voulais pas faire une carte qui démodule directement le signal qu’elle génère. L’idée était d’enregistrer un signal FSK sous forme de fichier audio puis de le démoduler.

Caractéristique de la modulation FSK :

Débit = 300 bauds ; fréquence « 0 » = 1300 Hz ; fréquence « 1 » = 2100 Hz.

Modulateur FSK

Facile de faire un modulateur FSK avec PSoC Creator !

Modulateur FSK PSOC. UART + WaveDAC + PGA
Modulateur FSK PSoC

L’UART sert à générer le signal binaire. Il transmet en boucle une chaine de caractères.

Le WaveDAC8 est un composant extraordinaire. Il permet de générer pratiquement n’importe quel signal. Voici comment il est configuré.

Configuration du WaveDAC

C’est tout simple, si le signal sur l’entrée ws est à 0, on transmet le signal Waveform 1 : ici un sinus à 1302 Hz d’amplitude c-à-c = 2V centré sur 1,024 V et si le signal ws est à 1, on transmet le signal Waveform 2 : ici un sinus à 2101 Hz de même amplitude.

Le PGA derrière est programmé avec un gain de 2 pour exploiter toute la dynamique 0/5V.

Il ne reste plus qu’à numériser le signal avec une carte son. Je connecte la sortie du PSoC sur l’entrée line puis REC pendant une quinzaine de secondes ! J’utilise Audacity, voilà le résultat !

Signal FSK numérisé. fenetre Audacity temporel + spectre
Signal FSK numérisé

On remarque bien les 0 (durées ou la fréquence est basse) et les 1 (durées où la fréquence est haute). Le spectre montre bien 2 pics à 1300 Hz et 2100 Hz.

Vous pouvez écouter, ce n’est guère mélodieux !

Voilà, mon signal est généré et sauvegardé sous forme de fichier wav sur mon PC. Il ne reste plus qu’à le démoduler !

Démodulateur

Principe

Pour réaliser le démodulateur, je me suis inspiré de deux notes d’applications publiées par Cypress (Infineon maintenant).

Simplified FSK detection – PSoC1

Low-Frequency FSK Modulation and Demodulation – PSoC5

Le principe est le suivant : on multiplie le signal FSK par le signal FSK retardé :

multiplication signal par signal retardé
Démodulateur FSK à retard

Si notre signal est sin(ω.t) et notre retard d, on obtient en sortie du multiplieur :

sin(ω.t).sin(ω(t+d)) = 1/2. [cos(2.ω.t+ω.d)-cos(ω.d) ]

Si on ne s’intéresse qu’au terme basse fréquence, il reste -1/2.cos(ω.d)

L’idée est de choisir le retard d optimum tel que l‘écart entre cos(ω0.d) et cos(ω1.d) soit le plus grand possible (idéalement, il faudrait un cos à -1 pour ω=ω0 et un cos à +1 pour ω=ω1).

Traçons avec un tableur cos(ω0.d)-cos(ω1.d) en fonction de d (avec ω0= 2π.1300 et ω1=2π.2100) :

cos(wo.d)-cos(w1.d) en fonction de d

La fonction est maximale pour un retard d = 0,727 ms = 727 µs. Voyons maintenant comment mettre tout ça en œuvre.

Mise en œuvre

Le schéma du démodulateur sous PSoC Creator est le suivant :

Schéma du démodulateur FSK

L’étage d’entrée est constitué d’un comparateur qui va transformer notre signal FSK sinusoïdal en signal carré. Pour cela le signal entrant est décalé par un circuit C-R (composants extérieurs) à Vdda/2 puis comparé à cette valeur avec le comparateur Comp_1. Remarquez l’utilisation du suiveur sur la tension de référence Vdda/2 (Vdda/2 = la moitié de la tension d’alimentation analogique, ici Vdda = 5V).

On échantillonne ensuite le signal. Comment choisir la fréquence d’échantillonnage ? L’idéal est d’avoir une fréquence à la fois multiple de 1300 Hz et de 2100 Hz. Calculons le PPCM de 1300 et 2100, on obtient 27300. En effet 27300 = 21*1300 = 13*2100. Vous voyez que ca sert à quelque chose le PPCM (le plus petit commun multiple) vu au collège ! On utilise donc une fréquence d’échantillonnage de 27300 Hz.

Le fameux retard de 727 µs est réalisé par un registre à décalage. L’horloge de 27300 Hz a une période de 36,63 µs. Pour obtenir 727 µs, on utilise un registre à décalage de longueur 20. 20 périodes de 27300 Hz font un retard de 732,6 µs pas bien loin de nos 727 µs.

On réalise la multiplication des deux signaux avec le ou exclusif, c’est assez classique. Enfin, on utilise un « glitch filter » ou « déglitcheur » de taille N=5. J’avoue que le 5 a été choisi un peu au pif, on doit pouvoir optimiser. Ce composant permet d’éliminer par « filtrage » tout bit parasite. Son principe est expliqué ici : lien vers la doc.

Cette structure génère un «1» uniquement lorsque les N échantillons actuels et précédents sont «1», et un «0» uniquement lorsque les N échantillons  actuels et précédents sont «0». Sinon, la sortie est inchangée par rapport à sa valeur actuelle.

L’UART, enfin permet de décoder le signal et on affiche les caractères reçus sur l’afficheur LCD.

Résultats

Et ça marche ? Relions la sortie de la carte son (jack) à l’entrée de la maquette.

Regardons ici les résultats obtenus sur mon vieux scope analogique.

Relevé à l'oscilloscope signal FSK et signal démodulé
Relevé oscilloscope démodulateur FSK

En haut, le signal modulé FSK à l’entrée, en bas le signal numérique démodulé. La démodulation FSK est fonctionnelle !

Quelques signaux intermédiaires relevés à l’analyseur logique :

relevé signaux logiques démodulateur FSK

De haut en bas : Le signal FSK en sortie du comparateur (fsk_comp), le signal de sortie du Ou exclusif (xor) et le signal en sortie du « déglitcheur » (data_out). La sortie du ou exclusif est plein d’impulsions parasites (normal, ce sont les termes en 2.ω !). Admirez l’intérêt du « déglitcheur ».

Et voila ce que l’on obtient sur l’afficheur LCD de la maquette :

Affichage du message reçu
Maquette démodulateur FSK

Je vous laisse découvrir le message décodé !

Et voilà ! Un modulateur – démodulateur (un modem) FSK dans un PSoC ? C’est possible ! Il n’y a que deux composants extérieurs : une résistance et un condensateur.

Et qui on est, hein ?

Visual Studio C# pour électroniciens

Dans nos projets de BTS, bien souvent, nous mettons en œuvre des capteurs qui mesurent des grandeurs physiques interfacés à un microcontrôleur. Longtemps nos IHM, nos Interfaces Homme-Machine, se sont limités à des leds, des boutons-poussoirs, des petits afficheurs, avec éventuellement une sortie d’informations vers un PC sous forme communication série.

Rapidement, le besoin de réaliser des IHM plus évolués s’est fait sentir. Ça serait quand même sympa de pouvoir piloter nos projets à partir d’un PC ! C’est comme cela que nous nous sommes lancés sur Visual Studio C#, pour réaliser des petites applications Windows pour communiquer avec nos projets/systèmes.

Les TPs présentés ici sont abordés en milieu de BTS 2eme année. les étudiants ont déjà une première maitrise du langage C et quelques connaissances en POO (programmation orientée Objet) en C++.

TP n°1 : premiers pas Visual Studio

TP1 : Calculateur Résistance diode

Un premier TP/tuto assez simple qui permet de réaliser une application Windows permettant de calculer la résistance associé à une LED.

TP 2 : Gestion des évènements et du temps

Compte à rebours Visual Studio
Compte à rebours Visual Studio

Un deuxième TP qui permet de réaliser un petit minuteur (pour faire cuire des œufs à la coque, par exemple).

TP3 : Gestion de la liaison série

Terminal série Visual Studio
Terminal série

Le TP consiste à réaliser un petit moniteur série (comme le moniteur série d’Arduino).

J’ai appris Visual Studio C# sur le tas, les solutions ne sont peut être pas optimales. Si je raconte des bêtises dans mes TPs, merci de me le faire savoir en laissant un commentaire.

Faire des IHM Windows pour piloter nos systèmes ? On sait faire !

Et qui on est, hein ?

« Older posts

© 2023 Louis Reynier

Theme by Anders NorenUp ↑

Cookie Consent Banner by Real Cookie Banner