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.
- 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:
- 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.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
serialou 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 (voirDEBIT), 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.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
seriala un outil dédié à la découverte des ports série disponibles,serial.tools.list_ports, ouserial.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()etnumpy.fft.rfftfreq(). Pour les mathématiques derrière, consultez dans un premier lieu votre chargé de groupe.
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