Arduino + Ethernet Shield + PIR + EMAIL Alarm

4

Posted by rdm | Posted in ARDUINO | Posted on 16-07-2014

Etiquetas:

Una función interesante del Arduino es fabricarte una alarma casera a través del sensor PIR. El objetivo es que el sensor PIR detecta presencia y a través del módulo Ethernet se manda un correo electrónico que te avisa a tu móvil.

Material necesario:

– Arduino R3.

– Ethernet Shield.

-Sensor PIR.

Y disponer de una conexión de internet claro :).

 

Comento algunas líneas. Lo he probado con un correo de Godaddy y llegan las alarmas.

 

Foto del proyecto.

Código a grabar en Arduino:

 

#include <SPI.h>

#include <Ethernet.h>

 

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xAF, 0xCE, 0xDD }; // La mac que quieras usar.

byte ip[] = { 192, 168, 1, 109 }; La ip dentro de tu router.

byte gateway [] = { 192,168,1,254 }; // Puede que no haga falta esta línea.

byte subnet [] = { 255,255,255,0 };

byte server[] = { 68, 178, 252, 101 };//  Dirección del servidor smtp. En este caso de Godaddy. Se sabe haciendo un ping al servidor ( smtpout.secureserver.net )

EthernetClient client;

 

/////////////////////////////

//VARS

//Tiempo que damos para calibrar el sensor. (10-60 segundos) Para pruebas pon poco luego ya lo dejas en 60 para activar la alarma y salir.

int calibrationTime = 60;

 

//the time when the sensor outputs a low impulse

long unsigned int lowIn;

 

//the amount of milliseconds the sensor has to be low

//before we assume all motion has stopped

long unsigned int pause = 5000;

 

boolean lockLow = true;

boolean takeLowTime;

 

int pirPin = 3;   //the digital pin connected to the PIR sensor’s output

int ledPin = 13;

int nPIR_detect;

 

void setup()

{

Ethernet.begin(mac, ip);

Serial.begin(57600);

 

pinMode(pirPin, INPUT);

digitalWrite(pirPin, LOW);

//give the sensor some time to calibrate

Serial.print(“calibrating sensor “);

for(int i = 0; i < calibrationTime; i++){

Serial.print(“.”);

delay(1000);

}

Serial.println(” done”);

Serial.println(“SENSOR ACTIVE”);

delay(50);

nPIR_detect = 0;

}

 

void loop()

{

delay(1000);

if(PIR_detected()) // PIR : HIGH

{

if (client.available()) {

char c = client.read();

Serial.print(c);

}

 

Serial.println(“connecting…”);

 

if (client.connect(server, 25)) {

Serial.println(“connected”);

client.println(“helo smtpout.secureserver.net”);

client.println(“AUTH LOGIN”);                         //Mira en “http://base64-encoder-online.waraxe.us/”

client.println(“***********************”);           //Nombre de usuario *****@gmail.com.my and encode it

client.println(“***********************”); La contraseña…

delay(10);

client.println(“MAIL From: ***@***.com”); // replace the ** with your mail address

delay(10);

client.println(“RCPT TO: +++@+++.com”);       // replace the ** with to mail address

delay(10);

client.println(“DATA”);

delay(10);

client.println(“From: ***@***.com”);

delay(10);

client.println(“TO: +++@+++.com”);

delay(10);

client.println(“SUBJECT: Algo detectado en casa. ALERTA PIR”);

delay(10);

client.println();

client.println(“ESTADO DE ALERTA”);

client.println(“¡¡¡PELIGRO ALGO DETECTADO!!”);

client.println(“.”);

client.println(“.”);

delay(10);

 

delay(1000);

client.stop();

Serial.println(“mail sent!!”);

delay(30000);

}

else

{

Serial.println(“connection failed”);

}

}

}

 

boolean PIR_detected()

{

boolean bPIR;

if(digitalRead(pirPin) == HIGH){

digitalWrite(ledPin, HIGH);   //the led visualizes the sensors output pin state

if(lockLow){

//makes sure we wait for a transition to LOW before any further output is made:

lockLow = false;

Serial.println(“—“);

Serial.print(“motion detected at “);

Serial.print(millis()/1000);

Serial.println(” sec”);

delay(50);

}

takeLowTime = true;

bPIR = true;

}

if(digitalRead(pirPin) == LOW){

digitalWrite(ledPin, LOW); //the led visualizes the sensors output pin state

if(takeLowTime){

lowIn = millis();         //save the time of the transition from high to LOW

takeLowTime = false;       //make sure this is only done at the start of a LOW phase

}

//if the sensor is low for more than the given pause,

//we assume that no more motion is going to happen

if(!lockLow && millis() – lowIn > pause){

//makes sure this block of code is only executed again after

//a new motion sequence has been detected

lockLow = true;

Serial.print(“motion ended at “);     //output

Serial.print((millis() – pause)/1000);

Serial.println(” sec”);

delay(50);

}

bPIR = false;

}

return bPIR;

}

Comments (4)

Hola me da error al compilar en la linea 124 y 129.

Me podias ayudar

Hola,

Añade y modifica estas líneas:

long unsigned int restIn2 = millis() – lowIn;
if (!lockLow && restIn2 > pause){

Suerte.,

Es decir quedaría así:

long unsigned int restIn2 = millis() – lowIn;
if (!lockLow && restIn2 > pause){

//makes sure this block of code is only executed again after
//a new motion sequence has been detected
lockLow = true;
restIn2 = millis() – pause;
Serial.print(“motion ended at “);
Serial.print(restIn2 / 1000);
Serial.println(” sec”);
delay(50);

}

hola como estas me podrias ayudar al compilarlo me muestra error en la linea 130

Write a comment