Bonjour,
Apres avoir cherché et encore cherché je n’ai pas ou peu trouvé de projet similaire
Du coup je me suis lancé et j’y suis arrivé malgré mes faibles voire inexistantes compétences dans ce domaine.
Voici donc mon projet fini de transmetteur d’alarme téléphonique.( fini bien que pouvant surement être améliorée. )
Matériel utilisé.
Un ARDUINO UNO
Un shield MP3 de chez SPARKFUN
Un shield GSM de chez TINYSINE
Le shield MP3 est couplé sur l'Arduino mais le shield GSM dois être séparé a cause d’incompatibilités des pins
De 1 à 5 entrée d’alarme possible.
Possibilité d’appeler plusieurs numéro de téléphone l’un après l’autre.( ici programmé a 4)
Une fois l’ arduino branché et le réseau gsm "accroché" le transmetteur est prêt à être utilisé
Shuntez une entrée et vous recevrez un appel avec un message vocal correspondant à l’entrée sélectionnée.
il ne vous restera plus qu'a créer les messages vocaux et les enregistrer sur la carte SD au format MP3.
Voici le code
/*
.................Sketch d'un transmetteur d'alarme.............................
4 commandes d'entrée déclenchent un appel téléphonique,
lorsque la communication est établie on active le fichier mp3 correspondant
a l'entrée activée, puis un compteur est activé affin d'appeler 4 numéros différents a la suite
dans ce sketch, toutes les pins de l'Arduino uno sont utilisée il ne reste qu'une entrée analog de libre
qui peut être ajoutée comme entrée d'alarme supplémentairement, comme sortie led ou alarme sonore.
CRÉE PAR MATTH122
*/
#define DEBUG
#include <SoftwareSerial.h>
SoftwareSerial SIM900(5, 10);
///////////////////////// INTEGRATION SHIELD AUDIO///////////////
#include <SPI.h> //bus SPI
#include <SdFat.h> //SD card
#include <SdFatUtil.h> //SD card tools
#include <SFEMP3Shield.h> //shield library
SFEMP3Shield MP3player; //player
SdFat sd; //card
////////////////DECLARATION DES VARIABLES//////////////////
const int nbcall = 4 //METTRE LE NOMBRE DE NUMERO A APPELER
const int volume = 40 // VOLUME DE LECTURE PLUS LE CHIFFRE EST HAUT MOINS LE SOND EST FORT
const int Bouton1 = A0; //plus de pin digital libre on utilise les analog
const int Bouton2 = A1;
const int Bouton3 = A2;
const int Bouton4 = A3;
boolean etatBouton1 = 0;
boolean etatBouton2 = 0;
boolean etatBouton3 = 0;
boolean etatBouton4 = 0;
int appel = 1; // le nombre sera incremente pour appeler les numeros suivant
void setup() {
Serial.begin(19200);
delay(300);
SIM900.begin(19200);
delay(300);
Serial.println("DEBUTS DU SETUP");
pinMode(Bouton1, INPUT);
/////////////////SETUP PLAYER//////////////////////
sd.begin(SD_SEL, SPI_HALF_SPEED)//start card
MP3player.begin(); //start player
MP3player.setVolume(volume, volume);
//////////////////// ALLUMAGE SHIELD GSM ET ATTENTE CONNECTION AU RESEAU GSM ///////////////////
SIM900power();
while( (envoyer_Commande_AT("AT+CREG?", "+CREG: 5", 5000) ||
envoyer_Commande_AT("AT+CREG?", "+CREG: 1,5", 5000) == 0 ); // ENVOIE DE LA COMMANDE AT TANT QUE 5 OU 1,5 N'EST PAS RECU
Serial.println("FIN DU SETUP");
}
////////////////////COMMANDE ALLUMAGE SHIELD GSM /////////////////////
void SIM900power()
{
digitalWrite(A5, HIGH);
delay(1000);
digitalWrite(A5, LOW);
}
///////////////LECTURE MP3 SUIVANT APPUIS BOUTON////////////////////
void PLAYMP3()
{
if (etatBouton1 == 1)
{
MP3player.playTrack(1);
Serial.println("track 1"); // LIGNE DE CONTROLE
delay(9000); // ATTEND 9 SECONDES
SIM900.println("ATH"); // MET FIN A LA COMMUNICATON
delay(500);
Serial.println("communication terminee"); // LIGNE DE CONTROLE
appel ++ ; // INCREMENTE DE 1 LA VALEUR DE -APPEL- POUR PASSER AU NUMERO SUIVANT
delay(500);
}
if (etatBouton2 == 1)
{
MP3player.playTrack(2);
Serial.println("track 2");
delay(9000);
SIM900.println("ATH");
delay(9000);
Serial.println("communication terminee");
appel ++ ;
}
if (etatBouton3 == 1)
{
MP3player.playTrack(1);
Serial.println("track 3");
delay(10000);
SIM900.println("ATH");
delay(10000);
Serial.println("communication terminee");
appel ++;
}
if (etatBouton4 == 1)
{
MP3player.playTrack(1);
Serial.println("track 4");
delay(10000);
SIM900.println("ATH");
delay(10000);
Serial.println("communication terminee");
appel ++ ;
}
}
////////////////SAVOIR SI LE TELEPHONE A ETE DECROCHE ////////////////
void decroche()
{
while(envoyer_Commande_AT("AT+CLCC?", "+CLCC: 1,0,0,0,0", 5000))== 0)
Serial.println("appel en cours");
delay(500);
if (envoyer_Commande_AT("AT+CLCC?", "OK", 1000) == 1)
{
Serial.println(" telephone decroche");
PLAYMP3();
}
}
////////////////////// EFFECTUER LES APPEL + COMPTAGE//////////////////
void affiche(int valeur_recue)
{
if(valeur_recue = 1)
{
Serial.println("valeur 1"); // LIGNE DE CONTROLE
Serial.println("appel en cours");
SIM900.println("ATD + +33XXXXXXXX;"); // REMPLACER LES X PAR LE NUMERO DE TELEPHONE DU DESTINATAIRE
delay(2000);
decroche();
}
if(valeur_recue = 2)
{
Serial.println("valeur 2");
Serial.println("appel en cours");
SIM900.println("ATD + +33XXXXXXXX;");
delay(2000);
decroche();
}
if(valeur_recue = 3)
{
Serial.println("valeur 3");
Serial.println("appel en cours");
SIM900.println("ATD + +33XXXXXXXXX;");
delay(2000);
decroche();
}
if(valeur_recue = 4)
{
Serial.println("valeur 4");
Serial.println("appel en cours");
SIM900.println("ATD + +33XXXXXXXXX;");
delay(2000);
decroche();
appel = 1; // REINITIALISE APPEL A 1
}
}
//////////////////////fin /////////////////////////
void loop()
{
etatBouton1 = digitalRead(Bouton1);
etatBouton2 = digitalRead(Bouton2);
etatBouton3 = digitalRead(Bouton3);
etatBouton4 = digitalRead(Bouton4);
if(etatBouton1 == 1 || etatBouton2 == 1 || etatBouton3 == 1 || etatBouton4 == 1)
{
Serial.println("BOUTON APPUYE"); //LIGNE DE CONTROLE
affiche(appel); // EFFECTUE LE PREMIER APPEL SELON LE COMPTEUR
}
}
//////////////////////// MISE EN MEMOIRE COMMANDE AT///////////////////////////////////
uint8_t envoyer_Commande_AT(char* commande_AT, char* reponse_Esperee, unsigned int timeout)
{
uint8_t x = 0, answer = 0;
char reponse[100];
unsigned long previous;
// Initialisation de la chaine de caractère (string).
memset(reponse, '\0', 100);
delay(100);
// Initialisation du tampon d'entrée (input buffer).
while ( SIM900.available() > 0)
{
SIM900.read();
}
// Envoi de la commande AT.
SIM900.println(commande_AT);
// Réponse du SIM900.
// Cette boucle vérifie s'il y a des données disponibles dans le tampon.
// Ces données sont comparées avec la réponse attendue.
x = 0;
previous = millis();
do
{
if (SIM900.available() != 0)
{
reponse[x] = SIM900.read();
x++;
// Comparaison des données
if (strstr(reponse, reponse_Esperee) != NULL)
{
answer = 1;
}
}
} while ((answer == 0) && ((millis() - previous) < timeout));
#ifdef DEBUG
Serial.println(reponse);
#endif
return answer;
}
Voila si ce projet peut être utile à d'autre...