C'est l'hiver ! Hiver.gif

ENIB 2026 : L'horloge du monde : Différence entre versions

De Les Fabriques du Ponant
Aller à : navigation, rechercher
(fichiers à joindre)
(Introduction)
 
(7 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 30 : Ligne 30 :
  
 
L'objectif de notre horloge est de pouvoir afficher l'heure de différents lieux par pression du bouton. Lorsque le bouton est pressé, une des LED s'allume sur la map monde et l'heure correspondante s'affiche sur nos cadrans. Après une nouvelle pression du bouton, la LED s'éteint, une nouvelle s'allume ailleurs sur la carte et la nouvelle heure s'affiche.
 
L'objectif de notre horloge est de pouvoir afficher l'heure de différents lieux par pression du bouton. Lorsque le bouton est pressé, une des LED s'allume sur la map monde et l'heure correspondante s'affiche sur nos cadrans. Après une nouvelle pression du bouton, la LED s'éteint, une nouvelle s'allume ailleurs sur la carte et la nouvelle heure s'affiche.
 +
 +
Au démarrage, il faudra appuyer sur le bouton lorsque les aiguilles sont à 0, pour les callibrer.
  
 
==outil et matériel==
 
==outil et matériel==
Ligne 56 : Ligne 58 :
 
==fichiers à joindre==
 
==fichiers à joindre==
 
code, ficher d'impression 3D, de découpe laser ou vinyle, ...
 
code, ficher d'impression 3D, de découpe laser ou vinyle, ...
 +
===Code Arduino===
 +
<syntaxhighlight lang="Arduino" line>
  
 
#include <WiFi.h>
 
#include <WiFi.h>
Ligne 77 : Ligne 81 :
 
const char* cities[] = {"Europe/Paris","Asia/Hong_Kong","Australia/Canberra","America/Buenos_Aires","Africa/Johannesburg","America/Los_Angeles"};
 
const char* cities[] = {"Europe/Paris","Asia/Hong_Kong","Australia/Canberra","America/Buenos_Aires","Africa/Johannesburg","America/Los_Angeles"};
 
int city_index = 0;
 
int city_index = 0;
 +
 +
  
  
Ligne 104 : Ligne 110 :
 
     HourStepper.setSpeed(15);
 
     HourStepper.setSpeed(15);
 
     //LED
 
     //LED
     pinMode(19, OUTPUT);
+
     pinMode(19, OUTPUT); // LED d'Hong Kong
     pinMode(18, OUTPUT);
+
     pinMode(18, OUTPUT); // LED de Canberra
     pinMode(5, OUTPUT);
+
     pinMode(5, OUTPUT); // LED de Paris
     pinMode(17, OUTPUT);
+
     pinMode(17, OUTPUT); // LED de Johannesburg
     pinMode(16, OUTPUT);
+
     pinMode(16, OUTPUT); // LED de Buenos_Aires
     pinMode(21, OUTPUT);
+
     pinMode(21, OUTPUT); // LED de Los Angeles
 +
 
 +
    while(!digitalRead(25)) {
 +
      MinStepper.step(1);
 +
      delay(10);
 +
    }
 +
    delay(1000);
 +
    while(!digitalRead(25)) {
 +
      HourStepper.step(1);
 +
      delay(10);
 +
    }
 
}
 
}
  
Ligne 119 : Ligne 135 :
 
     turn_on_LED();
 
     turn_on_LED();
 
     city_index = (city_index + 1) % 6;
 
     city_index = (city_index + 1) % 6;
     //turn_hour();
+
     turn_hour();
 
     Serial.println(HOUR);
 
     Serial.println(HOUR);
 
     Serial.println(HOUR_ANGLE);
 
     Serial.println(HOUR_ANGLE);
     //turn_minute();
+
     turn_minute();
 
     Serial.println(MINUTE);
 
     Serial.println(MINUTE);
 
     Serial.println(MINUTE_ANGLE);   
 
     Serial.println(MINUTE_ANGLE);   
Ligne 221 : Ligne 237 :
 
Récupérer le code et le téléverser sur la carte esp32, pour se faire :
 
Récupérer le code et le téléverser sur la carte esp32, pour se faire :
  
explication
+
- Téléchargez ArduinoIDE en suivant ces instructions :
 +
https://support.arduino.cc/hc/en-us/articles/360019833020-Download-and-install-Arduino-IDE
 +
 
 +
- Ajouter la carte ESP32 à l'IDE en suivant ce tutoriel :
 +
https://www.wikidebrouillard.org/wiki/Utiliser_l%27ESP32_avec_le_logiciel_Arduino#:~:text=Allez%20dans%20outil%20%2D%3E%20type%20de,puis%20cliquez%20sur%20%22installer%22.
 +
 
 +
- Copier collez le code fournit dans le wiki dans l'IDE et téléverser celui-ci dans la carte.
  
 
===étape 3===
 
