Carro de vigilância controlado via DTMF

Coche de vigilancia controlado vía DTMF

Realicé este proyecto para construir un coche de vigilancia que se pueda controlar a través de Internet o cualquier red privada. Mi objetivo era crear algo fácil y económico que pudiera usarse con fines de seguridad.
Mi auto usa un módulo DTMF que recibe información del teléfono celular conectado al auto. Este celular no sólo se utiliza para generar tonos DTMF, sino también para vigilancia, brindando imágenes en vivo desde su cámara, a través de la red mediante AirDroid.
Convencionalmente, cualquier proyecto que use DTMF requiere llamar desde otro teléfono celular al adjunto al proyecto, lo cual no es rentable , pero en el caso de mi proyecto utilicé una aplicación de Android DTMF Tone Generator que genera tonos DTMF. Ahora, para que esto funcione, compartí la pantalla de mi teléfono a través de la red usando el servidor VNC, lo cual fue bastante rentable .
Para hacer esta idea más efectiva, monté el teléfono en un servomotor. Esto le dio a mi cámara cierto grado de libertad, lo que significa que podía moverla hacia la izquierda y hacia la derecha sin mover el robot.
Otro problema de seguridad relacionado con DTMF del que me ocupé fue que cualquiera pudiera controlar el bot llamando al teléfono celular conectado al bot. Una solución sencilla a este problema fue aplicar un PIN mediante tonos DTMF. Demostré este concepto en el video y a través del funcionamiento interno que puedes ver en el código fuente.

Beneficios:

1. Mucho más económico que los módulos Bluetooth y Wi-Fi, con un funcionamiento casi idéntico.
2. Se puede controlar a través de Internet mediante VPN.

Servicios de utilidad pública:

1. Puede realizar un seguimiento eficiente de las actividades en su hogar cuando no hay ocupantes.
2. Puede utilizarse con fines de vigilancia en zonas peligrosas donde exista cualquier tipo de amenaza a la vida humana.

Protótipo de robô Arduino controlado por DTMF

Figura 1: Prototipo de robot Arduino controlado por DTMF

Imagem mostrando o corpo mecânico do robô Arduino controlado por DTMF

Figura 2: Imagen que muestra el cuerpo mecánico del robot Arduino controlado por DTMF

Imagem mostrando o robô Arduino controlado por DTMF em ação

Figura 3: Imagen que muestra el robot Arduino controlado por DTMF en acción

Requisitos:

1. Módulo decodificador DTMF
2. Cable de audio de 3.5mm (para conectar el celular al módulo DTMF)
3.Arduino Uno
4. Tumbona
5. Servomotor (7 kg/cm)
6. Teléfono Android (en mi caso Galaxy Ace Duos)
7. Computadora portátil (puede ser de escritorio o cualquier dispositivo Android que admita ventanas múltiples)
8. Motores CC con engranajes de ruedas
9. Módulo controlador de motor L298

10. Aplicaciones AirDroid para Android, generador de tonos DTMF, servidor VNC

11. Aplicaciones en computadora portátil y navegador VNC Client

Una extensión de este proyecto.

Conecté el Wi-Fi al teléfono montado en el vehículo, creando así una red local. Ahora podía controlar mi vehículo sin necesidad de un enrutador externo o Internet. Aunque no pude ver la transmisión en vivo porque Airdroid necesita conexión a Internet para arrancar.

Descripción:

Explicación de los componentes del circuito y el hardware:

Utilicé el módulo decodificador DTMF con MT8870DE y lo conecté a Arduino como se muestra en el diagrama del circuito. Saqué el pin 13 de forma permanente para suministrar +5v al módulo. Como puede verse, D1-D4 están conectados al pin 12-pin9 respectivamente, aquí D1 representa el bit menos significativo y D4 representa el bit más significativo. El pin8 del Arduino está conectado al pin STD del módulo DTMF; se vuelve alto cada vez que se envía una nueva señal (tono válido) al módulo.
Los tonos se generaron a través de un teléfono celular y se alimentaron como entrada al módulo decodificador DTMF mediante un conector de audio de 3,5 mm.
Para el controlador del motor utilicé el módulo L298D. Aquí M11, M12 y M21, M22 son conexiones para el motor IZQUIERDO y DERECHO respectivamente. Cuando el automóvil se ve de atrás hacia adelante, M11=M21=ALTO y M12=M22=BAJO, el automóvil avanzará. Con esta información puedes usar fácilmente mi código fuente directamente cambiando tu conexión respectivamente.
PWM1 y PWM2 son los pines que se pueden usar para controlar la velocidad del motor izquierdo y derecho. Configuré ambos en ALTO para alcanzar la velocidad máxima. EN1 y EN2 habilitan el motor izquierdo y derecho cuando están en alto, así que los puse en cortocircuito a +5 V de alimentación del Arduino.
Vcc para motores de CC se conectó a una fuente de +12v.
El teléfono estaba montado sobre un servomotor. El pin de datos del servo estaba conectado al pin 5 y +5v se tomaron de la fuente de +5v y no del Arduino, ya que la corriente consumida por el servomotor que utilicé excedió la corriente máxima que podría haberse consumido del Arduino.

