Difference between revisions of "Projets:Lab:2013:Rocket-Plopper"
From Electrolab
(→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> | + | <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
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"); } } }