Dirigeable publicitaire : Différence entre versions
(→Avancement du Projet) |
(→Semaine 9) |
||
Ligne 304 : | Ligne 304 : | ||
[[Fichier:montage3.jpg|350px|vignette|centre|upright=1.25|Montage avec 3 capteurs 3 ventilateurs]] | [[Fichier:montage3.jpg|350px|vignette|centre|upright=1.25|Montage avec 3 capteurs 3 ventilateurs]] | ||
+ | |||
+ | Le code approprié: | ||
+ | <pre> | ||
+ | // définition des broches utilisées | ||
+ | |||
+ | int echo1 = 2; | ||
+ | int trig1 = 3; | ||
+ | |||
+ | |||
+ | int echo2 = 4; | ||
+ | int trig2 = 5; | ||
+ | |||
+ | |||
+ | int echo3 = 6; | ||
+ | int trig3 = 7; | ||
+ | |||
+ | |||
+ | long lecture_echo1; | ||
+ | long lecture_echo2; | ||
+ | long lecture_echo3; | ||
+ | |||
+ | long cm1; | ||
+ | long cm2; | ||
+ | long cm3; | ||
+ | |||
+ | int cont1 = 8; | ||
+ | int cont2 = 9; | ||
+ | int cont3 = 10; | ||
+ | |||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | pinMode(trig1, OUTPUT); | ||
+ | digitalWrite(trig1, LOW); | ||
+ | pinMode(trig2, OUTPUT); | ||
+ | digitalWrite(trig2, LOW); | ||
+ | pinMode(trig3, OUTPUT); | ||
+ | digitalWrite(trig3, LOW); | ||
+ | pinMode(echo1, INPUT); | ||
+ | pinMode(echo2, INPUT); | ||
+ | pinMode(echo3, INPUT); | ||
+ | pinMode (cont1, OUTPUT); | ||
+ | pinMode (cont2, OUTPUT); | ||
+ | pinMode (cont3, OUTPUT); | ||
+ | Serial.begin(9600); | ||
+ | |||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | digitalWrite(trig1, HIGH); | ||
+ | delayMicroseconds(10); | ||
+ | digitalWrite(trig1, LOW); | ||
+ | lecture_echo1 = pulseIn(echo1, HIGH); | ||
+ | cm1 = lecture_echo1 / 58; | ||
+ | Serial.print("Distance1 m : "); | ||
+ | Serial.println(cm1); | ||
+ | if (cm1<50){ | ||
+ | digitalWrite (cont1, HIGH); | ||
+ | } | ||
+ | else { | ||
+ | digitalWrite (cont1, LOW); | ||
+ | } | ||
+ | |||
+ | digitalWrite(trig2, HIGH); | ||
+ | delayMicroseconds(10); | ||
+ | digitalWrite(trig2, LOW); | ||
+ | lecture_echo2 = pulseIn(echo2, HIGH); | ||
+ | cm2 = lecture_echo2 / 58; | ||
+ | Serial.print("Distance2 m : "); | ||
+ | Serial.println(cm2); | ||
+ | if (cm2<50){ | ||
+ | digitalWrite (cont2, HIGH); | ||
+ | } | ||
+ | else { | ||
+ | digitalWrite (cont2, LOW); | ||
+ | } | ||
+ | |||
+ | digitalWrite(trig3, HIGH); | ||
+ | delayMicroseconds(10); | ||
+ | digitalWrite(trig3, LOW); | ||
+ | lecture_echo3 = pulseIn(echo3, HIGH); | ||
+ | cm3 = lecture_echo3 / 58; | ||
+ | Serial.print("Distance3 m : "); | ||
+ | Serial.println(cm3); | ||
+ | if (cm3<50){ | ||
+ | digitalWrite (cont3, HIGH); | ||
+ | } | ||
+ | else { | ||
+ | digitalWrite (cont3, LOW); | ||
+ | } | ||
+ | |||
+ | delay(500); | ||
+ | } | ||
+ | </pre> | ||
== Fichiers Rendus == | == Fichiers Rendus == |
Version du 30 mars 2016 à 13:00
Sommaire
Présentation générale du projet
Le but est d'avoir un dirigeable de dimension réduite capable d'évoluer de façon autonome dans le hall de l'école.
Cahier des charges
Objectifs et description du projet
Le but du projet est de créer un dirigeable publicitaire (structure et logiciel) capable de voguer en autonomie. Celui-ci doit éviter les obstacles présents sur sa route.
Nous devrons donc d'abord réaliser la structure tout en prenant en compte le poids maximal que pourra supporter le dirigeable. Dans le même temps, nous devrons concevoir la partie logicielle qui devra assurer le vol du dirigeable.
Choix techniques : matériel et logiciel
Nous aurons besoin de :
- Un ARDUINO ou Raspberry Pi afin de contrôler le dirigeable.
- Une enveloppe imperméable à l'hélium pouvant en contenir.
- Un matériau léger pour la structure du dirigeable (fil de fer, aluminium ...).
- Environ 1m3 d'hélium pour permettre au dirigeable de voler.
- Des hélices pour faire avancer le dirigeable (probablement fabriquées à l'aide d'une imprimante 3D). Celles-ci seront soit orientables, soit jumelées avec un gouvernail.
- Capteurs d'altitude et de proximité (afin d'éviter les chocs).
- Une publicité à afficher sur le dirigeable.
- Une batterie pour alimenter l'(es) hélice(s).
Liste de matériel
Matériel | Quantité requise | Quantité disponible | A commander | Commentaires |
---|---|---|---|---|
Alimentation Arduino | 1 | 0 | 1 | RS : [1] |
Arduino MEGA ADK | 1 | 1 | 0 | |
Hélium | 9m3 | 0 | 9m3 | Lien du devis : [2] |
Ballon | 1 | 1 | 0 | Lien du ballon : [3] |
Accessoires de drone HS (hélices, moteurs) | 1 | 1 | 0 | Il s'agit de pièces d'un AR Drone défectueux |
Ultrasons SR04 | 10 | 0 | 10 | GoTronic : [4] |
Connecteur mâle 12 contacts - Pas 1mm | 5 | 0 | 5 | Farnell : [5] |
Connecteur mâle 8 contacts - Pas 2mm | 10 | 0 | 10 | Farnell : [6] |
Femelle USB-B | 2 | 0 | 2 | Farnell : [7] |
Mâle USB-B à sertir | 5 | 0 | 5 | RS : [8] |
Connecteur femelle 8 contacts - Pas 2mm | 10 | 0 | 10 | Farnell : [9] |
Connecteur femelle 12 contacts - Pas 1mm | 10 | 0 | 10 | Farnell : [10] |
Connecteur mâle 5 contacts - Pas 2mm | 10 | 0 | 10 | Farnell : [11] |
Connecteur femelle 5 contacts - Pas 2mm | 10 | 0 | 10 | Farnell : [12] |
Pin Femelle 2mm SJN | 50 | 0 | 50 | Farnell : [13] |
Pin Femelle 2mm SAN | 100 | 0 | 100 | Farnell : [14] |
Pin Femelle 1mm SHR | 50 | 0 | 50 | Farnell : [15] |
Échanges concernant le projet
Avant le commencement
- 12/11/2015 Suite à un échange par mail, nous avons obtenu les réponses suivantes :
- Le dirigeable pourra contenir jusqu'à 2 bouteilles d'hélium vendues dans le commerce.
- Mr Redon nous a dit qu'il essayait de récupérer une enveloppe d'un ballon sonde météo, pour éviter d'acheter une enveloppe onéreuse dans le commerce.
- Réaliser les hélices depuis une imprimante 3D semble être une bonne idée.
- 02/12/2015 Un deuxième échange par mail, nous avons pu affiner notre CDC :
- L'idée de plusieurs hélices permettant de se diriger dans 3 dimensions paraît plus judicieuse
- Seule l'enveloppe de ballon pourrait suffire à la conception du dirigeable (sans 'structure' métallique)
- L'autonomie de notre dirigeable devra être de quelques heures
- 08/12/2015 Troisième échange en direct, nous avons plus de précisions quant au CDC ainsi qu'aux méthodes que nous allons employer :
- Notre tuteur, Xavier Redon devrait pouvoir se procurer 1 (ou plusieurs) enveloppes de ballon sonde météo ce qui constituerait l'enveloppe de notre dirigeable
- Nous avons réfléchi ensemble et opterons pour une nacelle fixée sous l'enveloppe où toute la partie arduino/moteur se situera
- Nous pourrions, si tout se passe bien, récupérer 3 moteurs ainsi que 3 hélices provenant d'un drone ne fonctionnant plus -> Cela nous évite de les imprimer via l'imprimante 3D
- L'Arduino sera notre outil clé et non la Raspberry, car ses capacités sont suffisantes à priori pour nos besoins
- L'idée du gouvernail semble compliquée à mettre en place, c'est pourquoi nous choisirons les 3 hélices (pour la position latérale mais surtout le contrôle de l'altitude)
- Nous avons pensé également à une multitude de capteurs (ultrasons) afin de capter les obstacles pour ensuite les éviter (sous la nacelle et sur le pourtour de l'enveloppe)
- Pour finir, notre premier objectif sera de réaliser la nacelle (imprimante 3D, récupération de matériel, ...) qui pourra permettre d’accueillir la totalité de nos composants/carte(s)
Calendrier prévisionnel
Avancement du Projet
Semaine 1
- Contact avec la société vendeuse d'hélium : attente d'un devis.
Semaine 2
- 2nd contact avec la société : la demande de devis est transmise au commercial d'Air Liquide.
- Nous avons pour projet de faire les plans de câblage Arduino sur le logiciel Fritzing.
- Recherche d'une nouvelle enveloppe pour le ballon.
- Prise de contact avec Mr Jean SECQ pour gonfler le ballon.
- Gonflage du ballon avec de l'air afin de prendre des mesures préalables et de vérifier son imperméabilité à l'air premièrement
- Mesure du ballon gonflé -> 186cm du sommet du ballon à l'embouchure (Afin de vérifier s'il se dégonfle ou pas et de dimensionner la nacelle)
- Au lendemain de la prise de la photo, la taille du ballon était réduite de moitié --> nous allons devoir trouver une enveloppe de ballon.
- Nous cherchons également toujours une batterie légère fournissant environ 11V en sortie et 2000mAh afin d'avoir une bonne autonomie
- Nous devons trouver les références des connecteurs sur la carte mère du drone HS afin de pouvoir réaliser des tests sur les moteurs
Devis pour l'hélium
Nous avons reçu un devis pour l'hélium :
Monsieur DELECROIX, Suite à notre conversation : I6020L50R2A001 HELIUM U Grande Bouteille L50 79,80€ Détendeur HEPAL 12 : REF 153608 - Prix HT :307,97 € HT - Remise à déduire FAC et ECOLES : 20% - Frais de port 27,50 € Délai : 1 semaine
Nous n'avons pas besoin du détendeur (monsieur Jean SECQ pourra nous en procurer un), et la contenance de la bouteille d'hélium est de 9m3, ce qui est amplement suffisant pour nous.
Semaine 3
- Nous avons reçu le ballon, que nous venons de gonfler :
- De même, nous avons pu tester un des capteurs ultrasons HC-SR04 fourni par monsieur Redon. Nous l'avons câblé à l'Arduino de la façon suivante :
- Le code correspondant pour tester le capteur est :
/* Utilisation du capteur Ultrason HC-SR04 */ // définition des broches utilisées int trig = 12; int echo = 11; long lecture_echo; long cm; void setup() { pinMode(trig, OUTPUT); digitalWrite(trig, LOW); pinMode(echo, INPUT); Serial.begin(9600); } void loop() { digitalWrite(trig, HIGH); delayMicroseconds(10); digitalWrite(trig, LOW); lecture_echo = pulseIn(echo, HIGH); cm = lecture_echo / 58; Serial.print("Distancem : "); Serial.println(cm); delay(1000); }
- Nous obtenons les résultats suivants :
Distancem : 26 Distancem : 12 Distancem : 9 Distancem : 10 Distancem : 9 Distancem : 2 Distancem : 5 Distancem : 26 Distancem : 24 Distancem : 24 Distancem : 24 Distancem : 12 Distancem : 11
Ces résultats sont conformes aux distances mesurées.
- Nous avons également simulé le comportement des moteurs à l'aide de diodes. Lorsque la distance mesurée est supérieure à 50cm, la LED verte s'allume, sinon, c'est la rouge qui s'allume. Les moteurs se comporteront de manière analogue, avec des distances différentes.
Semaine 4
- Suite à la demande des enseignants, nous avons passé la plupart de notre temps de projet hebdomadaire à créer notre librairie de composants sous Altium (en attendant vérification de M. Alexandre Boé).
- Nous avons également pu vérifier que le ballon est toujours gonflé (à l'air) au bout d'environ 2 semaines, il nous restera donc à tester son imperméabilité à l'hélium.
Semaine 5
- Nous avons réalisé le plan d'une boîte représentant la nacelle sur Inkscape.
- Nous avons pu faire cette nacelle grâce à la découpeuse laser du Fabricarium. Nous avons prévu les trous afin de laisser passer les ficelles pour la maintenir au ballon. D'autres trous sont présents pour laisser sortir les moteurs (un en dessous pour haut/bas) les 2 autres derrière la nacelle écartés de 90° (pour devant/derrière gauche/droite).
- Nous avons réussi à démonter tout le drone puis nous avons reconstitué l'électronique d'un moteur avec des câbles soudés entre eux afin de pouvoir visualiser la tension, le courant ainsi que les données envoyées à un moteur isolé.
Semaine 6
- Nous avons essayé de se pencher sur le fonctionnement des moteurs de l'AR Drone, vu le temps restant pour l'avancement du projet, nous optons pour une des deux solutions alternatives suivantes:
- Essayer de diriger la nacelle grâce à des ventilateurs récupérés - Utiliser des moteurs simple de commande couplés aux hélices de l'AR Drone
- Nous avons également réussi à faire fonctionner le ventilateur avec la batterie du drone en commandant la marche et l'arrêt depuis l'Arduino avec un transistor.
Semaine 7
- Nous avons effectué un test avec le ventilateur le plus puissant à disposition, fixé à la nacelle elle-même attachée avec de la ficelle en hauteur. Le test s'est avéré peu concluant, en effet le ventilateur ne permettait pas un déplacement de la nacelle assez important afin de pouvoir contrôler celle-ci en cas de présence d'obstacle.
- Nous essayons maintenant donc de communiquer avec le moteur de l'AR Drone, cependant celui-ci ne dispose que d'un fil de données (Reception/Emission). Nous essayons donc tout d'abord de communiquer entre 2 Arduinos en reliant tous les TX et RX sur un même ligne de breadboard.
Si nous réussissons cela, nous pourrons donc appliquer cette méthode sur le moteur afin de pouvoir lui envoyer le message de mise sous tension.
Semaine 8
- Nous avons encore essayé en début de semaine de faire fonctionner le moteur de l'AR Drone mais sans succés.
- Nous avons réussi à commander un moteur ainsi qu'un ventilateur par le biais d'un relais. Nous avons testé un programme qui déclenche celui-ci lorsque la distance de l'obstacle est inférieure à une distance fixée au préalable.
Nous allons donc créer un shield pour l'Arduino Mega afin de recréer les 3 circuits de gestion des 3 moteurs (ou ventilateurs) proprement, ainsi que regrouper les GND et les +VCC des 6 capteurs ultrasons.
Semaine 9
- Suite à un mail de monsieur Boé, nous avons essayé de commander les moteurs à l'aide d'un transistor MOSFET. Le principe est le même que pour le relais, mais le montage est plus simple, et surtout plus léger. Après plusieurs recherches, nous avons donc réalisé le montage suivant :
Ce montage fonctionne parfaitement, et nous permet donc de contrôler la vitesse de rotation du ventilateur.
- Nous sommes aller au magasin Selectronic de Ronchin pour nous procurer des transistors MOSFET IRF540N. Il n'y en avait pas de disponible à Polytech'Lille.
- En attendant de pouvoir effectuer des tests grandeur nature avec l'hélium et 3 ventilateurs, nous avons réaliser le montage sur une breadboard avant de créer le shield pour s'assurer du bon fonctionnement. Nous avons donc placé 3 capteurs ultrasons, chaque capteur pouvant déclencher la marche ou l'arrêt d'un des 3 ventilateurs. En effet, les ventilateurs tournent lorsque la distance du capteur approprié est inférieure à 50 cm. Le montage sur breadboard est lourd mais il fonctionne, nous allons donc pouvoir réaliser le shield.
Le code approprié:
// définition des broches utilisées int echo1 = 2; int trig1 = 3; int echo2 = 4; int trig2 = 5; int echo3 = 6; int trig3 = 7; long lecture_echo1; long lecture_echo2; long lecture_echo3; long cm1; long cm2; long cm3; int cont1 = 8; int cont2 = 9; int cont3 = 10; void setup() { pinMode(trig1, OUTPUT); digitalWrite(trig1, LOW); pinMode(trig2, OUTPUT); digitalWrite(trig2, LOW); pinMode(trig3, OUTPUT); digitalWrite(trig3, LOW); pinMode(echo1, INPUT); pinMode(echo2, INPUT); pinMode(echo3, INPUT); pinMode (cont1, OUTPUT); pinMode (cont2, OUTPUT); pinMode (cont3, OUTPUT); Serial.begin(9600); } void loop() { digitalWrite(trig1, HIGH); delayMicroseconds(10); digitalWrite(trig1, LOW); lecture_echo1 = pulseIn(echo1, HIGH); cm1 = lecture_echo1 / 58; Serial.print("Distance1 m : "); Serial.println(cm1); if (cm1<50){ digitalWrite (cont1, HIGH); } else { digitalWrite (cont1, LOW); } digitalWrite(trig2, HIGH); delayMicroseconds(10); digitalWrite(trig2, LOW); lecture_echo2 = pulseIn(echo2, HIGH); cm2 = lecture_echo2 / 58; Serial.print("Distance2 m : "); Serial.println(cm2); if (cm2<50){ digitalWrite (cont2, HIGH); } else { digitalWrite (cont2, LOW); } digitalWrite(trig3, HIGH); delayMicroseconds(10); digitalWrite(trig3, LOW); lecture_echo3 = pulseIn(echo3, HIGH); cm3 = lecture_echo3 / 58; Serial.print("Distance3 m : "); Serial.println(cm3); if (cm3<50){ digitalWrite (cont3, HIGH); } else { digitalWrite (cont3, LOW); } delay(500); }