Catégories
MBOT Robotique

Programmer un robot suiveur de couloir et explorateur de labyrinthe

Le défi proposé consiste à programmer un robot capable de suivre un couloir au centre, de s’arrêter en fin de couloir, puis de choisir une nouvelle direction en privilégiant une possibilité d’un nouveau couloir à droite.

Le robot est équipé de trois capteurs de collision :

  • Un capteur avant : détecte la fin du couloir ou un obstacle frontal.
  • Un capteur latéral droit : permet de rester centré dans le couloir et de vérifier si un passage existe à droite.
  • Un capteur latéral gauche : même rôle que le droit, mais du côté gauche.

Suivre le couloir au centre

Tant que le capteur avant ne détecte pas la fin du couloir :

  • le robot avance,
  • il vérifie la distance avec les murs grâce aux capteurs gauche et droit,
  • si l’un des murs est trop proche, il s’en éloigne légèrement pour rester centré.

Détection de fin de couloir

Lorsque le capteur avant détecte un obstacle frontal ou l’absence de mur en face :

  • le robot s’arrête,
  • il regarde à droite, puis à gauche, pour déterminer s’il existe un nouveau couloir dans l’une de ces directions.

Choix de la direction

  1. Si un passage existe à droite, il tourne à droite et avance.
  2. Sinon, si un passage existe à gauche, il tourne à gauche et avance.
  3. Sinon, aucune direction n’est possible : le robot effectue un demi-tour.

Algorithme simplifié

répéter :

   si capteur avant détecte fin du couloir :
       arrêter le robot
       si côté droit ouvert :
            tourner à droite
       sinon si côté gauche ouvert :
            tourner à gauche
       sinon :
            faire demi-tour

   sinon :
        si mur trop proche à droite : se décaler à gauche
        sinon si mur trop proche à gauche : se décaler à droite
        sinon avancer au centre du couloir

Le code sous mBlock :

Pour aller tout droit dans le couloir :

Pour choisir sa direction :

Catégories
ALGORA Niveau 01 Robotique

Arbre de Noël

Concevoir un mini-projet : un « arbre de Noël » avec 3 LED qui s’allument au claquement de mains.

Liste du matériel


Etape 01 : Le tableau des assignations

Clique sur le menu Edition en haut de l’écran et choisis Paramètres des ports.
Clique ensuite sur le bouton Tout décocher .
Puis indique tous les éléments que tu as rajoutés sur ton robot.

Cable et valide tes modifications en cliquant sur le bouton OK
Attention au positionnement du câble gris sur la carte ARDUINO !!!


Etape 02 : Crée des animations

Tu vas créer 5 animations :

  • Allume toutes les leds
  • Eteins toutes les leds
  • Allume la led0
  • Allume la led1
  • Allume la led2

Pour cela tu vas créer 5 fonctions :

  • TOUTES_LES_LED_ON
  • TOUTES_LES_LED_OFF
  • LED0_ON
  • LED1_ON
  • LED2_ON

Code les 5 fonctions pour allumer ou éteindre les LEDs en choisissant « on » ou « off ».

Puis testes le fonctionnement des fonctions en mode test :

Après l’affichage du tableau des capteurs clique sur l’étiquette de chaque « Fonction » pour tester l’animation des diffréntes LEDs.
Clique sur « Exécuter » puis sur « Activer le test »

Tu animes ton arbre de Noël en cliquant sur chaque fonction.


Etape 02 : Teste le chronomètre

Ta mission :
Maintenant, automatises l’animation pour ne plus avoir besoin de cliquer sur chaque animation.
Code les animations pour qu’elles se succédent indéfiniment.

Une solution
Automatise ton spectacle d’animation lumineux en utilisant le « chronomètre » pour cadencer ton animation.
Teste le fonctionnement du « chronomètre ». Dans « Capteurs », coche l’affichage de « chronomètre ».

Utilise le « chronomètre » pour allumer ta LED au bout de 2 secondes.

Agence ces instructions sous « démarrer le programme «
Clique sur « Exécuter » puis sur « Activer le test »

Clique sur le drapeau vert en haut à droite de l’écran pour lancer l’exécution de ton programme.

Un bord blanc apparaît pour indiquer que le programme s’exécute.
Que constates-tu ? Le chronomètre evolue-t-il ? La LED s’allume-t-elle ? Le bord blanc disparait-il ?

La LED s’allume et le bord blanc disparaît au bout de 2 secondes.


Etape 03 : Automatise tes animations

Ta mission :
Fais clignoter ta LED toutes les secondes. Pour cela, crée une variable « ANIMATION ». Elle prendra les valeurs suivantes :

  • 0 éteinte
  • 1 allumée

Toutes les secondes la variable ANIMATION passe de la valeur 0 à 1, la LED s’allume et s’éteint ainsi toutes les secondes.

Clique sur le menu Exécuter en haut de l’écran puis choisis Transférer

Utilise les animations que tu avais crées pour utiliser plusieurs LEDs :

Clique sur le menu Exécuter en haut de l’écran puis choisis Transférer

Tu peux améliorer ton code pour le rendre plus lisible :

Crée une fonction INIT pour regrouper les instructions au lancement de ton programme :

Ton code est ainsi plus facile à comprendre.

Clique sur le menu Exécuter en haut de l’écran puis choisis Transférer


Etape 04 : Encore plus d’animations

Continue à améliorer ton animation des LEDs. Allume les trois LEDs, puis la LED0, puis la LED1, puis la LED2.

Tu peux inventer autant d’animations que tu souhaites. A toi d’être imaginatif, tu peux faire varier la variable ANIMATION à plus de 4 animations. A toi de trouver les animations et de faire attention à modifier dans la fonction INIT le nombre maximum d’animation.


Code tes animations puis clique sur le menu Exécuter en haut de l’écran puis choisis Transférer


Etape 05 : Commande tes animations d’un clap de main

Code pour que ton spectacle se lance par un clap des mains puis s’arrête par un nouveau clap des mains.
Le son de ton clap de main dure un certain temps. Les instructions suivantes te permettent de détecter un son puis de détecter quand le son se termine :

Il est important d’attendre que le son du claquement de mains soit terminé.
Sinon, ton programme risque de détecter un nouveau claquement alors que le premier n’est pas encore fini !

À chaque claquement de mains, ton robot allume ou éteint les LED.

Maintenant programme pour que sur un clap des mains le spectacle de lumière se lance puis tu peux l’arrêter par un nouveau clap des mains.
Ton spectacle doit être magnifique, faire clignoter toutes les LEDs en même temps, les faire clignoter successivement …

Crée une variable « ON » qui va mémoriser l’état de ton animation :

  • 1 en fonctionnement
  • 0 éteinte

Puis une fonction qui teste le microphone pour allumer ou éteindre
l’animation :

Insère ta fonction « SI_ON » dans le code principal et conditionne le lancement de ton animation en fonction de la variable « ON ».

Clique sur le menu Exécuter en haut de l’écran puis choisis Transférer

Catégories
ALGORA Niveau 01 Robotique

ALLGORA : trafic routier

Tu dois inventer une nouvelle signalisation

🎯 Objectif du projet

Tu vas construire et programmer un feu de circulation nouvelle génération !
Ta mission : aider le gouvernement à simplifier les feux pour réduire la consommation d’énergie tout en assurant la sécurité de tous les usagers.

🚦 Ce que tu vas apprendre

  • À monter un circuit avec 4 LEDs, un capteur de pression et une alarme sonore.
  • À programmer un feu de circulation en gérant le temps et les conditions de passage.
  • À utiliser des notions essentielles en programmation :
    • VARIABLES : pour mémoriser des informations (ex. : état du feu).
    • FONCTIONS : pour rendre ton code plus clair et plus facile à modifier.
  • À faire des choix logiques pour assurer la sécurité des piétons et des véhicules.

🕹️ Découvrir le rôle des couleurs

CouleurSignificationAction attendue
🟢 VertPassage autoriséLes voitures roulent
🟡 OrangeAttention, changementPrépare à s’arrêter
🔴 RougePassage interditLes voitures s’arrêtent

Mais… ton défi est de supprimer une couleur !
Tu devras donc imaginer une nouvelle logique à deux couleurs :

🧠 Ta mission

Le gouvernement français souhaite réaliser des économies d’énergie.
Tu dois créer un feu bicolore intelligent (vert + rouge) capable de :

  • Réguler la circulation des véhicules.
  • Avertir avant le passage au rouge grâce au clignotement.
  • Laisser passer les piétons avec un capteur de pression (bouton).
  • Activer une alarme quand un piéton peut traverser.

🧩 Matériel nécessaire

  • 1 carte microcontrôleur
  • 4 LEDs (rouge, verte)
  • 1 capteur de pression ou bouton poussoir
  • 1 buzzer ou alarme sonore

Clique sur le menu Edition en haut de l’écran et choisis Paramètres des ports.
Clique ensuite sur le bouton Tout décocher .
Puis indique tous les éléments que tu as rajoutés sur ton robot.

  • LED A0 Vert pour véhicule
  • LED A1 Rouge pour véhicule
  • LED A2 Vert pour piéton
  • LED A3 Rouge pour piéton

Cable et valide tes modifications en cliquant sur le bouton OK


Etape 01 : gère le passage des véhicules

Dans un premier temps, tu devras allumer la LED verte pour avertir les automobilistes qu’ils peuvent passer, puis, après un certain délai, allumer la LED rouge pour interdire le passage des véhicules.

Assemble les blocs puis clique sur le menu Exécuter en haut de l’écran et choisis Transférer


Etape 03 : Faire clignoter pour avertir

Tu devras faire clignoter la LED verte pour avertir les automobilistes que le feu va passer au rouge et qu’ils doivent se préparer à arrêter leur véhicule.

