IMA4 2017/2018 P17 : Différence entre versions

De Wiki de Projets IMA
(Semaine 7)
(Fichiers Rendus)
 
(110 révisions intermédiaires par le même utilisateur non affichées)
Ligne 9 : Ligne 9 :
  
 
==Objectifs==
 
==Objectifs==
De plus en plus de personnes se retrouvent seules en vieillissant, aussi bien chez elles qu’à l’extérieur. Nous sommes là pour faire le lien entre les deux. Notre montre, simple d’utilisation, vous permettra de rentrer chez vous au plus vite et d’appeler vos proches ou même les urgences en cas de nécessité. Cette montre dispose de trois boutons. Le premier permet de retrouver son chemin, le deuxième d’appeler ses proches et les urgences en cas de non-réponse et le troisième de revenir à la fonction horloge. Cette montre est reliée à une application installée sur le téléphone de la personne référente, application qui reçoit les appels et affiche la position de la montre.
+
De plus en plus de personnes se retrouvent seules en vieillissant, aussi bien chez elles qu’à l’extérieur. Nous sommes là pour faire le lien entre les deux. Notre montre, simple d’utilisation, vous permettra de rentrer chez vous au plus vite et d’appeler vos proches . Cette montre dispose de deux boutons. Le premier permet de retrouver son chemin, le deuxième d'envoyer votre position à vos proches ou de les appeler  .
  
 
==Positionnement par rapport à l'existant==
 
==Positionnement par rapport à l'existant==
Ligne 79 : Ligne 79 :
 
==Liste des tâches à effectuer==
 
==Liste des tâches à effectuer==
  
===Tâche 1 : Réalisation du prototype===
+
===Tâche 1 : Tests sur prototype===
  
*1.1 Montage sur plaque d'essai et test de l'ensemble
+
*1.1 Géolocatisation
*1.2 Conception de la carte électronique rassemblant le matériel
+
*1.2 Envoi de position par SMS
*1.3 Réalisation de la carte et son boîtier en s'assurant que cela ressemblera à une montre vu le volume des boucliers
+
*1.3 Appel au référent
 +
*1.4 Orientation par flèches
  
===Tache 2 : Géolocalisation===
+
===Tache 2 : Configuration et programmation du matériel de réalisation  pour :  ===
*2.1 Envoi de la position en appuyant sur le bouton poussoir 1
+
 
*2.2 Affichage de la position déjà envoyée , à l'aide d'une application mobile (envoi lien Google Maps)
+
*2.1 Géolocalisation
*2.3 Afficher un message d'envoi de la position sur LCD
+
*2.2 Envoi SMS 
 
+
*2.3 Appel au référent
 
+
*2.4 Orientation par flèches
===Tache 3 : Orientation vers le domicile ===
 
 
 
*Afficher les flèches d'orientation sur l’écran en fonction de la position
 
  
 +
===Tache 3 : Réalisation de la montre ===
  
===Tache  4 : Appeler le référent===
+
*3.1Carte électronique regroupant l'ensemble des composants
*4.1 Configuration du bouclier GSM
+
*3.2 Boîtier ressemblant à une montre ( Impression 3D )
*4.2 Appeler le référent  en appuyant sur bouton poussoir 2
 
*4.3 Envoi SMS personnalisé (Optionnel)
 
*4.4 Afficher un message d'envoi d'appel sur LCD
 
 
 
===Tache 5 : Horloge===
 
*Afficher l'horloge sur LCD en appuyant sur le bouton poussoir 3
 
  
 
==Feuille d'heures==
 
==Feuille d'heures==
  
 
{| class="wikitable"
 
{| class="wikitable"
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Total
+
!Tâche !! Prélude !! Heures S1 !! Heures S2 !! Heures S3 !! Heures S4 !! Heures S5 !! Heures S6 !! Heures S7 !! Heures S8 !! Heures S9 !! Heures S10 !! Heures S11 !! Heures S12 !! Heures S13 !! Après les vacances !! Total
 
|-
 
|-
 
| Analyse du projet  
 
| Analyse du projet  
 
| 0
 
| 0
 
|  
 
|  
 +
|
 +
|
 +
|
 +
|
 
|
 
|
 
|
 
|
Ligne 124 : Ligne 121 :
 
|
 
|
 
|-
 
|-
|Choix du matériel
+
| Géolocalisation :NMEA Sentences (Matériel 1)
 +
|
 +
|8h
 +
|
 +
|
 
|
 
|
|6h
 
 
|
 
|
 
|
 
|
Ligne 139 : Ligne 139 :
 
|
 
|
 
|-
 
|-
|Réalisation de la tache 2 : Géolocalisation 
+
|Envoi de la position par SMS (Matériel 1)
 
|
 
|
 
|
 
|
 
|8h
 
|8h
|6h
 
 
|
 
|
 
|
 
|
Ligne 151 : Ligne 150 :
 
|
 
|
 
|
 
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|-
 +
|Appel au référent(Matériel 1)
 +
|
 +
|
 +
|
 +
|8H
 +
|2H
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|-
 +
|Affichage des flèches d'orientation sur LCD
 +
|
 +
|
 +
|
 +
|
 +
|6H
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|-
 +
|Géolocalisation + flèches d'orientation
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|8H
 +
|4H
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|-
 +
|Configuration du circuit FONA
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|4H
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|-
 +
|Validation du montage final avant la réalisation de la carte
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|4H+2H
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|-
 +
|Réalisation de la carte + test GPS
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|8h 
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|-
 +
|Réalisation de la carte +GPS+ Appel
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|4H+2H
 +
|8H
 +
|
 +
|
 +
|
 +
|
 +
|-
 +
| Réalisation de la carte + Envoi SMS
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|2H+4H+ 1H
 +
|
 +
|
 +
|
 +
|-
 +
|Carte réalisée + Code final
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|8H
 +
|
 +
|
 +
|-
 +
| Solutions essayées pour FIX du GPS
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|36h
 
|
 
|
 
|-
 
|-
|Tache 3 en cours
+
| Total
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 
|
 
|
 
|
 
|
 
|
 
|
 
|
 
|
|8h
 
|4h
 
 
|
 
|
 
|
 
|
Ligne 165 : Ligne 352 :
 
|
 
|
 
|
 
|
 +
|127
 
|}
 
|}
  
Ligne 204 : Ligne 392 :
 
'''GDOP :''' Geometric dilution of precision = indicateur sur le positionnement des satellites.
 
'''GDOP :''' Geometric dilution of precision = indicateur sur le positionnement des satellites.
  
Pour récupérer les NMEA sentences , je branche les pins TX et RX du GPS au pin 0 et 1 de l'Arduino . Cela me permet d'établir une communication série avec l'ordinateur en passant par Arduino , le GPS envoie la data sans programmer l'Arduino :
+
Pour récupérer les NMEA sentences , je branche les pins TX et RX du GPS au pin 0 et 1 de l'Arduino . Cela me permet d'établir une communication série avec l'ordinateur en passant par Arduino , le GPS envoi la data sans programmer l'Arduino :
  
 
[[Image:Gps_1.png|700px|thumb|center]]
 
[[Image:Gps_1.png|700px|thumb|center]]
  
==Semaine 1==
+
==Semaine 1 :  Géolocalisation :NMEA Sentences ==
 
Puisque je m'intéresse uniquement à $GPRMC et $GPGGA, le code suivant me permettra de les récupérer et afficher les paramètres de position .
 
Puisque je m'intéresse uniquement à $GPRMC et $GPGGA, le code suivant me permettra de les récupérer et afficher les paramètres de position .
  
<pre>#include <Adafruit_GPS.h>
 
#include <SoftwareSerial.h>
 
SoftwareSerial mySerial(3, 2);
 
Adafruit_GPS GPS(&mySerial);
 
String NMEA1; 
 
String NMEA2; 
 
char c;       
 
 
void setup()  {
 
  Serial.begin(115200); 
 
  GPS.begin(9600);     
 
  GPS.sendCommand("$PGCMD,33,0*6D");
 
  GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
 
  GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ); 
 
  delay(1000);  }
 
  
