IMA3/IMA4 2018/2020 P17 : Différence entre versions

De Wiki de Projets IMA
(Choix techniques : matériel et logiciel)
(Equipe 2)
Ligne 290 : Ligne 290 :
  
 
===Equipe 2===
 
===Equipe 2===
 +
/* Constantes pour les broches */
 +
 +
const byte TRIGGER_PIN = 2; // Broche TRIGGER
 +
const byte ECHO_PIN = 3; // Broche ECHO
 +
const byte vibration = 10;
 +
/* Constantes pour le timeout */
 +
const unsigned long MEASURE_TIMEOUT = 25000UL; // 25ms = ~8m à 340m/s
 +
 +
/* Vitesse du son dans l'air en mm/us */
 +
const float SOUND_SPEED = 340.0 / 1000;
 +
long distance0 = 0;
 +
int cpt =0; 
 +
 +
/** Fonction setup() */
 +
void setup() {
 +
 +
/* Initialise le port série */
 +
Serial.begin(115200);
 +
/* Initialise les broches */
 +
pinMode(TRIGGER_PIN, OUTPUT);
 +
digitalWrite(TRIGGER_PIN, LOW); // La broche TRIGGER doit être à LOW au repos
 +
pinMode(ECHO_PIN, INPUT);
 +
pinMode(vibration, OUTPUT);
 +
digitalWrite(vibration,LOW);
 +
}
 +
 +
float test_dis()  //mesurer la distance et calculer la vitesse
 +
{
 +
/* 1. Lance une mesure de distance en envoyant une impulsion HIGH de 10µs sur la broche TRIGGER */
 +
digitalWrite(TRIGGER_PIN, HIGH);
 +
delayMicroseconds(10);
 +
digitalWrite(TRIGGER_PIN, LOW);
 +
/* 2. Mesure le temps entre l'envoi de l'impulsion ultrasonique et son écho (si il existe) */
 +
long measure = pulseIn(ECHO_PIN, HIGH, MEASURE_TIMEOUT);
 +
/* 3. Calcul la distance à partir du temps mesuré */
 +
float distance_mm = measure / 2.0 * SOUND_SPEED;
 +
  /*if(distance0==0)
 +
    float vitesse_m_s=0.0;  */
 +
  //vitesse_m_s=abs(vitesse_m_s);
 +
  //distance0=distance_mm;
 +
  return distance_mm;
 +
}
 +
 +
/*void vibration(int cpt)
 +
{
 +
  if(cpt>=2)
 +
  {
 +
    digitalWrite(vibration,HIGH);
 +
    cpt=0;
 +
  }
 +
}*/
 +
 +
/** Fonction loop() */
 +
void loop() {
 +
 
 +
  if(cpt > 1 ) 
 +
  {
 +
    digitalWrite(vibration,HIGH);  //si il y a deux 0.5s on trouve la vitesse > 5.0 on active vibration
 +
    cpt = 0;
 +
    delay(1000);
 +
  }
 +
  if(cpt==0)
 +
  {
 +
    digitalWrite(vibration,LOW);
 +
  }
 +
  float dis0=test_dis();      //mesurer la distance ancient en mm
 +
  Serial.print(F(" Distance0: "));
 +
  Serial.print(dis0/10);
 +
  delay(500);    //attendre 0.5s pour mesurer le 2ème distance
 +
  float dis1=test_dis();  //mesurer la distance nouvelle en mm
 +
  Serial.print("cm  Distance1: ");
 +
  Serial.print(dis1/10);
 +
  Serial.print("cm ");
 +
  float vitesse_cm_s=( (dis0 - dis1 ) / 10.0) * 2 ; 
 +
  if(vitesse_cm_s > 5.0)
 +
    cpt=cpt+1;    //chaque fois la vitesse est > 5.0 cm/s cpt s'incrmente 1
 +
  else
 +
    cpt = 0;
 +
Serial.print(F(" Cpt: "));
 +
Serial.print(cpt);
 +
  //float distance_mm=test_dis();
 +
/* Affiche les résultats en mm, cm et m */
 +
/*Serial.print(F("Distance: "));
 +
Serial.print(distance_mm);
 +
Serial.print(F("mm ("));
 +
Serial.print(distance_mm / 10.0, 2);
 +
Serial.print(F("cm, "));
 +
Serial.print(distance_mm / 1000.0, 2);
 +
Serial.print(F("m)"));*/
 +
//Serial.print(" ");
 +
Serial.print(F(" Vistesse: "));
 +
Serial.print(vitesse_cm_s);
 +
Serial.println(F(" cm/s"));
 +
 
 +
/* Délai d'attente pour éviter d'afficher trop de résultats à la seconde */
 +
delay(500);// en ms
 +
 +
}
 +
 
