bonjour je suis en terminal STI2D option SIN , nous avons un projet de bac qui consiste a envoyer un message avec des coordonnées recuperer par un GPS lorsque le fauteil roulant est trop incliner ( pour signaler un chute) , les codes marchent bien séparément mais fusionner cela ne marche pas.
nous voulons donc les fusionner.
nous utilisons : - un "SIM 900" pour les sms
- un "GY-NE06MV2" comme GPS
merci de votre aide , bonne journee
code GPS :
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 9600; // definie les baud a 9600
// introduit tiny GPS ++
TinyGPSPlus gps;
// connection au peripherique GPS
SoftwareSerial ss(RXPin, TXPin);
void setup()
{
Serial.begin(9600);
ss.begin(GPSBaud);
}
void loop()
{
// des que la sequence d'avant est correctement etablie une phrase s'affiche
while (ss.available() > 0)
if (gps.encode(ss.read()))
displayInfo();
if (millis() > 5000 && gps.charsProcessed() < 10)
{
Serial.println(F("GPS non detecter , verfier le cablage ")); // si le GPS n'est pas detecter ecrit "virifier le cablage"
while(true);
}
}
void displayInfo() //ouvre le display pour ecrire les information ci dessous
{
Serial.print(F("Location: ")); // ecrit " localitation"
if (gps.location.isValid())
{
Serial.print(gps.location.lat(), 6); // ecrit la latitude
Serial.print(F(","));
Serial.print(gps.location.lng(), 6); // ecrit la longitude
}
else
{
Serial.print(F("INVALIDE")); // si cela ne marche pas ecrit "invalide"
}
Serial.println(); //ecrit le tous en boucle
}
code inclinometre + GPS :
#include <Wire.h> // Permet de communiquer avec les périphériques I2C (pour l'écran LCD)
#include <ADXL335.h> // Inclut la bibliothèque de l'accéléromètre
#include <rgb_lcd.h> // Inclut la bibliothèque de l'écran LCD
#include <SoftwareSerial.h>
rgb_lcd lcd;
SoftwareSerial SIM900(7, 8); // Configure software serial port
// Définit la luminosité de la couleur rouge, verte et bleue
const int colorR = 255;
const int colorG = 255;
const int colorB = 255;
// définit x, y et z sur les entrées analogique 2, 1 et 0
const int xPin = 2;
const int yPin = 1;
const int zPin = 0;
// Valeur minimale et maximale de l'accéléromètre immobile
int minVal = 265;
int maxVal = 402;
// Pour lire x, y et z jusqu'à 4 nombres après la virgule
double x;
double y;
double z;
// Valeur minimale et maximale de X et Y pour détecter la chute
int maxX = 50;
int maxY = 50;
int minX = -50;
int minY = -50;
int variable = 0; // Variable pour sms
void setup()
{
SIM900.begin(19200); // Arduino communicates with SIM900 GSM shield at a baud rate of 19200, make sure that corresponds to the baud rate of your module
delay(20000); // Give time to your GSM shield log on to network
sendSMS(); // Send the SMS
Serial.begin(9600); // Nombre de symboles transmissit par seconde
lcd.begin(16, 2); // Nombre de lignes et de colonnes sur l'écran LCD
lcd.setRGB(colorR, colorG, colorB); // Applique les luminosités définit précedemment
}
void sendSMS()
{
SIM900.print("AT+CMGF=1\r"); // AT command to set SIM900 to SMS mode
delay(100);
SIM900.println("AT + CMGS = \"0659166691\"");
delay(100);
SIM900.println("message via arduino");
delay(100);
SIM900.println((char)26); // End AT command with a ^Z, ASCII code 26
delay(100);
SIM900.println();
delay(5000); // Give module time to send SMS
}
void loop()
{
// Lit les valeurs analogiques de l'accéléromètre
int xRead = analogRead(xPin);
int yRead = analogRead(yPin);
int zRead = analogRead(zPin);
// Convertit les valeurs lues en degrés de -90 à 90 (pour atan2)
int xAng = map(xRead, minVal, maxVal, -90, 90);
int yAng = map(yRead, minVal, maxVal, -90, 90);
int zAng = map(zRead, minVal, maxVal, -90, 90);
// Calcule les 360 degrés avec atan2 (-yAng, -zAng), atan2 renvoie la valeur de -π à π (radians), ensuite on convertit les radians en degrés
x = RAD_TO_DEG * (atan2(-yAng, -zAng) + PI);
y = RAD_TO_DEG * (atan2(-xAng, -zAng) + PI);
// Calibrage suivant les valeurs de l'accéléromètre à plat
x = x - 185;
y = y - 184;
// Pour éviter les erreurs suite au calibrage
if (x < -180)
{
x = x + 360;
}
if (y < -180)
{
y = y + 360;
}
// Affichage des valeurs de x et y pour vérifier si l'accéléromètre fonctionne
lcd.setCursor(0,0);
lcd.print("x: ");
lcd.print(x);
lcd.setCursor(0,1);
lcd.print("y: ");
lcd.print(y);
delay(100); // Pour ralentir l'affichage (plus facile à lire)
if (((y < minY) || (y > maxY)) || ((x < minX) || (x > maxX))) // Conditions pour que la led s'allume
{
variable = variable + 1;
if (variable == 1)
{
sendSMS();
}
}
else
{
variable = 0;
}
}