miércoles, 24 de julio de 2013

Realizar llamada por medio de Arduino y Asterisk (Video)



Realizar llamada de acuerdo al cambio de luminosidad en el ambiente por medio de Arduino, es decir cuando el nivel de luz cambie Arduino le dara la orden a Asterisk para realizar una llamada anunciando un movimiento.

(Utilizamos Arduino UNO con Ethernet Shield)

El video ilustrativo de como funciona:


Creamos el archivo arduino.php en /var/lib/asterisk/agi-bin/ :

#!/usr/bin/php -q

<?php
require("phpagi.php");

$agi = new AGI();

        $agi->answer();
        $return = $agi->get_data('beep', 30000, 1);

        $agi->text2wav("Hubo movimiento en la habitacion ");
        $agi->hangup();

?>



En /var/www/html (la ruta que tienen configurado en el server web) creamos el archivo call_sense.php :


<?php


$luz = $_GET['luz'];

echo $luz;
$asterisk_outgoing = "/var/spool/asterisk/outgoing/";

$asterisk_tmp = "/tmp/";

$asterisk_cid = "Sensor de Luz<7307>"; // the from caller id you'd like to display.

                $arduinocallfile = "/$asterisk_tmp/arduino_call.txt";

                $arduinocall = fopen($arduinocallfile, 'w') or die("can't open file");


$arduinocall_data="Channel:SIP/7306\nApplication:AGI\nData:arduino.php\nCallerID:$asterisk$
                fwrite($arduinocall, $arduinocall_data);

                fclose($arduinocall);



                // chmod, chown and chgrp the file to asterisk:asterisk

                 chmod ("/$asterisk_tmp/arduino_call.txt", 0666);

                 chown ("/$asterisk_tmp/arduino_call.txt", "asterisk");

                 chgrp ("/$asterisk_tmp/arduino_call.txt", "asterisk");


                rename("/$asterisk_tmp/arduino_call.txt","/$asterisk_outgoing/arduino_call.call");
?>


Y ahora el código de nuesto Arduino UNO :

Antes el diagrama de conexión:


Código:

#include <SPI.h>

#include <Ethernet.h>


int lightPin = 0; 
int threshold = 640;  //este valor lo modificamos de acuerdo el nivel de sensibilidad que tiene nuestra fotoresistencia dada por la resistencia que esta entre A0 y GND.



byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte server[] = { xxx, xxx, xxx, x }; //IP del servidor web donde esta Asterisk y el archivo call_sense.php
int luz = 0;
EthernetClient client;

  
void setup()


{


  Ethernet.begin(mac);


  Serial.begin(9600);


}



void loop () {

  Serial.println(Ethernet.localIP());
senddata();
delay(500);


}


void senddata()
{


  Serial.println(analogRead(lightPin)); 

    if(analogRead(lightPin) > threshold ){    
      
        Serial.println("high"); 
    }else{
        
        Serial.println("low"); 
        
         luz = 1;
          Serial.println();
          Serial.println("Iniciando conexion!");
          Serial.println("Conectando!");
          delay(1000); //This one keeps it from hanging
          
          if (client.connect(server,80)) {
          Serial.println("Connected!");
          client.print("GET http://XXX.XXX.XXX.X/call_sense.php?luz=");
          client.print(luz);
          client.println(" HTTP/1.1");
          client.println("User-Agent: Arduino 1.0");
          client.println("Host: xxx.xxx.xxx.x");
          client.println();
                                      }
           
           else 
           {
           Serial.println("Connection failed");
           client.stop();
           }
                  
    }     
    


}




2 comentarios :

Unknown dijo...

no entendi algunos comandos, puedes hacer un video por favor explicando paso a paso.. por favor..

Unknown dijo...

Hola disculpa me puedes ayudar, no entiendo de donde sale el archivo arduino_call.txt , me puedes explicar q archivo es porfavor.. te agradezco mucho por la ayuda.

Publicar un comentario

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Best Web Host