Projet de fin d'année - FrenchBox
Retour aux SAE
By / Bureau Evan & Auduberteau Emilien
Contexte :
Dans le cadre de notre spécialité Systèmes d’Information et Numérique (SIN), nous avons développé une station connectée destinée à surveiller les conditions environnementales dans une chambre de maison de retraite.
L’objectif est de garantir un environnement sain, confortable et sécurisé pour les résidents, dont certains sont particulièrement sensibles aux variations de température, d’humidité ou à une mauvaise qualité de l’air.
Grâce à cette station, le personnel soignant peut accéder à distance et en temps réel aux données collectées, et être alerté en cas de dépassement de seuils critiques. Cette solution permet ainsi de prévenir certains risques (déshydratation, inconfort thermique, accumulation de CO₂…) et d’améliorer le bien-être des résidents.
Travaux réalisés :

Pour ce projet, nous avions planifié nos heures de projets en fonction des différentes tâches à réaliser.
En première partie, Evan s'est occupé de la modélisation du boitier ainsi que la disposition des composants à l'intérieur. Pour ma part, je me suis occupé de la partie programmation et électronique, c'est à dire la création du code embarqué pour la collecte des données environnementales.
Puis, nous avions à deux développer le site Web et l'application mobile pour la visualisation des données en temps réel.
Pour finir, nous avions monter le système physiquement pour s'assurer que le projet fonctionnait correctement.

