Hackhathon Trashtalk : Différence entre versions

 
Ligne 267 : Ligne 267 :
 
// Si la réponse est positive, on affiche le code HTTP.
 
// Si la réponse est positive, on affiche le code HTTP.
  
if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
+
if (httpCode == HTTP_CODE_OK
 
 
String payload = https.getString();
 
 
 
StaticJsonDocument<2048> doc;
 
 
 
DeserializationError error = deserializeJson(doc, payload);
 
 
 
if (error) {
 
 
 
Serial.print(F("Error al analizar el JSON: "));
 
 
 
Serial.println(error.f_str());
 
 
 
return;
 
 
 
}
 
 
 
// Si la requête est réussie (code 200 ou redirection permanente), on récupère et affiche la réponse du serveur.
 
 
 
JsonArray features = doc["features"];
 
 
 
for (JsonObject feature : features) {
 
 
 
JsonArray jours = feature["properties"]["jour_col"];
 
 
 
 
 
// Iterar sobre los días dentro del array "jour_col"
 
 
 
for (const char* jour : jours) {
 
 
 
if (strcmp(jour, "MERCREDI") == 0) {
 
 
 
Serial.println("Se encontró MERCREDI, activando el servo...");
 
 
 
for (int pos = 0; pos <= 180; pos += 1) {
 
 
 
sg90.write(pos);
 
 
 
delay(10);
 
 
 
}
 
 
 
for (int pos = 180; pos >= 0; pos -= 1) {
 
 
 
sg90.write(pos);
 
 
 
delay(10);
 
 
 
}
 
 
 
motorActivated = true;
 
 
 
break;  // Salir del bucle si se encuentra "MERCREDI"
 
 
 
}
 
 
 
}
 
 
 
if (motorActivated) {
 
 
 
break;  // Romper el bucle principal si el motor ha sido activado
 
 
 
}
 
 
 
 
 
}
 
 
 
Serial.println(payload);
 
 
 
}
 
 
 
} else {  +
 
 
 
Serial.printf("[HTTPS] GET... failed, error: %s\n", https.errorToString(httpCode).c_str());
 
 
 
// Si la requête échoue, on affiche l'erreur correspondante.
 
 
 
}
 
 
 
https.end();
 
 
 
// Fermeture de la connexion HTTPS.
 
 
 
} else {
 
 
 
Serial.printf("[HTTPS] Unable to connect\n");
 
 
 
// Si la connexion échoue, un message d'erreur est affiché.
 
 
 
}
 
 
 
}
 
 
 
delete client;
 
 
 
// Libération de la mémoire allouée pour le client sécurisé.
 
 
 
} else {
 
 
 
Serial.println("Unable to create client");
 
 
 
// Si la création du client échoue, un message d'erreur est affiché.
 
 
 
}
 
 
 
 
 
// Attente de 10 secondes avant la prochaine itération de la boucle.
 
 
 
}
 
 
}}
 
}}
 
{{Tuto Step
 
{{Tuto Step
Ligne 385 : Ligne 276 :
 
|Step_Title=Création de la maquette
 
|Step_Title=Création de la maquette
 
|Step_Content=Les designers ont crées des maquettes avec plusieurs logiciel afin de pouvoir visualiser notre projet.
 
|Step_Content=Les designers ont crées des maquettes avec plusieurs logiciel afin de pouvoir visualiser notre projet.
 +
|Step_Picture_00=Hackhathon_Trashtalk_image_67237633.JPG
 +
|Step_Picture_01=Hackhathon_Trashtalk_image_67204097.JPG
 +
|Step_Picture_02=Hackhathon_Trashtalk_IMG_1276.jpg
 +
|Step_Picture_03=Hackhathon_Trashtalk_IMG_1278.jpg
 +
|Step_Picture_04=Hackhathon_Trashtalk_IMG_1291.jpg
 
}}
 
}}
 
