Table des matières:
- Étape 1: Matériaux
- Étape 2: Programmation
- Étape 3: Circuits
- Étape 4: Pièces imprimées en 3D
- Étape 5: Assemblage
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:08
**************** 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
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
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é:
Véhicule à effet de sol Super FAST RC (Ekranoplan): 5 étapes (avec photos)
Véhicule à effet de sol Super FAST RC (Ekranoplan) : Vous savez comment, lors de l'atterrissage, les avions planent à quelques pieds au-dessus du sol pendant un certain temps avant que leurs roues ne touchent réellement la piste ? Ce n'est pas seulement pour donner aux passagers un atterrissage en douceur mais c'est aussi le résultat naturel de l'effet de sol, dans lequel
Kid's Quad Hacking dans un véhicule autonome, suivi de ligne et détection d'obstacles.: 4 étapes
Quad Kid's Hacking dans un véhicule de conduite autonome, de suivi de ligne et de détection d'obstacles. Vidéo de démonstration :https://youtu.be/bVIsolkEP1kPour ce projet, nous aurons besoin du matériel suivant
Porte-clés d'évacuation de véhicule d'urgence : 11 étapes (avec photos)
Porte-clés d'évacuation de véhicule d'urgence : accidents de voiture. Aïe ! La meilleure façon d'éviter un accident est d'utiliser des techniques de conduite prudentes et de toujours faire attention à l'endroit où vous allez et aux autres voitures qui vous entourent. Cependant, malgré tous vos efforts, vous ne contrôlez pas les autres lecteurs
Véhicule modèle RC inclinable : 21 étapes (avec photos)
Modèle de véhicule RC inclinable : ce modèle est un véhicule inclinable au 1/10 avec deux roues avant et une propulsion arrière; était dérivé d'un modèle électrique RC Arrma Vortex 1/10 dont on utilisait le châssis en aluminium et enlevait tout l'arrière où il avait placé le moteur électrique et son tr
PCB : Système de suivi de véhicule basé sur GPS et GSM : 3 étapes
PCB : Système de suivi de véhicule basé sur GPS et GSM : Système de suivi de véhicule basé sur GPS et GSM30 juin 2016, Projets d'ingénierie Le système de suivi de véhicule basé sur GPS et GSM utilise le système de positionnement global (GPS) et le système global de rend ce projet plus e