POCL : Hawaiiiii

De Les Fabriques du Ponant
Révision datée du 6 janvier 2022 à 17:43 par Philby35 (discussion | contributions) (Catégorie 3 : partie logicielle)
Aller à : navigation, rechercher

résumé du projet

Surf Breizh Light : Comment savoir où est-ce qu'on peut aller surfer sans mourir / souffrir ?

Ce POCL "Surf Breizh Light" est une carte de la Bretagne indiquant des plages connues avec une signalisation des prévisions, pour savoir quand est-ce que les conditions sont optimales pour aller surfer. Six "spots" de surf y sont représentés à l'aide d'un phare, qui prendra une couleur différente selon la qualité de surf obtenue sur un site bien connu des surfers (Surf Report) :

   - 0 étoile : couleur Rouge,
   - 1 étoile : couleur Orange,
   - 2 étoiles : couleur Jaune,
   - 3 étoiles : couleur Verte.

Un autre élément est pris en compte : la hauteur de houle, qui sera représentée par un clignotement plus ou moins rapide des phares :

   - calme plat (houle inférieure à 1) : pas de clignotement,
   - houle légère (entre 1 et 2) : clignotement toutes les 2 secondes,
   - houle moyenne (entre 2 et 4) : clignotement toutes les secondes,
   - houle forte (plus de 4) : clignotement toutes les 1/2 secondes.


POCL-Surf-Breizh.JPG

membres du projet

  • Sarah Boulanger,
  • Adriana Verdot,
  • Maëlle Jaffredou,
  • Tonino Rizzo,
  • Philippe Blusseau

POCL-equipe-breizh.JPG

prototype qu'on souhaite réaliser

POCL-breizh-etape.JPG

POCL-Breizh-prez.JPG

premier diaporama : Alors ? Comment ça se passe ?

Données :

Windguru : hauteur des vagues, échelle de valeur sur 3 niveaux de conditions idéales pour aller surfer

Lumières leds : indique que le système est en route ; indique que le système est connecté au wifi ; clignote au cours de la réception des données.


Procédure :=

Catégorie 1 : modélisation et réalisation de la maquette

  • Vectoriser les contours de la Bretagne
  • Concevoir un motif de vagues (Illustrator)
  • Concevoir 5 phares bretons :
  1. Télécharger le logiciel Cura
  2. Trouver le lien du phare à envoyer sur l'imprimante 3D

Imprimante 3D - Phare .jpg

Catégorie 2 : partie électronique

Le montage électronique s'appuie sur un microcontrôleur de type Wemos D1 Mini. Celui-ci à l'avantage d'être peu onéreux (quelques euros), et il est largement suffisant pour notre besoin, puisque nous n'en exploiterons qu'une seule sortie (en dehors de l'alimentation). Cette sortie servira à contrôler la couleur et le clignotement des leds habilement cachées dans les phares.

Nous avons utilisé des leds disponibles sous forme de ruban, de type Adafruit NeoPixel. Sous la forme de ruban, il suffit de l'alimenter depuis le Wemos D1 Mini (sorties GND et 5V), et d'ajouter la sortie de commande unique pour toutes les leds du ruban. Nous avons utilisé la sortie D3 du Wemos D1 Mini pour cette commande de leds. Seule (petite) difficulté : dans notre cas, chaque phare étant distinct, il nous a fallu couper chacune des leds, et reconstituer la liaison de commande, avec quelques fils, de la soudure, et un peu de patience, comme suit :

Breizh Surf Light Schema.png Led RVB.jpg

Catégorie 3 : partie logicielle

/* ==============================================================================================================

* 
*                                 SURF_SPOT - Visualisation des spots Bretons de surf
* 
* --------------------------------------------------------------------------------------------------------------
* Réalisé dans le cadre du hackathon Rudi des 9 et 10 décembre 2021, organisé par Les Petits Debrouillards Grand Ouest 
* et L'Edulab de l'Université de Rennes 2, dans le cadre de l'appel à projet eRudi porté par Canopé.
* --------------------------------------------------------------------------------------------------------------
* Programme réalisé sur la base des exemples fournis par :
* - Utilisation de la bibliothèque WiFiManager :
*     . projetsdyi.fr :  https://projetsdiy.fr/librairie-wifimanager-connexion-wifi-projets-esp8266/
*     . github de l'auteur (Tzapu) : https://github.com/tzapu/WiFiManager/tree/master/examples
*  - Requête HTTPS depuis un D1 mini : 
*     . Codebender : https://codebender.cc/sketch:322905#HTTPS%20Request%20Wemos%20D1.ino
* - Bibliothèque JSON :
*      . projetsdyi.fr : https://projetsdiy.fr/debuter-librairie-arduinojson-v6-librairie-arduino-esp32-esp8266-json/
*      . calcul de la place nécessaire : https://arduinojson.org/v6/assistant/
* - et un grand merci à Baptiste Gaultier pour son aide sur la partie Nodered !
* --------------------------------------------------------------------------------------------------------------
* Pour plus d'infos, n'hésitez pas !
* Contact : p.blusseau@debrouillonet.org (Petits Débrouillards Rennes)
* =============================================================================================================*/
  1. include <WiFiManager.h> // Gestion de la connexion Wi-Fi (recherche de points d'accès)
  2. include <ESP8266HTTPClient.h> // Gestion des requêtes HTTP vers le serveur JSON
  3. include <WiFiClient.h> // Gestion de la connexion au serveur JSON
  1. include <Adafruit_NeoPixel.h> // Gestion des rubans de led multicouleurs
  1. define ARDUINOJSON_USE_DOUBLE 1
  2. include <ArduinoJson.h>