Assemble les blocs puis clique sur le menu Exécuter en haut de l’écran et choisis Transférer.


Etape 04 : Amélioration de ton code

En utilisant des fonctions, tu vas réorganiser ton code pour le rendre plus lisible et faciliter son évolution..

Assemble les blocs puis clique sur le menu Exécuter en haut de l’écran et choisis Transférer

Les fonctions permettent de regrouper plusieurs blocs qui réalisent une même action (par exemple : « attention_vehicule »).
Elles évitent de répéter le même code plusieurs fois, ce qui rend le programme plus court et plus clair.
Elles facilitent la lecture du programme, car chaque fonction porte un nom qui décrit son rôle.
Elles rendent le code plus facile à modifier ou à corriger, car une seule modification dans la fonction s’applique partout.
Enfin, elles aident à mieux organiser sa pensée comme un vrai programmeur, en découpant le problème en petites étapes logiques.


Etape 05 : Gérer le passage pieton

Tu vas gérer les LEDs verte et rouge du piéton en fonction de celles du passage des véhicules.

Tu vas gérer le passage piéton :

  • quand les véhicules ont l’autorisation de passer, le piéton doit attendre ;
  • quand les véhicules sont à l’arrêt, le piéton peut traverser.

Clique sur le menu Exécuter en haut de l’écran et choisis Transférer


Etape 06 : Faire clignoter pour avertir le piéton

Tu vas faire clignoter la LED verte du piéton pour l’avertir que le feu va bientôt passer au rouge.

Clique sur le menu Exécuter en haut de l’écran et choisis Transférer


Etape 07 : Avertissement sonore pour les piétons non-voyants

Tu vas déclencher le buzzer lorsque les piétons peuvent passer pour avertir les personnes non-voyantes.

Clique sur le menu Exécuter en haut de l’écran et choisis Transférer


Etape 08 : Gérer les temps d’attentes

Nous allons utiliser des variables pour fixer des temps d’attente différents : un pour les conducteurs et un autre pour les piétons.

Clique sur le menu Exécuter en haut de l’écran et choisis Transférer

Les variables sont comme des boîtes dans lesquelles on peut ranger des informations (par exemple un nombre, le temps d’attente en seconde).
Elles permettent au programme de mémoriser des données et de s’en servir plus tard.
Grâce aux variables, ton programme peut changer de comportement selon la situation (par exemple, attendre plus ou moins longtemps).
Elles rendent le code plus facile à comprendre et à modifier, car il suffit de changer la valeur d’une variable pour tout adapter.
En résumé, les variables servent à donner de la mémoire et de la souplesse à ton programme.


Etape 09 : Gérer une demande d’un piéton

Pendant la phase d’attente, le piéton pourra demander l’arrêt des véhicules pour traverser en toute sécurité.
Le piéton devra appuyer sur le capteur de pression pour obtenir l’autorisation de passer.

La demande du piéton sera traitée pendant sa phase d’attente au feu rouge.
Tu utiliseras un chronomètre pour compter le temps d’attente du piéton tout en vérifiant si le capteur de pression est activé.
Si le piéton appuie sur le capteur, sa valeur sera égale à zéro.
Tu laisseras ensuite un petit temps supplémentaire pour que les voitures puissent encore passer avant que le feu piéton ne devienne vert.

Clique sur le menu Exécuter en haut de l’écran et choisis Transférer


GERTRUDE

Un exemple de service de la gestion de la circulation

Gertrude Saem a été créée en 1981 par la Communauté Urbaine de Bordeaux avec l’objectif de développer un système d’avant-garde pour améliorer ou résoudre les problèmes de circulation, de transport publics, de contrôle et de diminution de la pollution véhiculaire et de sécurité dans la ville.
Le principe est de minimiser les temps d’attente en synchronisant les feux sur les grands axes, en fonction du trafic. Des installations comptent les véhicules ou les longueurs des files d’attente (boucles magnétiques implantées dans la chaussée, aux carrefours et sur les axes), et le tout est centralisé à un poste de commande, qui régule informatiquement les feux de la ville ou de l’agglomération et fluidifie ainsi le trafic.

GERTRUDE EN FRANCE
Antibes, Bordeaux, Brive, Caen, Dax, Dunkerque, Fort-de-France, Le Mans, Marseille, Metz, Mimizan, Mont de Marsan, Montpellier, Nîmes, Reims, Troyes, Saint-Vincent-de-Tyrosse, SDEC du Calvados.

UN SAVOIR-FAIRE ET DES SOLUTIONS QUI S’EXPORTENT DANS LE MONDE
Algérie (Alger), Argentine (Posadas), Chine (Pékin), Egypte (Le Caire), Maroc (Casablanca), Mexique (Monterrey, Morelia), Paraguay (Asuncion), Pologne (Wroclaw), Portugal (Lisbonne, Porto).

Voir la vidéo de présentation

Catégories
MICRO PYTHON MICRO:BIT

Python avancé avec la micro:bit

Tu as déjà appris les bases de Python et tu veux aller plus loin ? Avec la micro:bit, tu vas coder des jeux, des calculatrices, des capteurs, et bien plus encore.
Tu vas manipuler des boucles, des fonctions, des événements, et même des conversions de bases (binaire, hexadécimal, etc.) — des compétences utiles pour le lycée, les études, et même dans le monde professionnel.
La micro:bit interagit avec le monde réel grâce à ses boutons, ses capteurs et son écran LED. Tu pourras voir le résultat de ton code en temps réel !

Partie 01 : Découverte des tables en Python

Apprendre à utiliser et manipuler des tables (ou listes) en Python, en affichant une séquence de chiffres ou d’images sur l’écran de la micro:bit.

  • Une table en Python s’écrit entre crochets : [ ].
  • Les éléments sont séparés par des virgules.
  • Pour afficher une image, utilise Image.NOM_DE_L_IMAGE (ex : Image.SMILE).
from microbit import *

while True:
    all_images = [str(1), str(2), str(3)]
    display.show(all_images, delay=300)

Modifie le programme suivant pour qu’il affiche, dans l’ordre, les chiffres de 1 à 5 sur l’écran de la micro:bit, avec un délai de 300 ms entre chaque chiffre.

  1. Comprendre la table all_images Actuellement, la table all_images contient les chaînes de caractères "1", "2" et "3". Question : Comment faire pour qu’elle contienne les chiffres de 1 à 5 ?
  2. Modifier la table Ajoute les chiffres manquants ("4" et "5") dans la table all_images.
  3. Tester le programme Télécharge ton programme sur la micro:bit et vérifie que les chiffres défilent bien de 1 à 5.
  4. Personnalisation (défis bonus !)
    • Défi 1 : Fais défiler les chiffres de 5 à 1.
    • Défi 2 : Crée ta propre table avec des motifs ou des lettres (ex : "A", "B", "C").
    • Défi 3 : Remplace les chiffres par des images (ex : Image.HAPPY, Image.SAD, Image.HEART).

Crée une animation graphique :

from microbit import *

while True:
    image1 = Image("99999:"
                  "90009:"
                  "90009:"
                  "90009:"
                  "99999")
    image2 = Image("00000:"
                   "09990:"
                   "09090:"
                   "09990:"
                   "00000")
    image3 = Image("00000:"
                   "00000:"
                   "00900:"
                   "00000:"
                   "00000")
    image4 = Image("00000:"
                   "00000:"
                   "00000:"
                   "00000:"
                   "00000")
    image5 = Image("99999:"
                  "99999:"
                  "99999:"
                  "99999:"
                  "99999")
    all_images = [image1, image2, image3, image4, image5]
    display.show(all_images,delay=300)

Partie 02 : Chronomètre avec la micro:bit – booléens et gestion du temps

Découvrir le fonctionnement d’une variable booléenne (True/False) et la gestion du temps en Python, en créant un chronomètre qui se lance et s’arrête quand on touche le logo de la micro:bit

from microbit import *
import time

start = 0
triggered = False

while True:
    if pin_logo.is_touched():
        triggered = not triggered
        while pin_logo.is_touched():
            start = time.ticks_ms()
          
    else:
        if triggered :
            display.scroll(int((time.ticks_ms() - start)/1000))
        else:
            display.show(Image.HEART)
  1. Comprendre la variable booléenne triggered
    • triggered vaut False au début : le chronomètre est arrêté.
    • Quand on touche le logo, triggered devient True (chronomètre lancé), et redevient False si on retouche le logo (chronomètre arrêté).
    • Question : Que fait l’instruction triggered = not triggered ?
  2. Lancer et arrêter le chronomètre
    • Si triggered est True, le chronomètre doit compter les secondes.
    • Si triggered est False, le chronomètre doit s’arrêter.
  3. Afficher le temps écoulé
    • Utilise time.ticks_ms() pour mesurer le temps en millisecondes.
    • Convertis ce temps en secondes et affiche-le sur l’écran.
  4. Tester le programme
    • Télécharge ton programme sur la micro:bit.
    • Vérifie que le chronomètre se lance et s’arrête bien en touchant le logo.

Chronomètre lancé :

Défis bonus

  • Défi 1 : Ajoute un bouton pour remettre le chronomètre à zéro.
  • Défi 2 : Lance une musique toutes les secondes.
  • Défi 3 : Lance une musique toutes les 10 secondes.
from microbit import *
import time
import music

start = 0
triggered = False

while True:
    if pin_logo.is_touched():
        triggered = not triggered
        while pin_logo.is_touched():
            start = time.ticks_ms()

    elif button_a.is_pressed():
        while button_a.is_pressed() :
            start = time.ticks_ms()
          
    else:
        if triggered :
            duration = int((time.ticks_ms() - start)/1000)
            music.pitch(200, 50)
            if (duration % 10) == 0:
                music.pitch(300, 80)
            display.scroll(duration)
        else:
            display.show(Image.HEART)

