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

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

  • Upload
    so-fab

  • View
    66

  • Download
    2

Embed Size (px)

Citation preview

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 ?