Conception et réalisation d'un quadricoptère pour la prise de vue aérienne

14
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

Transcript of Conception et réalisation d'un quadricoptère pour la prise de vue aérienne

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

Cardiofréquencemètre autonome

… pour les applications sportives

6

Pour fixer les idées… quelque chose qui ressemble à ça

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; }}

28

Merci pour votre attention

des questions ?