Table des matières:

Véhicule submersible : 5 étapes
Véhicule submersible : 5 étapes
Anonim
Véhicule submersible
Véhicule submersible
Véhicule submersible
Véhicule submersible

**************** CET INSTRUCTABLE EST ENCORE UN TRAVAIL EN COURS ****************

Ce Instructable a été créé pour répondre aux exigences du projet du Makecourse à l'Université de Floride du Sud (www.makecourse.com).

Ce Instructable sera un bref aperçu de la création du véhicule submersible que j'ai conçu et construit pour ma classe Makecourse à l'Université de Floride du Sud. Dans ce Instructable, je vais fournir une nomenclature, le code de contrôle que j'ai créé pour l'Arduino Uno que j'ai utilisé et un aperçu de la façon d'assembler le submersible.

Étape 1: Matériaux

Matériaux
Matériaux
Matériaux
Matériaux
Matériaux
Matériaux

L'électronique utilisée où:

1x Arduino Uno

1x caméra d'action mobius

1x caméra d'action mobius câble usb-b vers A/V

1x écran d'affichage Field View 777

1x Turnigy Marine 50A ESC (contrôle de vitesse électronique)

1x carte de programmation marine Turnigy

1x T-Motor Navigator 400kv

1x YEP 20A BEC (circuit d'élimination de batterie)

6x servos étanches hobby king HK15139

2x connecteurs en T parallèles y harnais

2x fils d'extension de servo de 18 pouces

Fils d'extension de servo 6x 6 pouces

2x batteries Lipo 1300mah 3s

2 piles Lipo 2500 mah 4s

1x carte de distribution d'alimentation avec sorties fixes 5v et 12v

Les matériaux de construction où:

1 feuille de contreplaqué de 3/16 pouces

1x 6 pouces ID tube d'expédition ABS

1x tube en silicone

1x boîte de joint flexible

4x bobines de filament d'imprimante 3D ABS

1x glissière de tiroir de 24 pouces

Tube thermorétractable

1x 10 pieds de velcro duraloc de marque scotch

1x JB Weld plastique époxy

1x dôme de caméra de sécurité en acrylique de 6,2 pouces de diamètre

2x passerelles Ethernet IP68

Câble Ethernet 2x 24 pouces cat6

1x câble Ethernet cat6 de 200 pieds

Le matériel utilisé était:

24 vis à bois en laiton de 1/2 pouce

24x ------ vis (incluses avec les servos)

Les outils utilisés:

Tournevis Philip et à tête plate

Jeu de clés Allen

Fer à souder

Pistolet thermique

Imprimante 3D (j'ai utilisé une Monoprice Maker Select Plus)

Étape 2: Programmation

La programmation
La programmation
La programmation
La programmation
La programmation
La programmation
La programmation
La programmation

Vous trouverez ci-dessous le code qui a été créé pour contrôler le submersible. J'ai également joint le fichier.ino afin qu'il puisse être téléchargé.

Ce code a été créé pour l'Arduino Uno à l'aide du compilateur Arduino.

/**********************************************************************************************************************************************************************

Auteur: Jonah Powers Date: 2018-11-09 Objectif: Code de contrôle pour véhicule submersible télécommandé ****************************** ******************************************************** ************************************************** ************************************/ #include //Incluant Servo Library Servo roll1; //Déclarer roll1 comme étant un servo Servo roll2; //Déclarer roll2 comme étant un servo Servo elev1; //Déclarer elev1 comme étant un servo Servo elev2; //Déclarer elev2 comme étant un servo Servo lacet1; //Déclarer yaw1 comme étant un servo Servo yaw2; //Déclarer yaw2 comme étant un servo Servo esc; //Déclarer esc comme étant un servo

int pot1 = 0; //Initialisation de la variable pot1 sous forme d'entier et définition de la valeur 0 int pot2 = 1; //Initialisation de la variable pot2 sous forme d'entier et définition de la valeur 2 int pot3 = 2; //Initialisation de la variable pot3 sous forme d'entier et définition de la valeur 4 int pot4 = 3; //Initialisation de la variable pot4 sous forme d'entier et définition de la valeur 5 int val1; //Initialisation de la variable val1 sous forme d'entier int val2; //Initialisation de la variable val2 sous forme d'entier int val3; //Initialisation de la variable val3 sous forme d'entier int val4; //Initialisation de la variable val4 sous forme d'entier int val5; //Initialisation de la variable val5 sous forme d'entier int val6; //Initialisation de la variable val6 comme un entier int val7; //Initialisation de la variable val7 sous forme d'entier int val8; //Initialisation de la variable val8 sous forme d'entier int mspeed; //Initialisation de la variable mspeed sous forme d'entier

void setup() { // étape d'initialisation Arduino Serial.begin (9600); //Initialisation du moniteur série roll1.attach(2); //Fixation du servo roll1 à la broche numérique 2 roll2.attach(3); //Fixation du servo roll2 à la broche numérique 3 elev1.attach(5); //Fixation du servo elev1 à la broche numérique 5 elev2.attach (6); //Fixation du servo elev2 à la broche numérique 6 yaw1.attach(8); //Fixation du servo lacet1 à la broche numérique 8 yaw2.attach(9); //Fixation du servo lacet2 à la broche numérique 9 esc.attach(11); //Fixation du servo esc à la broche numérique 11 roll1.write(90); //Ecriture du servo roll1 sur sa position centrée roll2.write(90); //Ecriture du servo roll2 à sa position centrée elev1.write(90); //Écriture du servo elev1 sur sa position centrée elev2.write(90); //Ecriture du servo elev2 sur sa position centrée yaw1.write(90); //Ecriture du servo lacet1 sur sa position centrée yaw2.write(90); // Écriture du servo lacet2 sur sa position centrée esc.write(180); //Ecriture de servo esc sur sa position centrée delay(2500); //Attente 2 secondes esc.write(90); retard (5000); }

void loop() { //Code principal pour boucler à l'infini if(analogRead(pot1)<1 && analogRead(pot2)<1 && analogRead(pot3)<1 && analogRead(pot4)= 485 && val1<= 540){ // Vérifier si le "Joystick" (potentiomètre) est centré roll1.write(90); //Ecriture du servo roll1 sur la position centrale roll2.write(90); //Ecriture du servo roll2 en position centrale } else{ //Que faire si le "Joystick" n'est pas centré val1 = map(val1, 0, 1023, 10, 170); //Mapping val1 de 10 à 170 et affectation à val1 roll1.write(val1); //Ecriture du servo roll1 sur la position définie par val1 roll2.write(val1); //Ecriture du servo roll2 à la position définie par val1 }

val2 = analogRead(pot2); //Lecture de pot2 (broche analogique 2) et sauvegarde de la valeur sous val2 if(val2>= 485 && val2<= 540){ //Vérification pour voir si "Joystick" (potentiomètre) est centré elev1.write(90); //Ecriture du servo elev1 à la position centrale elev2.write(90); //Ecriture du servo elev2 en position centrale } else{ //Que faire si le "Joystick" n'est pas centré val3 = map(val2, 0, 1023, 10, 170); //Mapping val2 de 10 à 170 et affectation à val3 val4 = map(val2, 0, 1023, 170, 10); //Mapping val2 de 170 à 10 et affectation à val4 elev1.write(val3); //Ecriture servo elev1 à la position définie par val3 elev2.write(val4); //Ecriture du servo elev2 à la position définie par val4 }

val5 = analogRead(pot3); //Lecture de pot3 (broche analogique 4) et sauvegarde de la valeur sous val5 if(val5>= 485 && val5<= 540){ //Vérification pour voir si "Joystick" (potentiomètre) est centré yaw1.write(90); // Écriture du servo lacet1 sur la position centrale yaw2.write(90); //Ecriture du servo lacet2 en position centrale } else{ //Que faire si le "Joystick" n'est pas centré val6 = map(val5, 0, 1023, 10, 170); //Mapping val5 de 10 à 170 et affectation à val6 val7 = map(val5, 0, 1023, 170, 10); //Mapping val5 de 10 à 170 et affectation à val7 yaw1.write(val6); // Écriture du servo lacet1 sur la position définie par val6 yaw2.write(val7); //Ecriture du servo lacet2 à la position définie par val7 }

val8 = analogRead(pot4); //Lecture de pot4 (broche analogique 5) et sauvegarde de la valeur sous val8 if(val8 > 470 && val8 80 && val8<80)||(mspeed80)){ //Vérification pour voir si le moteur est sur le point de changer de direction esc.write(80); retard(1000); //En attente de 1000 millisecondes } esc.write(val8); //Ecriture de servo esc à la vitesse définie par val8 mspeed=val8; //Stockage de la vitesse actuelle pour comparaison } } Serial.print("throttle "); //Utilisation de Serial Print pour afficher le mot "Throttle" Serial.println(val8); //Utilisation de Serial Print pour afficher la valeur que la commande est définie sur Serial.print("roll "); //Utilisation de Serial Print pour afficher le mot "Roll" Serial.println(val1); //Utilisation de Serial Print pour afficher la valeur que roll est définie sur Serial.print("pitch "); //Utilisation de Serial Print pour afficher le mot "Pitch" Serial.println(val3); //Utilisation de Serial Print pour afficher la valeur que pitch1 est définie sur Serial.println(val4); //Utilisation de Serial Print pour afficher la valeur que pitch2 est définie sur Serial.print("yaw "); //Utilisation de Serial Print pour afficher le mot "Yaw" Serial.println(val6); //Utilisation de Serial Print pour afficher la valeur que yaw1 est définie sur Serial.println(val7); //Utilisation de Serial Print pour afficher la valeur à laquelle yaw2 est défini }

Étape 3: Circuits

Ci-joint une photo du circuit à bord du submersible.

J'ai créé un shield personnalisé pour l'Arduino afin de simplifier mon câblage. J'ai téléchargé les fichiers Eagle Schematic & Board pour le bouclier. J'ai utilisé un LPKF S63 pour fraiser la planche. les servos à l'avant qui contrôlent le rouleau seront branchés sur Arduino

ci-joint une photo du circuit à l'intérieur du contrôleur.

Étape 4: Pièces imprimées en 3D

J'ai imprimé tous ces fichiers sur mon Monoprice Maker Select Plus. J'ai utilisé le filament Esun ABS 1,75 mm. Mes paramètres d'impression étaient de 105 degrés C pour la température du lit d'impression et de 255 degrés C pour la température de l'extrudeuse. Seulement 1 pièce de chaque pièce est nécessaire sauf que vous aurez besoin de 6 exemplaires d'aile avant. Notez que ces pièces ont été imprimées avec une épaisseur de paroi définie sur 1000 mm. Cela a été fait pour que les pièces soient imprimées avec un remplissage à 100% afin qu'elles soient négativement flottantes.

Étape 5: Assemblage

********************************* BIENTÔT DISPONIBLE *************** *******************

Conseillé: