« SE3Groupe2025-6 » : différence entre les versions

De projets-se.plil.fr
Aller à la navigation Aller à la recherche
Ligne 233 : Ligne 233 :
----
----


Premier Système Embarqué - IoT 3 - B6 - '''[https://projets-se.plil.fr/mediawiki/index.php/SE3Groupe2025-6 Notre Wiki]''' - ''[https://vnc.plil.fr/ssh/?16 Accès à notre machine de TP (zabeth16)]''
''[https://vnc.plil.fr/ssh/?16 Accès à notre machine de TP (zabeth16)]''


== Travail effectué ==
== Travail effectué ==
Ligne 243 : Ligne 243 :
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 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 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 :
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 :

Version du 26 mai 2026 à 13:47

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 :

Schéma KiCad

Résultat du routage :

Capture écran du PCB KiCad

Vue 3D de la carte :

Vue 3D

Photo de la carte soudée :

Recto Carte
Verso Carte

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

clignote_led.c


Code pour allumer/éteindre les LEDs avec les boutons : OK

switch_led.c


Code pour allumer/éteindre les LEDs via le terminal (communication LUFA) : OK

led_control.c


Code pour communiquer avec l'AVR ISP (trouver la signature de l'Arduino UNO) : OK

read_signature.c

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 :

Schéma KiCad
Schéma KiCad


Résultat du routage :

Schéma KiCad
PCB KiCad
Schéma KiCad
Vue 3D KiCad

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).
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 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 :