void loop(){
 
  readGPS();
 
}
 
 
void readGPS(){ 
 
 
 
  clearGPS();   
 
 
  while(!GPS.newNMEAreceived()) {
 
        c=GPS.read();
 
  }
 
 
GPS.parse(GPS.lastNMEA()); 
 
NMEA1=GPS.lastNMEA();     
 
 
    while(!GPS.newNMEAreceived()) { 
 
      c=GPS.read();
 
}
 
 
GPS.parse(GPS.lastNMEA());
 
NMEA2=GPS.lastNMEA();
 
 
  Serial.println(NMEA1);
 
  Serial.println(NMEA2);
 
  Serial.println("");
 
  Serial.println(NMEA1);
 
  Serial.println(NMEA2);
 
  Serial.println("");
 
  Serial.print("\nTime: ");
 
  Serial.print(GPS.hour, DEC); Serial.print(':');
 
  Serial.print(GPS.minute, DEC); Serial.print(':');
 
  Serial.print(GPS.seconds, DEC); Serial.print('.');
 
  Serial.println(GPS.milliseconds);
 
  Serial.print("Date: ");
 
  Serial.print(GPS.day, DEC); Serial.print('/');
 
  Serial.print(GPS.month, DEC); Serial.print("/20");
 
  Serial.println(GPS.year, DEC);
 
  Serial.print("Fix: "); Serial.print((int)GPS.fix);
 
  Serial.print(" quality: "); Serial.println((int)GPS.fixquality);
 
 
    if (GPS.fix) { 
 
        Serial.print("Location: ");
 
        Serial.print(GPS.latitude, 4); Serial.print(GPS.lat);
 
        Serial.print(", ");
 
        Serial.print(GPS.longitude, 4); Serial.println(GPS.lon);
 
        Serial.print("Location (in degrees, works with Google Maps): ");
 
        Serial.print(GPS.latitudeDegrees, 4);
 
        Serial.print(", ");
 
        Serial.println(GPS.longitudeDegrees, 4);
 
        Serial.print("Speed (knots): "); Serial.println(GPS.speed);
 
        Serial.print("Angle: "); Serial.println(GPS.angle);
 
        Serial.print("Altitude: "); Serial.println(GPS.altitude);
 
        Serial.print("Satellites: "); Serial.println((int)GPS.satellites);
 
}
 
}
 
 
void clearGPS() { 
 
 
  while(!GPS.newNMEAreceived())
 
    {
 
        c=GPS.read();
 
    }
 
 
GPS.parse(GPS.lastNMEA());
 
 
  while(!GPS.newNMEAreceived()) {
 
 
      c=GPS.read();
 
}
 
 
GPS.parse(GPS.lastNMEA());}</pre>
 
  
 
[[Image:Gps_fix_0_1.png|500px|thumb|center]]
 
[[Image:Gps_fix_0_1.png|500px|thumb|center]]
Ligne 305 : Ligne 407 :
 
[[Image:Gps_khdem.png|900px|thumb|center]]
 
[[Image:Gps_khdem.png|900px|thumb|center]]
  
==semaine 2==
+
'''Position obtenue par GPS '''
 +
 
 +
[[Image:Maps_lille.png|700pxthumb|center]]
 +
 
 +
==semaine 2 : Envoi de la position par SMS ==
 
Maintenant que j'ai la position , il faut l'envoyer par SMS .
 
Maintenant que j'ai la position , il faut l'envoyer par SMS .
  
 
'''Partie GSM'''
 
'''Partie GSM'''
  
le code ci-dessous envoie la position (sous forme de lien vers google maps) un fois le bouton est appuyé.
+
le code ci-dessous envoi la position (sous forme de lien vers google maps) un fois le bouton est appuyé.
<pre>
 
#include <GSM.h>
 
#include <Adafruit_GPS.h>
 
#include<AltSoftSerial.h>//utilisation de AltSoftSerial pour eviter le conflit des librairies GSM et GPS pour utiliser SoftwareSerial.h
 
AltSoftSerial mySerial(3, 2);
 
Adafruit_GPS GPS(&mySerial);// objet GPS 
 
 
 
#define PINNUMBER "1234"// code pin
 
GSM gsmAccess;
 
GSM_SMS sms;// objet sms
 
 
 
const int buttonPin = 8;
 
int buttonState = 0;
 
 
 
  void setup() {
 
      pinMode(buttonPin, INPUT_PULLUP);
 
      Serial.begin(9600);
 
      boolean notConnected = true;
 
      Serial.println("Initialisation GSM en cours ...");
 
 
 
//test d'initialisation GSM
 
  
    while (notConnected) {
 
        if (gsmAccess.begin(PINNUMBER) == GSM_READY) {
 
            notConnected = false;
 
        }
 
    else {
 
      Serial.println("non connecté");
 
      delay(1000);
 
      }
 
      Serial.println("GSM initialisé: appuyez sur le bouton pour envoyé la position par sms ");
 
      }
 
 
}
 
void loop() {
 
 
buttonState = digitalRead(buttonPin);
 
char* remoteNum="0760153353"; // num destinataire
 
String latitude = String(GPS.latitudeDegrees);
 
String longitude= String(GPS.longitudeDegrees);
 
// envoie du message
 
 
    if (buttonState == LOW) {
 
        Serial.println("envoie de la position en cours ...\n");
 
        sms.beginSMS(remoteNum);
 
        sms.print("lien google maps: http://maps.google.com/?q="+latitude+","+longitude);
 
        sms.endSMS();
 
        Serial.println("\nPosition envoyée:lien google maps: http://maps.google.com/?q="+latitude+","+longitude);
 
      }
 
}
 
</pre>
 
  
 
Resultat:  
 
Resultat:  
Ligne 368 : Ligne 424 :
 
Remarque : la latitude et la longitude valent "0" car le fix du GPS n'est pas bon .
 
Remarque : la latitude et la longitude valent "0" car le fix du GPS n'est pas bon .
  
==semaine 3==
+
==semaine 3: Appel au référent ==
  
 
Code mis-à-jour de manière à appeler le référent une fois le bouton 2 est appuyé:  
 
Code mis-à-jour de manière à appeler le référent une fois le bouton 2 est appuyé:  
  
<pre>#include <GSM.h>
 
#include <Adafruit_GPS.h>
 
#include<AltSoftSerial.h>//utilisation de AltSoftSerial pour eviter le conflit des librairies GSM et GPS pour utiliser SoftwareSerial.h
 
 
AltSoftSerial mySerial(3, 2);
 
GSMVoiceCall appel;
 
Adafruit_GPS GPS(&mySerial);// objet GPS 
 
 
#define PINNUMBER "1234"// code pin
 
 
GSM gsmAccess;
 
GSM_SMS sms;// objet sms
 
 
const int buttonPin1 = 12;
 
const int buttonPin2 = 8;
 
int buttonState1=0;
 
int buttonState2 = 0;
 
 
void setup() {
 
  pinMode(buttonPin2, INPUT_PULLUP);
 
  pinMode(buttonPin1, INPUT_PULLUP);
 
  Serial.begin(9600);
 
  boolean notConnected = true;
 
  Serial.println("Initialisation GSM en cours ...");
 
  //test d'initialisation GSM
 
    while (notConnected) {
 
    if (gsmAccess.begin(PINNUMBER) == GSM_READY) {
 
        notConnected = false;
 
        Serial.println("GSM initialisé: appuyez sur le bouton 1 pour appeler le référent  ");
 
        Serial.println("GSM initialisé: appuyez sur le bouton 2 pour envoyer la position par sms ");
 
        }
 
    else {
 
        Serial.println("non connecté");
 
        delay(1000);
 
        }
 
                          }
 
        }
 
void loop() {
 
   
 
    buttonState2 = digitalRead(buttonPin2);
 
    buttonState1 = digitalRead(buttonPin1);
 
    char* remoteNum="0618659369"; // num destinataire
 
    String latitude = String(GPS.latitudeDegrees);
 
    String longitude= String(GPS.longitudeDegrees);
 
  
        //envoi du message
 
      if (buttonState2 == LOW){
 
          Serial.println("envoie de la position en cours ...\n");
 
          sms.beginSMS(remoteNum);
 
          sms.print("lien google maps: http://maps.google.com/?q="+latitude+","+longitude);
 
          sms.endSMS();
 
}
 
 
          //appel au référent
 
      if (buttonState1 == LOW) {
 
          if (appel.voiceCall(remoteNum)){
 
              Serial.print("\n appel en cours... \n");
 
              Serial.println("le référent a décroché, parlez ! si vous voulez raccrocher appuyer de nouveau sur le bouton 1");
 
              while(buttonState2 !=LOW && (appel.getvoiceCallStatus()==TALKING));
 
              delay(100);
 
              appel.hangCall(); 
 
          }
 
          Serial.print("\n fin d'appel \n");
 
          }
 
  }
 