Partie 01 : Convertisseur décimal

Consigne : Écrire un programme Python qui demande à l’utilisateur de saisir un nombre entier décimal, puis affiche sa représentation en base dans une base de 2 à 36.

Exemple : Pour une conversion en base 16 (hexadécimal), si l’utilisateur saisit 10, le programme doit afficher E.

Indices pour réussir l’exercice

  1. Comprendre par exemple pour la base 16 : En hexadécimal, on utilise les chiffres de 0 à 9 et les lettres A à F pour représenter les valeurs de 10 à 15.
  2. Méthode de conversion : Pour convertir un nombre décimal en hexadécimal, on divise successivement le nombre par 16 et on garde le reste de chaque division.
  3. Utilisation des restes : Chaque reste correspond à un chiffre hexadécimal, mais il faut les lire à l’envers à la fin.
  4. Gestion des lettres : Si un reste est égal à 10, 11, 12, 13, 14 ou 15, il faut le remplacer par A, B, C, D, E ou F.

Exemple de programme :

from microbit import display, Image, button_a, pin_logo

# base donnée (2 ≤ base ≤ 36)
digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
base = 16

def decimal_to_base_n(decimal_num, base):
    """
    Convertit un nombre décimal (int) dans une base donnée (2 ≤ base ≤ 36).
    Retourne une chaîne représentant le nombre dans la base souhaitée.
    """
    if base < 2 or base > 36:
        raise ValueError("La base doit être comprise entre 2 et 36.")

    result = []

    if decimal_num == 0:
        return "0"

    decimal_num = abs(decimal_num)

    while decimal_num > 0:
        # Obtenir le reste de la division entière du nombre par la base
        remainder = decimal_num % base
        result.append(digits[remainder])
        decimal_num = decimal_num // base

    return ''.join(reversed(result))
    
# Addition de deux nombres
i = 0
display.show(Image.PACMAN)

while True:
    # Résultat de l'addition
    if pin_logo.is_touched():
        display.show("=" + decimal_to_base_n(i, base))
        i = 0
        while pin_logo.is_touched():
            pass
    # Choix d'un nombre avec le bouton A
    elif button_a.is_pressed():
        i = i+1
        display.show(str(i))
        while button_a.is_pressed() :
            pass

Choisis avec le bouton A le chiffre 10 :

Convertis le chiffre 10 en décimal en base 16 avec la zone sensitive :


Partie 02 : Calculette de programmeur

Tu vas programmer une micro:bit pour qu’elle fonctionne comme une calculette permettant d’additionner deux nombres dans une base choisie (entre 2 et 36). Par exemple, si la base est 16, tu pourras additionner deux chiffres hexadécimaux (comme A + 5 = F).

Consignes

  1. Reprend la Fonction de conversion de l’exercice précédent decimal_to_base_n(decimal_num, base) qui convertit un nombre décimal en une chaîne de caractères représentant ce nombre dans la base choisie.
    • Exemple : decimal_to_base_n(15, 16) doit retourner "F".
  2. Choix de la base La variable base est déjà initialisée à 16, mais tu pourras la changer pour tester d’autres bases (entre 2 et 36).
  3. Sélection des nombres
    • Appuie sur le bouton A pour incrémenter le premier nombre (i) et l’afficher.
    • Appuie sur le bouton B pour incrémenter le deuxième nombre (j) et l’afficher.
    • Les nombres doivent rester inférieurs à la base choisie.
  4. Affichage du résultat
    • Touche le logo de la micro:bit pour afficher le résultat de l’addition i + j dans la base choisie, sous la forme =X (où X est le résultat de l’addition de i + J).
  5. Réinitialisation Après chaque calcul, les nombres i et j doivent être remis à zéro.
from microbit import display, Image, button_a, button_b, pin_logo

# base donnée (2 ≤ base ≤ 36)
digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
base = 16

def decimal_to_base_n(decimal_num, base):
    """
    Convertit un nombre décimal (int) dans une base donnée (2 ≤ base ≤ 36).
    Retourne une chaîne représentant le nombre dans la base souhaitée.
    """
    if base < 2 or base > 36:
        raise ValueError("La base doit être comprise entre 2 et 36.")

    result = []

    if decimal_num == 0:
        return "0"

    decimal_num = abs(decimal_num)

    while decimal_num > 0:
        # Obtenir le reste de la division entière du nombre par la base
        remainder = decimal_num % base
        result.append(digits[remainder])
        decimal_num = decimal_num // base

    return ''.join(reversed(result))
    
# Addition de deux nombres
i = 0
j = 0
display.show(Image.PACMAN)

while True:
    # Résultat de l'addition
    if pin_logo.is_touched():
        display.show("=" + decimal_to_base_n(i+j, base))
        i, j = 0, 0
        while pin_logo.is_touched():
            pass

    # Choix d'un nombre avec le bouton A
    elif button_a.is_pressed():
        i = i+1 if i < base-1 else 0
        display.show(digits[i])
        while button_a.is_pressed() :
            pass

    # Choix du deuxième nombre par la touche B
    elif button_b.is_pressed():
        j = j+1 if j < base-1 else 0
        display.show(digits[j])
        while button_b.is_pressed() :
            pass

Choix du premier nombre par la touche A :

Choix du deuxième nombre par la touche B :

Demande le résultat de la somme par la zone sensitive :

Catégories
MICRO PYTHON MICRO:BIT

Découverte de Python avec la MICRO:BIT

Découvrir le code en python :

Bienvenue dans ce livret qui va te permettre de découvrir le monde
passionnant de la programmation avec le langage Python et la carte
micro:bit ! Tu vas t’amuser à apprendre les bases du codage tout en
explorant les fonctionnalités géniales de la carte micro:bit. Python est un langage de programmation puissant, mais pas compliqué une fois qu’on le comprend bien. Avec lui, tu pourras créer des jeux, contrôler des robots, afficher des messages et bien plus encore sur ta carte micro:bit.

Contrôler la carte micro:bit en python :

Dans ce livret, tu vas découvrir pas à pas comment écrire des lignes de code en Python pour contrôler ta carte micro:bit. N’aie pas peur, on va commencer par les bases, et tu verras à quel point coder peut-être amusant et créatif ! Alors, prêt à plonger dans le monde magique de la programmation avec Python et la carte micro:bit ? C’est parti !

Editeur MU Python :

MU est choisi comme éditeur pour sa simplicité d’utilisation et sa
convivialité, spécialement conçu pour les débutants en programmation.
Son interface intuitive offre une plateforme idéale pour coder en Python pour la carte micro:bit. Avec ses fonctionnalités adaptées, MU facilite l’écriture, la modification et l’exécution du code, offrant ainsi une expérience d’apprentissage agréable et efficace dans le cadre de la robotique.


PARTIE 01 : Découverte de la MICRO:BIT et de PYTHON

Découverte de MU

Dans MU par le bouton Mode sélectionner BBC microbit :

Puis créé un nouveau fichier

Nouveau fichier

La première fonction, toute simple, de la carte micro:bit consiste à afficher un texte qui va défiler lettre par lettre sur l’écran :

from microbit import display 
display.show('Bonjour comment vas-tu ?') 
Flasher pour tester puis bouton reset pour lancer

Que constates-tu après avoir téléversé le programme ?
Le texte doit défilé sur la carte micro :bit.

Tu peux simuler ton code sur le site : https://create.withcode.uk/
Copie et colle ton programme Python
Appuie ensuite sur les touches Ctrl+Entrée. Le simulateur démarre et affiche la carte micro:bit avec laquelle il est possible d’interagir.


PARTIE 02 : Afficher un dessin

Il est possible d’afficher des icônes sur l’écran composé d’une matrice de 5×5 LEDs en utilisant la commande display.show().

from microbit import display
display.show(Image.ANGRY)

Utilise l’icône « Vérifier » pour ton code : il te manque l’objet « Image »

from microbit import display, Image 
display.show(Image.ANGRY) 
Flasher pour tester puis bouton reset pour lancer

Que constates-tu après avoir téléversé le programme ?
L’icone s’affiche sur l’écran des 25 LEDs ?

Pour connaître toutes les images possibles deux solutions :

Solution 1 :

Solution 2 :

Utilise l’icône « REPL » et dans la fenêtre ouverte frappe les indications
suivantes :

from microbit import *
dir(display)
dir(Image)

PARTIE 03 : Créer sa propre icône

Tu peux concevoir ta propre icône en spécifiant quelles LEDs doivent être allumées pour dessiner l’image désirée.

from microbit import display, Image
led_image = Image('00900:00900:99999:00900:00900')
display.show(led_image)
Flasher pour tester puis bouton reset pour lancer

Que constates-tu après avoir téléversé le programme ?
A quoi correspond les 0 et les 9 de led_image ?
Comment modifier led_image pour avoir ton icône ?
Tu as la possibilité de contrôler l’intensité de chaque LED en ajustant la valeur de chacune sur une échelle de 1 à 9.

from microbit import display, Image
led_image = Image( '00900:00500:95959:00500:00900')
display.show(led_image)
Flasher pour tester puis bouton reset pour lancer

Que constates-tu après avoir téléversé le programme ?
Vois-tu des différences d’intensité entre chaque LED ?

Documentation sur Image


PARTIE 04 : Faire clignoter une icône

Pour créer un effet de clignotement d’une icône, tu dois afficher cette dernière pendant une durée déterminée, puis éteindre la matrice de LEDs.

from microbit import display,Image
import time
while True:
    led_image = Image('00900:00900:99999:00900:00900')
    display.show(led_image)
    time.sleep(0.5)
    display.clear()
    time.sleep(0.5) 
Flasher pour tester puis bouton reset pour lancer

Que constates-tu après avoir téléversé le programme ?
Comment peux-tu modifier pour un clignotement plus rapide ou plus lent ?


