Skip to main content

Base de Chevet Roulante

Auteurs : Thindeka MOCUMBI TOMÀS, Alexandre GUILLET-RICONDA & Jihen DAGHARI

Mention : M1 MeDH [Mechatronic Design for Health]

UE : UM4RBM21 - Mini Projet d'Ingénierie

Date : 1 Mai 2026

Lieu : Fablab Sorbonne Université 

Objectif : Concevoir une table de chevet roulante autonome, commandée à distance. Ce dispositif médical à domicile est destinée à amener automatiquement la table avec le matériel de sondage à l'utilisateur grâce à un système de navigation intelligent.

Architecture Générale

Le système repose sur une chaîne de commande intégrée :

  • Interface : Communication à distance (cmd : "viens", "repart", "ouvre/ferme tiroir").

  • Cerveau : Microcontrôleur Arduino MEGA 2560 

  • Navigation : Évitement d'obstacles par 4 capteurs ultrasons HC-SR04 et suivi du lit par 2 capteurs ToF VL53L0X pour le parallélisme.

  • Motorisation : 4 moteurs à courant continu avec encodeurs, pilotés par deux drivers MDD3A (2x3 A).

Liste du Matériel (BOM)

Composant Modèle / Référence Quantité
Contrôleur Arduino Mega 2560

1

Moteurs Motoréducteurs + encodeurs FIT 0521 (6 Vcc) 4
Supports Moteurs Paire de supports moteurs 2676 2
Roues Mecanum Ø65 mm (2 Droites / 2 Gauches)

4

Drivers Commande moteur CC 2x3 A MDD3A 2
Distance (Ultrason) Capteurs Ultrasons HC-SR04 4
Distance (Laser) Capteurs ToF VL53L3CX (Fermion) 2
Force Jauge de contrainte + Module HX711 1
Contact Microrupteurs SPS75GL à roulette

8


Guide de Montage

Modélisation 

Pour rendre la base adaptable à n'importe quelle table de chevet, nous avons conçu un système de boîtes empilables via boxes.py découpées au laser au Fablab. Nous avons opter, après plusieurs recherches et benchmarking, pour du bois MDF de 6 mm pour la rigidité et le poids que la table devrait supporter. 

Au départ l'idée était de partir sur un système de fixation par tenon mortaise avec verrouillage par clavette permettant d'ajuster la hauteur en empilant des modules de 10 à 50 cm.

De nombreuses propositions ont été faites avant, durant et après les découpes avant d'arriver au résultat le plus optimal.

Génération des structures (Boxes.py)

Nous avons segmenté la table en trois fichiers distincts, correspondant aux trois étages de la table (Box 1, 2 et 3). La Box 1 (Base technique - fichier universal box) où sera déposé l'électronique de puissance (drivers, Arduino MEGA) et les Box 2 & 3 (Stockage - fichier sliding drawer) qui sont dédiées aux tiroirs : un conteneur poubelle et un pour le matériel de sondage.

image.png   image.png  image.png

Post-traitement (Inkscape)

Les fichiers SVG générés ont été importés dans Inkscape, logiciel de dessin, pour ajouter des fonctionnalités non présentes dans le générateur de boîtes qui nous permettra d'empiler chaque étages. Nous avons ajouté manuellement les emplacements pour la liaison base-boîte.

Ce logiciel est le meilleur éditeur de graphisme pour procéder à certains emboitement non proposé sur Boxes.py 

Les cercles sur le bottom de la box 1 ont été dessinés pour correspondre au chassis en plexiglas (décris plus bas) où seront fixés les moteurs et roues. Le cercle central servira à faire passer les cables des moteurs et encodeurs et les 4 autres à faire passer les vis qui seront fixer à la boite en plexiglas. 

Enfin, nous avons ajouté des ouvertures sur les côtés pour les 2 TOF et quatre Ultrasons.

Dans cette boxe, l'ensemble de l'électronique sera regroupé, on retrouve les 2 drivers, l'arduino MEGA et la breadboard.

image.png 

Découpe Laser

Pour peaufiner le tout les fichiers ont été redistribués sur Trotec (logiciel/machine laser du Fablab) pour passer à la découpe. Nous avons tout de même arranger le jeu pour l'emboîtement, 0,09 mm pour les structures fixes et 0,15 mm pour les parties mobiles en amont, créant un jeu pour que les tiroirs coulissent sans forcer.