</pre>
 
 
Remarque :  
 
Remarque :  
 
Code compile mais redondance d'appel sans pourvoir raccrocher du coté de l'appelant: d'autres essais à effectuer après obtention de carte SIM .
 
Code compile mais redondance d'appel sans pourvoir raccrocher du coté de l'appelant: d'autres essais à effectuer après obtention de carte SIM .
  
==Semaine 4==
+
==Semaine 4 : Affichage des flèches d'orientation sur LCD ==
Partie LCD : Affichage des flèches d'orientation .
+
 
 
Travail sur papier :
 
  
 
[[Image:Travail_papier.jpg]]
 
[[Image:Travail_papier.jpg]]
Ligne 458 : Ligne 447 :
  
  
Code :
 
  
<pre>
 
#include <Adafruit_GFX.h>
 
#include <SPI.h>
 
#include <Wire.h>
 
#include <Adafruit_ILI9341.h>
 
#include <Adafruit_STMPE610.h>
 
  
#define STMPE_CS 8
+
==Semaine 5 et 6 : Géolocalisation + flèches d'orientation ==
Adafruit_STMPE610 ts = Adafruit_STMPE610(STMPE_CS);
 
#define TFT_CS 10
 
#define TFT_DC 9
 
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
 
 
 
#define D_X0 160
 
#define D_Y0 260
 
#define D_X1 60
 
#define D_Y1 260
 
#define D_X2 110
 
#define D_Y2 300
 
 
 
 
 
#define G_X0 160
 
#define G_Y0 60
 
#define G_X1 60
 
#define G_Y1 60
 
#define G_X2 110
 
#define G_Y2 20
 
 
 
 
 
#define H_X0 60
 
#define H_Y0 100
 
#define H_X1 60
 
#define H_Y1 220
 
#define H_X2 20
 
#define H_Y2 160
 
 
 
 
 
#define B_X0 180
 
#define B_Y0 100
 
#define B_X1 180
 
#define B_Y1 220
 
#define B_X2 220
 
#define B_Y2 160
 
 
 
void droite()
 
{
 
  tft.fillTriangle(D_X0,D_Y0,D_X1,D_Y1,D_X2,D_Y2,ILI9341_GREEN);
 
  tft.setCursor(D_X1+13,D_Y0);
 
 
 
  tft.setTextColor(ILI9341_BLACK);
 
  tft.setTextSize(2);
 
  tft.println("droite");
 
}
 
 
 
void gauche()
 
{
 
 
  tft.fillTriangle(G_X0,G_Y0,G_X1,G_Y1,G_X2,G_Y2,ILI9341_GREEN);
 
  tft.setCursor(G_X1+13,G_Y1-13);
 
  tft.setTextColor(ILI9341_BLACK);
 
  tft.setTextSize(2);
 
  tft.println("gauche");
 
}
 
void haut()
 
{
 
 
  tft.fillTriangle(H_X0,H_Y0,H_X1,H_Y1,H_X2,H_Y2,ILI9341_GREEN);
 
 
}
 
void bas()
 
{
 
 
 
  tft.fillTriangle(B_X0,B_Y0,B_X1,B_Y1,B_X2,B_Y2,ILI9341_GREEN);
 
 
}
 
 
 
void setup(void)
 
{
 
  Serial.begin(9600);
 
  tft.begin();
 
  if (!ts.begin()) {
 
    Serial.println("Unable to start touchscreen.");
 
  }
 
  else {
 
    Serial.println("Touchscreen started.");
 
  }
 
 
 
  tft.fillScreen(ILI9341_PINK);
 
 
 
}
 
 
 
void loop()
 
{
 
 
 
droite();
 
gauche();
 
haut();
 
bas();
 
 
 
}
 
</pre>
 
 
 
==Semaine 5==
 
  
 
Après le dessin des flèches sur LCD, il faut maintenant les faire clignoter selon l'orientation du domicile par rapport à la position .
 
Après le dessin des flèches sur LCD, il faut maintenant les faire clignoter selon l'orientation du domicile par rapport à la position .
Ligne 608 : Ligne 495 :
 
[[Image:Test_orient.png]]
 
[[Image:Test_orient.png]]
  
<pre>#include <Adafruit_GPS.h>
+
Les dimensions de l’afficheur Microview ne permet pas d’afficher les flèches à la fois. Il affichera une flèche à la fois . Pour tester l’affichage de toutes les flèches , le code “semaine 6_1” flèche par flèche chaque seconde .  
#include <AltSoftSerial.h>
+
Pour tracer un flèche , j’ai “dessiné” un triangle collé à un rectangle .
#include <Adafruit_GFX.h>
 
#include <SPI.h>
 
#include <Wire.h>
 
#include <Adafruit_ILI9341.h>
 
#include <Adafruit_STMPE610.h>
 
  
  
#define STMPE_CS 8
+
[[Image:fleche_uviewer.jpg|600px|]]
Adafruit_STMPE610 ts = Adafruit_STMPE610(STMPE_CS);
 
#define TFT_CS 10
 
#define TFT_DC 9
 
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
 
 
 
 
 
#define D_X0 160
 
#define D_Y0 260
 
#define D_X1 60
 
#define D_Y1 260
 
#define D_X2 110
 
#define D_Y2 300
 
 
 
#define G_X0 160
 
#define G_Y0 60
 
#define G_X1 60
 
#define G_Y1 60
 
#define G_X2 110
 
#define G_Y2 20
 
 
 
#define H_X0 60
 
#define H_Y0 100
 
#define H_X1 60
 
#define H_Y1 220
 
#define H_X2 20
 
#define H_Y2 160
 
 
 
 
 
#define B_X0 180
 
#define B_Y0 100
 
#define B_X1 180
 
#define B_Y1 220
 
#define B_X2 220
 
#define B_Y2 160
 
 
 
#define lat_domicile 50.61108650000001
 
#define longi_domicile 3.1490148000000318
 
  
AltSoftSerial mySerial(3, 2);
+
==Semaine 7 :Configuration du circuit FONA ==
Adafruit_GPS GPS(&mySerial);
 
String NMEA1;  
 
String NMEA2; 
 
char c;     
 
 
void setup() 
 
{
 
// Serial.begin(9600);
 
  tft.begin();
 
  if (!ts.begin()) {
 
    Serial.println("Unable to start touchscreen.");
 
  }
 
  else {
 
    Serial.println("Touchscreen started.");
 
  }
 
 
 
  tft.fillScreen(ILI9341_PINK);
 
 
  Serial.begin(115200); 
 
  GPS.begin(9600);     
 
  GPS.sendCommand("$PGCMD,33,0*6D");
 
  GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
 
  GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ); 
 
  delay(1000); 
 
}
 
 
void loop()  {                 
 
  
    Serial.print("lien google maps: http://maps.google.com/?q=");
+
'''Connexion du FONA avec PC via USB '''
    Serial.print(GPS.latitudeDegrees, 4);
 
    Serial.print(", ");
 
    Serial.println(GPS.longitudeDegrees, 4);
 
  
    if (lat_domicile-GPS.latitudeDegrees>0){
+
Sur le terminal :
      haut();
 
     
 
    }
 
    else{
 
      bas();
 
    }
 
if(longi_domicile-GPS.longitudeDegrees>0){
 
  droite();
 
}
 
else{
 
  gauche();
 
}
 
}
 
  
 +
1 - "lsusb" :
  
void droite()
+
[[Image:terminal_fona.png]]
{
 
 
 
  tft.fillTriangle(D_X0,D_Y0,D_X1,D_Y1,D_X2,D_Y2,ILI9341_GREEN);
 
  tft.setCursor(D_X1+13,D_Y0);
 
 
 
  tft.setTextColor(ILI9341_BLACK);
 
  tft.setTextSize(2);
 
  tft.println("droite");
 
  //delay(5000);
 
  
}
+
2 -“sudo rmmod usbserial”:
  