Déroulement :
Étape 1 : Modélisation
Dans cette première étape de notre projet, nous avons réalisé la modélisation de notre station connectée sur SolidWorks. Nous avons défini sa forme, ses dimensions et les emplacements des différents capteurs pour qu’ils soient bien positionnés et protégés. Nous avons également prévu l’espace pour la carte électronique et l’alimentation.
Vue Isométrique
Vue Éclatée
Étape 2 : Électronique
Dans cette deuxième étape de notre projet, nous avons travaillé sur la partie électronique de la station météo. Nous avons sélectionné les différents capteurs nécessaires pour mesurer la température, l’humidité, la pression et d’autres paramètres environnementaux. Nous avons aussi choisi les différents protocoles que nous allons utiliser pour faire communiquer les différentes cartes électroniques ainsi que les capteurs.
Diagramme de blocs internes (IBD)
Étape 3 : Programmation
Dans cette étape, nous avons travaillé sur la programmation de la station météo. Nous avons développé le code pour lire les données des capteurs et les transmettre correctement à la carte électronique. Ensuite, nous avons mis en place la communication avec les services web grâce à un ESP-32, permettant d'envoyer des requètes sur notre serveur. Nous avons aussi développer le site Web, du front-end avec HTML/CSS/JS au back-end avec PHP/MySQL.
Extrait de code de l'Arduino
                        
                                       
//Extrait Partie Bluetooth
if (Serial3.available()) {
    val_blue = Serial3.read();
    if (val_blue != '/') {
        String caractere = String(val_blue);
        resultat += caractere;
    } else {
        if (resultat.length() > 0) { // Vérifie si la longueur de la chaîne resultat est supérieure à zéro
            mot_de_passe = resultat;
            // Ajouter le libellé "wifi:" au début de la trame
            resultat = "wifi:" + resultat;
            resultat += '/'; // Ajoute le caractère '/' à la fin de la chaîne resultat
              resultat.trim(); //TRES IMPORTANT
            Serial2.print(resultat); // Envoyer la requête vers l'ESP
            Serial.println("La trame Wifi: ");
            Serial.println(resultat);
        }
        // Réinitialiser la variable resultat
        resultat = "";
        connexion_screen();
        delay(2000);
        conn = true;
    }
}

    //Si l'ESP m'envoie des données sur sa connexion actuel au Wifi
    if (Serial2.available()) {

    if (conn == true){ // Ca veut dire que avant il y avait eu le connexion_screen
        temperature_screen(date, ancient_time);
        conn = false;
        conn1 = true;
    }
        char yes = Serial2.read();
        if(yes != '/'){
        String caractere2 = String(yes);
        resultat2 += caractere2;
        }
        else{
            resultat2.trim(); //TRES IMPORTANT
            
        if (resultat2.startsWith("yes")){

        //Sert pour l'ecran connexion réussie
            if(conn1 == true){
            success_screen();
            delay(2000);
            temperature_screen(date, ancient_time);
            conn1 = false;
            }

            
        Serial.println("L'ESP est bien connecté au Wifi");
        Serial.println(resultat2);
        //Décortiquer resultat2
        resultat2 = resultat2.substring(4); // On enleve "yes&"
        
        // Extraire chaque partie de la trame
        date = resultat2.substring(0, 10); // Extraire la date
        String annee = date.substring(0, 4);
        String mois = date.substring(5, 7);
        String jour = date.substring(8, 10);
        date = jour + "-" + mois + "-" + annee;

        time = resultat2.substring(11, 16); // Extraire l'heure et la minute directement à partir de la chaîne resultat2
        Serial.print("Time avant extraction : ");
        Serial.println(time);
        String heure = time.substring(0, 2); // Extraire l'heure en utilisant les indices corrects
        String minute = time.substring(3, 5); // Extraire la minute en utilisant les indices corrects
        time = heure + ":" + minute;

        ...
                        
Extrait de code du site
                        
                                                   
<?php
session_start(); // Ajoutez cette ligne pour démarrer la session
 
 if (!isset($_SESSION['token'])) {
        // Redirigez vers la page de connexion si l'utilisateur n'est pas connecté
        header('Location: login.php');
        exit();
    }
    
$email = $_SESSION['email'];
$name = $_SESSION['name'];

$pdo = new PDO('mysql:host=localhost;dbname=id21924074_table_box_client', 'id21924074_table_box_client', 'Test2024.');
// Préparation de la requête SQL
    $stmt = $pdo->prepare("SELECT * FROM table_box_client WHERE email = :email AND name = :name");

    // Liaison des paramètres
    $stmt->bindParam(':email', $email, PDO::PARAM_STR);
 $stmt->bindParam(':name', $name, PDO::PARAM_STR);
    // Exécution de la requête
    $stmt->execute();

    // Vérification s'il y a des résultats
    if ($stmt->rowCount() > 0) {
        // Parcourir chaque ligne de résultat
        $row = $stmt->fetch(PDO::FETCH_ASSOC);
            // Accès à chaque colonne de la ligne de résultat
             $temp = $row["temp"];
             $temp_min = $row["temp_min"];
             $temp_max = $row["temp_max"];
             $temp_aver = $row["temp_aver"];
             
             
              $lum = $row["lum"];
              $lum_min = $row["lum_min"];
              $lum_max = $row["lum_max"];
              $lum_aver = $row["lum_aver"];
              
              $hum = $row["hum"];
              $hum_min = $row["hum_min"];
              $hum_max = $row["hum_max"];
              $hum_aver = $row["hum_aver"];
              
              
              $name = $row["name"];
              $chaleur = $row["chaleur"];
             
              
              $press = $row["press"];
              $press_min = $row["press_min"];
              $press_max = $row["press_max"];
              $press_aver = $row["press_aver"];
        }
     else {
        echo "Aucun résultat trouvé.";
    }


?>

        ...
                        
Étape 4 : Assemblage final
Dans cette dernière étape du projet, nous avons réalisé l’assemblage final de la station météo. Nous avons intégré la carte électronique, les capteurs et l’alimentation dans la boîte modélisée précédemment, en nous assurant que chaque composant était correctement positionné. Nous avons ensuite vérifié le bon fonctionnement de l’ensemble, en testant la communication entre les capteurs, le site Web et l’application mobile.
Documents :
Explications sur le projet
Présentation orale
Pour consulter les programmes et obtenir plus d’informations : https://git.univ-pau.fr/eauduberteau/frenchbox