Dispo'Velo : Différence entre versions

Ligne 47 : Ligne 47 :
 
{{Tuto Step
 
{{Tuto Step
 
|Step_Title=Assemblage circuit
 
|Step_Title=Assemblage circuit
 +
|Step_Content=Lors de cette étape,
 +
 +
 +
Branchement des câbles :
 +
 +
Servomoteur : on branche le 5v (fil rouge) sur le + du breadboard et le GND (fil maron) sur le – du breadboard, le jaune se branche sur le port 37 de l’ESP32.
 +
 +
 +
Bandeau LED : on branche le 5v sur le + du breadboard et le GND sur le – du breadboard, le DIN se branche sur le port 5 de l’ESP32.
 
|Step_Picture_00=Dispo_Velo_Circuit_1.png
 
|Step_Picture_00=Dispo_Velo_Circuit_1.png
 +
|Step_Picture_01=Dispo_Velo_Assemblage_Arduino.png
 
}}
 
}}
 
{{Tuto Step
 
{{Tuto Step
 
|Step_Title=Création du code
 
|Step_Title=Création du code
|Step_Content=Lors de cette étape, notre informaticien a créé le code pour notre POCL, le code est le suivant :
+
|Step_Content=Lors de cette étape, notre informaticien a créé le code pour notre POCL. Le code sert à montrer la disponibilité des vélos Le code est le suivant :
  
 +
<syntaxhighlight lang="python">
 +
# Nombre de LEDs dans ton bandeau
 +
NUM_LEDS = 3  # Mets le vrai nombre ici
  
<nowiki>#</nowiki> Nombre de LEDs dans ton bandeau
+
# GPIO où le DIN est branché
 
 
NUM_LEDS = 3  # Mets le vrai nombre ici
 
 
 
<nowiki>#</nowiki> GPIO où le DIN est branché
 
 
 
 
PIN_NUM = 32
 
PIN_NUM = 32
  
<nowiki>#</nowiki> Initialisation du bandeau
+
# Initialisation du bandeau
 
 
 
np = neopixel.NeoPixel(Pin(PIN_NUM, Pin.OUT), NUM_LEDS)
 
np = neopixel.NeoPixel(Pin(PIN_NUM, Pin.OUT), NUM_LEDS)
  
<nowiki>#</nowiki> Allumer la première LED (rouge)
+
# Allumer la première LED (rouge)
 
+
np[0] = (255, 0, 0) # (R, G, B)
np[0] = (255, 0, 0)  # (R, G, B)
+
np.write() # Envoie les données au bandeau
 
 
np.write()  # Envoie les données au bandeau
 
  
 
print("Première LED allumée en rouge !")
 
print("Première LED allumée en rouge !")
  
 
import network
 
import network
 
 
from machine import Pin, PWM
 
from machine import Pin, PWM
 
 
import neopixel
 
import neopixel
 
 
from time import sleep, ticks_ms
 
from time import sleep, ticks_ms
  
<nowiki>#</nowiki> --- Configuration Wi-Fi ---
+
# --- Configuration Wi-Fi ---
 
 
 
SSID = "POCO F7 Ultra"
 
SSID = "POCO F7 Ultra"
 
 
PASSWORD = "2444666668888888"
 
PASSWORD = "2444666668888888"
  
<nowiki>#</nowiki> --- Broche servo ---
+
# --- Broche servo ---
 
 
 
SERVO_PIN = 5
 
SERVO_PIN = 5
 
 
servo = PWM(Pin(SERVO_PIN))
 
servo = PWM(Pin(SERVO_PIN))
 
 
servo.freq(50)
 
servo.freq(50)
  
<nowiki>#</nowiki> --- Bandeaux NeoPixel ---
+
# --- Bandeaux NeoPixel ---
 
 
 
NUM_LEDS = 3
 
NUM_LEDS = 3
 
 
np1 = neopixel.NeoPixel(Pin(32, Pin.OUT), NUM_LEDS)
 
np1 = neopixel.NeoPixel(Pin(32, Pin.OUT), NUM_LEDS)
 
 
np2 = neopixel.NeoPixel(Pin(33, Pin.OUT), NUM_LEDS)
 
np2 = neopixel.NeoPixel(Pin(33, Pin.OUT), NUM_LEDS)
  
<nowiki>#</nowiki> --- Couleurs ---
+
# --- Couleurs ---
 
 
 
BLUE = (0, 0, 255)
 
BLUE = (0, 0, 255)
 
 
RED = (255, 0, 0)
 
RED = (255, 0, 0)
  
<nowiki>#</nowiki> --- Fonctions ---
+
# --- Fonctions ---
 
 
 
def connect_wifi():
 
def connect_wifi():
 
+
    wlan = network.WLAN(network.STA_IF)
    wlan = network.WLAN(network.STA_IF)
+
    wlan.active(True)
 
+
    if not wlan.isconnected():
    wlan.active(True)
+
        print("Connexion au Wi-Fi...")
 
+
        wlan.connect(SSID, PASSWORD)
    if not wlan.isconnected():
+
        while not wlan.isconnected():
 
+
            sleep(0.5)
        print("Connexion au Wi-Fi...")
+
            print(".", end="")
 
+
    print("\n✅ Connecté :", wlan.ifconfig())
        wlan.connect(SSID, PASSWORD)
+
    return wlan
 
 
        while not wlan.isconnected():
 
 
 
            sleep(0.5)
 
 
 
            print(".", end="")
 
 
 
    print("\n✅ Connecté :", wlan.ifconfig())
 
 
 
    return wlan
 
  
 
def angle_to_duty(angle):
 
def angle_to_duty(angle):
 
+
    return int((angle / 180) * 75 + 40)
    return int((angle / 180) * 75 + 40)
 
  
 
def set_color(color):
 
def set_color(color):
 
+
    """Allume tous les LEDs d’un bandeau avec la couleur donnée"""
    """Allume tous les LEDs d’un bandeau avec la couleur donnée"""
+
    for i in range(NUM_LEDS):
 
+
        np1[i] = color
    for i in range(NUM_LEDS):
+
        np2[i] = color
 
+
    np1.write()
        np1[i] = color
+
    np2.write()
 
 
        np2[i] = color
 
 
 
    np1.write()
 
 
 
    np2.write()
 
  
 
def blink_blue_once():
 
def blink_blue_once():
 
+
    """Éteint brièvement les LEDs puis les rallume en bleu"""
    """Éteint brièvement les LEDs puis les rallume en bleu"""
+
    for i in range(NUM_LEDS):
 
+
        np1[i] = (0,0,0)
    for i in range(NUM_LEDS):
+
        np2[i] = (0,0,0)
 
+
    np1.write()
        np1[i] = (0,0,0)
+
    np2.write()
 
+
    sleep(0.2)
        np2[i] = (0,0,0)
+
    set_color(BLUE)
 
 
    np1.write()
 
 
 
    np2.write()
 
 
 
    sleep(0.2)
 
 
 
    set_color(BLUE)
 
  
 
def move_servo_and_blink():
 
def move_servo_and_blink():
 
+
    """Bouge le servo et fait clignoter les LEDs bleues"""
    """Bouge le servo et fait clignoter les LEDs bleues"""
+
    servo.duty(angle_to_duty(120))
 
+
    sleep(0.5)
    servo.duty(angle_to_duty(120))
+
    servo.duty(angle_to_duty(0))
 
+
    blink_blue_once()
    sleep(0.5)
 
 
 
    servo.duty(angle_to_duty(0))
 
 
 
    blink_blue_once()
 
  
 
def red_flash():
 
def red_flash():
 +
    """Allume les LEDs en rouge pendant un court instant"""
 +
    set_color(RED)
 +
    sleep(1)  # LED rouge pendant 1 seconde
 +
    set_color(BLUE)  # revenir au bleu
  
    """Allume les LEDs en rouge pendant un court instant"""
+
# --- Boucle principale ---
 
 
    set_color(RED)
 
 
 
    sleep(1)  # LED rouge pendant 1 seconde
 
 
 
    set_color(BLUE)  # revenir au bleu
 
 
 
<nowiki>#</nowiki> --- Boucle principale ---
 
 
 
 
def main():
 
def main():
 +
    connect_wifi()
 +
    set_color(BLUE)  # LEDs allumées en bleu dès le départ
 +
    last_servo_time = ticks_ms()
 +
    last_red_time = ticks_ms()
  
    connect_wifi()
+
    while True:
 
+
        now = ticks_ms()
    set_color(BLUE)  # LEDs allumées en bleu dès le départ
 
 
 
    last_servo_time = ticks_ms()
 
 
 
    last_red_time = ticks_ms()
 
 
 
    while True:
 
 
 
        now = ticks_ms()
 
 
 
        # Servo + clignotement bleu toutes les 1 minute
 
 
 
        if now - last_servo_time > 60000:  # 1 min
 
 
 
            move_servo_and_blink()
 
 
 
            last_servo_time = now
 
 
 
        # LEDs rouges toutes les 5 minutes
 
 
 
        if now - last_red_time > 300000:  # 5 min
 
  
            red_flash()
+
        # Servo + clignotement bleu toutes les 1 minute
 +
        if now - last_servo_time > 60000:  # 1 min
 +
            move_servo_and_blink()
 +
            last_servo_time = now
  
            last_red_time = now
+
        # LEDs rouges toutes les 5 minutes
 +
        if now - last_red_time > 300000:  # 5 min
 +
            red_flash()
 +
            last_red_time = now
  
        sleep(0.1)
+
        sleep(0.1)
  
 
main()
 
main()
 +
</syntaxhighlight>
 
|Step_Picture_00=Dispo_Velo_Codes.png
 
|Step_Picture_00=Dispo_Velo_Codes.png
 
}}
 
}}
Ligne 239 : Ligne 185 :
 
