C'est l'hiver ! Hiver.gif

ENIB 2026 : Sation météo : Différence entre versions

De Les Fabriques du Ponant
Aller à : navigation, rechercher
(Matériel nécessaire)
(Code Arduino)
 
(22 révisions intermédiaires par 3 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
 
Titre de la fiche expérience :
 
Titre de la fiche expérience :
==Description (résumé)==
+
==Introduction==
 +
 
 +
 
 
La station météo est une maquette qui permet à l'utilisateur d'obtenir les informations relatifs à la météo : la température et les conditions climatiques comme le soleil, la pluie, les orages, le brouillard la neige ou juste les nuages.
 
La station météo est une maquette qui permet à l'utilisateur d'obtenir les informations relatifs à la météo : la température et les conditions climatiques comme le soleil, la pluie, les orages, le brouillard la neige ou juste les nuages.
  
Ligne 12 : Ligne 14 :
 
  - Des leds matricielles (minimum 7 en longueur par 5 en largeur)
 
  - Des leds matricielles (minimum 7 en longueur par 5 en largeur)
 
  - Des planches en bois (ou quelque chose de solide, découpable et gravable)
 
  - Des planches en bois (ou quelque chose de solide, découpable et gravable)
- Une résistance de 330 Ω
 
 
  - Une carte esp32
 
  - Une carte esp32
 
  - Des câbles connexion
 
  - Des câbles connexion
Ligne 31 : Ligne 32 :
  
 
==fichiers à joindre==
 
==fichiers à joindre==
Code, ficher d'impression 3D, de découpe laser ou vinyle, ...
+
===Diaporama de présentation===
 +
[[Fichier:Diapo presentation station meteo.pdf]]
 +
===Découpe laser===
 +
[[Media:StationMétéoV2.svg]]
 
===Code Arduino===
 
===Code Arduino===
 
[[Fichier:Code station météo esp32.pdf|300px]]
 
[[Fichier:Code station météo esp32.pdf|300px]]
 +
 +
Version avec bouton poussoir :
 +
[[Fichier:Code final station météo esp32.pdf]]
  
 
==étapes de fabrication==
 
==étapes de fabrication==
Ligne 41 : Ligne 48 :
 
Regrouper le matériel.
 
Regrouper le matériel.
 
Tester le matériel.
 
Tester le matériel.
 +
Procéder au câblage si joint.
 +
 +
[[Fichier:Cablage station meteo ENIB 2026V1.png|200px]]
 +
 
Vérifier si le code compile le code.
 
Vérifier si le code compile le code.
  
Ligne 64 : Ligne 75 :
 
Maintenant on veut rajouter un paramètre : la ville.
 
Maintenant on veut rajouter un paramètre : la ville.
 
On veut rajouter 4 boutons qui nous permettrait de sélectionner la ville, on prend Brest, Marseille, Lille et Paris.
 
On veut rajouter 4 boutons qui nous permettrait de sélectionner la ville, on prend Brest, Marseille, Lille et Paris.
 +
 +
===étape 6===
 +
On refait un schéma pour y faire correspondre les boutons poussoir
 +
 +
[[Fichier:Cablage station meteo ENIB 2026.png|200px]]
 +
 +
===étape 7===
 +
Monter et brancher la maquette finale :
 +
 +
[[Fichier:Assemblage maquette f.jpg|250px]]
 +
 +
===étape 8===
 +
Vérifier le bon fonctionnement.
 +
 +
[[Fichier:Maquette finale.jpg|250px]]
 +
 +
Petit problème : la led est un peu trop forte
 +
 +
 +
Pour le résoudre on utilise simplement analogwrite à la place de digitalwrite pour allumer la led.
 +
 +
 +
Une fois ce problème résolu, vous avez maintenant une station météo fonctionnelle, félicitation.
  
 
===Troubleshouting===
 
===Troubleshouting===
Ligne 89 : Ligne 123 :
 
* Transpаrence et dосumеntatiоn : <br>
 
* Transpаrence et dосumеntatiоn : <br>
  
Noé faut mettre tes prompts ICI
+
Lors d'utilisation de l'IA :
 +
prompt : aide mappage LED WSP2880 pour une 8x8
 +
Donne les code suivant
 +
 
 +
int XY(int x, int y) {
 +
  x = (WIDTH - 1) - x;  // <-- miroir horizontal corrigé
 +
 
 +
  if (y % 2 == 0) return y * WIDTH + x;
 +
  return y * WIDTH + (WIDTH - 1 - x);
 +
}
 +
 
 +
void drawPixel(int x, int y, CRGB color) {
 +
  if (x < 0 || x >= WIDTH || y < 0 || y >= HEIGHT) return;
 +
  leds[XY(x, y)] = color;
 +
}
 +
 
 +
 
 +
 
 +
//---------chiffre 3*5--------
 +
 
 +
// Police 3x5 : chaque chiffre fait 3 pixels de large sur 5 de haut
 +
const uint16_t digits3x5[10] = {
 +
  0b111101101101111, // 0
 +
  0b010110010010111, // 1
 +
  0b111001111100111, // 2
 +
  0b111001111001111, // 3
 +
  0b101101111001001, // 4
 +
  0b111100111001111, // 5
 +
  0b111100111101111, // 6
 +
  0b111001010010010, // 7
 +
  0b111101111101111, // 8
 +
  0b111101111001111  // 9
 +
};
 +
// Fonction pour dessiner un chiffre 3x5
 +
void drawDigit3x5(int digit, int offsetX, int offsetY, CRGB color) {
 +
  if (digit < 0 || digit > 9) return;
 +
 
 +
  for (int y = 0; y < 5; y++) {
 +
    for (int x = 0; x < 3; x++) {
 +
      // On lit le bit correspondant (14 - position)
 +
      int bitPos = 14 - (y * 3 + x);
 +
      if (digits3x5[digit] & (1 << bitPos)) {
 +
        drawPixel(x + offsetX, y + offsetY, color);
 +
      }
 +
    }
 +
  }
 +
}
 +
 
 +
void drawNumber2Digits(int value, CRGB color) {
 +
  value = constrain(value, 0, 99);
 +
  int dizaine = value / 10;
 +
  int unite = value % 10;
 +
 
 +
  // Si le chiffre est < 10, on peut soit ne rien afficher à gauche, soit un 0
 +
  if (value >= 10) {
 +
    drawDigit3x5(dizaine, 0, 1, color); // Positionné à x=0, y=1 pour centrer verticalement
 +
  }
 +
  drawDigit3x5(unite, 4, 1, color);    // Positionné à x=4, y=1
 +
}
  
 
==Elément de présentation==
 
==Elément de présentation==

Version actuelle datée du 20 janvier 2026 à 16:38

Titre de la fiche expérience :

Introduction

La station météo est une maquette qui permet à l'utilisateur d'obtenir les informations relatifs à la météo : la température et les conditions climatiques comme le soleil, la pluie, les orages, le brouillard la neige ou juste les nuages.

Elle utilise des leds et des planches en bois sur lesquelle sont gravées des pictogramme de météo (soleil, nuage, etc..) placé à coté des leds.

Lequipe .jpeg

Matériel nécessaire

- 8 leds
- Des leds matricielles (minimum 7 en longueur par 5 en largeur)
- Des planches en bois (ou quelque chose de solide, découpable et gravable)
- Une carte esp32
- Des câbles connexion
- un bout de papier calque
- Des boutons poussoir
- du fil pour impression 3D
- tube de colle pour pistoler a colle

Schéma du résultat :

Schéma montage.jpeg

Outils nécessaire

- Découpeuse laser
- Imprimante 3D
- Règle
- Pistolet a colle

fichiers à joindre

Diaporama de présentation

Fichier:Diapo presentation station meteo.pdf

Découpe laser

Media:StationMétéoV2.svg

Code Arduino

Fichier:Code station météo esp32.pdf

Version avec bouton poussoir : Fichier:Code final station météo esp32.pdf

étapes de fabrication

indiquer autant d'étape que nécessaire, chacune illustrée par des images (photo, dessins, ...)

étape 1

Regrouper le matériel. Tester le matériel. Procéder au câblage si joint.

Cablage station meteo ENIB 2026V1.png

Vérifier si le code compile le code.

Maintenant, on va commencer la construction de la structure.

étape 2

- découpe de la structure grâce au fichier Inkscape sur une découpeuse laser
- vérification de l'échelle de la structure

étape 3

- imprimer le support (une grille de 10 par 10) pour la matrice led

étape 4

- découper le papier calque pour qu'il corresponde au support
- coller le support avec la matrice led a la structure précédemment découpée grâce au pistolet a colle

Assemblage2.jpeg

étape 5

Tester le bon fonctionnement

Test final.jpeg Il s'agit de la maquette en carton, les gravures ne sont pas très visible mais les données sont correctes.

Maintenant on veut rajouter un paramètre : la ville. On veut rajouter 4 boutons qui nous permettrait de sélectionner la ville, on prend Brest, Marseille, Lille et Paris.

étape 6

On refait un schéma pour y faire correspondre les boutons poussoir

Cablage station meteo ENIB 2026.png

étape 7

Monter et brancher la maquette finale :

Assemblage maquette f.jpg

étape 8

Vérifier le bon fonctionnement.

Maquette finale.jpg

Petit problème : la led est un peu trop forte


Pour le résoudre on utilise simplement analogwrite à la place de digitalwrite pour allumer la led.


Une fois ce problème résolu, vous avez maintenant une station météo fonctionnelle, félicitation.

Troubleshouting

Quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?

Erreur possible et solution

Un problème que l'on a eu au début était d'avoir l'affichage de la température en inversé ou miroir.


Code pas bon.png 001.jpg


Pour l'inverser après plusieurs recherche nous avons décider de nous aider avec l'IA. Le problème était qu'il fallait inverser le X dans la fonction XY(). Pour ce faire, on a rajouté la ligne x = (WIDTH -1) -x;


0010.jpg Code corrigé.png

Sources et documentation complémentaire

ESP32 TFT avec LVGL : Station météo : https://www.raspberryme.com/esp32-tft-avec-lvgl-station-meteo/#Station_meteo_ESP32_TFT_%E2%80%93_fichier_Weather_imagesh

  • Transpаrence et dосumеntatiоn :

Lors d'utilisation de l'IA : prompt : aide mappage LED WSP2880 pour une 8x8 Donne les code suivant

int XY(int x, int y) {

  x = (WIDTH - 1) - x;   // <-- miroir horizontal corrigé
  if (y % 2 == 0) return y * WIDTH + x;
  return y * WIDTH + (WIDTH - 1 - x);

}

void drawPixel(int x, int y, CRGB color) {

  if (x < 0 || x >= WIDTH || y < 0 || y >= HEIGHT) return;
  leds[XY(x, y)] = color;

}


//---------chiffre 3*5--------

// Police 3x5 : chaque chiffre fait 3 pixels de large sur 5 de haut const uint16_t digits3x5[10] = {

 0b111101101101111, // 0
 0b010110010010111, // 1
 0b111001111100111, // 2
 0b111001111001111, // 3
 0b101101111001001, // 4
 0b111100111001111, // 5
 0b111100111101111, // 6
 0b111001010010010, // 7
 0b111101111101111, // 8
 0b111101111001111  // 9

}; // Fonction pour dessiner un chiffre 3x5 void drawDigit3x5(int digit, int offsetX, int offsetY, CRGB color) {

 if (digit < 0 || digit > 9) return;
 
 for (int y = 0; y < 5; y++) {
   for (int x = 0; x < 3; x++) {
     // On lit le bit correspondant (14 - position)
     int bitPos = 14 - (y * 3 + x);
     if (digits3x5[digit] & (1 << bitPos)) {
       drawPixel(x + offsetX, y + offsetY, color);
     }
   }
 }

}

void drawNumber2Digits(int value, CRGB color) {

 value = constrain(value, 0, 99);
 int dizaine = value / 10;
 int unite = value % 10;
 // Si le chiffre est < 10, on peut soit ne rien afficher à gauche, soit un 0
 if (value >= 10) {
   drawDigit3x5(dizaine, 0, 1, color); // Positionné à x=0, y=1 pour centrer verticalement
 }
 drawDigit3x5(unite, 4, 1, color);     // Positionné à x=4, y=1

}

Elément de présentation

Présentation station météo (2).jpg

ne pas modifier sous cette ligne