Carro de vigilância controlado via DTMF

Fiz este projeto para construir um carro de vigilância que possa ser controlado pela Internet ou por qualquer rede privada. Meu objetivo era fazer algo de forma fácil e econômica que poderiam ser usados ​​para fins de segurança.
Meu carro usa módulo DTMF que recebe a entrada do telefone celular conectado ao carro. Esse celular não é usado apenas para gerar tons DTMF, mas também para vigilância, fornecendo imagens ao vivo de seus câmera, pela rede usando AirDroid.
Convencionalmente, qualquer projeto que utilize DTMF requer chamada de outro celular para aquele anexado ao projeto, que não é rentável, mas no caso do meu projeto usei um aplicativo android DTMF Tone Generator que gera tom DTMF. Agora, para que isso funcione, compartilhei a tela do meu telefone pela rede usando o servidor VNC, que foi bastante rentável.
Para tornar essa ideia mais eficaz, montei o telefone em um servo motor. Isso deu à minha câmera um grau de liberdade, ou seja, eu poderia movê-la para a esquerda e para a direita sem mover o bot.
Mais um problema de segurança envolvido com DTMF O que eu cuidei foi que qualquer um pudesse controlar o bot ligando para o celular conectado ao bot. Uma solução simples para este problema foi aplicar um PIN usando tons DTMF. Demonstrei esse conceito no vídeo e pelo funcionamento interno que você pode conferir no código fonte.

Vantagens:

1. Muito mais barato que o Bluetooth e Wi-Fi, módulos, com funcionamento quase idêntico.
2. Pode ser controlado via Internet usando VPN.

Serviços de utilidade pública:

1. É possível acompanhar com eficiência as atividades em sua casa quando não há ocupantes.
2. Pode ser utilizado para fins de vigilância em áreas perigosas onde haja qualquer tipo de ameaça à vida humana.

Protótipo de robô Arduino controlado por DTMF

Figura 1: Protótipo de robô Arduino controlado por DTMF

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

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

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

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

Requisitos:

1. Módulo decodificador DTMF
2. Cabo de áudio de 3,5 mm (para conectar o celular ao módulo DTMF)
3. Arduino Uno
4. Espreguiçadeira
5. Servo motor (7 kg/cm)
6. Telefone Android (no meu caso Galaxy Ace Duos)
7. Laptop (pode ser desktop ou qualquer dispositivo Android compatível com várias janelas)
8. Motores DC engrenados com rodas
9. Módulo driver do motor L298

10. Aplicativos Android AirDroid, gerador de tons DTMF, servidor VNC

11. Aplicativos em cliente VNC de laptop e navegador

Uma extensão deste projeto

Conectei o wi-fi ao telefone montado no veículo, criando assim uma rede local. Agora consegui controlar meu veículo sem a necessidade de roteador externo ou internet. Embora eu não tenha conseguido obter a transmissão ao vivo, pois o Airdroid precisa de conexão com a Internet para inicializar.

Descrição:

Explicação dos componentes do circuito e hardware:

Usei o módulo decodificador DTMF usando MT8870DE e conectei-o ao Arduino conforme mostrado no diagrama de circuito. Puxei o pino 13 permanentemente para fornecer + 5v ao módulo. Como pode ser visto, D1-D4 estão conectados ao pino 12-pin9 respectivamente, aqui D1 representa o bit menos significativo e D4 representa o bit mais significativo. O Pin8 do Arduino está conectado ao pino STD do módulo DTMF; torna-se alto sempre que um novo sinal (tom válido) é dado ao módulo.
Os tons foram gerados via telefone celular e alimentados como entrada para o módulo decodificador DTMF usando um conector de áudio de 3,5 mm.
Para driver de motor usei módulo L298D. Aqui M11, M12 e M21, M22 são conexões para o motor ESQUERDO e DIREITO respectivamente. Quando o carro é visto de trás para frente, M11=M21=HIGH e M12=M22=LOW o carro avançará. Com essas informações você pode facilmente usar meu código-fonte diretamente, alterando sua conexão, respectivamente.
PWM1 e PWM2 são os pinos que podem ser usados ​​para controlar a velocidade do motor esquerdo e direito. Eu configurei ambos para ALTO para atingir a velocidade máxima. EN1 e EN2 habilitam o motor esquerdo e direito quando ajustados para alto, então coloquei-os em curto com alimentação de + 5 V do Arduino.
Vcc para motores DC foi conectado a uma fonte de +12v.
O telefone foi montado em servo motor. O pino de dados do servo foi conectado ao pino 5 e +5v foi retirado da fonte de +5v e não do Arduino, pois a corrente consumida pelo servo motor que usei excedeu a corrente máxima que poderia ter sido extraída do Arduino.

