Conception et réalisation d'un quadricoptère pour la prise de vue aérienne
1. 2
Objectif
● En partant d'un problème concret, présenter les différentes
étapes conduisant à la réalisation de sa Preuve de Concept.
● Cette architecture en étapes est très générale :
– conception d'un produit
– bibliographie
– étude théorique
– définition de l'architecture technique
– définition du logiciel embarqué
● conception
● programmation
– tests et validation
4. 8
Étude préliminaire (2)
Électrocardiogramme*
● le placement des électrodes n'a pas
l'air simple !
● Par contre, la forme du signal est
simple.
* https://fr.wikipedia.org/wiki/Électrocardiographie
Il va falloir un
bon amplificateur !
5. 10
Étude préliminaire (4)
autres méthodes ?
● Et comment marche ce système ?
– il a l'air simple,
– pas besoin de quitter ses vêtements.
– on dirait qu'on analyse la réflexion de la
lumière sur la peau ou la transparence de
la peau.
6. 12
Capteur optique (1)
● Le capteur est, comme tous les
capteurs, constitué de 2 parties :
– transducteur qui traduit la
grandeur physique en signal
électrique,
– mise en forme du signal de
mesure.
7. 14
Signal cardiaque
● Après mise en forme
électronique, les signaux
cardiaques ont la forme
suivante.
● Mesurer la durée d'un
battement revient à mesurer
l'intervalle de temps entre deux
fronts de même sens.
● En fait, il faudra faire la
moyenne de plusieurs durées
pour améliorer la précision.
Et voilà !
9. 18
La Machine à États finis
● Les états mémorisent le passé qu'il est nécessaire de connaître
pour prédire le comportement.
● On identifie 3 états :
– INIT : ils ne s'est encore rien passé
– HIGH : le dernier événement qui s'est produit est high
– LOW : le dernier événement qui s'est produit est low
● Il y a deux événements :
– high = (signal cardiaque = high)*
– low = (signal cardiaque = low)
● La machine à états finis est décrite par son diagramme des
états.
* cette expression est un prédicat : une affirmation qui est soit vrai soit fausse
10. 20
Parenthèse
comment déterminer la moyenne ?
On dispose d'un compte-temps
indiquant combien de temps s'est
écoulé depuis que le micro-contrôleur
a été démarré chaque fois qu'on
l'interroge.
: date de départ
: date du kème front montant: date du kème front montant
Juste une soustraction
et une division !
11. 22
Arduino UNO est le
micro-contrôleur
#define PULSE_PIN 2
#define LOW 0
#define HIGH 1
int pulse_pin = PULSE_PIN;
int pulse;
int detection_state;
...
void setup(){
pinMode(pulse_pin, INPUT);
detection_state = LOW;
count = 0;
}
void loop(){
pulse = digitalRead(pulse_pin);
if((detection_state == LOW) && (pulse == HIGH)){
/*** here an heart beat begins ***/
detection_state = HIGH;
/*** action performed when in the rising edge ***/
}
if((detection_state == HIGH) && (pulse == LOW){ detection_state = LOW; }
}
12. 24
Et les actions ?
...
#define COUNTMAX 16
...
unsigned long current_time;
unsigned long current_interval;
int count;
int heart_rate; // beats/minute
void setup(){
...
}
void loop(){
pulse = digitalRead(pulse_pin);
digitalWrite(led_pin, pulse);
if((detection_state == LOW) && (pulse == HIGH)){
/*** here an heart beat begins ***/
detection_state = HIGH;
/*** action performed when in the rising edge ***/
if(count++ == COUNTMAX){
count = 0;
current_interval = millis() - current_time;
current_time = current_time + current_interval;
heart_rate = (int)((float)COUNTMAX*1000.0*60.0/(float)current_interval);
}
}
if((detection_state == HIGH) && (pulse == LOW){ detection_state = LOW; }
}