===Equipe 3===
 
===Equipe 3===
  

Version du 2 avril 2019 à 11:03


Présentation générale

Ce projet est mené en collaboration avec Marion Binninger, ergothérapeute à APF (Association Paralysés de France) Environnement et encadré par Alexandre Boé , Xavier Redon , Thomas Vantroys. Selon l'organisation mondiale de la santé (OMS) environ 1.25 millions de personnes meurent chaque année des suites d'accidents de la route . Dans le cas particulier des enfants ce problème est à prendre avec beaucoup de sérieux étant donnée la circulation de plus en plus dense dans le monde . Notre projet a pour but de mettre un accent sur les difficultés attentionnelles des enfants,qui sont un frein à leurs déplacements et à l'autonomie et de trouver une solution .

Description

Ce projet a pour but d'aider un jeune ayant d'importantes difficultés attentionnelles et des réactions impulsives à se déplacer en ville . Étant donné plusieurs cas réels, due à l'inattention des enfants en traversants la rue ,on a pensé à étudier différentes solutions à base de capteurs (luminosité, son, voire caméra) pour remonter une alarme lors de l'approche d'une rue.

Objectifs

Le principal déficit d'attention à corriger est la traversée de rues et pour cela nous avons pour objectifs de :

  • choisir des capteurs appropriés à la détection de l'approche des voitures .
  • définir les conditions de réaction des capteurs (intensité des sons , distance....).
  • analyser la réponse des capteurs et la comparer aux consignes que nous auront définies .
  • Selon le résultat de la comparaison , une alerte doit être déclenchée si nécessaire pour attirer l'attention de la personne concernée .

Analyse du projet

Positionnement par rapport à l'existant

C

Analyse du premier concurrent

Notre premier concurrent serait l'accompagnant de l'enfant tel que les parents,la nounou.

Avantages :

  • avoir une personne consciente comme accompagnant est certainement plus sécurisé et donne aux parents plus de garantie sur l'état de leur enfant .
  • avoir une personne qui s'adapte aux différentes situations qui se présentent et trouve des solutions adéquates .
  • éviter une grosse dépense pour notre produit .

Inconvénients :

  • limite l’indépendance de l'enfant et donc son autonomie dans la rue .
  • éviter que l'enfant soit éternellement assisté ce qui provoquerait à la longue des problèmes en confiance en soi .
  • le tuteur doit être toujours disponible ce qui n'est pas toujours facile .

Analyse du second concurrent

Notre second concurrent serait Direct Line, une société d’assurance qui a collaboré avec le cabinet d’architecture Umbrellium pour créer un nouveau «Smart Crossing», baptisé Starling Crossing, conçu pour aider à maintenir la sécurité des piétons. En effet, encore sous une forme de prototype , ce nouveau <smart crossing> n'est pas encore appliqué dans notre vie quotidienne. Avantages:

  • Il est apte à satisfaire tous les cas possibles sur le trafique.
  • Il n'est pas restreint à un type de personnes.
  • Il est disponible à tout moment, car il est appliqué sur la route.
  • C'est l'Etat qui sponsorise l'application de ce produit.

