lundi 20 décembre 2021

Étude du pendule avec un potentiomètre et Arduino

Récemment, mon attention a été attirée par un article de la revue The Physics Teacher* dans lequel on présente un montage expérimental qui permet d'étudier le mouvement d'un pendule au moyen d'un potentiomètre branché à une carte Arduino. Dans ce montage, le potentiomètre est utilisé pour mesurer en temps réel la position angulaire du pendule.

L'article du Physics Teacher propose l'analyse d'un "pendule pesant"  constitué d'une tige rigide de masse non-négligeable et d'une masse oscillante de taille non-négligeable. De mon côté, j'ai fait quelques essais avec un dispositif s'apparentant plutôt à un "pendule simple" (qui est, en principe, constitué d'une masse ponctuelle suspendue à une ficelle de masse négligeable).

Mon pendule était constitué d'une masse de 500 grammes suspendue à un fil de fer de 91 cm de longueur. L'autre extrémité du fil de fer était attachée à l'axe d'un potentiomètre.


Il faut prendre soin de fixer le fil de fer de façon à ce qu'il oblige la partie rotative du potentiomètre à tourner en suivant le mouvement du pendule.


Bien entendu, le potentiomètre était branché à une des entrées analogiques de l'Arduino. Puisque le signal n'excédait jamais 3,3 V pendant l'oscillation du pendule, j'ai choisi d'utiliser une tension de 3,3 V comme référence, afin d'améliorer un peu la résolution de la conversion analogique-numérique (j'ai relié la sortie 3V3 à l'entrée AREF, et j'ai ajouté la commande "analogReference(EXTERNAL)" au début du sketch). 

Dès les premiers essais, le moniteur série de l'IDE Arduino a montré des résultats encourageants. Je m'attendais à un amortissement plus important, à cause du couple nécessaire pour faire tourner le potentiomètre. Avec une masse de 500 grammes, on peut facilement le négliger si on se limite à quelques oscillations.


J'ai ensuite utilisé un sketch qui mesurait également le temps associé à chaque mesure de position angulaire afin de coller dans un tableur les mesures affichées dans le moniteur série.



Mis à part un aplatissement un peu suspect au sommet,  la courbe concorde assez bien avec ce que prévoient les équations théoriques. La période du pendule, mesurée au moyen des données obtenues, est de 1,92 seconde, ce qui correspond bien avec ce qu'on peut calculer théoriquement pour un pendule  simple de 91 cm de longueur.


* Inexpensive Physical Pendulum with Arduino, par Milentije Lukovic, Vanja Lukovic, Milos Bozic et Vojislav Vujicic, The Physics Teacher vol. 59, numéro 6, Septembre 2021, pages 432-435 (American Association of Physics Teachers).


À lire également


Yves Pelletier (Facebook)



dimanche 24 octobre 2021

Écriture et lecture de fichiers avec le Raspberry Pi Pico (micropython)

Puisque l'environnement MicroPython comporte un système de fichiers, il est très facile de créer et de lire des fichiers dans la mémoire flash interne du Raspberry Pi Pico. De cette façon, vous pouvez stocker des informations dont votre script a besoin pour bien fonctionner (des préférences de l'utilisateur, par exemple) , enregistrer des mesures prises périodiquement (data logging), etc.  

Évidemment, vos fichiers ne doivent pas être trop volumineux (nous disposons d'un espace total de 1,4 Mo) et leur mise à jour ne doit pas être trop fréquente (afin de ne pas provoquer une usure prématurée de votre Raspberry Pi Pico). Pour de nombreuses applications, l'utilisation d'une carte SD (ou d'un autre périphérique de stockage) s'avère préférable, voire nécessaire.


Exemple #1

Dans ce premier exemple, un nombre aléatoire est écrit à l'intérieur d'un fichier texte intitulé "hasard.txt". Le fichier sera automatiquement créé s'il n'existait pas déjà. Puisque j'ai utilisé l'argument "a" (append), le nouveau nombre est ajouté à la fin du fichier, dont le contenu initial demeure intact.

Dans un deuxième temps, le fichier est lu (notez l'utilisation de l'argument "r": read) et son contenu est affiché dans la console.

-

-

Exemple #2

