« SE3Groupe2025-6 » : différence entre les versions
(→Bilan) |
|||
| (9 versions intermédiaires par le même utilisateur non affichées) | |||
| Ligne 82 : | Ligne 82 : | ||
Résultat du routage : | Résultat du routage : | ||
[[Fichier:2025-PSE-B6-PCB. | [[Fichier:2025-PSE-B6-PCB.png|alt=Schéma KiCad|centré|vignette|800x800px|PCB KiCad]] | ||
[[Fichier:2025-PSE-B6-3D. | [[Fichier:2025-PSE-B6-3D.png|alt=Schéma KiCad|centré|vignette|800x800px|Vue 3D KiCad]] | ||
Photo de la carte soudée : | Photo de la carte soudée : | ||
== PROGRAMMATION == | |||
Pour réaliser la partie logicielle de la montre, nous avons développé le programme embarqué en C pour le microcontrôleur ATmega32U4. ''[(Voir /Logiciel)](https://gitea.plil.fr/gsailly/2025_PSE_B6_gsailly_bjoumier/src/branch/main/Logiciel)'' | |||
Nous avons utilisé plusieurs bibliothèques afin de faciliter la gestion des différents périphériques : | |||
* '''U8G2''' : gestion de l'écran OLED SSD1306 | |||
* '''LUFA''' : gestion de la communication USB | |||
* pilotes personnalisés pour : | |||
** le Bluetooth HC-05 | |||
** le capteur MAX30102 | |||
** l'I2C | |||
** les timers | |||
** la gestion de l'heure | |||
=== Structure du projet === | |||
<pre> | |||
Logiciel/ | |||
├── montre_connectee/ | |||
│ ├── include/ | |||
│ │ └── LUFA/ | |||
│ ├── lib/ | |||
│ │ └── U8g2/ | |||
│ ├── src/ | |||
│ │ ├── main.c | |||
│ │ ├── display.c | |||
│ │ ├── display.h | |||
│ │ ├── i2c.c | |||
│ │ ├── i2c.h | |||
│ │ ├── max30102.c | |||
│ │ ├── max30102.h | |||
│ │ ├── timekeeper.c | |||
│ │ ├── timekeeper.h | |||
│ │ ├── timer.c | |||
│ │ ├── timer.h | |||
│ │ ├── uart.c | |||
│ │ ├── uart.h | |||
│ │ ├── usb_comm.c | |||
│ │ └── usb_comm.h | |||
│ └── Makefile | |||
</pre> | |||
=== Fonctionnement général === | |||
Le programme initialise : | |||
* l'écran OLED, | |||
* la communication Bluetooth UART, | |||
* les timers, | |||
* la gestion du temps, | |||
* ainsi que le capteur cardiaque MAX30102. | |||
L'heure peut être synchronisée via Bluetooth grâce à l'application '''Serial Bluetooth Terminal''' sur tablette ou smartphone. | |||
Un message au format suivant est envoyé : | |||
<pre> | |||
T14:30:00 | |||
</pre> | |||
Le microcontrôleur lit ensuite cette trame et met à jour l'horloge affichée à l'écran. | |||
=== Affichage === | |||
L'écran affiche : | |||
* l'heure actuelle, | |||
* le rythme cardiaque en BPM (le capteur étant grillé, nous avons choisi d'afficher une valeur de 80 BPM fixe), | |||
* ainsi qu'une interface graphique réalisée avec la bibliothèque U8G2. | |||
=== Communication Bluetooth === | |||
Le module '''HC-05''' communique avec l'ATmega32U4 via l'UART à 9600 bauds. | |||
La réception Bluetooth est gérée directement dans la boucle principale du programme. | |||
=== Capteur cardiaque === | |||
Le capteur '''MAX30102''' communique via le protocole I2C. | |||
Nous avons développé un pilote permettant : | |||
* l'initialisation du capteur, | |||
* la lecture des valeurs IR, | |||
* ainsi que le calcul du rythme cardiaque. | |||
=== Compilation === | |||
Le projet est compilé avec <code>avr-gcc</code> via un <code>Makefile</code>. | |||
Effacer : | |||
<syntaxhighlight lang="bash"> | |||
make clean | |||
</syntaxhighlight> | |||
Compilation : | |||
<syntaxhighlight lang="bash"> | |||
make all | |||
</syntaxhighlight> | |||
Appuyer sur les boutons NHWB (maintenir) et RESET (1 pression) puis relâcher NHWB pour pouvoir re-flasher la carte. | |||
Téléversement : | |||
<syntaxhighlight lang="bash"> | |||
make upload | |||
</syntaxhighlight> | |||
Débrancher puis rebrancher la carte. | |||
=== Erreurs / Points d'amélioration === | |||
==== Erreurs ==== | |||
* Mauvaise empreinte pour le crystal (empreinte légèrement trop petite). | |||
* Nous avons voulu tester le capteur de BPM avant d'avoir le régulateur de tension, ce qui a pu le griller (en plus de l'avoir soudé à une température trop élevée). | |||
[[Fichier:capteur_bpm_grille.jpeg|vignette|Photo du Capteur de BPM grillé]] | |||
* Nous avions utilisé un mauvais baudrate (115200 au lieu de 9600), ce qui nous a fait perdre entre 30 et 45 minutes. | |||
* Mauvais paramétrage de l'horloge qui prenait 8 secondes à réaliser une instruction d'1 seconde, ce qui nous a fait perdre entre 15 et 30 minutes. Nous avons résolu ce problème grâce aux 4 lignes de code fournies dans le cours de Mr Redon ainsi qu'en remplaçant le chiffre 16 (MHz) par 8 (MHz) dans le code <code>uart.c</code> : | |||
<syntaxhighlight lang="c"> | |||
CLKSEL0 = 0b00010101; // sélection de l'horloge externe | |||
CLKSEL1 = 0b00001111; // minimum de 8Mhz | |||
CLKPR = 0b10000000; // modification du diviseur d'horloge (CLKPCE=1) | |||
CLKPR = 0; // 0 pour pas de diviseur (diviseur de 1) | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="c"> | |||
uint16_t ubrr = (F_CPU / 8 / baud) - 1; | |||
</syntaxhighlight> | |||
==== Points d'amélioration ==== | |||
* Utilisation d'un levier/interrupteur pour passer de l'alimentation USB à l'alimentation sur batterie. | |||
* Allumer la LED D4 qui indique le passage de la carte à l'alimentation sur batterie. | |||
* Ajouter des boutons sur la carte qui auraient permis de régler l'heure directement dessus (1 pression rajoute +1 à l'heure ou aux minutes ou aux secondes). | |||
* Ajouter une sorte de « joystick » qui aurait pu servir à modifier l'heure (déplacement gauche pour reculer, déplacement droit pour avancer, déplacement haut pour passer à l'unité suivante, déplacement vers le bas pour passer à l'unité précédente). | |||
* Ajouter une molette pour régler l'heure. | |||
---- | |||
''[https://vnc.plil.fr/ssh/?16 Accès à notre machine de TP (zabeth16)]'' | |||
== Travail effectué == | == Travail effectué == | ||
Séance 1 : Découverte projet + Création GIT et WIKI + Choix projet réalisé | Séance 1 : Découverte projet + Création GIT et WIKI + Choix projet réalisé. | ||
Séance 2 : Schématique OK (Mr Boé) | Empreintes OK -> placement des composants (à faire) | Séance 2 : Schématique OK (Mr Boé) | Empreintes OK -> placement des composants (à faire). | ||
Séance 3 à 5 : Ajustements du schéma, modifications de composants (module de batterie, charge, régulateur de tension) et Routage de la carte. | |||
Séance 6 : Corrections finales PCB (si validé par Mr Boe) et Refonte graphique du Wiki et du Git (notamment "infos_globales_proj.md"). | |||
Séance 7 jusqu'à la fin : Soudure des composants et programmation de la carte. Rédaction Wiki et readme sur GIT | |||
== Bilan == | == Bilan == | ||
Vidéo très courte et en basse résolution de la carte en fonctionnement USB : | |||
[[Fichier:carte_fonctionnement_usb.jpeg|vignette|centre|Photo de la carte en fonctionnement alimentée via l'USB]] | |||
[[Fichier:carte_fonctionnement_usb.mp4|vignette|centre|Vidéo de la carte en fonctionnement alimentée via l'USB]] | |||
Vidéo très courte et en basse résolution de la carte en fonctionnement LIPO : | |||
[[Fichier:carte_fonctionnement_lipo.jpeg|vignette|centre|Photo de la carte en fonctionnement alimentée via le LIPO]] | |||
[[Fichier:carte_fonctionnement_lipo.mp4|vignette|centre|Vidéo de la carte en fonctionnement alimentée via le LIPO]] | |||
Version actuelle datée du 26 mai 2026 à 14:00
Programmation des systèmes embarqués
Carte électronique
Carte réalisée en utilisant le logiciel KiCAD : Fichier:2025-PSE-6-Prog.zip.
Schéma électronique de la carte :
Résultat du routage :
Vue 3D de la carte :
Photo de la carte soudée :
Vidéo très courte et en basse résolution de la carte en fonctionnement :
Cliquer pour voir la vidéo Carte en fonctionnement
Programmation
Code pour faire clignoter les LEDs : Ok
Code pour allumer/éteindre les LEDs avec les boutons : OK
Code pour allumer/éteindre les LEDs via le terminal (communication LUFA) : OK
Code pour communiquer avec l'AVR ISP (trouver la signature de l'Arduino UNO) : OK
Archive des fichiers descripteurs, minimal et makefile pour LUFA : Fichier:2025-PSE-6 arch lufa.zip.
Bilan
Séance 1 : Schématique + routage (demande fabrication carte)
Séance 2 : Cours (1h) et Soudage des premiers composants (1h)
Séance 3 : Carte complètement soudée
Séance 4 : Programmation de la carte (clignote_led.cet switch_led.c) + changement d'une LED cramée lors de la soudure
Eventuellement la vidéo brève du fonctionnement complet du programmateur : Média:2025-PSE-B6-PROG-final.mp4.
Premier système embarqué
Archive GIT
Mon archive GIT pour le projet KiCAD et pour les programmes : [1].
Structure : Matériel (y compris production - gerber, bill of materials) / Logiciel / Documentation (e.g. documentation technique).
Description du système embarqué
Objectif : Réaliser une montre connectée qui affiche l'heure et capture les BPM de l'utilisateur + autres fonctions si réalisables (podomètre, alerte téléphone si BPM anormal)
Carte électronique
Carte réalisée en utilisant le logiciel KiCAD :
Schéma électronique de la carte :
Résultat du routage :
Photo de la carte soudée :
PROGRAMMATION
Pour réaliser la partie logicielle de la montre, nous avons développé le programme embarqué en C pour le microcontrôleur ATmega32U4. [(Voir /Logiciel)](https://gitea.plil.fr/gsailly/2025_PSE_B6_gsailly_bjoumier/src/branch/main/Logiciel)
Nous avons utilisé plusieurs bibliothèques afin de faciliter la gestion des différents périphériques :
- U8G2 : gestion de l'écran OLED SSD1306
- LUFA : gestion de la communication USB
- pilotes personnalisés pour :
- le Bluetooth HC-05
- le capteur MAX30102
- l'I2C
- les timers
- la gestion de l'heure
Structure du projet
Logiciel/ ├── montre_connectee/ │ ├── include/ │ │ └── LUFA/ │ ├── lib/ │ │ └── U8g2/ │ ├── src/ │ │ ├── main.c │ │ ├── display.c │ │ ├── display.h │ │ ├── i2c.c │ │ ├── i2c.h │ │ ├── max30102.c │ │ ├── max30102.h │ │ ├── timekeeper.c │ │ ├── timekeeper.h │ │ ├── timer.c │ │ ├── timer.h │ │ ├── uart.c │ │ ├── uart.h │ │ ├── usb_comm.c │ │ └── usb_comm.h │ └── Makefile
Fonctionnement général
Le programme initialise :
- l'écran OLED,
- la communication Bluetooth UART,
- les timers,
- la gestion du temps,
- ainsi que le capteur cardiaque MAX30102.
L'heure peut être synchronisée via Bluetooth grâce à l'application Serial Bluetooth Terminal sur tablette ou smartphone.
Un message au format suivant est envoyé :
T14:30:00
Le microcontrôleur lit ensuite cette trame et met à jour l'horloge affichée à l'écran.
Affichage
L'écran affiche :
- l'heure actuelle,
- le rythme cardiaque en BPM (le capteur étant grillé, nous avons choisi d'afficher une valeur de 80 BPM fixe),
- ainsi qu'une interface graphique réalisée avec la bibliothèque U8G2.
Communication Bluetooth
Le module HC-05 communique avec l'ATmega32U4 via l'UART à 9600 bauds.
La réception Bluetooth est gérée directement dans la boucle principale du programme.
Capteur cardiaque
Le capteur MAX30102 communique via le protocole I2C.
Nous avons développé un pilote permettant :
- l'initialisation du capteur,
- la lecture des valeurs IR,
- ainsi que le calcul du rythme cardiaque.
Compilation
Le projet est compilé avec avr-gcc via un Makefile.
Effacer :
make clean
Compilation :
make all
Appuyer sur les boutons NHWB (maintenir) et RESET (1 pression) puis relâcher NHWB pour pouvoir re-flasher la carte.
Téléversement :
make upload
Débrancher puis rebrancher la carte.
Erreurs / Points d'amélioration
Erreurs
- Mauvaise empreinte pour le crystal (empreinte légèrement trop petite).
- Nous avons voulu tester le capteur de BPM avant d'avoir le régulateur de tension, ce qui a pu le griller (en plus de l'avoir soudé à une température trop élevée).
- Nous avions utilisé un mauvais baudrate (115200 au lieu de 9600), ce qui nous a fait perdre entre 30 et 45 minutes.
- Mauvais paramétrage de l'horloge qui prenait 8 secondes à réaliser une instruction d'1 seconde, ce qui nous a fait perdre entre 15 et 30 minutes. Nous avons résolu ce problème grâce aux 4 lignes de code fournies dans le cours de Mr Redon ainsi qu'en remplaçant le chiffre 16 (MHz) par 8 (MHz) dans le code
uart.c:
CLKSEL0 = 0b00010101; // sélection de l'horloge externe
CLKSEL1 = 0b00001111; // minimum de 8Mhz
CLKPR = 0b10000000; // modification du diviseur d'horloge (CLKPCE=1)
CLKPR = 0; // 0 pour pas de diviseur (diviseur de 1)
uint16_t ubrr = (F_CPU / 8 / baud) - 1;
Points d'amélioration
- Utilisation d'un levier/interrupteur pour passer de l'alimentation USB à l'alimentation sur batterie.
- Allumer la LED D4 qui indique le passage de la carte à l'alimentation sur batterie.
- Ajouter des boutons sur la carte qui auraient permis de régler l'heure directement dessus (1 pression rajoute +1 à l'heure ou aux minutes ou aux secondes).
- Ajouter une sorte de « joystick » qui aurait pu servir à modifier l'heure (déplacement gauche pour reculer, déplacement droit pour avancer, déplacement haut pour passer à l'unité suivante, déplacement vers le bas pour passer à l'unité précédente).
- Ajouter une molette pour régler l'heure.
Accès à notre machine de TP (zabeth16)
Travail effectué
Séance 1 : Découverte projet + Création GIT et WIKI + Choix projet réalisé.
Séance 2 : Schématique OK (Mr Boé) | Empreintes OK -> placement des composants (à faire).
Séance 3 à 5 : Ajustements du schéma, modifications de composants (module de batterie, charge, régulateur de tension) et Routage de la carte.
Séance 6 : Corrections finales PCB (si validé par Mr Boe) et Refonte graphique du Wiki et du Git (notamment "infos_globales_proj.md").
Séance 7 jusqu'à la fin : Soudure des composants et programmation de la carte. Rédaction Wiki et readme sur GIT
Bilan
Vidéo très courte et en basse résolution de la carte en fonctionnement USB :
Vidéo très courte et en basse résolution de la carte en fonctionnement LIPO :