void gauche()
+
3 -Télécharger GobiSerial et le décompresser
{
 
 
  tft.fillTriangle(G_X0,G_Y0,G_X1,G_Y1,G_X2,G_Y2,ILI9341_GREEN);
 
  tft.setCursor(G_X1+13,G_Y1-13);
 
  tft.setTextColor(ILI9341_BLACK);
 
  tft.setTextSize(2);
 
  tft.println("gauche");
 
}
 
void haut()
 
{
 
 
  tft.fillTriangle(H_X0,H_Y0,H_X1,H_Y1,H_X2,H_Y2,ILI9341_GREEN);
 
 
}
 
void bas()
 
{
 
  
  tft.fillTriangle(B_X0,B_Y0,B_X1,B_Y1,B_X2,B_Y2,ILI9341_GREEN);
+
4-"cd GobiSerial && make"
 
}
 
</pre>
 
==Semaine 6==
 
  
Affichage des flèches d'orientation sur le nouveau écran OLED Display de MicroView :
+
5-Un fichier “GobiSerial.ko”  est généré
  
<pre>
+
6-"sudo modprobe usbserial && sudo insmod GobiSerial.ko" pour installer le driver
#include <AltSoftSerial.h>
 
#include <SPI.h>
 
#include <Wire.h>
 
#include <MicroView.h>
 
#include <Adafruit_GPS.h>
 
  
 +
7-ls -l /dev/ttyUSB* :
  
#define lat_domicile 50.61108650000001
+
[[Image:usbliste.png]]
#define longi_domicile 3.1490148000000318
 
  
AltSoftSerial mySerial(3, 2);
+
/dev/ttyUSB0->4 présents ==> Driver installé !
Adafruit_GPS GPS(&mySerial);
 
String NMEA1; 
 
String NMEA2; 
 
char c;     
 
 
void setup() 
 
{
 
// Serial.begin(9600);
 
uView.begin();
 
uView.clear(PAGE);
 
 
 
  Serial.begin(115200); 
 
  GPS.begin(9600);     
 
  GPS.sendCommand("$PGCMD,33,0*6D");
 
  GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
 
  GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ); 
 
  delay(1000); 
 
}
 
 
void loop() {                 
 
  
    Serial.print("lien google maps: http://maps.google.com/?q=");
 
    Serial.print(GPS.latitudeDegrees, 4);
 
    Serial.print(", ");
 
    Serial.println(GPS.longitudeDegrees, 4);
 
while(lat_domicile-GPS.latitudeDegrees!=0){
 
    if (lat_domicile-GPS.latitudeDegrees>0){
 
      haut();
 
      uView.clear(PAGE);
 
    }
 
    else{
 
      bas();
 
      uView.clear(PAGE);
 
    }
 
}
 
while(longi_domicile-GPS.longitudeDegrees!=0){
 
if(longi_domicile-GPS.longitudeDegrees>0){
 
  droite();
 
  uView.clear(PAGE);
 
}
 
else{
 
  gauche();
 
  uView.clear(PAGE);
 
}
 
}
 
}
 
  
void droite(){
+
'''Intercommunication '''
  uView.rect(10,18,30,12);
 
  uView.lineV(40,5,37);
 
  uView.line(40,5,55,24);
 
  uView.line(55,24,40,43);
 
  uView.display();
 
}
 
void gauche(){
 
  uView.rect(25,18,30,12);
 
  uView.lineV(25,5,37);
 
  uView.line(25,5,10,24);
 
  uView.line(10,24,25,43);
 
  uView.display();
 
}
 
void haut(){
 
  uView.rect(25,15,12,30);
 
  uView.lineH(15,15,32);
 
  uView.line(15,15,31,1);
 
  uView.line(31,1,47,15);
 
  uView.display();
 
}
 
void bas(){
 
  uView.rect(25,1,12,30);
 
  uView.lineH(15,31,32);
 
  uView.line(15,31,31,46);
 
  uView.line(31,46,47,31);
 
  uView.display();
 
}
 
</pre>
 
[[Image:fleche_uviewer.jpg|600px|]]
 
  
 +
1) /dev/ttyUSB0 -Arduino 
  
 +
2) /dev/ttyUSB1 -NMEA port for GPS NMEA data output
  
==Semaine 7 :Géolocalisation à l'aide du FONA 3G Cellular+ GPS Breakout ==
+
3) /dev/ttyUSB2 -AT port for AT commands
  
 +
4) /dev/ttyUSB3-Modem port for ppp
  
On partira du même principe qu'avant , récupérer la latitude et la longitude , générer un lien Google Maps pour l'envoyer par SMS.
+
5) /dev/ttyUSB4-audio port
  
Montage :  
+
'''Montage :'''
  
 
[[Image:montage_oledfona.jpg|500px|]]
 
[[Image:montage_oledfona.jpg|500px|]]
Ligne 860 : Ligne 557 :
 
<font style="color: pblack;">GND <====  GND  </font>
 
<font style="color: pblack;">GND <====  GND  </font>
  
'''Configuration Circuit FONA :'''
+
'''Configuration du débit du Circuit FONA :'''
 +
 
  
Remarque :
 
 
Avant d'utiliser FONA , il faut configurer son débit en 4800 bauds  au lieu de  115200 bauds .  
 
Avant d'utiliser FONA , il faut configurer son débit en 4800 bauds  au lieu de  115200 bauds .  
 
En se servant de l'exemple setbaud figurant dans la bibliothèque adafruit-fona-3g , la configuration se fait comme suit :  
 
En se servant de l'exemple setbaud figurant dans la bibliothèque adafruit-fona-3g , la configuration se fait comme suit :  
<pre>
 
#include "Adafruit_FONA.h"
 
  
#define FONA_RX 2 // relié à la broche 2 du OLED
+
Résultats :
#define FONA_TX 3 // relié à la broche 3 du OLED
+
 
#define FONA_RST 4
+
[[Image:setbaud3.png]]
 +
[[Image:setbaud2.png]]
 +
[[Image:setbaud1.png]]
 +
 
 +
 
 +
Remarque : l'erreur envoyée par la commande AT+CPMS="SM","SM","SM" , qui est une commande pour SMS , est due à la carte SIM pas encore insérée .
 +
 +
Par la suite pour le code général, je vais ajouter la configurationdu débit  dans la boucle de configuration setup().
 +
 
 +
==Semaine 8 : Validation du montage final avant la réalisation de la carte  ==
 +
 
 +
L'utilité de cette carte et de rassembler le matériels utilisé  . Elle sera composée de 2 Header de 8 pour l'afficheur et un Header de 18 pour le circuit FONA et 2 boutons poussoirs .
 +
 
 +
 
 +
[[Image:Mont_fi.png]]
 +
 
 +
 +
 
 +
Avant de générer un PCB , un code est utile pour tester le montage . Ce code permet d'afficher les flèches sur l'afficheur en cliquant sur les boutons  ceci validera donc le fonctionnement des boutons et de l'afficheur . En ce qui concerne le circuit FONA 3G , les pins RX et TX sont les plus importants , on peut faire une "simulation" d'échange d'information : géolocalisation GPS  pour notre exemple . C'est une simulation faute de l’absence de l'antenne GPS . La commande "AT+CGPSINFO" est envoyée par le microprocesseur au circuit FONA en utilisant la methode "boolean Adafruit_FONA::getGPS(float *lat, float *lon, float *speed_kph, float *heading, float *altitude)" . La réponse dira , éventuellement , que le GPS ne reçoit rien et ceci en envoyant :
 +
---> AT+CGPSINFO
 +
<--- +CGPSINFO:,,,,,,,,
 +
 
 +
==Semaine 9 : Réalisation de la carte + test GPS  ==
 +
 
 +
'''Carte '''
 +
 
 +
Après la validation du montage vient la création du PCB . L'erreur que j'ai commise cette semaine est de suivre "à la lettre" le tutoriel sans vraiment comprendre toutes les caractéristiques de la carte . Ce qui donne un résultat inadéquat à la carte à réaliser, notamment les dimensions des trous et des pastilles . La configuration des "rules" du PCB sont à refaire pour la semaine prochaine .
 +
 
 +