PARTIE 05 : Afficher un chronomètre en seconde

Afficher les aiguilles toutes les secondes.

from microbit import display,Image 
import time 
 
seconde=0 
while True: 
    if seconde==0: 
        display.show(Image.CLOCK12) 
    if seconde==1: 
        display.show(Image.CLOCK1) 
    if seconde==2: 
        display.show(Image.CLOCK2) 
    if seconde==3: 
        display.show(Image.CLOCK3)     
    if seconde==4: 
        display.show(Image.CLOCK4) 
    if seconde==5: 
        display.show(Image.CLOCK5) 
    if seconde==6: 
        display.show(Image.CLOCK6) 
    if seconde==7: 
        display.show(Image.CLOCK7) 
    if seconde==8: 
        display.show(Image.CLOCK8) 
    if seconde==9: 
        display.show(Image.CLOCK9) 
    if seconde==10: 
        display.show(Image.CLOCK10) 
    if seconde==11: 
        display.show(Image.CLOCK11) 
        seconde=-1 
    time.sleep(1) 
    seconde+=1 
Flasher pour tester puis bouton reset pour lancer

PARTIE 06 : Animer des images et jouer une note

La carte micro:bit dispose d’un buzzer. Programme le battement d’un cœur !

from microbit import * 
import time 
import music 
# Buzzer on pin_speaker 
while True: 
    display.show(Image.HEART) 
    time.sleep(1) 
    led_image = Image('00000:09090:09990:00900:00000') 
    display.show(led_image) 
    music.pitch(200, duration=500) 
Flasher pour tester puis bouton reset pour lancer

Documentation sur music


PARTIE 07 : Utiliser les boutons

La carte micro:bit dispose de deux boutons permettant de déclencher des actions : le bouton A à gauche de la carte, le bouton B à droite.
Programme en utilisant le bouton A :

from microbit import display, button_a, Image 
import time 
 
while True: 
    if button_a.is_pressed(): 
        led_image = Image("40004:06060:00900:06060:40004") 
        display.show(led_image) 
        time.sleep(0.5) 
        display.clear() 
        time.sleep(0.5) 
    led_image = Image("33333:30003:30003:30003:33333") 
    display.show(led_image)
Flasher pour tester puis bouton reset pour lancer

Optimise ton code :

from microbit import display, button_a, Image 
import time 
 
led_image_a = Image("40004:06060:00900:06060:40004") 
led_image = Image("33333:30003:30003:30003:33333") 
 
while True: 
    if button_a.is_pressed(): 
        display.show(led_image_a) 
        time.sleep(0.5) 
        display.clear() 
        time.sleep(0.5) 
    display.show(led_image) 

Programme en utilisant le bouton A et le bouton B:

from microbit import display, button_a, button_b, Image 
import time 

led_image_a = Image("90009:09090:00900:09090:90009") 
led_image_b = Image("99999:99999:99999:99999:99999") 
led_image = Image("33333:30003:30003:30003:33333") 

while True: 
    if button_a.is_pressed(): 
        display.show(led_image_a) 
        time.sleep(0.5) 
        display.clear() 
        time.sleep(0.5) 
    if button_b.is_pressed(): 
        display.show(led_image_b) 
        time.sleep(0.5) 
        display.clear() 
        time.sleep(0.5) 
    display.show(led_image) 
Flasher pour tester puis bouton reset pour lancer

Documentation sur les boutons


PARTIE 08 : Utiliser la touche sensitive

Touche la touche sensitive pour changer les LEDs.

from microbit import display, Image, pin_logo
import time
while True:
    # Détection de la zone sensible  
    if pin_logo.is_touched(): 
        led_image = Image('90009:09090:00900:09090:90009') 
        display.show(led_image) 
        # Affichage tant que la zone sensible est touchée
        while pin_logo.is_touched():
          pass
    led_image = Image('00900:00900:99999:00900:00900') 
    display.show(led_image)
Flasher pour tester puis bouton reset pour lancer

Que constates-tu après avoir téléversé le programme ?
Les LEDs changent quand tu passes ton doigt sur la zone sensitive ?

Documentation zone_sensible


PARTIE 09 : Utiliser la touche sensitive et les boutons

Modifie ton programme sur le battement du cœur pour augmenter ou baisser la note par les touches A et B, activer ou éteindre le son avec la zone sensitive.

from microbit import display, Image, button_a, button_b, pin_logo 
import time 
import music 
 
note = 200 
on = True 
start = time.time() 

while True:
    # Battement du coeur toutes les 1 seconde
    if time.time() - start > 1:
        start = time.time()
        display.clear()
        if on : 
            music.pitch(note, 200)
        time.sleep(0.1)
    else:  
        display.show(Image.HEART) 
              
    # Modification de la note avec la touche A  
    if button_a.is_pressed(): 
        if note > 0 : 
            note -= 10 
        while button_a.is_pressed(): 
            pass  
        on = True 
         
    # Modification de la note avec la touche B  
    if button_b.is_pressed(): 
        if note < 600 : 
            note += 10 
        while button_b.is_pressed(): 
            pass  
        on = True 
         
    # Activer ou non le battement du coeur  
    if pin_logo.is_touched(): 
 
        if on : 
            on = False 
        else: 
            on = True 
        while pin_logo.is_touched() : 
            pass 
Flasher pour tester puis bouton reset pour lancer

PARTIE 10 : Secouer les LEDs

Secouer la carte pour allumer les LEDs.

from microbit import display, Image, accelerometer 
import time
while True: 
    if accelerometer.current_gesture() == 'shake' : 
        led_image = Image('90009:09090:00900:09090:90009') 
        display.show(led_image) 
        time.sleep(0.1)
    led_image = Image('00900:00900:99999:00900:00900') 
    display.show(led_image)
Flasher pour tester puis bouton reset pour lancer

Que constates-tu après avoir téléversé le programme ?
Tu peux essayer ces différentes possibilités :

  • « shake » : secoué
  • « up » : vers le haut
  • « down » : vers le bas
  • « face up » : écran vers le haut
  • « face down » : écran vers le bas
  • « left » : penché à gauche
  • « right » : penché à droite
  • « freefall » : chute libre
  • « 3g » : 3g
  • « 6g » : 6g
  • « 8g » : 8g

Documentation sur l’accéléromètre

from microbit import * 
led_image = Image("33333:30003:30003:30003:33333") 
while True: 
    if accelerometer.current_gesture() == 'face up': 
        display.show(Image.ARROW_N) 
    elif accelerometer.current_gesture() == 'face down': 
        display.show(Image.ARROW_S) 
    elif accelerometer.current_gesture() == 'left': 
        display.show(Image.ARROW_W) 
    elif accelerometer.current_gesture() == 'right': 
        display.show(Image.ARROW_E) 
    else: 
        display.show(led_image)
Flasher pour tester puis bouton reset pour lancer

PARTIE 11 : Utiliser le microphone

Claque des mains pour allumer les LEDs.

from microbit import * 
 
microphone.set_threshold(SoundEvent.LOUD, 80) 
 
while True: 
    if microphone.current_event() == SoundEvent.LOUD: 
 
        led_image = Image('90009:09090:00900:09090:90009') 
        display.show(led_image) 
 
    led_image = Image('00900:00900:99999:00900:00900') 
    display.show(led_image)
Flasher pour tester puis bouton reset pour lancer
from microbit import * 
import time 
 
while True: 
    if microphone.sound_level() > 64: 
        led_image = Image('90009:09090:00900:09090:90009') 
        display.show(led_image) 
        time.sleep(0.3) 
    else: 
        led_image = Image('00900:00900:99999:00900:00900') 
        display.show(led_image)
Flasher pour tester puis bouton reset pour lancer

Que constates-tu après avoir téléversé le programme ?
Essaye d’allumer les LEDs d’un claquement de mains, elles doivent rester allumer. Puis claque des mains pour les éteindre.


PARTIE 12 : Jouer de la musique

Joue différentes musiques en appuyant sur les boutons A et B et sur la zone sensitive.

from microbit import button_a, button_b, pin_logo, pin_speaker 
import time 
def pitch(pin, noteFrequency, noteDuration, silence_ms=10): 
    if noteFrequency != 0: 
        microsecondsPerWave = 1e6 / noteFrequency 
        millisecondsPerCycle = 1000 / (microsecondsPerWave * 2) 
        loopTime = noteDuration * millisecondsPerCycle 
        for x in range(int(loopTime)): 
            pin.write_digital(1) 
            time.sleep(int(microsecondsPerWave)) 
            pin.write_digital(0) 
            time.sleep(int(microsecondsPerWave)) 
    else: 
        time.sleep_ms(noteDuration) 
        time.sleep_ms(silence_ms) 

def BuzzerStarWars(pin): 
    NOTES = ([293.66, 293.66, 293.66, 392.0, 622.25, 554.37, 
            523.25, 454, 932.32, 622.25, 554.37, 523.25, 
            454, 932.32, 622.25, 554.37, 523.25, 554.37, 454]) 
    DURATIONS = ([180, 180, 180, 800, 800, 180, 180, 180, 800, 
        400, 180, 180, 180, 800, 400, 180, 180, 180, 1000]) 
    SILENCE_DELAYS = ([40, 40, 40, 100, 100, 40, 40, 40, 100, 50, 
        40, 40, 40, 100, 50, 40, 40, 40, 100]) 
    for i in range(len(NOTES)): 
        pitch(pin, NOTES[i], DURATIONS[i], SILENCE_DELAYS[i]) 

def BuzzerR2D2(pin): 
    R2D2_NOTES = ([3520, 3135.96, 2637.02, 2093, 2349.32, 
        3951.07, 2793.83, 4186.01, 3520, 3135.96, 
        2637.02, 2093, 2349.32, 3951.07, 2793.83, 4186.01]) 
    for i in range(len(R2D2_NOTES)): 
        pitch(pin, R2D2_NOTES[i], 80, 20) 