Inconvénients:

  • Le Coût de l'application du produit est excessivement cher.
  • Il utilisent énormément de capteurs, de cameras ... , qu'une panne peut endommager le fonctionnement du système.

Scénario d'usage du produit ou du concept envisagé

Jeudescartes.jpg Jeudescartes1.jpg BD.jpg

  • Je m'appelle Nino, je suis un petit garçon plein de vie, j'aime m'amuser avec mes amis. Mes parents me laisse aller à l'école tout seul, comme un grand garçon, j'aime beaucoup car je rencontre mes amis en chemin. Mais.. depuis mon accident, je ne suis plus aussi indépendant, mes parents m'ont pris une nounou qui me dépose tous les matins à l'école car depuis mon accident j'ai des troubles attentionnels, je perds très vite ma concentration et donc mes parents ont vraiment peur de me laisser traversé la route tout seul. Cependant, depuis peu ils m'ont achetés un "..." et son utilisation est tellement facile, il me permet de reprendre ma concentration surtout lorsque je traverse la route, il m'alerte losqu'une voiture se rapproche de moi. Ainsi, mes parents n'ont plus peur de me laisser partir à l'école seul comme un grand, je suis si content, mon accident m'avait enlevé mon indépendance et aujourd'hui, je me sens comme les autres enfants.

Réponse à la question difficile

  • quelles types de capteurs doit-on utiliser pour réaliser ce projet ?
  • comment choisir le type d'alimentation pour maintenir le fonctionnement des bracelets toute la journée sans devoir utiliser bes batteries lourdes ?
  • Comment faire pour assembler les composants dans une carte électronique assez petite?


"Questions à propos de l'enfant"

  • Comment se caractérise la perte de concentration de l'enfant?
  • Est-ce qu'une alarme , dans le but de capter son attention sera idéale? ou devons-nous plutôt pensés à une légère vibration?

Bibliographie et webographie

Préparation du projet

  • <<Que choisir entre LIDAR ,RADAR et ultrasons ? Quel est le plus adéquat pour notre projet ?>>
  *Que souhaite-on mesurer?  la distance entre l'enfant et les voitures.
  *Quelle condition environnementale?  Un environnement urbain.
  *Quelle distance entre l'émetteur et la cible?    Environ plus de 50m.


  • ULTRASON:
La mesure par ultrason est basé sur les ondes sonores, ils sont insensibles aux couleurs, à la brillance et à la transparence. Cependant, son utilisation est adéquat pour une surveillance de volume et pour les distances courtes moins de 8m.


  • LIDAR:
La mesure par lidar est basé sur la détection et l'estimation de la distance par la lumière. il s'agit d'une technologie de mesure à distance fondée sur l'analyse des propriétés d'un faisceau de lumière renvoyé vers son émetteur. Cette technique est parfaite lorsqu'on souhaite une indication de position précise, elle est idéale pour les petits objets et à une distance allant jusqu'à 200m. L'utilisation de la technologie LiDAR 2D ou 3D est adéquate lorsqu’une indication de position précise ou une classification d’objet sera requise, ou bien lorsqu’une grande zone de numération sera impérative (Champs de vue horizontal jusqu’à 360°, Champs de vue vertical jusqu’à 15°). Par contre, il est vivement déconseillé d’utiliser cette méthode sur de l’eau, ou dans un environnement difficile (fortes chutes de neige, pluie, brouillard, poussière…).
  • RADAR:
Le fonctionnement du RaDAR est proche de la technologie par ultrasons, il  permet de calculer la distance, le mouvement et l’angle. Le radar va devoir mesurer à plusieurs reprises. Les données vont être comparées et vérifiées, et si les résultats sont identiques alors l’objet sera reconnu. C’est ce que l’on appelle le suivi (ou tracking). La technologie RaDAR sera préconisée pour la détection d’objet volumineux car il y aura une plus grande surface de réflexion (RCS) et sera donc plus facile à détecter. L’objet à détecter sera de préférence métallique (le métal étant un réflecteur parfait pour cette technique de mesure). Le RaDAR est capable de mesurer de grands volumes jusqu’à plusieurs dizaines (voir centaines) de mètres, mêmes dans des conditions météorologiques extrêmes (pluie, neige , etc).


  • <<Quels capteurs sont adéquats pour notre projet?>>:
    *HB100 microwave : 