{{Notes
 
{{Notes
 
|Observations=Lorsque l’usager  arrive à son arrêt de tram, il y voit un dispositif qui ressemble à un disque noir. Il peut remarquer 3 points de stations les plus proches de cet arrêt. Il y a également des bandes de LEDs pour avoir une vision ludique de la qualité de vélo disponible allant du vert au jaune puis au rouge selon la quantité. Concernant les 3 points de stations, il y a des numérotations de 0 à 30 vélos allant de 5 en 5 pour savoir exactement le nombre de vélo. Le nombre exact de vélo est montré par une flèche.
 
|Observations=Lorsque l’usager  arrive à son arrêt de tram, il y voit un dispositif qui ressemble à un disque noir. Il peut remarquer 3 points de stations les plus proches de cet arrêt. Il y a également des bandes de LEDs pour avoir une vision ludique de la qualité de vélo disponible allant du vert au jaune puis au rouge selon la quantité. Concernant les 3 points de stations, il y a des numérotations de 0 à 30 vélos allant de 5 en 5 pour savoir exactement le nombre de vélo. Le nombre exact de vélo est montré par une flèche.
|Applications=Comme dit précédemment dans la description, le dispositif Dispo'Vélo
+
|Avertissement=Ce qui pourrait fait rater l’expérience, c’est premièrement, un problème avec les données de bordeaux métropoles. S’il y a interruption ou problème de transmission avec les données, l’objet ne peut pas marcher (Leds et Flèche)
 +
 
 +
 
 +
Deuxièmement, on peut se faire hacker notre objet qui fonctionne à l’aide d’une base de données actif (Bordeaux Métropole)
 +
 
 +
 
 +
Troisièmement, les conditions météorologiques peuvent possiblement influer sur le fonctionnement de l’objet.
 +
 
 +
 
 +
Quatrièmement, la détérioration pas des individus externes au projet peut être une possibilité.
 +
 
 +
 
 +
Cinquièmement, des composants qui grillent notamment les bands Leds.
 +
 
 +
 
 +
Sixièmement, nous avons paramétré notre objet afin qu’il puisse traiter un maximum de 35 vélos. S’il y a dépassement, la flèche pour indiquer le nombre de vélo et les lesds restent au maximum défini sur le code. Donc ils n’affichent pas la donnée correcte.
 
|Related=Plus de temps lors du Hackaton pour mieux réaliser notre POCL, la contrainte de temps et de charge de travail sur cette période nous a empêché de mener à bout notre démarche sur la création du Dispo'Vélo.
 
|Related=Plus de temps lors du Hackaton pour mieux réaliser notre POCL, la contrainte de temps et de charge de travail sur cette période nous a empêché de mener à bout notre démarche sur la création du Dispo'Vélo.
 
}}
 
}}

