Bonjour, (et merci pour votre patience si vous arrivez à la fin de ce post)
Je suis nul en informatique et électronique (demandez moi une belle dalle en béton , ça je sais !), et pourtant je me suis lancé dans l'achat d'un arduino Mega 2560 et d'un GSM shield SIM 900 en croyant qu'avec deux bout de fil supplémentaire je pourrai me débrouiller. Mais quel bourrin je suis !
Bref je ne m'en sort pas et j'ai besoin de vos lumières.
En attendant de recevoir ma carte SIM avec SMS illimités je tente d'écrire un programme d'envoi de plusieurs sms en fonction du déclenchement des différéntes zones protégées à savoir, les zones A, B, C, D et E.
Ces différents capteurs d'alarme ont tous en sortie, des relais dont j'utilise les contact NO.
Si la zone A est activée, le relais concerné ferme le contact et alors, un sms du type "ALARME ZONE A EN COURS" est envoyé.
Puis lorsque le relais se retrouve dans sa position initiale (NO) alors un sms du type "ALARME ZONE A TERMINEE" est envoyé.
Voila ci dessous mon petit sketch:
// définition des entrées d'alarme (fixes):
const int A = 2; // entrée alarme A = pin 2
const int B = 3; // entrée alarme B = pin 3
const int C = 4; // entrée alarme C = pin 4
const int D = 5; // entrée alarme D = pin 5
const int E = 6; // entrée alarme E = pin 6
// variables (par définition peuvent changer):
int AState = 0; // variable pour lire le statut des entrées d'alarme
int BState = 0; // variable pour lire le statut des entrées d'alarme
int CState = 0; // variable pour lire le statut des entrées d'alarme
int DState = 0; // variable pour lire le statut des entrées d'alarme
int EState = 0; // variable pour lire le statut des entrées d'alarme
void setup()
{
pinMode(A, INPUT);
pinMode(B, INPUT);
pinMode(C, INPUT);
pinMode(D, INPUT);
pinMode(E, INPUT);
digitalWrite(A, HIGH); // turn on internal pullup
digitalWrite(B, HIGH); // turn on internal pullup
digitalWrite(C, HIGH); // turn on internal pullup
digitalWrite(D, HIGH); // turn on internal pullup
digitalWrite(E, HIGH); // turn on internal pullup
}
void loop()
{
// lire l'état des entrée d'alarme:
AState = digitalRead(A);
BState = digitalRead(B);
CState = digitalRead(C);
DState = digitalRead(D);
EState = digitalRead(E);
// vérifier si l'état des entrées d'alarmes est activé.
// si c'est le cas, le xState est HIGH:
if (AState == HIGH)
// configuration GSM shield
mySerial.begin(19200); // Paramètres par défaut du port série du GPRS shield (19200bps 8-N-1)
mySerial.print("\r"); // Envoyer un retour à la ligne <CR>
delay(1000); // Attendre une seconde que le modem retourne "OK"
mySerial.print("AT+CMGF=1\r"); // Envoyer un SMS en mode texte
delay(1000);
mySerial.print("AT+CMGS=\"+33XXXXXXXXXX\"\r"); // Commencer un SMS à envoyer au numéro +33....
delay(1000);
mySerial.print("Alarme Zone A!\r"); // Le texte du message
delay(1000);
mySerial.write(26);
}
Malheureusement quand j'utilise la fonction vérif du logiciel arduino, ça plante sur: mySerial.begin(19200); // Paramètres par défaut du port série du GPRS shield (19200bps 8-N-1)
avec le message: mySerial was not declared in this scope
Si l'un d'entre vous à une idée de ce qui se passe, je suis preneur
Merci
Un truc que je ne comprend pas tu déclare les "pin" en "input" puis tu les place à "high" pourquoi ? Une entrée se lit mais ne se modifie pas par programme " digitalWrite(A, HIGH);" ne sert à rien du moins je pense....
fifi82:
Un truc que je ne comprend pas tu déclare les "pin" en "input" puis tu les place à "high" pourquoi ? Une entrée se lit mais ne se modifie pas par programme " digitalWrite(A, HIGH);" ne sert à rien du moins je pense....
pinMode(A, INPUT);
digitalWrite(A, HIGH); // turn on internal pullup
et équivalent à
pinMode(A, INPUT_PULLUP);
Dans ce cas tu actives une résistance interne qui te ramène ta pin électriquement à la tension d'alimentation.
Tu devrais consulter ces liens :
infobarquee:
bonjour,
normal, tu le déclare ou ton mySerial?
en plus tu mets un truc qui doit être dans le setup dans ton loop
mySerial.begin(19200); // Paramètres par défaut du port série du GPRS shield (19200bps 8-N-1)
avant de faire joujou comme ca, apprends un peu les rudiments, c'est un conseil
@ Infobarquee:
Pas cool votre dernière phrase, je ne fais pas joujou, j'ai évidemment pas le niveau nescessaire ni les capacités de comprendre arduino et je m'en rends bien compte mais je me donne du mal puisque que je lis et relis les posts des forums, j'ai même lu que vous aviez réaliser ce même montage (jolie la boite de biscuit), et je n'ai pas pris la peine de vous déranger puisque j'ai aussi lu que vous commercialisez ce montage et je me doute que je n'aurai pas à attendre d'aide de votre part.
Vous voyez je fais des efforts pour m'instruire et je ne vais prendre en compte que la première partie de votre post !
Donc cette ligne fait partie des infos en quelque sorte et pas des choses à éxécuter
merci
@ Infobarquee:
Pas cool votre dernière phrase, je ne fais pas joujou, j'ai évidemment pas le niveau nescessaire ni les capacités de comprendre arduino et je m'en rends bien compte mais je me donne du mal puisque que je lis et relis les posts des forums, j'ai même lu que vous aviez réaliser ce même montage (jolie la boite de biscuit), et je n'ai pas pris la peine de vous déranger puisque j'ai aussi lu que vous commercialisez ce montage et je me doute que je n'aurai pas à attendre d'aide de votre part.
Vous voyez je fais des efforts pour m'instruire et je ne vais prendre en compte que la première partie de votre post !
Donc cette ligne fait partie des infos en quelque sorte et pas des choses à éxécuter
merci
la remarque n'était pas désobligeante, loin de là, mais un conseil sympathique. d'ou le
en gros, et comme on le fait remarquer souvent sur le forum, avant de se lancer dans un projet comme celui ci, il est préférable d'apprendre les bases de la programmation sur le nono.
allumer une led, envoyer des données par le serial, etc...
après on se lance dans plus complexe.
en gros, tu as pris des bouts de code, les as mis sur des lignes au pti bonheur la chance.
c'est comme si je voulais faire une dalle béton en mettant du ciment par terre, je balance de l'eau par dessus, je mets une poignée de sable, un soupcon de gravier et une fois que tout est sec, je mets la ferraile à béton.
mais pourquoi ca fonctionne pas? j'ai pourtant bien tout mis.
il y a un ordre a respecter pour faire une dalle béton, non?
mise en place des coffrages et mise à niveau, ferraillage, faire son béton, le couler, le mettre de niveau, le lisser, passer l'hélicoptère si besoin, le faire sècher
pour le nono, c'est pareil
on déclare les variables
on les initialise
on lance le programme
pour ce qui est des pin d'entrée, on peut comparer mes contacts d'entrée à des bouton poussoir NO, je me suis inspiré (le mot est faible, j'ai copié) un tuto arduino sur les boutons: http://arduino.cc/en/tutorial/button
de cette façon j'utilise les résistance interne de la carte méga pour réaliser mes contacts NO, non ?
oui, mais tu vas rencontrer un autre soucis
tu mets en HIGH tes pins, donc ouverts (pas de contact)
après dans ton if tu demande si HIGH donc tu recevras des sms en permanence.
tiens un code qui devrait fonctionner, vite fait comme ca
#include <SoftwareSerial.h>
SoftwareSerial mySerial(7, 8);
// définition des entrées d'alarme (fixes):
const int A = 2; // entrée alarme A = pin 2
const int B = 3; // entrée alarme B = pin 3
const int C = 4; // entrée alarme C = pin 4
const int D = 5; // entrée alarme D = pin 5
const int E = 6; // entrée alarme E = pin 6
// variables (par définition peuvent changer):
int AState = 0; // variable pour lire le statut des entrées d'alarme
int BState = 0; // variable pour lire le statut des entrées d'alarme
int CState = 0; // variable pour lire le statut des entrées d'alarme
int DState = 0; // variable pour lire le statut des entrées d'alarme
int EState = 0; // variable pour lire le statut des entrées d'alarme
void setup()
{
pinMode(A, INPUT);
pinMode(B, INPUT);
pinMode(C, INPUT);
pinMode(D, INPUT);
pinMode(E, INPUT);
digitalWrite(A, HIGH); // turn on internal pullup
digitalWrite(B, HIGH); // turn on internal pullup
digitalWrite(C, HIGH); // turn on internal pullup
digitalWrite(D, HIGH); // turn on internal pullup
digitalWrite(E, HIGH); // turn on internal pullup
}
void loop()
{
// lire l'état des entrée d'alarme:
AState = digitalRead(A);
BState = digitalRead(B);
CState = digitalRead(C);
DState = digitalRead(D);
EState = digitalRead(E);
// vérifier si l'état des entrées d'alarmes est activé.
// si c'est le cas, le xState est LOW:
if (AState == LOW)
{
// configuration GSM shield
mySerial.begin(19200); // Paramètres par défaut du port série du GPRS shield (19200bps 8-N-1)
mySerial.print("\r"); // Envoyer un retour à la ligne <CR>
delay(1000); // Attendre une seconde que le modem retourne "OK"
mySerial.print("AT+CMGF=1\r"); // Envoyer un SMS en mode texte
delay(1000);
mySerial.print("AT+CMGS=\"+33XXXXXXXXXX\"\r"); // Commencer un SMS à envoyer au numéro +33....
delay(1000);
mySerial.print("Alarme Zone A!\r"); // Le texte du message
delay(1000);
mySerial.write(26);
}
}
ok, désolé d'avoir réagi vivement je suis trop succeptible.
j'ai donc des bouts de code qu'il faut mettre dans le bon ordre avec bien sûr ce qu'il faut entre chaque bout pour faire la liaison.
Suite à la lecture que vous m'avez indiqué, je suis retourné sur la page concernant mon matériel et j'ai comme indication:
Broches Arduino utilisées
?Digital 7 et 8 pour envoi/réception en communication série logiciel (config par défaut).
Digital 0 et 1 si vous optez pour une communication série matérielle.
?Digital 9 optionel. Non utilisée par défaut.
Broche utilisée pour allumer/éteindre le SIM900 à partir d'Arduino (voir la doc sur le Wiki)
il me faut donc déclarer ces broches 7 e8 dans mes variables comme ceci ?
SoftwareSerial mySerial = SoftwareSerial(8Pin, 7Pin);
void setup() {
// define pin modes for tx, rx:
pinMode(8Pin, INPUT);
pinMode(7Pin, OUTPUT);
// set the data rate for the SoftwareSerial port
mySerial.begin(19200);
}
ben dis donc je suis pas assez rapide pour écrire, j'ai toujours un post de retard
merci pour ces modif's je vais tester cela à mon retour à la maison
merci
#include <SoftwareSerial.h>
SoftwareSerial mySerial(7, 8);
// définition des entrées d'alarme (fixes):
const int A = 2; // entrée alarme A = pin 2
const int B = 3; // entrée alarme B = pin 3
const int C = 4; // entrée alarme C = pin 4
const int D = 5; // entrée alarme D = pin 5
const int E = 6; // entrée alarme E = pin 6
// variables (par définition peuvent changer):
int AState = 0; // variable pour lire le statut des entrées d'alarme
int BState = 0; // variable pour lire le statut des entrées d'alarme
int CState = 0; // variable pour lire le statut des entrées d'alarme
int DState = 0; // variable pour lire le statut des entrées d'alarme
int EState = 0; // variable pour lire le statut des entrées d'alarme
void setup()
{
pinMode(A, INPUT);
pinMode(B, INPUT);
pinMode(C, INPUT);
pinMode(D, INPUT);
pinMode(E, INPUT);
digitalWrite(A, HIGH); // turn on internal pullup
digitalWrite(B, HIGH); // turn on internal pullup
digitalWrite(C, HIGH); // turn on internal pullup
digitalWrite(D, HIGH); // turn on internal pullup
digitalWrite(E, HIGH); // turn on internal pullup
mySerial.begin(19200); // Paramètres par défaut du port série du GPRS shield (19200bps 8-N-1)
}
void loop()
{
// lire l'état des entrée d'alarme:
AState = digitalRead(A);
BState = digitalRead(B);
CState = digitalRead(C);
DState = digitalRead(D);
EState = digitalRead(E);
// vérifier si l'état des entrées d'alarmes est activé.
// si c'est le cas, le xState est HIGH:
if (AState == LOW)
{
mySerial.print("AT+CMGF=1\r"); // Envoyer un SMS en mode texte
delay(1000);
mySerial.print("AT+CMGS=\"+33XXXXXXXXXX\"\r"); // Commencer un SMS à envoyer au numéro +33....
delay(1000);
mySerial.print("Alarme Zone A!\r"); // Le texte du message
delay(1000);
mySerial.write(26);
}
}
bonsoir, je vous souhaite une bonne année , santé et prospérité à vous tous.
@ infobarquee
j'ai enfin reçu la carte sim et j'ai pu tester le code que vous m'avez fourni, cela marche de façon impeccable.
J'obtiens l'envoi d'un SMS différent lors de chaque fermeture de contact entre la masse et les pin's 2, 3, 4, 5 ou 6.
Bonjour à tous, depuis 3 mois j'utilise avec succes l'arduino mega 2560 plus un shield gsm dans un système d'alarme avec envoie de SMS.
Malheureusement, suite a une panne de chargeur la tension de la batterie est tombée à 8v et depuis impossible d'utiliser l'arduino et le shield GSM car j'ai sans arret des SMS (toute les 10 a 20 secondes).
L'un de vous saurait'il d'ou provient ce problème et ce qu'il faut faire pour y remédier,et comment faire un diagnostique.
Par avance merci
icare34200:
Bonjour à tous, depuis 3 mois j'utilise avec succes l'arduino mega 2560 plus un shield gsm dans un système d'alarme avec envoie de SMS.
Malheureusement, suite a une panne de chargeur la tension de la batterie est tombée à 8v et depuis impossible d'utiliser l'arduino et le shield GSM car j'ai sans arret des SMS (toute les 10 a 20 secondes).
L'un de vous saurait'il d'ou provient ce problème et ce qu'il faut faire pour y remédier,et comment faire un diagnostique.
Par avance merci
ca ressemble à un reboot du tout car le gsm pompe pas mal.
le conseil est de tout mettre à plat et tout vérifier correctement, contact, relais,e tc.....
ok demain démontage de l'ensemble et test sur la plaque d'essai avec une alim sur secteur et de simples cable pour simuler les contacts.
J'avais remarqué effectivement que le GSM consommait pas mal puique impossible à alimenter par le cable USB.
merci infobarquee
Voila, l'arduino mega et son shield se retrouvent sur la table du salon !
j'ai rechargé le sketch de l'application alarme GSM, les contacts des cellules IR sont remplacés par de simples cables sur la plaque de test.
je met en contact la broche commun avec à tour de rôle les pins 3, 4 , 5, 6 et 7 et j'obtiens en réponse les bons SMS attendus, OUF !
Le probleme venait peut être de ......... je ne sais pas, mais l'essentiel est que la carte fonctionne.
Demain remontage de la carte et du shield GSM dans son environnement et vérification des différents contacts !
Bonjour à tous,
me revoila après plusieurs jours de test en config réelle.
Cela a fonctionné quelques jours (une dizaine) puis nouvelle panne, mais différente cette fois ci car plus d'envoi de sms du tout.
Je test la carte sim sur un telephone classique a quelques cms du montage et cela ne vient pas de la sim car les appels et les sm fonctionnent sur le telephone.
remise en place de la sim sur le shield GSM , mise sous tension : led verte s'allume fixe donc c'est ok
mise en route par un appui de 2s sur le bouton latéral du shield : led bleue s'allume fixe donc c'est ok
quand à la led rouge, après quelques secondes de clignotement rapide, elle reste allumée environ un dizieme de seconde et éteinte environ 3 secondes: donc le réseau semble être trouvé.
je recharge le code sur la carte arduino : ok
je courcircuite les broches n°2 et ground pendant une seconde.......... et cela ne fonctionne toujours pas.
pas d'envoie de sms, rien, nada !
Faut-il faire un reset de la carte ? (appui bref ou long sur le bouton reset en façade ?)
merci de vos réponses.
au fait, je ne suis pas prévenu par mail quand qqun post sur ce sujet est-ce normal ?
pour suivre si une réponse
en dessous de la case ou tu réponds, additional options, coche notify me of replies
n'ayant pas la notice de ton shield, difficile de répondre pour les leds.
sur les autres shields, la led réseau clignote toutes les 3s
envoie le script qui affiche les données entrées via la console serie.
plus le nom en tete
ca permettra de renvoyer les infos tapées
tu fais un ATZ, il doit répondre ok
AT+CSCA?
puis tu teste plusieurs commandes AT ftp://imall.iteadstudio.com/IM120417009_IComSat/DOC_SIM900_AT%20Command%20Manual_V1.03.pdf
Un grand bonjour à tous,
merci infobarquee, je viens de cliquer sur notify et ensuite sur enable, je devrais donc etre prévenu des prochains posts.
je viens de refaire un essai puisque le montage se trouve sur le bureau, connection via le cable USB à l'ordinateur, je courcircuite la masse et la pin 2 et miracle je reçois le sms tant attendu !!!!! test avec les pins 3, 4, 5 et 6, un SMS à chaque fois !!!!!
Je ne comprend pas pourquoi cela fonctionne depuis ce matin, la seule différence c'est que j'ai mis un sweat shirt ce matin !
Se pourrait-il que ce soit du à la ............... chaleur ? @infobarquee :
je suis en train de potasser pour comprendre ce que vous me demandez (faire ATZ etc.....) , si jamais je sèche toujours d'ici 48h, je vous demanderai un indice. par contre le lien que vous indiquez est mort (si c'est bien le terme), impossible d'arriver sur une page web.
Cordialement