Projets:Canne a son

De wikilab
Prototype final.png

Description du projet

Ce prototype est dérivé de la Wicanne « Lidar » sans la partie reconnaissance des obstacle par IA.

Le système se suffit donc à lui-même et les obstacles rencontrés sont matérialisés par des sons de différentes fréquences.

Il est constitué d'un Lidar TFmini Plus couplé à un microcontrôleur Teensy 4.1.

Les sons sont émis par un buzzer piezzo. L'ensemble est contenu dans un petit boîtier qui est destiné à être fixé sur un support à la convenance de l'utilisateur. (Adaptation à réaliser donc en fonction de la demande).

La mise en route se fait par un simple interrupteur situé à l'arrière de celui-ci. Le boîtier est alimenté par une source de courant de 5 volts. (soit par la prise micro-USB si on dispose d'un interrupteur sur l'alimentation, soit sur la pin VIN en passant par l'interrupteur du boîtier si on utilise une alimentation sans interrupteur).

« Canne à son »fonctionne dans un intervalle de distance de 15 cm à 5 mètres.

La détection est basée sur la variation brutale de distance lors du balayage d'un obstacle par rapport à son environnement.

La système s'adapte automatiquement à la distance à laquelle se trouve un obstacle. Le seuil de variation déclencheur est plus petit pour les obstacles proches que pour les obstacles éloignés. Ainsi, par exemple, un obstacle à 90 cm sera détecté s'il présente un variation d'au moins 5 cm alors que pour un obstacle situé à 2 ou 3 m, le seuil de variation de distance doit être de 15 cm.

A chaque détection d'une variation de distance supérieure au seuil déterminé pas la distance à l'obstacle, un bip sonore est émis avec une fréquence d'autant plus élevée que l'obstacle est proche.

Ainsi on pourra reconnaître les limites de l'obstacle lors d'un balayage de celui-ci en entendant un son aigu lorsque le faisceau arrive dessus et un son plus grave lorsque le faisceau quitte l'obstacle.

Devant une grille ou un escalier on pourra donc « ressentir » le nombre de barreau ou de marche par un balayage dans le sens approprié. (de gauche à droite ou de haut en bas).

Les fréquences utilisées ainsi que les seuils de variation pourront être adaptés aux souhaits de l'utilisateur dans la mesure où cela n'affectera pas le bon fonctionnement du système.

Il sera sans doute nécessaire d'acquérir une certaine expérience pour en faire un bon usage.

Cahier des charges

Analyse de l'existant

Equipe (Porteur de projet et contributeurs)

  • Porteurs du projet : Instructeurs de locomotion du centre Angèle Vannier
  • Concepteurs/contributeurs : Yves Le Chevalier
  • Animateur (coordinateur du projet)
  • Fabmanager référent :Delphine
  • Responsable de documentation : Yves Le Chevalier, Delphine

Matériel nécessaire

Outils nécessaires

Coût

Délai estimé

Fichiers source

Documentation PDF

Télécharger les fichiers STL du boitier

Etapes de fabrication pas à pas

Schéma électronique

Schema electronique.png

Programmation de la teensy

Télécharger le code à téléverser sur la Teensy via l'IDE Arduino

// Canne_a_son_Teensy4             YLC 18/06/2021
// Sonorisation de la détection d'obstacles par mesure des variations brutales de distance
// Jusqu'à 1,10 m le seuil de variation est de 5 cm au-delà de cette distance le seuil est de 15 cm. 
// Harware : Teensy 4.1 + lidar TF mini PLus + Buzzer + alim 5v.
// A savoir : Tests sur Arduino nano => ne fonctionnent pas correctement car carte trop lente. 
//******************************************************************
#define PorSerLid Serial2       // déclaration du lidar TF mini sur port série #2 (pins 7 et 8)
#include "TFMiniPlus.h"
TFMiniPlus tfmini;

#include "EasyBuzzer.h"  

float dis = 0;                 // distance mesurée par Lidar
float dist = 0;                // distance retenue
int vardis = 0;                // écart de distance entre 2 mesures
unsigned int freqson;          // fréquence du bip sonore
const int dischangseuil = 110; // distance de changement de seuil de détection
const int seuilproch = 5;      // seuil de détection pour les obstacles proches
const int seuileloin = 15;     // seuil de détection pour les obstacles éloignés
int vardimi;                   // seuil chosi pour activer signal sonore (cm)
float dislid[2];               // tableau de stockage des mesures faite par le lidar 
bool premes = true;            // indicateur de la première mesure

//__________________________________________________________________

void mesure()  {
  if (tfmini.readData()) {         // Récupération de la mesure lidar  
    dis = tfmini.getDistance();    // distance mesurée 
    if (dis > 500)   dis = 500;    // on ne va pas a plus de 5 m
    if (dis > 15) {                // si mesure valide de plus de 15 cm
      dist = dis;                  // distance est retenue
    }
  }
}
//=========================================================

void setup() {
  EasyBuzzer.update();          // correction bug dans lib EasyBuzzer
  EasyBuzzer.setPin(14);        // pin 14 : Pin buzzer 
  PorSerLid.begin(115200);      // ouverture du port série 2 (Lidar)
  tfmini.begin(&PorSerLid);     // démarrer le lidar sur port série #2
  tfmini.setFrameRate(50);      // fixer la fréquence du Lidar (Hz)
  tfmini.saveSettings();        // enegistrer les réglages 
}
//=========================================================

void loop() { 
  mesure();                      // récupérer une distance
  if (dist > 0)  {               // si distance mesurée
    dislid[0] = dislid[1];       // décaler la mesure précédente dans premier poste
    dislid[1] = dist;            // stocker nouvelle mesure dans second poste
    if (premes) {                // si premiere mesure on ne fait rien d'autre
      premes = false;            // pour indiquer les mesures suivantes    
    }
    else {
      vardis = abs(dislid[0] - dislid[1]);  // calcul de l'écart entre 2 mesures 
      if (dislid[1] < dischangseuil) {      // si mesure "proche"
        vardimi = seuilproch;               // seuil proche activé
      }
      else vardimi = seuileloin;            // seuil éloigné activé
      if (vardis > vardimi) {               // Si écart de distance supérieur au seuil retenu
        freqson = 2500 - (dislid[1] * 4);   // calcul fréquence fonction(dernière distance mesurée)
        EasyBuzzer.singleBeep(freqson,50);  // jouer le son calculé 50 millisec.
        delay(50);                          // attendre la fin du son
        EasyBuzzer.stopBeep();              // arrêter le buzzer
      }       
    } 
  }                  
}   
//**********************fin prog******************************/


Boitier à imprimer en 3D

Télécharger et imprimer les fichiers STL du boitier

Canne a son position impression.jpeg

Montage des éléments à insérer dans le boitier

Vue éclatée du boitier
Vue du boitier sans capot arrière


Durée de fabrication du prototype final

Journal de bord