SE3Groupe2025-6

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

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 :

Photo de la carte en fonctionnement alimentée via l'USB
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 :

Photo de la carte en fonctionnement alimentée via le LIPO
Vidéo de la carte en fonctionnement alimentée via le LIPO