Explicação e funcionamento dos aplicativos periféricos utilizados:

Em primeiro lugar liguei o meu portátil e o meu telemóvel à mesma rede.
Usei o DTMF Tone Generator para gerar tons DTMF. Este aplicativo estava rodando no meu celular.
Agora, para compartilhar a tela e obter controle do meu telefone celular a partir do meu laptop, criei um servidor VNC executando o aplicativo do servidor VNC no meu telefone em segundo plano e usando o cliente VNC no meu laptop. Agora consegui visualizar a tela do meu celular e simular toques no meu laptop.
Neste ponto, consegui gerar tons DTMF a partir do meu celular usando meu laptop, portanto consegui controlar meu carro usando o laptop.
Para obter a transmissão ao vivo da câmera do meu telefone, usei o aplicativo AirDroid, que estava rodando em segundo plano junto com o servidor VNC e usando um navegador (de preferência Chrome) no meu laptop, consegui usar a câmera do meu telefone.
O código-fonte está bem documentado, portanto, todas as explicações necessárias são fornecidas como comentários.

Possíveis modificações:

1. Em vez de estar na mesma rede pode-se controlá-la via internet de qualquer parte do mundo usando VPN.
2. Pode-se usar qualquer tablet ou telefone que suporte múltiplas janelas em vez de laptop, já que os únicos aplicativos necessários em meu laptop eram o cliente VNC e um navegador da web. Ambos estão disponíveis para Android, iOS, Windows e Linux.
3. Pode-se controlar a velocidade do veículo conectando PWM1 e PWM2 aos pinos pwm do Arduino e fazendo as alterações necessárias no código-fonte.
4. Se apenas a velocidade máxima for necessária, o L293D pode ser usado em vez do L298, o que pode, por sua vez, economizar algum dinheiro.

Código-fonte do projeto

/*

m11 and m12 are for Left Motor and m21 and m22 are for Right Motor when viewing your car from the back.

To have forward motion set m11=m21=HIGH and m12=m22=LOW.

 
a,s,d,f defines four digits of Security PIN.

One can change it by changing their values in "Loop for Security PIN" section

Default PIN -> 1234

*/


#include 

Servo myservo;

int servo=5;

int angle=180; // 180 is the initial angle and mobile phone should be placed with camera facing front

int d1=12;

int d2=11;

int d3=10;

int d4=9;

int st=8;

int vccdtmf=13;

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

int m11=19;

int m12=18;

int m21=17;

int m22=16;

int p1=15;

int p2=14;

void setup 

{

  myservo.attach(5);     // Defines Pin 5 for Servo

  myservo.write(angle);

  pinMode(d1,INPUT);

  pinMode(d2,INPUT);

  pinMode(d3,INPUT);

  pinMode(d4,INPUT);

  pinMode(st,INPUT);

  pinMode(vccdtmf,OUTPUT);

  pinMode(m11,OUTPUT);

  pinMode(m12,OUTPUT);

  pinMode(m21,OUTPUT);

  pinMode(m22,OUTPUT);

  pinMode(p1,OUTPUT);

  pinMode(p2,OUTPUT);

  pinMode(servo,OUTPUT);

} 

void loop 

