ENIB 2026 : ENINGURU : Différence entre versions
(→étape 5) |
(→Introduction) |
||
| Ligne 10 : | Ligne 10 : | ||
Dans le cadre notre l’intersemestre et du hackathon pédagogique POCL, notre groupe a du concevoir un Petit Objet Connecté Ludique et nous avons décidé de le faire autour du thème du surf. L’objectif est de donner une information simple et visuelle sur la taille des vagues et si les surfeurs peuvent aller surfer en temps réel à partir de la position GPS du petit Minou et des données météorologiques. | Dans le cadre notre l’intersemestre et du hackathon pédagogique POCL, notre groupe a du concevoir un Petit Objet Connecté Ludique et nous avons décidé de le faire autour du thème du surf. L’objectif est de donner une information simple et visuelle sur la taille des vagues et si les surfeurs peuvent aller surfer en temps réel à partir de la position GPS du petit Minou et des données météorologiques. | ||
| + | [[Fichier:Maquette.jpg]] | ||
==outil et matériel== | ==outil et matériel== | ||
Version du 22 janvier 2026 à 14:56
Sommaire
description (résumé)
Notre POCL à pour but de donner l’information de la taille des vagues en direct.
Le surfeur renseigne la position GPS du spot de surf et en fonction des données météorologiques que l’on récupère sur le site open-meteo.com
Pour savoir la taille des vagues en direct, notre POCL est doté d’une led qui va changer de couleur en fonction de la taille des vagues. Quand les vagues seront petites, la led va etre de couleur verte, puis elle va tendre vers le rouge et le violet si les vagues sont très grosses.
En plus de cette led, un petit surfeur se trouve sur le haut de la boite. Quand les conditions de surf ne sont pas bonnes, le petit surfeur est immobile. Par contre, quand les conditions sont intéressantes, le petit surfeur commence à bouger.
Introduction
Dans le cadre notre l’intersemestre et du hackathon pédagogique POCL, notre groupe a du concevoir un Petit Objet Connecté Ludique et nous avons décidé de le faire autour du thème du surf. L’objectif est de donner une information simple et visuelle sur la taille des vagues et si les surfeurs peuvent aller surfer en temps réel à partir de la position GPS du petit Minou et des données météorologiques.
outil et matériel
- carton
- Papier bleu
- leds
- Moteur
- Cure dents
fichiers à joindre
code, ficher d'impression 3D, de découpe laser ou vinyle, ...
Mettre du code Arduino
<syntaxhighlight lang="Arduino" line>
- define PIN 9
- include <Arduino_GFX_Library.h>
- include <WiFi.h>
- include <HTTPClient.h>
- include <ArduinoJson.h>
- include <ESP32Servo.h>
- include <Adafruit_NeoPixel.h>
const char* ssid = "HoelS22"; const char* password = "Abcdefgh";
const float latitude = 48.33;
const float longitude = -4.62;
const int servoPin = 13; Servo waveServo; int servoPos = 90; int servoStep = 1; unsigned long lastServoMove = 0; int servoSpeedDelay = 50;
- define LED_PIN 14
- define LED_COUNT 12
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
unsigned long lastApiTime = 0; unsigned long apiDelay = 900000;
float currentWaveHeight = 0.0;
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("\n--- DEMARRAGE POCL SURF ---");
waveServo.setPeriodHertz(50); waveServo.attach(servoPin, 500, 2400); waveServo.write(90);
strip.begin(); strip.setBrightness(80); strip.show();
Serial.print("Connexion WiFi ");
WiFi.begin(ssid, password);
int attempt = 0;
while (WiFi.status() != WL_CONNECTED && attempt < 20) {
delay(500);
Serial.print(".");
attempt++;
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println("\nWiFi connecté !");
Serial.println(WiFi.localIP());
} else {
Serial.println("\nERREUR WiFi");
}
getWavesData();
}
void loop() {
if (WiFi.status() == WL_CONNECTED) {
if (millis() - lastApiTime > apiDelay) {
getWavesData();
}
}
if (millis() - lastServoMove > servoSpeedDelay) {
lastServoMove = millis();
int maxOffset = map((int)(constrain(currentWaveHeight, 0.0, 6.0) * 100), 0, 600, 0, 30); servoPos = 90 - maxOffset + servoStep;
if (servoPos <= 90 - maxOffset || servoPos >= 90 + maxOffset) {
servoStep = -servoStep;
}
waveServo.write(servoPos); }
}
void getWavesData() {
HTTPClient http; String url = "https://marine-api.open-meteo.com/v1/marine?latitude=" + String(latitude) + "&longitude=" + String(longitude) + "¤t=wave_height&timezone=Europe%2FParis";
Serial.println("\n--- MISE A JOUR VAGUES ---");
http.begin(url);
int httpCode = http.GET();
if (httpCode > 0) {
String payload = http.getString();
StaticJsonDocument<1024> doc;
if (deserializeJson(doc, payload)) {
Serial.println("Erreur JSON");
return;
}
float h = -1.0;
if (doc["current"]["wave_height"].is<float>()) {
h = doc["current"]["wave_height"];
}
Serial.print("Hauteur vagues : ");
Serial.print(h);
Serial.println(" m");
currentWaveHeight = h; updateNeoPixels(h);
} else {
Serial.println("Erreur API");
}
http.end(); lastApiTime = millis();
}
void updateNeoPixels(float h) {
if (h < 0) {
strip.clear();
strip.setPixelColor(0, strip.Color(255, 0, 0));
strip.show();
return;
}
float hLimited = constrain(h, 0.0, 6.0); int ledsToLight = (int)(hLimited * 2 + 0.5); ledsToLight = constrain(ledsToLight, 0, LED_COUNT);
uint32_t color;
if (h < 1.0) color = strip.Color(0, 255, 0);
else if (h < 3.0) color = strip.Color(0, 0, 255);
else color = strip.Color(255, 0, 0);
strip.clear();
for (int i = 0; i < ledsToLight; i++) {
strip.setPixelColor(i, color);
}
strip.show();
}
étapes de fabrication
indiquer autant d'étape que nécessaire, chacune illustrée par des images (photo, dessins, ...)
étape 1
Placer l'ESP32 sur la carte de développement puis câbler les LED et le SERVO-moteur tels qu'indiqués dans le schéma de câblage.
.
étape 2
En suivant le schéma de notre maquette construction d'une petite boîte en carton et d'un personnage. Découper de quoi faire une boite, une planche de surf et un personnage dans du carton, Construire la boite et y faire un trou en haut pour pouvoir faire tourner la surfeuse. Coller avec de la colle chaude la planche et la surfeuse puis planter un cure dent dans la planche
étape 3
Décorer la boite et la surfeuse selon les envies.
étape 4
accrocher le cure dent de la planche dans le moteur. et coller les leds(11 leds) sur le coté de la boite.
étape 5
tester le bon fonctionnement de la maquette.
Troubleshouting
Quelles sont difficultés, les problèmes, quelles sont les solutions, les trucs et astuces pour que ça marche ?
- faire attention au sens des led, elles ne fonctionnent que d'un coté
- Attention la conversion des données entre JSON et C++ (Arduino)
Sources et documentation complémentaire
- Rédаctiоn et illustratiоn :
Pоur tоus vоs trаvauх, qu'ils sоient écrits оu visuels, l'utilisatiоn de l'intеlligеnce artificiеllе générativе, que сe sоit pоur le teхte оu les images, n'еst pas conseillé.
- Prоgrammаtiоn :
En сe qui cоncernе la prоgrаmmatiоn, il est еssentiеl de ne pаs faire dе l'IA vоtrе prеmier rеcоurs. Cоncеntrеz-vоus d'abоrd sur vоtre prоpre lоgiquе, votre experience еt lеs ressоurcеs disponibles.
- Transpаrence et dосumеntatiоn :
Si vоus utilisеz l'IA pоur déblоquer оu améliоrеr une pаrtiе de vоtre cоdе, il est cruciаl de l'indiquеr сlairеmеnt dans vоtre dосumentatiоn tеchniquе.
- Traçabilité :
Chаque ехtrait de cоde généré avес l'аidе de l'IA dоit êtrе accоmpagné de la sоurce, ainsi que du prоmpt eхact qui a été utilisé pоur sа créatiоn, afin d'аssurеr une évaluatiоn clаire dе vоtre prоcessus.
Elément de présentation
je met ici le document de présentation de mon projet