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

From Electrolab
Jump to: navigation, search
(Pour une version MSP430 :: Ajout code MSP430)
Line 34: Line 34:
 
==Bouts de code==
 
==Bouts de code==
 
===Pour une version MSP430 :===
 
===Pour une version MSP430 :===
<pre>A compléter</pre>
+
<pre>// 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");
 +
        }
 +
 
 +
      }
 +
}</pre>

Revision as of 16:07, 14 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 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");
        }

      }
}