Difference between revisions of "Projets:Lab:2013:Rocket-Plopper"

From Electrolab
Jump to: navigation, search
m (27/11/13 Test du module BMP085 avec Arduino Nano)
m (27/11/13 Test du module BMP085 avec Arduino Nano)
 
Line 65: Line 65:
 
A suivre
 
A suivre
  
Avec quelques modification du code on peut prendre la pression initiale et donc calculer l'altitude par rapport au point de référence.
+
<br/>
  
 
==Code pour une version MSP430 :==
 
==Code pour une version MSP430 :==

Latest revision as of 23:19, 27 November 2013

Projet : Rocket-Plopper

Conception et réalisation d'un module permettant le déclenchement d'un parachute ainsi que la prise de mesure en vol et leur restitution à terre.

Schéma fonctionnel du projet

Discussions

But des mesures :

  1. Optimiser la charge en eau et la pression du réservoir : accélération, temps de propulsion, altitude atteinte
  2. Optimiser le parachute avec mesure du taux de chute à chaque essai

Discussions en cours

  1. Choix du capteur analogique : Baromètre Vs Accéléromètre
  2. Choix du µContrôleur : préférence de Limesle pour le MSP430 en autonome sans le launchpad (Poids, conso etc ...)
  3. Choix d'un boitier étanche(du coup plus facile avec un accéléromètre)

Type de communication :

Proof of concept avec une liaison série/USB avec PC Liaison par un module en

  • bluetooth
    • Pilou Je propose le JY-MCU(voir sur ebay) peut se trouver à 5€ fdpin(ça fait un Rfcomm qui peux causer avec un android/pc)
      • Portée limité à 10 mètres mais facile à mettre en place.
  • 433Mhz
  • MiWi de Microchip à 868MHz
  • ou autre 2.4ghz

pour éviter de manipuler la fusée

BOM

Réalisation du PCB

Sur une base MSP430G2553 avec BMP085 et micromoteur.

Image à venir

Élargissement

  • Réalisation d'un kit à vendre sur le shop
  • Codage pour avoir un kit qui valide le record et permet un concours sur le web (Évite la riche ?)
  • Codage d'une application Androïd Electrolabellisée pour le recueil des mesures et la participation au concours
  • Ajout d'un deuxième étage
  • Conception d'un tuyère à ouverture variable.

Développement projet

27/11/13 Test du module BMP085 avec Arduino Nano

Branchement facile sur le bus I2C : 4 cables :

  1. VCC(Orange sur 3.3v)
  2. GND(Bleu)
  3. SDA(Vert en A4)
  4. SCL (Jaune sur A5)
Nano et BMP085

Pour le test j'ai utilisé le code présent sur cette page : GeeeTech BMP085

Terminal-BMP085-1.png

On peut lire sur le terminal la température au 10ème de °C et la pression en Pascal. Du fait de la précision de la mesure, la valeur en Pa est très variable, mais si on s'attarde sur les 10 aines de Pa on peut voir une différence notable entre le sol, la hauteur du bureau et au dessus de la tête. Il faudra par contre travailler par moyenne d'une série de mesures pour lisser les petites variations.

J'ai pu en modifiant le code de façon à avoir une altitude "0" et faire des salves de mesures arriver à mesurer la hauteur de déplacement à +/- 50 cm. La précision est donc de l'ordre du mètre.

Mesures rapides au sol, sur le bureau, à hauteur de tête et à bout de bras

En prenant un peu de marge on pourra déclencher le parachute à apogée -2 mètres je pense.

A suivre


Code pour une version MSP430 :

// Rocket-Plopper
// Initiated by Limesle for ElectroLab
// a French HackerSpace at Nanterre near Paris

#define led 0
#define ledModeOut P1DIR |= (1<<led)
#define ledOn P1OUT |= (1<<led)
#define ledOff P1OUT &=~ (1<<led)
#define baroSensorPin A5
#define parachutePin 2
#define parachuteLaunch P1OUT |= (1<<parachutePin)
#define parachuteStop P1OUT &=~ (1<<parachutePin)


int baroSensorValue = 0; 
int ouverture = 0;
int i=0;
int altitudeSol =0;
int altitude =0;
int altitudeMoy =0;
int altitudeMax =0;
int incomingByte = 0;


void setup() {
  ledModeOut;  
}

void loop() {
  
  i=3;
  altitude=0;
  ledOn;
  
  
  while (i>0) {    // On réalise 3 mesures rapprochées dont on fait la moyenne pour éviter tout phénomène ératique
    baroSensorValue = analogRead(baroSensorPin);      
    delay(100);
    altitude += baroSensorValue;  // Formule à valider
    i--; 
  }
  
   altitudeMoy = altitude/3;  // calcul de la moyenne
   
   if (altitudeSol ==0){
    altitudeSol = altitudeMoy;  // Prise la première mesure
   } 
   
   if (altitudeMoy > altitudeMax | ouverture==0){ // on continue donc à monter, mais à vérifier : comment cette valeur fluctue ?
     altitudeMax = altitudeMoy;
   } else {
     parachuteLaunch;      // On lance le parachute
     delay(200);           // temps nécessaire pour libérer le parachute
     parachuteStop;        // On arrête le moteur
     ouverture=1;          // Le parachute est maintenant ouvert
     Serial.begin(9600);   // On ouvre le port série

   }

    if (Serial.available() > 0) {

      incomingByte = Serial.read();
      if (incomingByte == 115){  // si on reçoit la lettre s dans le port série, le MSP430 répond :

          Serial.print("La fusée est montée à : ");
          Serial.print(altitudeMax - altitudeSol); 
          Serial.println("m");
        }

      }
}