lunes, 21 de noviembre de 2016

Cuida tu casa. Detecta presencia y llama por telefono

Este proceso, si detecta presencia con sensor pir en digital 12, enciende led en pin 13 y hacew una llamada al móvil que queramos poner en el programa. Probado y funcionando.No necesita sobrealimentación el escudo sim900. OK

#include <SoftwareSerial.h>
SoftwareSerial SIM900(7, 8); 
int pinSensor = 12;
int pinLed    = 13;

void setup()
   {
      //digitalWrite(9, HIGH); // Descomentar para activar la alimentación de la tarjeta por Software
      //delay(1000); 
      //digitalWrite(9, LOW);
      pinMode(pinSensor,INPUT);
      pinMode(pinLed,OUTPUT);
      delay (5000);  //Nos damos un tiempo para encender el GPRS y la alimentación de la tarjeta
      SIM900.begin(19200);  //Configura velocidad del puerto serie para el SIM900
      Serial.begin(19200);  //Configura velocidad del puerto serie del Arduino
      Serial.println("OK");
      delay (1000);
      SIM900.println("AT + CPIN = \"1472\"");  //Comando AT para introducir el PIN de la tarjeta
      delay(25000);  //Tiempo para que encuentre una RED
   }

void llamar()
   {
      Serial.println("Realizando llamada...");
      SIM900.println("ATD676677815;");  //Comando AT para realizar una llamada
      delay(30000);  // Espera 30 segundos mientras realiza la llamada
      SIM900.println("ATH");  // Cuelga la llamada
      delay(1000);
      Serial.println("Llamada finalizada");
   }
void loop()
   {
     int lectura = digitalRead(pinSensor);
     if(lectura==HIGH)
     {
       digitalWrite(pinLed,HIGH);
       Serial.println("INTRUSO");
       llamar();  //Realiza la llamada
       // while (1); para que se quede en bucle y no haga mas llamada
    }
    if(lectura==LOW);
    {
      digitalWrite(pinLed,LOW);
      Serial.println("DESPEJADO");
     }
              
   }
 

lunes, 30 de noviembre de 2015

Encendiendo led con mensajes sms



link: https://www.youtube.com/watch?v=6aNeHNQFCi0 

Hoy traigo a ustedes un proyecto donde encenderé 9 led mediante mensajes de texto. 
Para ello voy a utilizar un arduino uno y un escudo gsm el mismo utiliza un chip sim900 muy utilizado en proyectos m2m. 
Se puede aplicar en proyectos de domótica, control industrial, seguridad y por supuesto hobby. 

Hay que tener en cuenta que algunos pines no los vamos a poder utilizar para los led, ya que cumplen ciertas funciones esenciales, como por ejemplo los pines 0 y 1 que son usados para el puerto serie por hardware y los pines 2 y 3 como puerto serie por software. El pin número en este módulo se lo utiliza para encender o apagar el módulo gsm, por lo cual en este proyecto no lo vamos a usar porque no hay necesidad de apagar o encender el módulo. 

Lo pines usados para los led son el numero 4 5 6 8 9 10 11 12 y 13, también se pueden usar los pines A0 al A5 (pines analógicos) y en total podríamos controlar hasta 15 dispositivos a las vez. 

El módulo según el fabricante necesita una fuente que pueda entregar hasta dos amperes de corriente, para poder funcionar sin inconvenientes. El módulo es totalmente compatible con arduino uno y simplemente conectandolo encima del mismo funcionará sin dar ningún problema. 

En cuanto al sketch de arduino, los comandos de texto que podemos enviar son On4 enciende el led conectado al pin 4 si queremos apargarlo enviamos Off5, hay que tener en cuenta que es case sensitive, por lo cual va a distinguir entre mayúsculas y minúsculas, si se envía un carácter en forma incorrecta no funcionará el comando. 

Link del proyecto http://rogerbit.com/wprb/?p=616 (código fuente y más) 
Apoya mi canal suscribiendote en https://www.youtube.com/user/carlosvolt?feature=iv&src_vid=6aNeHNQFCi0&annotation_id=annotation_2136818013 
Mi grupo en facebook es https://www.facebook.com/groups/RogerBit 



