<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wikifab.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Samuel+GOACOLO</id>
	<title>Wikifab - Contributions de l’utilisateur [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://wikifab.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Samuel+GOACOLO"/>
	<link rel="alternate" type="text/html" href="https://wikifab.org/wiki/Sp%C3%A9cial:Contributions/Samuel_GOACOLO"/>
	<updated>2026-05-03T18:15:33Z</updated>
	<subtitle>Contributions de l’utilisateur</subtitle>
	<generator>MediaWiki 1.31.3</generator>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Syst%C3%A8me_de_traduction_et_d%27apprentissage_du_Braille&amp;diff=287596</id>
		<title>Système de traduction et d'apprentissage du Braille</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Syst%C3%A8me_de_traduction_et_d%27apprentissage_du_Braille&amp;diff=287596"/>
		<updated>2025-05-26T15:14:53Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tuto Details&lt;br /&gt;
|Main_Picture=Syst_me_de_traduction_et_d_apprentissage_du_Braille_20250526_144220_1_.jpg&lt;br /&gt;
|Main_Picture_annotation={&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;objects&amp;quot;:[{&amp;quot;type&amp;quot;:&amp;quot;image&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;originX&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;originY&amp;quot;:&amp;quot;top&amp;quot;,&amp;quot;left&amp;quot;:601.2,&amp;quot;top&amp;quot;:-33,&amp;quot;width&amp;quot;:3468,&amp;quot;height&amp;quot;:4624,&amp;quot;fill&amp;quot;:&amp;quot;rgb(0,0,0)&amp;quot;,&amp;quot;stroke&amp;quot;:null,&amp;quot;strokeWidth&amp;quot;:0,&amp;quot;strokeDashArray&amp;quot;:null,&amp;quot;strokeLineCap&amp;quot;:&amp;quot;butt&amp;quot;,&amp;quot;strokeDashOffset&amp;quot;:0,&amp;quot;strokeLineJoin&amp;quot;:&amp;quot;miter&amp;quot;,&amp;quot;strokeMiterLimit&amp;quot;:4,&amp;quot;scaleX&amp;quot;:0.15,&amp;quot;scaleY&amp;quot;:0.15,&amp;quot;angle&amp;quot;:90,&amp;quot;flipX&amp;quot;:false,&amp;quot;flipY&amp;quot;:false,&amp;quot;opacity&amp;quot;:1,&amp;quot;shadow&amp;quot;:null,&amp;quot;visible&amp;quot;:true,&amp;quot;clipTo&amp;quot;:null,&amp;quot;backgroundColor&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;fillRule&amp;quot;:&amp;quot;nonzero&amp;quot;,&amp;quot;paintFirst&amp;quot;:&amp;quot;fill&amp;quot;,&amp;quot;globalCompositeOperation&amp;quot;:&amp;quot;source-over&amp;quot;,&amp;quot;transformMatrix&amp;quot;:null,&amp;quot;skewX&amp;quot;:0,&amp;quot;skewY&amp;quot;:0,&amp;quot;crossOrigin&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;cropX&amp;quot;:0,&amp;quot;cropY&amp;quot;:0,&amp;quot;src&amp;quot;:&amp;quot;https://wikifab.org/images/f/f9/Syst_me_de_traduction_et_d_apprentissage_du_Braille_20250526_144220_1_.jpg&amp;quot;,&amp;quot;filters&amp;quot;:[]}],&amp;quot;height&amp;quot;:449.2718446601942,&amp;quot;width&amp;quot;:600}&lt;br /&gt;
|Licences=Attribution (CC BY)&lt;br /&gt;
|Description=&amp;lt;translate&amp;gt;Objet qui permet de traduire et d'apprendre le braille.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Area=Electronics, Health and Wellbeing&lt;br /&gt;
|Type=Creation&lt;br /&gt;
|Difficulty=Hard&lt;br /&gt;
|Duration=72&lt;br /&gt;
|Duration-type=hour(s)&lt;br /&gt;
|Cost=250&lt;br /&gt;
|Currency=EUR (€)&lt;br /&gt;
|Tags=aveugles, Braille, Traduction, Apprentissage&lt;br /&gt;
}}&lt;br /&gt;
{{Introduction&lt;br /&gt;
|Introduction=&amp;lt;translate&amp;gt;Présentation d'un tutoriel notre projet de classe de terminale STI2D afin de le reproduire chez soi&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Materials&lt;br /&gt;
|Step_Picture_00=Syst_me_de_traduction_et_d_apprentissage_du_Braille_Colle_bois.png&lt;br /&gt;
|Step_Picture_01=Syst_me_de_traduction_et_d_apprentissage_du_Braille_71RgeJe73GL._AC_SL1500_.jpg&lt;br /&gt;
|Step_Picture_02=Syst_me_de_traduction_et_d_apprentissage_du_Braille_Capture_d_cran_2025-05-26_151811.png&lt;br /&gt;
|Step_Picture_03=Syst_me_de_traduction_et_d_apprentissage_du_Braille_Capture_d_cran_2025-05-26_154234.jpg&lt;br /&gt;
|Step_Picture_04=Syst_me_de_traduction_et_d_apprentissage_du_Braille_61L4aoIqYOL._AC_SX679_.jpg&lt;br /&gt;
|Step_Picture_05=Syst_me_de_traduction_et_d_apprentissage_du_Braille_Capture_d_cran_2025-05-26_153426.png&lt;br /&gt;
|Material=&amp;lt;translate&amp;gt;-Bois 3mm&lt;br /&gt;
&lt;br /&gt;
-Plastique pour découpeuse laser ( ici du PLA)&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Tools=&amp;lt;translate&amp;gt;-Découpeuse laser&lt;br /&gt;
&lt;br /&gt;
-Imprimante 3D (ici la Ultimaker 2+)&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Tuto_Attachments={{Tuto Attachments&lt;br /&gt;
|Attachment=support  servomoteur .stl&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=joint servomoteur .stl&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=lettre braille 1.stl&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=lettre braille 2.stl&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=lettre braille 3.stl&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=Piece_arriere_file.dxf&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=Piece_base_1.dxf&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=Piece_base_2.dxf&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=Piece_bouton_d.dxf&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=Piece_camera.dxf&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=Piece_enceinte.dxf&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;Découpe des pièces en bois du boitier&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;-Connecter l'ordinateur à la découpeuse laser&lt;br /&gt;
&lt;br /&gt;
-Ouvrir le logiciel Trotek ( Nécessaire à la découpe)&lt;br /&gt;
&lt;br /&gt;
-Ouvrir les pièces à découper en format dxf dans le logiciel &lt;br /&gt;
&lt;br /&gt;
-Optimiser l'espace sur la planche afin d'avoir les moins de perte de matière et déplaçant les pièces&lt;br /&gt;
&lt;br /&gt;
-Lancer la découpe&lt;br /&gt;
&lt;br /&gt;
-Nettoyer les pièces afin d'éviter des tâches dues au bois brûlé.&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;Assemblage des pièces en bois&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;Branchement entre les carte électroniques et les servo-moteurs&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;-Assurez vous d'avoir une Raspberry Pi configurer avant de commencer&lt;br /&gt;
&lt;br /&gt;
- Brancher les servo moteur sur la carte arduino    &lt;br /&gt;
&lt;br /&gt;
- inséré le code Arduino    &lt;br /&gt;
&lt;br /&gt;
- Se munir de la carte raspery Pi    &lt;br /&gt;
&lt;br /&gt;
- Brancher relier les broches  Gpio raspery Pi avec celle de arduino(gnd,vcc) taper sur internet broche raspery pi    &lt;br /&gt;
&lt;br /&gt;
- inséré ce code &amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import smbus&lt;br /&gt;
import time&lt;br /&gt;
import RPi.GPIO as GPIO  &lt;br /&gt;
import random&lt;br /&gt;
import os  &lt;br /&gt;
import threading&lt;br /&gt;
import cv2&lt;br /&gt;
import pytesseract&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
I2C_ADDR = 8  &lt;br /&gt;
bus = smbus.SMBus(1)  &lt;br /&gt;
&lt;br /&gt;
# GPIO des boutons&lt;br /&gt;
BOUTON_PRECEDENT = 17  &lt;br /&gt;
BOUTON_SUIVANT = 27    &lt;br /&gt;
BOUTON_LECON = 23  &lt;br /&gt;
BOUTON_EXERCICE = 24&lt;br /&gt;
BOUTON_CAMERA = 22  # Bouton pour la caméra&lt;br /&gt;
&lt;br /&gt;
# GPIO du capteur ultrason HCSR04&lt;br /&gt;
TRIG = 5  # GPIO pour le trigger du capteur&lt;br /&gt;
ECHO = 6  # GPIO pour l'echo du capteur&lt;br /&gt;
&lt;br /&gt;
# Configuration des GPIO&lt;br /&gt;
try:&lt;br /&gt;
    GPIO.cleanup()&lt;br /&gt;
except:&lt;br /&gt;
    pass&lt;br /&gt;
&lt;br /&gt;
GPIO.setmode(GPIO.BCM)&lt;br /&gt;
GPIO.setup(BOUTON_PRECEDENT, GPIO.IN, pull_up_down=GPIO.PUD_UP)&lt;br /&gt;
GPIO.setup(BOUTON_SUIVANT, GPIO.IN, pull_up_down=GPIO.PUD_UP)&lt;br /&gt;
GPIO.setup(BOUTON_LECON, GPIO.IN, pull_up_down=GPIO.PUD_UP)&lt;br /&gt;
GPIO.setup(BOUTON_EXERCICE, GPIO.IN, pull_up_down=GPIO.PUD_UP)&lt;br /&gt;
GPIO.setup(BOUTON_CAMERA, GPIO.IN, pull_up_down=GPIO.PUD_UP)&lt;br /&gt;
&lt;br /&gt;
# Configuration du capteur ultrason&lt;br /&gt;
GPIO.setup(TRIG, GPIO.OUT)&lt;br /&gt;
GPIO.setup(ECHO, GPIO.IN)&lt;br /&gt;
GPIO.output(TRIG, False)  # S'assurer que le trigger est bas au démarrage&lt;br /&gt;
&lt;br /&gt;
# Dictionnaire Braille&lt;br /&gt;
braille_dict = {&lt;br /&gt;
    &amp;quot;a&amp;quot;: 0b100000, &amp;quot;b&amp;quot;: 0b110000, &amp;quot;c&amp;quot;: 0b101000, &amp;quot;d&amp;quot;: 0b101100,&lt;br /&gt;
    &amp;quot;e&amp;quot;: 0b100100, &amp;quot;f&amp;quot;: 0b111000, &amp;quot;g&amp;quot;: 0b111100, &amp;quot;h&amp;quot;: 0b110100,&lt;br /&gt;
    &amp;quot;i&amp;quot;: 0b011000, &amp;quot;j&amp;quot;: 0b011100, &amp;quot;k&amp;quot;: 0b100010, &amp;quot;l&amp;quot;: 0b110010,&lt;br /&gt;
    &amp;quot;m&amp;quot;: 0b101010, &amp;quot;n&amp;quot;: 0b101110, &amp;quot;o&amp;quot;: 0b100110, &amp;quot;p&amp;quot;: 0b111010,&lt;br /&gt;
    &amp;quot;q&amp;quot;: 0b111110, &amp;quot;r&amp;quot;: 0b110110, &amp;quot;s&amp;quot;: 0b011010, &amp;quot;t&amp;quot;: 0b011110,&lt;br /&gt;
    &amp;quot;u&amp;quot;: 0b100011, &amp;quot;v&amp;quot;: 0b110011, &amp;quot;w&amp;quot;: 0b011101, &amp;quot;x&amp;quot;: 0b101011,&lt;br /&gt;
    &amp;quot;y&amp;quot;: 0b101111, &amp;quot;z&amp;quot;: 0b100111, &amp;quot; &amp;quot;: 0b000000&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
texte = &amp;quot;bonjour&amp;quot;  # Texte par défaut&lt;br /&gt;
index = 0&lt;br /&gt;
lecon_en_cours = False&lt;br /&gt;
exercice_en_cours = False&lt;br /&gt;
attente_texte = False  # Pour savoir si on attend une saisie de texte&lt;br /&gt;
camera_en_cours = False  # Pour indiquer si une capture par caméra est en cours&lt;br /&gt;
&lt;br /&gt;
# Paramètres de capture d'image&lt;br /&gt;
IMAGE_PATH = &amp;quot;capture.jpg&amp;quot;&lt;br /&gt;
CROPPED_PATH = &amp;quot;cropped.jpg&amp;quot;&lt;br /&gt;
DISTANCE_OPTIMALE = 15  # Distance optimale en cm&lt;br /&gt;
MARGE_DISTANCE = 2.5    # Marge de tolérance en cm (+/-)&lt;br /&gt;
&lt;br /&gt;
def mesurer_distance():&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Mesure la distance avec le capteur ultrason HCSR04.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    # Envoyer une impulsion de 10µs au trigger&lt;br /&gt;
    GPIO.output(TRIG, True)&lt;br /&gt;
    time.sleep(0.00001)  # 10µs&lt;br /&gt;
    GPIO.output(TRIG, False)&lt;br /&gt;
    &lt;br /&gt;
    # Attendre que l'écho commence&lt;br /&gt;
    start_time = time.time()&lt;br /&gt;
    timeout = start_time + 1.0  # Timeout de 1 seconde&lt;br /&gt;
    &lt;br /&gt;
    while GPIO.input(ECHO) == 0:&lt;br /&gt;
        if time.time() &amp;gt; timeout:&lt;br /&gt;
            return -1  # Erreur: pas de signal&lt;br /&gt;
        pulse_start = time.time()&lt;br /&gt;
    &lt;br /&gt;
    # Attendre que l'écho se termine&lt;br /&gt;
    while GPIO.input(ECHO) == 1:&lt;br /&gt;
        if time.time() &amp;gt; timeout:&lt;br /&gt;
            return -1  # Erreur: signal trop long&lt;br /&gt;
        pulse_end = time.time()&lt;br /&gt;
    &lt;br /&gt;
    # Calculer la durée de l'impulsion&lt;br /&gt;
    pulse_duration = pulse_end - pulse_start&lt;br /&gt;
    &lt;br /&gt;
    # Calculer la distance (vitesse du son = 34300 cm/s)&lt;br /&gt;
    # Diviser par 2 car le signal fait l'aller-retour&lt;br /&gt;
    distance = (pulse_duration * 34300) / 2&lt;br /&gt;
    &lt;br /&gt;
    return round(distance, 1)  # Arrondir à 1 décimale&lt;br /&gt;
&lt;br /&gt;
def guide_position():&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Guide l'utilisateur pour positionner correctement le texte.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    global camera_en_cours&lt;br /&gt;
    &lt;br /&gt;
    print(&amp;quot;📏 Positionnement du texte...&amp;quot;)&lt;br /&gt;
    os.system('espeak -v fr &amp;quot;Positionnez le texte&amp;quot; --stdout | aplay')&lt;br /&gt;
    &lt;br /&gt;
    # Attendre que la distance soit stable dans la plage optimale&lt;br /&gt;
    position_stable = False&lt;br /&gt;
    nb_mesures_stables = 0&lt;br /&gt;
    &lt;br /&gt;
    while camera_en_cours and not position_stable:&lt;br /&gt;
        distance = mesurer_distance()&lt;br /&gt;
        &lt;br /&gt;
        if distance &amp;lt; 0:&lt;br /&gt;
            print(&amp;quot;⚠️ Erreur de mesure de distance&amp;quot;)&lt;br /&gt;
            time.sleep(0.5)&lt;br /&gt;
            continue&lt;br /&gt;
            &lt;br /&gt;
        print(f&amp;quot;📏 Distance mesurée : {distance} cm&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        if distance &amp;lt; DISTANCE_OPTIMALE - MARGE_DISTANCE:&lt;br /&gt;
            # Trop proche&lt;br /&gt;
            os.system('espeak -v fr &amp;quot;Reculez&amp;quot; --stdout | aplay')&lt;br /&gt;
            nb_mesures_stables = 0&lt;br /&gt;
        elif distance &amp;gt; DISTANCE_OPTIMALE + MARGE_DISTANCE:&lt;br /&gt;
            # Trop loin&lt;br /&gt;
            os.system('espeak -v fr &amp;quot;Avancez&amp;quot; --stdout | aplay')&lt;br /&gt;
            nb_mesures_stables = 0&lt;br /&gt;
        else:&lt;br /&gt;
            # Distance correcte&lt;br /&gt;
            print(f&amp;quot;✅ Distance correcte : {distance} cm&amp;quot;)&lt;br /&gt;
            nb_mesures_stables += 1&lt;br /&gt;
            &lt;br /&gt;
            # Si 3 mesures consécutives sont dans la plage, on considère la position comme stable&lt;br /&gt;
            if nb_mesures_stables &amp;gt;= 3:&lt;br /&gt;
                position_stable = True&lt;br /&gt;
                os.system('espeak -v fr &amp;quot;Position correcte&amp;quot; --stdout | aplay')&lt;br /&gt;
        &lt;br /&gt;
        time.sleep(0.5)  # Attendre avant la prochaine mesure&lt;br /&gt;
    &lt;br /&gt;
    return position_stable&lt;br /&gt;
&lt;br /&gt;
def envoyer_nombre(nombre, mode=None):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Envoie une lettre en Braille et annonce (avec délai optionnel en mode exercice).&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    try:&lt;br /&gt;
        lettre = [key for key, val in braille_dict.items() if val == nombre][0]  &lt;br /&gt;
        bus.write_byte(I2C_ADDR, nombre)&lt;br /&gt;
        print(f&amp;quot;✅ Lettre envoyée: {lettre.upper()} ({bin(nombre)})&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        # Si c'est le mode exercice, attendre 2 secondes avant d'énoncer la lettre&lt;br /&gt;
        if mode == &amp;quot;exercice&amp;quot;:&lt;br /&gt;
            # Vérifier périodiquement si l'exercice a été arrêté pendant l'attente&lt;br /&gt;
            debut = time.time()&lt;br /&gt;
            while time.time() - debut &amp;lt; 2 and exercice_en_cours:&lt;br /&gt;
                time.sleep(0.1)&lt;br /&gt;
            &lt;br /&gt;
            # Ne prononcer la lettre que si l'exercice est toujours en cours&lt;br /&gt;
            if exercice_en_cours:&lt;br /&gt;
                os.system(f'espeak -v fr &amp;quot;{lettre}&amp;quot; --stdout | aplay')&lt;br /&gt;
        else:&lt;br /&gt;
            # Pour les autres modes, énoncer la lettre immédiatement&lt;br /&gt;
            os.system(f'espeak -v fr &amp;quot;{lettre}&amp;quot; --stdout | aplay')  &lt;br /&gt;
    except IOError:&lt;br /&gt;
        print(&amp;quot;❌ Erreur de communication avec l'Arduino&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        print(&amp;quot;❌ Erreur: code braille non trouvé dans le dictionnaire&amp;quot;)&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        print(f&amp;quot;❌ Erreur inattendue: {str(e)}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def demander_nouveau_texte():&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Demande un nouveau texte et réinitialise l'index.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    global texte, index, attente_texte&lt;br /&gt;
    &lt;br /&gt;
    # Annonce vocale&lt;br /&gt;
    os.system('espeak -v fr &amp;quot;Entrez un nouveau texte&amp;quot; --stdout | aplay')&lt;br /&gt;
    &lt;br /&gt;
    # Lancer un thread pour attendre la saisie sans bloquer le reste du programme&lt;br /&gt;
    def attendre_saisie():&lt;br /&gt;
        global texte, index, attente_texte&lt;br /&gt;
        nouveau_texte = input(&amp;quot;\n🆕 Entrez un texte (ou appuyez sur Entrée pour garder 'bonjour') : &amp;quot;).lower()&lt;br /&gt;
        if nouveau_texte:  # Si l'utilisateur a entré quelque chose&lt;br /&gt;
            texte = nouveau_texte&lt;br /&gt;
        index = 0&lt;br /&gt;
        print(f&amp;quot;🔠 Texte actuel : {texte}&amp;quot;)&lt;br /&gt;
        print(&amp;quot;📌 Appuyez sur le bouton 'Suivant' pour parcourir le texte, ou sur 'Leçon'/'Exercice' pour ces modes.&amp;quot;)&lt;br /&gt;
        attente_texte = False  # Fin de l'attente&lt;br /&gt;
    &lt;br /&gt;
    attente_texte = True  # Début de l'attente&lt;br /&gt;
    t = threading.Thread(target=attendre_saisie)&lt;br /&gt;
    t.daemon = True&lt;br /&gt;
    t.start()&lt;br /&gt;
&lt;br /&gt;
def bouton_precedent(channel):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Affiche la lettre précédente pendant la lecture du texte.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    global index&lt;br /&gt;
    &lt;br /&gt;
    # Ne pas exécuter si un mode est en cours ou si on attend une saisie&lt;br /&gt;
    if lecon_en_cours or exercice_en_cours or attente_texte or camera_en_cours:&lt;br /&gt;
        return&lt;br /&gt;
    &lt;br /&gt;
    time.sleep(0.2)  # Anti-rebond&lt;br /&gt;
    if GPIO.input(BOUTON_PRECEDENT) == GPIO.LOW:&lt;br /&gt;
        if index &amp;gt; 0:&lt;br /&gt;
            index -= 1&lt;br /&gt;
            envoyer_nombre(braille_dict.get(texte[index], 0))&lt;br /&gt;
            print(f&amp;quot;🔙 Lettre précédente: {texte[index]}&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;🚫 Déjà à la première lettre.&amp;quot;)&lt;br /&gt;
            os.system('espeak -v fr &amp;quot;Première lettre&amp;quot; --stdout | aplay')&lt;br /&gt;
&lt;br /&gt;
def bouton_suivant(channel):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Affiche la lettre suivante et lit le mot en entier à la fin.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    global index&lt;br /&gt;
    &lt;br /&gt;
    # Ne pas exécuter si un mode est en cours ou si on attend une saisie&lt;br /&gt;
    if lecon_en_cours or exercice_en_cours or attente_texte or camera_en_cours:&lt;br /&gt;
        return&lt;br /&gt;
    &lt;br /&gt;
    time.sleep(0.2)  # Anti-rebond&lt;br /&gt;
    if GPIO.input(BOUTON_SUIVANT) == GPIO.LOW:&lt;br /&gt;
        if texte and index &amp;lt; len(texte):&lt;br /&gt;
            envoyer_nombre(braille_dict.get(texte[index], 0))&lt;br /&gt;
            index += 1&lt;br /&gt;
            print(f&amp;quot;🔜 Lettre suivante: {texte[index-1]}&amp;quot;)&lt;br /&gt;
            if index == len(texte):&lt;br /&gt;
                print(&amp;quot;🔁 Fin du texte, lecture complète...&amp;quot;)&lt;br /&gt;
                os.system(f'espeak -v fr &amp;quot;{texte}&amp;quot; --stdout | aplay')&lt;br /&gt;
                demander_nouveau_texte()&lt;br /&gt;
&lt;br /&gt;
def lancer_lecon():&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Fonction pour lancer la leçon dans un thread séparé.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    global lecon_en_cours&lt;br /&gt;
    &lt;br /&gt;
    # Si on attend une saisie de texte, annuler cette attente&lt;br /&gt;
    global attente_texte&lt;br /&gt;
    attente_texte = False&lt;br /&gt;
    &lt;br /&gt;
    # Marquer le début de la leçon&lt;br /&gt;
    lecon_en_cours = True&lt;br /&gt;
    print(&amp;quot;📖 Début de la leçon...&amp;quot;)&lt;br /&gt;
    os.system('espeak -v fr &amp;quot;Début de la leçon&amp;quot; --stdout | aplay')&lt;br /&gt;
    &lt;br /&gt;
    # Parcourir l'alphabet&lt;br /&gt;
    for lettre in &amp;quot;abcdefghijklmnopqrstuvwxyz&amp;quot;:&lt;br /&gt;
        # Vérifier si la leçon a été arrêtée&lt;br /&gt;
        if not lecon_en_cours:&lt;br /&gt;
            return&lt;br /&gt;
        &lt;br /&gt;
        # Afficher et annoncer la lettre&lt;br /&gt;
        print(f&amp;quot;📝 Leçon : Lettre {lettre.upper()}&amp;quot;)&lt;br /&gt;
        envoyer_nombre(braille_dict[lettre])&lt;br /&gt;
        &lt;br /&gt;
        # Attendre 8 secondes, en vérifiant si la leçon a été arrêtée&lt;br /&gt;
        debut = time.time()&lt;br /&gt;
        while time.time() - debut &amp;lt; 8:&lt;br /&gt;
            if not lecon_en_cours:&lt;br /&gt;
                return  # Sortir immédiatement si la leçon a été arrêtée&lt;br /&gt;
            time.sleep(0.1)&lt;br /&gt;
    &lt;br /&gt;
    # Fin normale de la leçon&lt;br /&gt;
    print(&amp;quot;✅ Leçon terminée !&amp;quot;)&lt;br /&gt;
    os.system('espeak -v fr &amp;quot;Leçon terminée&amp;quot; --stdout | aplay')&lt;br /&gt;
    lecon_en_cours = False&lt;br /&gt;
    &lt;br /&gt;
    # Proposer d'entrer un nouveau texte sans bloquer&lt;br /&gt;
    demander_nouveau_texte()&lt;br /&gt;
&lt;br /&gt;
def lancer_exercice():&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Fonction pour lancer l'exercice dans un thread séparé.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    global exercice_en_cours&lt;br /&gt;
    &lt;br /&gt;
    # Si on attend une saisie de texte, annuler cette attente&lt;br /&gt;
    global attente_texte&lt;br /&gt;
    attente_texte = False&lt;br /&gt;
    &lt;br /&gt;
    # Marquer le début de l'exercice&lt;br /&gt;
    exercice_en_cours = True&lt;br /&gt;
    print(&amp;quot;🎲 Début de l'exercice...&amp;quot;)&lt;br /&gt;
    os.system('espeak -v fr &amp;quot;Début de l\'exercice&amp;quot; --stdout | aplay')&lt;br /&gt;
    &lt;br /&gt;
    # Préparer les lettres dans un ordre aléatoire&lt;br /&gt;
    lettres = list(&amp;quot;abcdefghijklmnopqrstuvwxyz&amp;quot;)&lt;br /&gt;
    random.shuffle(lettres)&lt;br /&gt;
    &lt;br /&gt;
    # Parcourir les lettres aléatoires&lt;br /&gt;
    for lettre in lettres:&lt;br /&gt;
        # Vérifier si l'exercice a été arrêté&lt;br /&gt;
        if not exercice_en_cours:&lt;br /&gt;
            return&lt;br /&gt;
        &lt;br /&gt;
        # Afficher et annoncer la lettre avec délai de 2 secondes&lt;br /&gt;
        print(f&amp;quot;📝 Exercice : Lettre {lettre.upper()}&amp;quot;)&lt;br /&gt;
        envoyer_nombre(braille_dict[lettre], mode=&amp;quot;exercice&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        # Attendre le reste des 8 secondes (moins les 2 secondes d'attente déjà écoulées), &lt;br /&gt;
        # en vérifiant si l'exercice a été arrêté&lt;br /&gt;
        debut = time.time()&lt;br /&gt;
        while time.time() - debut &amp;lt; 6:  # 8 - 2 = 6 secondes restantes&lt;br /&gt;
            if not exercice_en_cours:&lt;br /&gt;
                return  # Sortir immédiatement si l'exercice a été arrêté&lt;br /&gt;
            time.sleep(0.1)&lt;br /&gt;
    &lt;br /&gt;
    # Fin normale de l'exercice&lt;br /&gt;
    print(&amp;quot;🏆 Exercice terminé !&amp;quot;)&lt;br /&gt;
    os.system('espeak -v fr &amp;quot;Exercice terminé&amp;quot; --stdout | aplay')&lt;br /&gt;
    exercice_en_cours = False&lt;br /&gt;
    &lt;br /&gt;
    # Proposer d'entrer un nouveau texte sans bloquer&lt;br /&gt;
    demander_nouveau_texte()&lt;br /&gt;
&lt;br /&gt;
def capturer_et_lire_texte():&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Fonction pour capturer une image avec la caméra et en extraire le texte.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    global camera_en_cours, texte, index, attente_texte&lt;br /&gt;
    &lt;br /&gt;
    # Si on attend une saisie de texte, annuler cette attente&lt;br /&gt;
    attente_texte = False&lt;br /&gt;
    &lt;br /&gt;
    # Marquer le début de la capture&lt;br /&gt;
    camera_en_cours = True&lt;br /&gt;
    print(&amp;quot;📸 Préparation de la capture...&amp;quot;)&lt;br /&gt;
    os.system('espeak -v fr &amp;quot;Préparation de la capture&amp;quot; --stdout | aplay')&lt;br /&gt;
    &lt;br /&gt;
    # Guide de positionnement avec le capteur ultrason&lt;br /&gt;
    if guide_position():&lt;br /&gt;
        # Capture de l'image (réduction du temps à 3s car on a déjà guidé l'utilisateur)&lt;br /&gt;
        print(&amp;quot;📸 Capture en cours...&amp;quot;)&lt;br /&gt;
        os.system('espeak -v fr &amp;quot;Capture en cours&amp;quot; --stdout | aplay')&lt;br /&gt;
        os.system(f&amp;quot;libcamera-jpeg -o {IMAGE_PATH} -t 3000 --width 1920 --height 1080 --quality 100&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        # Vérifier si l'image existe&lt;br /&gt;
        if not os.path.exists(IMAGE_PATH):&lt;br /&gt;
            print(&amp;quot;❌ Erreur : L'image n'a pas été capturée.&amp;quot;)&lt;br /&gt;
            os.system('espeak -v fr &amp;quot;Erreur de capture&amp;quot; --stdout | aplay')&lt;br /&gt;
            camera_en_cours = False&lt;br /&gt;
            return&lt;br /&gt;
        &lt;br /&gt;
        print(&amp;quot;⚡ Optimisation de l'image...&amp;quot;)&lt;br /&gt;
        try:&lt;br /&gt;
            # Chargement et conversion en niveaux de gris&lt;br /&gt;
            image = cv2.imread(IMAGE_PATH)&lt;br /&gt;
            gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)&lt;br /&gt;
            &lt;br /&gt;
            # Correction de l'orientation&lt;br /&gt;
            try:&lt;br /&gt;
                osd = pytesseract.image_to_osd(gray)&lt;br /&gt;
                angle = int(osd.split(&amp;quot;\n&amp;quot;)[1].split(&amp;quot;:&amp;quot;)[1].strip())&lt;br /&gt;
                if angle != 0:&lt;br /&gt;
                    (h, w) = gray.shape[:2]&lt;br /&gt;
                    center = (w // 2, h // 2)&lt;br /&gt;
                    M = cv2.getRotationMatrix2D(center, -angle, 1.0)&lt;br /&gt;
                    gray = cv2.warpAffine(gray, M, (w, h))&lt;br /&gt;
            except:&lt;br /&gt;
                print(&amp;quot;⚠ Impossible de détecter l'orientation, passage à l'étape suivante.&amp;quot;)&lt;br /&gt;
            &lt;br /&gt;
            # Prétraitement (amélioration du contraste et du bruit)&lt;br /&gt;
            gray = cv2.GaussianBlur(gray, (3, 3), 0)&lt;br /&gt;
            gray = cv2.equalizeHist(gray)  # Augmentation du contraste&lt;br /&gt;
            gray = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 31, 10)&lt;br /&gt;
            &lt;br /&gt;
            # Détection des contours pour recadrer uniquement le texte&lt;br /&gt;
            print(&amp;quot;📐 Détection du texte...&amp;quot;)&lt;br /&gt;
            edges = cv2.Canny(gray, 50, 150)&lt;br /&gt;
            contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)&lt;br /&gt;
            &lt;br /&gt;
            filtered_contours = [c for c in contours if cv2.contourArea(c) &amp;gt; 1000]&lt;br /&gt;
            &lt;br /&gt;
            if filtered_contours:&lt;br /&gt;
                x, y, w, h = cv2.boundingRect(cv2.convexHull(np.vstack(filtered_contours)))&lt;br /&gt;
                cropped = image[y:y+h, x:x+w]&lt;br /&gt;
                cropped = cv2.resize(cropped, None, fx=1.5, fy=1.5, interpolation=cv2.INTER_LINEAR)&lt;br /&gt;
                cv2.imwrite(CROPPED_PATH, cropped)&lt;br /&gt;
            else:&lt;br /&gt;
                print(&amp;quot;⚠ Aucun texte clairement détecté, extraction sur l'image entière.&amp;quot;)&lt;br /&gt;
                cropped = image&lt;br /&gt;
            &lt;br /&gt;
            # OCR optimisé&lt;br /&gt;
            print(&amp;quot;🔍 Extraction du texte...&amp;quot;)&lt;br /&gt;
            detected_text = pytesseract.image_to_string(cropped, lang=&amp;quot;eng+fra&amp;quot;, config=&amp;quot;--psm 6 --oem 3&amp;quot;).strip()&lt;br /&gt;
            &lt;br /&gt;
            # Nettoyer le texte détecté (supprimer les caractères spéciaux et garder lettres, chiffres et espaces)&lt;br /&gt;
            cleaned_text = ''.join(c.lower() for c in detected_text if c.isalnum() or c.isspace())&lt;br /&gt;
            &lt;br /&gt;
            # Si le texte est vide après nettoyage, afficher un message&lt;br /&gt;
            if not cleaned_text:&lt;br /&gt;
                print(&amp;quot;⚠ Aucun texte détecté après nettoyage.&amp;quot;)&lt;br /&gt;
                os.system('espeak -v fr &amp;quot;Aucun texte détecté&amp;quot; --stdout | aplay')&lt;br /&gt;
                camera_en_cours = False&lt;br /&gt;
                return&lt;br /&gt;
            &lt;br /&gt;
            # Afficher le texte détecté&lt;br /&gt;
            print(f&amp;quot;\n📄 Texte détecté : {cleaned_text}&amp;quot;)&lt;br /&gt;
            os.system(f'espeak -v fr &amp;quot;Texte détecté&amp;quot; --stdout | aplay')&lt;br /&gt;
            &lt;br /&gt;
            # Mettre à jour le texte global et réinitialiser l'index&lt;br /&gt;
            texte = cleaned_text&lt;br /&gt;
            index = 0&lt;br /&gt;
            print(f&amp;quot;🔠 Nouveau texte : {texte}&amp;quot;)&lt;br /&gt;
            print(&amp;quot;📌 Appuyez sur le bouton 'Suivant' pour parcourir le texte.&amp;quot;)&lt;br /&gt;
            &lt;br /&gt;
        except Exception as e:&lt;br /&gt;
            print(f&amp;quot;❌ Erreur lors du traitement de l'image : {str(e)}&amp;quot;)&lt;br /&gt;
            os.system('espeak -v fr &amp;quot;Erreur de traitement&amp;quot; --stdout | aplay')&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;❌ Positionnement annulé.&amp;quot;)&lt;br /&gt;
        os.system('espeak -v fr &amp;quot;Positionnement annulé&amp;quot; --stdout | aplay')&lt;br /&gt;
    &lt;br /&gt;
    # Marquer la fin de la capture&lt;br /&gt;
    camera_en_cours = False&lt;br /&gt;
&lt;br /&gt;
def bouton_lecon_presse(channel):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Fonction appelée lorsque le bouton leçon est pressé.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    global lecon_en_cours&lt;br /&gt;
    &lt;br /&gt;
    # Ne pas réagir si un autre mode est en cours&lt;br /&gt;
    if exercice_en_cours or camera_en_cours:&lt;br /&gt;
        return&lt;br /&gt;
    &lt;br /&gt;
    time.sleep(0.2)  # Anti-rebond&lt;br /&gt;
    if GPIO.input(BOUTON_LECON) == GPIO.LOW:&lt;br /&gt;
        # Basculer l'état de la leçon&lt;br /&gt;
        if lecon_en_cours:&lt;br /&gt;
            lecon_en_cours = False&lt;br /&gt;
            print(&amp;quot;📖 Leçon arrêtée par l'utilisateur.&amp;quot;)&lt;br /&gt;
            os.system('espeak -v fr &amp;quot;Leçon arrêtée&amp;quot; --stdout | aplay')&lt;br /&gt;
            # La leçon est arrêtée, sera nettoyée dans le thread&lt;br /&gt;
        else:&lt;br /&gt;
            # Lancer la leçon dans un thread séparé&lt;br /&gt;
            t = threading.Thread(target=lancer_lecon)&lt;br /&gt;
            t.daemon = True  # Le thread s'arrêtera quand le programme principal s'arrête&lt;br /&gt;
            t.start()&lt;br /&gt;
&lt;br /&gt;
def bouton_exercice_presse(channel):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Fonction appelée lorsque le bouton exercice est pressé.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    global exercice_en_cours&lt;br /&gt;
    &lt;br /&gt;
    # Ne pas réagir si un autre mode est en cours&lt;br /&gt;
    if lecon_en_cours or camera_en_cours:&lt;br /&gt;
        return&lt;br /&gt;
    &lt;br /&gt;
    time.sleep(0.2)  # Anti-rebond&lt;br /&gt;
    if GPIO.input(BOUTON_EXERCICE) == GPIO.LOW:&lt;br /&gt;
        # Basculer l'état de l'exercice&lt;br /&gt;
        if exercice_en_cours:&lt;br /&gt;
            exercice_en_cours = False&lt;br /&gt;
            print(&amp;quot;🎲 Exercice arrêté par l'utilisateur.&amp;quot;)&lt;br /&gt;
            os.system('espeak -v fr &amp;quot;Exercice arrêté&amp;quot; --stdout | aplay')&lt;br /&gt;
            # L'exercice est arrêté, sera nettoyé dans le thread&lt;br /&gt;
        else:&lt;br /&gt;
            # Lancer l'exercice dans un thread séparé&lt;br /&gt;
            t = threading.Thread(target=lancer_exercice)&lt;br /&gt;
            t.daemon = True  # Le thread s'arrêtera quand le programme principal s'arrête&lt;br /&gt;
            t.start()&lt;br /&gt;
&lt;br /&gt;
def bouton_camera_presse(channel):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Fonction appelée lorsque le bouton caméra est pressé.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    global camera_en_cours&lt;br /&gt;
    &lt;br /&gt;
    # Ne pas réagir si un autre mode est en cours&lt;br /&gt;
    if lecon_en_cours or exercice_en_cours or camera_en_cours:&lt;br /&gt;
        return&lt;br /&gt;
    &lt;br /&gt;
    time.sleep(0.2)  # Anti-rebond&lt;br /&gt;
    if GPIO.input(BOUTON_CAMERA) == GPIO.LOW:&lt;br /&gt;
        # Lancer la capture dans un thread séparé&lt;br /&gt;
        t = threading.Thread(target=capturer_et_lire_texte)&lt;br /&gt;
        t.daemon = True  # Le thread s'arrêtera quand le programme principal s'arrête&lt;br /&gt;
        t.start()&lt;br /&gt;
&lt;br /&gt;
# Supprimer les détecteurs d'événements existants s'il y en a&lt;br /&gt;
try:&lt;br /&gt;
    GPIO.remove_event_detect(BOUTON_SUIVANT)&lt;br /&gt;
    GPIO.remove_event_detect(BOUTON_PRECEDENT)&lt;br /&gt;
    GPIO.remove_event_detect(BOUTON_LECON)&lt;br /&gt;
    GPIO.remove_event_detect(BOUTON_EXERCICE)&lt;br /&gt;
    GPIO.remove_event_detect(BOUTON_CAMERA)&lt;br /&gt;
except:&lt;br /&gt;
    pass&lt;br /&gt;
&lt;br /&gt;
# Configuration des détecteurs d'événements&lt;br /&gt;
GPIO.add_event_detect(BOUTON_SUIVANT, GPIO.FALLING, callback=bouton_suivant, bouncetime=500)&lt;br /&gt;
GPIO.add_event_detect(BOUTON_PRECEDENT, GPIO.FALLING, callback=bouton_precedent, bouncetime=500)&lt;br /&gt;
GPIO.add_event_detect(BOUTON_LECON, GPIO.FALLING, callback=bouton_lecon_presse, bouncetime=500)&lt;br /&gt;
GPIO.add_event_detect(BOUTON_EXERCICE, GPIO.FALLING, callback=bouton_exercice_presse, bouncetime=500)&lt;br /&gt;
GPIO.add_event_detect(BOUTON_CAMERA, GPIO.FALLING, callback=bouton_camera_presse, bouncetime=500)&lt;br /&gt;
&lt;br /&gt;
# Initialisation du capteur ultrason (attendre qu'il se stabilise)&lt;br /&gt;
print(&amp;quot;⚙️ Initialisation du capteur ultrason...&amp;quot;)&lt;br /&gt;
time.sleep(0.5)&lt;br /&gt;
GPIO.output(TRIG, False)&lt;br /&gt;
time.sleep(0.5)&lt;br /&gt;
&lt;br /&gt;
# Afficher les instructions au démarrage&lt;br /&gt;
print(&amp;quot;👋 Bienvenue dans l'application d'apprentissage du Braille&amp;quot;)&lt;br /&gt;
print(&amp;quot;📋 Instructions:&amp;quot;)&lt;br /&gt;
print(&amp;quot;  - Bouton LEÇON: Apprendre l'alphabet (8s par lettre)&amp;quot;)&lt;br /&gt;
print(&amp;quot;  - Bouton EXERCICE: Pratiquer avec des lettres aléatoires (2s de réflexion, puis annonce)&amp;quot;)&lt;br /&gt;
print(&amp;quot;  - Bouton SUIVANT: Afficher la lettre suivante du texte&amp;quot;)&lt;br /&gt;
print(&amp;quot;  - Bouton PRÉCÉDENT: Afficher la lettre précédente du texte&amp;quot;)&lt;br /&gt;
print(&amp;quot;  - Bouton CAMÉRA: Guide le positionnement, puis capture une image et extrait le texte&amp;quot;)&lt;br /&gt;
print(&amp;quot;⚠️ Appuyez à nouveau sur LEÇON/EXERCICE pour arrêter à tout moment&amp;quot;)&lt;br /&gt;
print(f&amp;quot;🔠 Texte par défaut : {texte}&amp;quot;)&lt;br /&gt;
print(&amp;quot;📌 Appuyez sur le bouton 'Suivant' pour parcourir le texte, ou choisissez un mode.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Boucle principale pour maintenir le programme actif&lt;br /&gt;
try:&lt;br /&gt;
    while True:&lt;br /&gt;
        time.sleep(0.1)&lt;br /&gt;
except KeyboardInterrupt:&lt;br /&gt;
    print(&amp;quot;\n🛑 Arrêt du programme.&amp;quot;)&lt;br /&gt;
    GPIO.cleanup()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;- regardez un tuto pour crée un fichier pour inséré le code Raspberry Pi et l'executer et avant de lancer le fichier il faut crée un environment virtuel regardez un tuto pour ça aussi====&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Picture_00=Syst_me_de_traduction_et_d_apprentissage_du_Braille_nm_arduino-front.jpg&lt;br /&gt;
|Step_Picture_01=Syst_me_de_traduction_et_d_apprentissage_du_Braille_91zSu44_34L._AC_UF1000_1000_QL80_.jpg&lt;br /&gt;
|Step_Picture_02=Syst_me_de_traduction_et_d_apprentissage_du_Braille_images_1_.jpeg&lt;br /&gt;
|Step_Picture_02_annotation={&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;objects&amp;quot;:[{&amp;quot;type&amp;quot;:&amp;quot;image&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;originX&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;originY&amp;quot;:&amp;quot;top&amp;quot;,&amp;quot;left&amp;quot;:-41,&amp;quot;top&amp;quot;:7,&amp;quot;width&amp;quot;:251,&amp;quot;height&amp;quot;:200,&amp;quot;fill&amp;quot;:&amp;quot;rgb(0,0,0)&amp;quot;,&amp;quot;stroke&amp;quot;:null,&amp;quot;strokeWidth&amp;quot;:0,&amp;quot;strokeDashArray&amp;quot;:null,&amp;quot;strokeLineCap&amp;quot;:&amp;quot;butt&amp;quot;,&amp;quot;strokeDashOffset&amp;quot;:0,&amp;quot;strokeLineJoin&amp;quot;:&amp;quot;miter&amp;quot;,&amp;quot;strokeMiterLimit&amp;quot;:4,&amp;quot;scaleX&amp;quot;:2.7,&amp;quot;scaleY&amp;quot;:2.7,&amp;quot;angle&amp;quot;:0,&amp;quot;flipX&amp;quot;:false,&amp;quot;flipY&amp;quot;:false,&amp;quot;opacity&amp;quot;:1,&amp;quot;shadow&amp;quot;:null,&amp;quot;visible&amp;quot;:true,&amp;quot;clipTo&amp;quot;:null,&amp;quot;backgroundColor&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;fillRule&amp;quot;:&amp;quot;nonzero&amp;quot;,&amp;quot;paintFirst&amp;quot;:&amp;quot;fill&amp;quot;,&amp;quot;globalCompositeOperation&amp;quot;:&amp;quot;source-over&amp;quot;,&amp;quot;transformMatrix&amp;quot;:null,&amp;quot;skewX&amp;quot;:0,&amp;quot;skewY&amp;quot;:0,&amp;quot;crossOrigin&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;cropX&amp;quot;:0,&amp;quot;cropY&amp;quot;:0,&amp;quot;src&amp;quot;:&amp;quot;https://wikifab.org/images/7/7e/Syst_me_de_traduction_et_d_apprentissage_du_Braille_images_1_.jpeg&amp;quot;,&amp;quot;filters&amp;quot;:[]}],&amp;quot;height&amp;quot;:478.15384615384613,&amp;quot;width&amp;quot;:600}&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;Système d'interface homme-machine&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;Le système est équipé de '''5 boutons physiques''' qui permettent de contrôler les différents modes d'apprentissage et la détection du texte. &lt;br /&gt;
&lt;br /&gt;
-Brancher les bouton aux broches gpio correspondantes grâce au code inséré précédement&lt;br /&gt;
&lt;br /&gt;
-Lancer le code&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Picture_00=Syst_me_de_traduction_et_d_apprentissage_du_Braille_raspberry-pi-camera-module-3-12mp-objectif-standard-haute-resolution-sc0872.jpg&lt;br /&gt;
|Step_Picture_01=Syst_me_de_traduction_et_d_apprentissage_du_Braille_images.jpeg&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;Système de détection de texte&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;===='''Le système utilise une caméra et un capteur à ultrasons pour détecter du texte .'''====&lt;br /&gt;
-Se munir du Capteur ultrason et le brancher sur la broche gpio (regardez le code rasperypi pour savoir )&lt;br /&gt;
&lt;br /&gt;
- Brancher la camera à la Raspberry Pi, il y a un tuto [https://www.gotronic.fr/pj2-tutopicam-1585.pdf?srsltid=AfmBOorFOpsASuNtAhuMkrhdSImstiAlyNY9y20oJxfODo4Vyu3Cx9X6 ici]&lt;br /&gt;
&lt;br /&gt;
-Lancer le code&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Picture_00=Syst_me_de_traduction_et_d_apprentissage_du_Braille_capteur-de-distance-ultrason-hc-sr04.jpg&lt;br /&gt;
|Step_Picture_01=Syst_me_de_traduction_et_d_apprentissage_du_Braille_raspberry-pi-camera-module-3-12mp-objectif-standard-haute-resolution-sc0872.jpg&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Notes&lt;br /&gt;
|Notes=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{PageLang&lt;br /&gt;
|Language=fr&lt;br /&gt;
|SourceLanguage=none&lt;br /&gt;
|IsTranslation=0&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Status&lt;br /&gt;
|Complete=Published&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Fichier:Piece_enceinte.dxf&amp;diff=287595</id>
		<title>Fichier:Piece enceinte.dxf</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Fichier:Piece_enceinte.dxf&amp;diff=287595"/>
		<updated>2025-05-26T15:14:36Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : Piece_enceinte&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Piece_enceinte&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Syst%C3%A8me_de_traduction_et_d%27apprentissage_du_Braille&amp;diff=287593</id>
		<title>Système de traduction et d'apprentissage du Braille</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Syst%C3%A8me_de_traduction_et_d%27apprentissage_du_Braille&amp;diff=287593"/>
		<updated>2025-05-26T15:11:54Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tuto Details&lt;br /&gt;
|Main_Picture=Syst_me_de_traduction_et_d_apprentissage_du_Braille_20250526_144220_1_.jpg&lt;br /&gt;
|Main_Picture_annotation={&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;objects&amp;quot;:[{&amp;quot;type&amp;quot;:&amp;quot;image&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;originX&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;originY&amp;quot;:&amp;quot;top&amp;quot;,&amp;quot;left&amp;quot;:601.2,&amp;quot;top&amp;quot;:-33,&amp;quot;width&amp;quot;:3468,&amp;quot;height&amp;quot;:4624,&amp;quot;fill&amp;quot;:&amp;quot;rgb(0,0,0)&amp;quot;,&amp;quot;stroke&amp;quot;:null,&amp;quot;strokeWidth&amp;quot;:0,&amp;quot;strokeDashArray&amp;quot;:null,&amp;quot;strokeLineCap&amp;quot;:&amp;quot;butt&amp;quot;,&amp;quot;strokeDashOffset&amp;quot;:0,&amp;quot;strokeLineJoin&amp;quot;:&amp;quot;miter&amp;quot;,&amp;quot;strokeMiterLimit&amp;quot;:4,&amp;quot;scaleX&amp;quot;:0.15,&amp;quot;scaleY&amp;quot;:0.15,&amp;quot;angle&amp;quot;:90,&amp;quot;flipX&amp;quot;:false,&amp;quot;flipY&amp;quot;:false,&amp;quot;opacity&amp;quot;:1,&amp;quot;shadow&amp;quot;:null,&amp;quot;visible&amp;quot;:true,&amp;quot;clipTo&amp;quot;:null,&amp;quot;backgroundColor&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;fillRule&amp;quot;:&amp;quot;nonzero&amp;quot;,&amp;quot;paintFirst&amp;quot;:&amp;quot;fill&amp;quot;,&amp;quot;globalCompositeOperation&amp;quot;:&amp;quot;source-over&amp;quot;,&amp;quot;transformMatrix&amp;quot;:null,&amp;quot;skewX&amp;quot;:0,&amp;quot;skewY&amp;quot;:0,&amp;quot;crossOrigin&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;cropX&amp;quot;:0,&amp;quot;cropY&amp;quot;:0,&amp;quot;src&amp;quot;:&amp;quot;https://wikifab.org/images/f/f9/Syst_me_de_traduction_et_d_apprentissage_du_Braille_20250526_144220_1_.jpg&amp;quot;,&amp;quot;filters&amp;quot;:[]}],&amp;quot;height&amp;quot;:449.2718446601942,&amp;quot;width&amp;quot;:600}&lt;br /&gt;
|Licences=Attribution (CC BY)&lt;br /&gt;
|Description=&amp;lt;translate&amp;gt;Objet qui permet de traduire et d'apprendre le braille.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Area=Electronics, Health and Wellbeing&lt;br /&gt;
|Type=Creation&lt;br /&gt;
|Difficulty=Hard&lt;br /&gt;
|Duration=72&lt;br /&gt;
|Duration-type=hour(s)&lt;br /&gt;
|Cost=250&lt;br /&gt;
|Currency=EUR (€)&lt;br /&gt;
|Tags=aveugles, Braille, Traduction, Apprentissage&lt;br /&gt;
}}&lt;br /&gt;
{{Introduction&lt;br /&gt;
|Introduction=&amp;lt;translate&amp;gt;Présentation d'un tutoriel notre projet de classe de terminale STI2D afin de le reproduire chez soi&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Materials&lt;br /&gt;
|Step_Picture_00=Syst_me_de_traduction_et_d_apprentissage_du_Braille_Colle_bois.png&lt;br /&gt;
|Step_Picture_01=Syst_me_de_traduction_et_d_apprentissage_du_Braille_71RgeJe73GL._AC_SL1500_.jpg&lt;br /&gt;
|Step_Picture_02=Syst_me_de_traduction_et_d_apprentissage_du_Braille_Capture_d_cran_2025-05-26_151811.png&lt;br /&gt;
|Step_Picture_03=Syst_me_de_traduction_et_d_apprentissage_du_Braille_Capture_d_cran_2025-05-26_154234.jpg&lt;br /&gt;
|Step_Picture_04=Syst_me_de_traduction_et_d_apprentissage_du_Braille_61L4aoIqYOL._AC_SX679_.jpg&lt;br /&gt;
|Step_Picture_05=Syst_me_de_traduction_et_d_apprentissage_du_Braille_Capture_d_cran_2025-05-26_153426.png&lt;br /&gt;
|Material=&amp;lt;translate&amp;gt;-Bois 3mm&lt;br /&gt;
&lt;br /&gt;
-Plastique pour découpeuse laser ( ici du PLA)&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Tools=&amp;lt;translate&amp;gt;-Découpeuse laser&lt;br /&gt;
&lt;br /&gt;
-Imprimante 3D (ici la Ultimaker 2+)&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Tuto_Attachments={{Tuto Attachments&lt;br /&gt;
|Attachment=support  servomoteur .stl&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=joint servomoteur .stl&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=lettre braille 1.stl&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=lettre braille 2.stl&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=lettre braille 3.stl&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=Piece_arriere_file.dxf&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=Piece_base_1.dxf&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=Piece_base_2.dxf&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=Piece_bouton_d.dxf&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=Piece_camera.dxf&lt;br /&gt;
}}{{Tuto Attachments}}&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;Découpe des pièces en bois du boitier&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;-Connecter l'ordinateur à la découpeuse laser&lt;br /&gt;
&lt;br /&gt;
-Ouvrir le logiciel Trotek ( Nécessaire à la découpe)&lt;br /&gt;
&lt;br /&gt;
-Ouvrir les pièces à découper en format dxf dans le logiciel &lt;br /&gt;
&lt;br /&gt;
-Optimiser l'espace sur la planche afin d'avoir les moins de perte de matière et déplaçant les pièces&lt;br /&gt;
&lt;br /&gt;
-Lancer la découpe&lt;br /&gt;
&lt;br /&gt;
-Nettoyer les pièces afin d'éviter des tâches dues au bois brûlé.&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;Assemblage des pièces en bois&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;Branchement entre les carte électroniques et les servo-moteurs&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;-Assurez vous d'avoir une Raspberry Pi configurer avant de commencer&lt;br /&gt;
&lt;br /&gt;
- Brancher les servo moteur sur la carte arduino    &lt;br /&gt;
&lt;br /&gt;
- inséré le code Arduino    &lt;br /&gt;
&lt;br /&gt;
- Se munir de la carte raspery Pi    &lt;br /&gt;
&lt;br /&gt;
- Brancher relier les broches  Gpio raspery Pi avec celle de arduino(gnd,vcc) taper sur internet broche raspery pi    &lt;br /&gt;
&lt;br /&gt;
- inséré ce code &amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import smbus&lt;br /&gt;
import time&lt;br /&gt;
import RPi.GPIO as GPIO  &lt;br /&gt;
import random&lt;br /&gt;
import os  &lt;br /&gt;
import threading&lt;br /&gt;
import cv2&lt;br /&gt;
import pytesseract&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
I2C_ADDR = 8  &lt;br /&gt;
bus = smbus.SMBus(1)  &lt;br /&gt;
&lt;br /&gt;
# GPIO des boutons&lt;br /&gt;
BOUTON_PRECEDENT = 17  &lt;br /&gt;
BOUTON_SUIVANT = 27    &lt;br /&gt;
BOUTON_LECON = 23  &lt;br /&gt;
BOUTON_EXERCICE = 24&lt;br /&gt;
BOUTON_CAMERA = 22  # Bouton pour la caméra&lt;br /&gt;
&lt;br /&gt;
# GPIO du capteur ultrason HCSR04&lt;br /&gt;
TRIG = 5  # GPIO pour le trigger du capteur&lt;br /&gt;
ECHO = 6  # GPIO pour l'echo du capteur&lt;br /&gt;
&lt;br /&gt;
# Configuration des GPIO&lt;br /&gt;
try:&lt;br /&gt;
    GPIO.cleanup()&lt;br /&gt;
except:&lt;br /&gt;
    pass&lt;br /&gt;
&lt;br /&gt;
GPIO.setmode(GPIO.BCM)&lt;br /&gt;
GPIO.setup(BOUTON_PRECEDENT, GPIO.IN, pull_up_down=GPIO.PUD_UP)&lt;br /&gt;
GPIO.setup(BOUTON_SUIVANT, GPIO.IN, pull_up_down=GPIO.PUD_UP)&lt;br /&gt;
GPIO.setup(BOUTON_LECON, GPIO.IN, pull_up_down=GPIO.PUD_UP)&lt;br /&gt;
GPIO.setup(BOUTON_EXERCICE, GPIO.IN, pull_up_down=GPIO.PUD_UP)&lt;br /&gt;
GPIO.setup(BOUTON_CAMERA, GPIO.IN, pull_up_down=GPIO.PUD_UP)&lt;br /&gt;
&lt;br /&gt;
# Configuration du capteur ultrason&lt;br /&gt;
GPIO.setup(TRIG, GPIO.OUT)&lt;br /&gt;
GPIO.setup(ECHO, GPIO.IN)&lt;br /&gt;
GPIO.output(TRIG, False)  # S'assurer que le trigger est bas au démarrage&lt;br /&gt;
&lt;br /&gt;
# Dictionnaire Braille&lt;br /&gt;
braille_dict = {&lt;br /&gt;
    &amp;quot;a&amp;quot;: 0b100000, &amp;quot;b&amp;quot;: 0b110000, &amp;quot;c&amp;quot;: 0b101000, &amp;quot;d&amp;quot;: 0b101100,&lt;br /&gt;
    &amp;quot;e&amp;quot;: 0b100100, &amp;quot;f&amp;quot;: 0b111000, &amp;quot;g&amp;quot;: 0b111100, &amp;quot;h&amp;quot;: 0b110100,&lt;br /&gt;
    &amp;quot;i&amp;quot;: 0b011000, &amp;quot;j&amp;quot;: 0b011100, &amp;quot;k&amp;quot;: 0b100010, &amp;quot;l&amp;quot;: 0b110010,&lt;br /&gt;
    &amp;quot;m&amp;quot;: 0b101010, &amp;quot;n&amp;quot;: 0b101110, &amp;quot;o&amp;quot;: 0b100110, &amp;quot;p&amp;quot;: 0b111010,&lt;br /&gt;
    &amp;quot;q&amp;quot;: 0b111110, &amp;quot;r&amp;quot;: 0b110110, &amp;quot;s&amp;quot;: 0b011010, &amp;quot;t&amp;quot;: 0b011110,&lt;br /&gt;
    &amp;quot;u&amp;quot;: 0b100011, &amp;quot;v&amp;quot;: 0b110011, &amp;quot;w&amp;quot;: 0b011101, &amp;quot;x&amp;quot;: 0b101011,&lt;br /&gt;
    &amp;quot;y&amp;quot;: 0b101111, &amp;quot;z&amp;quot;: 0b100111, &amp;quot; &amp;quot;: 0b000000&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
texte = &amp;quot;bonjour&amp;quot;  # Texte par défaut&lt;br /&gt;
index = 0&lt;br /&gt;
lecon_en_cours = False&lt;br /&gt;
exercice_en_cours = False&lt;br /&gt;
attente_texte = False  # Pour savoir si on attend une saisie de texte&lt;br /&gt;
camera_en_cours = False  # Pour indiquer si une capture par caméra est en cours&lt;br /&gt;
&lt;br /&gt;
# Paramètres de capture d'image&lt;br /&gt;
IMAGE_PATH = &amp;quot;capture.jpg&amp;quot;&lt;br /&gt;
CROPPED_PATH = &amp;quot;cropped.jpg&amp;quot;&lt;br /&gt;
DISTANCE_OPTIMALE = 15  # Distance optimale en cm&lt;br /&gt;
MARGE_DISTANCE = 2.5    # Marge de tolérance en cm (+/-)&lt;br /&gt;
&lt;br /&gt;
def mesurer_distance():&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Mesure la distance avec le capteur ultrason HCSR04.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    # Envoyer une impulsion de 10µs au trigger&lt;br /&gt;
    GPIO.output(TRIG, True)&lt;br /&gt;
    time.sleep(0.00001)  # 10µs&lt;br /&gt;
    GPIO.output(TRIG, False)&lt;br /&gt;
    &lt;br /&gt;
    # Attendre que l'écho commence&lt;br /&gt;
    start_time = time.time()&lt;br /&gt;
    timeout = start_time + 1.0  # Timeout de 1 seconde&lt;br /&gt;
    &lt;br /&gt;
    while GPIO.input(ECHO) == 0:&lt;br /&gt;
        if time.time() &amp;gt; timeout:&lt;br /&gt;
            return -1  # Erreur: pas de signal&lt;br /&gt;
        pulse_start = time.time()&lt;br /&gt;
    &lt;br /&gt;
    # Attendre que l'écho se termine&lt;br /&gt;
    while GPIO.input(ECHO) == 1:&lt;br /&gt;
        if time.time() &amp;gt; timeout:&lt;br /&gt;
            return -1  # Erreur: signal trop long&lt;br /&gt;
        pulse_end = time.time()&lt;br /&gt;
    &lt;br /&gt;
    # Calculer la durée de l'impulsion&lt;br /&gt;
    pulse_duration = pulse_end - pulse_start&lt;br /&gt;
    &lt;br /&gt;
    # Calculer la distance (vitesse du son = 34300 cm/s)&lt;br /&gt;
    # Diviser par 2 car le signal fait l'aller-retour&lt;br /&gt;
    distance = (pulse_duration * 34300) / 2&lt;br /&gt;
    &lt;br /&gt;
    return round(distance, 1)  # Arrondir à 1 décimale&lt;br /&gt;
&lt;br /&gt;
def guide_position():&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Guide l'utilisateur pour positionner correctement le texte.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    global camera_en_cours&lt;br /&gt;
    &lt;br /&gt;
    print(&amp;quot;📏 Positionnement du texte...&amp;quot;)&lt;br /&gt;
    os.system('espeak -v fr &amp;quot;Positionnez le texte&amp;quot; --stdout | aplay')&lt;br /&gt;
    &lt;br /&gt;
    # Attendre que la distance soit stable dans la plage optimale&lt;br /&gt;
    position_stable = False&lt;br /&gt;
    nb_mesures_stables = 0&lt;br /&gt;
    &lt;br /&gt;
    while camera_en_cours and not position_stable:&lt;br /&gt;
        distance = mesurer_distance()&lt;br /&gt;
        &lt;br /&gt;
        if distance &amp;lt; 0:&lt;br /&gt;
            print(&amp;quot;⚠️ Erreur de mesure de distance&amp;quot;)&lt;br /&gt;
            time.sleep(0.5)&lt;br /&gt;
            continue&lt;br /&gt;
            &lt;br /&gt;
        print(f&amp;quot;📏 Distance mesurée : {distance} cm&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        if distance &amp;lt; DISTANCE_OPTIMALE - MARGE_DISTANCE:&lt;br /&gt;
            # Trop proche&lt;br /&gt;
            os.system('espeak -v fr &amp;quot;Reculez&amp;quot; --stdout | aplay')&lt;br /&gt;
            nb_mesures_stables = 0&lt;br /&gt;
        elif distance &amp;gt; DISTANCE_OPTIMALE + MARGE_DISTANCE:&lt;br /&gt;
            # Trop loin&lt;br /&gt;
            os.system('espeak -v fr &amp;quot;Avancez&amp;quot; --stdout | aplay')&lt;br /&gt;
            nb_mesures_stables = 0&lt;br /&gt;
        else:&lt;br /&gt;
            # Distance correcte&lt;br /&gt;
            print(f&amp;quot;✅ Distance correcte : {distance} cm&amp;quot;)&lt;br /&gt;
            nb_mesures_stables += 1&lt;br /&gt;
            &lt;br /&gt;
            # Si 3 mesures consécutives sont dans la plage, on considère la position comme stable&lt;br /&gt;
            if nb_mesures_stables &amp;gt;= 3:&lt;br /&gt;
                position_stable = True&lt;br /&gt;
                os.system('espeak -v fr &amp;quot;Position correcte&amp;quot; --stdout | aplay')&lt;br /&gt;
        &lt;br /&gt;
        time.sleep(0.5)  # Attendre avant la prochaine mesure&lt;br /&gt;
    &lt;br /&gt;
    return position_stable&lt;br /&gt;
&lt;br /&gt;
def envoyer_nombre(nombre, mode=None):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Envoie une lettre en Braille et annonce (avec délai optionnel en mode exercice).&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    try:&lt;br /&gt;
        lettre = [key for key, val in braille_dict.items() if val == nombre][0]  &lt;br /&gt;
        bus.write_byte(I2C_ADDR, nombre)&lt;br /&gt;
        print(f&amp;quot;✅ Lettre envoyée: {lettre.upper()} ({bin(nombre)})&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        # Si c'est le mode exercice, attendre 2 secondes avant d'énoncer la lettre&lt;br /&gt;
        if mode == &amp;quot;exercice&amp;quot;:&lt;br /&gt;
            # Vérifier périodiquement si l'exercice a été arrêté pendant l'attente&lt;br /&gt;
            debut = time.time()&lt;br /&gt;
            while time.time() - debut &amp;lt; 2 and exercice_en_cours:&lt;br /&gt;
                time.sleep(0.1)&lt;br /&gt;
            &lt;br /&gt;
            # Ne prononcer la lettre que si l'exercice est toujours en cours&lt;br /&gt;
            if exercice_en_cours:&lt;br /&gt;
                os.system(f'espeak -v fr &amp;quot;{lettre}&amp;quot; --stdout | aplay')&lt;br /&gt;
        else:&lt;br /&gt;
            # Pour les autres modes, énoncer la lettre immédiatement&lt;br /&gt;
            os.system(f'espeak -v fr &amp;quot;{lettre}&amp;quot; --stdout | aplay')  &lt;br /&gt;
    except IOError:&lt;br /&gt;
        print(&amp;quot;❌ Erreur de communication avec l'Arduino&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        print(&amp;quot;❌ Erreur: code braille non trouvé dans le dictionnaire&amp;quot;)&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        print(f&amp;quot;❌ Erreur inattendue: {str(e)}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def demander_nouveau_texte():&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Demande un nouveau texte et réinitialise l'index.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    global texte, index, attente_texte&lt;br /&gt;
    &lt;br /&gt;
    # Annonce vocale&lt;br /&gt;
    os.system('espeak -v fr &amp;quot;Entrez un nouveau texte&amp;quot; --stdout | aplay')&lt;br /&gt;
    &lt;br /&gt;
    # Lancer un thread pour attendre la saisie sans bloquer le reste du programme&lt;br /&gt;
    def attendre_saisie():&lt;br /&gt;
        global texte, index, attente_texte&lt;br /&gt;
        nouveau_texte = input(&amp;quot;\n🆕 Entrez un texte (ou appuyez sur Entrée pour garder 'bonjour') : &amp;quot;).lower()&lt;br /&gt;
        if nouveau_texte:  # Si l'utilisateur a entré quelque chose&lt;br /&gt;
            texte = nouveau_texte&lt;br /&gt;
        index = 0&lt;br /&gt;
        print(f&amp;quot;🔠 Texte actuel : {texte}&amp;quot;)&lt;br /&gt;
        print(&amp;quot;📌 Appuyez sur le bouton 'Suivant' pour parcourir le texte, ou sur 'Leçon'/'Exercice' pour ces modes.&amp;quot;)&lt;br /&gt;
        attente_texte = False  # Fin de l'attente&lt;br /&gt;
    &lt;br /&gt;
    attente_texte = True  # Début de l'attente&lt;br /&gt;
    t = threading.Thread(target=attendre_saisie)&lt;br /&gt;
    t.daemon = True&lt;br /&gt;
    t.start()&lt;br /&gt;
&lt;br /&gt;
def bouton_precedent(channel):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Affiche la lettre précédente pendant la lecture du texte.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    global index&lt;br /&gt;
    &lt;br /&gt;
    # Ne pas exécuter si un mode est en cours ou si on attend une saisie&lt;br /&gt;
    if lecon_en_cours or exercice_en_cours or attente_texte or camera_en_cours:&lt;br /&gt;
        return&lt;br /&gt;
    &lt;br /&gt;
    time.sleep(0.2)  # Anti-rebond&lt;br /&gt;
    if GPIO.input(BOUTON_PRECEDENT) == GPIO.LOW:&lt;br /&gt;
        if index &amp;gt; 0:&lt;br /&gt;
            index -= 1&lt;br /&gt;
            envoyer_nombre(braille_dict.get(texte[index], 0))&lt;br /&gt;
            print(f&amp;quot;🔙 Lettre précédente: {texte[index]}&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;🚫 Déjà à la première lettre.&amp;quot;)&lt;br /&gt;
            os.system('espeak -v fr &amp;quot;Première lettre&amp;quot; --stdout | aplay')&lt;br /&gt;
&lt;br /&gt;
def bouton_suivant(channel):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Affiche la lettre suivante et lit le mot en entier à la fin.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    global index&lt;br /&gt;
    &lt;br /&gt;
    # Ne pas exécuter si un mode est en cours ou si on attend une saisie&lt;br /&gt;
    if lecon_en_cours or exercice_en_cours or attente_texte or camera_en_cours:&lt;br /&gt;
        return&lt;br /&gt;
    &lt;br /&gt;
    time.sleep(0.2)  # Anti-rebond&lt;br /&gt;
    if GPIO.input(BOUTON_SUIVANT) == GPIO.LOW:&lt;br /&gt;
        if texte and index &amp;lt; len(texte):&lt;br /&gt;
            envoyer_nombre(braille_dict.get(texte[index], 0))&lt;br /&gt;
            index += 1&lt;br /&gt;
            print(f&amp;quot;🔜 Lettre suivante: {texte[index-1]}&amp;quot;)&lt;br /&gt;
            if index == len(texte):&lt;br /&gt;
                print(&amp;quot;🔁 Fin du texte, lecture complète...&amp;quot;)&lt;br /&gt;
                os.system(f'espeak -v fr &amp;quot;{texte}&amp;quot; --stdout | aplay')&lt;br /&gt;
                demander_nouveau_texte()&lt;br /&gt;
&lt;br /&gt;
def lancer_lecon():&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Fonction pour lancer la leçon dans un thread séparé.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    global lecon_en_cours&lt;br /&gt;
    &lt;br /&gt;
    # Si on attend une saisie de texte, annuler cette attente&lt;br /&gt;
    global attente_texte&lt;br /&gt;
    attente_texte = False&lt;br /&gt;
    &lt;br /&gt;
    # Marquer le début de la leçon&lt;br /&gt;
    lecon_en_cours = True&lt;br /&gt;
    print(&amp;quot;📖 Début de la leçon...&amp;quot;)&lt;br /&gt;
    os.system('espeak -v fr &amp;quot;Début de la leçon&amp;quot; --stdout | aplay')&lt;br /&gt;
    &lt;br /&gt;
    # Parcourir l'alphabet&lt;br /&gt;
    for lettre in &amp;quot;abcdefghijklmnopqrstuvwxyz&amp;quot;:&lt;br /&gt;
        # Vérifier si la leçon a été arrêtée&lt;br /&gt;
        if not lecon_en_cours:&lt;br /&gt;
            return&lt;br /&gt;
        &lt;br /&gt;
        # Afficher et annoncer la lettre&lt;br /&gt;
        print(f&amp;quot;📝 Leçon : Lettre {lettre.upper()}&amp;quot;)&lt;br /&gt;
        envoyer_nombre(braille_dict[lettre])&lt;br /&gt;
        &lt;br /&gt;
        # Attendre 8 secondes, en vérifiant si la leçon a été arrêtée&lt;br /&gt;
        debut = time.time()&lt;br /&gt;
        while time.time() - debut &amp;lt; 8:&lt;br /&gt;
            if not lecon_en_cours:&lt;br /&gt;
                return  # Sortir immédiatement si la leçon a été arrêtée&lt;br /&gt;
            time.sleep(0.1)&lt;br /&gt;
    &lt;br /&gt;
    # Fin normale de la leçon&lt;br /&gt;
    print(&amp;quot;✅ Leçon terminée !&amp;quot;)&lt;br /&gt;
    os.system('espeak -v fr &amp;quot;Leçon terminée&amp;quot; --stdout | aplay')&lt;br /&gt;
    lecon_en_cours = False&lt;br /&gt;
    &lt;br /&gt;
    # Proposer d'entrer un nouveau texte sans bloquer&lt;br /&gt;
    demander_nouveau_texte()&lt;br /&gt;
&lt;br /&gt;
def lancer_exercice():&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Fonction pour lancer l'exercice dans un thread séparé.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    global exercice_en_cours&lt;br /&gt;
    &lt;br /&gt;
    # Si on attend une saisie de texte, annuler cette attente&lt;br /&gt;
    global attente_texte&lt;br /&gt;
    attente_texte = False&lt;br /&gt;
    &lt;br /&gt;
    # Marquer le début de l'exercice&lt;br /&gt;
    exercice_en_cours = True&lt;br /&gt;
    print(&amp;quot;🎲 Début de l'exercice...&amp;quot;)&lt;br /&gt;
    os.system('espeak -v fr &amp;quot;Début de l\'exercice&amp;quot; --stdout | aplay')&lt;br /&gt;
    &lt;br /&gt;
    # Préparer les lettres dans un ordre aléatoire&lt;br /&gt;
    lettres = list(&amp;quot;abcdefghijklmnopqrstuvwxyz&amp;quot;)&lt;br /&gt;
    random.shuffle(lettres)&lt;br /&gt;
    &lt;br /&gt;
    # Parcourir les lettres aléatoires&lt;br /&gt;
    for lettre in lettres:&lt;br /&gt;
        # Vérifier si l'exercice a été arrêté&lt;br /&gt;
        if not exercice_en_cours:&lt;br /&gt;
            return&lt;br /&gt;
        &lt;br /&gt;
        # Afficher et annoncer la lettre avec délai de 2 secondes&lt;br /&gt;
        print(f&amp;quot;📝 Exercice : Lettre {lettre.upper()}&amp;quot;)&lt;br /&gt;
        envoyer_nombre(braille_dict[lettre], mode=&amp;quot;exercice&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        # Attendre le reste des 8 secondes (moins les 2 secondes d'attente déjà écoulées), &lt;br /&gt;
        # en vérifiant si l'exercice a été arrêté&lt;br /&gt;
        debut = time.time()&lt;br /&gt;
        while time.time() - debut &amp;lt; 6:  # 8 - 2 = 6 secondes restantes&lt;br /&gt;
            if not exercice_en_cours:&lt;br /&gt;
                return  # Sortir immédiatement si l'exercice a été arrêté&lt;br /&gt;
            time.sleep(0.1)&lt;br /&gt;
    &lt;br /&gt;
    # Fin normale de l'exercice&lt;br /&gt;
    print(&amp;quot;🏆 Exercice terminé !&amp;quot;)&lt;br /&gt;
    os.system('espeak -v fr &amp;quot;Exercice terminé&amp;quot; --stdout | aplay')&lt;br /&gt;
    exercice_en_cours = False&lt;br /&gt;
    &lt;br /&gt;
    # Proposer d'entrer un nouveau texte sans bloquer&lt;br /&gt;
    demander_nouveau_texte()&lt;br /&gt;
&lt;br /&gt;
def capturer_et_lire_texte():&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Fonction pour capturer une image avec la caméra et en extraire le texte.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    global camera_en_cours, texte, index, attente_texte&lt;br /&gt;
    &lt;br /&gt;
    # Si on attend une saisie de texte, annuler cette attente&lt;br /&gt;
    attente_texte = False&lt;br /&gt;
    &lt;br /&gt;
    # Marquer le début de la capture&lt;br /&gt;
    camera_en_cours = True&lt;br /&gt;
    print(&amp;quot;📸 Préparation de la capture...&amp;quot;)&lt;br /&gt;
    os.system('espeak -v fr &amp;quot;Préparation de la capture&amp;quot; --stdout | aplay')&lt;br /&gt;
    &lt;br /&gt;
    # Guide de positionnement avec le capteur ultrason&lt;br /&gt;
    if guide_position():&lt;br /&gt;
        # Capture de l'image (réduction du temps à 3s car on a déjà guidé l'utilisateur)&lt;br /&gt;
        print(&amp;quot;📸 Capture en cours...&amp;quot;)&lt;br /&gt;
        os.system('espeak -v fr &amp;quot;Capture en cours&amp;quot; --stdout | aplay')&lt;br /&gt;
        os.system(f&amp;quot;libcamera-jpeg -o {IMAGE_PATH} -t 3000 --width 1920 --height 1080 --quality 100&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        # Vérifier si l'image existe&lt;br /&gt;
        if not os.path.exists(IMAGE_PATH):&lt;br /&gt;
            print(&amp;quot;❌ Erreur : L'image n'a pas été capturée.&amp;quot;)&lt;br /&gt;
            os.system('espeak -v fr &amp;quot;Erreur de capture&amp;quot; --stdout | aplay')&lt;br /&gt;
            camera_en_cours = False&lt;br /&gt;
            return&lt;br /&gt;
        &lt;br /&gt;
        print(&amp;quot;⚡ Optimisation de l'image...&amp;quot;)&lt;br /&gt;
        try:&lt;br /&gt;
            # Chargement et conversion en niveaux de gris&lt;br /&gt;
            image = cv2.imread(IMAGE_PATH)&lt;br /&gt;
            gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)&lt;br /&gt;
            &lt;br /&gt;
            # Correction de l'orientation&lt;br /&gt;
            try:&lt;br /&gt;
                osd = pytesseract.image_to_osd(gray)&lt;br /&gt;
                angle = int(osd.split(&amp;quot;\n&amp;quot;)[1].split(&amp;quot;:&amp;quot;)[1].strip())&lt;br /&gt;
                if angle != 0:&lt;br /&gt;
                    (h, w) = gray.shape[:2]&lt;br /&gt;
                    center = (w // 2, h // 2)&lt;br /&gt;
                    M = cv2.getRotationMatrix2D(center, -angle, 1.0)&lt;br /&gt;
                    gray = cv2.warpAffine(gray, M, (w, h))&lt;br /&gt;
            except:&lt;br /&gt;
                print(&amp;quot;⚠ Impossible de détecter l'orientation, passage à l'étape suivante.&amp;quot;)&lt;br /&gt;
            &lt;br /&gt;
            # Prétraitement (amélioration du contraste et du bruit)&lt;br /&gt;
            gray = cv2.GaussianBlur(gray, (3, 3), 0)&lt;br /&gt;
            gray = cv2.equalizeHist(gray)  # Augmentation du contraste&lt;br /&gt;
            gray = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 31, 10)&lt;br /&gt;
            &lt;br /&gt;
            # Détection des contours pour recadrer uniquement le texte&lt;br /&gt;
            print(&amp;quot;📐 Détection du texte...&amp;quot;)&lt;br /&gt;
            edges = cv2.Canny(gray, 50, 150)&lt;br /&gt;
            contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)&lt;br /&gt;
            &lt;br /&gt;
            filtered_contours = [c for c in contours if cv2.contourArea(c) &amp;gt; 1000]&lt;br /&gt;
            &lt;br /&gt;
            if filtered_contours:&lt;br /&gt;
                x, y, w, h = cv2.boundingRect(cv2.convexHull(np.vstack(filtered_contours)))&lt;br /&gt;
                cropped = image[y:y+h, x:x+w]&lt;br /&gt;
                cropped = cv2.resize(cropped, None, fx=1.5, fy=1.5, interpolation=cv2.INTER_LINEAR)&lt;br /&gt;
                cv2.imwrite(CROPPED_PATH, cropped)&lt;br /&gt;
            else:&lt;br /&gt;
                print(&amp;quot;⚠ Aucun texte clairement détecté, extraction sur l'image entière.&amp;quot;)&lt;br /&gt;
                cropped = image&lt;br /&gt;
            &lt;br /&gt;
            # OCR optimisé&lt;br /&gt;
            print(&amp;quot;🔍 Extraction du texte...&amp;quot;)&lt;br /&gt;
            detected_text = pytesseract.image_to_string(cropped, lang=&amp;quot;eng+fra&amp;quot;, config=&amp;quot;--psm 6 --oem 3&amp;quot;).strip()&lt;br /&gt;
            &lt;br /&gt;
            # Nettoyer le texte détecté (supprimer les caractères spéciaux et garder lettres, chiffres et espaces)&lt;br /&gt;
            cleaned_text = ''.join(c.lower() for c in detected_text if c.isalnum() or c.isspace())&lt;br /&gt;
            &lt;br /&gt;
            # Si le texte est vide après nettoyage, afficher un message&lt;br /&gt;
            if not cleaned_text:&lt;br /&gt;
                print(&amp;quot;⚠ Aucun texte détecté après nettoyage.&amp;quot;)&lt;br /&gt;
                os.system('espeak -v fr &amp;quot;Aucun texte détecté&amp;quot; --stdout | aplay')&lt;br /&gt;
                camera_en_cours = False&lt;br /&gt;
                return&lt;br /&gt;
            &lt;br /&gt;
            # Afficher le texte détecté&lt;br /&gt;
            print(f&amp;quot;\n📄 Texte détecté : {cleaned_text}&amp;quot;)&lt;br /&gt;
            os.system(f'espeak -v fr &amp;quot;Texte détecté&amp;quot; --stdout | aplay')&lt;br /&gt;
            &lt;br /&gt;
            # Mettre à jour le texte global et réinitialiser l'index&lt;br /&gt;
            texte = cleaned_text&lt;br /&gt;
            index = 0&lt;br /&gt;
            print(f&amp;quot;🔠 Nouveau texte : {texte}&amp;quot;)&lt;br /&gt;
            print(&amp;quot;📌 Appuyez sur le bouton 'Suivant' pour parcourir le texte.&amp;quot;)&lt;br /&gt;
            &lt;br /&gt;
        except Exception as e:&lt;br /&gt;
            print(f&amp;quot;❌ Erreur lors du traitement de l'image : {str(e)}&amp;quot;)&lt;br /&gt;
            os.system('espeak -v fr &amp;quot;Erreur de traitement&amp;quot; --stdout | aplay')&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;❌ Positionnement annulé.&amp;quot;)&lt;br /&gt;
        os.system('espeak -v fr &amp;quot;Positionnement annulé&amp;quot; --stdout | aplay')&lt;br /&gt;
    &lt;br /&gt;
    # Marquer la fin de la capture&lt;br /&gt;
    camera_en_cours = False&lt;br /&gt;
&lt;br /&gt;
def bouton_lecon_presse(channel):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Fonction appelée lorsque le bouton leçon est pressé.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    global lecon_en_cours&lt;br /&gt;
    &lt;br /&gt;
    # Ne pas réagir si un autre mode est en cours&lt;br /&gt;
    if exercice_en_cours or camera_en_cours:&lt;br /&gt;
        return&lt;br /&gt;
    &lt;br /&gt;
    time.sleep(0.2)  # Anti-rebond&lt;br /&gt;
    if GPIO.input(BOUTON_LECON) == GPIO.LOW:&lt;br /&gt;
        # Basculer l'état de la leçon&lt;br /&gt;
        if lecon_en_cours:&lt;br /&gt;
            lecon_en_cours = False&lt;br /&gt;
            print(&amp;quot;📖 Leçon arrêtée par l'utilisateur.&amp;quot;)&lt;br /&gt;
            os.system('espeak -v fr &amp;quot;Leçon arrêtée&amp;quot; --stdout | aplay')&lt;br /&gt;
            # La leçon est arrêtée, sera nettoyée dans le thread&lt;br /&gt;
        else:&lt;br /&gt;
            # Lancer la leçon dans un thread séparé&lt;br /&gt;
            t = threading.Thread(target=lancer_lecon)&lt;br /&gt;
            t.daemon = True  # Le thread s'arrêtera quand le programme principal s'arrête&lt;br /&gt;
            t.start()&lt;br /&gt;
&lt;br /&gt;
def bouton_exercice_presse(channel):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Fonction appelée lorsque le bouton exercice est pressé.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    global exercice_en_cours&lt;br /&gt;
    &lt;br /&gt;
    # Ne pas réagir si un autre mode est en cours&lt;br /&gt;
    if lecon_en_cours or camera_en_cours:&lt;br /&gt;
        return&lt;br /&gt;
    &lt;br /&gt;
    time.sleep(0.2)  # Anti-rebond&lt;br /&gt;
    if GPIO.input(BOUTON_EXERCICE) == GPIO.LOW:&lt;br /&gt;
        # Basculer l'état de l'exercice&lt;br /&gt;
        if exercice_en_cours:&lt;br /&gt;
            exercice_en_cours = False&lt;br /&gt;
            print(&amp;quot;🎲 Exercice arrêté par l'utilisateur.&amp;quot;)&lt;br /&gt;
            os.system('espeak -v fr &amp;quot;Exercice arrêté&amp;quot; --stdout | aplay')&lt;br /&gt;
            # L'exercice est arrêté, sera nettoyé dans le thread&lt;br /&gt;
        else:&lt;br /&gt;
            # Lancer l'exercice dans un thread séparé&lt;br /&gt;
            t = threading.Thread(target=lancer_exercice)&lt;br /&gt;
            t.daemon = True  # Le thread s'arrêtera quand le programme principal s'arrête&lt;br /&gt;
            t.start()&lt;br /&gt;
&lt;br /&gt;
def bouton_camera_presse(channel):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Fonction appelée lorsque le bouton caméra est pressé.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    global camera_en_cours&lt;br /&gt;
    &lt;br /&gt;
    # Ne pas réagir si un autre mode est en cours&lt;br /&gt;
    if lecon_en_cours or exercice_en_cours or camera_en_cours:&lt;br /&gt;
        return&lt;br /&gt;
    &lt;br /&gt;
    time.sleep(0.2)  # Anti-rebond&lt;br /&gt;
    if GPIO.input(BOUTON_CAMERA) == GPIO.LOW:&lt;br /&gt;
        # Lancer la capture dans un thread séparé&lt;br /&gt;
        t = threading.Thread(target=capturer_et_lire_texte)&lt;br /&gt;
        t.daemon = True  # Le thread s'arrêtera quand le programme principal s'arrête&lt;br /&gt;
        t.start()&lt;br /&gt;
&lt;br /&gt;
# Supprimer les détecteurs d'événements existants s'il y en a&lt;br /&gt;
try:&lt;br /&gt;
    GPIO.remove_event_detect(BOUTON_SUIVANT)&lt;br /&gt;
    GPIO.remove_event_detect(BOUTON_PRECEDENT)&lt;br /&gt;
    GPIO.remove_event_detect(BOUTON_LECON)&lt;br /&gt;
    GPIO.remove_event_detect(BOUTON_EXERCICE)&lt;br /&gt;
    GPIO.remove_event_detect(BOUTON_CAMERA)&lt;br /&gt;
except:&lt;br /&gt;
    pass&lt;br /&gt;
&lt;br /&gt;
# Configuration des détecteurs d'événements&lt;br /&gt;
GPIO.add_event_detect(BOUTON_SUIVANT, GPIO.FALLING, callback=bouton_suivant, bouncetime=500)&lt;br /&gt;
GPIO.add_event_detect(BOUTON_PRECEDENT, GPIO.FALLING, callback=bouton_precedent, bouncetime=500)&lt;br /&gt;
GPIO.add_event_detect(BOUTON_LECON, GPIO.FALLING, callback=bouton_lecon_presse, bouncetime=500)&lt;br /&gt;
GPIO.add_event_detect(BOUTON_EXERCICE, GPIO.FALLING, callback=bouton_exercice_presse, bouncetime=500)&lt;br /&gt;
GPIO.add_event_detect(BOUTON_CAMERA, GPIO.FALLING, callback=bouton_camera_presse, bouncetime=500)&lt;br /&gt;
&lt;br /&gt;
# Initialisation du capteur ultrason (attendre qu'il se stabilise)&lt;br /&gt;
print(&amp;quot;⚙️ Initialisation du capteur ultrason...&amp;quot;)&lt;br /&gt;
time.sleep(0.5)&lt;br /&gt;
GPIO.output(TRIG, False)&lt;br /&gt;
time.sleep(0.5)&lt;br /&gt;
&lt;br /&gt;
# Afficher les instructions au démarrage&lt;br /&gt;
print(&amp;quot;👋 Bienvenue dans l'application d'apprentissage du Braille&amp;quot;)&lt;br /&gt;
print(&amp;quot;📋 Instructions:&amp;quot;)&lt;br /&gt;
print(&amp;quot;  - Bouton LEÇON: Apprendre l'alphabet (8s par lettre)&amp;quot;)&lt;br /&gt;
print(&amp;quot;  - Bouton EXERCICE: Pratiquer avec des lettres aléatoires (2s de réflexion, puis annonce)&amp;quot;)&lt;br /&gt;
print(&amp;quot;  - Bouton SUIVANT: Afficher la lettre suivante du texte&amp;quot;)&lt;br /&gt;
print(&amp;quot;  - Bouton PRÉCÉDENT: Afficher la lettre précédente du texte&amp;quot;)&lt;br /&gt;
print(&amp;quot;  - Bouton CAMÉRA: Guide le positionnement, puis capture une image et extrait le texte&amp;quot;)&lt;br /&gt;
print(&amp;quot;⚠️ Appuyez à nouveau sur LEÇON/EXERCICE pour arrêter à tout moment&amp;quot;)&lt;br /&gt;
print(f&amp;quot;🔠 Texte par défaut : {texte}&amp;quot;)&lt;br /&gt;
print(&amp;quot;📌 Appuyez sur le bouton 'Suivant' pour parcourir le texte, ou choisissez un mode.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Boucle principale pour maintenir le programme actif&lt;br /&gt;
try:&lt;br /&gt;
    while True:&lt;br /&gt;
        time.sleep(0.1)&lt;br /&gt;
except KeyboardInterrupt:&lt;br /&gt;
    print(&amp;quot;\n🛑 Arrêt du programme.&amp;quot;)&lt;br /&gt;
    GPIO.cleanup()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;- regardez un tuto pour crée un fichier pour inséré le code Raspberry Pi et l'executer et avant de lancer le fichier il faut crée un environment virtuel regardez un tuto pour ça aussi====&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Picture_00=Syst_me_de_traduction_et_d_apprentissage_du_Braille_nm_arduino-front.jpg&lt;br /&gt;
|Step_Picture_01=Syst_me_de_traduction_et_d_apprentissage_du_Braille_91zSu44_34L._AC_UF1000_1000_QL80_.jpg&lt;br /&gt;
|Step_Picture_02=Syst_me_de_traduction_et_d_apprentissage_du_Braille_images_1_.jpeg&lt;br /&gt;
|Step_Picture_02_annotation={&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;objects&amp;quot;:[{&amp;quot;type&amp;quot;:&amp;quot;image&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;originX&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;originY&amp;quot;:&amp;quot;top&amp;quot;,&amp;quot;left&amp;quot;:-41,&amp;quot;top&amp;quot;:7,&amp;quot;width&amp;quot;:251,&amp;quot;height&amp;quot;:200,&amp;quot;fill&amp;quot;:&amp;quot;rgb(0,0,0)&amp;quot;,&amp;quot;stroke&amp;quot;:null,&amp;quot;strokeWidth&amp;quot;:0,&amp;quot;strokeDashArray&amp;quot;:null,&amp;quot;strokeLineCap&amp;quot;:&amp;quot;butt&amp;quot;,&amp;quot;strokeDashOffset&amp;quot;:0,&amp;quot;strokeLineJoin&amp;quot;:&amp;quot;miter&amp;quot;,&amp;quot;strokeMiterLimit&amp;quot;:4,&amp;quot;scaleX&amp;quot;:2.7,&amp;quot;scaleY&amp;quot;:2.7,&amp;quot;angle&amp;quot;:0,&amp;quot;flipX&amp;quot;:false,&amp;quot;flipY&amp;quot;:false,&amp;quot;opacity&amp;quot;:1,&amp;quot;shadow&amp;quot;:null,&amp;quot;visible&amp;quot;:true,&amp;quot;clipTo&amp;quot;:null,&amp;quot;backgroundColor&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;fillRule&amp;quot;:&amp;quot;nonzero&amp;quot;,&amp;quot;paintFirst&amp;quot;:&amp;quot;fill&amp;quot;,&amp;quot;globalCompositeOperation&amp;quot;:&amp;quot;source-over&amp;quot;,&amp;quot;transformMatrix&amp;quot;:null,&amp;quot;skewX&amp;quot;:0,&amp;quot;skewY&amp;quot;:0,&amp;quot;crossOrigin&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;cropX&amp;quot;:0,&amp;quot;cropY&amp;quot;:0,&amp;quot;src&amp;quot;:&amp;quot;https://wikifab.org/images/7/7e/Syst_me_de_traduction_et_d_apprentissage_du_Braille_images_1_.jpeg&amp;quot;,&amp;quot;filters&amp;quot;:[]}],&amp;quot;height&amp;quot;:478.15384615384613,&amp;quot;width&amp;quot;:600}&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;Système d'interface homme-machine&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;Le système est équipé de '''5 boutons physiques''' qui permettent de contrôler les différents modes d'apprentissage et la détection du texte. &lt;br /&gt;
&lt;br /&gt;
-Brancher les bouton aux broches gpio correspondantes grâce au code inséré précédement&lt;br /&gt;
&lt;br /&gt;
-Lancer le code&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Picture_00=Syst_me_de_traduction_et_d_apprentissage_du_Braille_raspberry-pi-camera-module-3-12mp-objectif-standard-haute-resolution-sc0872.jpg&lt;br /&gt;
|Step_Picture_01=Syst_me_de_traduction_et_d_apprentissage_du_Braille_images.jpeg&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;Système de détection de texte&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;===='''Le système utilise une caméra et un capteur à ultrasons pour détecter du texte .'''====&lt;br /&gt;
-Se munir du Capteur ultrason et le brancher sur la broche gpio (regardez le code rasperypi pour savoir )&lt;br /&gt;
&lt;br /&gt;
- Brancher la camera à la Raspberry Pi, il y a un tuto [https://www.gotronic.fr/pj2-tutopicam-1585.pdf?srsltid=AfmBOorFOpsASuNtAhuMkrhdSImstiAlyNY9y20oJxfODo4Vyu3Cx9X6 ici]&lt;br /&gt;
&lt;br /&gt;
-Lancer le code&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Picture_00=Syst_me_de_traduction_et_d_apprentissage_du_Braille_capteur-de-distance-ultrason-hc-sr04.jpg&lt;br /&gt;
|Step_Picture_01=Syst_me_de_traduction_et_d_apprentissage_du_Braille_raspberry-pi-camera-module-3-12mp-objectif-standard-haute-resolution-sc0872.jpg&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Notes&lt;br /&gt;
|Notes=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{PageLang&lt;br /&gt;
|Language=fr&lt;br /&gt;
|SourceLanguage=none&lt;br /&gt;
|IsTranslation=0&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Status&lt;br /&gt;
|Complete=Published&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Fichier:Piece_haut-parleur.dxf&amp;diff=287588</id>
		<title>Fichier:Piece haut-parleur.dxf</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Fichier:Piece_haut-parleur.dxf&amp;diff=287588"/>
		<updated>2025-05-26T15:10:03Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : Piece_haut-parleur&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Piece_haut-parleur&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Fichier:Pice_haut-parleur.dxf&amp;diff=287587</id>
		<title>Fichier:Pice haut-parleur.dxf</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Fichier:Pice_haut-parleur.dxf&amp;diff=287587"/>
		<updated>2025-05-26T15:09:10Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : Pice_haut-parleur&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Pice_haut-parleur&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Fichier:Piece_bouton_d.dxf&amp;diff=287585</id>
		<title>Fichier:Piece bouton d.dxf</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Fichier:Piece_bouton_d.dxf&amp;diff=287585"/>
		<updated>2025-05-26T15:09:09Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : Piece_bouton_d&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Piece_bouton_d&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Fichier:Piece_camera.dxf&amp;diff=287586</id>
		<title>Fichier:Piece camera.dxf</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Fichier:Piece_camera.dxf&amp;diff=287586"/>
		<updated>2025-05-26T15:09:09Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : Piece_camera&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Piece_camera&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Fichier:Piece_base_2.dxf&amp;diff=287584</id>
		<title>Fichier:Piece base 2.dxf</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Fichier:Piece_base_2.dxf&amp;diff=287584"/>
		<updated>2025-05-26T15:09:08Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : Piece_base_2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Piece_base_2&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Fichier:Piece_base_1.dxf&amp;diff=287583</id>
		<title>Fichier:Piece base 1.dxf</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Fichier:Piece_base_1.dxf&amp;diff=287583"/>
		<updated>2025-05-26T15:09:07Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : Piece_base_1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Piece_base_1&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Fichier:Piece_arriere_file.dxf&amp;diff=287581</id>
		<title>Fichier:Piece arriere file.dxf</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Fichier:Piece_arriere_file.dxf&amp;diff=287581"/>
		<updated>2025-05-26T15:09:07Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : Piece_arriere_file&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Piece_arriere_file&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Fichier:Lettre_braille_3.stl&amp;diff=287574</id>
		<title>Fichier:Lettre braille 3.stl</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Fichier:Lettre_braille_3.stl&amp;diff=287574"/>
		<updated>2025-05-26T15:05:20Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : lettre braille 3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;lettre braille 3&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Fichier:Lettre_braille_2.stl&amp;diff=287573</id>
		<title>Fichier:Lettre braille 2.stl</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Fichier:Lettre_braille_2.stl&amp;diff=287573"/>
		<updated>2025-05-26T15:05:19Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : lettre braille 2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;lettre braille 2&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Fichier:Lettre_braille_1.stl&amp;diff=287572</id>
		<title>Fichier:Lettre braille 1.stl</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Fichier:Lettre_braille_1.stl&amp;diff=287572"/>
		<updated>2025-05-26T15:05:18Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : lettre braille 1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;lettre braille 1&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Fichier:Joint_servomoteur_.stl&amp;diff=287570</id>
		<title>Fichier:Joint servomoteur .stl</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Fichier:Joint_servomoteur_.stl&amp;diff=287570"/>
		<updated>2025-05-26T15:04:16Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : joint servomoteur&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;joint servomoteur&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Fichier:Support_servomoteur_.stl&amp;diff=287568</id>
		<title>Fichier:Support servomoteur .stl</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Fichier:Support_servomoteur_.stl&amp;diff=287568"/>
		<updated>2025-05-26T15:03:17Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : support  servomoteur&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;support  servomoteur&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Syst%C3%A8me_de_traduction_et_d%27apprentissage_du_Braille&amp;diff=287450</id>
		<title>Système de traduction et d'apprentissage du Braille</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Syst%C3%A8me_de_traduction_et_d%27apprentissage_du_Braille&amp;diff=287450"/>
		<updated>2025-05-26T14:16:02Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tuto Details&lt;br /&gt;
|Main_Picture=Syst_me_de_traduction_et_d_apprentissage_du_Braille_20250526_144220_1_.jpg&lt;br /&gt;
|Main_Picture_annotation={&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;objects&amp;quot;:[{&amp;quot;type&amp;quot;:&amp;quot;image&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;originX&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;originY&amp;quot;:&amp;quot;top&amp;quot;,&amp;quot;left&amp;quot;:601.2,&amp;quot;top&amp;quot;:-33,&amp;quot;width&amp;quot;:3468,&amp;quot;height&amp;quot;:4624,&amp;quot;fill&amp;quot;:&amp;quot;rgb(0,0,0)&amp;quot;,&amp;quot;stroke&amp;quot;:null,&amp;quot;strokeWidth&amp;quot;:0,&amp;quot;strokeDashArray&amp;quot;:null,&amp;quot;strokeLineCap&amp;quot;:&amp;quot;butt&amp;quot;,&amp;quot;strokeDashOffset&amp;quot;:0,&amp;quot;strokeLineJoin&amp;quot;:&amp;quot;miter&amp;quot;,&amp;quot;strokeMiterLimit&amp;quot;:4,&amp;quot;scaleX&amp;quot;:0.15,&amp;quot;scaleY&amp;quot;:0.15,&amp;quot;angle&amp;quot;:90,&amp;quot;flipX&amp;quot;:false,&amp;quot;flipY&amp;quot;:false,&amp;quot;opacity&amp;quot;:1,&amp;quot;shadow&amp;quot;:null,&amp;quot;visible&amp;quot;:true,&amp;quot;clipTo&amp;quot;:null,&amp;quot;backgroundColor&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;fillRule&amp;quot;:&amp;quot;nonzero&amp;quot;,&amp;quot;paintFirst&amp;quot;:&amp;quot;fill&amp;quot;,&amp;quot;globalCompositeOperation&amp;quot;:&amp;quot;source-over&amp;quot;,&amp;quot;transformMatrix&amp;quot;:null,&amp;quot;skewX&amp;quot;:0,&amp;quot;skewY&amp;quot;:0,&amp;quot;crossOrigin&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;cropX&amp;quot;:0,&amp;quot;cropY&amp;quot;:0,&amp;quot;src&amp;quot;:&amp;quot;https://wikifab.org/images/f/f9/Syst_me_de_traduction_et_d_apprentissage_du_Braille_20250526_144220_1_.jpg&amp;quot;,&amp;quot;filters&amp;quot;:[]}],&amp;quot;height&amp;quot;:449.2718446601942,&amp;quot;width&amp;quot;:600}&lt;br /&gt;
|Licences=Attribution (CC BY)&lt;br /&gt;
|Description=&amp;lt;translate&amp;gt;Objet qui permet de traduire et d'apprendre le braille.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Area=Electronics, Health and Wellbeing&lt;br /&gt;
|Type=Creation&lt;br /&gt;
|Difficulty=Hard&lt;br /&gt;
|Duration=72&lt;br /&gt;
|Duration-type=hour(s)&lt;br /&gt;
|Cost=250&lt;br /&gt;
|Currency=EUR (€)&lt;br /&gt;
|Tags=aveugles, Braille, Traduction, Apprentissage&lt;br /&gt;
}}&lt;br /&gt;
{{Introduction&lt;br /&gt;
|Introduction=&amp;lt;translate&amp;gt;Présentation d'un tutoriel notre projet de classe de terminale STI2D afin de le reproduire chez soi&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Materials&lt;br /&gt;
|Step_Picture_00=Syst_me_de_traduction_et_d_apprentissage_du_Braille_Colle_bois.png&lt;br /&gt;
|Step_Picture_01=Syst_me_de_traduction_et_d_apprentissage_du_Braille_71RgeJe73GL._AC_SL1500_.jpg&lt;br /&gt;
|Step_Picture_02=Syst_me_de_traduction_et_d_apprentissage_du_Braille_Capture_d_cran_2025-05-26_151811.png&lt;br /&gt;
|Step_Picture_03=Syst_me_de_traduction_et_d_apprentissage_du_Braille_Capture_d_cran_2025-05-26_154234.jpg&lt;br /&gt;
|Step_Picture_04=Syst_me_de_traduction_et_d_apprentissage_du_Braille_61L4aoIqYOL._AC_SX679_.jpg&lt;br /&gt;
|Step_Picture_05=Syst_me_de_traduction_et_d_apprentissage_du_Braille_Capture_d_cran_2025-05-26_153426.png&lt;br /&gt;
|Material=&amp;lt;translate&amp;gt;-Bois 3mm&lt;br /&gt;
&lt;br /&gt;
-Plastique pour découpeuse laser ( ici du PLA)&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Tools=&amp;lt;translate&amp;gt;-Découpeuse laser&lt;br /&gt;
&lt;br /&gt;
-Imprimante 3D (ici la Ultimaker 2+)&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Tuto_Attachments={{Tuto Attachments&lt;br /&gt;
|Attachment=bras 1.stl&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=bras 2.stl&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=bras 3.stl&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=support servomoteur.stl&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=joint servomoteur.stl&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;Communication I2C – Raspberry Pi &amp;amp; Arduino&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;==== '''Dans le système ,la''' '''Raspberry Pi''' '''et l'Arduino''' '''communiquent ensemble via un''' '''bus I2C.''' ====&lt;br /&gt;
Le système utilise une communication I2C entre une carte Raspberry Pi et une carte Arduino afin de séparer les tâches de traitement et de contrôle matériel. La Raspberry Pi joue le rôle de maître dans ce protocole : elle centralise la logique du programme, notamment la reconnaissance de texte, le choix du mode (leçon, exercice, détection), ainsi que l’interface utilisateur. Lorsqu’une commande doit être exécutée, par exemple afficher une lettre en braille, la Raspberry Pi envoie l’information correspondante à l’Arduino via le bus I2C. L’Arduino, en tant qu’esclave I2C, reçoit cette commande et active les servomoteurs nécessaires pour positionner les points braille. Ces servomoteurs, directement connectés à l’Arduino, vont permettre de retranscrire les lettres en brailles physiquement . Grâce à cette architecture, le système reste modulaire et performant : le traitement logiciel et la détection se font sur la Raspberry Pi, tandis que l’action mécanique est gérée de manière réactive par l’Arduino.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Picture_00=Syst_me_de_traduction_et_d_apprentissage_du_Braille_nm_arduino-front.jpg&lt;br /&gt;
|Step_Picture_01=Syst_me_de_traduction_et_d_apprentissage_du_Braille_91zSu44_34L._AC_UF1000_1000_QL80_.jpg&lt;br /&gt;
|Step_Picture_02=Syst_me_de_traduction_et_d_apprentissage_du_Braille_images_1_.jpeg&lt;br /&gt;
|Step_Picture_02_annotation={&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;objects&amp;quot;:[{&amp;quot;type&amp;quot;:&amp;quot;image&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;originX&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;originY&amp;quot;:&amp;quot;top&amp;quot;,&amp;quot;left&amp;quot;:-41,&amp;quot;top&amp;quot;:7,&amp;quot;width&amp;quot;:251,&amp;quot;height&amp;quot;:200,&amp;quot;fill&amp;quot;:&amp;quot;rgb(0,0,0)&amp;quot;,&amp;quot;stroke&amp;quot;:null,&amp;quot;strokeWidth&amp;quot;:0,&amp;quot;strokeDashArray&amp;quot;:null,&amp;quot;strokeLineCap&amp;quot;:&amp;quot;butt&amp;quot;,&amp;quot;strokeDashOffset&amp;quot;:0,&amp;quot;strokeLineJoin&amp;quot;:&amp;quot;miter&amp;quot;,&amp;quot;strokeMiterLimit&amp;quot;:4,&amp;quot;scaleX&amp;quot;:2.7,&amp;quot;scaleY&amp;quot;:2.7,&amp;quot;angle&amp;quot;:0,&amp;quot;flipX&amp;quot;:false,&amp;quot;flipY&amp;quot;:false,&amp;quot;opacity&amp;quot;:1,&amp;quot;shadow&amp;quot;:null,&amp;quot;visible&amp;quot;:true,&amp;quot;clipTo&amp;quot;:null,&amp;quot;backgroundColor&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;fillRule&amp;quot;:&amp;quot;nonzero&amp;quot;,&amp;quot;paintFirst&amp;quot;:&amp;quot;fill&amp;quot;,&amp;quot;globalCompositeOperation&amp;quot;:&amp;quot;source-over&amp;quot;,&amp;quot;transformMatrix&amp;quot;:null,&amp;quot;skewX&amp;quot;:0,&amp;quot;skewY&amp;quot;:0,&amp;quot;crossOrigin&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;cropX&amp;quot;:0,&amp;quot;cropY&amp;quot;:0,&amp;quot;src&amp;quot;:&amp;quot;https://wikifab.org/images/7/7e/Syst_me_de_traduction_et_d_apprentissage_du_Braille_images_1_.jpeg&amp;quot;,&amp;quot;filters&amp;quot;:[]}],&amp;quot;height&amp;quot;:478.15384615384613,&amp;quot;width&amp;quot;:600}&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;Système de détection de texte&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;===='''Le système utilise une caméra et un capteur à ultrasons pour détecter du texte .'''====&lt;br /&gt;
La caméra est utilisée pour capturer l’image du texte . Cette image est ensuite traitée par un logiciel de reconnaissance de caractères  pour '''retranscrire le contenu en braille'''.&lt;br /&gt;
&lt;br /&gt;
Le capteur à ultrasons mesure la distance entre la feuille et la caméra. Cela permet de s'assurer que la feuille est '''positionnée à la bonne distance''', garantissant ainsi une image nette et une reconnaissance optimale du texte.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Picture_00=Syst_me_de_traduction_et_d_apprentissage_du_Braille_capteur-de-distance-ultrason-hc-sr04.jpg&lt;br /&gt;
|Step_Picture_01=Syst_me_de_traduction_et_d_apprentissage_du_Braille_raspberry-pi-camera-module-3-12mp-objectif-standard-haute-resolution-sc0872.jpg&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;Système d'interface homme-machine&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;Le système est équipé de '''5 boutons physiques''' qui permettent de contrôler les différents modes d'apprentissage et la détection du texte. &lt;br /&gt;
&lt;br /&gt;
==== 1. Bouton '''Mode Leçon''' ====&lt;br /&gt;
&lt;br /&gt;
* Ce mode affiche les lettres de l’alphabet '''dans l’ordre''', avec un '''délai prédéfini entre chaque lettre'''.&lt;br /&gt;
* Objectif : permettre à l’utilisateur de '''mémoriser progressivement''' les lettres en braille.&lt;br /&gt;
&lt;br /&gt;
==== 2.  Bouton '''Mode Exercice''' ====&lt;br /&gt;
&lt;br /&gt;
* Ce mode affiche des lettres '''de manière aléatoire'''.&lt;br /&gt;
* Objectif : tester et '''renforcer l’apprentissage''' de l’utilisateur sans se baser sur l’ordre alphabétique.&lt;br /&gt;
&lt;br /&gt;
==== 3.  Bouton '''Suivant''' ====&lt;br /&gt;
&lt;br /&gt;
* Permet d'afficher '''la lettre suivante détectée''' (si l’on est en mode détection de texte).  ==== 4.  Bouton '''Précédent''' ====&lt;br /&gt;
** Permet de revenir '''à la lettre précédente''' dans la séquence.&lt;br /&gt;
&lt;br /&gt;
==== 5. Bouton '''Activation de la caméra''' ====&lt;br /&gt;
&lt;br /&gt;
* Ce bouton '''active la caméra''' pour lancer la '''détection du texte''' sur la feuille.&lt;br /&gt;
* Il fonctionne conjointement avec le '''capteur à ultrasons''' pour vérifier la bonne distance.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Picture_00=Syst_me_de_traduction_et_d_apprentissage_du_Braille_raspberry-pi-camera-module-3-12mp-objectif-standard-haute-resolution-sc0872.jpg&lt;br /&gt;
|Step_Picture_01=Syst_me_de_traduction_et_d_apprentissage_du_Braille_images.jpeg&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Notes&lt;br /&gt;
|Notes=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{PageLang&lt;br /&gt;
|Language=fr&lt;br /&gt;
|SourceLanguage=none&lt;br /&gt;
|IsTranslation=0&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Status&lt;br /&gt;
|Complete=Published&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Fichier:Joint_servomoteur.stl&amp;diff=287449</id>
		<title>Fichier:Joint servomoteur.stl</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Fichier:Joint_servomoteur.stl&amp;diff=287449"/>
		<updated>2025-05-26T14:15:49Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : joint servomoteur&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;joint servomoteur&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Syst%C3%A8me_de_traduction_et_d%27apprentissage_du_Braille&amp;diff=287443</id>
		<title>Système de traduction et d'apprentissage du Braille</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Syst%C3%A8me_de_traduction_et_d%27apprentissage_du_Braille&amp;diff=287443"/>
		<updated>2025-05-26T14:12:40Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tuto Details&lt;br /&gt;
|Main_Picture=Syst_me_de_traduction_et_d_apprentissage_du_Braille_20250526_144220_1_.jpg&lt;br /&gt;
|Main_Picture_annotation={&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;objects&amp;quot;:[{&amp;quot;type&amp;quot;:&amp;quot;image&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;originX&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;originY&amp;quot;:&amp;quot;top&amp;quot;,&amp;quot;left&amp;quot;:601.2,&amp;quot;top&amp;quot;:-33,&amp;quot;width&amp;quot;:3468,&amp;quot;height&amp;quot;:4624,&amp;quot;fill&amp;quot;:&amp;quot;rgb(0,0,0)&amp;quot;,&amp;quot;stroke&amp;quot;:null,&amp;quot;strokeWidth&amp;quot;:0,&amp;quot;strokeDashArray&amp;quot;:null,&amp;quot;strokeLineCap&amp;quot;:&amp;quot;butt&amp;quot;,&amp;quot;strokeDashOffset&amp;quot;:0,&amp;quot;strokeLineJoin&amp;quot;:&amp;quot;miter&amp;quot;,&amp;quot;strokeMiterLimit&amp;quot;:4,&amp;quot;scaleX&amp;quot;:0.15,&amp;quot;scaleY&amp;quot;:0.15,&amp;quot;angle&amp;quot;:90,&amp;quot;flipX&amp;quot;:false,&amp;quot;flipY&amp;quot;:false,&amp;quot;opacity&amp;quot;:1,&amp;quot;shadow&amp;quot;:null,&amp;quot;visible&amp;quot;:true,&amp;quot;clipTo&amp;quot;:null,&amp;quot;backgroundColor&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;fillRule&amp;quot;:&amp;quot;nonzero&amp;quot;,&amp;quot;paintFirst&amp;quot;:&amp;quot;fill&amp;quot;,&amp;quot;globalCompositeOperation&amp;quot;:&amp;quot;source-over&amp;quot;,&amp;quot;transformMatrix&amp;quot;:null,&amp;quot;skewX&amp;quot;:0,&amp;quot;skewY&amp;quot;:0,&amp;quot;crossOrigin&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;cropX&amp;quot;:0,&amp;quot;cropY&amp;quot;:0,&amp;quot;src&amp;quot;:&amp;quot;https://wikifab.org/images/f/f9/Syst_me_de_traduction_et_d_apprentissage_du_Braille_20250526_144220_1_.jpg&amp;quot;,&amp;quot;filters&amp;quot;:[]}],&amp;quot;height&amp;quot;:449.2718446601942,&amp;quot;width&amp;quot;:600}&lt;br /&gt;
|Licences=Attribution (CC BY)&lt;br /&gt;
|Description=&amp;lt;translate&amp;gt;Objet qui permet de traduire et d'apprendre le braille.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Area=Electronics, Health and Wellbeing&lt;br /&gt;
|Type=Creation&lt;br /&gt;
|Difficulty=Hard&lt;br /&gt;
|Duration=72&lt;br /&gt;
|Duration-type=hour(s)&lt;br /&gt;
|Cost=250&lt;br /&gt;
|Currency=EUR (€)&lt;br /&gt;
|Tags=aveugles, Braille, Traduction, Apprentissage&lt;br /&gt;
}}&lt;br /&gt;
{{Introduction&lt;br /&gt;
|Introduction=&amp;lt;translate&amp;gt;Présentation d'un tutoriel notre projet de classe de terminale STI2D afin de le reproduire chez soi&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Materials&lt;br /&gt;
|Step_Picture_00=Syst_me_de_traduction_et_d_apprentissage_du_Braille_Colle_bois.png&lt;br /&gt;
|Step_Picture_01=Syst_me_de_traduction_et_d_apprentissage_du_Braille_71RgeJe73GL._AC_SL1500_.jpg&lt;br /&gt;
|Step_Picture_02=Syst_me_de_traduction_et_d_apprentissage_du_Braille_Capture_d_cran_2025-05-26_151811.png&lt;br /&gt;
|Step_Picture_03=Syst_me_de_traduction_et_d_apprentissage_du_Braille_Capture_d_cran_2025-05-26_154234.jpg&lt;br /&gt;
|Step_Picture_04=Syst_me_de_traduction_et_d_apprentissage_du_Braille_61L4aoIqYOL._AC_SX679_.jpg&lt;br /&gt;
|Step_Picture_05=Syst_me_de_traduction_et_d_apprentissage_du_Braille_Capture_d_cran_2025-05-26_153426.png&lt;br /&gt;
|Material=&amp;lt;translate&amp;gt;-Bois 3mm&lt;br /&gt;
&lt;br /&gt;
-Plastique pour découpeuse laser ( ici du PLA)&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Tools=&amp;lt;translate&amp;gt;-Découpeuse laser&lt;br /&gt;
&lt;br /&gt;
-Imprimante 3D (ici la Ultimaker 2+)&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Tuto_Attachments={{Tuto Attachments&lt;br /&gt;
|Attachment=join servomoteur.stl&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=bras 1.stl&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=bras 2.stl&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=bras 3.stl&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=support servomoteur.stl&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;Communication I2C – Raspberry Pi &amp;amp; Arduino&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;==== '''Dans le système ,la''' '''Raspberry Pi''' '''et l'Arduino''' '''communiquent ensemble via un''' '''bus I2C.''' ====&lt;br /&gt;
Le système utilise une communication I2C entre une carte Raspberry Pi et une carte Arduino afin de séparer les tâches de traitement et de contrôle matériel. La Raspberry Pi joue le rôle de maître dans ce protocole : elle centralise la logique du programme, notamment la reconnaissance de texte, le choix du mode (leçon, exercice, détection), ainsi que l’interface utilisateur. Lorsqu’une commande doit être exécutée, par exemple afficher une lettre en braille, la Raspberry Pi envoie l’information correspondante à l’Arduino via le bus I2C. L’Arduino, en tant qu’esclave I2C, reçoit cette commande et active les servomoteurs nécessaires pour positionner les points braille. Ces servomoteurs, directement connectés à l’Arduino, vont permettre de retranscrire les lettres en brailles physiquement . Grâce à cette architecture, le système reste modulaire et performant : le traitement logiciel et la détection se font sur la Raspberry Pi, tandis que l’action mécanique est gérée de manière réactive par l’Arduino.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Picture_00=Syst_me_de_traduction_et_d_apprentissage_du_Braille_nm_arduino-front.jpg&lt;br /&gt;
|Step_Picture_01=Syst_me_de_traduction_et_d_apprentissage_du_Braille_91zSu44_34L._AC_UF1000_1000_QL80_.jpg&lt;br /&gt;
|Step_Picture_02=Syst_me_de_traduction_et_d_apprentissage_du_Braille_images_1_.jpeg&lt;br /&gt;
|Step_Picture_02_annotation={&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;objects&amp;quot;:[{&amp;quot;type&amp;quot;:&amp;quot;image&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;originX&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;originY&amp;quot;:&amp;quot;top&amp;quot;,&amp;quot;left&amp;quot;:-41,&amp;quot;top&amp;quot;:7,&amp;quot;width&amp;quot;:251,&amp;quot;height&amp;quot;:200,&amp;quot;fill&amp;quot;:&amp;quot;rgb(0,0,0)&amp;quot;,&amp;quot;stroke&amp;quot;:null,&amp;quot;strokeWidth&amp;quot;:0,&amp;quot;strokeDashArray&amp;quot;:null,&amp;quot;strokeLineCap&amp;quot;:&amp;quot;butt&amp;quot;,&amp;quot;strokeDashOffset&amp;quot;:0,&amp;quot;strokeLineJoin&amp;quot;:&amp;quot;miter&amp;quot;,&amp;quot;strokeMiterLimit&amp;quot;:4,&amp;quot;scaleX&amp;quot;:2.7,&amp;quot;scaleY&amp;quot;:2.7,&amp;quot;angle&amp;quot;:0,&amp;quot;flipX&amp;quot;:false,&amp;quot;flipY&amp;quot;:false,&amp;quot;opacity&amp;quot;:1,&amp;quot;shadow&amp;quot;:null,&amp;quot;visible&amp;quot;:true,&amp;quot;clipTo&amp;quot;:null,&amp;quot;backgroundColor&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;fillRule&amp;quot;:&amp;quot;nonzero&amp;quot;,&amp;quot;paintFirst&amp;quot;:&amp;quot;fill&amp;quot;,&amp;quot;globalCompositeOperation&amp;quot;:&amp;quot;source-over&amp;quot;,&amp;quot;transformMatrix&amp;quot;:null,&amp;quot;skewX&amp;quot;:0,&amp;quot;skewY&amp;quot;:0,&amp;quot;crossOrigin&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;cropX&amp;quot;:0,&amp;quot;cropY&amp;quot;:0,&amp;quot;src&amp;quot;:&amp;quot;https://wikifab.org/images/7/7e/Syst_me_de_traduction_et_d_apprentissage_du_Braille_images_1_.jpeg&amp;quot;,&amp;quot;filters&amp;quot;:[]}],&amp;quot;height&amp;quot;:478.15384615384613,&amp;quot;width&amp;quot;:600}&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;Système de détection de texte&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;===='''Le système utilise une caméra et un capteur à ultrasons pour détecter du texte .'''====&lt;br /&gt;
La caméra est utilisée pour capturer l’image du texte . Cette image est ensuite traitée par un logiciel de reconnaissance de caractères  pour '''retranscrire le contenu en braille'''.&lt;br /&gt;
&lt;br /&gt;
Le capteur à ultrasons mesure la distance entre la feuille et la caméra. Cela permet de s'assurer que la feuille est '''positionnée à la bonne distance''', garantissant ainsi une image nette et une reconnaissance optimale du texte.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Picture_00=Syst_me_de_traduction_et_d_apprentissage_du_Braille_capteur-de-distance-ultrason-hc-sr04.jpg&lt;br /&gt;
|Step_Picture_01=Syst_me_de_traduction_et_d_apprentissage_du_Braille_raspberry-pi-camera-module-3-12mp-objectif-standard-haute-resolution-sc0872.jpg&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;Système d'interface homme-machine&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;Le système est équipé de '''5 boutons physiques''' qui permettent de contrôler les différents modes d'apprentissage et la détection du texte. &lt;br /&gt;
&lt;br /&gt;
==== 1. Bouton '''Mode Leçon''' ====&lt;br /&gt;
&lt;br /&gt;
* Ce mode affiche les lettres de l’alphabet '''dans l’ordre''', avec un '''délai prédéfini entre chaque lettre'''.&lt;br /&gt;
* Objectif : permettre à l’utilisateur de '''mémoriser progressivement''' les lettres en braille.&lt;br /&gt;
&lt;br /&gt;
==== 2.  Bouton '''Mode Exercice''' ====&lt;br /&gt;
&lt;br /&gt;
* Ce mode affiche des lettres '''de manière aléatoire'''.&lt;br /&gt;
* Objectif : tester et '''renforcer l’apprentissage''' de l’utilisateur sans se baser sur l’ordre alphabétique.&lt;br /&gt;
&lt;br /&gt;
==== 3.  Bouton '''Suivant''' ====&lt;br /&gt;
&lt;br /&gt;
* Permet d'afficher '''la lettre suivante détectée''' (si l’on est en mode détection de texte).  ==== 4.  Bouton '''Précédent''' ====&lt;br /&gt;
** Permet de revenir '''à la lettre précédente''' dans la séquence.&lt;br /&gt;
&lt;br /&gt;
==== 5. Bouton '''Activation de la caméra''' ====&lt;br /&gt;
&lt;br /&gt;
* Ce bouton '''active la caméra''' pour lancer la '''détection du texte''' sur la feuille.&lt;br /&gt;
* Il fonctionne conjointement avec le '''capteur à ultrasons''' pour vérifier la bonne distance.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Picture_00=Syst_me_de_traduction_et_d_apprentissage_du_Braille_raspberry-pi-camera-module-3-12mp-objectif-standard-haute-resolution-sc0872.jpg&lt;br /&gt;
|Step_Picture_01=Syst_me_de_traduction_et_d_apprentissage_du_Braille_images.jpeg&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Notes&lt;br /&gt;
|Notes=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{PageLang&lt;br /&gt;
|Language=fr&lt;br /&gt;
|SourceLanguage=none&lt;br /&gt;
|IsTranslation=0&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Status&lt;br /&gt;
|Complete=Published&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Fichier:Support_servomoteur.stl&amp;diff=287442</id>
		<title>Fichier:Support servomoteur.stl</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Fichier:Support_servomoteur.stl&amp;diff=287442"/>
		<updated>2025-05-26T14:12:25Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : Samuel GOACOLO a téléversé une nouvelle version de Fichier:Support servomoteur.stl&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;support_servomoteur&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Fichier:Bras_3.stl&amp;diff=287440</id>
		<title>Fichier:Bras 3.stl</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Fichier:Bras_3.stl&amp;diff=287440"/>
		<updated>2025-05-26T14:11:13Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : bras 3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;bras 3&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Fichier:Bras_2.stl&amp;diff=287439</id>
		<title>Fichier:Bras 2.stl</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Fichier:Bras_2.stl&amp;diff=287439"/>
		<updated>2025-05-26T14:11:11Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : bras 2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;bras 2&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Fichier:Bras_1.stl&amp;diff=287438</id>
		<title>Fichier:Bras 1.stl</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Fichier:Bras_1.stl&amp;diff=287438"/>
		<updated>2025-05-26T14:11:06Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : bras 1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;bras 1&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Fichier:Join_servomoteur.stl&amp;diff=287435</id>
		<title>Fichier:Join servomoteur.stl</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Fichier:Join_servomoteur.stl&amp;diff=287435"/>
		<updated>2025-05-26T14:09:37Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : join servomoteur&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;join servomoteur&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Syst%C3%A8me_de_traduction_et_d%27apprentissage_du_Braille&amp;diff=287428</id>
		<title>Système de traduction et d'apprentissage du Braille</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Syst%C3%A8me_de_traduction_et_d%27apprentissage_du_Braille&amp;diff=287428"/>
		<updated>2025-05-26T14:06:40Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tuto Details&lt;br /&gt;
|Main_Picture=Syst_me_de_traduction_et_d_apprentissage_du_Braille_20250526_144220_1_.jpg&lt;br /&gt;
|Main_Picture_annotation={&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;objects&amp;quot;:[{&amp;quot;type&amp;quot;:&amp;quot;image&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;originX&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;originY&amp;quot;:&amp;quot;top&amp;quot;,&amp;quot;left&amp;quot;:601.2,&amp;quot;top&amp;quot;:-33,&amp;quot;width&amp;quot;:3468,&amp;quot;height&amp;quot;:4624,&amp;quot;fill&amp;quot;:&amp;quot;rgb(0,0,0)&amp;quot;,&amp;quot;stroke&amp;quot;:null,&amp;quot;strokeWidth&amp;quot;:0,&amp;quot;strokeDashArray&amp;quot;:null,&amp;quot;strokeLineCap&amp;quot;:&amp;quot;butt&amp;quot;,&amp;quot;strokeDashOffset&amp;quot;:0,&amp;quot;strokeLineJoin&amp;quot;:&amp;quot;miter&amp;quot;,&amp;quot;strokeMiterLimit&amp;quot;:4,&amp;quot;scaleX&amp;quot;:0.15,&amp;quot;scaleY&amp;quot;:0.15,&amp;quot;angle&amp;quot;:90,&amp;quot;flipX&amp;quot;:false,&amp;quot;flipY&amp;quot;:false,&amp;quot;opacity&amp;quot;:1,&amp;quot;shadow&amp;quot;:null,&amp;quot;visible&amp;quot;:true,&amp;quot;clipTo&amp;quot;:null,&amp;quot;backgroundColor&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;fillRule&amp;quot;:&amp;quot;nonzero&amp;quot;,&amp;quot;paintFirst&amp;quot;:&amp;quot;fill&amp;quot;,&amp;quot;globalCompositeOperation&amp;quot;:&amp;quot;source-over&amp;quot;,&amp;quot;transformMatrix&amp;quot;:null,&amp;quot;skewX&amp;quot;:0,&amp;quot;skewY&amp;quot;:0,&amp;quot;crossOrigin&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;cropX&amp;quot;:0,&amp;quot;cropY&amp;quot;:0,&amp;quot;src&amp;quot;:&amp;quot;https://wikifab.org/images/f/f9/Syst_me_de_traduction_et_d_apprentissage_du_Braille_20250526_144220_1_.jpg&amp;quot;,&amp;quot;filters&amp;quot;:[]}],&amp;quot;height&amp;quot;:449.2718446601942,&amp;quot;width&amp;quot;:600}&lt;br /&gt;
|Licences=Attribution (CC BY)&lt;br /&gt;
|Description=&amp;lt;translate&amp;gt;Objet qui permet de traduire et d'apprendre le braille.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Area=Electronics, Health and Wellbeing&lt;br /&gt;
|Type=Creation&lt;br /&gt;
|Difficulty=Hard&lt;br /&gt;
|Duration=72&lt;br /&gt;
|Duration-type=hour(s)&lt;br /&gt;
|Cost=250&lt;br /&gt;
|Currency=EUR (€)&lt;br /&gt;
|Tags=aveugles, Braille, Traduction, Apprentissage&lt;br /&gt;
}}&lt;br /&gt;
{{Introduction&lt;br /&gt;
|Introduction=&amp;lt;translate&amp;gt;Présentation d'un tutoriel notre projet de classe de terminale STI2D afin de le reproduire chez soi&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Materials&lt;br /&gt;
|Step_Picture_00=Syst_me_de_traduction_et_d_apprentissage_du_Braille_Colle_bois.png&lt;br /&gt;
|Step_Picture_01=Syst_me_de_traduction_et_d_apprentissage_du_Braille_71RgeJe73GL._AC_SL1500_.jpg&lt;br /&gt;
|Step_Picture_02=Syst_me_de_traduction_et_d_apprentissage_du_Braille_Capture_d_cran_2025-05-26_151811.png&lt;br /&gt;
|Step_Picture_03=Syst_me_de_traduction_et_d_apprentissage_du_Braille_Capture_d_cran_2025-05-26_154234.jpg&lt;br /&gt;
|Step_Picture_04=Syst_me_de_traduction_et_d_apprentissage_du_Braille_61L4aoIqYOL._AC_SX679_.jpg&lt;br /&gt;
|Step_Picture_05=Syst_me_de_traduction_et_d_apprentissage_du_Braille_Capture_d_cran_2025-05-26_153426.png&lt;br /&gt;
|Material=&amp;lt;translate&amp;gt;-Bois 3mm&lt;br /&gt;
&lt;br /&gt;
-Plastique pour découpeuse laser ( ici du PLA)&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Tools=&amp;lt;translate&amp;gt;-Découpeuse laser&lt;br /&gt;
&lt;br /&gt;
-Imprimante 3D (ici la Ultimaker 2+)&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Tuto_Attachments={{Tuto Attachments&lt;br /&gt;
|Attachment=porte_servomoteur_V1.0.stl&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=support_servomoteur.stl&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=lettre braille 1.1.stl&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=lettre braille 2.1.stl&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=lettre braille 3.1.stl&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;Communication I2C – Raspberry Pi &amp;amp; Arduino&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;==== '''Dans le système ,la''' '''Raspberry Pi''' '''et l'Arduino''' '''communiquent ensemble via un''' '''bus I2C.''' ====&lt;br /&gt;
Le système utilise une communication I2C entre une carte Raspberry Pi et une carte Arduino afin de séparer les tâches de traitement et de contrôle matériel. La Raspberry Pi joue le rôle de maître dans ce protocole : elle centralise la logique du programme, notamment la reconnaissance de texte, le choix du mode (leçon, exercice, détection), ainsi que l’interface utilisateur. Lorsqu’une commande doit être exécutée, par exemple afficher une lettre en braille, la Raspberry Pi envoie l’information correspondante à l’Arduino via le bus I2C. L’Arduino, en tant qu’esclave I2C, reçoit cette commande et active les servomoteurs nécessaires pour positionner les points braille. Ces servomoteurs, directement connectés à l’Arduino, vont permettre de retranscrire les lettres en brailles physiquement . Grâce à cette architecture, le système reste modulaire et performant : le traitement logiciel et la détection se font sur la Raspberry Pi, tandis que l’action mécanique est gérée de manière réactive par l’Arduino.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Picture_00=Syst_me_de_traduction_et_d_apprentissage_du_Braille_nm_arduino-front.jpg&lt;br /&gt;
|Step_Picture_01=Syst_me_de_traduction_et_d_apprentissage_du_Braille_91zSu44_34L._AC_UF1000_1000_QL80_.jpg&lt;br /&gt;
|Step_Picture_02=Syst_me_de_traduction_et_d_apprentissage_du_Braille_images_1_.jpeg&lt;br /&gt;
|Step_Picture_02_annotation={&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;objects&amp;quot;:[{&amp;quot;type&amp;quot;:&amp;quot;image&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;originX&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;originY&amp;quot;:&amp;quot;top&amp;quot;,&amp;quot;left&amp;quot;:-41,&amp;quot;top&amp;quot;:7,&amp;quot;width&amp;quot;:251,&amp;quot;height&amp;quot;:200,&amp;quot;fill&amp;quot;:&amp;quot;rgb(0,0,0)&amp;quot;,&amp;quot;stroke&amp;quot;:null,&amp;quot;strokeWidth&amp;quot;:0,&amp;quot;strokeDashArray&amp;quot;:null,&amp;quot;strokeLineCap&amp;quot;:&amp;quot;butt&amp;quot;,&amp;quot;strokeDashOffset&amp;quot;:0,&amp;quot;strokeLineJoin&amp;quot;:&amp;quot;miter&amp;quot;,&amp;quot;strokeMiterLimit&amp;quot;:4,&amp;quot;scaleX&amp;quot;:2.7,&amp;quot;scaleY&amp;quot;:2.7,&amp;quot;angle&amp;quot;:0,&amp;quot;flipX&amp;quot;:false,&amp;quot;flipY&amp;quot;:false,&amp;quot;opacity&amp;quot;:1,&amp;quot;shadow&amp;quot;:null,&amp;quot;visible&amp;quot;:true,&amp;quot;clipTo&amp;quot;:null,&amp;quot;backgroundColor&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;fillRule&amp;quot;:&amp;quot;nonzero&amp;quot;,&amp;quot;paintFirst&amp;quot;:&amp;quot;fill&amp;quot;,&amp;quot;globalCompositeOperation&amp;quot;:&amp;quot;source-over&amp;quot;,&amp;quot;transformMatrix&amp;quot;:null,&amp;quot;skewX&amp;quot;:0,&amp;quot;skewY&amp;quot;:0,&amp;quot;crossOrigin&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;cropX&amp;quot;:0,&amp;quot;cropY&amp;quot;:0,&amp;quot;src&amp;quot;:&amp;quot;https://wikifab.org/images/7/7e/Syst_me_de_traduction_et_d_apprentissage_du_Braille_images_1_.jpeg&amp;quot;,&amp;quot;filters&amp;quot;:[]}],&amp;quot;height&amp;quot;:478.15384615384613,&amp;quot;width&amp;quot;:600}&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;Système de détection de texte&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;===='''Le système utilise une caméra et un capteur à ultrasons pour détecter du texte .'''====&lt;br /&gt;
La caméra est utilisée pour capturer l’image du texte . Cette image est ensuite traitée par un logiciel de reconnaissance de caractères  pour '''retranscrire le contenu en braille'''.&lt;br /&gt;
&lt;br /&gt;
Le capteur à ultrasons mesure la distance entre la feuille et la caméra. Cela permet de s'assurer que la feuille est '''positionnée à la bonne distance''', garantissant ainsi une image nette et une reconnaissance optimale du texte.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Picture_00=Syst_me_de_traduction_et_d_apprentissage_du_Braille_capteur-de-distance-ultrason-hc-sr04.jpg&lt;br /&gt;
|Step_Picture_01=Syst_me_de_traduction_et_d_apprentissage_du_Braille_raspberry-pi-camera-module-3-12mp-objectif-standard-haute-resolution-sc0872.jpg&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;Système d'interface homme-machine&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;Le système est équipé de '''5 boutons physiques''' qui permettent de contrôler les différents modes d'apprentissage et la détection du texte. &lt;br /&gt;
&lt;br /&gt;
==== 1. Bouton '''Mode Leçon''' ====&lt;br /&gt;
&lt;br /&gt;
* Ce mode affiche les lettres de l’alphabet '''dans l’ordre''', avec un '''délai prédéfini entre chaque lettre'''.&lt;br /&gt;
* Objectif : permettre à l’utilisateur de '''mémoriser progressivement''' les lettres en braille.&lt;br /&gt;
&lt;br /&gt;
==== 2.  Bouton '''Mode Exercice''' ====&lt;br /&gt;
&lt;br /&gt;
* Ce mode affiche des lettres '''de manière aléatoire'''.&lt;br /&gt;
* Objectif : tester et '''renforcer l’apprentissage''' de l’utilisateur sans se baser sur l’ordre alphabétique.&lt;br /&gt;
&lt;br /&gt;
==== 3.  Bouton '''Suivant''' ====&lt;br /&gt;
&lt;br /&gt;
* Permet d'afficher '''la lettre suivante détectée''' (si l’on est en mode détection de texte).  ==== 4.  Bouton '''Précédent''' ====&lt;br /&gt;
** Permet de revenir '''à la lettre précédente''' dans la séquence.&lt;br /&gt;
&lt;br /&gt;
==== 5. Bouton '''Activation de la caméra''' ====&lt;br /&gt;
&lt;br /&gt;
* Ce bouton '''active la caméra''' pour lancer la '''détection du texte''' sur la feuille.&lt;br /&gt;
* Il fonctionne conjointement avec le '''capteur à ultrasons''' pour vérifier la bonne distance.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Picture_00=Syst_me_de_traduction_et_d_apprentissage_du_Braille_raspberry-pi-camera-module-3-12mp-objectif-standard-haute-resolution-sc0872.jpg&lt;br /&gt;
|Step_Picture_01=Syst_me_de_traduction_et_d_apprentissage_du_Braille_images.jpeg&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Notes&lt;br /&gt;
|Notes=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{PageLang&lt;br /&gt;
|Language=fr&lt;br /&gt;
|SourceLanguage=none&lt;br /&gt;
|IsTranslation=0&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Status&lt;br /&gt;
|Complete=Published&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Syst%C3%A8me_de_traduction_et_d%27apprentissage_du_Braille&amp;diff=287422</id>
		<title>Système de traduction et d'apprentissage du Braille</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Syst%C3%A8me_de_traduction_et_d%27apprentissage_du_Braille&amp;diff=287422"/>
		<updated>2025-05-26T14:04:49Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tuto Details&lt;br /&gt;
|Main_Picture=Syst_me_de_traduction_et_d_apprentissage_du_Braille_20250526_144220_1_.jpg&lt;br /&gt;
|Main_Picture_annotation={&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;objects&amp;quot;:[{&amp;quot;type&amp;quot;:&amp;quot;image&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;originX&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;originY&amp;quot;:&amp;quot;top&amp;quot;,&amp;quot;left&amp;quot;:601.2,&amp;quot;top&amp;quot;:-33,&amp;quot;width&amp;quot;:3468,&amp;quot;height&amp;quot;:4624,&amp;quot;fill&amp;quot;:&amp;quot;rgb(0,0,0)&amp;quot;,&amp;quot;stroke&amp;quot;:null,&amp;quot;strokeWidth&amp;quot;:0,&amp;quot;strokeDashArray&amp;quot;:null,&amp;quot;strokeLineCap&amp;quot;:&amp;quot;butt&amp;quot;,&amp;quot;strokeDashOffset&amp;quot;:0,&amp;quot;strokeLineJoin&amp;quot;:&amp;quot;miter&amp;quot;,&amp;quot;strokeMiterLimit&amp;quot;:4,&amp;quot;scaleX&amp;quot;:0.15,&amp;quot;scaleY&amp;quot;:0.15,&amp;quot;angle&amp;quot;:90,&amp;quot;flipX&amp;quot;:false,&amp;quot;flipY&amp;quot;:false,&amp;quot;opacity&amp;quot;:1,&amp;quot;shadow&amp;quot;:null,&amp;quot;visible&amp;quot;:true,&amp;quot;clipTo&amp;quot;:null,&amp;quot;backgroundColor&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;fillRule&amp;quot;:&amp;quot;nonzero&amp;quot;,&amp;quot;paintFirst&amp;quot;:&amp;quot;fill&amp;quot;,&amp;quot;globalCompositeOperation&amp;quot;:&amp;quot;source-over&amp;quot;,&amp;quot;transformMatrix&amp;quot;:null,&amp;quot;skewX&amp;quot;:0,&amp;quot;skewY&amp;quot;:0,&amp;quot;crossOrigin&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;cropX&amp;quot;:0,&amp;quot;cropY&amp;quot;:0,&amp;quot;src&amp;quot;:&amp;quot;https://wikifab.org/images/f/f9/Syst_me_de_traduction_et_d_apprentissage_du_Braille_20250526_144220_1_.jpg&amp;quot;,&amp;quot;filters&amp;quot;:[]}],&amp;quot;height&amp;quot;:449.2718446601942,&amp;quot;width&amp;quot;:600}&lt;br /&gt;
|Licences=Attribution (CC BY)&lt;br /&gt;
|Description=&amp;lt;translate&amp;gt;Objet qui permet de traduire et d'apprendre le braille.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Area=Electronics, Health and Wellbeing&lt;br /&gt;
|Type=Creation&lt;br /&gt;
|Difficulty=Hard&lt;br /&gt;
|Duration=72&lt;br /&gt;
|Duration-type=hour(s)&lt;br /&gt;
|Cost=250&lt;br /&gt;
|Currency=EUR (€)&lt;br /&gt;
|Tags=aveugles, Braille, Traduction, Apprentissage&lt;br /&gt;
}}&lt;br /&gt;
{{Introduction&lt;br /&gt;
|Introduction=&amp;lt;translate&amp;gt;Présentation d'un tutoriel notre projet de classe de terminale STI2D afin de le reproduire chez soi&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Materials&lt;br /&gt;
|Step_Picture_00=Syst_me_de_traduction_et_d_apprentissage_du_Braille_Colle_bois.png&lt;br /&gt;
|Step_Picture_01=Syst_me_de_traduction_et_d_apprentissage_du_Braille_71RgeJe73GL._AC_SL1500_.jpg&lt;br /&gt;
|Step_Picture_02=Syst_me_de_traduction_et_d_apprentissage_du_Braille_Capture_d_cran_2025-05-26_151811.png&lt;br /&gt;
|Step_Picture_03=Syst_me_de_traduction_et_d_apprentissage_du_Braille_Capture_d_cran_2025-05-26_154234.jpg&lt;br /&gt;
|Step_Picture_04=Syst_me_de_traduction_et_d_apprentissage_du_Braille_61L4aoIqYOL._AC_SX679_.jpg&lt;br /&gt;
|Step_Picture_05=Syst_me_de_traduction_et_d_apprentissage_du_Braille_Capture_d_cran_2025-05-26_153426.png&lt;br /&gt;
|Material=&amp;lt;translate&amp;gt;-Bois 3mm&lt;br /&gt;
&lt;br /&gt;
-Plastique pour découpeuse laser ( ici du PLA)&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Tools=&amp;lt;translate&amp;gt;-Découpeuse laser&lt;br /&gt;
&lt;br /&gt;
-Imprimante 3D (ici la Ultimaker 2+)&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Tuto_Attachments={{Tuto Attachments&lt;br /&gt;
|Attachment=porte_servomoteur_V1.0.stl&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=support_servomoteur.stl&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=lettre braille 1.1.stl&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=lettre braille 2.1.stl&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=lettre braille 3.1.stl&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=lettre braille 3.1.stl&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;Communication I2C – Raspberry Pi &amp;amp; Arduino&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;==== '''Dans le système ,la''' '''Raspberry Pi''' '''et l'Arduino''' '''communiquent ensemble via un''' '''bus I2C.''' ====&lt;br /&gt;
Le système utilise une communication I2C entre une carte Raspberry Pi et une carte Arduino afin de séparer les tâches de traitement et de contrôle matériel. La Raspberry Pi joue le rôle de maître dans ce protocole : elle centralise la logique du programme, notamment la reconnaissance de texte, le choix du mode (leçon, exercice, détection), ainsi que l’interface utilisateur. Lorsqu’une commande doit être exécutée, par exemple afficher une lettre en braille, la Raspberry Pi envoie l’information correspondante à l’Arduino via le bus I2C. L’Arduino, en tant qu’esclave I2C, reçoit cette commande et active les servomoteurs nécessaires pour positionner les points braille. Ces servomoteurs, directement connectés à l’Arduino, vont permettre de retranscrire les lettres en brailles physiquement . Grâce à cette architecture, le système reste modulaire et performant : le traitement logiciel et la détection se font sur la Raspberry Pi, tandis que l’action mécanique est gérée de manière réactive par l’Arduino.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Picture_00=Syst_me_de_traduction_et_d_apprentissage_du_Braille_nm_arduino-front.jpg&lt;br /&gt;
|Step_Picture_01=Syst_me_de_traduction_et_d_apprentissage_du_Braille_91zSu44_34L._AC_UF1000_1000_QL80_.jpg&lt;br /&gt;
|Step_Picture_02=Syst_me_de_traduction_et_d_apprentissage_du_Braille_images_1_.jpeg&lt;br /&gt;
|Step_Picture_02_annotation={&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;objects&amp;quot;:[{&amp;quot;type&amp;quot;:&amp;quot;image&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;originX&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;originY&amp;quot;:&amp;quot;top&amp;quot;,&amp;quot;left&amp;quot;:-41,&amp;quot;top&amp;quot;:7,&amp;quot;width&amp;quot;:251,&amp;quot;height&amp;quot;:200,&amp;quot;fill&amp;quot;:&amp;quot;rgb(0,0,0)&amp;quot;,&amp;quot;stroke&amp;quot;:null,&amp;quot;strokeWidth&amp;quot;:0,&amp;quot;strokeDashArray&amp;quot;:null,&amp;quot;strokeLineCap&amp;quot;:&amp;quot;butt&amp;quot;,&amp;quot;strokeDashOffset&amp;quot;:0,&amp;quot;strokeLineJoin&amp;quot;:&amp;quot;miter&amp;quot;,&amp;quot;strokeMiterLimit&amp;quot;:4,&amp;quot;scaleX&amp;quot;:2.7,&amp;quot;scaleY&amp;quot;:2.7,&amp;quot;angle&amp;quot;:0,&amp;quot;flipX&amp;quot;:false,&amp;quot;flipY&amp;quot;:false,&amp;quot;opacity&amp;quot;:1,&amp;quot;shadow&amp;quot;:null,&amp;quot;visible&amp;quot;:true,&amp;quot;clipTo&amp;quot;:null,&amp;quot;backgroundColor&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;fillRule&amp;quot;:&amp;quot;nonzero&amp;quot;,&amp;quot;paintFirst&amp;quot;:&amp;quot;fill&amp;quot;,&amp;quot;globalCompositeOperation&amp;quot;:&amp;quot;source-over&amp;quot;,&amp;quot;transformMatrix&amp;quot;:null,&amp;quot;skewX&amp;quot;:0,&amp;quot;skewY&amp;quot;:0,&amp;quot;crossOrigin&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;cropX&amp;quot;:0,&amp;quot;cropY&amp;quot;:0,&amp;quot;src&amp;quot;:&amp;quot;https://wikifab.org/images/7/7e/Syst_me_de_traduction_et_d_apprentissage_du_Braille_images_1_.jpeg&amp;quot;,&amp;quot;filters&amp;quot;:[]}],&amp;quot;height&amp;quot;:478.15384615384613,&amp;quot;width&amp;quot;:600}&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;Système de détection de texte&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;===='''Le système utilise une caméra et un capteur à ultrasons pour détecter du texte .'''====&lt;br /&gt;
La caméra est utilisée pour capturer l’image du texte . Cette image est ensuite traitée par un logiciel de reconnaissance de caractères  pour '''retranscrire le contenu en braille'''.&lt;br /&gt;
&lt;br /&gt;
Le capteur à ultrasons mesure la distance entre la feuille et la caméra. Cela permet de s'assurer que la feuille est '''positionnée à la bonne distance''', garantissant ainsi une image nette et une reconnaissance optimale du texte.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Picture_00=Syst_me_de_traduction_et_d_apprentissage_du_Braille_capteur-de-distance-ultrason-hc-sr04.jpg&lt;br /&gt;
|Step_Picture_01=Syst_me_de_traduction_et_d_apprentissage_du_Braille_raspberry-pi-camera-module-3-12mp-objectif-standard-haute-resolution-sc0872.jpg&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;Système d'interface homme-machine&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;Le système est équipé de '''5 boutons physiques''' qui permettent de contrôler les différents modes d'apprentissage et la détection du texte. &lt;br /&gt;
&lt;br /&gt;
==== 1. Bouton '''Mode Leçon''' ====&lt;br /&gt;
&lt;br /&gt;
* Ce mode affiche les lettres de l’alphabet '''dans l’ordre''', avec un '''délai prédéfini entre chaque lettre'''.&lt;br /&gt;
* Objectif : permettre à l’utilisateur de '''mémoriser progressivement''' les lettres en braille.&lt;br /&gt;
&lt;br /&gt;
==== 2.  Bouton '''Mode Exercice''' ====&lt;br /&gt;
&lt;br /&gt;
* Ce mode affiche des lettres '''de manière aléatoire'''.&lt;br /&gt;
* Objectif : tester et '''renforcer l’apprentissage''' de l’utilisateur sans se baser sur l’ordre alphabétique.&lt;br /&gt;
&lt;br /&gt;
==== 3.  Bouton '''Suivant''' ====&lt;br /&gt;
&lt;br /&gt;
* Permet d'afficher '''la lettre suivante détectée''' (si l’on est en mode détection de texte).  ==== 4.  Bouton '''Précédent''' ====&lt;br /&gt;
** Permet de revenir '''à la lettre précédente''' dans la séquence.&lt;br /&gt;
&lt;br /&gt;
==== 5. Bouton '''Activation de la caméra''' ====&lt;br /&gt;
&lt;br /&gt;
* Ce bouton '''active la caméra''' pour lancer la '''détection du texte''' sur la feuille.&lt;br /&gt;
* Il fonctionne conjointement avec le '''capteur à ultrasons''' pour vérifier la bonne distance.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Picture_00=Syst_me_de_traduction_et_d_apprentissage_du_Braille_raspberry-pi-camera-module-3-12mp-objectif-standard-haute-resolution-sc0872.jpg&lt;br /&gt;
|Step_Picture_01=Syst_me_de_traduction_et_d_apprentissage_du_Braille_images.jpeg&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Notes&lt;br /&gt;
|Notes=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{PageLang&lt;br /&gt;
|Language=fr&lt;br /&gt;
|SourceLanguage=none&lt;br /&gt;
|IsTranslation=0&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Status&lt;br /&gt;
|Complete=Published&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Fichier:Lettre_braille_3.1.stl&amp;diff=287419</id>
		<title>Fichier:Lettre braille 3.1.stl</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Fichier:Lettre_braille_3.1.stl&amp;diff=287419"/>
		<updated>2025-05-26T14:04:31Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : lettre braille 3.1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;lettre braille 3.1&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Fichier:Lettre_braille_2.1.stl&amp;diff=287418</id>
		<title>Fichier:Lettre braille 2.1.stl</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Fichier:Lettre_braille_2.1.stl&amp;diff=287418"/>
		<updated>2025-05-26T14:03:55Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : lettre braille 2.1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;lettre braille 2.1&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Fichier:Lettre_braille_1.1.stl&amp;diff=287404</id>
		<title>Fichier:Lettre braille 1.1.stl</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Fichier:Lettre_braille_1.1.stl&amp;diff=287404"/>
		<updated>2025-05-26T13:55:22Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : lettre braille 1.1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;lettre braille 1.1&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Fichier:Support_servomoteur.stl&amp;diff=287402</id>
		<title>Fichier:Support servomoteur.stl</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Fichier:Support_servomoteur.stl&amp;diff=287402"/>
		<updated>2025-05-26T13:54:16Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : support_servomoteur&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;support_servomoteur&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Fichier:Porte_servomoteur_V1.0.stl&amp;diff=287401</id>
		<title>Fichier:Porte servomoteur V1.0.stl</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Fichier:Porte_servomoteur_V1.0.stl&amp;diff=287401"/>
		<updated>2025-05-26T13:54:14Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : porte_servomoteur_V1.0&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;porte_servomoteur_V1.0&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Syst%C3%A8me_de_traduction_et_d%27apprentissage_du_Braille&amp;diff=287397</id>
		<title>Système de traduction et d'apprentissage du Braille</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Syst%C3%A8me_de_traduction_et_d%27apprentissage_du_Braille&amp;diff=287397"/>
		<updated>2025-05-26T13:51:11Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tuto Details&lt;br /&gt;
|Main_Picture=Syst_me_de_traduction_et_d_apprentissage_du_Braille_20250526_144220_1_.jpg&lt;br /&gt;
|Main_Picture_annotation={&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;objects&amp;quot;:[{&amp;quot;type&amp;quot;:&amp;quot;image&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;originX&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;originY&amp;quot;:&amp;quot;top&amp;quot;,&amp;quot;left&amp;quot;:601.2,&amp;quot;top&amp;quot;:-33,&amp;quot;width&amp;quot;:3468,&amp;quot;height&amp;quot;:4624,&amp;quot;fill&amp;quot;:&amp;quot;rgb(0,0,0)&amp;quot;,&amp;quot;stroke&amp;quot;:null,&amp;quot;strokeWidth&amp;quot;:0,&amp;quot;strokeDashArray&amp;quot;:null,&amp;quot;strokeLineCap&amp;quot;:&amp;quot;butt&amp;quot;,&amp;quot;strokeDashOffset&amp;quot;:0,&amp;quot;strokeLineJoin&amp;quot;:&amp;quot;miter&amp;quot;,&amp;quot;strokeMiterLimit&amp;quot;:4,&amp;quot;scaleX&amp;quot;:0.15,&amp;quot;scaleY&amp;quot;:0.15,&amp;quot;angle&amp;quot;:90,&amp;quot;flipX&amp;quot;:false,&amp;quot;flipY&amp;quot;:false,&amp;quot;opacity&amp;quot;:1,&amp;quot;shadow&amp;quot;:null,&amp;quot;visible&amp;quot;:true,&amp;quot;clipTo&amp;quot;:null,&amp;quot;backgroundColor&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;fillRule&amp;quot;:&amp;quot;nonzero&amp;quot;,&amp;quot;paintFirst&amp;quot;:&amp;quot;fill&amp;quot;,&amp;quot;globalCompositeOperation&amp;quot;:&amp;quot;source-over&amp;quot;,&amp;quot;transformMatrix&amp;quot;:null,&amp;quot;skewX&amp;quot;:0,&amp;quot;skewY&amp;quot;:0,&amp;quot;crossOrigin&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;cropX&amp;quot;:0,&amp;quot;cropY&amp;quot;:0,&amp;quot;src&amp;quot;:&amp;quot;https://wikifab.org/images/f/f9/Syst_me_de_traduction_et_d_apprentissage_du_Braille_20250526_144220_1_.jpg&amp;quot;,&amp;quot;filters&amp;quot;:[]}],&amp;quot;height&amp;quot;:449.2718446601942,&amp;quot;width&amp;quot;:600}&lt;br /&gt;
|Licences=Attribution (CC BY)&lt;br /&gt;
|Description=&amp;lt;translate&amp;gt;Objet qui permet de traduire et d'apprendre le braille.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Area=Electronics, Health and Wellbeing&lt;br /&gt;
|Type=Creation&lt;br /&gt;
|Difficulty=Hard&lt;br /&gt;
|Duration=72&lt;br /&gt;
|Duration-type=hour(s)&lt;br /&gt;
|Cost=250&lt;br /&gt;
|Currency=EUR (€)&lt;br /&gt;
|Tags=aveugles, Braille, Traduction, Apprentissage&lt;br /&gt;
}}&lt;br /&gt;
{{Introduction&lt;br /&gt;
|Introduction=&amp;lt;translate&amp;gt;Présentation d'un tutoriel notre projet de classe de terminale STI2D afin de le reproduire chez soi&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Materials&lt;br /&gt;
|Step_Picture_00=Syst_me_de_traduction_et_d_apprentissage_du_Braille_Colle_bois.png&lt;br /&gt;
|Step_Picture_01=Syst_me_de_traduction_et_d_apprentissage_du_Braille_71RgeJe73GL._AC_SL1500_.jpg&lt;br /&gt;
|Step_Picture_02=Syst_me_de_traduction_et_d_apprentissage_du_Braille_Capture_d_cran_2025-05-26_151811.png&lt;br /&gt;
|Step_Picture_03=Syst_me_de_traduction_et_d_apprentissage_du_Braille_Capture_d_cran_2025-05-26_154234.jpg&lt;br /&gt;
|Step_Picture_04=Syst_me_de_traduction_et_d_apprentissage_du_Braille_61L4aoIqYOL._AC_SX679_.jpg&lt;br /&gt;
|Step_Picture_05=Syst_me_de_traduction_et_d_apprentissage_du_Braille_Capture_d_cran_2025-05-26_153426.png&lt;br /&gt;
|Material=&amp;lt;translate&amp;gt;-Bois 3mm&lt;br /&gt;
&lt;br /&gt;
-Plastique pour découpeuse laser ( ici du PLA)&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Tools=&amp;lt;translate&amp;gt;-Découpeuse laser&lt;br /&gt;
&lt;br /&gt;
-Imprimante 3D (ici la Ultimaker 2+)&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;Système de détection de texte&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;==== '''Le système utilise une caméra et un capteur à ultrasons pour détecter du texte .''' ====&lt;br /&gt;
La caméra est utilisée pour capturer l’image du texte . Cette image est ensuite traitée par un logiciel de reconnaissance de caractères  pour '''retranscrire le contenu en braille'''.&lt;br /&gt;
&lt;br /&gt;
Le capteur à ultrason s mesure la distance entre la feuille et la caméra. Cela permet de s'assurer que la feuille est '''positionnée à la bonne distance''', garantissant ainsi une image nette et une reconnaissance optimale du texte.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Picture_00=Syst_me_de_traduction_et_d_apprentissage_du_Braille_capteur-de-distance-ultrason-hc-sr04.jpg&lt;br /&gt;
|Step_Picture_01=Syst_me_de_traduction_et_d_apprentissage_du_Braille_raspberry-pi-camera-module-3-12mp-objectif-standard-haute-resolution-sc0872.jpg&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;Système d'interface homme-machine&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;Le système est équipé de '''5 boutons physiques''' qui permettent de contrôler les différents modes d'apprentissage et la détection du texte. &lt;br /&gt;
&lt;br /&gt;
==== 1. Bouton '''Mode Leçon''' ====&lt;br /&gt;
&lt;br /&gt;
* Ce mode affiche les lettres de l’alphabet '''dans l’ordre''', avec un '''délai prédéfini entre chaque lettre'''.&lt;br /&gt;
* Objectif : permettre à l’utilisateur de '''mémoriser progressivement''' les lettres en braille.&lt;br /&gt;
&lt;br /&gt;
==== 2.  Bouton '''Mode Exercice''' ====&lt;br /&gt;
&lt;br /&gt;
* Ce mode affiche des lettres '''de manière aléatoire'''.&lt;br /&gt;
* Objectif : tester et '''renforcer l’apprentissage''' de l’utilisateur sans se baser sur l’ordre alphabétique.&lt;br /&gt;
&lt;br /&gt;
==== 3.  Bouton '''Suivant''' ====&lt;br /&gt;
&lt;br /&gt;
* Permet d'afficher '''la lettre suivante détectée''' (si l’on est en mode détection de texte).  ==== 4.  Bouton '''Précédent''' ====&lt;br /&gt;
** Permet de revenir '''à la lettre précédente''' dans la séquence.&lt;br /&gt;
&lt;br /&gt;
==== 5. Bouton '''Activation de la caméra''' ====&lt;br /&gt;
&lt;br /&gt;
* Ce bouton '''active la caméra''' pour lancer la '''détection du texte''' sur la feuille.&lt;br /&gt;
* Il fonctionne conjointement avec le '''capteur à ultrasons''' pour vérifier la bonne distance.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Picture_00=Syst_me_de_traduction_et_d_apprentissage_du_Braille_raspberry-pi-camera-module-3-12mp-objectif-standard-haute-resolution-sc0872.jpg&lt;br /&gt;
|Step_Picture_01=Syst_me_de_traduction_et_d_apprentissage_du_Braille_images.jpeg&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;Communication I2C – Raspberry Pi &amp;amp; Arduino&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;==== '''Dans le système ,la''' '''Raspberry Pi''' '''et l'Arduino''' '''communiquent ensemble via un''' '''bus I2C.''' ====&lt;br /&gt;
Le système utilise une communication I2C entre une carte Raspberry Pi et une carte Arduino afin de séparer les tâches de traitement et de contrôle matériel. La Raspberry Pi joue le rôle de maître dans ce protocole : elle centralise la logique du programme, notamment la reconnaissance de texte, le choix du mode (leçon, exercice, détection), ainsi que l’interface utilisateur. Lorsqu’une commande doit être exécutée, par exemple afficher une lettre en braille, la Raspberry Pi envoie l’information correspondante à l’Arduino via le bus I2C. L’Arduino, en tant qu’esclave I2C, reçoit cette commande et active les servomoteurs nécessaires pour positionner les points braille. Ces servomoteurs, directement connectés à l’Arduino, vont permettre de retranscrire les lettres en brailles physiquement . Grâce à cette architecture, le système reste modulaire et performant : le traitement logiciel et la détection se font sur la Raspberry Pi, tandis que l’action mécanique est gérée de manière réactive par l’Arduino.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Picture_00=Syst_me_de_traduction_et_d_apprentissage_du_Braille_nm_arduino-front.jpg&lt;br /&gt;
|Step_Picture_01=Syst_me_de_traduction_et_d_apprentissage_du_Braille_91zSu44_34L._AC_UF1000_1000_QL80_.jpg&lt;br /&gt;
|Step_Picture_02=Syst_me_de_traduction_et_d_apprentissage_du_Braille_images_1_.jpeg&lt;br /&gt;
|Step_Picture_02_annotation={&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;objects&amp;quot;:[{&amp;quot;type&amp;quot;:&amp;quot;image&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;originX&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;originY&amp;quot;:&amp;quot;top&amp;quot;,&amp;quot;left&amp;quot;:-41,&amp;quot;top&amp;quot;:7,&amp;quot;width&amp;quot;:251,&amp;quot;height&amp;quot;:200,&amp;quot;fill&amp;quot;:&amp;quot;rgb(0,0,0)&amp;quot;,&amp;quot;stroke&amp;quot;:null,&amp;quot;strokeWidth&amp;quot;:0,&amp;quot;strokeDashArray&amp;quot;:null,&amp;quot;strokeLineCap&amp;quot;:&amp;quot;butt&amp;quot;,&amp;quot;strokeDashOffset&amp;quot;:0,&amp;quot;strokeLineJoin&amp;quot;:&amp;quot;miter&amp;quot;,&amp;quot;strokeMiterLimit&amp;quot;:4,&amp;quot;scaleX&amp;quot;:2.7,&amp;quot;scaleY&amp;quot;:2.7,&amp;quot;angle&amp;quot;:0,&amp;quot;flipX&amp;quot;:false,&amp;quot;flipY&amp;quot;:false,&amp;quot;opacity&amp;quot;:1,&amp;quot;shadow&amp;quot;:null,&amp;quot;visible&amp;quot;:true,&amp;quot;clipTo&amp;quot;:null,&amp;quot;backgroundColor&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;fillRule&amp;quot;:&amp;quot;nonzero&amp;quot;,&amp;quot;paintFirst&amp;quot;:&amp;quot;fill&amp;quot;,&amp;quot;globalCompositeOperation&amp;quot;:&amp;quot;source-over&amp;quot;,&amp;quot;transformMatrix&amp;quot;:null,&amp;quot;skewX&amp;quot;:0,&amp;quot;skewY&amp;quot;:0,&amp;quot;crossOrigin&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;cropX&amp;quot;:0,&amp;quot;cropY&amp;quot;:0,&amp;quot;src&amp;quot;:&amp;quot;https://wikifab.org/images/7/7e/Syst_me_de_traduction_et_d_apprentissage_du_Braille_images_1_.jpeg&amp;quot;,&amp;quot;filters&amp;quot;:[]}],&amp;quot;height&amp;quot;:478.15384615384613,&amp;quot;width&amp;quot;:600}&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Notes&lt;br /&gt;
|Notes=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{PageLang&lt;br /&gt;
|SourceLanguage=none&lt;br /&gt;
|IsTranslation=0&lt;br /&gt;
|Language=fr&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Status&lt;br /&gt;
|Complete=Published&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Syst%C3%A8me_de_traduction_et_d%27apprentissage_du_Braille&amp;diff=287391</id>
		<title>Système de traduction et d'apprentissage du Braille</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Syst%C3%A8me_de_traduction_et_d%27apprentissage_du_Braille&amp;diff=287391"/>
		<updated>2025-05-26T13:44:12Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tuto Details&lt;br /&gt;
|Main_Picture=Syst_me_de_traduction_et_d_apprentissage_du_Braille_20250526_144220_1_.jpg&lt;br /&gt;
|Main_Picture_annotation={&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;objects&amp;quot;:[{&amp;quot;type&amp;quot;:&amp;quot;image&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;originX&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;originY&amp;quot;:&amp;quot;top&amp;quot;,&amp;quot;left&amp;quot;:601.2,&amp;quot;top&amp;quot;:-33,&amp;quot;width&amp;quot;:3468,&amp;quot;height&amp;quot;:4624,&amp;quot;fill&amp;quot;:&amp;quot;rgb(0,0,0)&amp;quot;,&amp;quot;stroke&amp;quot;:null,&amp;quot;strokeWidth&amp;quot;:0,&amp;quot;strokeDashArray&amp;quot;:null,&amp;quot;strokeLineCap&amp;quot;:&amp;quot;butt&amp;quot;,&amp;quot;strokeDashOffset&amp;quot;:0,&amp;quot;strokeLineJoin&amp;quot;:&amp;quot;miter&amp;quot;,&amp;quot;strokeMiterLimit&amp;quot;:4,&amp;quot;scaleX&amp;quot;:0.15,&amp;quot;scaleY&amp;quot;:0.15,&amp;quot;angle&amp;quot;:90,&amp;quot;flipX&amp;quot;:false,&amp;quot;flipY&amp;quot;:false,&amp;quot;opacity&amp;quot;:1,&amp;quot;shadow&amp;quot;:null,&amp;quot;visible&amp;quot;:true,&amp;quot;clipTo&amp;quot;:null,&amp;quot;backgroundColor&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;fillRule&amp;quot;:&amp;quot;nonzero&amp;quot;,&amp;quot;paintFirst&amp;quot;:&amp;quot;fill&amp;quot;,&amp;quot;globalCompositeOperation&amp;quot;:&amp;quot;source-over&amp;quot;,&amp;quot;transformMatrix&amp;quot;:null,&amp;quot;skewX&amp;quot;:0,&amp;quot;skewY&amp;quot;:0,&amp;quot;crossOrigin&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;cropX&amp;quot;:0,&amp;quot;cropY&amp;quot;:0,&amp;quot;src&amp;quot;:&amp;quot;https://wikifab.org/images/f/f9/Syst_me_de_traduction_et_d_apprentissage_du_Braille_20250526_144220_1_.jpg&amp;quot;,&amp;quot;filters&amp;quot;:[]}],&amp;quot;height&amp;quot;:449.2718446601942,&amp;quot;width&amp;quot;:600}&lt;br /&gt;
|Licences=Attribution (CC BY)&lt;br /&gt;
|Description=&amp;lt;translate&amp;gt;Objet qui permet de traduire et d'apprendre le braille.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Area=Electronics, Health and Wellbeing&lt;br /&gt;
|Type=Creation&lt;br /&gt;
|Difficulty=Hard&lt;br /&gt;
|Duration=72&lt;br /&gt;
|Duration-type=hour(s)&lt;br /&gt;
|Cost=250&lt;br /&gt;
|Currency=EUR (€)&lt;br /&gt;
|Tags=aveugles, Braille, Traduction, Apprentissage&lt;br /&gt;
}}&lt;br /&gt;
{{Introduction&lt;br /&gt;
|Introduction=&amp;lt;translate&amp;gt;Présentation d'un tutoriel notre projet de classe de terminale STI2D afin de le reproduire chez soi&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Materials&lt;br /&gt;
|Step_Picture_00=Syst_me_de_traduction_et_d_apprentissage_du_Braille_Colle_bois.png&lt;br /&gt;
|Step_Picture_01=Syst_me_de_traduction_et_d_apprentissage_du_Braille_71RgeJe73GL._AC_SL1500_.jpg&lt;br /&gt;
|Step_Picture_02=Syst_me_de_traduction_et_d_apprentissage_du_Braille_Capture_d_cran_2025-05-26_151811.png&lt;br /&gt;
|Step_Picture_03=Syst_me_de_traduction_et_d_apprentissage_du_Braille_Capture_d_cran_2025-05-26_154234.jpg&lt;br /&gt;
|Step_Picture_04=Syst_me_de_traduction_et_d_apprentissage_du_Braille_61L4aoIqYOL._AC_SX679_.jpg&lt;br /&gt;
|Step_Picture_05=Syst_me_de_traduction_et_d_apprentissage_du_Braille_Capture_d_cran_2025-05-26_153426.png&lt;br /&gt;
|Material=&amp;lt;translate&amp;gt;-Bois 3mm&lt;br /&gt;
&lt;br /&gt;
-Plastique pour découpeuse laser ( ici du PLA)&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Tools=&amp;lt;translate&amp;gt;-Découpeuse laser&lt;br /&gt;
&lt;br /&gt;
-Imprimante 3D (ici la Ultimaker 2+)&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Notes&lt;br /&gt;
|Notes=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{PageLang&lt;br /&gt;
|Language=fr&lt;br /&gt;
|SourceLanguage=none&lt;br /&gt;
|IsTranslation=0&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Status&lt;br /&gt;
|Complete=Published&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Fichier:Syst_me_de_traduction_et_d_apprentissage_du_Braille_Capture_d_cran_2025-05-26_154234.jpg&amp;diff=287390</id>
		<title>Fichier:Syst me de traduction et d apprentissage du Braille Capture d cran 2025-05-26 154234.jpg</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Fichier:Syst_me_de_traduction_et_d_apprentissage_du_Braille_Capture_d_cran_2025-05-26_154234.jpg&amp;diff=287390"/>
		<updated>2025-05-26T13:42:53Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : Syst_me_de_traduction_et_d_apprentissage_du_Braille_Capture_d_cran_2025-05-26_154234&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Syst_me_de_traduction_et_d_apprentissage_du_Braille_Capture_d_cran_2025-05-26_154234&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Syst%C3%A8me_de_traduction_et_d%27apprentissage_du_Braille&amp;diff=287380</id>
		<title>Système de traduction et d'apprentissage du Braille</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Syst%C3%A8me_de_traduction_et_d%27apprentissage_du_Braille&amp;diff=287380"/>
		<updated>2025-05-26T13:32:57Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tuto Details&lt;br /&gt;
|Main_Picture=Syst_me_de_traduction_et_d_apprentissage_du_Braille_20250526_144220_1_.jpg&lt;br /&gt;
|Main_Picture_annotation={&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;objects&amp;quot;:[{&amp;quot;type&amp;quot;:&amp;quot;image&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;originX&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;originY&amp;quot;:&amp;quot;top&amp;quot;,&amp;quot;left&amp;quot;:601.2,&amp;quot;top&amp;quot;:-33,&amp;quot;width&amp;quot;:3468,&amp;quot;height&amp;quot;:4624,&amp;quot;fill&amp;quot;:&amp;quot;rgb(0,0,0)&amp;quot;,&amp;quot;stroke&amp;quot;:null,&amp;quot;strokeWidth&amp;quot;:0,&amp;quot;strokeDashArray&amp;quot;:null,&amp;quot;strokeLineCap&amp;quot;:&amp;quot;butt&amp;quot;,&amp;quot;strokeDashOffset&amp;quot;:0,&amp;quot;strokeLineJoin&amp;quot;:&amp;quot;miter&amp;quot;,&amp;quot;strokeMiterLimit&amp;quot;:4,&amp;quot;scaleX&amp;quot;:0.15,&amp;quot;scaleY&amp;quot;:0.15,&amp;quot;angle&amp;quot;:90,&amp;quot;flipX&amp;quot;:false,&amp;quot;flipY&amp;quot;:false,&amp;quot;opacity&amp;quot;:1,&amp;quot;shadow&amp;quot;:null,&amp;quot;visible&amp;quot;:true,&amp;quot;clipTo&amp;quot;:null,&amp;quot;backgroundColor&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;fillRule&amp;quot;:&amp;quot;nonzero&amp;quot;,&amp;quot;paintFirst&amp;quot;:&amp;quot;fill&amp;quot;,&amp;quot;globalCompositeOperation&amp;quot;:&amp;quot;source-over&amp;quot;,&amp;quot;transformMatrix&amp;quot;:null,&amp;quot;skewX&amp;quot;:0,&amp;quot;skewY&amp;quot;:0,&amp;quot;crossOrigin&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;cropX&amp;quot;:0,&amp;quot;cropY&amp;quot;:0,&amp;quot;src&amp;quot;:&amp;quot;https://wikifab.org/images/f/f9/Syst_me_de_traduction_et_d_apprentissage_du_Braille_20250526_144220_1_.jpg&amp;quot;,&amp;quot;filters&amp;quot;:[]}],&amp;quot;height&amp;quot;:449.2718446601942,&amp;quot;width&amp;quot;:600}&lt;br /&gt;
|Licences=Attribution (CC BY)&lt;br /&gt;
|Description=&amp;lt;translate&amp;gt;Objet qui permet de traduire et d'apprendre le braille.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Area=Electronics, Health and Wellbeing&lt;br /&gt;
|Type=Creation&lt;br /&gt;
|Difficulty=Hard&lt;br /&gt;
|Duration=72&lt;br /&gt;
|Duration-type=hour(s)&lt;br /&gt;
|Cost=250&lt;br /&gt;
|Currency=EUR (€)&lt;br /&gt;
|Tags=aveugles, Braille, Traduction, Apprentissage&lt;br /&gt;
}}&lt;br /&gt;
{{Introduction&lt;br /&gt;
|Introduction=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Materials&lt;br /&gt;
|Step_Picture_00=Syst_me_de_traduction_et_d_apprentissage_du_Braille_Colle_bois.png&lt;br /&gt;
|Material=&amp;lt;translate&amp;gt;bois et plastique ( ici du PLA)&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Tools=&amp;lt;translate&amp;gt;découpeuse laser et imprimante 3D (la Ultimaker 2+)&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Tuto_Attachments={{Tuto Attachments&lt;br /&gt;
|Attachment=support_servomoteurs_V1.0 ( a faire x2).stl&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=support_servomoteurs ( a faire x6).stl&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=lettre braille 1.1 ( a faire x2).stl&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=lettre braille 2.1 ( a faire x2).stl&lt;br /&gt;
}}{{Tuto Attachments&lt;br /&gt;
|Attachment=lettre braille ( a faire x2).stl&lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Notes&lt;br /&gt;
|Notes=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{PageLang&lt;br /&gt;
|Language=fr&lt;br /&gt;
|SourceLanguage=none&lt;br /&gt;
|IsTranslation=0&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Status&lt;br /&gt;
|Complete=Published&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Fichier:Support_servomoteurs_(_a_faire_x6).stl&amp;diff=287379</id>
		<title>Fichier:Support servomoteurs ( a faire x6).stl</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Fichier:Support_servomoteurs_(_a_faire_x6).stl&amp;diff=287379"/>
		<updated>2025-05-26T13:31:43Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : support_servomoteurs ( a faire x6)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;support_servomoteurs ( a faire x6)&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Fichier:Support_servomoteurs_V1.0_(_a_faire_x2).stl&amp;diff=287378</id>
		<title>Fichier:Support servomoteurs V1.0 ( a faire x2).stl</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Fichier:Support_servomoteurs_V1.0_(_a_faire_x2).stl&amp;diff=287378"/>
		<updated>2025-05-26T13:31:42Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : support_servomoteurs_V1.0 ( a faire x2)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;support_servomoteurs_V1.0 ( a faire x2)&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Fichier:Lettre_braille_(_a_faire_x2).stl&amp;diff=287377</id>
		<title>Fichier:Lettre braille ( a faire x2).stl</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Fichier:Lettre_braille_(_a_faire_x2).stl&amp;diff=287377"/>
		<updated>2025-05-26T13:31:41Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : lettre braille ( a faire x2)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;lettre braille ( a faire x2)&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Fichier:Lettre_braille_2.1_(_a_faire_x2).stl&amp;diff=287376</id>
		<title>Fichier:Lettre braille 2.1 ( a faire x2).stl</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Fichier:Lettre_braille_2.1_(_a_faire_x2).stl&amp;diff=287376"/>
		<updated>2025-05-26T13:31:40Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : lettre braille 2.1 ( a faire x2)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;lettre braille 2.1 ( a faire x2)&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Fichier:Lettre_braille_1.1_(_a_faire_x2).stl&amp;diff=287375</id>
		<title>Fichier:Lettre braille 1.1 ( a faire x2).stl</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Fichier:Lettre_braille_1.1_(_a_faire_x2).stl&amp;diff=287375"/>
		<updated>2025-05-26T13:31:38Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : lettre braille 1.1 ( a faire x2)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;lettre braille 1.1 ( a faire x2)&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Syst%C3%A8me_de_traduction_et_d%27apprentissage_du_Braille&amp;diff=287350</id>
		<title>Système de traduction et d'apprentissage du Braille</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Syst%C3%A8me_de_traduction_et_d%27apprentissage_du_Braille&amp;diff=287350"/>
		<updated>2025-05-26T13:13:07Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tuto Details&lt;br /&gt;
|Main_Picture=Syst_me_de_traduction_et_d_apprentissage_du_Braille_20250526_144220_1_.jpg&lt;br /&gt;
|Main_Picture_annotation={&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;objects&amp;quot;:[{&amp;quot;type&amp;quot;:&amp;quot;image&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;originX&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;originY&amp;quot;:&amp;quot;top&amp;quot;,&amp;quot;left&amp;quot;:601.2,&amp;quot;top&amp;quot;:-33,&amp;quot;width&amp;quot;:3468,&amp;quot;height&amp;quot;:4624,&amp;quot;fill&amp;quot;:&amp;quot;rgb(0,0,0)&amp;quot;,&amp;quot;stroke&amp;quot;:null,&amp;quot;strokeWidth&amp;quot;:0,&amp;quot;strokeDashArray&amp;quot;:null,&amp;quot;strokeLineCap&amp;quot;:&amp;quot;butt&amp;quot;,&amp;quot;strokeDashOffset&amp;quot;:0,&amp;quot;strokeLineJoin&amp;quot;:&amp;quot;miter&amp;quot;,&amp;quot;strokeMiterLimit&amp;quot;:4,&amp;quot;scaleX&amp;quot;:0.15,&amp;quot;scaleY&amp;quot;:0.15,&amp;quot;angle&amp;quot;:90,&amp;quot;flipX&amp;quot;:false,&amp;quot;flipY&amp;quot;:false,&amp;quot;opacity&amp;quot;:1,&amp;quot;shadow&amp;quot;:null,&amp;quot;visible&amp;quot;:true,&amp;quot;clipTo&amp;quot;:null,&amp;quot;backgroundColor&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;fillRule&amp;quot;:&amp;quot;nonzero&amp;quot;,&amp;quot;paintFirst&amp;quot;:&amp;quot;fill&amp;quot;,&amp;quot;globalCompositeOperation&amp;quot;:&amp;quot;source-over&amp;quot;,&amp;quot;transformMatrix&amp;quot;:null,&amp;quot;skewX&amp;quot;:0,&amp;quot;skewY&amp;quot;:0,&amp;quot;crossOrigin&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;cropX&amp;quot;:0,&amp;quot;cropY&amp;quot;:0,&amp;quot;src&amp;quot;:&amp;quot;https://wikifab.org/images/f/f9/Syst_me_de_traduction_et_d_apprentissage_du_Braille_20250526_144220_1_.jpg&amp;quot;,&amp;quot;filters&amp;quot;:[]}],&amp;quot;height&amp;quot;:449.2718446601942,&amp;quot;width&amp;quot;:600}&lt;br /&gt;
|Licences=Attribution (CC BY)&lt;br /&gt;
|Description=&amp;lt;translate&amp;gt;Objet qui permet de traduire et d'apprendre le braille.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Area=Electronics, Health and Wellbeing&lt;br /&gt;
|Type=Creation&lt;br /&gt;
|Difficulty=Hard&lt;br /&gt;
|Duration=72&lt;br /&gt;
|Duration-type=hour(s)&lt;br /&gt;
|Cost=250&lt;br /&gt;
|Currency=EUR (€)&lt;br /&gt;
|Tags=aveugles, Braille, Traduction, Apprentissage&lt;br /&gt;
}}&lt;br /&gt;
{{Introduction&lt;br /&gt;
|Introduction=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Materials&lt;br /&gt;
|Step_Picture_00=Syst_me_de_traduction_et_d_apprentissage_du_Braille_Colle_bois.png&lt;br /&gt;
|Material=&amp;lt;translate&amp;gt;bois et plastique ( ici du PLA)&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Tools=&amp;lt;translate&amp;gt;découpeuse laser et imprimante 3D (la Ultimaker 2+)&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Notes&lt;br /&gt;
|Notes=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{PageLang&lt;br /&gt;
|Language=fr&lt;br /&gt;
|SourceLanguage=none&lt;br /&gt;
|IsTranslation=0&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Status&lt;br /&gt;
|Complete=Published&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Syst%C3%A8me_de_traduction_et_d%27apprentissage_du_Braille&amp;diff=287333</id>
		<title>Système de traduction et d'apprentissage du Braille</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Syst%C3%A8me_de_traduction_et_d%27apprentissage_du_Braille&amp;diff=287333"/>
		<updated>2025-05-26T12:59:22Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tuto Details&lt;br /&gt;
|Main_Picture=Syst_me_de_traduction_et_d_apprentissage_du_Braille_20250526_144220_1_.jpg&lt;br /&gt;
|Main_Picture_annotation={&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;objects&amp;quot;:[{&amp;quot;type&amp;quot;:&amp;quot;image&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;originX&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;originY&amp;quot;:&amp;quot;top&amp;quot;,&amp;quot;left&amp;quot;:601.2,&amp;quot;top&amp;quot;:-33,&amp;quot;width&amp;quot;:3468,&amp;quot;height&amp;quot;:4624,&amp;quot;fill&amp;quot;:&amp;quot;rgb(0,0,0)&amp;quot;,&amp;quot;stroke&amp;quot;:null,&amp;quot;strokeWidth&amp;quot;:0,&amp;quot;strokeDashArray&amp;quot;:null,&amp;quot;strokeLineCap&amp;quot;:&amp;quot;butt&amp;quot;,&amp;quot;strokeDashOffset&amp;quot;:0,&amp;quot;strokeLineJoin&amp;quot;:&amp;quot;miter&amp;quot;,&amp;quot;strokeMiterLimit&amp;quot;:4,&amp;quot;scaleX&amp;quot;:0.15,&amp;quot;scaleY&amp;quot;:0.15,&amp;quot;angle&amp;quot;:90,&amp;quot;flipX&amp;quot;:false,&amp;quot;flipY&amp;quot;:false,&amp;quot;opacity&amp;quot;:1,&amp;quot;shadow&amp;quot;:null,&amp;quot;visible&amp;quot;:true,&amp;quot;clipTo&amp;quot;:null,&amp;quot;backgroundColor&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;fillRule&amp;quot;:&amp;quot;nonzero&amp;quot;,&amp;quot;paintFirst&amp;quot;:&amp;quot;fill&amp;quot;,&amp;quot;globalCompositeOperation&amp;quot;:&amp;quot;source-over&amp;quot;,&amp;quot;transformMatrix&amp;quot;:null,&amp;quot;skewX&amp;quot;:0,&amp;quot;skewY&amp;quot;:0,&amp;quot;crossOrigin&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;cropX&amp;quot;:0,&amp;quot;cropY&amp;quot;:0,&amp;quot;src&amp;quot;:&amp;quot;https://wikifab.org/images/f/f9/Syst_me_de_traduction_et_d_apprentissage_du_Braille_20250526_144220_1_.jpg&amp;quot;,&amp;quot;filters&amp;quot;:[]}],&amp;quot;height&amp;quot;:449.2718446601942,&amp;quot;width&amp;quot;:600}&lt;br /&gt;
|Licences=Attribution (CC BY)&lt;br /&gt;
|Description=&amp;lt;translate&amp;gt;Objet qui permet de traduire et d'apprendre le braille.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Area=Electronics, Health and Wellbeing&lt;br /&gt;
|Type=Creation&lt;br /&gt;
|Difficulty=Hard&lt;br /&gt;
|Duration=9&lt;br /&gt;
|Duration-type=hour(s)&lt;br /&gt;
|Cost=250&lt;br /&gt;
|Currency=EUR (€)&lt;br /&gt;
|Tags=aveugles, Braille, Traduction, Apprentissage&lt;br /&gt;
}}&lt;br /&gt;
{{Introduction&lt;br /&gt;
|Introduction=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Materials&lt;br /&gt;
|Material=&amp;lt;translate&amp;gt;bois et plastique ( ici du PLA)&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Tools=&amp;lt;translate&amp;gt;découpeuse laser et imprimante 3D (la Ultimaker 2+)&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Notes&lt;br /&gt;
|Notes=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{PageLang&lt;br /&gt;
|Language=fr&lt;br /&gt;
|SourceLanguage=none&lt;br /&gt;
|IsTranslation=0&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Status&lt;br /&gt;
|Complete=Published&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Syst%C3%A8me_de_traduction_et_d%27apprentissage_du_Braille&amp;diff=287330</id>
		<title>Système de traduction et d'apprentissage du Braille</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Syst%C3%A8me_de_traduction_et_d%27apprentissage_du_Braille&amp;diff=287330"/>
		<updated>2025-05-26T12:57:07Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tuto Details&lt;br /&gt;
|Main_Picture=Syst_me_de_traduction_et_d_apprentissage_du_Braille_20250526_144220_1_.jpg&lt;br /&gt;
|Main_Picture_annotation={&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;objects&amp;quot;:[{&amp;quot;type&amp;quot;:&amp;quot;image&amp;quot;,&amp;quot;version&amp;quot;:&amp;quot;3.5.0&amp;quot;,&amp;quot;originX&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;originY&amp;quot;:&amp;quot;top&amp;quot;,&amp;quot;left&amp;quot;:677.44,&amp;quot;top&amp;quot;:-42,&amp;quot;width&amp;quot;:3468,&amp;quot;height&amp;quot;:4624,&amp;quot;fill&amp;quot;:&amp;quot;rgb(0,0,0)&amp;quot;,&amp;quot;stroke&amp;quot;:null,&amp;quot;strokeWidth&amp;quot;:0,&amp;quot;strokeDashArray&amp;quot;:null,&amp;quot;strokeLineCap&amp;quot;:&amp;quot;butt&amp;quot;,&amp;quot;strokeDashOffset&amp;quot;:0,&amp;quot;strokeLineJoin&amp;quot;:&amp;quot;miter&amp;quot;,&amp;quot;strokeMiterLimit&amp;quot;:4,&amp;quot;scaleX&amp;quot;:0.15,&amp;quot;scaleY&amp;quot;:0.15,&amp;quot;angle&amp;quot;:90,&amp;quot;flipX&amp;quot;:false,&amp;quot;flipY&amp;quot;:false,&amp;quot;opacity&amp;quot;:1,&amp;quot;shadow&amp;quot;:null,&amp;quot;visible&amp;quot;:true,&amp;quot;clipTo&amp;quot;:null,&amp;quot;backgroundColor&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;fillRule&amp;quot;:&amp;quot;nonzero&amp;quot;,&amp;quot;paintFirst&amp;quot;:&amp;quot;fill&amp;quot;,&amp;quot;globalCompositeOperation&amp;quot;:&amp;quot;source-over&amp;quot;,&amp;quot;transformMatrix&amp;quot;:null,&amp;quot;skewX&amp;quot;:0,&amp;quot;skewY&amp;quot;:0,&amp;quot;crossOrigin&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;cropX&amp;quot;:0,&amp;quot;cropY&amp;quot;:0,&amp;quot;src&amp;quot;:&amp;quot;https://wikifab.org/images/f/f9/Syst_me_de_traduction_et_d_apprentissage_du_Braille_20250526_144220_1_.jpg&amp;quot;,&amp;quot;filters&amp;quot;:[]}],&amp;quot;height&amp;quot;:449.8168498168498,&amp;quot;width&amp;quot;:600}&lt;br /&gt;
|Licences=Attribution (CC BY)&lt;br /&gt;
|Description=&amp;lt;translate&amp;gt;Objet qui permet de traduire et d'apprendre le braille.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Area=Electronics, Health and Wellbeing&lt;br /&gt;
|Type=Creation&lt;br /&gt;
|Difficulty=Hard&lt;br /&gt;
|Duration=9&lt;br /&gt;
|Duration-type=hour(s)&lt;br /&gt;
|Cost=250&lt;br /&gt;
|Currency=EUR (€)&lt;br /&gt;
|Tags=aveugles, Braille, Traduction, Apprentissage&lt;br /&gt;
}}&lt;br /&gt;
{{Introduction&lt;br /&gt;
|Introduction=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Materials&lt;br /&gt;
|Material=&amp;lt;translate&amp;gt;bois et plastique ( ici du PLA)&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Tools=&amp;lt;translate&amp;gt;découpeuse laser et imprimante 3D (la Ultimaker 2+)&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Notes&lt;br /&gt;
|Notes=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{PageLang&lt;br /&gt;
|Language=fr&lt;br /&gt;
|SourceLanguage=none&lt;br /&gt;
|IsTranslation=0&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Status&lt;br /&gt;
|Complete=Published&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Fichier:Syst_me_de_traduction_et_d_apprentissage_du_Braille_20250526_144220_1_.jpg&amp;diff=287325</id>
		<title>Fichier:Syst me de traduction et d apprentissage du Braille 20250526 144220 1 .jpg</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Fichier:Syst_me_de_traduction_et_d_apprentissage_du_Braille_20250526_144220_1_.jpg&amp;diff=287325"/>
		<updated>2025-05-26T12:54:38Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : Syst_me_de_traduction_et_d_apprentissage_du_Braille_20250526_144220_1_&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Syst_me_de_traduction_et_d_apprentissage_du_Braille_20250526_144220_1_&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Syst%C3%A8me_de_traduction_et_d%27apprentissage_du_Braille&amp;diff=287316</id>
		<title>Système de traduction et d'apprentissage du Braille</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Syst%C3%A8me_de_traduction_et_d%27apprentissage_du_Braille&amp;diff=287316"/>
		<updated>2025-05-26T12:51:00Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tuto Details&lt;br /&gt;
|Licences=Attribution (CC BY)&lt;br /&gt;
|Description=&amp;lt;translate&amp;gt;Objet qui permet de traduire et d'apprendre le braille.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Area=Electronics, Health and Wellbeing&lt;br /&gt;
|Type=Creation&lt;br /&gt;
|Difficulty=Hard&lt;br /&gt;
|Duration=9&lt;br /&gt;
|Duration-type=hour(s)&lt;br /&gt;
|Cost=250&lt;br /&gt;
|Currency=EUR (€)&lt;br /&gt;
|Tags=aveugles, Braille, Traduction, Apprentissage&lt;br /&gt;
}}&lt;br /&gt;
{{Introduction&lt;br /&gt;
|Introduction=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Materials&lt;br /&gt;
|Material=&amp;lt;translate&amp;gt;bois et plastique ( ici du PLA)&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Tools=&amp;lt;translate&amp;gt;découpeuse laser et imprimante 3D (la Ultimaker 2+)&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Notes&lt;br /&gt;
|Notes=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{PageLang&lt;br /&gt;
|Language=fr&lt;br /&gt;
|SourceLanguage=none&lt;br /&gt;
|IsTranslation=0&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Status&lt;br /&gt;
|Complete=Published&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Syst%C3%A8me_de_traduction_et_d%27apprentissage_du_Braille&amp;diff=286785</id>
		<title>Système de traduction et d'apprentissage du Braille</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Syst%C3%A8me_de_traduction_et_d%27apprentissage_du_Braille&amp;diff=286785"/>
		<updated>2025-05-20T09:52:15Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tuto Details&lt;br /&gt;
|Licences=Attribution (CC BY)&lt;br /&gt;
|Description=&amp;lt;translate&amp;gt;Objet qui permet de traduire et d'apprendre le braille.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Area=Electronics, Health and Wellbeing&lt;br /&gt;
|Type=Creation&lt;br /&gt;
|Difficulty=Hard&lt;br /&gt;
|Duration=9&lt;br /&gt;
|Duration-type=hour(s)&lt;br /&gt;
|Cost=250&lt;br /&gt;
|Currency=EUR (€)&lt;br /&gt;
|Tags=aveugles, Braille, Traduction, Apprentissage&lt;br /&gt;
}}&lt;br /&gt;
{{Introduction&lt;br /&gt;
|Introduction=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Materials&lt;br /&gt;
|Material=&amp;lt;translate&amp;gt;bois et plastique ( ici du PLA)&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Tools=&amp;lt;translate&amp;gt;découpeuse laser et imprimante 3D (la Ultimaker 2+)&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Notes&lt;br /&gt;
|Notes=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{PageLang&lt;br /&gt;
|Language=fr&lt;br /&gt;
|SourceLanguage=none&lt;br /&gt;
|IsTranslation=0&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Status&lt;br /&gt;
|Complete=Draft&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Syst%C3%A8me_de_traduction_et_d%27apprentissage_du_Braille&amp;diff=286758</id>
		<title>Système de traduction et d'apprentissage du Braille</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Syst%C3%A8me_de_traduction_et_d%27apprentissage_du_Braille&amp;diff=286758"/>
		<updated>2025-05-20T09:10:17Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : Page créée avec « {{Tuto Details |Licences=Attribution (CC BY) |Description=&amp;lt;translate&amp;gt;Objet qui permet de traduire et d'apprendre le braille.&amp;lt;/translate&amp;gt; |Area=Electronics, Health and Well... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tuto Details&lt;br /&gt;
|Licences=Attribution (CC BY)&lt;br /&gt;
|Description=&amp;lt;translate&amp;gt;Objet qui permet de traduire et d'apprendre le braille.&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Area=Electronics, Health and Wellbeing&lt;br /&gt;
|Type=Technique&lt;br /&gt;
|Difficulty=Hard&lt;br /&gt;
|Duration=9&lt;br /&gt;
|Duration-type=hour(s)&lt;br /&gt;
|Cost=250&lt;br /&gt;
|Currency=EUR (€)&lt;br /&gt;
|Tags=aveugles, Braille, Traduction, Apprentissage&lt;br /&gt;
}}&lt;br /&gt;
{{Introduction&lt;br /&gt;
|Introduction=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Materials&lt;br /&gt;
|Material=&amp;lt;translate&amp;gt;bois et plastique ( ici du PLA)&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Tools=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Step&lt;br /&gt;
|Step_Title=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
|Step_Content=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Notes&lt;br /&gt;
|Notes=&amp;lt;translate&amp;gt;&amp;lt;/translate&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{PageLang&lt;br /&gt;
|SourceLanguage=none&lt;br /&gt;
|IsTranslation=0&lt;br /&gt;
|Language=fr&lt;br /&gt;
}}&lt;br /&gt;
{{Tuto Status&lt;br /&gt;
|Complete=Draft&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
	<entry>
		<id>https://wikifab.org/w/index.php?title=Utilisateur:Samuel_GOACOLO&amp;diff=286635</id>
		<title>Utilisateur:Samuel GOACOLO</title>
		<link rel="alternate" type="text/html" href="https://wikifab.org/w/index.php?title=Utilisateur:Samuel_GOACOLO&amp;diff=286635"/>
		<updated>2025-05-20T07:43:56Z</updated>

		<summary type="html">&lt;p&gt;Samuel GOACOLO : create user page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Samuel GOACOLO</name></author>
		
	</entry>
</feed>