===étape 3===
Ligne 234 : Ligne 256 :
  
  
Câbler tout le circuit [[Fichier:1000024170.jpg|200px]] à l'aide de ce schéma : [image]
+
Câbler tout le circuit [[Fichier:1000024170.jpg|200px]] à l'aide de ce schéma : [[Fichier:Cablage horloge du monde.png|200px]]
 +
 
 +
ATTENTION ! Sur le schéma les moteurs ne sont pas les bons ainsi la carte arduino, les ports de la carte ne sont donc pas les bons, voici les ports que nous avons utlisés:
 +
 
 +
19-> Pekin, 18-> Camberra, 5-> Paris, 17-> Le cap, 16-> Brazilia, 21-> Los Angeles.
  
Attention ! les LEDs ont un sens, la broche la plus longue est + et l'autre -. [[Fichier:1000024169.jpg|200px]]
+
ATTENTION ! les LEDs ont un sens, la broche la plus longue est + et l'autre -. [[Fichier:1000024169.jpg|200px]]
  
 
===Troubleshouting===
 
===Troubleshouting===

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

Titre de la fiche expérience :

description (résumé)

Design Final ! 1000024171.jpg


Premier croquis de l'horloge du monde :

1000024161.jpg

Visuelle de l'horloge du monde avant décoration : 1000024167.jpg


1000024163.jpg



L'horloge du monde est une petite horloge lowtech qui affiche l'heure des pays que l'on souhaite. Elle affiche l'heure sur un cadran et les minutes sur l'autre. Une led s'allume sur le pays ou l'heure est affiché et l'on appuie sur le bouton pour changer de pays.

Introduction

Dans le cadre du Hackathon organisé par les petits débrouillards nous avons choisis de faire cette Horloge du monde.

Cette Horloge du monde est constituée de deux cadrans, une pour les heures et une pour les minutes. En dessous de ces cadrans se trouve une carte du monde accompagnée de plusieurs LEDs à différents endroits de la carte. Pour finir, au dessus de cette petite boîte se trouve un bouton.

L'objectif de notre horloge est de pouvoir afficher l'heure de différents lieux par pression du bouton. Lorsque le bouton est pressé, une des LED s'allume sur la map monde et l'heure correspondante s'affiche sur nos cadrans. Après une nouvelle pression du bouton, la LED s'éteint, une nouvelle s'allume ailleurs sur la carte et la nouvelle heure s'affiche.

Au démarrage, il faudra appuyer sur le bouton lorsque les aiguilles sont à 0, pour les callibrer.

outil et matériel

Les images sont des exemples, vous pouvez en utiliser d'autres mais ils doivent être équivalent.

- moteur pas à pas x2 1000024168.jpg


- Bouton poussoir x1


- autant de résistance que de LED

- Petites LEDs ,prenez en autant que vous voulez pour afficher les différents pays


- Carte esp32 x1 et un esp23s 38p x1


- Câble femelle-femelle, 2 pour chaque LED et 2 autres pour le bouton poussoir


-Carton, feuille A4, Ciseaux, Compa, Crayon papier, feutres, scotch, pistolet à colle, Batterie

fichiers à joindre

code, ficher d'impression 3D, de découpe laser ou vinyle, ...

Code Arduino

<syntaxhighlight lang="Arduino" line>

  1. include <WiFi.h>
  2. include <HTTPClient.h>
  3. include <ArduinoJson.h>
  4. include <Stepper.h>

const int STEP_BY_REVOLUTION = 2038;

Stepper MinStepper(STEP_BY_REVOLUTION, 12, 27, 14, 26); Stepper HourStepper(STEP_BY_REVOLUTION, 15, 0, 2, 4);

const char* ssid = "Resaux 1"; const char* password = "19842000"; const String url = "http://worldtimeapi.org/api/timezone/"; int HOUR = 0; int MINUTE = 0; float HOUR_ANGLE = 0; float MINUTE_ANGLE = 0; int button_state = 0; const char* cities[] = {"Europe/Paris","Asia/Hong_Kong","Australia/Canberra","America/Buenos_Aires","Africa/Johannesburg","America/Los_Angeles"}; int city_index = 0;



void setup(){

   Serial.println("-----------STARTING----------");
   Serial.begin(115200); //setup du moniteur série
   delay(1000);
   WiFi.mode(WIFI_STA); // mode station (connection à un Wifi)
   WiFi.begin(ssid, password);  // connexion avec le nom du réseaux et le mot de passe
   Serial.println("\nConnecting"); // afficahge lors de la connection 
   while(WiFi.status() != WL_CONNECTED){ 
       Serial.print(".");  // tant que l'on n'est pas connecté on ne passe pas au reste 
       delay(100);
   }
   Serial.println("\nConnected to the WiFi network");  //on met un petit message lorsque l'on est connecté
   Serial.print("Local ESP32 IP: "); 
   Serial.println(WiFi.localIP());// affichage de l'adresse IP de la carte
   //pin setp
   //button
   pinMode(25, INPUT);
   //steppers
   MinStepper.setSpeed(15);
   HourStepper.setSpeed(15);
   //LED
   pinMode(19, OUTPUT); // LED d'Hong Kong
   pinMode(18, OUTPUT); // LED de Canberra
   pinMode(5, OUTPUT);  // LED de Paris
   pinMode(17, OUTPUT); // LED de Johannesburg
   pinMode(16, OUTPUT); // LED de Buenos_Aires
   pinMode(21, OUTPUT); // LED de Los Angeles
   while(!digitalRead(25)) {
     MinStepper.step(1);
     delay(10);
   }
   delay(1000);
   while(!digitalRead(25)) {
     HourStepper.step(1);
     delay(10);
   }

}

