ALDUINO AUTO SOLAR INTRUSIVE ALARM
MATERIALS
Arduino Nano.
Sensor PIR for Arduino
Battery 3,7v 2200mA
Prototype board
Solar panel
Regulated charge module
SIM900L Module
Booster Module
#include <SoftwareSerial.h>
SoftwareSerial SIM900(11, 10); // Configura el puerto serial para el SIM900
char incoming_char = 0; //Variable que guarda los caracteres que envia el SIM900
String agenda[] = {"601006044" , "XXXXXXXXX"}; //Array con los numeros autorizados
int numtotal = 2; //Cantidad de numeros de telefono autorizados
String mensaje = "";
int LED = 13 ;
#define PIR 9
bool alarma = false ; //estado activacion alarma
bool estado = false ; //Variable para guardar el estado del LED
bool bateria = true;
float v1 = 4.98; // valor real de la alimentacion de Arduino, Vcc
float r1 = 100000; // 100k
float r2 = 68000; // 68k
float v2 = 0;
long levelalarm = 0; //nivel de alarma
void setup()
{
pinMode( LED, OUTPUT) ; // LED como salida
pinMode(PIR, INPUT); //Entrada sensor PIR
inicializaSIM900();
}
void loop()
{
//float v = (analogRead(7) * v1) / 1024.0;
//float v2 = v / (r2 / (r1 + r2));
float lectura = (analogRead(7));
v2= map(lectura, 0, 1023, 0, 500);
v2= v2/100;
//Serial.println("Bateria " + String(v2));
if (v2<=3.2) {
if (bateria){
sendSMS("601006044", "Bateria baja! " + String(v2));
Serial.println("Bateria baja!");
bateria=false;
}
}
//Serial.println("\nBateria:" + String(v2));
if (SIM900.available() > 0)
{
//Serial.println("Disponible");
incoming_char = SIM900.read(); //Guardamos el carácter del GPRS
Serial.print(incoming_char); //Mostramos el carácter en el monitor serie
mensaje = mensaje + incoming_char ; // Añadimos el carácter leído al mensaje
}
identifica_llamada ();
if (alarma)
{
if (digitalRead(PIR)){
//Alarma
levelalarm= levelalarm + 1;
if (levelalarm >=7){
sendSMS("601006044", "ALARMA!! -- "+ String(v2) + "v -- " + String (levelalarm));
delay (10000);
levelalarm=0;
}
delay (500);
}
}
}
void inicializaSIM900()
{
//digitalWrite(9, HIGH); // Descomentar para activar la alimentación de la tarjeta por Software
//delay(1000);
//digitalWrite(9, LOW);
delay (5000);
SIM900.begin(9600); //Configura velocidad del puerto serie para el SIM900
Serial.begin(9600); //Configura velocidad del puerto serie del Arduino
Serial.println("OK");
delay (1000);
//SIM900.println("AT+CPIN=\"4088\""); //Comando AT para introducir el PIN de la tarjeta
//SIM900.println("AT+CLCK="SC",0,"4088",1");
SIM900.println("AT+CPIN?\r");
Serial.println("PIN OK");
delay(50000); //Tiempo para que encuentre una RED
SIM900.println("AT+CREG?\r");
delay(1000);
//SIM900.println("AT+CBAND\r");
//SIM900.println("AT+COPS=?\r");
delay(1000);
SIM900.print("AT+CLIP=1\r"); // Activa la identificación de llamada
delay(500);
SIM900.print("AT+CMGF=1\r\n"); //Configura el modo texto para enviar o recibir mensajes
delay(5000);
SIM900.print("AT+CNMI=2,2,0,0,0\r"); // Saca el contenido del SMS por el puerto serie del GPRS
delay(1000);
}
void identifica_llamada()
{
int finllamada = mensaje.indexOf("RING");
if (finllamada >= 0)
{
for ( int i = 0; i < numtotal; i++)
{
int pos = mensaje.indexOf(agenda[i]);
if (pos >= 0)
{
estado = ! estado ; // cambiamos el estado del LED
digitalWrite(LED, estado) ;
Serial.println("\nEl numero esta autorizado");
if (alarma){
sendSMS("601006044", "Alarma desactivada, bateria: " + String(v2));
alarma = false;
digitalWrite(LED, LOW);
}else{
sendSMS("601006044", "Alarma activada, bateria: " + String(v2));
alarma = true;
digitalWrite(LED, HIGH) ;
}
}
}
mensaje = "" ; //Bórralo para la próxima vez
}
}
void sendSMS(String number, String mess)
{
SIM900.print("AT+CMGF=1\r");
delay(100);
SIM900.println("AT+CMGS=\"" + number + "\"\r");
delay(100);
SIM900.println(mess);
delay(100);
SIM900.println((char)26);
delay(100);
SIM900.println();
delay(5000);
}
ไม่มีความคิดเห็น:
แสดงความคิดเห็น