/* -------------------------------------------------------------------------------------------------------------

*  Variables globales de l'application
* ------------------------------------------------------------------------------------------------------------- */

WiFiManager GL_wifiManager; // Gestion de la connexion au Wi-Fi const char* GL_ESP8266_AP_NAME= "Breizh_Surf_Light" ; // Nom du point d'accès Wi-Fi du D1 Mini.

                                                         // - on n'utilisera pas de mot de passe.

const int GL_NB_SPOTS = 6; // Nombre de spots de surf.

const int GL_SPOT_PIN = D3; // Pin du D1 Mini utilisé pour commander les leds RGB.

Adafruit_NeoPixel GL_SpotsLight // Gestion des leds RGB programmables.

   = Adafruit_NeoPixel(GL_NB_SPOTS, GL_SPOT_PIN, 
     NEO_GRB + NEO_KHZ800);

unsigned long GL_REQ_INTERVAL_INIT = 10000 ; // Première requête au bout de 10 secondes ... unsigned long GL_REQ_INTERVAL = 60000 ; // ... puis toutes les 60 secondes. unsigned long GL_REQ_Frequency = GL_REQ_INTERVAL_INIT; unsigned long GL_MAX_BLINK = 500 ; // Clignotement max toutes les 500 ms (forte houle)

/* --------------------------------------------------------------------------------------------------------------

*  SETUP : Initialisation
* ------------------------------------------------------------------------------------------------------------- */

void setup() {

   /*
    * - Initialisation du port série (utilisé pour le débug)
    */
   
   Serial.begin(115200);
   /*
    * Initialisation des leds RGB des spots de surf
    */
   GL_SpotsLight.begin();
   GL_SpotsLight.setBrightness(50);
   /* 
    *  On fait clignoter toutes les leds en bleu à tour de rôle sur les points de surf, pour signaler le démarrage
    */
   for (int i = 0; i < GL_NB_SPOTS*5; i++) {
       GL_SpotsLight.setPixelColor(i%GL_NB_SPOTS, GL_SpotsLight.Color(/*Rouge*/ 0, /*Vert*/ 0, /* Bleu */ 255));
       for (int j = 1; j < GL_NB_SPOTS; j++) {
           GL_SpotsLight.setPixelColor((i+j)%GL_NB_SPOTS, GL_SpotsLight.Color(/*Rouge*/ 0, /*Vert*/ 0, /* Bleu */ 0));
       }
       GL_SpotsLight.show(); 
       delay(100) ;
   }
   /*
    * ... puis toutes les led en bleu pour indiquer l'attente du Wi-Fi
    */
   for (int i = 0; i < GL_NB_SPOTS; i++) {
       GL_SpotsLight.setPixelColor(i, GL_SpotsLight.Color(/*Rouge*/ 0, /*Vert*/ 0, /* Bleu */ 255));
   }
   GL_SpotsLight.show(); 


   /* 
    * Mise en place de la connexion Wi-Fi. La librairie "WiFiManager.h" est très pratique, car elle permet d'enregistrer 
    * de façon pérenne (même si on débranche le D1 mini) les points d'accès Internet et leurs mots de passe. Si notre D1 mini
    * se trouve dans un nouvel environnement, il passe alors lui même en mode "point d'accès", et va proposer sur 
    * l'adresse 192.168.4.1 une interface permettant d'afficher les points d'accès environnants, sur lesquels on va pouvoir se 
    * connecter. Cela évite de mettre "en dur" dans le code le nom d'un point d'accès et du mot de passe associé.
    * Note : la librairie est bloquante : le programme ne continue qu'une fois connecté
    */ 
   Serial.println("Connexion au Wi-Fi ...");
   if (GL_wifiManager.autoConnect(GL_ESP8266_AP_NAME)) {
     
         // Wi-Fi en mode standard ok --> on fait clignoter 5 fois les leds, cette fois-ci simultanément, et toujours en bleu
       int cBlue = 0 ;
       for (int i = 0; i < 5; i++) {
           for (int j = 0; j < GL_NB_SPOTS; j++) {
               GL_SpotsLight.setPixelColor(j, GL_SpotsLight.Color(/*Rouge*/ 0, /*Vert*/ 0, /* Bleu */ cBlue));
           }
           GL_SpotsLight.show(); 
           cBlue = 255-cBlue ;     // on passe de 0 à 255, puis de 255 à 0, etc ...
           delay(100) ;
       }
   }
   else {
       Serial.println("Connexion Wi-Fi KO :-(");     
   }

}

/* --------------------------------------------------------------------------------------------------------------

*  LOOP : fonction appelée régulièrement par le système
*  ------------------------------------------------------------------------------------------------------------- */

void loop() {

   /*
    * Interrogation du serveur toutes les GL_REQ_Frequency millisecondes.
    */
   if (millis()% GL_REQ_Frequency == 0) {
   
       if (getServerResponse() == 1) {          // Envoi de la requête et récupération de la réponse
           applyServerResponse() ;              // Traitement de la réponse (mise à jour couleur des phares)
       }
       if (GL_REQ_Frequency == GL_REQ_INTERVAL_INIT) { GL_REQ_Frequency = GL_REQ_INTERVAL; }
   }
   /*
    * Le reste du temps, on va faire clignoter les phares en fonction de la force de la houle.
    */
    
   else if (millis() % GL_MAX_BLINK == 0) {
       manageSpotsSwell() ;
       
   }
  

}