'''Code'''
 +
 
 +
J'ai pu avancé dans l'écriture du code  après l'obtention des antennes GPS et GSM ainsi que la batterie qui est très importante pour le bon fonctionnement du FONA . Le code permet , jusqu'à présent ,l' envoi des SMS avec un lien google maps qui ne contient pas les coordonnées GPS , toujours avec le problème du FIX , j'ai attendu plus de 30 min tout en essayant de trouver une autre solution . J'ai eu l'idée d'utiliser la géolocalisation par GPRS , mais il s'avère que le FONA 3G ne le permet pas . Le temps consacré pour cette solution était donc en vain .
 +
 
 +
Le projet n'a quasiment pas avancé cette semaine . Pour la semaine prochaine , l'objectif est donc de faire la bonne configuration du PCB , et de trouver une solution pour obtenir une géolocalisation GPS .
 +
 
 +
==Semaines 10 et 11: Réalisation de la carte + GPS + Appel  ==
 +
 
 +
'''Carte '''
 +
 
 +
Les bonnes "rules" du PCB on été choisies , vient donc le routage des pastilles après plusieurs modifications réalisées sur le montage .
 +
 
 +
[[Image:schematic_safeWatch.png]]
 +
 
 +
Ceci est le schéma final obtenu après le routage . Vu le choix multiple de pins pour les boutons , j'ai opté pour A0 et le pin 5 qui permettent d'avoir un routage court et par conséquent une carte plus petite .
 +
 
 +
[[Image:pcb_watch.JPG]]
 +
 
 +
 
 +
'''Correction du PCB'''
 +
[[Image:Pcb_correction.png]]
 +
 
  
//buffer pour les réponses des commandes
+
Remarque :
char replybuffer[255];
+
J'ai commis une erreur dans les liaisons des boutons , cela ne servait à rien de lier un pin à l'alimentation 5V , afin d'éviter d'imprimer une autre carte je n'ai pas soudé ces pins là .
  
 +
'''Code '''
  
#include <SoftwareSerial.h>
+
Après obtention des antennes et de la batterie , j'ai pu avancé sur le code . Il permet d'appeler le référent après 5 secondes de la non obtention de la géolocalisation qui est toujours non fonctionnelle à cause de FIX . L'appel peut etre en cours après que le référent décroche et la communication se fait via des écouteurs reliées à la sortie "Headset jack" du circuit FONA .
SoftwareSerial fonaSS = SoftwareSerial(FONA_TX, FONA_RX);
 
SoftwareSerial *fonaSerial = &fonaSS;
 
  
Adafruit_FONA_3G fona = Adafruit_FONA_3G(FONA_RST);
+
==Semaine 12 : Réalisation de la carte + Envoi SMS ==
  
uint8_t readline(char *buff, uint8_t maxbuff, uint16_t timeout = 0);
 
  
void setup() {
+
Les pastilles entre le Header uv1 et FONA étaient très proches ce qui rendait l'impression du pcb impossible . Je les ai donc écartées les unes des autres de manières horizontale plutôt que diagonale . En attendant la validation pour l'impression de la carte  , j'ai modifié le code permettant l'envoi de la géolocalisation par SMS en rendant l'envoi impossible si la localisation est non obtenue plutôt que d'envoyer un SMS sans coordonnées GPS  .
  while (!Serial);
 
  
  Serial.begin(115200);
 
  Serial.println(F("FONA set baudrate"));
 
  
  Serial.println(F("First trying 115200 baud"));
+
[[Image: Semaine8.png]]
  // start at 115200 baud
+
 
  fonaSerial->begin(115200);
+
Après la validation de la carte par Monsieur Boé, j'ai eu un retour de la part de Monsieur Flamen . La distance entre les pastilles et le plan masse ne peut être supportée par la machine . J'ai dû donc modifier cela  et attendre l'accord final .
  fona.begin(*fonaSerial);
+
 
 
+
==Semaine 13 : Carte réalisée + Code final ==
  // send the command to reset the baud rate to 4800
+
 
  fona.setBaudrate(4800);
+
'''Carte '''
 
+
 
  // restart with 4800 baud
+
La carte est finalement imprimée . J'ai passé la séance à souder les 3 Headers et les 2 boutons , ceci n'était pas évident comme je l'avais cru. Pour gagner le maximum d'espace et rendre la montre le plus petit possible , j'ai eu l'idée de mettre le circuit FONA en BOTTOM  et les le reste en TOP .Mais la carte n'était pas conçue de la cette sorte . J'ai commis l'erreur de relié une pin des 2 boutons à une sortie 5 volts et finalement cela n'était pas convenable .
  fonaSerial->begin(4800);
+
Faute de temps , j'ai fais du bricolage en ne soudant pas ces deux pins , et en soudant l'afficheur et les 2 boutons en bottom . Cela était fonctionnel , mais l'alimentation ne tenais pas sauf si je tenais les circuits dans une position précise même après les avoir soudés . Ceci peut etre dû aux broches des header non utilisées et par conséquent non soudées qui poussent la carte à ne pas bien tenir  les composants . 
  Serial.println(F("Initializing @ 4800 baud..."));
+
 
 
+
[[Image: Carte_watch.png]]
  if (! fona.begin(*fonaSerial)) {
+
 
    Serial.println(F("Couldn't find FONA"));
+
'''Code '''
    while(1);
+
 
  }
+
Rassemblement de tout les codes qui permettent de réaliser les fonctions de la montre et teste sur le montage final .
  Serial.println(F("FONA is OK"));
+
 
}
+
Résultat : Montage et codes fonctionnels selon le cahier de charge imposé.
 +
 
 +
J'ai ajouté au code final , l'affichage de l'horloge pour que cela ressemble à une montre en mode "repos".
 +
 
 +
== Pendant et après les vacances : Solutions pour FIX du GPS==
 +
 
 +
Afin d'envoyer la localisation , le circuit doit "capter" les signaux envoyer par satellites. Ce qui nous montre si ces signaux font captés , est l'état du FIX . Pour le cas du GPS utilisé avant (premier matériels), il a fallu attendre au moins 30 minutes pour avoir un bon FIX . Pourtant , pour FONA 3G , toujours rien d'obtenu après les 30 minutes écoulées . 
 +
 
 +