{

  digitalWrite(vccdtmf,HIGH); // +5V for DTMF Module

  digitalWrite(p1,HIGH);      // For Max. speed

  digitalWrite(p2,HIGH);      // For Max. speed


/////////////////////////////////////////////// Loop for Security PIN ///


  while(flag==0)

  {

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

    {

      a=1;

    }

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

    {

      s=2;

    }

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

    {

      d=3;

    }

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

    {

      f=4;

    }

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

    {

      flag=1;

    }

  }


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


///////////////////////////////////////// Movement of Car ///////////////


  while(digitalRead(st)==0)  // RESET the value when no valid tone is given

  {

    digitalWrite(m11,LOW);

    digitalWrite(m12,LOW);

    digitalWrite(m21,LOW);

    digitalWrite(m22,LOW);   

  }


  while(digitalRead(d1)==0 && digitalRead(d2)==1 && digitalRead(d3)==0 && digitalRead(d4)==0 
&& digitalRead(st)==1) // Press 2 for Forward Direction

  {

    digitalWrite(m11,HIGH);

    digitalWrite(m12,LOW);

    digitalWrite(m21,HIGH);

    digitalWrite(m22,LOW);

  }

  while(digitalRead(d1)==1 && digitalRead(d2)==0 && digitalRead(d3)==0 && digitalRead(d4)==0 
 && digitalRead(st)==1) // Press 1 for Right Forward Direction

  {

    digitalWrite(m11,HIGH);

    digitalWrite(m12,LOW);

    digitalWrite(m21,LOW);

    digitalWrite(m22,LOW);

  }


  while(digitalRead(d1)==1 && digitalRead(d2)==1 && digitalRead(d3)==0 && digitalRead(d4)==0 
 && digitalRead(st)==1) // Press 3 for Left Forward Direction

  {

    digitalWrite(m11,LOW);

    digitalWrite(m12,LOW);

    digitalWrite(m21,HIGH);

    digitalWrite(m22,LOW);

  }


  while(digitalRead(d1)==1 && digitalRead(d2)==0 && digitalRead(d3)==1 && digitalRead(d4)==0 
 && digitalRead(st)==1) // Press 5 for Backward Direction

  {

    digitalWrite(m11,LOW);

    digitalWrite(m12,HIGH);

    digitalWrite(m21,LOW);

    digitalWrite(m22,HIGH);

  }


  while(digitalRead(d1)==0 && digitalRead(d2)==0 && digitalRead(d3)==1 && digitalRead(d4)==0
  && digitalRead(st)==1) // Press 4 for Right Backward Direction

  {

    digitalWrite(m11,LOW);

    digitalWrite(m12,HIGH);

    digitalWrite(m21,LOW);

    digitalWrite(m22,LOW);

  }


  while(digitalRead(d1)==0 && digitalRead(d2)==1 && digitalRead(d3)==1 &&   
digitalRead(d4)==0 && digitalRead(st)==1) // Press 5 for Left Backward Direction

  {

    digitalWrite(m11,LOW);

    digitalWrite(m12,LOW);

    digitalWrite(m21,LOW);

    digitalWrite(m22,HIGH);

  }


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

////////////////////////////////////// Movement of Servo ////////////////

     
  if(digitalRead(d1)==1 && digitalRead(d2)==1 && digitalRead(d3)==1 && digitalRead(d4)==0 && 
 digitalRead(st)==1) // Press 7 to turn servo in anti-clockwise direction

  {

    if(angle>0)

    {

      angle=angle-45;

      myservo.write(angle);

      delay(500);

    }

  }


  if(digitalRead(d1)==0 && digitalRead(d2)==0 && digitalRead(d3)==0 && digitalRead(d4)==1 && 
digitalRead(st)==1) // Press 8 to turn servo in clockwise direction

  {

    if(angle<180)

    {

      angle=angle+45;

      myservo.write(angle);

      delay(500);

    }

  }


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


/////////////////////////////////// You Have to Enter Password again ////

 

  while(digitalRead(d1)==1 && digitalRead(d2)==0 && digitalRead(d3)==1 && digitalRead(d4)==1 && 
 digitalRead(st)==1) //Press A to reset the PIN

  {

    flag=1;

  }

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

}


/*********************  END *********************/

Diagramas de circuito

Imagem-Mostrando-DTMF-Controlada-Arduino-Robot-Action

Vídeo do projeto

Uma extensão deste projeto

Conectei o wifi do telefone montado no veículo, criando assim uma rede local. Agora consegui controlar meu veículo sem a necessidade de um roteador externo ou internet. Embora eu não tenha conseguido obter a transmissão ao vivo, pois o Airdroid precisa de conexão com a Internet para inicializar.

Conteúdo Relacionado

Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.