{{Notes
 
{{Notes

Version actuelle datée du 11 octobre 2024 à 14:10

Auteur avatarLucile Royer | Dernière modification 11/10/2024 par Lroyer001

Pas encore d'image

Introduction

Les personnes vivant en communauté sont fréquemment confrontées au problème de la gestion des poubelles : quel jour doit-on sortir les ordures ménagères, et quand est-ce que c'est le jour du tri sélectif ? Cette confusion entraîne souvent des erreurs et des tensions entre voisins. Pour répondre à ce problème, il est utile d'avoir un rappel quotidien sur les jours de ramassage des déchets. La solution ? nous l'avons trouvé ! C'est Trashtalk, un objet connecté qui indique le jour de sortie des poubelles ainsi que le type de déchets à collecter, cela facilite la gestion des déchets.

Étape 1 - Recherche du jeux de données et sélection

Dans cette première étape, nous avions plusieurs jeux de données à analyser pour notre projet. Après avoir étudié différentes options, nous avons décidé de nous concentrer sur les données en relation avec la collecte des déchets de Bordeaux. Nous l'avons trouver sur le site de l'open data university et la ville de Bordeaux.

Étape 2 - Nettoyage des données et choix de l'objet

Pour l'étape deux, nous avons effectué un nettoyage des données sélectionnées, en retirant les informations incomplètes, erronées ou inutiles à notre projet, afin de garantir la fiabilité des données utilisées pour notre projet. Une fois les données prêtes, nous avons défini la fonction de notre objet et ses spécificités notamment la synchronisation avec les jours de collecte, le système lumineux et le haut-parleur. Cette étape nous permet de poser les bases de notre projet pour ensuite pouvoir le construire.

Étape 3 - Réalisation des plans de découpe et prototype

Pour l’étape trois, nous avons travaillé sur la réalisation des plans de coupe de la poubelle en carton de bois, en prenant en compte le design et les contraintes techniques. Nous avons travailler sur le système à intégrer, qui comprend : une carte mère pour intégrer le code, une carte SD pour stocker les données de collecte, un haut-parleur pour les rappels sonores, des LED pour indiquer les types de déchets, ainsi que les câbles et connexions. Cette étape nous as permis d'assembler les composants physiques et électroniques pour faire le premier prototype de la trashtalk.

Étape 4 - Codage

Nous avons ensuite procédé au code le voici en parti :

/**

BasicHTTPSClient.ino

Created on: 14.10.2018

*/

// Programme pour effectuer une requête HTTPS via Wi-Fi depuis un microcontrôleur Arduino.

#include <Arduino.h>

#include <WiFi.h>

#include <WiFiMulti.h>

#include <HTTPClient.h>

#include <WiFiClientSecure.h>

#include <ESP32Servo.h>

#include <ArduinoJson.h>

#define PIN_SG90 22 // Broche de sortie utilisée

// Inclusion des bibliothèques nécessaires pour la gestion du Wi-Fi, des requêtes HTTP et de la connexion sécurisée.

Servo sg90;

bool motorActivated = false;

// Stockage du certificat SSL racine (CA) pour vérifier la validité du serveur. Ici, il s'agit du certificat utilisé par Gandi pour le serveur "https://jigsaw.w3.org".

const char* rootCACertificate = \

"-----BEGIN CERTIFICATE-----\n" \

"MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB\n" \

"iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl\n" \

"cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV\n" \

"BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw\n" \

"MjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV\n" \

"BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU\n" \

"aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy\n" \

"dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK\n" \

"AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B\n" \

"3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY\n" \

"tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/\n" \

"Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2\n" \

"VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT\n" \

"79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6\n" \

"c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT\n" \

"Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l\n" \

"c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee\n" \

"UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE\n" \

"Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd\n" \

"BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G\n" \

"A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF\n" \

"Up/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO\n" \

"VWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3\n" \

"ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs\n" \

"8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR\n" \

"iQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze\n" \

"Sf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ\n" \

"XHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/\n" \

"qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB\n" \

"VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB\n" \

"L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG\n" \

"jjxDah2nGN59PRbxYvnKkKj9\n" \

"-----END CERTIFICATE-----\n";

//URL récupérée via XTRADATA https://data.bordeaux-metropole.fr/geojson/help/#/default

const String HTTPS_URL = "https://data.bordeaux-metropole.fr/geojson/features/en_frcol_s?crs=epsg%3A4326&attributes=%5B%22jour_col%22%5D&maxfeatures=10&key=K7CB2JBXGI";

// Fonction pour synchroniser l'horloge du microcontrôleur avec un serveur NTP afin de s'assurer que l'heure est correcte pour valider les certificats SSL.

void setClock() {

configTime(0, 0, "pool.ntp.org");

Serial.print(F("Waiting for NTP time sync: "));

time_t nowSecs = time(nullptr);

while (nowSecs < 8 * 3600 * 2) {

delay(500);

Serial.print(F("."));

yield();

nowSecs = time(nullptr);

}

// Attente que l'heure soit récupérée correctement depuis le serveur NTP.

Serial.println();

struct tm timeinfo;

gmtime_r(&nowSecs, &timeinfo);

Serial.print(F("Current time: "));

Serial.print(asctime(&timeinfo));

// Affiche l'heure actuelle une fois qu'elle est correctement configurée.

}

WiFiMulti WiFiMulti;

void setup() {

Serial.begin(115200);

// Initialisation de la communication série pour le débogage.

sg90.setPeriodHertz(50); // Fréquence PWM pour le SG90

sg90.attach(PIN_SG90, 500, 2400);

Serial.println();

WiFi.mode(WIFI_STA);

WiFiMulti.addAP("Chamakito redy", "chamakito333");

// Initialisation du mode Wi-Fi en tant que station et connexion à un point d'accès ("Les Usines" avec le mot de passe "usinesnouvelles").

Serial.print("Waiting for WiFi to connect...");

while ((WiFiMulti.run() != WL_CONNECTED)) {

Serial.print(".");

}

Serial.println(" connected");

// Boucle jusqu'à ce que la connexion Wi-Fi soit établie.

setClock();

// Synchronisation de l'heure via NTP après connexion au réseau.

}

void loop() {

Serial.print(HTTPS_URL);

WiFiClientSecure *client = new WiFiClientSecure;

// Création d'un client sécurisé pour gérer la connexion HTTPS.

if(client) {

client->setCACert(rootCACertificate);

// Assignation du certificat racine au client sécurisé pour valider les connexions HTTPS.

{

HTTPClient https;

// Initialisation d'un client HTTP sécurisé.

Serial.print("[HTTPS] begin...\n");

if (https.begin(*client, HTTPS_URL)) {

// Tentative de connexion à l'URL spécifiée (une API de Bordeaux Métropole).


Serial.print("[HTTPS] GET...\n");

int httpCode = https.GET();

// Envoi d'une requête GET au serveur.

if (httpCode > 0) {

Serial.printf("[HTTPS] GET... code: %d\n", httpCode);

// Si la réponse est positive, on affiche le code HTTP.

if (httpCode == HTTP_CODE_OK

Étape 5 - Création de l'affiche

La création de notre affiche pour le POCL a été un processus créatif. Nous avons commencé par dessiner l'objet pour mettre en avant son design et ses caractéristiques. Nous avons mis en avant les principales fonctionnalités, comme les LED lumineuses et le haut-parleur. Enfin, la mise en page est claire et organisée pour une compréhension facile nous l'avons dessiné simplement.

Étape 6 - Création de la maquette

Les designers ont crées des maquettes avec plusieurs logiciel afin de pouvoir visualiser notre projet.

Comment ça marche ?

Observations : que voit-on ?

En regardant la maquette de notre POCL Trashtalk, on voit tout de suite son design simple et pratique. Les LED sont placées sur le devant, s’allumant en blanc pour les ordures ménagères et en jaune pour le tri sélectif. Le haut-parleur est intégré discrètement, il est là pour rappeler le jour de sortir les poubelles.

On distingue le système d’ouverture automatique, qui fonctionne les jours de collecte.

Mise en garde : qu'est-ce qui pourrait faire rater l'expérience ?

Plusieurs éléments pourraient compromettre l'expérience. Tout d’abord, un problème de synchronisation des données, si elles ne sont pas à jours avec le calendrier des collectes cela pourrait entraîner des erreurs dans l’ouverture automatique et l’activation des LED.

Si des composants électroniques sont mal intégré, comme le haut-parleur ou les capteurs, cela rendra rappels sonores impossible. Une panne des LED ou un dysfonctionnement du système d’ouverture rendrait l’expérience beaucoup moins intuitive.

Dans un dernier temps, des erreurs de programmation ou un problème de mises à jour du calendrier pourraient rendre l’objet inutilisable.

Explications

Pour que l’expérience Trashtalk soit réussie, différents aspects doivent fonctionner. Le système doit être synchronisé avec le calendrier des collectes pour que les jours de tri et d’ordures ménagères soient bien différenciés. Les LED doivent s’allumer aux bons moments (blanc pour les ordures ménagères, jaune pour le tri), et la poubelle doit s'ouvrir automatiquement ces jours-là.

Le haut-parleur rappel aux utilisateurs de sortir les poubelles au bon moment, ce qui évite les oublis. Les capteurs doivent bien capter les informations pour déclencher les bonnes actions, sinon le système ne fonctionnera pas comme prévu.

Plus d'explications

Il faut que toute la partie électronique, comme la carte mère, les câbles, et la carte SD, soit bien installée. Si un fil est mal branché ou si un composant ne marche pas, certaines fonctionnalités, comme l’ouverture automatique ou les rappels sonores, risquent de ne pas fonctionner.

Le code doit aussi être bien écrit et sans erreurs pour que tout fonctionne correctement. S’il y a un bug, ça pourrait rendre la poubelle instable ou empêcher certaines actions de se déclencher comme prévu.

Applications : dans la vie de tous les jours

Dans la vie quotidienne, Trashtalk facilite la gestion des déchets. Il nous rappel automatiquement les jours de ramassage, donc plus besoin de vérifier le calendrier ou de craindre d’oublier de sortir les poubelles. Grâce aux LED qui changent de couleur, on sait facilement quel type de déchet sortir (tri sélectif ou ordures ménagères).

Les rappels sonores aident à éviter les oublis, surtout pour ceux qui vivent en immeuble, réduisant ainsi les conflits liés à la gestion des poubelles communes. Trashtalk rend le tri et la gestion des déchets plus simples et pratiques au quotidien.

Éléments pédagogiques

Objectifs pédagogiques

Le POCL comporte plusieurs objectifs pédagogiques. D’abord comprendre comment fonctionnent les technologies derrière un objet connecté. Ça veut dire comprendre comment intégrer des composants comme des capteurs, des LED et un haut-parleur. On a du écrire du code pour gérer les fonctionnalités, comme les rappels pour sortir les poubelles et l’ouverture automatique. Le travail en équipe est essentiel, on doit collaborer pour concevoir, développer et présenter notre projet. Cela nous aide à améliorer nos compétences en communication, en apprenant à expliquer clairement notre idée à différents types de publics.

Pistes pour animer l'expérience

Pour rendre notre projet Trashtalk encore plus interactif, voici quelques idées d’animation. D'abord, on pourrait organiser des ateliers où les gens peuvent découvrir comment fonctionne notre poubelle connectée. Cela leur permettrait d’interagir avec Trashtalk et de poser toutes leurs questions.

Ensuite, on pourrait faire des démonstrations en direct pour montrer les fonctionnalités, comme l’allumage des LED et l’ouverture automatique aux jours de collecte.

On pourrait aussi créer des jeux interactifs, comme des quiz sur le tri des déchets.

On pourrait mettre en place des stations de feedback pour que les utilisateurs laissent leurs impressions sur Trashtalk. Et pourquoi ne pas créer un hashtag sur les réseaux sociaux pour que chacun partage ses expériences ?

Sources et ressources

Open data university bordeaux métropole

Dernière modification 11/10/2024 par user:Lroyer001.

Commentaires

Draft