Le logiciel utilise un code couleur pour chaque actions. Les lignes de découpe sont en rouge, tandis que les lignes de gravure pour le marquage de surface sont en noir.

Rappel étape d'utilisation de la découpe Laser

  1. Préparation : Positionnement de la plaque de MDF sur la grille de découpe.

  2. Lancement : Lancement de l'impression après ajustement des paramètres.

  3. Découpe : La machine effectue les découpes (contours des pièces).

  4. Assemblage : Une fois les pièces refroidies, nous avons procédé à l'assemblage. 

Guide d'assemblage

Création du châssis (Solidworks)

La base a été dimensionnée pour être en adéquation avec l'espace de vie de l'utilisateur (chambre) et des mesures précises ont été prise pour le perçage des 16 trous des supports moteurs. Les trous ont été percés légèrement plus petits que la vis pour un taraudage optimal. On a ajouté à cela un trou central qui servira à faire passer les fils des moteurs et encodeurs.

image.png

Les 4 troues pour fixer la box1 à notre chassis ont été fait dans un deuxième temps après avoir bien dimensionner la boxe directement sur Inkscape, mais aurait pu être fait directement dans notre premier fichier Solidworks. Pour ce qui est de la taille des troues pour le taraudage, le principe est décrit ci-dessous avec comme exemple les 4 troues pour fixer le chassis à la box1 : 

on va choisir un diamètre légèrement inférieur à 8 mm (pour des vis M8) afin de permettre un taraudage dans le plexiglass. L'idée est d'avoir la boite avec 4 trou reparti de 8 mm, le plexi avec un trou de 6,8 mm pour procéder à un taraudage de 1,2 mm pour qu'elle se visse. Autrement-dit, pour une vis M8, le trou de perçage standard est de 6,8 même : on fait Ø vis - Pas de vis, soit .

Fixation des composants

On fixe les supports moteurs en dessous de la base avec 4 vis M3 à tête plate de 8 même de chaque coté de la base, soit 16 vis M3, à l’aide des troues taraudés précédemment (le côté du support doit correspondre au côté de la base). on effectue cela par le dessous pour que les têtes de vis se posent sur le support et le bloque.

On fixe ensuite les moteurs aux support avec à chaque fois 2 des vis fournies avec les moteurs. 