def BuzzerCarribeanPirates(pin): 
    NOTES_1 = ([330, 392, 440, 440, 0, 440, 494, 523, 523, 
        0, 523, 587, 494, 494, 0, 440, 392, 440, 0]) 
    DURATIONS_1 = ([125, 125, 250, 125, 125, 125, 125, 250, 
        125, 125, 125, 125, 250, 125, 125, 125, 125, 375, 125]) 
    NOTES_2 = ([330, 392, 440, 440, 0, 440, 523, 587, 587, 0, 
        587, 659, 698, 698, 0, 659, 587, 659, 440, 0, 
        440, 494, 523, 523, 0, 587, 659, 440, 0, 440, 
        523, 494, 494, 0, 523, 440, 494, 0]) 
    DURATIONS_2 = ([125, 125, 250, 125, 125, 125, 125, 250, 125, 
        125, 125, 125, 250, 125, 125, 125, 125, 125, 
        250, 125, 125, 125, 250, 125, 125, 250, 125, 
        250, 125, 125, 125, 250, 125, 125, 125, 125, 375, 375]) 
    for j in range(2): 
        for i in range(len(NOTES_1)): 
            pitch(pin, NOTES_1[i], DURATIONS_1[i]) 
    for k in range(len(NOTES_2)): 
        pitch(pin, NOTES_2[k], DURATIONS_2[k]) 

while True: 
    if button_a.is_pressed(): 
        BuzzerStarWars(pin_speaker) 
    if button_b.is_pressed(): 
        BuzzerR2D2(pin_speaker) 
    if pin_logo.is_touched(): 
        BuzzerCarribeanPirates(pin_speaker) 
Flasher pour tester puis bouton reset pour lancer

Etape 13 Jouer aux dés

Secoue la micro :bit pour jouer aux dés.

from microbit import * 
import random 
import music 

de_1 = Image('00000:00000:00900:00000:00000') 
de_2 = Image('00009:00000:00000:00000:90000') 
de_3 = Image('00009:00000:00900:00000:90000') 
de_4 = Image('90009:00000:00000:00000:90009') 
de_5 = Image('90009:00000:00900:00000:90009') 
de_6 = Image('90009:00000:90009:00000:90009') 
display.show('?') 
nombre = 0

while True: 
    if accelerometer.current_gesture() == 'shake' : 
        nombre = random.randint(1, 6) 
        music.pitch(440, 50) 
    if nombre == 1: 
        display.show(de_1) 
    if nombre == 2: 
        display.show(de_2) 
    if nombre == 3: 
        display.show(de_3) 
    if nombre == 4: 
        display.show(de_4) 
    if nombre == 5: 
        display.show(de_5) 
    if nombre == 6: 
        display.show(de_6) 
Flasher pour tester puis bouton reset pour lancer
Catégories
Robotique UNIHIKER

Portique de contrôle

Objectif du projet

Créer un portique de chronométrage pour mesurer le temps mis par un robot suiveur de ligne pour parcourir un circuit.
Le portique détecte le passage du robot grâce à des capteurs infrarouges et affiche le temps sur l’écran du microcontrôleur UNIHIKER.

Le robot passe une première fois sous le portique au départ, puis une deuxième fois à l’arrivée.

  • Premier passage : démarrage du chronomètre.
  • Deuxième passage : arrêt du chronomètre.

Les composants du portique

ÉlémentRôleDescription
🧠 Microcontrôleur UNIHIKERLe cerveau du portiqueIl gère les capteurs, mesure le temps et affiche les résultats sur son écran.
👀 Deux capteurs photoréflecteurs IRDétecter le robotPlacés en vis-à-vis de chaque côté du portique, ils détectent quand le robot passe (interruption du faisceau).
💡 LED verteIndiquer que le portique est prêtAllumée : le portique attend le départ du robot.
🔴 LED rougeIndiquer la mesure en coursAllumée : le portique mesure le temps du parcours.
📺 Écran intégré à l’UNIHIKERAffichage du résultatMontre le message “Prêt”, “Course en cours…” et le temps mesuré.

Le portique attend le robot (LED verte).
Le robot passe une première fois → démarrage du chrono.
Le robot passe une deuxième fois → arrêt du chrono et affichage.

Programmation de l’interface

Détail des instructions pour l’affichage du temps :

Programmation de la détection des passages

⚙️ Principe de détection du robot par le portique

🔦 1. Comment le portique détecte le passage du robot

Le portique utilise un photoréflecteur infrarouge.
C’est un petit capteur qui envoie de la lumière invisible (infrarouge) et mesure la lumière qu’il reçoit en retour.

  • Quand rien ne passe, la lumière rebondit normalement :
    👉 le capteur reçoit beaucoup de lumière.
  • Quand le robot passe devant, il bloque ou réfléchit moins la lumière :
    👉 le capteur reçoit moins de lumière.

C’est ce changement de niveau de lumière que le portique utilise pour savoir qu’un robot vient de passer.

🧠 2. La variable mesure_en_cours

Pour que le portique sache s’il doit démarrer ou arrêter le chronomètre, on utilise une variable mémoire qu’on appelle ici :

Cette variable peut prendre deux valeurs :

ValeurSignificationÉtat du portique
0Attente du robot au départPortique prêt, LED verte allumée
1Chronométrage en coursLED rouge allumée, le portique mesure le temps
⏱️ 3. Les deux passages du robot
🟢 Premier passage : le départ
  1. Le portique attend (mesure_en_cours = 0).
  2. Le robot passe → le capteur détecte un changement de lumière.
  3. Le portique :
    • allume la LED rouge,
    • met mesure_en_cours = 1,
    • attente que le véhicule passe.
🔴 Deuxième passage : l’arrivée
  1. Le robot repasse sous le portique.
  2. Le capteur détecte à nouveau un changement de lumière.
  3. Le portique :
    • rallume la LED verte,
    • remet mesure_en_cours = 0 (prêt pour une nouvelle mesure),
    • attente que le véhicule passe.

Le programme avec la détection et le comptage des passages :

Programmation du chronomètre

🟢 Premier passage : le départ

  1. démarre le chronomètre,

⏱️ Affichage du temps

  1. affiche le temps sur l’écran,

Programmation en python

Bibliothèques conseillées

import time
import math
from unihiker import GUI
from pinpong.board import Board,Pin
from pinpong.extension.unihiker import *

Objets à instancier
# Interfaces
u_gui=GUI()
# Micro contrôleur
Board().begin()

# Photo réflecteur IR sur le port P1
p_p1_analog=Pin(Pin.P1, Pin.ANALOG)

# LED rouge
p_p14_out=Pin(Pin.P14, Pin.OUT)

# LED verte
p_p15_out=Pin(Pin.P15, Pin.OUT)

# Lecture du photo réflecteur IR
lumiere = p_p1_analog.read_analog()

# Gestion des LEDs
p_p14_out.write_digital(0)
p_p15_out.write_digital(1)

