Projets:Lab:2013:Rocket-Plopper

From Electrolab
Revision as of 16:07, 14 November 2013 by Limesle (Talk | contribs)

Jump to: navigation, search

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 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)

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

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)
  • 433Mhz
  • ou autre 2.4ghz

pour éviter de manipuler la fusée

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


Bouts de 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");
        }

      }
}