[duemilanove] MANDAR SMS CON ALARMA PIR

Hola

Estoy terminando un proyecto personal con Arduino Duemilanove,
solo tengo algunos conocimientos de programación y algo de electricidad

Recopilando información a través de la red, he hecho una alarma que
detecta la presencia de personas a través de un sensor PIR,
una pantalla LCD , un piezo electrico, y un interruptor (llave).

Todo va bien, menos un detalle, ejjeej la idea es avisar por sms.

En el tutorial Arduino-SMS, se usa un modem muy parecido al mio,
pero en mi arduino duemilanove, no tengo muy claro el tema
de la comunicacion con puerto serie, pues he probado con un monton
de metodos, (Serial, softserial, newsoftserial) …

Y no tengo narices a hablarle al modem.

El modem, un clonico del TC-35i, lo puedo atacar con hyperterminal
y mando sms sin problemas. Conecto con el a 9600, 8, n , 1

Cuando he probado con el arduino, la respuesta que obtengo al
decirle el comando “ATI” (da informacion del modem)
o “AT+CPIN=1234” establece el pin de la sim,

es siempre la misma, (-1),

Se que al modem por cualquier motivo , no le estan llegando las ordenes
y el caso es que tiene una masa comun con arduino y el tx de uno apuntando
al rx del otro y viceversa.

Otra cosa que me he dado cuenta es que el modem, Solo empieza a coger una
orden por hyperterminal , cuando empieza por “AT”

Yo creo que lo que estoy mandandole, no lo entiende o bien porque el arduino
le habla con otro idioma (que cambie la paridad o el bit de stop) o porque
el formato de los comandos que he mandado, char , no sea el adecuado. O tambien
quizas haya que poner resistencias o algo entre los pines de envio y recepcion.

Alguien me puede ayudar con el tema este?

aqui os dejo mi codigo, y algunas fotos.

Saludos.


#include <NewSoftSerial.h>
#include <LCD4Bit.h>
LCD4Bit lcd = LCD4Bit(2);
int luzfondo = 13;

int llave = 11; // nombrar un pin de entrada para nuestro botón

int zumbador = 3;
int SensorPir = 6;

int desarmado;
boolean presencia ;

int pinSpeaker = 5;
int frec = 2500;
int dur = 400;
int SWnotificado = 0;
int ContadorDesarme;
int incomingByte = 0;

int rxPin = 3;
int txPin = 4;

NewSoftSerial modem(3,4);

void setup() {
lcd.init();
pinMode(luzfondo, OUTPUT); // Para la luz de fondo de la pantalla lcd.
pinMode(llave, INPUT); // declarar el pin como entrada
pinMode(SensorPir, INPUT); //
pinMode(pinSpeaker, OUTPUT);
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);

modem.begin(9600);
}

void playTone(long duration, int freq) {
duration *= 1000;
int period = (1.0 / freq) * 1000000;
long elapsed_time = 0;
while (elapsed_time < duration) {
digitalWrite(pinSpeaker,HIGH);
delayMicroseconds(period / 2);
digitalWrite(pinSpeaker, LOW);
delayMicroseconds(period / 2);
elapsed_time += (period);
}
frec = frec + 10;
dur = dur + 1 ;

}

