| (6 révisions intermédiaires par 2 utilisateurs non affichées) | |||
| Ligne 1 : | Ligne 1 : | ||
{{Tuto Details | {{Tuto Details | ||
| + | |Main_Picture=POCL_Balise_Mobilis_d84b99ee-954f-4ea1-a5bd-28179530fed7.jpg | ||
|Licences=Attribution (CC-BY) | |Licences=Attribution (CC-BY) | ||
|Description=Création d'un POCL sur les données en temps réels du trafic routier de Bordeaux métropole | |Description=Création d'un POCL sur les données en temps réels du trafic routier de Bordeaux métropole | ||
| − | |Disciplines scientifiques=Arduino, | + | |Disciplines scientifiques=Arduino, Mechanics |
|Difficulty=Technical | |Difficulty=Technical | ||
|Duration=2 | |Duration=2 | ||
| Ligne 20 : | Ligne 21 : | ||
}}{{ItemList | }}{{ItemList | ||
|Item=Servomoteur | |Item=Servomoteur | ||
| + | }}{{ItemList | ||
| + | |Item=Découpeuse laser | ||
| + | }}{{ItemList | ||
| + | |Item=Haut parleur | ||
| + | }}{{ItemList | ||
| + | |Item=Fer à souder | ||
| + | }}{{ItemList | ||
| + | |Item=Colle | ||
| + | }}{{ItemList | ||
| + | |Item=Feuille cartonnée | ||
| + | }}{{ItemList | ||
| + | |Item=Ciseaux | ||
| + | }}{{ItemList | ||
| + | |Item=Feuille cartonnée | ||
| + | }}{{ItemList | ||
| + | |Item=Ordinateur | ||
}} | }} | ||
}} | }} | ||
{{Tuto Step | {{Tuto Step | ||
| − | |Step_Title= | + | |Step_Title=Conception et maquettage |
| − | |Step_Picture_00= | + | |Step_Content=- Conception du support à l'aide du logiciel Inscape |
| + | |||
| + | dimension du mat : 5x5x18 cm | ||
| + | |||
| + | parabole: demi cercle de 10cm | ||
| + | |||
| + | support des servo moteur : 20x13 cm | ||
| + | |||
| + | support du mat : 15x15 cm | ||
| + | |||
| + | tige 1 : 8x1 cm | ||
| + | |||
| + | tige 2 : 7x1 cm | ||
| + | |||
| + | tige 3 : 6x1 cm | ||
| + | |||
| + | tige 4 : 5x1 cm | ||
| + | |Step_Picture_00=POCL_Balise_Mobilis_Screenshot_2025-12-12_154857.png | ||
| + | |Step_Picture_01=POCL_Balise_Mobilis_Screenshot_2025-12-12_155111.png | ||
| + | |Step_Picture_02=POCL_Balise_Mobilis_Screenshot_2025-12-12_155407.png | ||
}} | }} | ||
{{Tuto Step | {{Tuto Step | ||
| − | |Step_Title= | + | |Step_Title=Fabrication et montage du support |
| − | |Step_Content= | + | |Step_Content=- utilisation de la découpeuse laser pour matérialiser les plans du support sur une feuille de carton.<br />- assemblage du mat |
| + | |||
| + | - assemblage du toit | ||
| + | |||
| + | - fixation du mat + support du mat+ toit a l'aide de la colle. | ||
| + | |Step_Picture_00=POCL_Balise_Mobilis_c58bb05d-4338-4725-918d-e05970db4a55.jpg | ||
| + | |Step_Picture_01=POCL_Balise_Mobilis_3bbab350-f34e-4141-a298-3715abb2c3bf.jpg | ||
}} | }} | ||
{{Tuto Step | {{Tuto Step | ||
| − | |Step_Title= | + | |Step_Title=Codage |
| + | |Step_Content=from machine import Pin, PWM | ||
| + | |||
| + | import network | ||
| + | |||
| + | import urequests | ||
| + | |||
| + | import time | ||
| + | |||
| + | <nowiki>#</nowiki> === WIFI CONFIGURATION === | ||
| + | |||
| + | WIFI_SSID = "caroline" | ||
| + | |||
| + | WIFI_PASS = "xPptucR33!" | ||
| + | |||
| + | <nowiki>#</nowiki> === REQUEST PARAMETERS === | ||
| + | |||
| + | latitude = 44.8378 | ||
| + | |||
| + | longitude = -0.5792 | ||
| + | |||
| + | radius_m = 1000 | ||
| + | |||
| + | <nowiki>#</nowiki> === Servo motors (4 servos) === | ||
| + | |||
| + | SERVO_PINS = [33, 13, 16, 4] | ||
| + | |||
| + | servos = [PWM(Pin(pin), freq=50) for pin in SERVO_PINS] | ||
| + | |||
| + | def angle_to_duty_ns(angle): | ||
| + | |||
| + | min_ns = 500_000 # 0° → 0.5 ms | ||
| + | |||
| + | max_ns = 2_500_000 # 180° → 2.5 ms | ||
| + | |||
| + | return int(min_ns + (angle / 180) * (max_ns - min_ns)) | ||
| + | |||
| + | initial_angles = [130, 0, 30, 0] # adapte la taille en fonction du nombre de servos | ||
| + | |||
| + | current_angles = initial_angles.copy() | ||
| + | |||
| + | def initiation_des_position(): | ||
| + | |||
| + | |||
| + | |||
| + | for i, servo in enumerate(servos): | ||
| + | |||
| + | angle = initial_angles[i] | ||
| + | |||
| + | current_angles[i] = angle | ||
| + | |||
| + | servo.duty_ns(angle_to_duty_ns(angle)) | ||
| + | |||
| + | |||
| + | |||
| + | def reset_all_servos(): | ||
| + | |||
| + | for i, servo in enumerate(servos): | ||
| + | |||
| + | angle = initial_angles[i] | ||
| + | |||
| + | current_angles[i] = angle | ||
| + | |||
| + | servo.duty_ns(angle_to_duty_ns(angle)) | ||
| + | |||
| + | <nowiki>#</nowiki> === ACTIVATE ONLY ONE SERVO === | ||
| + | |||
| + | def activate_single_servo(state): | ||
| + | |||
| + | """ | ||
| + | |||
| + | Active uniquement un servo selon la valeur : | ||
| + | |||
| + | 1 → servo 0 | ||
| + | |||
| + | 2 → servo 1 | ||
| + | |||
| + | 3 → servo 2 | ||
| + | |||
| + | 4 → servo 3 | ||
| + | |||
| + | Tous les autres reviennent à 0° | ||
| + | |||
| + | """ | ||
| + | |||
| + | |||
| + | |||
| + | if 1 <= state <= 4: | ||
| + | |||
| + | servo_index = state -1 | ||
| + | |||
| + | new_angle = current_angles[servo_index] + 60 | ||
| + | |||
| + | servos[servo_index].duty_ns(angle_to_duty_ns(new_angle)) # Angle désiré | ||
| + | |||
| + | <nowiki>#</nowiki> === WIFI CONNECTION === | ||
| + | |||
| + | def connect_wifi(): | ||
| + | |||
| + | wlan = network.WLAN(network.STA_IF) | ||
| + | |||
| + | wlan.active(True) | ||
| + | |||
| + | reset_all_servos() | ||
| + | |||
| + | initiation_des_position() | ||
| + | |||
| + | if not wlan.isconnected(): | ||
| + | |||
| + | print("Connecting to Wi-Fi...") | ||
| + | |||
| + | wlan.connect(WIFI_SSID, WIFI_PASS) | ||
| + | |||
| + | while not wlan.isconnected(): | ||
| + | |||
| + | print(".", end="") | ||
| + | |||
| + | time.sleep(0.5) | ||
| + | |||
| + | print("\nConnected to Wi-Fi:", wlan.ifconfig()) | ||
| + | |||
| + | <nowiki>#</nowiki> === API CALL === | ||
| + | |||
| + | def call_api(lat, lon, radius_m): | ||
| + | |||
| + | url = f"<nowiki>https://hackathon.mathias-duprat.fr/api/liveTrafic?lat={lat}&long={lon}&radius={radius_m}</nowiki>" | ||
| + | |||
| + | print("\nCalling API:", url) | ||
| + | |||
| + | try: | ||
| + | |||
| + | res = urequests.get(url) | ||
| + | |||
| + | print("HTTP Code:", res.status_code) | ||
| + | |||
| + | data = res.json() | ||
| + | |||
| + | res.close() | ||
| + | |||
| + | return data | ||
| + | |||
| + | except Exception as e: | ||
| + | |||
| + | print("Error:", e) | ||
| + | |||
| + | return None | ||
| + | |||
| + | <nowiki>#</nowiki> === Speaker === | ||
| + | |||
| + | BUZZER_PIN = 15 | ||
| + | |||
| + | last_state = None | ||
| + | |||
| + | def update_state(new_state): | ||
| + | |||
| + | global last_state | ||
| + | |||
| + | if new_state != last_state and last_state is not None: | ||
| + | |||
| + | beep() # beep uniquement si l'état a changé | ||
| + | |||
| + | last_state = new_state | ||
| + | |||
| + | def beep(frequency=2000, duration=0.12): | ||
| + | |||
| + | buzzer = PWM(Pin(BUZZER_PIN)) | ||
| + | |||
| + | buzzer.freq(frequency) | ||
| + | |||
| + | buzzer.duty(512) | ||
| + | |||
| + | time.sleep(duration) | ||
| + | |||
| + | buzzer.duty(0) | ||
| + | |||
| + | buzzer.deinit() | ||
| + | |||
| + | <nowiki>#</nowiki> === MAIN LOOP === | ||
| + | |||
| + | connect_wifi() | ||
| + | |||
| + | previous_value = None | ||
| + | |||
| + | try: | ||
| + | |||
| + | while True: | ||
| + | |||
| + | beep() | ||
| + | |||
| + | |||
| + | |||
| + | data = call_api(latitude, longitude, radius_m) | ||
| + | |||
| + | if data and 'moyenne_etat' in data: | ||
| + | |||
| + | current_value = data['moyenne_etat'] | ||
| + | |||
| + | beep(frequency=2000, duration=0.12) | ||
| + | |||
| + | if previous_value is None: | ||
| + | |||
| + | # Première lecture | ||
| + | |||
| + | previous_value = current_value | ||
| + | |||
| + | print(f"Initial moyenne_etat = {current_value}") | ||
| + | |||
| + | activate_single_servo(current_value) | ||
| + | |||
| + | beep() | ||
| + | |||
| + | elif current_value != previous_value: | ||
| + | |||
| + | # Changement d'état | ||
| + | |||
| + | print(f"Value changed from {previous_value} to {current_value}") | ||
| + | |||
| + | activate_single_servo(current_value) | ||
| + | |||
| + | previous_value = current_value | ||
| + | |||
| + | beep() | ||
| + | |||
| + | time.sleep(0.12) | ||
| + | |||
| + | else: | ||
| + | |||
| + | print(f"No change, current value = {current_value}") | ||
| + | |||
| + | else: | ||
| + | |||
| + | print("'moyenne_etat' not found in API response") | ||
| + | |||
| + | print("Waiting 10 seconds before next call...\n") | ||
| + | |||
| + | time.sleep(10) | ||
| + | |||
| + | except KeyboardInterrupt: | ||
| + | |||
| + | # Remise à zéro des servos et fin propre du programme | ||
| + | |||
| + | reset_all_servos() | ||
| + | |||
| + | for servo in servos: | ||
| + | |||
| + | servo.deinit() | ||
| + | |||
| + | print("\nProgramme arrêté") | ||
}} | }} | ||
{{Tuto Step | {{Tuto Step | ||
| − | |Step_Title=Assemblage des | + | |Step_Title=Assemblage des éléments |
| + | |Step_Content='''1. Assembler du support du servomoteur au mat''' | ||
| + | |||
| + | Enclencher les 4 côtés verticaux (panneaux à encoches) | ||
| + | |||
| + | Coller pour rigidifier | ||
| + | |||
| + | Laisser un trou à la base pour faire passer le câble USB | ||
| + | |||
| + | '''2. Assembler du mat''' | ||
| + | |||
| + | Panneaux latéraux encastrés | ||
| + | |||
| + | Renforcer avec colle à bois | ||
| + | |||
| + | Faire passer les câbles des servos + alimentation à l’intérieur du tube | ||
| + | |||
| + | '''3. Assembler la tête semi-circulaire''' | ||
| + | |||
| + | Deux panneaux arrondis + une plateforme intérieure | ||
| + | |||
| + | Fixer le support du buzzer / HP à l’avant | ||
| + | |||
| + | Prévoir des trous pour les servos | ||
| + | |||
| + | '''4. Montage des tiges''' | ||
| + | |||
| + | Servos fixés en ligne | ||
| + | |||
| + | Tiges en bois reliées aux disques colorés | ||
| + | |||
| + | Vérifier le débattement (0° → 180°) | ||
| + | |||
| + | '''5. Installation des servomoteurs''' | ||
| + | |||
| + | - Fixer chaque servo dans une encoche prévue : | ||
| + | |||
| + | Servo 1 → Disque rouge | ||
| + | |||
| + | Servo 2 → Disque noir | ||
| + | |||
| + | Servo 3 → Disque jaune | ||
| + | |||
| + | Servo 4 → Disque bleu | ||
| + | |||
| + | - Passer les trois fils du servo dans la colonne : | ||
| + | |||
| + | Marron → GND | ||
| + | |||
| + | Rouge → 5V | ||
| + | |||
| + | Orange → GPIO (signal) | ||
| + | |||
| + | - Vérifier que les servos peuvent tourner sans forcer | ||
| + | |||
| + | Connexions servomoteurs → ESP32 | ||
| + | |||
| + | Élément Fil servo ESP32 | ||
| + | |||
| + | Servo 1 (rouge) Signal GPIO 14 | ||
| + | |||
| + | Servo 2 (noir) Signal GPIO 27 | ||
| + | |||
| + | Servo 3 (jaune) Signal GPIO 26 | ||
| + | |||
| + | Servo 4 (bleu) Signal GPIO 25 | ||
| + | |||
| + | Tous servos +5V Pin 5V | ||
| + | |||
| + | Tous servos GND GND | ||
| + | |||
| + | > Important : Tous les GND doivent pas être reliés ensemble. | ||
| + | |||
| + | Connexion du buzzer | ||
| + | |||
| + | Élément SP32 | ||
| + | |||
| + | + du buzzer GPIO 4 | ||
| + | |||
| + | – du buzzer GND | ||
| + | |||
| + | '''6- Fermeture et finition''' | ||
| + | |||
| + | - Installer la partie supérieure sur la colonne | ||
| + | |||
| + | - Faire sortir le câble USB par l’ouverture du bas | ||
| + | |||
| + | - Fixer les disques de couleur sur les tiges | ||
| + | |||
| + | - Tester les servos et ajuster les bras si besoin | ||
| + | |||
| + | - Vernir ou peindre la structure si nécessaire | ||
| + | |||
| + | |||
| + | |||
| + | <br /> | ||
| + | |Step_Picture_00=POCL_Balise_Mobilis_WhatsApp_Image_2025-12-12_at_12.15.45.jpeg | ||
| + | |Step_Picture_01=POCL_Balise_Mobilis_a2d96700-21a7-4d3c-af39-f1e82a49df06.jpg | ||
| + | |Step_Picture_02=POCL_Balise_Mobilis_c58bb05d-4338-4725-918d-e05970db4a55.jpg | ||
}} | }} | ||
{{Tuto Step | {{Tuto Step | ||
| − | |Step_Title=Finition | + | |Step_Title=Finition et test |
| − | |Step_Content= | + | |Step_Content='''1-Inspection de la structure''' |
| + | |||
| + | Vérifie toutes les jonctions collées : | ||
| + | |||
| + | Appuie légèrement pour vérifier qu’aucune pièce ne bouge. | ||
| + | |||
| + | Remplis éventuellement les petites fissures avec un léger filet de colle à bois. | ||
| + | |||
| + | '''2- Ponçage''' | ||
| + | |||
| + | Utilise un papier de verre grain 180 → 240 | ||
| + | |||
| + | pour enlever les traces de brûlure laser et adoucir les angles. | ||
| + | |||
| + | Peinture / Vernis | ||
| + | |||
| + | Tu peux appliquer : | ||
| + | |||
| + | Vernis incolore → effet propre et lumineux | ||
| + | |||
| + | Peinture acrylique → personnalisable | ||
| + | |||
| + | Ne peins pas les zones où les servomoteurs bougent pour éviter un frottement. | ||
| + | |||
| + | Finition des disques | ||
| + | |||
| + | Vérifie que les disques colorés bougent bien. | ||
| + | |||
| + | Renforce les bras avec un petit point de colle chaude si nécessaire. | ||
| + | |||
| + | '''3- Finition électronique (intérieur)''' | ||
| + | |||
| + | -Gestion des câbles | ||
| + | |||
| + | a. Regroupe les câbles par servo | ||
| + | |||
| + | b. Utilise la colle ou du ruban adhésif pour éviter que ça tire sur les broches | ||
| + | |||
| + | c. Monte entièrement l’ESP32 dans la base : | ||
| + | |||
| + | Collé sur une cale en bois | ||
| + | |||
| + | Ou vissé sur une petite plaque | ||
| + | |||
| + | - Vérification des connexions | ||
| + | |||
| + | Teste la tension 5V avec un multimètre | ||
| + | |||
| + | Vérifie que tous les GND sont bien reliés | ||
| + | |||
| + | Vérifie que tu n’as aucun fil débranché ou qui touche un autre. | ||
| + | |||
| + | '''4- Tests progressifs (très important)''' | ||
| + | |||
| + | Test 1 — Test alimentation | ||
| + | |||
| + | 1. Branche le câble USB | ||
| + | |||
| + | 2. Regarde si l’ESP32 s’allume | ||
| + | |||
| + | 3. Vérifie que les servos ne tremblent pas | ||
| − | + | Si oui : problème d’alimentation → utiliser un 5V stable | |
|Step_Picture_00=POCL_Balise_Mobilis_PHOTO_MAQUETTE.jpg | |Step_Picture_00=POCL_Balise_Mobilis_PHOTO_MAQUETTE.jpg | ||
| + | |Step_Picture_01=POCL_Balise_Mobilis_59073af4-f4c0-406a-8292-457205e5e3b5.jpg | ||
| + | |Step_Picture_02=POCL_Balise_Mobilis_d84b99ee-954f-4ea1-a5bd-28179530fed7.jpg | ||
}} | }} | ||
{{Notes | {{Notes | ||
Auteur
MathiasDuprat | Dernière modification 14/12/2025 par Mathiasduprat
Trafic, balise, maillage, translation, flux, circulation, sensibilisation, signal POCL_Balise_Mobilis_d84b99ee-954f-4ea1-a5bd-28179530fed7.jpg
Balise Mobilis est un objet signal implanté dans l’espace public traduisant les datas mouvantes liées au flux et à la densité du trafic routier à Bordeaux. Inscrite dans une logique de service public, Balise Mobilis se déploie dans différents quartiers de la ville selon un maillage agissant tel un réseau reliant les quartiers entre eux. La portée du projet à court terme est de faire prendre conscience aux impacts des mobilités et à long terme, d’impulser un changement d’usage : tendre vers les mobilités douces.
Inspiré des balises signalétiques en mer et de la signalisation routière, l’objet reprend les codes formels et colorés des panneaux et de la route. Quatre cerveaux moteurs sont camouflés dans le mât de l’objet. Ils servent à contrôler quarte bras de manière individuelle, afin de matérialiser la densité du trafic routier de par leur taille et leur couleur.Trois types de haut-parleurs, électrodynamique, électrostatique et piézoélectrique, représentent les technologies actuelles les plus courantes. Le haut-parleur électrodynamique, couvrant environ 99 % du marché, a encore un fonctionnement relativement simple pour une technologie de masse.
Le 10 décembre 1877, le premier brevet concernant un haut-parleur à bobine mobile fut accordé à Werner von Siemens. Le haut-parleur remplit une gamme très variée d'applications : on trouve des haut-parleurs aussi bien dans des cartes de vœux que reliés à des amplificateurs de puissance pour concert.- Conception du support à l'aide du logiciel Inscape
dimension du mat : 5x5x18 cm
parabole: demi cercle de 10cm
support des servo moteur : 20x13 cm
support du mat : 15x15 cm
tige 1 : 8x1 cm
tige 2 : 7x1 cm
tige 3 : 6x1 cm
tige 4 : 5x1 cm
- utilisation de la découpeuse laser pour matérialiser les plans du support sur une feuille de carton.
- assemblage du mat
- assemblage du toit
- fixation du mat + support du mat+ toit a l'aide de la colle.
from machine import Pin, PWM
import network
import urequests
import time
# === WIFI CONFIGURATION ===
WIFI_SSID = "caroline"
WIFI_PASS = "xPptucR33!"
# === REQUEST PARAMETERS ===
latitude = 44.8378
longitude = -0.5792
radius_m = 1000
# === Servo motors (4 servos) ===
SERVO_PINS = [33, 13, 16, 4]
servos = [PWM(Pin(pin), freq=50) for pin in SERVO_PINS]
def angle_to_duty_ns(angle):
min_ns = 500_000 # 0° → 0.5 ms
max_ns = 2_500_000 # 180° → 2.5 ms
return int(min_ns + (angle / 180) * (max_ns - min_ns))
initial_angles = [130, 0, 30, 0] # adapte la taille en fonction du nombre de servos
current_angles = initial_angles.copy()
def initiation_des_position():
for i, servo in enumerate(servos):
angle = initial_angles[i]
current_angles[i] = angle
servo.duty_ns(angle_to_duty_ns(angle))
def reset_all_servos():
for i, servo in enumerate(servos):
angle = initial_angles[i]
current_angles[i] = angle
servo.duty_ns(angle_to_duty_ns(angle))
# === ACTIVATE ONLY ONE SERVO ===
def activate_single_servo(state):
"""
Active uniquement un servo selon la valeur :
1 → servo 0
2 → servo 1
3 → servo 2
4 → servo 3
Tous les autres reviennent à 0°
"""
if 1 <= state <= 4:
servo_index = state -1
new_angle = current_angles[servo_index] + 60
servos[servo_index].duty_ns(angle_to_duty_ns(new_angle)) # Angle désiré
# === WIFI CONNECTION ===
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
reset_all_servos()
initiation_des_position()
if not wlan.isconnected():
print("Connecting to Wi-Fi...")
wlan.connect(WIFI_SSID, WIFI_PASS)
while not wlan.isconnected():
print(".", end="")
time.sleep(0.5)
print("\nConnected to Wi-Fi:", wlan.ifconfig())
# === API CALL ===
def call_api(lat, lon, radius_m):
url = f"https://hackathon.mathias-duprat.fr/api/liveTrafic?lat={lat}&long={lon}&radius={radius_m}"
print("\nCalling API:", url)
try:
res = urequests.get(url)
print("HTTP Code:", res.status_code)
data = res.json()
res.close()
return data
except Exception as e:
print("Error:", e)
return None
# === Speaker ===
BUZZER_PIN = 15
last_state = None
def update_state(new_state):
global last_state
if new_state != last_state and last_state is not None:
beep() # beep uniquement si l'état a changé
last_state = new_state
def beep(frequency=2000, duration=0.12):
buzzer = PWM(Pin(BUZZER_PIN))
buzzer.freq(frequency)
buzzer.duty(512)
time.sleep(duration)
buzzer.duty(0)
buzzer.deinit()
# === MAIN LOOP ===
connect_wifi()
previous_value = None
try:
while True:
beep()
data = call_api(latitude, longitude, radius_m)
if data and 'moyenne_etat' in data:
current_value = data['moyenne_etat']
beep(frequency=2000, duration=0.12)
if previous_value is None:
# Première lecture
previous_value = current_value
print(f"Initial moyenne_etat = {current_value}")
activate_single_servo(current_value)
beep()
elif current_value != previous_value:
# Changement d'état
print(f"Value changed from {previous_value} to {current_value}")
activate_single_servo(current_value)
previous_value = current_value
beep()
time.sleep(0.12)
else:
print(f"No change, current value = {current_value}")
else:
print("'moyenne_etat' not found in API response")
print("Waiting 10 seconds before next call...\n")
time.sleep(10)
except KeyboardInterrupt:
# Remise à zéro des servos et fin propre du programme
reset_all_servos()
for servo in servos:
servo.deinit()
print("\nProgramme arrêté")
1. Assembler du support du servomoteur au mat
Enclencher les 4 côtés verticaux (panneaux à encoches)
Coller pour rigidifier
Laisser un trou à la base pour faire passer le câble USB
2. Assembler du mat
Panneaux latéraux encastrés
Renforcer avec colle à bois
Faire passer les câbles des servos + alimentation à l’intérieur du tube
3. Assembler la tête semi-circulaire
Deux panneaux arrondis + une plateforme intérieure
Fixer le support du buzzer / HP à l’avant
Prévoir des trous pour les servos
4. Montage des tiges
Servos fixés en ligne
Tiges en bois reliées aux disques colorés
Vérifier le débattement (0° → 180°)
5. Installation des servomoteurs
- Fixer chaque servo dans une encoche prévue :
Servo 1 → Disque rouge
Servo 2 → Disque noir
Servo 3 → Disque jaune
Servo 4 → Disque bleu
- Passer les trois fils du servo dans la colonne :
Marron → GND
Rouge → 5V
Orange → GPIO (signal)
- Vérifier que les servos peuvent tourner sans forcer
Connexions servomoteurs → ESP32
Élément Fil servo ESP32
Servo 1 (rouge) Signal GPIO 14
Servo 2 (noir) Signal GPIO 27
Servo 3 (jaune) Signal GPIO 26
Servo 4 (bleu) Signal GPIO 25
Tous servos +5V Pin 5V
Tous servos GND GND
> Important : Tous les GND doivent pas être reliés ensemble.
Connexion du buzzer
Élément SP32
+ du buzzer GPIO 4
– du buzzer GND
6- Fermeture et finition
- Installer la partie supérieure sur la colonne
- Faire sortir le câble USB par l’ouverture du bas
- Fixer les disques de couleur sur les tiges
- Tester les servos et ajuster les bras si besoin
- Vernir ou peindre la structure si nécessaire
1-Inspection de la structure
Vérifie toutes les jonctions collées :
Appuie légèrement pour vérifier qu’aucune pièce ne bouge.
Remplis éventuellement les petites fissures avec un léger filet de colle à bois.
2- Ponçage
Utilise un papier de verre grain 180 → 240
pour enlever les traces de brûlure laser et adoucir les angles.
Peinture / Vernis
Tu peux appliquer :
Vernis incolore → effet propre et lumineux
Peinture acrylique → personnalisable
Ne peins pas les zones où les servomoteurs bougent pour éviter un frottement.
Finition des disques
Vérifie que les disques colorés bougent bien.
Renforce les bras avec un petit point de colle chaude si nécessaire.
3- Finition électronique (intérieur)
-Gestion des câbles
a. Regroupe les câbles par servo
b. Utilise la colle ou du ruban adhésif pour éviter que ça tire sur les broches
c. Monte entièrement l’ESP32 dans la base :
Collé sur une cale en bois
Ou vissé sur une petite plaque
- Vérification des connexions
Teste la tension 5V avec un multimètre
Vérifie que tous les GND sont bien reliés
Vérifie que tu n’as aucun fil débranché ou qui touche un autre.
4- Tests progressifs (très important)
Test 1 — Test alimentation
1. Branche le câble USB
2. Regarde si l’ESP32 s’allume
3. Vérifie que les servos ne tremblent pas
Si oui : problème d’alimentation → utiliser un 5V stable
Notre objet prend la forme d’une balise inspirée à la fois de balise navale mais aussi de cadran solaire, il contient un cercle central vide vers lequel un cercle plein va venir se placer dans un mouvement rotatif. En fonction de la densité du trafic, le cercle signal (au centre haut de l’objet) sera de plus en plus gros (accumulation de tous les bras).
- Distance des balises (maillage peu dense)
- Ne pas avoir accès à Internet
- Mauvaise manipulation des câbles
- Fragilité des câbles
Lorsqu'un usager de la route, (piéton, voiture, cycliste) sort de chez lui dans sa vie quotidienne que ce soit pour le travail ou loisir, sa mobilité peut avoir un réel impact sur l’environnement qui l’entoure tout au long de son trajet il pourra visualiser les différentes densité de trafic dans chaque zone et ainsi se rendre compte du trafic en fonction des horaires et de faire évoluer ses habitudes.
Cet objet pourrait être essentiel dans la vie de tous les jours grâce à plusieurs avantages :
Open Data Bordeaux Métropole - https://opendata.bordeaux-metropole.fr/explore/dataset/dechetteries-en-temps-reel/information/
Dernière modification 14/12/2025 par user:Mathiasduprat.
Draft
Vous avez entré un nom de page invalide, avec un ou plusieurs caractères suivants :
< > @ ~ : * € £ ` + = / \ | [ ] { } ; ? #