« I2L 2024 Groupe7 » : différence entre les versions
(10 versions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 86 : | Ligne 86 : | ||
* ajouter R8 et le potentiomètre pour l'écran LCD ; | * ajouter R8 et le potentiomètre pour l'écran LCD ; | ||
* ajouter le capteur de température. | * ajouter le capteur de température. | ||
=== Carte au 27/02/2025 === | |||
[[File:ISL-2024-G7-Realisation-B.jpg|thumb|center|400px|Réalisation en cours]] | |||
Non encore réalisé : | |||
* ajouter la perle de ferrite. | |||
=== Carte au 07/03/2025 === | |||
[[File:ISL-2024-G7-Realisation-C.jpg|thumb|center|400px|Réalisation terminée]] | |||
= Montage = | = Montage = | ||
= Code = | = Code = | ||
Le programme de test attaché en bas de cette page Wiki, permet de montrer que l'écran LCD, le capteur de température et le lecteur de carte microSD fonctionnent. | |||
= Démonstrations = | = Démonstrations = | ||
'''Organisation du stockage(brut) sur la carte SD''' | |||
Notre système enregistre des relevés de température et d'humidité qu'elle logue dans un bloc de la carte SD de manière contiguë. Voici comment cela se traduit : | |||
* '''Taille d’un bloc SD''' : 512 octets | |||
* '''Structure d’une entrée de journal (<code>LogEntry</code>)''' : | |||
** <code>int32_t temperature</code> : 4 octets | |||
** <code>int32_t humidity</code> : 4 octets | |||
** Total par entrée : 8 octets | |||
* '''Nombre d’entrées par bloc''' : 8 octets par entrée, donc un paquet transmis de 64 octet fait 8 échantillon . 512 octets contient donc 64 échantillons au total pour le bloc utilisé. La taille maximale d’un paquet bulk sur nos endpoints étant de 64 octet. | |||
* '''Disposition en mémoire''' : | |||
** Chaque bloc contient un tableau de 64 echantillon <code>LogEntry</code> consécutifs. | |||
** Les données sont écrites en little-endian (LSB en premier) pour chaque <code>int32_t</code>. | |||
** Pour lire un bloc « brut », on fait un simple <code>readBlock(&sd, numBloc, buffer)</code> puis on interprète <code>buffer</code> comme un <code>LogEntry buffer[64]</code>. | |||
* '''Cycle d’écriture''' : | |||
*# On remplit un tableau local <code>LogEntry logBuffer[64]</code> avec 64 relevés successifs. | |||
*# On appelle <code>writeBlock(&sd, blockNum, (uint8_t*)logBuffer)</code> pour ecrire ces 512 octets sur la SD. | |||
Deux endpoints USB : un endpoint OUT (interrupt) par lequel le PC envoie une commande (0x01 pour “read”, 0xE0 pour “erase”) et un endpoint IN (bulk) par lequel l’AVR renvoie soit un accusé d’effacement, soit la taille (2 octets) puis les 512 octets du bloc SD, découpés en huit paquets de 64 octets verrouillés à chaque <code>Endpoint_ClearIN()</code>. | |||
Quand vous tapez <code>sudo ./progr erase</code>, l’application hôte envoie 0xE0 sur l’OUT, le firmware exécute <code>erase()</code> sur la SD et renvoie “succès” ou “échec”. | |||
Quand vous tapez <code>sudo ./progr read</code>, elle envoie 0x01, le micro-lance la lecture du bloc 0, puis transfère longueur et données sur l’IN pour que votre programme hôte les affiche. | |||
Pour compiler et flasher : dans le dossier <code>./lufa-LUFA-210130-NSI/I2L/Minimal</code>, tapez <code>make clean</code> , un reset du microcontrolleur puis <code>make dfu</code> pour construire le firmware et l’envoyer en DFU sur le matériel, IL faudra quelques seconde le temps de peupler le bloc SD de données , un message "success" apparait sur l'ecran LCD pour indiquer la fin de l'opération. Ensuite, dans le répertoire de l'application hôte <code>./lufa-LUFA-210130-NSI/I2L/Minimal/USBprogBulk</code>, faites <code>make</code> pour générer l’exécutable , puis lancez <code>sudo ./proj_bulk erase</code> ou <code>sudo ./proj_bulk read</code> selon l’opération souhaitée(lecture des températures stockées ou effacement de la data sur le bloc). | |||
'''Commande de lecture de la data , démo ci dessous:''' | |||
[[Fichier:Demo 1.png|centré|sans_cadre|661x661px]] | |||
[[Fichier:Demo2.png|centré|vignette|775x775px]] | |||
'''Commande d'effacement de la data , démo ci dessous:''' | |||
[[Fichier:Erase.png|centré|vignette|1038x1038px]] | |||
Vous pouvez ensuite relancer la commande d'affichage des données de la carte SD pour voir qu'elle est vide et contient des 00 à la place | |||
[[Fichier:Demo video.mp4|vignette|Video demo ]] | |||
= Rendus = | = Rendus = | ||
Ligne 97 : | Ligne 151 : | ||
Projet KiCAD : [[File:I2L-2024-Carte-G7.zip]] | Projet KiCAD : [[File:I2L-2024-Carte-G7.zip]] | ||
Programmes : [[File:I2L-2024-Programmes-G7.zip]] | Programmes : | ||
* démonstration : [[File:I2L-2024-Programmes-G7-rex.zip]] | |||
* enregistreur de température : [[File:I2L-2024-Programmes-G7.zip]] |
Version actuelle datée du 26 avril 2025 à 21:50
Proposition de système
Le système proposé repose sur un microcontrôleur (ATmega32U4) associé à un capteur de température pour mesurer et suivre la température en temps réel. Les relevés sont affichés sur un écran LCD et enregistrés pour une analyse statistique, tandis que la connectivité USB permet le transfert des données vers un PC et la configuration des seuils d’alerte.
Fonctions clés
- Mesure
- Relevé temps réel
- Précision ±0,5°C
- Fréquence de mesure configurable
- Visualisation
- Affichage température instantanée sur écran LCD
- Interface PC pour visualisation graphique
- Export historique des données
- Analyse
- Enregistrement des températures
- Calcul statistiques (moyenne, min, max)
- Détection variations température
- Alertes sur seuils personnalisables
- Communication
- Interface USB pour transfert/configuration
- Stocker données sur mémoire embarquée
Composants
- microcontrôleur
- carte SD
- batterie
- chargeur de batterie
- capteur de température (DHT11 ou DHT22)
- écran LCD
- LEDs
Nous avons beaucoup galéré avec la prise en main de kicad , nous ne sommes pas arrivés à bien concevoir le schéma , il manque les liaisons entre les composants et aussi on a pas pu rajouter le capteur sur le schéma.
Contre-proposition
OK pour le projet.
Pour la gestion de l'écran vous pouvez vous inspirer du code des groupes 3 et 4 I2L en 2023/2024.
Pour la gestion du capteur de température/humidité référez vous à [1].
Pour la gestion de la carte SD vous pouvez regarder le projet [2] ou le projet [3].
Pour la fonctionnalité USB vous utiliserez la classe USB "vendeur spécifique" avec des points d'accès propres à votre application. Plus exactement vous prévoirez un point d'accès entrant pour récupérer les données stockées sur votre système. La première donnée récupérée sera le nombre d'échantillons à lire. Vous implanterez aussi un point d'accès sortant pour demander l'effacement des données.
Pour l'application sur PC vous utiliserez la bibliothèque C libusb-1.0
.
Proposition définitive
Répartition du travail
Carte
Schéma initial
- schéma n°1 : Fichier:I2L-2024-Carte-G7a.zip
Carte routée
Composants
- ATmega32u4 : disponible
- quartz GND24 : disponible
- perle ferrite MH2029-300Y : commandée
- potentiomètre vertical : disponible
- connecteur femelle 16 contacts : commandé
- capteur DHT11/DHT22 : disponible
- régulateur 3,3V : disponible
- releveur de niveau : disponible
- connecteur carte micro-SD : disponible
Carte au 23/02/2025
Non encore réalisé :
- ajouter la perle de ferrite ;
- ajouter les connecteurs J5, J6, J7 et J9 pour la charge ;
- ajouter le condensateur de 2,2uF pour la charge ;
- ajouter R8 et le potentiomètre pour l'écran LCD ;
- ajouter le capteur de température.
Carte au 27/02/2025
Non encore réalisé :
- ajouter la perle de ferrite.
Carte au 07/03/2025
Montage
Code
Le programme de test attaché en bas de cette page Wiki, permet de montrer que l'écran LCD, le capteur de température et le lecteur de carte microSD fonctionnent.
Démonstrations
Organisation du stockage(brut) sur la carte SD Notre système enregistre des relevés de température et d'humidité qu'elle logue dans un bloc de la carte SD de manière contiguë. Voici comment cela se traduit :
- Taille d’un bloc SD : 512 octets
- Structure d’une entrée de journal (
LogEntry
) :int32_t temperature
: 4 octetsint32_t humidity
: 4 octets- Total par entrée : 8 octets
- Nombre d’entrées par bloc : 8 octets par entrée, donc un paquet transmis de 64 octet fait 8 échantillon . 512 octets contient donc 64 échantillons au total pour le bloc utilisé. La taille maximale d’un paquet bulk sur nos endpoints étant de 64 octet.
- Disposition en mémoire :
- Chaque bloc contient un tableau de 64 echantillon
LogEntry
consécutifs. - Les données sont écrites en little-endian (LSB en premier) pour chaque
int32_t
. - Pour lire un bloc « brut », on fait un simple
readBlock(&sd, numBloc, buffer)
puis on interprètebuffer
comme unLogEntry buffer[64]
.
- Chaque bloc contient un tableau de 64 echantillon
- Cycle d’écriture :
- On remplit un tableau local
LogEntry logBuffer[64]
avec 64 relevés successifs. - On appelle
writeBlock(&sd, blockNum, (uint8_t*)logBuffer)
pour ecrire ces 512 octets sur la SD.
- On remplit un tableau local
Deux endpoints USB : un endpoint OUT (interrupt) par lequel le PC envoie une commande (0x01 pour “read”, 0xE0 pour “erase”) et un endpoint IN (bulk) par lequel l’AVR renvoie soit un accusé d’effacement, soit la taille (2 octets) puis les 512 octets du bloc SD, découpés en huit paquets de 64 octets verrouillés à chaque Endpoint_ClearIN()
.
Quand vous tapez sudo ./progr erase
, l’application hôte envoie 0xE0 sur l’OUT, le firmware exécute erase()
sur la SD et renvoie “succès” ou “échec”.
Quand vous tapez sudo ./progr read
, elle envoie 0x01, le micro-lance la lecture du bloc 0, puis transfère longueur et données sur l’IN pour que votre programme hôte les affiche.
Pour compiler et flasher : dans le dossier ./lufa-LUFA-210130-NSI/I2L/Minimal
, tapez make clean
, un reset du microcontrolleur puis make dfu
pour construire le firmware et l’envoyer en DFU sur le matériel, IL faudra quelques seconde le temps de peupler le bloc SD de données , un message "success" apparait sur l'ecran LCD pour indiquer la fin de l'opération. Ensuite, dans le répertoire de l'application hôte ./lufa-LUFA-210130-NSI/I2L/Minimal/USBprogBulk
, faites make
pour générer l’exécutable , puis lancez sudo ./proj_bulk erase
ou sudo ./proj_bulk read
selon l’opération souhaitée(lecture des températures stockées ou effacement de la data sur le bloc).
Commande de lecture de la data , démo ci dessous:
Commande d'effacement de la data , démo ci dessous:
Vous pouvez ensuite relancer la commande d'affichage des données de la carte SD pour voir qu'elle est vide et contient des 00 à la place
Rendus
Projet KiCAD : Fichier:I2L-2024-Carte-G7.zip
Programmes :
- démonstration : Fichier:I2L-2024-Programmes-G7-rex.zip
- enregistreur de température : Fichier:I2L-2024-Programmes-G7.zip