void loop(){

 button_state = digitalRead(25); //read button state
 if (button_state) {
   Serial.println(cities[city_index]);
   get_time_from(cities[city_index]);
   turn_on_LED();
   city_index = (city_index + 1) % 6;
   turn_hour();
   Serial.println(HOUR);
   Serial.println(HOUR_ANGLE);
   turn_minute();
   Serial.println(MINUTE);
   Serial.println(MINUTE_ANGLE);  
 }

}

void get_time_from(String place) {

 HTTPClient http;
 http.begin(url + place);
 int httpCode = http.GET();
 while (httpCode != HTTP_CODE_OK) {
   Serial.printf(".");
   httpCode = http.GET();
 }
 String receipt = http.getString();
 http.end();
 JsonDocument doc;
 deserializeJson(doc, receipt);
 String time = doc["datetime"];
 time = time.substring(11,time.length()-6);
 Serial.println(time);
 HOUR = time.toInt();
 MINUTE = time.substring(3,5).toInt();

}

// clear all LEDs void clear_LED() {

 digitalWrite(19,0);
 digitalWrite(18,0);
 digitalWrite(5,0);
 digitalWrite(17,0);
 digitalWrite(16,0);
 digitalWrite(21,0);

}

void turn_minute() {

 float angle = MINUTE * 360 / 60;
 int turn_by = STEP_BY_REVOLUTION*(angle - MINUTE_ANGLE)/360;
 MINUTE_ANGLE = (int)(angle)%360;
 MinStepper.step(-turn_by);

}

void turn_hour() {

 float angle = HOUR * 360 / 12;
 int turn_by = STEP_BY_REVOLUTION*(angle - HOUR_ANGLE)/360; 
 HOUR_ANGLE = (int)(angle)%360;
 HourStepper.step(-turn_by);
 
 

}

void turn_on_LED() {

 clear_LED();
 switch(city_index) {
   case 1 :
     digitalWrite(19,1);
     break;
   case 2 :
     digitalWrite(18,1);
     break;
   case 0 :
     digitalWrite(5,1);
     break;
   case 4 :
     digitalWrite(17,1);
     break;
   case 3 :
     digitalWrite(16,1);
     break;
   case 5 :
     digitalWrite(21,1);
     break;
 }

}

étapes de fabrication

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

étape 1

Découper le carton en 3 rectangles de 40cmx16cm, 20cmx16cm, et un dernier pour la base d'au moins 20cmx16cm.

Sur une feuille A4, imprimer ou dessiner ou décalquer une map monde de 20cmx11cm. Même chose pour les deux cadrans de 2cm de rayon.

Faire un trou pour le bouton sur le carton de 20cmx16cm

Faire des trous au milieu des cadrans ( pour la partie qui tourne du moteur ) 1000024164.jpg

étape 2

Récupérer le code et le téléverser sur la carte esp32, pour se faire :

- Téléchargez ArduinoIDE en suivant ces instructions : https://support.arduino.cc/hc/en-us/articles/360019833020-Download-and-install-Arduino-IDE

- Ajouter la carte ESP32 à l'IDE en suivant ce tutoriel : https://www.wikidebrouillard.org/wiki/Utiliser_l%27ESP32_avec_le_logiciel_Arduino#:~:text=Allez%20dans%20outil%20%2D%3E%20type%20de,puis%20cliquez%20sur%20%22installer%22.

- Copier collez le code fournit dans le wiki dans l'IDE et téléverser celui-ci dans la carte.

étape 3

Coller la map monde et les cadrans sur la face avant 1000024167.jpg


puis coller les cotés avec le haut et la base. 1000024162.jpg


Pour mettre les LEDs il suffit de faire un trou avec la pointe d'un compa et de forcer délicatement.


Câbler tout le circuit 1000024170.jpg à l'aide de ce schéma : Cablage horloge du monde.png

ATTENTION ! Sur le schéma les moteurs ne sont pas les bons ainsi la carte arduino, les ports de la carte ne sont donc pas les bons, voici les ports que nous avons utlisés:

19-> Pekin, 18-> Camberra, 5-> Paris, 17-> Le cap, 16-> Brazilia, 21-> Los Angeles.

ATTENTION ! les LEDs ont un sens, la broche la plus longue est + et l'autre -. 1000024169.jpg

Troubleshouting

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


Difficultés avec la carte esp32 pour installer les librairies et ...


Difficultés avec les servomoteur car on n'arrivait pas à avoir un angle précis donc on les a remplacé par des moteurs pas à pas beaucoup plus adpater dans notre cas.

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

ne pas modifier sous cette ligne