Faire attention à bien mettre les fils de tels sortent qu’il regarde le rond central.

    Retour d'expérience et bonnes pratiques

    BP GUIDE DE MONTAGE 

    L'épaisseur du trait de coupe laser varie selon le matériau, et pour un emboîtement dessiné pile à 6 même pour du MDF de 6 même sera trop lâche.

    Solution : tester le "burn sur une pièce témoin. Nous avons validé 0,09 même pour que le système tienne sans forcer.

    Lors de l'ajout des trous de taraudage et des ouvertures capteurs, risque d'alignement.

    Solution : utiliser l'outil Inkscape pour mesurer et mettre à même hauteur les trous et les découper avant les contours pour éviter que la pièce ne bouge et ne décale le tout.

    BP GUIDE D'ASSEMBLAGE 
    Lors du montage d'une roue à un moteur, certains pas de vis ont été endommagés. 

    Solution : nouveau perçage suivi d'un taraudage à une taille supérieure et utilisation d'un système vis/boulon sur le Plexiglas le traversant.

    Fonctionnement des mécanismes

    Roues mecanum

    Le déplacement de la base repose sur quatre roues Mecanum pilotées indépendamment par des moteurs à courant continu équipés d'encodeurs.

    La "Règle de Trois" Odométrie

    Pour que le robot sache où il est, il compte les impulsions (tics) générées par les encodeurs à chaque rotation moteur. Chaque rotation complète d'une roue de correspond à un déplacement linéaire de . Avec impulsions par tour, chaque "tic" représente environ (). C'est cette précision qui permet au robot de s'arrêter pile à la bonne distance.

    Modes de Pilotage

    Le mode "Aveugle" - distance connue : 

    On utilise ce mode pour les trajets prédéfinis (ex: sortir de son rangement de ). On convertit la distance cible en tics (ex: ). L'Arduino envoie un signal aux moteurs ( analogWrite(pinM1A_FL, vitesseMoteur); digitalWrite(pinM1B_FL, LOW); ) et le programme compare en temps réel la valeur des encodeurs à la cible. Une fois les tics atteints, les moteurs sont coupés ( digitalWrite(pinM1A_FL, LOW); digitalWrite(pinM1B_FL, LOW); ).

    Le Mode "Réactif" - distance inconnue :

    On utilise ce mode pour l'interaction avec l'utilisateur ou l'évitement d'obstacles (ex: le capteur de force ou le TOF). Le robot commence à bouger dans la direction demandée. Le mouvement continue TANT QUE une condition externe est vraie.

    Exemple : "Avancer tant que la valeur du capteur de force est " ou "Aller à gauche tant que le capteur TOF mesure ".

    Dès que la condition n'est plus respectée (on lâche la poignée ou on approche d'un mur), le robot s'arrête instantanément.

    Système de déplacement : Base Holonome

    Nous avons opté pour une configuration à 4 roues Mecanum (65 mm) permettant des déplacements omnidirectionnels, c'est-à-dire des translations selon 2 axes différents et des rotations. 

    Mouvement avant/arrière

    Screenshot 2026-05-10 at 4.08.31 PM.png

    Mouvement gauche/droite

    Screenshot 2026-05-10 at 4.11.31 PM.png

    Le contrôle de la base holonome repose sur le mixage des vitesses des 4 moteurs. Pour une translation latérale, les moteurs d'une même diagonale tournent en sens inverse des deux autres. L'Arduino MEGA calcule en temps réel les impulsions des encodeurs pour s'assurer que les quatre roues tournent à la même vitesse. Il garantit une trajectoire parfaitement droite malgré les frottements du sol et convertit les commandes "viens/repart" en vecteurs de vitesse pour chaque roue. En cas de dérive, ce sont les capteur ToF qui ajustent la vitesse différentielle des moteurs pour maintenir la table parallèle au lit.

    Système d'ouverture et sécurité

    Flux des informations 

    Entrée (Capteur de force) -> HX711 -> Arduino -> Consigne de vitesse négative -> Recul de la base

    L'idée est d'implémenter la logique inverse pour dégager l'espace : Lorsque l'utilisateur tire la poignée, la base recule automatiquement pour accompagner le mouvement d'ouverture. Nous avons utilisé un capteur de force, un système semi-passif, comme une jauge de déformation (avec module HX711) sur la poignée.

    Principe

    Pour que le capteur fonctionne, il doit subir une flexion. Quand tu tires la poignée : La poignée tire sur le côté droit du capteur. Le côté gauche du capteur ne bouge pas (il est vissé au tiroir). La barre en métal se tord (flexion) entre les deux. L'Arduino détecte cette torsion et dit au robot : "Recule !"

    Le capteur est monté en façade, en interface entre la poignée et le tiroir. Le côté 'fixe' est boulonné à la structure du tiroir via des cales de . Le côté 'mobile' supporte uniquement la poignée. La force de traction de l'utilisateur devient une déformation mécanique mesurable par le module HX711, tout en gardant une butée physique (le bois du tiroir) pour protéger le capteur d'une traction supérieure à

    image.png     IMG_1596.jpg

    Guide d'assemblage 

    L'assemblage utilise un montage dit en "porte-à-faux" pour permettre la flexion de la jauge.

    Côté Réaction (tiroir) : fixation par 2 vis M4 traversant la façade et deux entretoises en MDF de 6 mm chacune. Ce déport de 12 mm crée l'espace de déformation nécessaire.

    Côté Action (utilisateur) : une plaque de MDF (poignée) est fixée à l'autre extrémité du capteur via les perçages M5.

    Côté Utilisation (fonctionnement) : Lorsque l'utilisateur tire sur la plaque mobile, la barre de 80 mm subit une contrainte de traction transmise au pont de Wheasthone. 

    Percer un trou de 10 mm dans la façade du tiroir pour faire passer les fils à l'intérieur.

    Les vis M4 (25 mm) traversent tout (façade + cales + capteur) et les vis M5 (- 20 mm) fixent ta poignée (1 au capteur. 

    Sens de vissage :

    • Liaison Châssis-Capteur (M4) : Insertion par l'intérieur. L'ordre est : Tête de vis > Façade > Cales > Capteur.

    • Liaison Capteur-Poignée (M5) : Insertion par l'extérieur. L'ordre est : Tête de vis > Poignée > Capteur.

    Assurez-vous que ces vis ne soient pas trop longues pour ne pas venir buter contre la façade du tiroir derrière. Elles ne doivent toucher que la poignée et le capteur.

    Logique et Asservissement

    Le module HX711 amplifie ce signal pour l'Arduino MEGA. 

    Option A (Seuil fixe) : Si la force > 200g, la base recule à vitesse constante.

    Sécurité de fin de course : Pour éviter que la base ne continue de reculer une fois le tiroir totalement ouvert, nous avons ajouté un microrupteur en fin de glissière. S'il est activé, il coupe immédiatement le recul des moteurs, même si une force est toujours détectée sur la poignée.

    Par ailleurs, la sécurité est primordiale pour un dispositif médical à domicile. Pour assurer la sécurité de l'utilisateur des capteurs de choc physiques (bumpers) ont été intégré. Ces 8 microrupteurs à roulette (SPS75GL) ont été intégrés à l'avant et à l'arrière de la base.

    S'ajoute à cela, quatre capteurs ultrasons répartis de chaque côté de la base déclenchant l'arrêt immédiat en cas d'obstacle détecté à proximité.

    Schéma de Câblage 

    ????????

    Software to Hardware

    Pipeline Global

    Le système fonctionne comme une boucle fermée où l'information circule de l'utilisateur vers la mécanique :

    Entrée Utilisateur : Interaction physique via les Boutons ou le Capteur de force.

    Acquisition (Arduino) : Lecture instantanée des Encodeurs, des capteurs Ultrasons et du ToF.

    Traitement (Prise de décision) : L'Arduino analyse si le chemin est libre et calcule la puissance nécessaire pour chaque roue.

    Actionnement : Envoi des signaux PWM aux Drivers moteurs qui font tourner la Base roulante.

    Supervision (Python) : En parallèle, l'Arduino envoie les données via le port Série vers un ordinateur/interface Python pour le diagnostic.

    Élément Rôle Principal Détails Techniques
    Arduino (MEGA) Cerveau Temps Réel Gère les boucles de contrôle rapides (PID, lecture d'interruptions). 
    Python (PC/Interface) Supervision  Affiche l'état des capteurs sur écran. Permet de logger les erreurs ou d'envoyer des commandes de réglage.
    Encodeurs Odométrie Mesurent la rotation exacte des moteurs pour calculer la distance parcourue (en tics).
    Capteurs Ultrasons Sécurité Anti-collision Détectent les obstacles imprévus (pied de chaise, personne) et forcent l'arrêt d'urgence.
    Capteur ToF (Laser) Maintien d'Orientation Mesure la distance précise par rapport au lit pour s'assurer que le robot reste bien parallèle ou à la bonne distance du meuble fixe.
    Boutons / Capteur de force Interface Homme-Machine Déclenchent les scénarios : "Sortir du lit", "Ranger le tiroir" ou "Assistance au tirage".
    Drivers Moteurs Puissance Reçoivent les signaux logiques de l'Arduino et convertissent l'énergie de la batterie en courant pour les moteurs.
    Logique de Décision 

    Pour un mouvement type "Avancer", l'Arduino suit cette priorité :

    L'Ultrason voit-il un obstacle à moins de 20 cm ? Si oui  STOP.

    Le ToF indique-t-il que nous dérivons par rapport au lit ? Si oui  Correction de l'angle des roues Mecanum.

    Les Encodeurs ont-ils atteint le nombre de tics calculé ? Si non  Continuer PWM.<code>

    Pipeline du code arduino

    1. Objectif général du programme

    Le programme pilote une base mobile équipée de :

    • 4 moteurs avec encodeurs ;

    • 4 capteurs ultrasons pour détecter les obstacles ;

    • 2 capteurs ToF VL53L3CX pour s’aligner parallèlement au lit ;

    • 1 capteur de force HX711 pour déclencher un déplacement latéral.

    Le test s’exécute une seule fois au démarrage dans setup(). La fonction loop() est vide.

    2. Pipeline globale du programme