Projets:Appui-tete motorisé
Description du projet
Créer un support à bas-coût permettant de soutenir et faire pivoter la tête d’une personne dont l’insuffisance musculaire au niveau du cou ne lui permet ni un soutien ni une rotation naturelle de gauche à droite (la rotation n’étant pas impossible articulairement mais uniquement musculairement). Mathilde ne souhaite pas un énième bouton de télécommande pour le contrôle de cette fonctionnalité car elle en a déjà beaucoup et ne peut pas toujours y accéder selon les circonstances.
Cahier des charges
Analyse de l'existant
Equipe (Porteur de projet et contributeurs)
- Porteurs du projet :
Mathilde Fuchs
- Concepteurs/contributeurs :
Philippe Pacotte, Stéphane Godin, André Bécot, Jean-Pierre Legrand, Yves Le Chevalier, Christian Fromentin, Danke, Francis Esnault, Jean-François Duguest, Brice Besançon, Yohann Véron,
- Animateur (coordinateur du projet)
Delphine Bézier
- Fabmanager référent
Delphine Bézier
- Responsable de documentation
Matériel nécessaire
Outils nécessaires
Coût
Délai estimé
Fichiers source
Etapes de fabrication pas à pas
Étape 1 - Vue légendée du prototype final
Étape 2 - Fabrication de la pièce de liaison entre rail et support réglable de l'appui-tête du fauteuil
La pièce de liaison entre le rail et le support réglable de l'appui-tête fixé sur le fauteuil a été réalisé à partir de trois fers plats soudés entre eux. Se référer au fichier "piece entre rail et fauteuil.stl"
File:support entre rail et fauteuil.stl
Étape 3 - Fabrication du rail
Pour fabriquer le rail , prendre la plaque d'aluminium 4G (voir image pour les côtes) et ajuster la courbe à la ceintreuse comme sur le fichier STL. IL est éventuellement possible de faire un gabarit en carton ou imprimé en 3D pour vérifier et ajuster la courbe.
Voir la manipulation en vidéo ici :
Percer ensuite des trous et les filter pour les butées de fin de course dont la position est à ajuster selon le degré de mouvement voulu ou l'angle de rotation de la tête qui doit rester confortable pour l'usager
Étape 4 - Fabrication de la rotule
En fonction de l’appui-tête de la personne, il faudra ajuster la taille de la rotule. Si le modèle correspond à celui-ci rapprochez-vous d’un tourneur pour la réaliser en aluminium 4G suivant le modèle STL (rotule.stl) . Il faudra ensuite la percer et filter (pour une vis CHc-M5X15)pour permettre sa fixation. Attention ajout d’un ergo en acier sur l’embase de la rotule parallèle à la vis et qui va également sur le sur le support de la rotule pour éviter que la rotule tourne sur elle-même.
Étape 5 - Fabrication de la plaque de fixation de la rotule et des galets
Fabriquer la plaque de fixation de la rotule avec une plieuse en se basant sur le fichier plaquerotule.stl.
Fabriquer les 4 galets (galets à réa de 5mm -le creux intérieur en largeur, et l’épaulement du réa de 2.5mm) Tourner en pom C (pom C=matériau plastique) les 4 galets de diamètre extérieur 15mm et 10mm en diamètre intérieur et les aléser pour les roulements qui viennent se loger aux deux extrémités.
File:galet_perce.stl File:plaquerotule.stl
Étape 6 - Impression des pièces en 3D (faire simulation temps d'impression dans Cura)
Imprimer l’ensemble des pièces situées dans le dossier « STL/A imprimer »
- Matériau du filament : de préférence ABS ou PLA
- Paramétrage sur Cura : Densité : 90 % de remplissage, qualité 0.2.
Il s'agit d'imprimer les butées, le support moteur, le support à capteur de fin de course et le capot protecteur
File:support_capteurs_fin_course.stl
Étape 7 - Réalisation du circuit électronique
- PCB (auquel il faut ajouter le circuit on/off )
- Fichier arduino (code)
Réaliser ou faire fabriquer le circuit imprimé en vous référant au schema et PCB (Appuiteteschemav1.2.jpg, appui-tete-PCBv1.2.png) ci-contre.
Téléverser le code sur la carte Arduino.
#include "cli.h" #include "config.h" #include "command.h" // task definition for periodic scheduling 1ms //void motorControl(Task* me); //Task schedule (1, motorControl); void setup() { // intialize command cli_open (); // initialize motor load_config (); get_stepper()->setMaxSpeed (get_speed()); get_stepper()->setAcceleration (get_accel()); // initialize led pinMode(LED, OUTPUT); digitalWrite (LED, LOW); // initialize buttons pinMode(BTN_RIGHT, INPUT); pinMode(BTN_LEFT, INPUT); // stepper microstep pinMode (MOTOR_MS1, OUTPUT), pinMode (MOTOR_MS2, OUTPUT); digitalWrite (MOTOR_MS1, LOW); // todo place config in config.h digitalWrite (MOTOR_MS2, LOW); //endstop pinMode (ENDSTOP_LEFT, INPUT), pinMode (ENDSTOP_RIGHT, INPUT); // run scheduler //SoftTimer.add(&schedule); } // function :SensorLeft // // Description : // return te logic state of the left sensor // // Return : // true if the left sensor is active. Otherwise false boolean SensorLeft () { if (get_force_left () > 0) return (true); return (digitalRead (BTN_LEFT)== BTN_LEFT_ACTIVE_STATE ? true : false); } // function :SensorRight // // Description : // return te logic state of the right sensor // // Return : // true if the right sensor is active. Otherwise false boolean SensorRight() { if (get_force_right () > 0) return (true); return (digitalRead (BTN_RIGHT) == BTN_RIGHT_ACTIVE_STATE ? true : false); } // function :EndStopLeft // // Description : // return the logic state of the left endstop sensor // // Return : // true if the left endstop is active. Otherwise false boolean EndStopLeft () { return (digitalRead (ENDSTOP_LEFT) == ENDSTOP_LEFT_STATE ? true : false); } // function :EndStopRight // // Description : // return the logic state of the right endstop sensor // // Return : // true if the right endstop is active. Otherwise false boolean EndStopRight () { return (digitalRead (ENDSTOP_RIGHT) == ENDSTOP_RIGHT_STATE ? true : false); } int RIGHT_MOVE = 1; int LEFT_MOVE = -1; int STOP_MOVE = 0; //void turnOn(Task* me) //{ //} // Function: motorControl // // Description : // The function is called every 1 ms. check command sensor and enstop and control the motor // // //void motorControl(Task* me) void loop () { AccelStepper *pstepper = get_stepper (); // put your main code here, to run repeatedly: int step = 0; // decide move int move = STOP_MOVE; boolean right = SensorRight (); boolean left = SensorLeft (); boolean endl = EndStopLeft (); boolean endr = EndStopRight (); if (endr || endl) digitalWrite (LED, HIGH); else digitalWrite (LED,LOW); //endr = false; //endl=false; if (right == left) { move = STOP_MOVE; //digitalWrite(LED, LOW); } else if (right==true) { if (endr) { move=STOP_MOVE; } else { move = RIGHT_MOVE; pstepper->move (20000); //digitalWrite(LED, HIGH); } } else if (left == true) { if (endl) { move=STOP_MOVE; } else { move = LEFT_MOVE; pstepper->move(-20000); //digitalWrite(LED, HIGH); } } // motor control if (move != STOP_MOVE) { pstepper->run(); } else { //stepper1.disableOutputs(); pstepper->setSpeed(0); pstepper->setCurrentPosition (0); } // process command CLI.process(); }
La carte arduino est alimentée en 5V depuis la sortie 5V de la carte easy driver. Raccorder le 24V du PCB aux batteries du fauteuil (voir Schema_batterie.jpg).
Ajouter le circuit interrupteur ON/OFF led en image ci-contre afin de pouvoir éteindre le dispositif et ne pas consommer de batterie pour rien :)