Lista de comandos que se pueden usar, ustedes pueden modificarlos a su gusto y agregar otras funciones 

On4—–>Enciende led 4 Off4—–>Apaga el led 4 

On5—–>Enciende led 5 Off5—–>Apaga el led 5 

On6—–>Enciende led 6 Off6—–>Apaga el led 6 

On8—–>Enciende led 8 Off8—–>Apaga el led 8 

On9—–>Enciende led 9 Off9—–>Apaga el led 9 

On10—–>Enciende led 10 Off10—–>Apaga el led 10 

On11—–>Enciende led 11 Off11—–>Apaga el led 12 

On12—–>Enciende led 12 Off12—–>Apaga el led 12 

On13—–>Enciende led 13 Off13—–>Apaga el led 13 

Allon—–>Enciende todos los led 

Alloff—–>Apaga todos los led 

Partes del módulo gsm 

Controlá tu casa con mensajes de texto(código fuente inclu.) 

rogerbit 

Foto del módulo con los led conectados en el protoboad la conexión es muy simple, sólo hay colocarles un resistor de 1k. 

gsm

Código Fuente 

Descargar http://rogerbit.com/wprb/wp-content/uploads/2015/11/smsLed9.rar 

---------------------------------------------------------------------------- 
#include <SoftwareSerial.h> 
#include <string.h> 
SoftwareSerial Sim900Serial(2, 3); 
byte buffer[64]; //Buffer para recivir datos del puerto serie 
int count=0; 
int led13 = 13; 
int led12 = 12; 
int led11 = 11; 
int led10 = 10; 
int led9 = 9; 
int led8 = 8; 
int led7 = 7; 
int led6 = 6; 
int led5 = 5; 
int led4 = 4; 
#define phonenumber “1234567890” //Cambiar por su número de teléfono, el número de teléfono debe ser el mismo que el formato que recibe el SMS, 
//Quizá debe incluir el código de país. 
void setup() 

//Del pin 4 al 13 serán salidas donde se conectaran los led 
pinMode(led13, OUTPUT); 
pinMode(led12, OUTPUT); 
pinMode(led11, OUTPUT); 
pinMode(led10, OUTPUT); 
pinMode(led9, OUTPUT); 
pinMode(led8, OUTPUT); 
pinMode(led7, OUTPUT); 
pinMode(led6, OUTPUT); 
pinMode(led5, OUTPUT); 
pinMode(led4, OUTPUT); 

Sim900Serial.begin(19200);//Velocidad del puerto serie por Software pines 2 y 3 
Serial.begin(19200); //Velocidad del puerto serie por Hardware pines 0 y 1 
delay(500); 
Sim900_Inti(); 


void loop() 

if (Sim900Serial.available()) 

while(Sim900Serial.available()) //Leyendo datos del arreglo de caracteres 

buffer[count++]=Sim900Serial.read(); //Almacenando los datos del arreglo en un buffer 
if(count == 64)break; 

Serial.write(buffer,count); 
Cmd_Read_Act(); 
clearBufferArray(); 
count = 0; 


if (Serial.available()) // Verifica si se dispone de datos en el puerto serie por hardware 
Sim900Serial.write(Serial.read()); // y los escribe en el escudo SIM900 

// Limpia el buffer 
void clearBufferArray() 

for (int i=0; i<count;i++) 
{ buffer=NULL;} // borrar todos los índices del arreglo 

void Sim900_Inti(void) 

Sim900Serial.println(“AT+CMGF=1”); 
delay(500); 
Sim900Serial.println(“AT+CNMI=2,2″); 
delay(500); 

//////Esta función lee los SMS enviados al escudo SIM900 y actua en base a esa orden. 
void Cmd_Read_Act(void) 

char buffer2[64]; 
char comparetext[25]; 
for (int i=0; i<count;i++) 
{ buffer2=char(buffer);} 
memcpy(comparetext,buffer2,25); 
if (strstr(comparetext,phonenumber)) 

///////////LED13/////////////////////////////////////// 
if (strstr(buffer2,”On13″)) 

digitalWrite(led13, HIGH); 