Version du 12 décembre 2025 à 16:34

Auteur avatarLouis333 | Dernière modification 12/12/2025 par Louis333

Dispo Velo Dispo V lo.jpg
Situé à chaque arrêt de tram, Dispo'Vélo permet de communiquer rapidement et efficacement aux voyageurs où sont situées les stations de Vélib par rapport à l'arrêt de Tram et combien de vélo sont disponibles.
Licence : Attribution (CC-BY)

Étape 1 - Réalisation de croquis

Lors de notre phase de design, nous avons procédé à la réalisation d'une multitude de croquis nous permettant de sortir toutes nos idées sur la thématique imposée. Cette phase nous permet de valider ou invalider ces mêmes idées pour notre phase de prototypage.



Étape 2 - Prototypage

Une fois nos idées établies via nos croquis



Étape 3 - Assemblage circuit

Lors de cette étape,


Branchement des câbles :

Servomoteur : on branche le 5v (fil rouge) sur le + du breadboard et le GND (fil maron) sur le – du breadboard, le jaune se branche sur le port 37 de l’ESP32.


Bandeau LED : on branche le 5v sur le + du breadboard et le GND sur le – du breadboard, le DIN se branche sur le port 5 de l’ESP32.



Étape 4 - Création du code

Lors de cette étape, notre informaticien a créé le code pour notre POCL. Le code sert à montrer la disponibilité des vélos Le code est le suivant :

# Nombre de LEDs dans ton bandeau
NUM_LEDS = 3  # Mets le vrai nombre ici

# GPIO où le DIN est branché
PIN_NUM = 32

# Initialisation du bandeau
np = neopixel.NeoPixel(Pin(PIN_NUM, Pin.OUT), NUM_LEDS)