En cherchant dans plusieurs forums  , exemple : [https://forum.core-electronics.com.au/t/adafruit-fona-gps-not-working/644], j'ai su que je n'étais la seule à avoir ce problème. N'ayant pas la possibilité d'utiliser la localisation par GPRS (Semaine 9) , j'ai essayé une autre proposition trouvée dans l'un des forums qui est la triangulation . Mais il est  marqué dans la datasheet du circuit FONA 3G [https://cdn-learn.adafruit.com/downloads/pdf/adafruit-fona-3g-cellular-gps-breakout.pdf] (page 48) qu'elle n'était pas fonctionnelle .
 +
 
 +
J'ai essayé également la "cell-location" obtenue par la commande "AT+CASSISTLOC" . Elle consiste à chercher la localisation par le biais de GOOGLE API , mais les deux serveurs [http://www.google.com/loc/json]  et [http://www.google.com/glm/mmap] ne sont plus accessibles. Même s'ils existent d'autres serveurs valides , ils doivent être modifiés par le constructeur du circuit vu que l'accès est directement par la commande AT .  
 +
 +
Cela peut être aussi dû à l'antenne , mais il n'y a pas moyen de le savoir car on ne peut pas tester le fonctionnement d'une antenne si on n'obtient pas de signal.  
 +
 
 +
Finalement le problème est hardware et non software , la raison est le type d'antenne . Le circuit est conçu pour utiliser une antenne passive , l'antenne que j'utilise et bel et bien une antenne passive mais toujours pas de bonne réception du FIX . Après avoir comparé les schémas d'antenne dans  hardware design [http://simcom.ee/documents/SIM5320/SIM5320x_SMT_Module_Design_Guide_V1.02.pdf] du SIMCOM et celui de FONA 3G d'Adafruit [https://cdn-learn.adafruit.com/assets/assets/000/027/324/original/adafruit_products_schem.png?1440185454] j'ai remarqué que SIMCOM exige deux self L1 et L2 pour une bonne sensibilité pourtant ces deux selfs ne figurent pas dans le schéma de FONA 3G :
 +
 
 +
Circuit pour une antenne passive SIMCOM:
 +
 
 +
[[Image:passive_antenna_simcom.png]]
 +
 
 +
Circuit pour une antenne active SIMCOM :
 +
 
 +
 
 +
[[Image:Active_antenna_simcom.png]]
 +
 
 +
antenne Adafruit :
 +
 
 +
[[Image:AntenneGPS_adafruit.png]]
 +
 
 +
Sachant que Adafruit a mis un bias dans son circuit pour offrir le choix entre une antenne passive et une antenne active . La solution proposé par Adafruit et souder ce bias et d'utiliser une antenne active . L'utilisation de ce type d'antenne est "impossible" pour notre type de projet , vu ses dimensions .
 +
 
 +
antenne active :
 +
 
 +
 
 +
[[Image:Antenna_active_adafruit.jpg|400px]]
  
void loop() {
+
Il est aussi recommandé d'utiliser un LNA (Low-Noise Amplifier) pour "renforcer" le signal, vu que l'avantage d'une antenne active par rapport à une antenne passive est son amplificateur LNA intégré . Mais cela sera encore plus encombrant .
}
 
</pre>
 
Résultats :
 
  
[[Image:setbaud3.png]]
+
Conclusion :  
[[Image:setbaud2.png]]
 
[[Image:setbaud1.png]]
 
  
 +
J'avais réussi à avoir une localisation avec le premier matériel ; le but du 2eme matériel étais de rendre la montre plus petite mais à cause d'un mauvais choix de circuit , il a fallu ajouter du matériel pour que cela marche , ce qui n'est pas rentable . Pour avoir un bon résultat il fallait choisir le SIMCOM 808 qui  offre la possibilité d'avoir une localisation GSM si jamais on n'arrive pas à avoir une localisation GPS , et qui est plus petit que le circuit que j'ai utilisé ( SIMCOM5230E).
 +
Certes l'utilisation  du circuit FONA3G au lieu du SIMCOM808 impacte les résultats du projet, mais cela m'a permit d'aller plus loin dans l'exploit de ce matériel au point de dire que l'utilisation du bon circuit aurait été plus "facile" et par conséquent je n'aurais pas appris autant.
  
 +
==Vidéo démonstrative==
  
Par la suite pour le code général, je vais ajouter la configurationdu débit  dans la boucle de configuration setup().
+
Vu que la partie GPS ne fonctionne pas , la réalisation de la vidéo projet n'est plus possible . Mais ici [https://www.youtube.com/watch?v=U5soFJ6ULBA&feature=youtu.be] vous trouverez une vidéo démonstrative pour l'envoi SMS , de l'appel et de l'affichage des flèches .
  
 
=Fichiers Rendus=
 
=Fichiers Rendus=
 +
'''Codes'''
 +
[[Fichier:Codes_SafeWatch_versionfinale.zip]]
 +
 +
'''Rapport'''
 +
 +
[[Fichier:Rapport_P17_SafeWatch.pdf]]

Version actuelle datée du 15 mai 2018 à 13:33


Présentation générale

  • Titre du projet : SafeWatch
  • Description : Montre connectée simple d'utilisation permettant de réorienter les personnes en difficulté.

Objectifs

De plus en plus de personnes se retrouvent seules en vieillissant, aussi bien chez elles qu’à l’extérieur. Nous sommes là pour faire le lien entre les deux. Notre montre, simple d’utilisation, vous permettra de rentrer chez vous au plus vite et d’appeler vos proches . Cette montre dispose de deux boutons. Le premier permet de retrouver son chemin, le deuxième d'envoyer votre position à vos proches ou de les appeler .

Positionnement par rapport à l'existant

Notre montre permet, en plus de la géolocalisation et de l’appel des proches, de rediriger les personnes jusqu’à leur logement.

Analyse du projet

Analyse du premier concurrent

Arkea assistance :

  • Montre connectée qui permet de déclencher à tout moment et en tous lieux une alerte en cas de besoin.
  • Principe d’utilisation : Vous appuyez, vous êtes géolocalisé, nous vous écoutons
  • Abonnement à une téléassistance
  • Prix montre + abonnement = 13,45+24,90 par mois
  • Inconvénients : montre tactile (peu pratique pour les personnes âgées), ne permet pas d’appeler les proches, pas d'orientation via GPS, prix de l’abonnement élevé.

Analyse du second concurrent

Libr’Alert :

  • Une montre avec bouton SOS, très légère au design élégant
  • Système de géolocalisation intégré
  • Un dispositif que vous avez toujours à portée de main
  • La réception et gestion des appels 24h/24 et 7j/7 par notre centrale d’écoute.
  • La géolocalisation de l’appel d’urgence afin de pouvoir orienter les secours vers le bon endroit.
  • Prix : 34,90€ par mois
  • Inconvénients : pas de GPS, pas de possibilité de contacter les proches

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

Fait divers : Une personne agée a été retrouvée, dix jours après sa disparition, en état de décomposition, dans un buisson non loin de chez elle. Cette femme d’un certain âge s’était perdue. Cause simple malheureusement trop fréquente. C’est dans ce cadre que la SafeWatch devient indispensable.

En effet, avec notre montre, la vieille dame aurait pu, dans un moment de lucidité, appuyer sur le bouton « appel d’un référent » afin d'envoyer un message automatique joignant sa position à un proche référent. Elle aurait pu aussi appuyer sur « retour maison » lui indiquant avec des flèches de direction le chemin pour revenir à son domicile. Sa vie tenant sur une simple pression d’un bouton de notre montre.

Mari esseulé, en état de peur face à la possibilité de perdre sa femme, aurait pu avec notre montre, la retrouver. En effet, grâce à notre option GPS dans la montre, sa femme aurait été localisée plus facilement et plus rapidement, et ainsi être encore en vie lors de sa découverte. Aujourd’hui, nous en sommes sûr il aurait aimé investir dans notre SafeWatch.

Réponse à la question difficile

Comment la montre se recharge-t-elle ?

Grace à un chargeur par induction (on pose sa montre à plat sur une plaque qui va recharger la batterie)

Comment éviter l'abus d'appel au référent ?

Cette montre reste réservée aux personnes pas encore totalement séniles qui sont conscientes que cet appareil va les aider. De plus, si le référent se rend compte que la personne abuse de l'option appel c'est de sa responsabilité de lui retirer la montre. Un son sera émis lorsqu'une touche sera activée

Réalisation du projet

Choix techniques : matériel et logiciel

Matériels pour prototype:

  • Arduino UNO et 3 boutons poussoirs.
  • Géolocalisation : GPS Adafruit v3.
  • Appeler des proches ou les urgences : bouclier GSM Arduino.
  • Affichage d'horloge et de l'orientation GPS vers domicile : 2.8" TFT LCD shield w/Touchscreen.

Matériels pour la réalisation de la montre :

  • Adafruit FONA 808 Cellular + GPS Breakout
  • OLED Display de MicroView
  • Antenne GPS
  • mini JST 2-pin pour la batterie
  • batterie:1200mAh sized Lithium ion/polymer battery
  • headphone jack :
  • Antenne GSM
  • usb programmer

Calendrier prévisionnel

Liste des tâches à effectuer

Tâche 1 : Tests sur prototype

  • 1.1 Géolocatisation
  • 1.2 Envoi de position par SMS
  • 1.3 Appel au référent
  • 1.4 Orientation par flèches

Tache 2 : Configuration et programmation du matériel de réalisation pour :

  • 2.1 Géolocalisation
  • 2.2 Envoi SMS
  • 2.3 Appel au référent
  • 2.4 Orientation par flèches

Tache 3 : Réalisation de la montre

  • 3.1Carte électronique regroupant l'ensemble des composants
  • 3.2 Boîtier ressemblant à une montre ( Impression 3D )

Feuille d'heures

Tâche Prélude Heures S1 Heures S2 Heures S3 Heures S4 Heures S5 Heures S6 Heures S7 Heures S8 Heures S9 Heures S10 Heures S11 Heures S12 Heures S13 Après les vacances Total
Analyse du projet 0
Géolocalisation :NMEA Sentences (Matériel 1) 8h
Envoi de la position par SMS (Matériel 1) 8h
Appel au référent(Matériel 1) 8H 2H
Affichage des flèches d'orientation sur LCD 6H
Géolocalisation + flèches d'orientation 8H 4H
Configuration du circuit FONA 4H
Validation du montage final avant la réalisation de la carte 4H+2H
Réalisation de la carte + test GPS 8h
Réalisation de la carte +GPS+ Appel 4H+2H 8H
Réalisation de la carte + Envoi SMS 2H+4H+ 1H
Carte réalisée + Code final 8H
Solutions essayées pour FIX du GPS 36h
Total 127

Avancement du Projet

Prologue

Montage protoype :

Montage: Arduino+ GSM + GPS


Partie GPS :

  • NMEA sentence :

Un GPS nous permet d'avoir plusieurs types de NMEA sentence , on s’intéressera qu'à $GPRMC et $GPGGA qui donnent la latitude et la longitude et l'altitude.

* The recommanded minimum sentence C : RMC

Exemple : $GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A

$GPRMC ,temps,etat_fix,latitude ,point_cardinal,longitude ,point_cardinal,vitesse_gps,track_angle,date,variation_magnétique,checksum


etat_fix = A:Active ou V:void
track_angle=la direction du véhicule en mouvement


* Global Positioning System Fix Data

Exemple : $GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47

$GPGGA ,temps,latitude,point_cardinal,longitude,point_cardinal,qualité_fix,nb_sattelites,GDOP,altitude ,hauteur_geoid,,checksum

qualité_fix: 0 = invalid / 1 = GPS fix (SPS)/ ...

GDOP : Geometric dilution of precision = indicateur sur le positionnement des satellites.

Pour récupérer les NMEA sentences , je branche les pins TX et RX du GPS au pin 0 et 1 de l'Arduino . Cela me permet d'établir une communication série avec l'ordinateur en passant par Arduino , le GPS envoi la data sans programmer l'Arduino :

Gps 1.png

Semaine 1 : Géolocalisation :NMEA Sentences

Puisque je m'intéresse uniquement à $GPRMC et $GPGGA, le code suivant me permettra de les récupérer et afficher les paramètres de position .


Gps fix 0 1.png

Le résultat obtenu montre que le fix n'est pas bon , d'où le manque des paramètre . Pour avoir un fix bon , il faut etre à l'extérieur .

Gps khdem.png

Position obtenue par GPS

700pxthumb

semaine 2 : Envoi de la position par SMS

Maintenant que j'ai la position , il faut l'envoyer par SMS .

Partie GSM

le code ci-dessous envoi la position (sous forme de lien vers google maps) un fois le bouton est appuyé.


Resultat:

Gsm test.png

Remarque : la latitude et la longitude valent "0" car le fix du GPS n'est pas bon .

semaine 3: Appel au référent

Code mis-à-jour de manière à appeler le référent une fois le bouton 2 est appuyé:


Remarque : Code compile mais redondance d'appel sans pourvoir raccrocher du coté de l'appelant: d'autres essais à effectuer après obtention de carte SIM .

Semaine 4 : Affichage des flèches d'orientation sur LCD

Travail papier.jpg

La résolution du LCD est de 240x320 .

Les quatres fleches partagent l'ecran , elles seront affichées toutes à la fois . La flèche concerné va clignoter .

L'interet d'afficher les mots "droite" , "gauche" est de ne pas confondre les sens des flèches si on tourne l’écran. Normalement la connaissance d'un sens nous permettera de reconnaitre les autres .


Lcd fleches.jpg



Semaine 5 et 6 : Géolocalisation + flèches d'orientation

Après le dessin des flèches sur LCD, il faut maintenant les faire clignoter selon l'orientation du domicile par rapport à la position .

Coordonnées GPS : Latitude et Longitude .

Coorgps.png

La Terre forme quatre quadrants : NORD-EST , NORD-OUEST , SUD-EST , SUD-OUEST . La France fait partie du NORD-EST , plus précisément entre 42° et 52° en latitude , 2° et 9° en longitude .

Supposant les adresses suivantes :

Domicile : Résidence Eiffel 51 rue de Ticléni Villeneuve d'ascq

Position : Polytech Lille Avenue Paul Langevin, 59655 Villeneuve-d'Ascq

Adresses Latitude Longitude
Position 50.6076754 3.1363522999999986
Domicile 50.61108650000001 3.1490148000000318


L'orientation des flèches se fera selon la différence d'angle (latitude et longitude) de la position par rapport au domicile . Sachant qu'on se situe au quadrant NORD-EST :

  • Si (latitude_Domicile - latitude_Position > 0 )

alors clignoter la flèche "Devant" sinon clignoter la flèche "Derrière"

  • Si (longitude_Domicile - longitude_Position > 0 )

alors clignoter la flèche "Droite" sinon clignoter la flèche " Gauche"

Dans notre cas , on devra avoir les flèches "Droite" et "Devant" qui clignotent .

Vérification sur Google Maps :

Test orient.png

Les dimensions de l’afficheur Microview ne permet pas d’afficher les flèches à la fois. Il affichera une flèche à la fois . Pour tester l’affichage de toutes les flèches , le code “semaine 6_1” flèche par flèche chaque seconde . Pour tracer un flèche , j’ai “dessiné” un triangle collé à un rectangle .


Fleche uviewer.jpg

Semaine 7 :Configuration du circuit FONA

Connexion du FONA avec PC via USB

Sur le terminal :

1 - "lsusb" :

Terminal fona.png

2 -“sudo rmmod usbserial”:

3 -Télécharger GobiSerial et le décompresser

4-"cd GobiSerial && make"

5-Un fichier “GobiSerial.ko” est généré

6-"sudo modprobe usbserial && sudo insmod GobiSerial.ko" pour installer le driver

7-ls -l /dev/ttyUSB* :

Usbliste.png

/dev/ttyUSB0->4 présents ==> Driver installé !


Intercommunication

1) /dev/ttyUSB0 -Arduino

2) /dev/ttyUSB1 -NMEA port for GPS NMEA data output