Explicación y funcionamiento de las aplicaciones periféricas utilizadas:

Primero conecté mi laptop y mi celular a la misma red.
Utilicé DTMF Tone Generator para generar tonos DTMF. Esta aplicación estaba ejecutándose en mi teléfono celular.
Ahora, para compartir la pantalla y controlar mi teléfono celular desde mi computadora portátil, creé un servidor VNC ejecutando la aplicación del servidor VNC en mi teléfono en segundo plano y usando el cliente VNC en mi computadora portátil. Ahora pude ver la pantalla de mi teléfono celular y simular toques en mi computadora portátil.
En este punto, pude generar tonos DTMF desde mi teléfono celular usando mi computadora portátil, por lo que pude controlar mi automóvil usando la computadora portátil.
Para obtener la transmisión en vivo desde la cámara de mi teléfono usé la aplicación AirDroid que se ejecutaba en segundo plano junto con el servidor VNC y usando un navegador (preferiblemente Chrome) en mi computadora portátil pude usar la cámara de mi teléfono.
El código fuente está bien documentado, por lo que todas las explicaciones necesarias se proporcionan en forma de comentarios.

Posibles modificaciones:

1. En lugar de estar en la misma red, puedes controlarla a través de Internet desde cualquier parte del mundo mediante VPN.
2. Puedes usar cualquier tableta o teléfono que admita múltiples ventanas en lugar de una computadora portátil, ya que las únicas aplicaciones necesarias en mi computadora portátil eran el cliente VNC y un navegador web. Ambos están disponibles para Android, iOS, Windows y Linux.
3. Puede controlar la velocidad del vehículo conectando PWM1 y PWM2 a los pines pwm de Arduino y realizando los cambios necesarios en el código fuente.
4. Si solo se requiere velocidad máxima, se puede usar L293D en lugar de L298, lo que a su vez puede ahorrar algo de dinero.

Código fuente del proyecto

 /*

 m11 y m12 son para el motor izquierdo y m21 y m22 son para el motor derecho cuando mira su automóvil desde atrás.

 Para tener movimiento hacia adelante, configure m11=m21=HIGH y m12=m22=LOW.


 a,s,d,f define cuatro dígitos del PIN de seguridad.

 Se puede cambiar cambiando sus valores en la sección "Bucle para PIN de seguridad".

 PIN predeterminado -> 1234

 */


 #incluir

 Servo myservo;

 int sirviente=5;

 ángulo int=180; // 180 es el ángulo inicial y el teléfono móvil debe colocarse con la cámara mirando hacia el frente

 intd1=12;
 