# Allumer la première LED (rouge)
np[0] = (255, 0, 0)  # (R, G, B)
np.write()  # Envoie les données au bandeau

print("Première LED allumée en rouge !")

import network
from machine import Pin, PWM
import neopixel
from time import sleep, ticks_ms

# --- Configuration Wi-Fi ---
SSID = "POCO F7 Ultra"
PASSWORD = "2444666668888888"

# --- Broche servo ---
SERVO_PIN = 5
servo = PWM(Pin(SERVO_PIN))
servo.freq(50)

# --- Bandeaux NeoPixel ---
NUM_LEDS = 3
np1 = neopixel.NeoPixel(Pin(32, Pin.OUT), NUM_LEDS)
np2 = neopixel.NeoPixel(Pin(33, Pin.OUT), NUM_LEDS)

# --- Couleurs ---
BLUE = (0, 0, 255)
RED = (255, 0, 0)

# --- Fonctions ---
def connect_wifi():
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    if not wlan.isconnected():
        print("Connexion au Wi-Fi...")
        wlan.connect(SSID, PASSWORD)
        while not wlan.isconnected():
            sleep(0.5)
            print(".", end="")
    print("\n✅ Connecté :", wlan.ifconfig())
    return wlan

def angle_to_duty(angle):
    return int((angle / 180) * 75 + 40)

def set_color(color):
    """Allume tous les LEDs d’un bandeau avec la couleur donnée"""
    for i in range(NUM_LEDS):
        np1[i] = color
        np2[i] = color
    np1.write()
    np2.write()

def blink_blue_once():
    """Éteint brièvement les LEDs puis les rallume en bleu"""
    for i in range(NUM_LEDS):
        np1[i] = (0,0,0)
        np2[i] = (0,0,0)
    np1.write()
    np2.write()
    sleep(0.2)
    set_color(BLUE)

def move_servo_and_blink():
    """Bouge le servo et fait clignoter les LEDs bleues"""
    servo.duty(angle_to_duty(120))
    sleep(0.5)
    servo.duty(angle_to_duty(0))
    blink_blue_once()

def red_flash():
    """Allume les LEDs en rouge pendant un court instant"""
    set_color(RED)
    sleep(1)  # LED rouge pendant 1 seconde
    set_color(BLUE)  # revenir au bleu

# --- Boucle principale ---
def main():
    connect_wifi()
    set_color(BLUE)  # LEDs allumées en bleu dès le départ
    last_servo_time = ticks_ms()
    last_red_time = ticks_ms()

    while True:
        now = ticks_ms()

        # Servo + clignotement bleu toutes les 1 minute
        if now - last_servo_time > 60000:  # 1 min
            move_servo_and_blink()
            last_servo_time = now

        # LEDs rouges toutes les 5 minutes
        if now - last_red_time > 300000:  # 5 min
            red_flash()
            last_red_time = now

        sleep(0.1)

main()




Étape 5 - Premier assemblage




Étape 6 - Exposition




Comment ça marche ?

Observations : que voit-on ?

Lorsque l’usager arrive à son arrêt de tram, il y voit un dispositif qui ressemble à un disque noir. Il peut remarquer 3 points de stations les plus proches de cet arrêt. Il y a également des bandes de LEDs pour avoir une vision ludique de la qualité de vélo disponible allant du vert au jaune puis au rouge selon la quantité. Concernant les 3 points de stations, il y a des numérotations de 0 à 30 vélos allant de 5 en 5 pour savoir exactement le nombre de vélo. Le nombre exact de vélo est montré par une flèche.

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

Ce qui pourrait fait rater l’expérience, c’est premièrement, un problème avec les données de bordeaux métropoles. S’il y a interruption ou problème de transmission avec les données, l’objet ne peut pas marcher (Leds et Flèche)


Deuxièmement, on peut se faire hacker notre objet qui fonctionne à l’aide d’une base de données actif (Bordeaux Métropole)


Troisièmement, les conditions météorologiques peuvent possiblement influer sur le fonctionnement de l’objet.


Quatrièmement, la détérioration pas des individus externes au projet peut être une possibilité.


Cinquièmement, des composants qui grillent notamment les bands Leds.


Sixièmement, nous avons paramétré notre objet afin qu’il puisse traiter un maximum de 35 vélos. S’il y a dépassement, la flèche pour indiquer le nombre de vélo et les lesds restent au maximum défini sur le code. Donc ils n’affichent pas la donnée correcte.


Vous aimerez aussi

Plus de temps lors du Hackaton pour mieux réaliser notre POCL, la contrainte de temps et de charge de travail sur cette période nous a empêché de mener à bout notre démarche sur la création du Dispo'Vélo.


Dernière modification 12/12/2025 par user:Louis333.

Commentaires

Draft