Module Python

Installation

Pour installer ce module, vous pouvez utiliser la commande

python3.14 -m pip install xphs1903@1

Ou pour installer le module dans un nouvel environnement virtuel,

python3.14 -m pipenv install xphs1903@1

Utilisation

Ce module assume que son compagnon Arduino a aussi été installé. Une fois le programme Arduino inclut en exemple compilé et téléchargé, vous pouvez lancer le programme demo.py ainsi:

python3.14 -m xphs1903

Pour l’inclure à votre projet, utilisez l’énoncé import xphs1903 normale de Python.

Implémentation

Programme de base pour le contrôle, l’acquisition et l’analyse avec Arduino.

Ce script permet d’envoyer des requêtes à un programme Arduino correspondant. Les réponses reçues sont ensuite analysées et affichées en direct. Il s’agit d’un programme de démonstration et de départ pour le cours PHS1903 à l’automne 2025.

Le programme a été développé par Jacques Massicotte et Émile Jetzer, techniciens pour le département de génie physique de Polytechnique Montréal.

Les commentaires et la documentation de ce programme sont très verbeux, et vous réfèreront souvent à des ressources externes. SVP référez-vous à ces ressources avant de venir poser vos questions à un technicien.

xphs1903.loop(res: DataFrame, ser: Serial, fig: DataFrame'>, <class 'serial.serialposix.Serial'>, <class 'matplotlib.figure.Figure'>)[source]

Prend de nouvelles mesures et les affiche.

Paramètres:
  • res (DataFrame) – Liste des mesures prises. Structurée en [t, pd1, pd2, ...]

  • ser (Serial) – Objet de communication série avec lequel communiquer pour obtenir les données.

  • fig (Figure) – Figure contenant les différents graphiques

Renvoie:

  • res (list[list[int]])

  • ser (serial.Serial)

  • fig (matplotlib.figure.Figure)

  • derniere_mesure (int)

Type renvoyé:

(<class “pandas.DataFrame”>, <class “serial.serialposix.Serial”>, <class “matplotlib.figure.Figure”>)

xphs1903.setdown(res: list[list[int]], ser: Serial, fig: Figure)[source]

Ferme tous les objets en ayant besoin.

Paramètres:
  • res (list[list[int]]) – Liste des mesures prises, à effacer

  • ser (Serial) – Objet de communication série, à fermer

  • fig (Figure) – Figure, à fermer via pyplot

xphs1903.setup(pds: int = 2, port: str = '/dev/cu.usbmodemFD1301', debit: int = 1000000, delai: int = 0.005) -> (<class 'pandas.DataFrame'>, <class 'serial.serialposix.Serial'>, <class 'matplotlib.figure.Figure'>)[source]

Initialisation du programme.

Initialise le programme avec les paramètres transmis, et retourne les objets configurés.

Paramètres:
  • debit (int)

  • pds (int) – Le nombre de broches/photodiodes à mesurer

  • port (str) – Le port série à utiliser

  • delai (int) – Le temps d’attente maximal pour une lecture de données

Renvoie:

  • res – Liste des mesures, au format [t, pd1, pd2, ...]

  • ser – Objet de communication série

  • fig – Figure pour l’affichage des données

  • derniere_mesure – Valeur initiale de 0

Type renvoyé:

(<class “pandas.DataFrame”>, <class “serial.serialposix.Serial”>, <class “matplotlib.figure.Figure”>)

Définitions uniformes

xphs1903.defs.BRUT: int = 0

Index des graphiques de données dans fig.axes

xphs1903.defs.DEBIT: int = 1000000

Débit de communication

Doit correspondre à la constante équivalente dans le programme oxy_base.ino sinon les programmes ne pourront pas communiquer.

115200 est le débit le plus rapide pratique pour les Arduino nano et micro. Un débit plus rapide cause des problèmes au niveau de l’acquisition et de la fiabilité. Voir la documentation de serial ou de Serial.begin pour plus de détails.

xphs1903.defs.DELAI: float = 0.005

Délai maximal en secondes avant d’abandonner une tentative de lecture

Certaines valeurs spéciales sont décrites dans la documentation officielle de serial. Comme la fréquence de transfert d’un bit est d’environ 100kHz (voir DEBIT), le délai ne devrait pas être plus petit que la période associée (0.01ms) multipliée par le nombre de bits envoyés. Pour des chiffres, on peut assumer du ASCII 8b, avec un message long (eg: 1021 1012) faisant donc un peut moins de 80b, on doit avoir au minimum un délai de 0.8ms. Avec une petite marge, on arrive à 0.005s.

xphs1903.defs.FFT: int = 1

Index des graphiques de transformée de Fourier dans fig.axes

xphs1903.defs.PORT: str = '/dev/cu.usbmodemFD1301'

Port série à utiliser pour le programme

Sous Windows, ressemblera à “COM2”. Sous les autres plate-formes, ressemblera à “/dev/cu.usbmodemFA13201”. Le module serial a un outil dédié à la découverte des ports série disponibles, serial.tools.list_ports, ou serial.tools.list_ports.comports().

Communication avec le micro-contrôleur

xphs1903.mesure.prendre_mesure(res: R, ser: Serial) R[source]

Prise d’une mesure

prendre_mesure, pour chaque liste de mesures contenues dans res, envoie une requête à l’Arduino puis lit la valeur reçue.

Paramètres:
  • res (R) – Liste des mesures prises. Structurée en [t, pd1, pd2, ...]

  • ser (Serial) – Objet de communication série avec lequel communiquer pour obtenir les données.

Renvoie:

Avec les nouvelles valeurs.

Type renvoyé:

res

Analyse des données

xphs1903.analyse.fft(res: DataFrame, N_max: int = 1700, nom_cadre: str = 'hann') tuple[array, ...][source]

Retourne la transformée de Fourier des données contenues dans res.

C’est une bonne idée de personnaliser cette fonction selon vos besoins. Pour bien comprendre ce que fait la fonction, vous devriez consulter scipy.signal.get_window(), numpy.fft.rfft() et numpy.fft.rfftfreq(). Pour les mathématiques derrière, consultez dans un premier lieu votre chargé de groupe.

Paramètres:
  • nom_cadre (str)

  • res (DataFrame) – Liste des mesures, au format [t, pd1, pd2, ...]

  • N_max (int) – Nombre de mesures à utiliser

Renvoie:

  • fs – Fréquences associées à la transformée

  • ys – Transformées.

Type renvoyé:

tuple[array, …]

Affichage des données

xphs1903.afficher.plot(res: DataFrame, fig: Figure) None[source]

Mise à jour du graphique avec de nouvelles données.

Met les graphiques contenus dans fig à jour avec les données de res.

Paramètres:
  • res (DataFrame) – Liste des mesures prises. Structurée en [t, pd1, pd2, ...]

  • fig (Figure) – Figure contenant les différents graphiques

Type renvoyé:

None