détecte la distance et calcule la vitesse de tout les objets qui se trouvent dans un rayon de 16m avec un angle de 72° horizentalement.

    *Capteur infrarouge C7288 ou Amg8833: detécte la présence des personnes et/ou d'animaux à une distance maximale de 7m.
    *utilisation :
  • le capteur amg8833 détecte la présence


  • Conclusion:

D'après l'analyse de ces trois types de captations, il en découle que le radar est le plus adéquat à notre projet. En effet, nous aurons besoin d'une grande surface de réflexion, et notre cible principale sera les voitures.



Cahier des charges du groupe

Pour répondre aux besoins de l'enfant souffrant de troubles attentionnels ,on propose:

  *Pour le calcul de la vitesse des voitures, on utilisera un capteur .
  *Pour alerter l'enfant du danger (voitures, vélos...) on utilisera une vibration ou une alarme .
  *Pour assurer l'énergie qui sera consommée par notre produit, on utilisera une batterie qui doit être légère.
  *Pour implanter l'algorithme, on utilisera un arduino.

Cahier des charges des équipes

Equipe 1

Equipe 2

Equipe 3

Choix techniques : matériel et logiciel

  • CAPTEUR HC-SR04:
 Le capteur HC-SR04 est un capteur à ultrason low cost. Ce capteur fonctionne avec une tension d'alimentation de 5 volts, dispose d'un angle de mesure de 15° environ et permet de faire des mesures de distance entre 2 centimètres et 4 mètres avec une précision de 3mm (en théorie, dans la pratique ce n'est pas tout à fait exact).
  • Le MONTAGE:
  L'alimentation 5V de la carte Arduino va sur la broche VCC du capteur.
  
  La broche GND de la carte Arduino va sur la broche GND du capteur.
  La broche D2 de la carte Arduino va sur la broche TRIGGER du capteur.
  La broche D3 de la carte Arduino va sur la broche ECHO du capteur.
  La broche D9 de la carte Arduino est connectée à un vibreur .  








  • LE CODE AVEC CALCUL DE VITESSE:
 /* Constantes pour les broches */

const byte TRIGGER_PIN = 2; // Broche TRIGGER const byte ECHO_PIN = 3; // Broche ECHO

/* Constantes pour le timeout */ const unsigned long MEASURE_TIMEOUT = 25000UL; // 25ms = ~8m à 340m/s

/* Vitesse du son dans l'air en mm/us */ const float SOUND_SPEED = 340.0 / 1000; long distance0 = 0; /** Fonction setup() */ void setup() {

 /* Initialise le port série */
 Serial.begin(115200);
  
 /* Initialise les broches */
 pinMode(TRIGGER_PIN, OUTPUT);
 digitalWrite(TRIGGER_PIN, LOW); // La broche TRIGGER doit être à LOW au repos
 pinMode(ECHO_PIN, INPUT);

}

/** Fonction loop() */ void loop() {

 /* 1. Lance une mesure de distance en envoyant une impulsion HIGH de 10µs sur la broche TRIGGER */
 digitalWrite(TRIGGER_PIN, HIGH);
 delayMicroseconds(10);
 digitalWrite(TRIGGER_PIN, LOW);
 
 /* 2. Mesure le temps entre l'envoi de l'impulsion ultrasonique et son écho (si il existe) */
 long measure = pulseIn(ECHO_PIN, HIGH, MEASURE_TIMEOUT);
  
 /* 3. Calcul la distance à partir du temps mesuré */
 float distance_mm = measure / 2.0 * SOUND_SPEED;
  float vitesse_m_s=( (distance0 - distance_mm) / 10.0) * 2 ;
  if(!distance0)
     vitesse_m_s=0.0;
  vitesse_m_s=abs(vitesse_m_s);
  distance0=distance_mm;
  
 /* Affiche les résultats en mm, cm et m */
 Serial.print(F("Distance: "));
 Serial.print(distance_mm);
 Serial.print(F("mm ("));
 Serial.print(distance_mm / 10.0, 2);
 Serial.print(F("cm, "));
 Serial.print(distance_mm / 1000.0, 2);
 Serial.print(F("m)"));
 //Serial.print(" ");
 Serial.print(F(" Vistesse: "));
 Serial.print(vitesse_m_s);
 Serial.println(F(" m/s"));
  
 /* Délai d'attente pour éviter d'afficher trop de résultats à la seconde */
 delay(500);// en ms

}


  • TELEVERSER le programme:
Dans le terminal: su/glopglop/arduino/  ET tools/ACM0

Equipe 1

/* Constantes pour les broches */

const byte TRIGGER_PIN = 2; // Broche TRIGGER const byte ECHO_PIN = 3; // Broche ECHO /* Constantes pour le timeout */ const unsigned long MEASURE_TIMEOUT = 25000UL; // 25ms = ~8m à 340m/s

/* Vitesse du son dans l'air en mm/us */ const float SOUND_SPEED = 340.0 / 1000; long distance0 = 0;

/** Fonction setup() */ void setup() {

/* Initialise le port série */
Serial.begin(115200);
/* Initialise les broches */
pinMode(TRIGGER_PIN, OUTPUT);
digitalWrite(TRIGGER_PIN, LOW); // La broche TRIGGER doit être à LOW au repos
pinMode(ECHO_PIN, INPUT);

}

float test_dis() //mesurer la distance et calculer la vitesse {

/* 1. Lance une mesure de distance en envoyant une impulsion HIGH de 10µs sur la broche TRIGGER */
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN, LOW);
/* 2. Mesure le temps entre l'envoi de l'impulsion ultrasonique et son écho (si il existe) */
long measure = pulseIn(ECHO_PIN, HIGH, MEASURE_TIMEOUT);
/* 3. Calcul la distance à partir du temps mesuré */
float distance_mm = measure / 2.0 * SOUND_SPEED;
 /*if(distance0==0)
    float vitesse_m_s=0.0;  */
 //vitesse_m_s=abs(vitesse_m_s);
 //distance0=distance_mm;
 return distance_mm;

}