void loop() {

inicioloop:
desarmado = digitalRead(llave);

if ( (SWnotificado == 1) && (desarmado == LOW) ) { goto inicioloop; }

SWnotificado = 0;
desarmado = digitalRead(llave);
presencia = digitalRead(SensorPir);
lcd.clear();
if (desarmado == HIGH) {

digitalWrite(luzfondo, HIGH);
lcd.clear();
lcd.printIn(“SISTEMA”) ;
lcd.cursorTo(2, 0);
lcd.printIn(“DESARMADO”);
delay (3000);

} else { // AHORA ESTA FUNCIONANDO

lcd.clear();
digitalWrite(luzfondo, HIGH);
lcd.printIn(“ARMANDO EN”) ;
lcd.cursorTo(2, 0);
lcd.printIn(“10 SEGUNDOS”);
delay (1000);

desarmado = digitalRead(llave); if ( desarmado == HIGH) { goto inicioloop ; }

lcd.cursorTo(2, 0);
lcd.printIn(“09 SEGUNDOS”);
delay (1000);
desarmado = digitalRead(llave); if ( desarmado == HIGH) { goto inicioloop ; }

lcd.cursorTo(2, 0);
lcd.printIn(“08 SEGUNDOS”);
delay (1000);
desarmado = digitalRead(llave); if ( desarmado == HIGH) { goto inicioloop ; }

lcd.cursorTo(2, 0);
lcd.printIn(“07 SEGUNDOS”);
delay (1000);
desarmado = digitalRead(llave); if ( desarmado == HIGH) { goto inicioloop ; }

lcd.cursorTo(2, 0);
lcd.printIn(“06 SEGUNDOS”);
delay (1000);
desarmado = digitalRead(llave); if ( desarmado == HIGH) { goto inicioloop ; }

lcd.cursorTo(2, 0);
lcd.printIn(“05 SEGUNDOS”);
delay (1000);
desarmado = digitalRead(llave); if ( desarmado == HIGH) { goto inicioloop ; }

lcd.cursorTo(2, 0);
lcd.printIn(“04 SEGUNDOS”);
delay (1000);
desarmado = digitalRead(llave); if ( desarmado == HIGH) { goto inicioloop ; }

lcd.cursorTo(2, 0);
lcd.printIn(“03 SEGUNDOS”);
delay (1000);
desarmado = digitalRead(llave); if ( desarmado == HIGH) { goto inicioloop ; }

lcd.cursorTo(2, 0);
lcd.printIn(“02 SEGUNDOS”);
delay (1000);
desarmado = digitalRead(llave); if ( desarmado == HIGH) { goto inicioloop ; }

lcd.cursorTo(2, 0);
lcd.printIn(“01 SEGUNDOS”);
delay (1000);
desarmado = digitalRead(llave); if ( desarmado == HIGH) { goto inicioloop ; }

lcd.clear();
digitalWrite(luzfondo, HIGH);
lcd.printIn(“SISTEMA ARMADO”);
delay (1500);
digitalWrite(luzfondo, LOW);
lcd.clear();

delay (5000);

presencia = LOW;

do {
presencia = digitalRead(SensorPir);
} while ( presencia == LOW ) ;

//EN CASO DE DETECCION
ContadorDesarme = 0;
do {
desarmado = digitalRead(llave); //ver si han desarmado
playTone(dur, frec); // un pitido.
lcd.clear();
digitalWrite(luzfondo, HIGH); // enciende pantalla
lcd.printIn(“ATENCION INTRUSO”);
lcd.cursorTo(2, 0);
lcd.printIn(“DESARME AHORA”);
ContadorDesarme = ContadorDesarme + 1;
delay (1000);
digitalWrite(luzfondo, LOW);} //apaga pantalla
while (desarmado == LOW && ContadorDesarme <= 15);
// FIN ContadorDesarme

if (desarmado == HIGH) { goto inicioloop; } ; //Si has desarmado, que empiece de nuevo

if ( (SWnotificado == 1) && (desarmado == LOW) ) { goto inicioloop; } // si esta armado,
pero ya ha notificado SMS que vaya al princiopio donde no volvera a empezar hasta que rearme de nuevo.

digitalWrite(luzfondo, HIGH);
lcd.clear();
lcd.printIn(“Preparado para”);
lcd.cursorTo(2, 0);
lcd.printIn(“Mandar SMS”);
delay (10000);


//Aqui es donde esta el tema

modem.println (“AT+CPIN=1234”); // el pin de la sim, este comando no llega a ejecutarse en el modem.

modem.print(“AT+CMGS=”);
modem.println(34,BYTE);
modem.print("+34622622622"); // el destinatario del mensaje.
modem.println(34,BYTE);
modem.print(“TIO, TE ROBAN”);
modem.println(26,BYTE); // Escibe el Ctrl+Z


lcd.clear();
lcd.printIn(“SMS”);
lcd.cursorTo(2, 0);
lcd.printIn(“ENVIADO”);
delay (3000);
SWnotificado = 1 ;
}
}

Las fotos estan en:
(copiar y pegar en navegador, no me deja ponerlas)

personales.ya.com/jesusillo/alarma.jpg
personales.ya.com/jesusillo/alarma2.jpg
personales.ya.com/jesusillo/alarma3.jpg