3) /dev/ttyUSB2 -AT port for AT commands

4) /dev/ttyUSB3-Modem port for ppp

5) /dev/ttyUSB4-audio port

Montage :

Montage oledfona.jpg


FONA ||||||||| OLED

RX ====> 2

TX <====> 3

Key <==== GND

Vio <==== VIN

GND <==== GND

Configuration du débit du Circuit FONA :


Avant d'utiliser FONA , il faut configurer son débit en 4800 bauds au lieu de 115200 bauds . En se servant de l'exemple setbaud figurant dans la bibliothèque adafruit-fona-3g , la configuration se fait comme suit :

Résultats :

Setbaud3.png Setbaud2.png Setbaud1.png


Remarque : l'erreur envoyée par la commande AT+CPMS="SM","SM","SM" , qui est une commande pour SMS , est due à la carte SIM pas encore insérée .

Par la suite pour le code général, je vais ajouter la configurationdu débit dans la boucle de configuration setup().

Semaine 8 : Validation du montage final avant la réalisation de la carte

L'utilité de cette carte et de rassembler le matériels utilisé . Elle sera composée de 2 Header de 8 pour l'afficheur et un Header de 18 pour le circuit FONA et 2 boutons poussoirs .


Mont fi.png


Avant de générer un PCB , un code est utile pour tester le montage . Ce code permet d'afficher les flèches sur l'afficheur en cliquant sur les boutons ceci validera donc le fonctionnement des boutons et de l'afficheur . En ce qui concerne le circuit FONA 3G , les pins RX et TX sont les plus importants , on peut faire une "simulation" d'échange d'information : géolocalisation GPS pour notre exemple . C'est une simulation faute de l’absence de l'antenne GPS . La commande "AT+CGPSINFO" est envoyée par le microprocesseur au circuit FONA en utilisant la methode "boolean Adafruit_FONA::getGPS(float *lat, float *lon, float *speed_kph, float *heading, float *altitude)" . La réponse dira , éventuellement , que le GPS ne reçoit rien et ceci en envoyant : ---> AT+CGPSINFO <--- +CGPSINFO:,,,,,,,,

Semaine 9 : Réalisation de la carte + test GPS

Carte