/** Fonction loop() */ void loop() {

 float dis0=test_dis();
 Serial.print(F(" Distance0: "));
 Serial.print(dis0/10);
 delay(500);
 float dis1=test_dis();
 Serial.print("cm  Distance1: ");
 Serial.print(dis1/10);
 Serial.print("cm ");
 float vitesse_cm_s=( (dis0 - dis1 ) / 10.0) * 2 ;
  //float distance_mm=test_dis();
/* Affiche les résultats en mm, cm et m */
/*Serial.print(F("Distance: "));
Serial.print(distance_mm);
Serial.print(F("mm ("));
Serial.print(distance_mm / 10.0, 2);
Serial.print(F("cm, "));
Serial.print(distance_mm / 1000.0, 2);
Serial.print(F("m)"));*/
//Serial.print(" ");
Serial.print(F(" Vistesse: "));
Serial.print(vitesse_cm_s);
Serial.println(F(" cm/s"));
 
/* Délai d'attente pour éviter d'afficher trop de résultats à la seconde */
delay(500);// en ms

}


Equipe 2

/* Constantes pour les broches */

const byte TRIGGER_PIN = 2; // Broche TRIGGER const byte ECHO_PIN = 3; // Broche ECHO const byte vibration = 10; /* Constantes pour le timeout */ const unsigned long MEASURE_TIMEOUT = 25000UL; // 25ms = ~8m à 340m/s

/* Vitesse du son dans l'air en mm/us */ const float SOUND_SPEED = 340.0 / 1000; long distance0 = 0; int cpt =0;