if (strstr(buffer2,”Off13″)) 

digitalWrite(led13, LOW); 


///////////LED12/////////////////////////////////////// 
if (strstr(buffer2,”On12″)) 

digitalWrite(led12, HIGH); 


if (strstr(buffer2,”Off12″)) 

digitalWrite(led12, LOW); 


///////////LED11/////////////////////////////////////// 
if (strstr(buffer2,”On11″)) 

digitalWrite(led11, HIGH); 


if (strstr(buffer2,”Off11″)) 

digitalWrite(led11, LOW); 


///////////LED10/////////////////////////////////////// 
if (strstr(buffer2,”On10″)) 

digitalWrite(led10, HIGH); 

if (strstr(buffer2,”Off10″)) 

digitalWrite(led10, LOW); 

///////////LED9/////////////////////////////////////// 
if (strstr(buffer2,”On9″)) 

digitalWrite(led9, HIGH); 

if (strstr(buffer2,”Off9″)) 

digitalWrite(led9, LOW); 

///////////LED8/////////////////////////////////////// 
if (strstr(buffer2,”On8″)) 

digitalWrite(led8, HIGH); 

if (strstr(buffer2,”Off8″)) 

digitalWrite(led8, LOW); 

///////////LED7/////////////////////////////////////// 
if (strstr(buffer2,”On7″)) 

digitalWrite(led7, HIGH); 

if (strstr(buffer2,”Off7″)) 

digitalWrite(led7, LOW); 

///////////LED6/////////////////////////////////////// 
if (strstr(buffer2,”On6″)) 

digitalWrite(led6, HIGH); 

if (strstr(buffer2,”Off6″)) 

digitalWrite(led6, LOW); 

///////////LED5/////////////////////////////////////// 
if (strstr(buffer2,”On5″)) 

digitalWrite(led5, HIGH); 

if (strstr(buffer2,”Off5″)) 

digitalWrite(led5, LOW); 

///////////LED4/////////////////////////////////////// 
if (strstr(buffer2,”On4″)) 

digitalWrite(led4, HIGH); 

if (strstr(buffer2,”Off4″)) 

digitalWrite(led4, LOW); 


if (strstr(buffer2,”Allon”)) 

digitalWrite(led4, HIGH); 
digitalWrite(led5, HIGH); 
digitalWrite(led6, HIGH); 
digitalWrite(led7, HIGH); 
digitalWrite(led8, HIGH); 
digitalWrite(led9, HIGH); 
digitalWrite(led10, HIGH); 
digitalWrite(led11, HIGH); 
digitalWrite(led12, HIGH); 
digitalWrite(led13, HIGH); 

if (strstr(buffer2,”Alloff”)) 

digitalWrite(led4, LOW); 
digitalWrite(led4, LOW); 
digitalWrite(led4, LOW); 
digitalWrite(led4, LOW); 
digitalWrite(led4, LOW); 
digitalWrite(led4, LOW); 
digitalWrite(led4, LOW); 
digitalWrite(led4, LOW); 
digitalWrite(led4, LOW); 
digitalWrite(led4, LOW); 


}

miércoles, 10 de junio de 2015

Arduino Puerto serial

//Controlamos el pin 13 por el puerto serial

const int ledPin = 13; // the pin that the LED is attached to
int incomingByte;      // a variable to read incoming serial data into
int estado;

void setup() {
 // initialize serial communication:
 Serial.begin(9600);
 Serial.println("LED_ON_OFF");
 Serial.println("0 - APAGAR");
 Serial.println("1 - ENCENDER");  
 Serial.println("9 - ESTADO");    
 Serial.println();
 // initialize the LED pin as an output:
 pinMode(ledPin, OUTPUT);
}

void loop() {
 // see if there's incoming serial data:
 if (Serial.available() > 0) {
   // read the oldest byte in the serial buffer:
   incomingByte = Serial.read();
   switch (incomingByte){
     case '0':
       digitalWrite(ledPin, LOW);
       estado=0;
       break;
     case '1':
       digitalWrite(ledPin, HIGH);
       estado=1;
       break;
     case '9':
         if(estado==1){
            Serial.println("ENCENDIDO");
         } else {
           Serial.println("APAGADO");
         }//if estado
       break;      
   }//switch
 } else {
   delay(100);
 }//IF Serial
} //loop

