conception et réalisation d'un quadricoptère pour la prise de vue aérienne
TRANSCRIPT
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
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 unbon amplificateur !
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.
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.
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 lamoyenne de plusieurs durées pour améliorer la précision.
Et voilà !
16
Architecture technique
Microcontrôleur – Arduino UnoMicrocontrôleur – Arduino UnoShield GroveShield Grove
Afficheur LCD – 16x2Afficheur LCD – 16x2
Pile 9V – 6LR61Pile 9V – 6LR61
LED – rougeLED – rouge
CapteurCapteur
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
20
Parenthèsecomment déterminer la moyenne ?
On dispose d'un compte-tempsindiquant combien de temps s'estécoulé depuis que le micro-contrôleura été démarré chaque fois qu'onl'interroge.
: date de départ
: date du kème front montant: date du kème front montantJuste une soustraction
et une division !
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; }}
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; }}
26
Gestion de l'affichage (2)#include <Wire.h>#include "rgb_lcd.h"
rgb_lcd lcd;
...
void setup(){...lcd.begin(16, 2);
lcd.setCursor(0,0); lcd.print("Pinch your ear");}
void loop(){...if((detection_state == LOW) && (pulse == HIGH)){/*** here an heart beat begins ***/
detection_state = HIGH;lcd.setCursor(count,1); lcd.print(".");
if(count++ == COUNTMAX){ ...
heart_rate = (int)((float)COUNTMAX*1000.0*60.0/(float)current_interval); lcd.clear();
lcd.setCursor(0,0); lcd.print("Heart Rate: ");lcd.print((heart_rate > 40)? heart_rate : 0);
} } if((detection_state == HIGH) && (pulse == LOW){ detection_state = LOW; }}