Bonjour,
J'ai comme projet de faire fonctionner un programme avec un module sim900 ainsi qu'un module GPS.
Le principe est simple : il suffit de localiser un emplacement à l'aide du module GPS et par la suite envoyer les données de localisation par SMS.
J'ai donc commandé un Shield GPS : http://www.designersystems.co.uk/GPM.S_info.htm
Et un module GSM : https://www.itead.cc/sim900-sim900a-...em-module.html
J'ai aussi acheté une carte SIM à 2 € chez Free.
Je me suis donc lancé, j'ai fait quelques soudures et tout branché : RX/TX, TX/RX pour le module GSM.j'ai donc attaqué les programmes.
Voici mon programme qui fonctionne à merveille pour le GPS :
Ce programme me donne les coordonnées GPS la date etc… :Code:/*==================================================== Systeme DS-GPM Shield Arduino Utilisé avec une carte Arduino UNO ------------------------------------------------------ cablage : L'interface DS-GPM.S transmet les données via le bus I2C (Broche ANALOG 4 [SDA] & Broche ANALOG 5 [SCL]) Le terminal série est paramétré à 9600 baud ====================================================== */ #include <Wire.h> #define GPM 0x68 // GPM I2C Address byte Address; // variable byte Data; // variable byte Data_10, Data_9, Data_8, Data_7, Data_6, Data_5, Data_4, Data_3, Data_2, Data_1; int Latitude_1, Longitude_1; long Latitude_2, Longitude_2; float Latitude_C, Longitude_C; void setup() { Wire.begin(); // Start I2C comms Serial.begin(9600); // serial port: 9600 baud delay(6000); // attendre 6 sec } void loop() { Serial.println(" "); Serial.print("Date : "); Get_Date(); Serial.print("Heure : "); Get_Heure(); delay(500); // attendre Serial.print("Satellites en vue : "); Get_Satellites_vus(); Serial.print("Vitesse : "); Get_Vitesse(); Serial.println(" "); delay(500); // attendre Serial.print("Latitude calcul : "); GetLatitude_Calcul(); Serial.println(Latitude_C,6); Serial.println(" "); Serial.print("Longitude calcul : "); GetLongitude_Calcul(); Serial.println(Longitude_C,6); delay(5000); // attendre Serial.println(" "); Serial.println(" "); Serial.println(" "); Serial.println(" "); } /*--------------------------------------------------------- Sous programme 'GetDouble' ------------------------------------------------------------ */ int GetDouble() { // Get double register value from GPM int Value = 0; byte H_Byte = 0; byte L_Byte = 0; Wire.beginTransmission(GPM); Wire.write(Address); // Send register start address Wire.endTransmission(); Wire.requestFrom(GPM, 2); // Request double register while(Wire.available() < 2); // Wait for double byte H_Byte = Wire.read(); // Store one L_Byte = Wire.read(); // Store two Value = (H_Byte * 10) + L_Byte; // Adjust for one byte return(Value); } /*--------------------------------------------------------- Sous programme 'GetSingle' ------------------------------------------------------------ */ int GetSingle() { // Get single register value from GPM int Value = 0; Wire.beginTransmission(GPM); Wire.write(Address); // Send register start address Wire.endTransmission(); Wire.requestFrom(GPM, 1); // Request register while(Wire.available() < 1); // Wait for single byte Value = Wire.read(); // and store return(Value); } /*--------------------------------------------------------- Sous programme 'Get_Date' ------------------------------------------------------------ */ byte Get_Date() { Address = 6; // Adresse Registre JOUR Data = GetDouble(); // Lecture du registre depuis GPM Serial.print(Data, DEC); // Affichage sur terminal série PC Serial.print("/"); Address = 8; // Adresse Registre MOIS Data = GetDouble(); // Lecture du registre depuis GPM Serial.print(Data, DEC); // Affichage sur terminal série PC Serial.print("/"); Address = 10; // Adresse Registre ANNEE (Milliers et Centaines) Data = GetDouble(); // Lecture du registre depuis GPM Serial.print(Data, DEC); // Affichage sur terminal série PC Address = 12; // Adresse Registre ANNEE (Dizaines et Unités) Data = GetDouble(); // Read registers from GPM Serial.println(Data, DEC); // Affichage sur terminal série PC } /*--------------------------------------------------------- Sous programme 'Get_Heure' ------------------------------------------------------------ */ byte Get_Heure() { Address = 0; // Adresse Registre Heures Data = GetDouble(); // Lecture du registre depuis GPM Serial.print(Data, DEC); // Affichage sur terminal série PC Serial.print(":"); Address = 2; // Adresse Registre Minutes Data = GetDouble(); // Lecture du registre depuis GPM Serial.print(Data, DEC); // Affichage sur terminal série PC Serial.print(":"); Address = 4; // Adresse Registre Secondes Data = GetDouble(); // Lecture du registre depuis GPM Serial.println(Data, DEC); // Affichage sur terminal série PC } /*--------------------------------------------------------- Sous programme 'Get_Satellites_vus' ------------------------------------------------------------ */ byte Get_Satellites_vus() { Address = 35; //58 version1 / 35 Version2 // Adresse de Pointage satellites en vue Data = GetSingle(); // Lecture du registre depuis GPM Serial.println(Data, DEC); // Affichage sur terminal série PC } /*--------------------------------------------------------- Sous programme 'Get_Vitesse' ------------------------------------------------------------ */ int Get_Vitesse() { Address = 52; // Point to Speed 1 register Data = GetDouble(); // Read registers from GPM Serial.print(Data, DEC); // and print to PC Address = 54; // Point to Speed 2 register Data = GetSingle(); // Read registers from GPM Serial.print(Data, DEC); // and print to PC Serial.print("."); Address = 55; // Point to Speed 3 register Data = GetSingle(); // Read registers from GPM Serial.println(Data, DEC); // and print to PC } /*--------------------------------------------------------- Sous programme 'GetLatitude_Calcul' ------------------------------------------------------------ */ double GetLatitude_Calcul() { Address = 14; // Registre Latitude Dizaines de degrés Data_8 = GetSingle(); // Lire le registre du GPM (1 octet) Address = 15; // Registre Latitude Dizaines de degrés Data_7 = GetSingle(); // Lire le registre du GPM (1 octet) Address = 16; // Registre Latitude Dizaines de minutes Data_6 = GetSingle(); // Lire le registre du GPM (1 octet) Address = 17; // Registre Latitude Unités de minutes Data_5 = GetSingle(); // Lire le registre du GPM (1 octet) Address = 18; // Registre Latitude dixièmes de minutes Data_4 = GetSingle(); // Lire le registre du GPM (1 octet) Address = 19; // Registre Latitude centièmes de minutes Data_3 = GetSingle(); // Lire le registre du GPM (1 octet) Address = 20; // Registre Latitude millièmes de minutes Data_2 = GetSingle(); // Lire le registre du GPM (1 octet) Address = 21; // Registre Latitude dix-millièmes de minutes Data_1 = GetSingle(); // Lire le registre du GPM (1 octet) Latitude_1=(Data_8*10+Data_7); Latitude_2=(Data_6*1E5+Data_5*1E4+Data_4*1E3+Data_3*1E2+Data_2*1E1+Data_1); Latitude_2=(Latitude_2/60); Latitude_C = (Latitude_1+(Latitude_2*1E-4)); // Calcu complet latitude return (Latitude_C); } /*--------------------------------------------------------- Sous programme 'GetLongitude_Calcul' ------------------------------------------------------------ */ double GetLongitude_Calcul() { Address = 23; // Registre Longitude Centaines de degrés Data_9 = GetSingle(); // Lire le registre du GPM (1 octet) Address = 24; // Registre Longitude Dizaines de degrés Data_8 = GetSingle(); // Lire le registre du GPM (1 octet) Address = 25; // Registre Longitude Unités de degrés Data_7 = GetSingle(); // Lire le registre du GPM (1 octet) Address = 26; // Registre Longitude Dizaines de minutes Data_6 = GetSingle(); /// Lire le registre du GPM (1 octet) Address = 27; // Registre Longitude Unités de minutes Data_5 = GetSingle(); // Lire le registre du GPM (1 octet) Address = 28; // Registre Longitude dixièmes de minutes Data_4 = GetSingle(); // Lire le registre du GPM (1 octet) Address = 29; // Registre Longitude centièmes de minutes Data_3 = GetSingle(); // Lire le registre du GPM (1 octet) Address = 30; // Registre Longitude millièmes de minutes Data_2 = GetSingle(); // Lire le registre du GPM (1 octet) Address = 31; // Registre Longitude dix-millièmes de minutes Data_1 = GetSingle(); // Lire le registre du GPM (1 octet) Longitude_1=(Data_9*1E2+Data_8*10+Data_7); Longitude_2=(Data_6*1E5+Data_5*1E4+Data_4*1E3+Data_3*1E2+Data_2*1E1+Data_1); Longitude_2=(Longitude_2/60); Longitude_C = (Longitude_1+(Longitude_2*1E-4)); // Calcu complet longitude return (Longitude_C); }
Pour le programme du module GPS sim900 c'est plus compliqué.
j'ai recherché plusieurs programmes sur Internet mais beaucoup ne fonctionnait pas jusqu'à ce que je tombe sur ce tuto : http://www.upsilonaudio.com/sim900-e...carte-arduino/
Le programme marche à merveille j'arrive à envoyer des SMS cependant je le trouve très compliqué j'en ai donc cherché un plus simple mais tout ce que j'ai trouvé ne marche pas.
Maintenant mon but est de « fusionner » les deux programmes : ce que j'ai essayé de faire mais sans succès. Je ne sais pas comment m'y prendre sachant que je n'ai jamais essayer de fusionner de programmes.
Voici comment j'ai essayé de faire (tout bêtement) :
(voir le code a la page suivante)
Si quelqu'un peut me venir en aide pour « fusionner » les programmes ce serait super car je suis dans une impasse… de plus fusionner ces programmes n'est que le début après il faut que je trouve un moyen pour pouvoir copier / coller les réponses de mon GPS dans le texte de message…
Mon deuxième but est de le compléter en ajoutant une fonction qui est de définir une zone où le module sera (avec les dixaines centaines et millièmes de degrés), lorsque le module sors de cette zone la carte Arduino envoie un SMS au téléphone puis lorsque j'enverrai un SMS du type "localisationposition" depuis mon téléphone j'aimerais que la carte Arduino me renvoie la localisation du module. ( ce qui me semble assez compliqué , je ne sais pas si je vais arriver au bout..)
En attendant impatiemment vos réponses !
Mat
-----