Après la validation du montage vient la création du PCB . L'erreur que j'ai commise cette semaine est de suivre "à la lettre" le tutoriel sans vraiment comprendre toutes les caractéristiques de la carte . Ce qui donne un résultat inadéquat à la carte à réaliser, notamment les dimensions des trous et des pastilles . La configuration des "rules" du PCB sont à refaire pour la semaine prochaine .

Code

J'ai pu avancé dans l'écriture du code après l'obtention des antennes GPS et GSM ainsi que la batterie qui est très importante pour le bon fonctionnement du FONA . Le code permet , jusqu'à présent ,l' envoi des SMS avec un lien google maps qui ne contient pas les coordonnées GPS , toujours avec le problème du FIX , j'ai attendu plus de 30 min tout en essayant de trouver une autre solution . J'ai eu l'idée d'utiliser la géolocalisation par GPRS , mais il s'avère que le FONA 3G ne le permet pas . Le temps consacré pour cette solution était donc en vain .

Le projet n'a quasiment pas avancé cette semaine . Pour la semaine prochaine , l'objectif est donc de faire la bonne configuration du PCB , et de trouver une solution pour obtenir une géolocalisation GPS .

Semaines 10 et 11: Réalisation de la carte + GPS + Appel

Carte

Les bonnes "rules" du PCB on été choisies , vient donc le routage des pastilles après plusieurs modifications réalisées sur le montage .

Schematic safeWatch.png

Ceci est le schéma final obtenu après le routage . Vu le choix multiple de pins pour les boutons , j'ai opté pour A0 et le pin 5 qui permettent d'avoir un routage court et par conséquent une carte plus petite .

Pcb watch.JPG


Correction du PCB Pcb correction.png


Remarque : J'ai commis une erreur dans les liaisons des boutons , cela ne servait à rien de lier un pin à l'alimentation 5V , afin d'éviter d'imprimer une autre carte je n'ai pas soudé ces pins là .

Code

Après obtention des antennes et de la batterie , j'ai pu avancé sur le code . Il permet d'appeler le référent après 5 secondes de la non obtention de la géolocalisation qui est toujours non fonctionnelle à cause de FIX . L'appel peut etre en cours après que le référent décroche et la communication se fait via des écouteurs reliées à la sortie "Headset jack" du circuit FONA .

Semaine 12 : Réalisation de la carte + Envoi SMS

Les pastilles entre le Header uv1 et FONA étaient très proches ce qui rendait l'impression du pcb impossible . Je les ai donc écartées les unes des autres de manières horizontale plutôt que diagonale . En attendant la validation pour l'impression de la carte , j'ai modifié le code permettant l'envoi de la géolocalisation par SMS en rendant l'envoi impossible si la localisation est non obtenue plutôt que d'envoyer un SMS sans coordonnées GPS .


Semaine8.png

Après la validation de la carte par Monsieur Boé, j'ai eu un retour de la part de Monsieur Flamen . La distance entre les pastilles et le plan masse ne peut être supportée par la machine . J'ai dû donc modifier cela et attendre l'accord final .

Semaine 13 : Carte réalisée + Code final

Carte

La carte est finalement imprimée . J'ai passé la séance à souder les 3 Headers et les 2 boutons , ceci n'était pas évident comme je l'avais cru. Pour gagner le maximum d'espace et rendre la montre le plus petit possible , j'ai eu l'idée de mettre le circuit FONA en BOTTOM et les le reste en TOP .Mais la carte n'était pas conçue de la cette sorte . J'ai commis l'erreur de relié une pin des 2 boutons à une sortie 5 volts et finalement cela n'était pas convenable . Faute de temps , j'ai fais du bricolage en ne soudant pas ces deux pins , et en soudant l'afficheur et les 2 boutons en bottom . Cela était fonctionnel , mais l'alimentation ne tenais pas sauf si je tenais les circuits dans une position précise même après les avoir soudés . Ceci peut etre dû aux broches des header non utilisées et par conséquent non soudées qui poussent la carte à ne pas bien tenir les composants .

Carte watch.png

Code

Rassemblement de tout les codes qui permettent de réaliser les fonctions de la montre et teste sur le montage final .

Résultat : Montage et codes fonctionnels selon le cahier de charge imposé.

J'ai ajouté au code final , l'affichage de l'horloge pour que cela ressemble à une montre en mode "repos".

Pendant et après les vacances : Solutions pour FIX du GPS

Afin d'envoyer la localisation , le circuit doit "capter" les signaux envoyer par satellites. Ce qui nous montre si ces signaux font captés , est l'état du FIX . Pour le cas du GPS utilisé avant (premier matériels), il a fallu attendre au moins 30 minutes pour avoir un bon FIX . Pourtant , pour FONA 3G , toujours rien d'obtenu après les 30 minutes écoulées .

En cherchant dans plusieurs forums , exemple : [1], j'ai su que je n'étais la seule à avoir ce problème. N'ayant pas la possibilité d'utiliser la localisation par GPRS (Semaine 9) , j'ai essayé une autre proposition trouvée dans l'un des forums qui est la triangulation . Mais il est marqué dans la datasheet du circuit FONA 3G [2] (page 48) qu'elle n'était pas fonctionnelle .

J'ai essayé également la "cell-location" obtenue par la commande "AT+CASSISTLOC" . Elle consiste à chercher la localisation par le biais de GOOGLE API , mais les deux serveurs [3] et [4] ne sont plus accessibles. Même s'ils existent d'autres serveurs valides , ils doivent être modifiés par le constructeur du circuit vu que l'accès est directement par la commande AT .

Cela peut être aussi dû à l'antenne , mais il n'y a pas moyen de le savoir car on ne peut pas tester le fonctionnement d'une antenne si on n'obtient pas de signal.

Finalement le problème est hardware et non software , la raison est le type d'antenne . Le circuit est conçu pour utiliser une antenne passive , l'antenne que j'utilise et bel et bien une antenne passive mais toujours pas de bonne réception du FIX . Après avoir comparé les schémas d'antenne dans hardware design [5] du SIMCOM et celui de FONA 3G d'Adafruit [6] j'ai remarqué que SIMCOM exige deux self L1 et L2 pour une bonne sensibilité pourtant ces deux selfs ne figurent pas dans le schéma de FONA 3G :

Circuit pour une antenne passive SIMCOM:

Passive antenna simcom.png

Circuit pour une antenne active SIMCOM :


Active antenna simcom.png

antenne Adafruit :

AntenneGPS adafruit.png

Sachant que Adafruit a mis un bias dans son circuit pour offrir le choix entre une antenne passive et une antenne active . La solution proposé par Adafruit et souder ce bias et d'utiliser une antenne active . L'utilisation de ce type d'antenne est "impossible" pour notre type de projet , vu ses dimensions .

antenne active :


Antenna active adafruit.jpg

Il est aussi recommandé d'utiliser un LNA (Low-Noise Amplifier) pour "renforcer" le signal, vu que l'avantage d'une antenne active par rapport à une antenne passive est son amplificateur LNA intégré . Mais cela sera encore plus encombrant .

Conclusion :

J'avais réussi à avoir une localisation avec le premier matériel ; le but du 2eme matériel étais de rendre la montre plus petite mais à cause d'un mauvais choix de circuit , il a fallu ajouter du matériel pour que cela marche , ce qui n'est pas rentable . Pour avoir un bon résultat il fallait choisir le SIMCOM 808 qui offre la possibilité d'avoir une localisation GSM si jamais on n'arrive pas à avoir une localisation GPS , et qui est plus petit que le circuit que j'ai utilisé ( SIMCOM5230E). Certes l'utilisation du circuit FONA3G au lieu du SIMCOM808 impacte les résultats du projet, mais cela m'a permit d'aller plus loin dans l'exploit de ce matériel au point de dire que l'utilisation du bon circuit aurait été plus "facile" et par conséquent je n'aurais pas appris autant.

Vidéo démonstrative

Vu que la partie GPS ne fonctionne pas , la réalisation de la vidéo projet n'est plus possible . Mais ici [7] vous trouverez une vidéo démonstrative pour l'envoi SMS , de l'appel et de l'affichage des flèches .

Fichiers Rendus

Codes Fichier:Codes SafeWatch versionfinale.zip

Rapport

Fichier:Rapport P17 SafeWatch.pdf