intd2=11;

 intd3=10;

 intd4=9;

 int st=8;

 intvccdtmf=13;

 int a=0,s=0,d=0,f=0,bandera=0;

 intm11=19;

 intm12=18;

 intm21=17;

 intm22=16;

 intp1=15;

 intp2=14;

 configuración vacía

 {

 myservo.attach(5); // Define el Pin 5 para Servo

 myservo.write(ángulo);

 pinMode(d1,ENTRADA);

 pinMode(d2,ENTRADA);

 modopin(d3,ENTRADA);

 pinMode(d4,ENTRADA);

 pinMode(st,ENTRADA);

 pinMode(vccdtmf,SALIDA);

 pinMode(m11,SALIDA);

 pinMode(m12,SALIDA);

 pinMode(m21,SALIDA);

 pinMode(m22,SALIDA);

 pinMode(p1,SALIDA);

 pinMode(p2,SALIDA);

 pinMode(servo,SALIDA);

 }

 bucle vacío

 {

 escritura digital (vccdtmf, ALTA); // +5V para módulo DTMF

 escritura digital (p1, ALTO); //Para velocidad máxima

 escritura digital (p2, ALTO); //Para velocidad máxima


 /////////////////////////////////////////////// Bucle para PIN de seguridad ///


 mientras(bandera==0)

 {

 if(a!=1 && lectura digital(d1)==1 && lectura digital(d2)==0 && lectura digital(d3)==0
 && lectura digital(d4)==0 && lectura digital(st)==1)

 {

 a=1;

 }
 
if(a==1 && s!=2 && digitalRead(d1)==0 && digitalRead(d2)==1 && digitalRead(d3)==0 &&
 lectura digital(d4)==0 && lectura digital(st)==1)

 {

 s=2;

 }

 if(s==2 && d!=3 && digitalRead(d1)==1 && digitalRead(d2)==1 && digitalRead(d3)==0 &&
 lectura digital(d4)==0 && lectura digital(st)==1)

 {

 d=3;

 }

 if(d==3 && f!=4 && digitalRead(d1)==0 && digitalRead(d2)==0 && digitalRead(d3)==1 &&
 lectura digital(d4)==0 && lectura digital(st)==1)

 {

 f=4;

 }

 si(a==1 && s==2 && d==3 && f==4)

 {

 bandera=1;

 }

 }


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


 ///////////////////////////////////////// Movimiento del coche ////// /////////


 while(digitalRead(st)==0) // RESTABLECE el valor cuando no se da ningún tono válido

 {

 escritura digital(m11,BAJO);

 escritura digital(m12,BAJO);

 escritura digital(m21,BAJO);

 escritura digital(m22,BAJO);

 }

 
while(digitalRead(d1)==0 && digitalRead(d2)==1 && digitalRead(d3)==0 && digitalRead(d4)==0
 && digitalRead(st)==1) // Presione 2 para la dirección de avance

 {

 escritura digital (m11, ALTO);

 escritura digital(m12,BAJO);

 escritura digital (m21, ALTO);

 escritura digital(m22,BAJO);

 }

 while(digitalRead(d1)==1 && digitalRead(d2)==0 && digitalRead(d3)==0 && digitalRead(d4)==0
 && digitalRead(st)==1) // Presione 1 para avanzar hacia la derecha

 {

 escritura digital (m11, ALTO);

 escritura digital(m12,BAJO);

 escritura digital(m21,BAJO);

 escritura digital(m22,BAJO);

 }


 while(digitalRead(d1)==1 && digitalRead(d2)==1 && digitalRead(d3)==0 && digitalRead(d4)==0
 && digitalRead(st)==1) // Presione 3 para ir hacia adelante hacia la izquierda

 {

 escritura digital(m11,BAJO);

 escritura digital(m12,BAJO);

 escritura digital (m21, ALTO);

 escritura digital(m22,BAJO);

 }


 while(digitalRead(d1)==1 && digitalRead(d2)==0 && digitalRead(d3)==1 && digitalRead(d4)==0  
&& digitalRead(st)==1) // Presione 5 para retroceder

 {

 escritura digital(m11,BAJO);

 escritura digital (m12, ALTO);

 escritura digital(m21,BAJO);

 escritura digital (m22, ALTO);

 }


 while(digitalRead(d1)==0 && digitalRead(d2)==0 && digitalRead(d3)==1 && digitalRead(d4)==0
 && digitalRead(st)==1) // Presione 4 para retroceder hacia la derecha

 {

 escritura digital(m11,BAJO);

 escritura digital (m12, ALTO);

 escritura digital(m21,BAJO);

 escritura digital(m22,BAJO);

 }


 mientras(digitalRead(d1)==0 && digitalRead(d2)==1 && digitalRead(d3)==1 &&
 digitalRead(d4)==0 && digitalRead(st)==1) // Presione 5 para ir hacia atrás hacia la izquierda

 {

 escritura digital(m11,BAJO);

 escritura digital(m12,BAJO);

 escritura digital(m21,BAJO);

 escritura digital (m22, ALTO);

 }


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

 ////////////////////////////////////// Movimiento del servo ///////// ///////

 
if(digitalRead(d1)==1 && digitalRead(d2)==1 && digitalRead(d3)==1 && digitalRead(d4)==0 &&
 digitalRead(st)==1) // Presione 7 para girar el servo en sentido antihorario

 {

 si(ángulo>0)

 {

 ángulo=ángulo-45;

 myservo.write(ángulo);

 retraso(500);

 }

 }


 if(digitalRead(d1)==0 && digitalRead(d2)==0 && digitalRead(d3)==0 && digitalRead(d4)==1 &&
 digitalRead(st)==1) // Presione 8 para girar el servo en el sentido de las agujas del reloj

 {

 si (ángulo <180)

 {

 ángulo=ángulo+45;

 myservo.write(ángulo);

 retraso(500);

 }

 }


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


 /////////////////////////////////// Debes ingresar la contraseña nuevamente ////



 while(digitalRead(d1)==1 && digitalRead(d2)==0 && digitalRead(d3)==1 && digitalRead(d4)==1 &&
 digitalRead(st)==1) //Presione A para restablecer el PIN

 {

 bandera=1;

 }

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

 }

 
/********************* FIN *********************/

Diagramas de circuito

Imagen que muestra la acción del robot Arduino controlado por DTMF

Vídeo del proyecto

Una extensión de este proyecto.

Conecté el wifi del teléfono montado en el vehículo, creando así una red local. Ahora podía controlar mi vehículo sin necesidad de un enrutador externo o Internet. Aunque no pude ver la transmisión en vivo porque Airdroid necesita conexión a Internet para arrancar.

Volver al blog

Deja un comentario

Los comentarios deben ser aprobados antes de publicarse.