Projets:Lab:2013:Rocket-Plopper
From Electrolab
Contents
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.
Discussions en cours
- Choix du capteur analogique : Baromètre Vs Accéléromètre
- Choix du µContrôleur : préférence de Limesle pour le MSP430 en autonome sans le launchpad (Poids, conso etc ...)
- Choix d'un boitier étanche(du coup plus facile avec un accéléromètre)
But des mesures :
- Optimiser la charge en eau et la pression du réservoir : accélération, temps de propulsion, altitude atteinte
- 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"); } } }