# Affichage du chronomètre
mm = 0
ss = 0
chrono=u_gui.draw_clock(
h=mm,m=0,s=ss,
x=120,y=200,r=50,
color= »#0000FF »)
text_chrono = u_gui.draw_text(
text= »Temps= »+
str(mm).zfill(2)+ »: »+str(ss).zfill(2), 
x=20,y=260,
font_size=20, color= »#0000FF »)

# Affichage d’un texte
u_gui.draw_text(
text= »texte à afficher »,
x=40,y=25,
font_size=20, color= »#0000FF »)

# Dessin d’une surface rectangle
u_gui.fill_rect(x=5,y=5,w=230,h=90,color= »#CCFFFF »)

# Dessin d’un pourtour d’un rectangle
u_gui.draw_rect(x=0,y=0,w=240,h=100,width=10,color= »#FF0000″)

# Gestion du temps (pour le chrono)
# Récupération du temps

start = time.time()
# Calcul d’une durée en minutes et secondes
duree = int(time.time() – start)
mm = int(duree / 60)
ss = int(duree – (mm * 60))

# Exemple pour l’affichage du temps
chrono.config(h=mm,m=0,s=ss)
text_chrono.config(text= »Temps= »+str(mm).zfill(2)+ »: »+str(ss).zfill(2))

Catégories
ALGORA Niveau 01 Robotique

ALGORA : Barrière automatique avec photoréflecteur

🎯 Objectif du projet

Tu vas construire et programmer une barrière automatique qui s’ouvre dès qu’un passage est détecté grâce à un photoréflecteur.
Ce projet te permettra de découvrir le fonctionnement d’un servomoteur, d’un capteur de lumière et de programmer un système automatique simple.

🧩 Ce que tu vas apprendre

  • Comment fonctionne un servomoteur pour faire bouger une barrière.
  • Comment utiliser un photoréflecteur pour détecter un passage.
  • À programmer des fonctions pour organiser ton code et le rendre plus lisible.
  • À tester et améliorer un système automatique.

🕹️ Comprendre les composants

1️⃣ Le servomoteur

Un servomoteur est un moteur spécial qui peut se déplacer à un angle précis.

  • Il se positionne à un angle défini entre 0° et 180°.
  • Cela permet de lever ou baisser la barrière exactement comme tu veux.

2️⃣ Le photoréflecteur

Un photoréflecteur détecte la présence d’un objet en utilisant la lumière réfléchie.

  • Quand rien ne passe devant, le capteur renvoie une valeur élevée
  • Quand un objet (voiture, main, robot) passe devant, la lumière est réfléchie et le capteur change sa valeur.
  • Cela permet de savoir qu’un passage est détecté.

🛠️ Matériel nécessaire

  • 1 microcontrôleur (Arduino, micro:bit, ou équivalent)
  • 1 servomoteur
  • 1 photoréflecteur
  • Fils de connexion

Clique sur le menu Edition en haut de l’écran et choisis Paramètres des ports.

Clique ensuite sur le bouton Tout décocher .

Puis coche D9 pour indiquer l’installation du servomoteur :

Vérifie que l’instruction sur le servomoteur est couleur bleue :

Active le test pour contrôler le servomoteur :

Utilise deux instructions servomoteur pour connaitre la position de la barrière ouverte et celle de la barrière fermée :

En cliquant sur les instructions, tu commande le servomoteur, attention il doit être sous tension.

Si tu veux contrôler la vitesse d’ouverture de la barrière :

Donne un nom à aux deux actions en créant deux fonctions :

Installe un bouton poussoir pour piloter l’ouverture de ta barrière :

Installe le connecteur du bouton poussoir sur A0 et modifie les paramètres des ports :

Vérifie que l’instruction sur le capteur de pression est bien de la couleur bleue :

Programme pour ouvrir la barrière sur l’appui du capteur de pression, puis attendre un certain avant de refermer automatiquement la barrière :

Transfert ton programme et test le bon fonctionnement :

Rajoute une LED rouge pour prévenir que la barrière est fermée :

Installe la LED sur A1 :

Programme pour allumer la LED rouge quand la barrière est fermée.

Introduis la possibilité de deux modes de fonctionnement :

  • un mode avec une ouverture puis une fermeture automatique
  • un mode avec juste une ouverture

Pour distinguer les deux modes, un appui rapide sur le bouton poussoir permet une ouverture puis une fermeture, un appui long permet une ouverture simple :

Transfert ton programme et test le bon fonctionnement :

Catégories
UNIHIKER

UNIHIKER premiers pas

Bonjour et EMOJI

Ce projet utilise la classe GUI de la bibliothèque UNIHIKER et la fonction draw_emoji() pour générer des emojis émotionnels.

Importe les bibliothèques :

from unihiker import GUI
import time 

Crée cet objet pour gérer les interfaces :

gui = GUI()

Instruction pour dessiner un cercle :

circle = gui.draw_circle(x = 120,y = 140,r = 50,width = 3,color = "#FF6666")
  • x et y position du centre du cercle sur l’écran
  • r le rayon du cercle
  • width et color la largeur et la couleur du dessin du cercle

Documentation draw_circle

Instruction pour créer un emoji

emj = gui.draw_emoji(emoji = "Wink", origin = "center", x=120, y=120, duration = 0.2, w=50) 
  • emoji = type d’emoji
  • origin = arrangement de l’emoji par rapport à sa position
  • x, y = positionnement de l’emoji sur l’écran
  • duration = durée de l’animation
  • w = taille de l’emoji

Documentation draw_emoji

Instruction pour l’affichage du text :

Text = gui.draw_text(text='Hello , Patrick !',
                     x=15,y=260,
                     font_size=20)
  • text = texte à afficher
  • x,y = positionnement du texte à l’écran
  • font_size = taille de la police de caractère

Documentation gui.draw_text

from unihiker import GUI
import time 

gui = GUI()

# Dessin d'un cercle pour le visage
circle = gui.draw_circle(x = 120,y = 140,r = 50,width = 3,color = "#FF6666")

# Création de l'emoji 
emj = gui.draw_emoji(emoji = "Wink", origin = "center", x=120, y=120, duration = 0.2, w=50) 

# Affichage du prénom en bas de l'écran
Text = gui.draw_text(text='Hello , Patrick !',x=15,y=260,font_size=20)
Text.config(color='#0000FF')

width = 50
radius = 30
delta_radius = 2.5
delta_width = 5
while True:
    # Animation de l'emoji 
    time.sleep(0.3)
    width += delta_width
    radius += delta_radius
    circle.config(r=radius)
    emj.config(w = width) 
    if not (50 <= width <= 240):
        delta_width = -delta_width
        delta_radius = -delta_radius

Si tu veux une progression plus douce (effet oscillation)
Tu peux remplacer l’incrémentation linéaire par une fonction sinus :

from unihiker import GUI
import time, math

gui = GUI()

# Dessin d'un cercle pour le visage
circle = gui.draw_circle(x = 120,y = 140,r = 50,width = 3,color = "#FF6666")

# Création de l'emoji 
emj = gui.draw_emoji(emoji = "Wink", origin = "center", x=120, y=120, duration = 0.2, w=50) 

# Affichage du prénom en bas de l'écran
Text = gui.draw_text(text='Hello , Patrick !',x=15,y=260,font_size=20)
Text.config(color='#0000FF')

width = 50
radius = 30
delta_radius = 2.5
delta_width = 5

t = 0
while True:
    time.sleep(0.03)
    radius = 80 + 40 * math.sin(t)
    width = 120 + 60 * math.sin(t)
    circle.config(r=int(radius))
    emj.config(w=int(width))
    t += 0.1

Les différentes possibilité des emoji.

  • Angry,
  • Nerve,
  • Peace,
  • Shock,
  • Sleep,
  • Smile,
  • Sweat,
  • Think,
  • Wink

Changement des EMOJI avec les boutons A ou B

from unihiker import GUI
from pinpong.extension.unihiker import *
import time, math

gui = GUI()

# Dessin d'un cercle pour le visage
circle = gui.draw_circle(x = 120,y = 140,r = 50,width = 3,color = "#FF6666")

emoji_table = ["Angry", "Nerve", "Peace", "Shock", "Sleep", "Smile", "Sweat", "Think", "Wink"]
index = 0
# Création de l'emoji 
emj = gui.draw_emoji(emoji = emoji_table[index], origin = "center", x=120, y=120, duration = 0.2, w=50) 

# Affichage du prénom en bas de l'écran
Text = gui.draw_text(text='Hello , Patrick !',x=15,y=260,font_size=20)
Text.config(color='#0000FF')

width = 50
radius = 30
delta_radius = 2.5
delta_width = 5
import time, math

t = 0
while True:
    time.sleep(0.03)
    radius = 80 + 40 * math.sin(t)
    width = 120 + 60 * math.sin(t)
    circle.config(r=int(radius))
    emj.config(w=int(width))
    t += 0.1
    # Changement de l'emoji avec le bouton A ou B
    if (button_a.is_pressed()==True):
        index = index + 1 if index < 8 else 0
        emj.config(emoji = emoji_table[index])
    if (button_b.is_pressed()==True):
        index = index - 1 if index > 0 else 8
        emj.config(emoji = emoji_table[index])

Bouton A ou B lumineux

Les boutons A et B de l’UNIHIKER sont accessibles à l’utilisateur, ce qui permet de créer un projet impliquant une LED contrôlée par des boutons. Ce projet vérifie d’abord si les boutons A et B de l’UNIHIKER ont été enfoncés, puis contrôle l’allumage et l’extinction de la LED bleue située à l’arrière de l’UNIHIKER. La bibliothèque PinPong propose deux façons d’utiliser les boutons : la première consiste à lire directement la requête, la seconde à utiliser les rappels d’événements d’interruption. Voici un exemple de contrôle de l’allumage et de l’extinction de la LED à l’aide des boutons A et B.

Utilise ces librairies :

from pinpong.extension.unihiker import *
from pinpong.board import Board,Pin
from unihiker import GUI

Crée un objet pour les interfaces :

gui=GUI()

Initialise la carte du microcontrôleur :

Board().begin()

Instruction pour dessiner un cercle plein

ledUI = gui.fill_circle(x=120,y=100,r=50,color="#FFFF00")

Documentation fill_circle

Pour tester l’appui sur les boutons A ou B utilise cette instruction

if (button_a.is_pressed()==True):

Documentation sur la gestion des boutons

Test de l’appui de boutons dans le code :

from pinpong.extension.unihiker import *
from pinpong.board import Board,Pin
from unihiker import GUI

# Initialisation de l'interface et de la carte
gui=GUI()
Board().begin()

# Initialisation de la LED
ledUI = gui.fill_circle(x=120,y=100,r=50,color="#FFFF00")
led = Pin(Pin.P25, Pin.OUT)

while True:
    # Bouton A appuyé
    if (button_a.is_pressed()==True):
        led.write_digital(1)
        ledUI.config(color="#0000FF")

    # Bouton B appuyé
    if (button_b.is_pressed()==True):
        led.write_digital(0)
        ledUI.config(color="#FF0000")

Fonctions d’interception de l’événement de l’appui sur le bouton A ou B

from pinpong.extension.unihiker import *
from pinpong.board import Board,Pin
from unihiker import GUI

# Controle de l'appui du bouton A
def on_buttona_click_callback():
    led.write_digital(1)
    ledUI.config(color="#0000FF")

# Controle de l'appui du bouton B
def on_buttonb_click_callback():
    led.write_digital(0)
    ledUI.config(color="#FF0000")

# Initialisation de l'interface et de la carte
gui=GUI()
Board().begin()

ledUI = gui.fill_circle(x=120,y=100,r=50,color="#FFFF00")

# Eteindre la LED
led = Pin(Pin.P25, Pin.OUT)

# Intercpetion des boutons A et B
gui.on_a_click(on_buttona_click_callback)
gui.on_b_click(on_buttonb_click_callback)


while True:
    pass

LED externe sur le port 22

led = Pin(Pin.P22, Pin.OUT)

Détecteur de luminosité

UNIHIKER est équipé d’un capteur de lumière placé au-dessus de l’écran frontal, permettant de détecter l’intensité lumineuse ambiante. Grâce à cette fonctionnalité, un détecteur de luminosité peut être développé. Ce projet consiste à afficher la valeur lumineuse détectée par le capteur sur l’écran.

Documentation sur le dispositif light sensor

from unihiker import GUI
import time

from pinpong.board import Board 
from pinpong.extension.unihiker import *

# # initialization
Board().begin()

# Instantiate a GUI object
gui = GUI()
img = gui.fill_circle(x=120,y=100,r=50,color="#FFFF00")
value = gui.draw_text(x=145, y=28, text='0', font_size=18)

while True :
    # Update the displayed light value
    Light = light.read()
    value.config(text = Light)

    # Light value level
    if Light < 600:
        img.config(color="#FF6600")
    elif 600 <= Light < 1024:
        img.config(color="#FF9900")
    elif 1024 <= Light < 2048:
        img.config(color="#FFCC33")
    elif 2048 <= Light < 3072:
        img.config(color="#FFFF99")
    else:
        img.config(color="#FFFF00")

    time.sleep(1)

Dans cet exemple, UNIHIKER est initialisé avec Board().begin(). Ensuite, un objet GUI est instancié et un objet image et un objet texte sont créés à l’aide des méthodes draw_image() et draw_text(), respectivement. Dans la boucle principale, l’intensité lumineuse ambiante est obtenue grâce à la méthode light.read() de la bibliothèque PinPong, et la valeur lumineuse est affichée à l’écran grâce à la méthode draw_text() de la bibliothèque GUI.

L’intensité lumineuse ambiante est divisée en cinq niveaux en moyenne, et différents niveaux de luminosité sont représentés par des cercles de couleurs différentes, selon les conditions d’éclairage.

Piano musical

L’UNIHIKER est équipé d’un buzzer capable d’émettre différentes tonalités en réglant différentes fréquences. Cette fonctionnalité permet de créer un piano électronique. Ce projet propose une interface utilisateur simple permettant aux utilisateurs de jouer différentes notes en appuyant sur des boutons à l’écran. Voici un exemple de piano électronique :

Documentation pour dessiner les touches du clavier

from pinpong.extension.unihiker import *
from pinpong.board import Board,Pin
from unihiker import GUI
import time

# Gestion des touches du piano
def button_click1():
    buzzer.pitch(262,1)
    text.config(text="C4")
def button_click2():
    buzzer.pitch(294,1)
    text.config(text="D4")
def button_click3():
    buzzer.pitch(330,1)
    text.config(text="E4")
def button_click4():
    buzzer.pitch(349,1)
    text.config(text="F4")
def button_click5():
    buzzer.pitch(392,1)
    text.config(text="G4")
def button_click6():
    buzzer.pitch(440,1)
    text.config(text="A4")
def button_click7():
    buzzer.pitch(494,1)
    text.config(text="B4")
def button_click8():
    buzzer.pitch(277,1)
    text.config(text="C#4")
def button_click9():
    buzzer.pitch(311,1)
    text.config(text="D#4")
def button_click10():
    buzzer.pitch(370,1)
    text.config(text="F#4")
def button_click11():
    buzzer.pitch(415,1)
    text.config(text="G#4")
def button_click12():
    buzzer.pitch(466,1)
    text.config(text="A#4")

# Initialisation de l'interface et de la carte
u_gui=GUI()
Board().begin()
# Affichage du titre
bg=u_gui.fill_rect(x=0,y=0,w=240,h=320,color="#CCCCFF")
text = u_gui.draw_text(x=185,y=160,text="Clavier musical",origin="center",font_size=28,angle=270)

# Zones sensibles du clavier musical (touches blanches)
do=u_gui.fill_rect(x=0,y=3,w=130,h=43,color="#FFFFFF",onclick=button_click1)
re=u_gui.fill_rect(x=0,y=48,w=130,h=43,color="#FFFFFF",onclick=button_click2)
mi=u_gui.fill_rect(x=0,y=93,w=130,h=43,color="#FFFFFF",onclick=button_click3)
fa=u_gui.fill_rect(x=0,y=138,w=130,h=43,color="#FFFFFF",onclick=button_click4)
so=u_gui.fill_rect(x=0,y=183,w=130,h=43,color="#FFFFFF",onclick=button_click5)
la=u_gui.fill_rect(x=0,y=228,w=130,h=43,color="#FFFFFF",onclick=button_click6)
xi=u_gui.fill_rect(x=0,y=273,w=130,h=43,color="#FFFFFF",onclick=button_click7)

# Zones sensibles du clavier musical (touches noires)
bian1=u_gui.fill_rect(x=50,y=32,w=80,h=30,color="#000000",onclick=button_click8)
bian2=u_gui.fill_rect(x=50,y=77,w=80,h=30,color="#000000",onclick=button_click9)
bian3=u_gui.fill_rect(x=50,y=167,w=80,h=30,color="#000000",onclick=button_click10)
bian4=u_gui.fill_rect(x=50,y=212,w=80,h=30,color="#000000",onclick=button_click11)
bian5=u_gui.fill_rect(x=50,y=257,w=80,h=30,color="#000000",onclick=button_click12)

while True:
    time.sleep(0.1)

Dans cet exemple, UNIHIKER est initialisé avec Board().begin().

Ensuite, un objet GUI est instancié, sur un fond bleu plusieurs rectangles noirs et blancs (représentant différentes touches de piano) sont créés à l’aide de la fonction fill_rect().

Ensuite, une série de fonctions d’événements sur le click de chaque touche sont définies, chacune correspondant à une note de musique.

Dans les fonctions appelées par un click sur la touche, le buzzer est contrôlé pour émettre un son d’une fréquence et d’une durée spécifiques à l’aide de la fonction buzzer.pitch (frequency, duration).

Chaque note de musique est liée à une touche de piano, et lorsque la touche est enfoncée, la fonction de rappel correspondante est exécutée et le buzzer joue la note correspondante.

De plus, une zone de texte affiche le nom de la note jouée, permettant ainsi à l’utilisateur d’identifier la note jouée.

Sonde sonore

L’UNIHIKER est également équipé d’un microphone capable de capter l’intensité du bruit ambiant. Cette fonctionnalité permet de créer un dispositif de surveillance du bruit, affichant l’intensité du bruit ambiant à l’écran. De plus, un seuil de bruit peut être défini ; lorsqu’il est dépassé, un signal sonore retentit pour vous avertir. Voici un exemple de dispositif de surveillance du bruit :

Documentation sur la sonde sonore

from pinpong.extension.unihiker import *
from pinpong.board import Board,Pin
from unihiker import Audio
from unihiker import GUI

Board().begin()

# Instantiation des objets audio et interface
audio = Audio()
gui = GUI()
# Titre du dispositif
gui.draw_text(text="Sonde sonore",x=120,y=50,font_size=20, color="#0000FF", origin="center")
# Affichage du niveau sonore
sound_text = gui.draw_text(text="",x=120,y=170,font_size=55, color="#0000FF", origin="center")

while True:
    # Récupération du niveau sonore et son affichage
    sound_value = audio.sound_level()
    sound_text.config(text=sound_value, color="#0000FF")

    # Déctection du niveau sonore
    if (sound_value > 50):
        # Alerte visuelle et sonore
        sound_text.config(color="#FF0000")
        buzzer.pitch(392)
        time.sleep(0.1)
        buzzer.stop()
        # On laisse le niveau sonore retomber avant de le mesurer à nouveau
        time.sleep(1)

Dans cet exemple, l’UNIHIKER est initialisé avec la fonction Board().begin().

Ensuite, un objet Audio et un objet GUI sont instanciés, et deux objets texte sont créés avec la fonction draw_text(). Ces objets texte affichent respectivement la surveillance du bruit et les valeurs de bruit correspondantes.

Dans la boucle principale, la méthode sound_level() de l’objet Audio permet d’obtenir l’intensité sonore ambiante, puis la méthode config() de l’objet texte permet de mettre à jour la valeur de luminosité à l’écran. Parallèlement, l’intensité sonore est vérifiée pour vérifier si elle dépasse le seuil défini. Si tel est le cas, la fonction buzzer.pitch(frequency) émet une alarme sonore, puis la fonction buzzer.stop() désactive le buzzer.

Compteur de sauts

L’UNIHIKER est également équipé d’un accéléromètre et d’un gyroscope 6 axes, capables de lire les valeurs x, y et z de l’accéléromètre et du gyroscope individuellement. Cette fonctionnalité permet de créer un compteur de saut : les valeurs de l’accéléromètre et du gyroscope s’affichent à l’écran, et le nombre de saut est calculé et affiché en fonction de l’intensité de l’accélération.

Documentation sur l’accéléromètre et le gyroscope

from pinpong.extension.unihiker import *
from pinpong.board import Board,Pin
from unihiker import GUI
import time

# Chronomètre du temps du jeu
chrono = 0
# Compteur de sauts
value = 0

# Réinitialisation des compteurs avec le bouton A
def on_buttona_click_callback():
    global chrono
    global value
    chrono = 0
    value = 0

# Initialisation de la carte et de l'interface
Board().begin()
gui = GUI()

# Affichage des données
gui.draw_text(text="Accéléromètre",x=10,y=5,font_size=16, color="#0000FF")
gui.draw_text(text="Gyroscope",x=10,y=105,font_size=16, color="#0000FF")
gui.draw_text(text="Compteur de sauts",x=10,y=210,font_size=16, color="#0000FF")
accelerometer_x = gui.draw_text(text="X:",x=30,y=35,font_size=12, color="#000000")
accelerometer_y = gui.draw_text(text="Y:",x=30,y=60,font_size=12, color="#000000")
accelerometer_z = gui.draw_text(text="Z:",x=30,y=85,font_size=12, color="#000000")
gyroscope_x = gui.draw_text(text="X:",x=30,y=135,font_size=12, color="#000000")
gyroscope_y = gui.draw_text(text="Y:",x=30,y=160,font_size=12, color="#000000")
gyroscope_z = gui.draw_text(text="Z:",x=30,y=185,font_size=12, color="#000000")
pedometer=gui.draw_text(text=value,x=30,y=230,font_size=45, color="#000000")

# Attente appui bouton A pour commmencer
gui.wait_a_click()

# Initialisation pour interception l'appui sur le bouton A
gui.on_a_click(on_buttona_click_callback)

while True:
    # Récupération des mouvements par l'accéléromètre et le gyroscope
    accelerometer_x.config(text=(str("X:") + str(accelerometer.get_x())))
    accelerometer_y.config(text=(str("Y:") + str(accelerometer.get_y())))
    accelerometer_z.config(text=(str("Z:") + str(accelerometer.get_z())))
    gyroscope_x.config(text=(str("X:") + str(gyroscope.get_x())))
    gyroscope_y.config(text=(str("Y:") + str(gyroscope.get_y())))
    gyroscope_z.config(text=(str("Z:") + str(gyroscope.get_z())))

    # Comptage de sauts
    if (accelerometer.get_strength() > 1.5):
        value = (value + 1)
    
    # Affichage des sauts et du chronomètre
    pedometer.config(text=str(value) + "/" + str(int(chrono)))
    time.sleep(0.1)
    chrono +=0.1

Dans cet exemple, l’UNIHIKER est initialisé avec la fonction Board().begin() et un objet GUI est instancié.
Ensuite, grâce à la méthode draw_text(), plusieurs objets texte sont créés pour afficher les valeurs d’accélération, de gyroscope et de nombre de pas, ainsi que leurs valeurs correspondantes.

Le programme principal utilise accelerometer.get_x(), accelerometer.get_y() et accelerometer.get_z() pour obtenir les valeurs x, y et z de l’accélération, et gyroscope.get_x(), gyroscope.get_y() et gyroscope.get_z() pour les valeurs x, y et z du gyroscope. Ces valeurs sont ensuite affichées à l’écran grâce à la méthode config() de l’objet texte.

De plus, le nombre de saut est calculé à l’aide de la fonction accelerometer.get_strength() et incrémenté de 1 lorsque l’intensité d’accélération dépasse 1,5.

Le nombre de sauts est affiché à l’écran avec le chronomètre via la méthode config() de l’objet texte.

Catégories
MICRO PYTHON MICRO:BIT

Bataille navale Micro:bit

🚀 Mission : Détruire les navires ennemis et rester le dernier survivant !

Principe du jeu

Votre objectif ? Couler les navires adverses et être le dernier joueur encore en lice ! Chaque micro:bit représente un champ de bataille : à vous de viser juste.

Comment ça marche ?

  • Un navire caché : Dès que vous allumez votre micro:bit, un navire apparaît aléatoirement sur la grille de LEDs (reconnaissable à sa lumière plus faible).
  • Un missile à guider : La LED la plus brillante, c’est votre missile ! Inclinez votre micro:bit (avant/arrière, gauche/droite) pour le déplacer et viser l’ennemi.
  • Prêt à tirer ?
    • Bouton A : Figez la position de votre missile pour ajuster votre tir.
    • Bouton B : FEU ! Envoyez votre missile vers les adversaires.
  • Touché ! Si votre missile atteint un navire, la micro:bit de la victime joue une musique de défaite… mais attention, elle reviendra en jeu après un délai ! À vous de la neutraliser à nouveau.

💻 À vous de coder ! Pour créer ce jeu, voici les fonctionnalités clés à programmer :

  1. Communication radio : Envoyez et recevez les coordonnées (ligne/colonne) des tirs entre toutes les micro:bits du jeu.
  2. Contrôle du missile : Utilisez l’accéléromètre pour déplacer le missile en inclinant la carte.
  3. Gestion des tirs :
    • Bouton A : Verrouillez la position du missile.
    • Bouton B : Lancez le tir et transmettez les coordonnées aux autres joueurs.
  4. Position aléatoire du navire : À chaque début de partie, le navire apparaît à un endroit aléatoire.
  5. Détection de collision : Si un missile touche un navire, affichez une croix et déclenchez une musique de défaite.
  6. Temps de réapparition : Un navire touché réapparaît après quelques secondes : soyez prêt à recommencer !

💡 Pourquoi c’est génial ?

  • Un jeu multijoueur : Affrontez vos amis en temps réel !
  • De la stratégie : Mémorisez les tirs et neutralisez vos adversaires.
  • Un projet complet : Codez la logique, l’affichage des LEDs, les sons et la communication entre cartes.

🛠️ Prêt à relever le défi ? Avec la micro:bit, vous allez apprendre à : ✔ Utiliser des capteurs (accéléromètre, boutons). ✔ Programmer l’affichage des LEDs et des sons. ✔ Faire communiquer plusieurs cartes entre elles.

À vos micro:bits ! Qui sera le dernier survivant ? 🎮💥

Le champ de bataille :

Ton navire : LED reconnaissable à sa lumière plus faible.

Ton missile : la LED la plus brillante

Déplace ton missile penche à droite/gauche

En avant / en arrière

Bouton A : fige le tir

Bouton B : Lance le missile

Touché

Programme en mode bloc

sous vittascience : https://fr.vittascience.com/microbit

Un exemple de programmation pour émettre les coordonnées x, y du missile et les recevoir :

Pour tester si le bouton B est relâché :

Pour gérer le roulis (droite/gauche) :

Pour gérer le tangage (avant/arrière) :

Pour gérer l’affichage de la position du missile :

Pour gérer l’affichage aléatoire du navire :

Puis dans Répéter indéfiniment :

Si touché :

Pour figer la cible avec le bouton A, avec une variable emettre :

  • emettre = 0 : réglage de la cible
  • emettre = 1 : cible figée

Le bouton A fige la position du tir :

Programme en python

Librairie à importer :

from microbit import *
import radio
import random
import math
import music

Pour configurer la radio :

radio.on()
radio.config(channel = 83, power = 6, length = 32, group=5)

Fonction pour émettre les coordonnées pour correspondre au programme en mode bloc :

def radio_sendValue(name, value):
    radio.send("&&&" + "int:" + "[" + name + ";" + str(value) + "]&&&")

Fonction pour recevoir les coordonnées pour correspondre au programme en mode bloc :

def radio_receiveValue():
    data = radio.receive()

    if data:
        print("receive", data)
        parseData = data[8:-4].split(';')
        return parseData[0], int(parseData[1])
    else:
        return None, None

Pour afficher une image de LEDs :

led_image = Image('00000:00000:00000:00000:00000')
display.show(led_image)

Affichage d’une LED :

 display.set_pixel(x, y, 9)
 display.set_pixel(x_cible, y_cible, 4)

pour générer un nombre aléatoire :

x_cible = random.randint(0, 4)
y_cible = random.randint(0, 4)

Affichage d’une croix :

display.show(Image.NO)

Affichage signe envoyé :

display.show(Image.YES)

Gestion des boutons A et B :

if button_a.is_pressed():
    while not (not button_a.is_pressed()):
        pass

Gestion de l’accéléromètre :

if (
   math.atan2(
       accelerometer.get_x(),
       math.sqrt(accelerometer.get_y()**2 + accelerometer.get_z()**2)
       ) * 180.0 / math.pi > 30
   ):
   x = 4
if (
   math.atan2(
       accelerometer.get_y(), -accelerometer.get_z()) *
       180.0 / math.pi > 30
   ):
   y = 4

Lancement de la musique :

music.play(music.JUMP_DOWN, loop=False)
Catégories
MBOT

Organisation pour notre participation 2025 à Robocup junior

Introduction

Dans le cadre de notre participation à la RoboCup Junior, notre association a organisé la conception et la programmation de robots adaptés pour la compétition. Ce rapport détaille notre organisation, les rôles de chacun, et les étapes de notre travail pour préparer la compétition.

Présentation des Équipes

Notre association présente 7 équipes composées d’enfants âgés de 8 à 16 ans. Les équipes sont organisées en fonction de l’âge et des compétences des participants :

  • Les plus jeunes (8-14 ans) travaillent sur une base de robot MBOT avec une programmation en mode block. Les moins expérimentés optent pour RESCUE LINE ENTRY, les plus expérimentés pour RESCUE LINE.
  • L’équipe des plus grands (14-16 ans) choisissent de réaliser leur propre robot en utilisant le langage Python pour la RESCUE LINE.

Répartition des Tâches

Travail des Plus Jeunes

Les moins expérimentés se sont concentrés sur la programmation en mode block, ce qui leur a permis de comprendre les bases de la programmation et de la robotique. Ils ont travaillé sur des tâches simples mais essentielles, comme le déplacement du robot, la détection de couleurs et le suivi de ligne. Ils sont utilisés différents robots au plus simple jusqu’au MBOT :

Un robot avec deux capteurs de suivi de ligne :

Puis un robot avec cinq capteurs de suivi de ligne

Travail des plus expérimentés

Les plus expérimentés ont pris en charge la compréhension des problématiques techniques et l’élaboration de solutions pour la conception des robots. Ils ont travaillé sur des aspects plus complexes, comme la gestion du capteur de ligne, l’équilibrage du robot et l’optimisation globale des performances du robot en fonction des exigences du parcours pour la compétition de la Robocup junior.

Collaboration et Tests

Travail en Commun entre les différentes équipes

Bien que les plus grands aient été principalement responsables de la conception technique, un travail en commun a été essentiel. Les solutions techniques élaborées par les plus grands ont été testées par tous les membres des équipes. Cela a permis de valider les solutions et de faire des choix éclairés sur les meilleures options à adopter.

Tests et Validation

Nous avons organisé des sessions de tests régulières où chaque équipe pouvait tester les solutions proposées. Les retours des plus jeunes ont été précieux pour ajuster et améliorer les solutions techniques. Cette collaboration a permis de s’assurer que les robots étaient performants et prêts pour la compétition.