Arduino UNo + Shield Ethernet completo

Página web Información: http://diymakers.es/crear-servidor-web-con-arduino/

/*
  www.diymakers.es
  by A.García & M.García
  Crear servidor Web con Arduino
*/
 
#include <SPI.h>  //Importamos librería comunicación SPI
#include <Ethernet.h>  //Importamos librería Ethernet
 
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };//Ponemos la dirección MAC de la Ethernet Shield que está con una etiqueta debajo la placa
IPAddress ip(192,168,1,100); //Asingamos la IP al Arduino
EthernetServer server(80); //Creamos un servidor Web con el puerto 80 que es el puerto HTTP por defecto
 
int led=6; //Pin del led
String estado="OFF"//Estado del Led inicialmente "OFF"
 
void setup()
{
  Serial.begin(9600);
 
  // Inicializamos la comunicación Ethernet y el servidor
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
 
  pinMode(led,OUTPUT);
}
 
void loop()
{
  EthernetClient client = server.available(); //Creamos un cliente Web
  //Cuando detecte un cliente a través de una petición HTTP
  if (client) {
    Serial.println("new client");
    boolean currentLineIsBlank = true//Una petición HTTP acaba con una línea en blanco
    String cadena=""//Creamos una cadena de caracteres vacía
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();//Leemos la petición HTTP carácter por carácter
        Serial.write(c);//Visualizamos la petición HTTP por el Monitor Serial
        cadena.concat(c);//Unimos el String 'cadena' con la petición HTTP (c). De esta manera convertimos la petición HTTP a un String
 
         //Ya que hemos convertido la petición HTTP a una cadena de caracteres, ahora podremos buscar partes del texto.
         int posicion=cadena.indexOf("LED="); //Guardamos la posición de la instancia "LED=" a la variable 'posicion'
 
          if(cadena.substring(posicion)=="LED=ON")//Si a la posición 'posicion' hay "LED=ON"
          {
            digitalWrite(led,HIGH);
            estado="ON";
          }
          if(cadena.substring(posicion)=="LED=OFF")//Si a la posición 'posicion' hay "LED=OFF"
          {
            digitalWrite(led,LOW);
            estado="OFF";
          }
 
        //Cuando reciba una línea en blanco, quiere decir que la petición HTTP ha acabado y el servidor Web está listo para enviar una respuesta
        if (c == '\n' && currentLineIsBlank) {
 
            // Enviamos al cliente una respuesta HTTP
            client.println("HTTP/1.1 200 OK");
            client.println("Content-Type: text/html");
            client.println();
 
            //Página web en formato HTML
            client.println("<html>");
            client.println("<head>");
            client.println("</head>");
            client.println("<body>");
            client.println("<h1 align='center'>DIYMakers</h1><h3 align='center'>LED controlado por Servidor Web con Arduino</h3>");
            //Creamos los botones. Para enviar parametres a través de HTML se utiliza el metodo URL encode. Los parámetros se envian a través del símbolo '?'
            client.println("<div style='text-align:center;'>");
            client.println("<button onClick=location.href='./?LED=ON\' style='margin:auto;background-color: #84B1FF;color: snow;padding: 10px;border: 1px solid #3F7CFF;width:65px;'>");
            client.println("ON");
            client.println("</button>");
            client.println("<button onClick=location.href='./?LED=OFF\' style='margin:auto;background-color: #84B1FF;color: snow;padding: 10px;border: 1px solid #3F7CFF;width:65px;'>");
            client.println("OFF");
            client.println("</button>");
            client.println("<br /><br />");
            client.println("<b>LED = ");
            client.print(estado);
            client.println("</b><br />");
            client.println("</b></body>");
            client.println("</html>");
            break;
        }
        if (c == '\n') {
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          currentLineIsBlank = false;
        }
      }
    }
    //Dar tiempo al navegador para recibir los datos
    delay(1);
    client.stop();// Cierra la conexión
  }
}