Cette épisode présente la partie la plus importante du prototype du ROV, le tube étanche. Le tube étanche est constitué d’un tube PVC de 100 mm de diamètre, d’un bouchon avant et un bouchon arrière. Ce tube va contenir toute l’électronique, la batterie et la caméra.
ROV modélisation
Le bouchon avant
Le bouchon avant est réalisé en impression 3D avec du plastique PETG. Il est constitué d’un plexiglas transparent de 5 mm d’épaisseur fixé via 8 vis M3 et un join torique permet l’étanchéité. Le plexiglas transparent va permettre à la camera de filmer l’extérieur.
Bouchon avant
Le bouchon arrière
Le bouchon arrière est aussi réalisé en impression 3D avec du plastique PETG. Il est constitué de 2 joints toriques pour l’étanchéité.
Le bouchon arrière avec les 2 joins torique (sans les fils pour les turbines)
Le bouchon arrière rempli de résine avec les fils pour les 5 turbines :
Impressions 3D des bouchons
Les bouchons sont imprimés avec un taux de remplissage de 100% :
Après l’impression des bouchons, ils sont remplis et peints de résine époxy pour les rendre étanches.
Assemblage des bouchons
Voici une photo de l’assemblage des 2 bouchons sur le tube PVC :
Voici la présentation d’un projet R&D en cours chez Mace Robotics, un ROV d’exploration appelé Rinkin.
ROV = (remotely operated underwater vehicle)
Ce ROV est un sous-marin Open Source réalisé avec un tube PVC, des turbines et des pièces en impression 3D.
Objectifs
Projet Open Source (hardware + Software)
Profondeur : 10 m maximum pour la version 0.1
Exploration des fonts marin & collecte de données
Mécanique
Modélisation du ROV avec ces 5 turbines :
2 turbines pour avancer et reculer
3 turbines pour la gestion de la profondeur et du tangage
Une camera est installé à l’avant du ROV (bouchon avant)
A chaque extrémité du tube PVC, il y a 2 bouchons pour gérer l’étanchéité du tube.
Ces 2 bouchons sont imprimés en PETG et peint avec de l’époxy
Électronique
Voici l’architecture électronique du ROV :
Un joystick de jeu permet de contrôler les mouvements du ROV (avancer, reculer, tangage, plonger, …). Ce joystick est relié par une liaison USB à un PC.
Le PC est relié au ROV via une liaison par fibre optique
La carte Raspberry Pi reçoit les commandes du PC, envoie les données vidéo et gère la communication avec le microcontrôleur Pico.
Une centrale inertielle est reliée via un bus i2c à la carte Raspberry Pi. Cette IMU permet de connaître l’orientation du ROV sur les 3 axes.
Le microcontrôleur Raspberry Pi Pico gère les commandes des 5 turbines via les ESC (Electronic speed controller)
La batterie 3S est constituée d’accumulateurs 18650.
Un petit tutoriel en langage Python pour gérer une manette de jeu :
-> Ce code gère uniquement les touches directionnelles
import pygame # Importation de la bibliothèque Pygame pour gérer une manette from time import sleep import sys
# Initialisation de Pygame pour préparer à l'utilisation de ses modules. pygame.init()
# Compte le nombre de manettes connectées à l'ordinateur. joystick_count = pygame.joystick.get_count()
# Vérification si aucun joystick n'est détecté if joystick_count == 0: print("Erreur, pas de joystick détecté !") # Affiche un message d'erreur si aucun joystick n'est connecté. pygame.quit() # Arrête Pygame proprement. sys.exit() # Quitte le programme.
else: # Si un joystick est détecté, initialisation de celui-ci. joystick = pygame.joystick.Joystick(0) # Récupère le premier joystick (index 0). joystick.init() # Initialise le joystick pour pouvoir l'utiliser.
# Récupération du nombre de "hat switches" (poignées de contrôle directionnelles, souvent utilisées pour la direction). hats = joystick.get_numhats()
# Fonction pour traiter les mouvements de la "hat switch" (direction du joystick) def getHat(number): # Si le "hat" n'est pas en position (0,0), il a été déplacé if joystick.get_hat(number) != (0, 0):
# Si le mouvement sur l'axe Y du "hat" est vers le haut if joystick.get_hat(number)[1] == 1: print("Avancer") # Afficher "Avancer" lorsque le mouvement est vers le haut.
# Si le mouvement sur l'axe Y du "hat" est vers le bas if joystick.get_hat(number)[1] == -1: print("reculer") # Afficher "reculer" lorsque le mouvement est vers le bas.
# Si le mouvement sur l'axe X du "hat" est vers la droite if joystick.get_hat(number)[0] == 1: print("tourner à droite") # Afficher "tourner à droite" lorsque le mouvement est vers la droite.
# Si le mouvement sur l'axe X du "hat" est vers la gauche if joystick.get_hat(number)[0] == -1: print("tourner à gauche") # Afficher "tourner à gauche" lorsque le mouvement est vers la gauche.
# Boucle principale du programme while True: for event in pygame.event.get(): # Écoute tous les événements (comme les mouvements du joystick). if event.type == pygame.QUIT: # Si l'utilisateur ferme la fenêtre pygame.quit() # Arrête Pygame proprement. sys.exit() # Quitte le programme.
# Si le joystick a des hats (directionnels) if hats != 0: for i in range(hats): # Parcours chaque hat getHat(i) # Appelle la fonction getHat pour traiter les mouvements de chaque hat.
sleep(0.1) # Petite pause pour réduire l'utilisation du processeur.