Dans ce deuxième exemple, j'enregistre dans un fichier la date et l'heure de la dernière exécution du script. Dans un premier temps, on ouvre le fichier "date.txt" pour connaître la date et l'heure de l'exécution précédente du fichier.  Il est possible que ce fichier n'existe pas encore, d'où l'utilisation de try/except pour éviter que le script s'interrompe avec un message d'erreur.

Ensuite, le fichier est ouvert en écriture pour remplacer l'ancienne date par la nouvelle (cette fois, l'argument est "w", write, et le contenu précédent est donc remplacé par la nouvelle information).

-

-

Gestion des fichiers

Si vous programmez votre Pico avec Thonny, le volet "Fichiers" affiche la liste de tous les fichiers enregistrés dans la mémoire interne du Pico. Il est possible d'effacer un fichier grâce à un clic droit de la souris­.

e

(Si ce volet n'est pas visible, vous pouvez le faire apparaître en cochant "Fichiers" dans le menu "Affichage".)


Il est également possible de gérer les fichiers grâce à un script en micropython.  Le script ci-dessous, par exemple, affiche la liste des fichiers présents sur le Pico:

-

-

À lire également

Yves Pelletier (Facebook)


jeudi 12 août 2021

Horloge temps réel DS3231 et Raspberry Pi Pico (MicroPython)

Tel que mentionné dans un récent article, le Raspberry Pi Pico comporte une horloge temps réel (RTC) interne qui permet à nos programmes de connaître la date et l'heure à n'importe quel moment. Cependant, cette horloge interne retourne au 1er janvier 2021 chaque fois que l'alimentation du Raspberry Pi Pico est interrompue.

Pour éviter cet irritant, on peut utiliser un module RTC externe.  Grâce à sa pile, le module RTC continuera de se mettre à jour pendant que le Raspberry Pi Pico sera hors tension.

Module DS3231

Le module RTC DS3231 est économique et très facile à trouver. Les données sont communiquées par I2C, et une pile de 3 V (qui pourra typiquement fonctionner quelques années sans nécessiter de remplacement) assure le fonctionnement continu de l'horloge.

Mon module DS3231 ne comporte pas de support pour y insérer une pile, ce qui explique la présence de ruban gommé pour tenir la pile! Un avantage, c'est que je peux utiliser n'importe quel format de pile 3 V.

Connexions

J'ai branché le module DS3231 au Raspberry Pi Pico de la façon suivante:

  • Broche "+ " du module DS3231: sortie 3,3 V du Raspberry Pi Pico
  • Broche "D" du module DS3231: broche GP8 du Raspberry Pi Pico
  • Broche "C" du module DS3231:  broche GP 9 du Raspberry Pi Pico
  • Broche "-" du module DS3231: broche GND du Raspberry Pi Pico

Si votre module comporte une broche identifiée par la mention "NC", vous n'avez pas à connecter cette broche.

Bibliothèque MicroPython uRTC par Adafruit

La bibliothèque uRTC d'Adafruit permet de contrôler quelques modèles courants d'horloges temps réel (DS1307, DS3231 et PCF8523). Adafruit ne supporte plus cette bibliothèque depuis que la compagnie a choisi de prioriser CircuitPython plutôt que MicroPython. Malgré tout, uRTC demeure disponible et fonctionnelle.

Comme d'habitude, il faut copier le fichier urtc.py dans le Raspberry Pi Pico afin de pouvoir profiter des fonctionnalités de cette bibliothèque­.


Script #1: consulter la date et l'heure

Voici un script qui affiche la date et l'heure une fois par seconde.  La méthode datetime() (utilisée à la ligne 21) retourne la mesure du temps sous la forme d'un DateTimeTuple contenent l'année, le mois, le jour, le jour de la semaine, l'heure, la minute, la seconde et la milliseconde. Il est facile d'extraire de ce tuple les informations qui nous intéressent.


-

-

Script #2: régler la date et l'heure

Si la date et l'heure fournies par le module DS3231 sont incorrectes, il est facile de les modifier en utilisant encore une fois la méthode datetime, mais en fournissant comme argument le DateTimeTuple correspondant à la valeur désirée.

Par exemple, pour régler le module RTC à 11 heures, 29 minutes et 45 secondes le 12 aoùt 2021, on peut écrire:

urtc.datetime_tuple(year=2021, month=8, day=12, hour=11, minute=29, second=45)

Le script ci-dessous permet de régler la date et l'heure du module DS3231.

-

-

À lire également


Yves Pelletier (Facebook)