/** Fonction setup() */ void setup() {

/* Initialise le port série */
Serial.begin(115200);
/* Initialise les broches */
pinMode(TRIGGER_PIN, OUTPUT);
digitalWrite(TRIGGER_PIN, LOW); // La broche TRIGGER doit être à LOW au repos
pinMode(ECHO_PIN, INPUT);
pinMode(vibration, OUTPUT);
digitalWrite(vibration,LOW);

}

float test_dis() //mesurer la distance et calculer la vitesse {

/* 1. Lance une mesure de distance en envoyant une impulsion HIGH de 10µs sur la broche TRIGGER */
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN, LOW);
/* 2. Mesure le temps entre l'envoi de l'impulsion ultrasonique et son écho (si il existe) */
long measure = pulseIn(ECHO_PIN, HIGH, MEASURE_TIMEOUT);
/* 3. Calcul la distance à partir du temps mesuré */
float distance_mm = measure / 2.0 * SOUND_SPEED;
 /*if(distance0==0)
    float vitesse_m_s=0.0;  */
 //vitesse_m_s=abs(vitesse_m_s);
 //distance0=distance_mm;
 return distance_mm;

}

/*void vibration(int cpt) {

 if(cpt>=2)
 {
   digitalWrite(vibration,HIGH);
   cpt=0;
 }

}*/

/** Fonction loop() */ void loop() {

 if(cpt > 1 )  
 {
   digitalWrite(vibration,HIGH);  //si il y a deux 0.5s on trouve la vitesse > 5.0 on active vibration
   cpt = 0;
   delay(1000);
 }
 if(cpt==0)
 {
   digitalWrite(vibration,LOW);
 }
 float dis0=test_dis();      //mesurer la distance ancient en mm
 Serial.print(F(" Distance0: "));
 Serial.print(dis0/10);
 delay(500);     //attendre 0.5s pour mesurer le 2ème distance
 float dis1=test_dis();   //mesurer la distance nouvelle en mm
 Serial.print("cm  Distance1: ");
 Serial.print(dis1/10);
 Serial.print("cm ");
 float vitesse_cm_s=( (dis0 - dis1 ) / 10.0) * 2 ;  
 if(vitesse_cm_s > 5.0)
   cpt=cpt+1;    //chaque fois la vitesse est > 5.0 cm/s cpt s'incrmente 1 
 else
   cpt = 0;
Serial.print(F(" Cpt: "));
Serial.print(cpt);
  //float distance_mm=test_dis();
/* Affiche les résultats en mm, cm et m */
/*Serial.print(F("Distance: "));
Serial.print(distance_mm);
Serial.print(F("mm ("));
Serial.print(distance_mm / 10.0, 2);
Serial.print(F("cm, "));
Serial.print(distance_mm / 1000.0, 2);
Serial.print(F("m)"));*/
//Serial.print(" ");
Serial.print(F(" Vistesse: "));
Serial.print(vitesse_cm_s);
Serial.println(F(" cm/s"));
 
/* Délai d'attente pour éviter d'afficher trop de résultats à la seconde */
delay(500);// en ms

}

Equipe 3

Liste des tâches à effectuer

Equipe 1

Equipe 2

Equipe 3

Calendrier prévisionnel

Le calendrier prévisionnel peut se concrétiser sous la forme d'un diagramme de GANTT.

Equipe 1

Equipe 2

Equipe 3

Réalisation du Projet

Projet S6

Eventuellement créer des sous-pages par équipe avec le compte-rendu des réunions de groupe sur cette page principale.

Semaine 4

Semaine 5

  • Compte-Rendu: Séance 26/03/2019
  -Connection de la vibration sur l'arduino (broche ~9).
  -Structuration du programme en sous-programmes)
  -Adaptation du programme pour prendre en compte la vibration ,si la vitesse est supérieure à 20cm/s.

Semaine 6

Semaine 7

Semaine 8

Semaine 9

Semaine 10

Semaine 11

Semaine 12

Documents Rendus

Projet S7

Documents Rendus

Projet S8

Documents Rendus