P11 Détecteur d'obstacles pour fauteuils électriques : Différence entre versions

De Wiki de Projets IMA
(02 Février - 06 Février)
 
(16 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
 +
<br style="clear: both;"/>
 +
<include nopre noesc src="/home/pedago/pimasc/include/video-DetecteurObstacles-iframe.html" />
 +
__TOC__
 +
<br style="clear: both;"/>
 +
==Présentation du projet==
 
[[Fichier:LaVieAutrementLogo.jpg | vignette | upright=2 | La Vie Autrement]]
 
[[Fichier:LaVieAutrementLogo.jpg | vignette | upright=2 | La Vie Autrement]]
 
==Présentation du projet==
 
  
 
[[Fichier:Logo_gapas.jpg | vignette | left | upright=1.3 | Groupement des Associations Partenaires d'Action Sociale]]
 
[[Fichier:Logo_gapas.jpg | vignette | left | upright=1.3 | Groupement des Associations Partenaires d'Action Sociale]]
Ligne 275 : Ligne 278 :
 
<br>'''Solution''' : Nous allons créer des signaux PWM et ajouter un filtre RC et un AOP monté en suiveur. De cette façon, on crée un signal PWM avec un duty cycle maîtrisé via le code Arduino, qui sera alors converti en une tension continue d’une valeur comprise entre 0 et 5V (signal PWM de l’arduino entre 0 et 5V, 0% = 0V, 100% = 5V).
 
<br>'''Solution''' : Nous allons créer des signaux PWM et ajouter un filtre RC et un AOP monté en suiveur. De cette façon, on crée un signal PWM avec un duty cycle maîtrisé via le code Arduino, qui sera alors converti en une tension continue d’une valeur comprise entre 0 et 5V (signal PWM de l’arduino entre 0 et 5V, 0% = 0V, 100% = 5V).
 
<br>Par exemple, avec un signal PWM de 50% de duty cycle, on obtient le signal continu suivant (d’environ 2,5V constant).
 
<br>Par exemple, avec un signal PWM de 50% de duty cycle, on obtient le signal continu suivant (d’environ 2,5V constant).
 +
<br>
 +
<br>
 +
<br>
 +
===09 Février - 13 Février===
 +
 +
<br>
 +
'''Partie Electronique:''' <br>
 +
<br>
 +
 +
Une fois la solution des signaux PWM convertis en signaux continus trouvée, nous allons alors devoir créer des signaux continus compris entre 1,1V et 3,9V. Afin d’être le plus précis possible, nous avons testé différentes valeurs de rapport cyclique afin de vérifier l’exactitude de la théorie.<br>
 +
 +
La théorie étant : on écrit une valeur entre 0 et 255 sur un port PWM, qui est le reflet du rapport cyclique (0 pour 0%, 255 pour 100%) pour un signal variant de 0 (état bas) à 5V (état haut). <br>
 +
Nous avons alors remarqué une différence notable qui pourrait nuire au projet si non détectée : écrire 255 dans un port PWM nous permet d’obtenir une tension continue (après filtrage) de 5,24V, et non de 5V. Etant donné la faible plage des valeurs à lire et à créer (1,1 =>3,9V), une bonne précision est indispensable pour le bon fonctionnement du projet.<br>
 +
Nous avons alors testé plusieurs valeurs clés afin de déterminer la table de corrélation des valeurs PWM suivantes : [[Fichier:Corrélation PWM.xls]]
 +
<br>
 +
<br>
 +
 +
Outre les signaux PWM à générer, il sera aussi nécessaire de lire des signaux continus avec l’arduino. Pour cela, lors de la lecture, nous allons recevoir une valeur comprise entre 0 et 1023, de même : 0 pour 0V et 1023 pour 5V. Là aussi, nous avons décidé de vérifier l’exactitude de ces données de la même façon qu’avec les signaux PWM : [[Fichier:Valeur Analog.xls]]. On remarque bel et bien là aussi un léger décalage, le 5V est en réalité du 5,15V.
 +
<br>
 +
<br>
 +
 +
En attendant de recevoir les composants nous avons réfléchi à l'implantation de notre module entre le joystick et la carte électronique contenue dans le boitier de commande du FRE. Pour cela nous allons connecter une nappe sortant du joystick et allant vers une carte électronique, puis les signaux à traiter seront directement envoyés sur l'arduino. Une fois traités, les signaux seront redirigés vers la carte électronique à partir de laquelle une nappe les relira jusqu'à la carte électronique du boitier de commande du FRE. <br>
 +
Le schéma suivant illustre la description:
 +
[[Fichier:Schema_joystick_arduino.PNG |frameless|upright=4|center| Implantation du module]]
 +
 +
<br>
 +
'''Partie Software:''' <br>
 +
<br>
 +
 +
Durant cette période du projet, nous avons décrit l’algorithme du réseau de capteurs en pseudo-code disponible ici : [[Fichier:Algorithme_RDC_Pseudo_Code.pdf]]<br>
 +
Les fonctions principales sont alors de scanner de façon continue les valeurs renvoyées par les capteurs SRF08. En fonction de ces informations et de l’information analogique récupérée (reflet de l’inclinaison du joystick), nous appliquons alors une décélération proportionnelle si nécessaire (si l’obstacle est considéré trop proche : voir distances de détection).
 +
<br>
 +
 +
[[Fichier:Evolution_Tension_Distance.PNG | vignette | left | upright = 0.9 | Evolution Tension Distance Marche Avant ]]
 +
<br>
 +
Afin d’éviter le blocage, on ne prend en compte l’information des capteurs à l’avant du fauteuil que lorsque le joystick est orienté vers l’avant. De même pour chaque orientation. De plus, si l’environnement ne présente aucun obstacle vers l’avant ou vers l’arrière, nous devons alors recopier la valeur analogique lue en entrée vers un signal PWM qui sera ensuite filtré, de même pour les côtés.<br>
 +
Afin de créer une décélération assez confortable, nous avons décidé de la faire de façon linéaire. <br>
 +
 +
Pour l’exemple ici (en marche avant) : on crée la courbe de décélération en fonction des distances de sécurité imposées. Pour la marche avant, on a choisi de s’arrêter lorsqu’un obstacle serait détecté à 45cm ou moins et on commencerait à décélérer lorsqu’un obstacle serait présent à moins de 100cm. <br>
 +
 +
La courbe nous montre alors que de 0 à 45cm, la marche avant est bloquée (2,5V : le joystick est en position milieu entre l’avant et l’arrière). Puis lorsque l’obstacle s’éloigne, on autorise une vitesse plus élevée, jusqu’à un maximum de 3,9V à 100cm, qui restera à 3,9V après 100cm car c’est la vitesse maximale en marche avant du fauteuil.<br>
 +
 +
On traduit alors l’équation de la courbe comme suit : '''Y = 0,025X + 1,375''' avec Y la tension PWM résultante en Volts et X la distance renvoyée par le capteur en cm.
 +
<br><br>
 +
 +
[[Fichier:Montage_RDC_Leds.PNG | vignette | right| upright = 0.9 | Montage de test de l'algorithme ]]
 +
 +
<br>
 +
Une fois avoir déterminé ces différentes notions, nous avons pu implémenter et tester l’algorithme du réseau de capteurs. Pour cela, nous avons modifié notre montage afin de regrouper les capteurs par côté (avant, arrière, droite et gauche).
 +
Nous avons alors relié 2 leds afin de visualiser le changement d’intensité de couleur (leds reliées au  signal PWM créé) lors de la détection d’obstacle. Et pour simuler l’inclinaison du joystick, nous envoyons dans les ports analogiques du 3,3V (compris dans l’arduino) pour gérer l’avance et le déplacement à droite, et nous laissons les ports vides (tension de 0,2V environ) pour simuler un déplacement en arrière et à gauche.
 +
<br><br><br><br>
 +
 +
[[Fichier:RDC_Obstacle_Arriere.PNG | vignette | left| upright = 0.9 | Obstacle arrière détecté liaison série ]]
 +
<br>
 +
 +
De plus, afin d’affiner les tests, nous imprimons sur la liaison série toutes les informations circulant durant le déroulement du code. De cette façon, nous interprétons les différents scénarios testés.
 +
Dans cet exemple, nous détectons un obstacle à l’arrière du fauteuil, les étapes sont alors les suivantes : <br>
 +
 +
• Affichage de la distance de l’obstacle : 84cm <br>
 +
• Affichage de la valeur analogique lue en A0 : 189 : équivalent à 0,96V <br>
 +
• On calcule alors la valeur du signal PWM à générer en Volts : 1,52V équivalent à 72 pour l’arduino <br>
 +
• On fait le choix de décélérer, c’est-à-dire d’appliquer le signal PWM calculé plutôt que de recopier l’entrée car le joystick est considéré comme trop incliné (l’utilisateur veut aller vite mais l’obstacle est trop près, on force alors la décélération). <br>
 +
 +
Dans un autre cas, si le joystick était moins incliné (l’utilisateur va moins vite), on aurait conservé la valeur actuelle lue sur les ports analogiques, l’obstacle est encore trop loin et on ne va pas assez vite pour que ce soit dangereux.
 +
 +
===16 Février - 20 Février===
 +
 +
<br>
 +
'''Partie Electronique :''' <br>
 +
<br>
 +
Durant cette semaine nous nous sommes principalement concentrés sur l'élaboration de la carte électronique permettant de contrôler la vitesse du fauteuil.<br>
 +
Nous avons obtenu le résultat suivant:
 +
[[Fichier:Carte_électronique.PNG‎ |center| upright=0.9 | carte électronique reliant le joystick à la carte de commande du FRE]]
 +
<br>
 +
Lors de la réalisation de cette carte nous avons rencontré plusieurs problèmes:<br>
 +
::-La disposition des fils dans le connecteur HE8 d’entrée est différente de celle dans le HE8 de sortie : Inversion des signaux (1=2, 3=4 etc…)<br>
 +
::-Problème de masse entre l'Arduino et la carte de commande <br>
 +
::-Découverte du mode d’initialisation du joystick: Le joystick reçoit du 5V par la carte électronique, le divise par 2 pour en faire sa valeur de référence à l’état nul du joystick, et l’envoie sur toute les pattes. S’il ne le reçoit pas le fauteuil passe en mode de défaillance : les leds oranges et rouges clignotent quand il y a une tension inférieure à 1V ou supérieure à 4V sur les pattes Avant/Arrière ou Droite/Gauche. <br>
 +
<br>
 +
Une fois tout ces problèmes réglés nous avons pu nous pencher sur la question de l'alimentation de l'Arduino. <br>
 +
Comme dit précédemment dans le wiki, nous voulons alimenter l'Arduino à partir des batteries du FRE. Nous avons donc testé le montage avec un 7812, ayant quelques problèmes nous avons ensuite testé avec un 7805, dans ce cas l'Arduino ne fournit plus du 5V mais du 4,38V ce qui ne permet pas d'aliementer correctement le RDC et pose des problèmes au niveau du code réalisé pour contrôler le FRE. D'autre part le 7805 chauffe beaucoup trop et risque donc de dysfonctionner au bout de quelque temps.<br>
 +
Enfin nous avons décidé de tester avec une alimentation externe et nous avons obtenu de bons résultats.<br>
 +
 +
Nous devons encore retester le montage d'alimentation avec un 7812 fonctionnel.<br>
 +
 +
<br>
 +
'''Partie Software :''' <br>
 +
<br>
 +
 +
Nos efforts ont été concentrés sur la partie électronique / développement de la carte durant cette semaine. Cependant, nous avons pu revoir et tester l'algorithme développé en situation réelle une fois la carte terminée. <br>
 +
En alimentant notre système par un PC afin de tester dans des conditions optimales, nous avons alors piloté le fauteuil en imposant un environnement d'obstacles divers.
 +
Le fonctionnement de base était satisfaisant, le fauteuil ralentissait lors de l'approche d'un obstacle et le déplacement restait fluide dans la plupart des cas.
 +
Cependant, en vitesse élevée, l'arrêt se faisait trop tard, ce qui implique un danger lors du fonctionnement.<br>
 +
Pour pallier cela, nous avons modifié la théorie de nos courbes de décélération. Nous avons alors augmenté la distance de décélération ainsi que la distance d'arrêt.
 +
Après différents tests, il s'est avéré que le danger était écarté en vitesse maximale, mais les distances d'arrêt en vitesse faible étaient trop importantes et beaucoup de situations de blocages étaient détectées.<br><br>
 +
[[Fichier:Evolution_Tension_Distance_Modif.PNG‎ | vignette | left| upright=0.9 | Ajustement de l'évolution tension / vitesse : Marche avant]]
 +
Nous avons alors finalement ajusté les courbes pour la configuration actuelle : <br>
 +
• Avant Slow : 150cm - Avant Stop : 45cm <br>
 +
• Arrière Slow : 130cm - Arrière Stop : 45cm <br>
 +
• Côté Slow : 100cm - Côté Stop : 15cm <br>
 +
<br>
 +
De cette façon, la décélération est plus agréable et plus précise. De plus, le déplacement est plus permissif en vitesse faible et la sécurité est renforcée en vitesse élevée.<br>
 +
 +
En résumé, après différents tests du système (avec l'arduino alimenté par un PC ou une batterie externe), nous avons développé un module fonctionnel avec les moyens à notre disposition. De nombreuses perspectives d'améliorations sont possibles et nécessaires pour le bon fonctionnement sur la durée du système.<br>
 +
<br>
 +
 +
===23 Février - 27 Février===
 +
 +
<br>
 +
Le rapport ayant était fait durant le week end, cette semaine est donc consacrée à l'élaboration du script pour la vidéo qui sera tourné avec Mr Engels le 24 Février, ainsi qu'à la réalisation de notre soutenance qui est fixée pour le 26 Février. <br>
 +
 +
Rapport : [[Fichier: Rapport_PFE_Rose_Tixier.pdf]]<br>
 +
Code Algorithme : [[Fichier: Algorithme_RDC_23Fev.zip]]

Version actuelle datée du 11 mars 2015 à 12:03



Vidéo HD


Présentation du projet

La Vie Autrement
Groupement des Associations Partenaires d'Action Sociale

Le but principal du projet est de créer un module d'aide au déplacement pour les personnes en fauteuil roulant électrique. Ce module devra être utilisable sur la plupart des fauteuils roulants existants et devra permettre de faciliter la vie des utilisateurs.

Le contexte est le suivant :

Les maisons d'accueil accompagnent des personnes polyhandicapées présentant un handicap physique sévère, un handicap mental plus ou moins sévère et des troubles associés. La plupart des résidents sont donc des utilisateurs de fauteuils roulants électriques. Le besoin principal de ces personnes est de pouvoir se déplacer dans la maison en toute sécurité. Cependant, leur autonomie n'est pas complète et l'aide des accompagnateurs est souvent requise afin d'intervenir ou de prévenir lors de chocs avec des obstacles, murs etc... C'est pourquoi le développement d'un module d'aide au déplacement pour les fauteuils permettrait aux résidents de se déplacer en sécurité avec une détection d'obstacles et de chocs efficace ainsi que des avertissements visuels / sonores afin d'alerter les accompagnateurs en cas de problèmes majeurs.


Avancement du projet

22 -29 Septembre

> Documentation sur les fauteuils roulants électriques en général ainsi que sur les modules d'aide au déplacement existants.
> Première prise de contact par mail / téléphone avec Charly Chevalley ainsi que Corinne Meillier, directrice de la maison du Hameau à Hantay.
> Rédaction d'un cahier des charges du point de vue étudiant, à améliorer après la réunion avec les membres du projet le Lundi 29 Septembre à la maison d'accueil spécialisée.
> Début de réflexion aux potentielles solutions aux problèmes évoqués :
- Chocs avec obstacles : capteurs de chocs TOR;
- Détection de distance d'obstacles : capteurs à ultrasons;
- Détection de couloir étroit / passage de porte : capteurs infrarouges;

29 Septembre - 5 Octobre

MAS Le Hameau

Réunion à la maison d'accueil spécialisée du Hameau avec :

> Le personnel :
- Mme Meillier, directrice de la maison;
- Mme Lescure, ergothérapeute;
- L'homme d'entretien;
- Un appareilleur de chez Facon Médical.
> 3 résidents en fauteuils roulants électriques.

Au cours de cette réunion, nous avons pu écouter et comprendre les besoins des résidents et du personnel concernant le projet.
Nous avons alors appris que les problèmes principaux à résoudre étaient les collisions :

> Avec les murs;
> Avec les radiateurs;
> Lors des passages de portes;
> Entre les résidents (collisions entre fauteuils).

Les résidents ont aussi exprimé des contraintes fortes concernant :

> Le blocage du fauteuil :
- Un résident doit rester maître de son fauteuil, autrement dit, le système développé ne devra pas empêcher le déplacement du fauteuil lors de la détection d'un obstacle par exemple.
> La discrétion du système :
- Les résidents sont déjà conscients de la taille imposante du fauteuil et ne désirent pas d'un système voyant. On évitera aussi d'avoir de lourdes connexions filaires autour du fauteuil.

De plus, le projet a soulevé la question de la garantie des fauteuils électriques. En effet, nous ne devons en aucun cas modifier la structure électronique afin de conserver la garantie constructeur. Pour cela, nous avons appris grâce à l'appareilleur que les fauteuils possèdent une nappe électronique pour les signaux de commande. Il serait donc possible de créer notre propre nappe en remplacement sans affecter la garantie du fauteuil.

A l'issue de cette réunion, nous avons alors plusieurs objectifs à réaliser :

> Rédiger un cahier des charges technique complet pour le projet
> Présenter des solutions possibles et les chiffrer (en temps de travail, prix)

6 Octobre - 11 Novembre

Réunions avec B.Conrard afin de discuter du cahier des charges et des potentielles solutions techniques.
Rédaction d'un cahier des charges précis prenant en compte toutes les contraintes apportées par l'équipe de la maison d'accueil, portant notamment sur la précision des besoins.
Rédaction d'une fiche de solutions potentielles au cahier des charges, prenant en compte différentes technologies de capteurs (ultrason, infrarouge...) et de commande (Arduino, PIC)
Cahier des charges et fiche de solutions potentielles validés par M.Conrard,il nous reste maintenant à présenter ces deux documents à l'équipe de la maison du Hameau.

Cahier des charges au 11 Novembre : Fichier:CahierDesCharges11Novembre.pdf
Solutions au 11 Novembre : Fichier:Solutions11Novembre.pdf

11 - 21 Novembre

Réunion le 20 Novembre avec toute l'équipe de la maison d'accueil spécialisée du Hameau et M Conrard.
Les thèmes abordés ont été les suivants:

-Révision du cahier des charges afin de voir les modifications à apporter
-Présentation des différentes solutions pour le développement du module
-Choix d'une solution

A la fin de cette réunion nous avons convenu d'une solution pour le développement du module : un réseau de capteurs à ultrasons couplé avec une commande Arduino permettant l'adaptation des signaux de commande du FRE.
Nous aurons très prochainement le fauteuil roulant électrique à notre disposition grâce à Martin NICOLAS, ergothérapeute à la maison de la Gerlotte.
De plus, nous avons décidé de développer un robot avec du matériel Bioloid afin de simuler le comportement d'un FRE muni du module d'aide au déplacement. Cela aura pour effet d'apporter un support visuel plus concret aux personnes participant au projet.

Compte rendu complet de la réunion du 20 Novembre 2014:Fichier:Compte rendu réunion 20-11-2014.pdf

26 Novembre - 4 Décembre

Melody Car

Assemblage d'un module Bioloid de base afin de simuler une base roulante similaire à un FRE : la Melody Car.


N.B : Nous avons choisi d'utiliser un unique capteur sur la face avant permettant la détection avant, droite et gauche. Sur le module final, on aura évidemment une détection à l'arrière du fauteuil.

Développement du programme Bioloid avec différents comportements :

- Déplacement avant;
- Déplacement sur la gauche;
- Déplacement sur la droite.

Dans chaque cas, le but est de détecter la présence d'un obstacle dans toutes les directions, de ralentir progressivement selon la distance de ce dernier et de finalement s'arrêter s'il est considéré comme trop proche.

En parallèle, nous avons reçu le FRE (actuellement en C006) avec son chargeur. Il possède une commande par Joystick simple et la possibilité de régler la vitesse.
La majorité des signaux de commande est située dans le boîtier Joystick avec les traitements correspondants pour que le tout soit envoyé aux moteurs.

10 Décembre - 16 Décembre

Rédaction du rapport de mi-projet et préparation de la soutenance du 17 décembre.

Rapport : Fichier:Rapport Intermédiaire PFE GAPAS Rose Tixier.pdf

15 Janvier - 30 Janvier

Partie Electronique/Etude de l'existant:

Ancienne Commande
>Démontage de l’ancienne commande : analyse rapide de la carte en visuel.

On observe 2 nappes :

-1 blanche qui sort du joystick
-1 sortant de la carte électronique vers le reste du fauteuil (qui doit contenir les signaux pour les moteurs).

Nous ne pouvons pas tester l'envoi de signaux car nous n'avons pas d'alimentation pour ce joystick.







Commande actuelle du FRE

>Démontage de la commande actuelle du fauteuil :


Une fois la commande démontée on observe 1 nappe blanche sortant du joystick, ainsi qu'un regroupement de fils de différentes couleurs.
On émet les hypothèses suivantes :

-Selon les inscriptions électronique de la carte, on retrouve en rouge vif : l’alim (Volt), et en noir l’alim -(COM).
-Les inscriptions RM- RM+ LM - LM+ : correspondent à l'envoi des données pour le moteur droit et pour le moteur gauche. </br>
-On interprète RM pour Right Motor et LM pour Left Motor.
-Les couleurs des fils correspondent aux couleurs des boutons sur la commande (pour le support blanc contenant 4 fils) : Changer de vitesse, Klaxon.



Une fois l'étude de la carte réalisée nous avons alors étudié les signaux.
Nous avons observé:

-Les signaux aux bornes de la nappe de communication entre le joystick et la carte électronique
L'étude de la tension aux bornes de la nappe nous a seulement permis de voir les pattes utilisées pour l'envoi des signaux de commande
Nous avons aussi observé les signaux en sortie du composant HE8 (joystick), cependant l'étude de l'évolution de la résistance ne nous a donné aucun résultat exploitable.
-Les signaux allant de la carte électronique vers les moteurs.

Nous avons alors obtenu les résultats suivants: Fichier:Analyse Signaux.xls

Nous avons tout d'abord étudié les signaux en tension avant de les visualiser à l'oscilloscope afin de confirmer notre hypothèse de départ sur les inscriptions de la carte électronique. En étudiant les tensions aux bornes de ces signaux, nous avons pu voir une évolution des valeurs en fonction de la vitesse du fauteuil choisie (entre 1 et 5) comme présenté dans le fichier Excel.

Rapports cycliques vitesses 1 et 5


En étudiant maintenant les signaux PWM : On remarque alors des signaux qui varient en fonction de la vitesse du fauteuil et des différentes rotations possibles, tout comme les tensions mesurée auparavant avec une précision plus importante.
Pour les différentes vitesses étudiées, les rapports cycliques permettant d'effectuer une rotation vers la droite ou la gauche varient peu. Cependant pour avancer ou reculer le rapport cyclique évolue fortement selon la vitesse choisie.


On confirme alors l'hypothèse de départ : Les signaux RM+ RM- LM+ et LM- sont des signaux PWM envoyés aux moteurs du FRE afin de déterminer le sens et la vitesse de rotation des roues. On notera :

- RM+ LM+ : Déplacement vers l'avant
- RM- LM- : Déplacement vers l'arrière
- RM+ LM- : Déplacement vers la gauche
- RM- LM+ : Déplacement vers la droite



Partie Software:

Durant cette période, nous avons pu commencé la partie software avec comme matériel :

- Un Arduino Mega 2560
- 7 capteurs à ultrasons SRF08 (Datasheet : http://www.robot-electronics.co.uk/htm/srf08tech.html)
- Une Breadboard
- Des résistances et de la connectique.

Après l'installation des logiciels nécessaires et une première prise en main de l'Arduino avec des tests (allumage de Leds etc...), nous avons connecté un capteur à ultrasons SRF08 afin de communiquer avec lui.
Ces capteurs fonctionnent en utilisant un bus I²C :

Le bus I²C comprend 2 lignes :

- Un signal de données bidirectionnelles SDA (Signal Data Line)
- Un signal d'horloge de synchronisation bidirectionnelle SCL (Serial Clock Line)
Lignes I2C

Pour faire bref, nous récupérons et nous envoyons des données sur la ligne SDA, et le tout est synchronisé grâce à une horloge (SCL).

Scanning I2C

Afin de communiquer avec un capteur SRF08, nous devons alors écrire sur le bus I²C différentes commandes avant de pouvoir lire les valeurs renvoyées par le capteur.
Avant tout, il faut détecter les adresses I2C de nos différents capteurs. Pour cela, on scanne toutes les adresses possibles jusqu'à détecter un ou plusieurs capteurs.


SRF08 fonctionnement nominal

On utilise alors l'adresse du capteur pour aller interroger le bus I2C.
Nous avons alors tout d'abord lu les valeurs renvoyées par le capteur dans sa configuration nominale (en centimètres) afin de tester son bon fonctionnement. Nous écrivons alors les valeurs reçues sur un terminal via la liaison série.



Après avoir réalisé cette première connexion maître-esclave, nous avons approfondi les possibilités du capteur afin d'apprendre à changer la portée ainsi que le gain. Cela nous permet d'avoir un capteur plus précis sur des distances de détection plus faibles.
Pour cela, nous avons modifié la librairie du capteur afin de créer nos propres fonctions. Nous pouvons désormais changer le gain et la portée d'un capteur, récupérer son adresse I²C et lire son information de distance selon une unité choisie (cm ou inch).


02 Février - 06 Février


Partie Electronique:

Cette semaine nous avons travaillé sur plusieurs points :

-Elaboration des distances de sécurité
-Alimentation de l’arduino
-Récupération des informations pour la commande des moteurs


Elaboration des distances de sécurité :
Distances de sécurité

Afin de pouvoir programmer l’arduino pour que celui-ci arrête le fauteuil, il a fallu revoir les distances d’arrêt du fauteuil lors de la rencontre d’un obstacle.
Nous avons donc déterminé 3 valeurs :

-Distance de détection : Nous avons déterminé une distance de détection afin que l’arduino ne soit pas contraint d’évaluer continuellement la vitesse du FRE.
-Distance de décélération : A partir de cette distance on considère que si le fauteuil va à une vitesse trop élevé, l’obstacle représente un danger et il faut décélérer.
-Distance d’arrêt : A cette distance il y a un grand risque de collision, on décide d’arrêter le fauteuil.







Alimentation de l’arduino:
Afin d’alimenter la carte arduino plusieurs solutions on été envisagées :

-Alimentation directe à partir des batteries
-Alimentation à partir de la carte électronique du joystick
-Alimentation par pile (batteries) externe

En étudiant la carte électronique du joystick nous nous sommes aperçu qu’il était possible de se relier directement. Cependant la tension prise à ce point est de 24 V et la tension d’alimentation de l’arduino est comprise entre 7 V et 12 V, il nous faut donc un circuit d’adaptation de tension. Pour se faire nous allons utiliser le 7812 qui nous permet de transformer du 24 V en 12 V.

Nous avons donc du dimensionner les condensateurs permettant de réaliser le schéma suivant :
Alimentation de l'Arduino


Récupération des informations de commande des moteurs :
Afin de pouvoir évaluer la vitesse du fauteuil nous devons récupérer les signaux de commandes :

-Récupérer les commandes moteurs directement à partir de RM +-/ LM+-
-Récupérer les commandes provenant du joystick

La solution qui a été choisie est de récupérer les signaux provenant du joystick, en effet récupérer les signaux de commandes des moteurs présentait l’inconvénient de devoir réaliser un circuit d’adaptation de puissance plus difficile à mettre en œuvre.
Les signaux seront récupérés sur les entrées ANALOG IN, cependant la carte arduino ne présentant pas de sortie ANALOG OUT les signaux de commande que nous devons envoyer seront générés en PWM, signal qui sera ensuite filtré par un circuit RC suivi d'un AOP en suiveur afin d’avoir un signal constant. Le contrôle de la tension envoyé se fera en fonction du Duty Cycle de la PWM.

Le schéma du montage autour de l'arduino est le suivant :

Arduino‎

Partie Software :

Mise en réseau des capteurs à ultrason

2 SRF08 en réseau

Afin de tester les capteurs en réseau, nous avons relié 2 capteurs SRF08 avec un Arduino. Afin d'utiliser un autre capteur, il est nécessaire de modifier son adresse I²C, sinon il restera à l'adresse fixée par défaut (0xE0).
Pour ce faire, il suffit de connecter le capteur seul avec l'Arduino et d'aller écrire une séquence de données dans le registre de commande (voir datasheet).
Une fois les adresses des 2 capteurs dissociées, nous avons pu modifier la range et le gain de chacun afin d'observer leur bon fonctionnement en réseau. On modifie ici la range pour atteindre les 2 mètres de portée et on observe les résultats : Le capteur est précis jusqu'à 2 mètres (on mesure 196cm en valeur réelle pour ~~200cm de relevé capteur).




Montage 6 SRF08 + Arduino

Après cette mise en réseau de 2 capteurs, nous avons décidé de tester l’ensemble des capteurs. Pour cela, après avoir soudé des connecteurs sous chaque capteur, on modifie alors l’adresse de chacun afin de pouvoir les différencier sur le bus I²C. Au niveau du code, on déclare alors un objet SonarSRF08 pour chaque capteur impliqué dans le réseau. On modifie alors la range et le gain de chaque capteur et on affiche la valeur récupérée dans le port série de la même façon qu’auparavant.


6 SRF08 en réseau



Découverte du PWM avec Arduino

Signal PWM créé via Arduino
Signal PWM lu via Arduino


Ensuite, nous avons décidé d’apprendre à utiliser des signaux PWM (lecture et écriture) afin de pouvoir récupérer les signaux RM et LM et de les modifier. Avec l’arduino Mega 2560, nous avons pu récupérer et créer des signaux PWM simplement et les visualiser sur oscilloscope. Nous avons alors cherché à modifier la fréquence du signal PWM écrit afin de correspondre à la fréquence des signaux RM et LM relevés. Avec l’Arduino Mega, il nous a été impossible de modifier les signaux PWM créés par manque de documentation. Cependant, ayant un arduino UNO à disposition, nous avons alors décidé de l’utiliser. Tous les programmes précédents étant fonctionnels, nous avons pu réussir à modifier la fréquence d’un signal PWM créé en utilisant un prescaler. Ce qui signifie que la fréquence du signal créé sera fonction de la fréquence maximale de l’horloge interne du microprocesseur. De plus, nous avons réussi à afficher la valeur de la fréquence du signal mesuré ainsi que son duty cycle.



Malheureusement, les valeurs de l’horloge interne et des différents prescaler ne nous permettent pas de recréer un signal PWM avec la fréquence désirée.

- Fréquence des signaux RM+ RM- LM+ LM- : 19,6 kHz
- Horloge interne Arduino : 16MHz avec des prescaler de 2, 4, 8, 16 et 32.

Cette solution n’est donc pas adaptée et quand bien même, un problème de puissance se serait posé (les câbles des signaux RM et LM possèdent une puissance bien trop importante pour qu’un Arduino les reçoivent et/ou tente d’un écrire des similaires).

Signal PWM lu via Arduino

Après réflexion, la solution est alors d’aller récupérer les signaux continus sortant de la nappe du joystick. Ces signaux, variant de 1,1 V à 3,9V ont une puissance acceptable pour les recevoir avec l’arduino. Il suffirait alors d’aller écrire de nouveaux signaux en fonction des informations capteurs reçues.
Problème : on ne peut pas créer de signaux analogiques avec un arduino.
Solution : Nous allons créer des signaux PWM et ajouter un filtre RC et un AOP monté en suiveur. De cette façon, on crée un signal PWM avec un duty cycle maîtrisé via le code Arduino, qui sera alors converti en une tension continue d’une valeur comprise entre 0 et 5V (signal PWM de l’arduino entre 0 et 5V, 0% = 0V, 100% = 5V).
Par exemple, avec un signal PWM de 50% de duty cycle, on obtient le signal continu suivant (d’environ 2,5V constant).


09 Février - 13 Février


Partie Electronique:

Une fois la solution des signaux PWM convertis en signaux continus trouvée, nous allons alors devoir créer des signaux continus compris entre 1,1V et 3,9V. Afin d’être le plus précis possible, nous avons testé différentes valeurs de rapport cyclique afin de vérifier l’exactitude de la théorie.

La théorie étant : on écrit une valeur entre 0 et 255 sur un port PWM, qui est le reflet du rapport cyclique (0 pour 0%, 255 pour 100%) pour un signal variant de 0 (état bas) à 5V (état haut).
Nous avons alors remarqué une différence notable qui pourrait nuire au projet si non détectée : écrire 255 dans un port PWM nous permet d’obtenir une tension continue (après filtrage) de 5,24V, et non de 5V. Etant donné la faible plage des valeurs à lire et à créer (1,1 =>3,9V), une bonne précision est indispensable pour le bon fonctionnement du projet.
Nous avons alors testé plusieurs valeurs clés afin de déterminer la table de corrélation des valeurs PWM suivantes : Fichier:Corrélation PWM.xls

Outre les signaux PWM à générer, il sera aussi nécessaire de lire des signaux continus avec l’arduino. Pour cela, lors de la lecture, nous allons recevoir une valeur comprise entre 0 et 1023, de même : 0 pour 0V et 1023 pour 5V. Là aussi, nous avons décidé de vérifier l’exactitude de ces données de la même façon qu’avec les signaux PWM : Fichier:Valeur Analog.xls. On remarque bel et bien là aussi un léger décalage, le 5V est en réalité du 5,15V.

En attendant de recevoir les composants nous avons réfléchi à l'implantation de notre module entre le joystick et la carte électronique contenue dans le boitier de commande du FRE. Pour cela nous allons connecter une nappe sortant du joystick et allant vers une carte électronique, puis les signaux à traiter seront directement envoyés sur l'arduino. Une fois traités, les signaux seront redirigés vers la carte électronique à partir de laquelle une nappe les relira jusqu'à la carte électronique du boitier de commande du FRE.
Le schéma suivant illustre la description:

Implantation du module


Partie Software:

Durant cette période du projet, nous avons décrit l’algorithme du réseau de capteurs en pseudo-code disponible ici : Fichier:Algorithme RDC Pseudo Code.pdf
Les fonctions principales sont alors de scanner de façon continue les valeurs renvoyées par les capteurs SRF08. En fonction de ces informations et de l’information analogique récupérée (reflet de l’inclinaison du joystick), nous appliquons alors une décélération proportionnelle si nécessaire (si l’obstacle est considéré trop proche : voir distances de détection).

Evolution Tension Distance Marche Avant


Afin d’éviter le blocage, on ne prend en compte l’information des capteurs à l’avant du fauteuil que lorsque le joystick est orienté vers l’avant. De même pour chaque orientation. De plus, si l’environnement ne présente aucun obstacle vers l’avant ou vers l’arrière, nous devons alors recopier la valeur analogique lue en entrée vers un signal PWM qui sera ensuite filtré, de même pour les côtés.
Afin de créer une décélération assez confortable, nous avons décidé de la faire de façon linéaire.

Pour l’exemple ici (en marche avant) : on crée la courbe de décélération en fonction des distances de sécurité imposées. Pour la marche avant, on a choisi de s’arrêter lorsqu’un obstacle serait détecté à 45cm ou moins et on commencerait à décélérer lorsqu’un obstacle serait présent à moins de 100cm.

La courbe nous montre alors que de 0 à 45cm, la marche avant est bloquée (2,5V : le joystick est en position milieu entre l’avant et l’arrière). Puis lorsque l’obstacle s’éloigne, on autorise une vitesse plus élevée, jusqu’à un maximum de 3,9V à 100cm, qui restera à 3,9V après 100cm car c’est la vitesse maximale en marche avant du fauteuil.

On traduit alors l’équation de la courbe comme suit : Y = 0,025X + 1,375 avec Y la tension PWM résultante en Volts et X la distance renvoyée par le capteur en cm.

Montage de test de l'algorithme


Une fois avoir déterminé ces différentes notions, nous avons pu implémenter et tester l’algorithme du réseau de capteurs. Pour cela, nous avons modifié notre montage afin de regrouper les capteurs par côté (avant, arrière, droite et gauche). Nous avons alors relié 2 leds afin de visualiser le changement d’intensité de couleur (leds reliées au signal PWM créé) lors de la détection d’obstacle. Et pour simuler l’inclinaison du joystick, nous envoyons dans les ports analogiques du 3,3V (compris dans l’arduino) pour gérer l’avance et le déplacement à droite, et nous laissons les ports vides (tension de 0,2V environ) pour simuler un déplacement en arrière et à gauche.



Obstacle arrière détecté liaison série


De plus, afin d’affiner les tests, nous imprimons sur la liaison série toutes les informations circulant durant le déroulement du code. De cette façon, nous interprétons les différents scénarios testés. Dans cet exemple, nous détectons un obstacle à l’arrière du fauteuil, les étapes sont alors les suivantes :

• Affichage de la distance de l’obstacle : 84cm
• Affichage de la valeur analogique lue en A0 : 189 : équivalent à 0,96V
• On calcule alors la valeur du signal PWM à générer en Volts : 1,52V équivalent à 72 pour l’arduino
• On fait le choix de décélérer, c’est-à-dire d’appliquer le signal PWM calculé plutôt que de recopier l’entrée car le joystick est considéré comme trop incliné (l’utilisateur veut aller vite mais l’obstacle est trop près, on force alors la décélération).

Dans un autre cas, si le joystick était moins incliné (l’utilisateur va moins vite), on aurait conservé la valeur actuelle lue sur les ports analogiques, l’obstacle est encore trop loin et on ne va pas assez vite pour que ce soit dangereux.

16 Février - 20 Février


Partie Electronique :

Durant cette semaine nous nous sommes principalement concentrés sur l'élaboration de la carte électronique permettant de contrôler la vitesse du fauteuil.
Nous avons obtenu le résultat suivant:

carte électronique reliant le joystick à la carte de commande du FRE


Lors de la réalisation de cette carte nous avons rencontré plusieurs problèmes:

-La disposition des fils dans le connecteur HE8 d’entrée est différente de celle dans le HE8 de sortie : Inversion des signaux (1=2, 3=4 etc…)
-Problème de masse entre l'Arduino et la carte de commande
-Découverte du mode d’initialisation du joystick: Le joystick reçoit du 5V par la carte électronique, le divise par 2 pour en faire sa valeur de référence à l’état nul du joystick, et l’envoie sur toute les pattes. S’il ne le reçoit pas le fauteuil passe en mode de défaillance : les leds oranges et rouges clignotent quand il y a une tension inférieure à 1V ou supérieure à 4V sur les pattes Avant/Arrière ou Droite/Gauche.


Une fois tout ces problèmes réglés nous avons pu nous pencher sur la question de l'alimentation de l'Arduino.
Comme dit précédemment dans le wiki, nous voulons alimenter l'Arduino à partir des batteries du FRE. Nous avons donc testé le montage avec un 7812, ayant quelques problèmes nous avons ensuite testé avec un 7805, dans ce cas l'Arduino ne fournit plus du 5V mais du 4,38V ce qui ne permet pas d'aliementer correctement le RDC et pose des problèmes au niveau du code réalisé pour contrôler le FRE. D'autre part le 7805 chauffe beaucoup trop et risque donc de dysfonctionner au bout de quelque temps.
Enfin nous avons décidé de tester avec une alimentation externe et nous avons obtenu de bons résultats.

Nous devons encore retester le montage d'alimentation avec un 7812 fonctionnel.


Partie Software :

Nos efforts ont été concentrés sur la partie électronique / développement de la carte durant cette semaine. Cependant, nous avons pu revoir et tester l'algorithme développé en situation réelle une fois la carte terminée.
En alimentant notre système par un PC afin de tester dans des conditions optimales, nous avons alors piloté le fauteuil en imposant un environnement d'obstacles divers. Le fonctionnement de base était satisfaisant, le fauteuil ralentissait lors de l'approche d'un obstacle et le déplacement restait fluide dans la plupart des cas. Cependant, en vitesse élevée, l'arrêt se faisait trop tard, ce qui implique un danger lors du fonctionnement.
Pour pallier cela, nous avons modifié la théorie de nos courbes de décélération. Nous avons alors augmenté la distance de décélération ainsi que la distance d'arrêt. Après différents tests, il s'est avéré que le danger était écarté en vitesse maximale, mais les distances d'arrêt en vitesse faible étaient trop importantes et beaucoup de situations de blocages étaient détectées.

Ajustement de l'évolution tension / vitesse : Marche avant

Nous avons alors finalement ajusté les courbes pour la configuration actuelle :
• Avant Slow : 150cm - Avant Stop : 45cm
• Arrière Slow : 130cm - Arrière Stop : 45cm
• Côté Slow : 100cm - Côté Stop : 15cm

De cette façon, la décélération est plus agréable et plus précise. De plus, le déplacement est plus permissif en vitesse faible et la sécurité est renforcée en vitesse élevée.

En résumé, après différents tests du système (avec l'arduino alimenté par un PC ou une batterie externe), nous avons développé un module fonctionnel avec les moyens à notre disposition. De nombreuses perspectives d'améliorations sont possibles et nécessaires pour le bon fonctionnement sur la durée du système.

23 Février - 27 Février


Le rapport ayant était fait durant le week end, cette semaine est donc consacrée à l'élaboration du script pour la vidéo qui sera tourné avec Mr Engels le 24 Février, ainsi qu'à la réalisation de notre soutenance qui est fixée pour le 26 Février.

Rapport : Fichier:Rapport PFE Rose Tixier.pdf
Code Algorithme : Fichier:Algorithme RDC 23Fev.zip