Carro robô controlado por telefone celular usando módulo DTMF

Experimente Nosso Instrumento Para Eliminar Problemas





Neste projeto iremos controlar um robô manual através do nosso celular usando o módulo DTMF e o Arduino.

Por: Ankit Negi, Kanishk Godiyal e Navneet Singh sajwan



Carro robô controlado por telefone celular usando módulo DTMF

INTRODUÇÃO

Neste projeto são utilizados dois telefones celulares, um para ligar e outro para receber a ligação. O telefone que recebe a chamada é conectado ao robô por meio de uma tomada de áudio.

A pessoa que está ligando pode controlar o robô apenas pressionando as teclas do teclado de discagem. (ou seja, o robô pode ser operado de qualquer canto do mundo).



COMPONENTES NECESSÁRIOS

1 - Arduino UNO

2 - Robô manual

3 - 4 motores (aqui usamos 300 rpm cada)

4 - Módulo DTMF

5 - Motorista

6 - bateria de 12 volts

7 - Switch

8 - Entrada para fone de ouvido

9 - Dois telefones celulares

10 - Fios de conexão

SOBRE O ROBÔ MANUAL

Um robô manual consiste em um chassi (corpo) no qual três ou quatro motores (que são aparafusados ​​com pneus) podem ser acoplados dependendo da necessidade.

Os motores a serem usados ​​dependem de nossos requisitos, ou seja, eles podem fornecer alta velocidade ou alto torque ou uma boa combinação de ambos. Aplicações como o helicóptero quádruplo requerem motores de alta velocidade para levantar contra a gravidade, enquanto aplicações como mover um braço mecânico ou escalar um declive íngreme requerem motores de alto torque.

Ambos os motores do lado esquerdo e direito do robô são conectados em paralelo separadamente. Normalmente eles são conectados a uma bateria de 12 volts por meio de interruptores DPDT (double pin double throw).

Mas neste projeto usaremos telefone celular em vez de DPDTs para controlar o bot.

SOBRE O MOTOR DRIVER

O Arduino fornece corrente máxima de 40mA usando pinos GPIO (saída de entrada de uso geral), enquanto fornece 200mA usando Vcc e terra.

Os motores requerem grande corrente para operar. Não podemos usar o Arduino diretamente para alimentar nossos motores, então usamos um driver de motor.

O driver do motor contém H Bridge (que é uma combinação de transistores). O IC (L298) do driver do motor é acionado por 5v que é fornecido pelo Arduino.

Para alimentar os motores, é necessária uma entrada de 12v do Arduino, que é fornecida por uma bateria de 12V. Assim, o arduino apenas tira energia da bateria e dá para o driver do motor.

Ele nos permite controlar a velocidade e a direção dos motores, fornecendo corrente máxima de 2 amperes.

INTRODUÇÃO AO MÓDULO DTMF

DTMF significa multifrequência de tom duplo. Nosso teclado de discagem é uma frequência múltipla de dois toners, ou seja, um botão fornece uma mistura de dois tons com frequência diferente.

Um tom é gerado a partir de um grupo de tons de alta frequência e outro de um grupo de baixa frequência. Isso é feito para que qualquer tipo de voz não possa imitar os tons.

Portanto, ele simplesmente decodifica a entrada do teclado do telefone em um código binário de quatro bits. As frequências dos números do teclado que usamos em nosso projeto são mostradas na tabela abaixo

DigitLow frequência (hertz) Alta frequência (hertz) 2697133647701209677014778852133609411336

A sequência decodificada binária dos dígitos do teclado numérico é mostrada na tabela abaixo.

dígito D3 D2 D1 D0 1 0 0 0 1 dois 0 0 1 0 3 0 0 1 1 4 0 1 0 0 5 0 1 0 1 6 0 1 1 0 7 0 1 1 1 8 1 0 0 0 9 1 0 0 1 0 1 0 1 0 * 1 0 1 1 # 1 1 0 0

DIAGRAMA DE CIRCUITO

CONEXÕES

Motorista -

  • Os pinos 'A' e 'B' controlam o motor do lado esquerdo, enquanto os pinos 'C' e 'D' controlam o lado direito do motor. Esses quatro pinos são conectados aos quatro motores.
  • O pino 'E' é para alimentar o IC (L298) que é retirado do Arduino (5v).
  • pino 'F' é aterrado.
  • O pino ‘G’ obtém energia de 12 volts da bateria por meio do pino Vin do Arduino.
  • Os pinos ‘H’, ‘I’, ‘J’ e ‘K’ recebem lógica do Arduino.

DTMF -

  • o pino 'a' é conectado a 3,5 volts de arduino para alimentar o IC (SC9270D).
  • O pino 'b' é conectado ao aterramento.
  • A entrada de DTMF é obtida do telefone via jack.
  • A saída na forma de dados binários por meio dos pinos (D0 - D3) vai para o Arduino.

ARDUINO -

  • a saída do DTMF dos pinos (D0 - D3) chega aos pinos digitais do Arduino. Podemos conectar esta saída a qualquer um dos quatro pinos digitais variando de (2 - 13) no Arduino. Aqui usamos os pinos 8, 9, 10 e 11.
  • Os pinos digitais 2 e 3 do Arduino são conectados ao pino número 'H' e 'I' do driver do motor, enquanto os pinos 12 e 13 do Arduino são conectados a 'J' e 'K'.
  • O arduino está conectado a uma bateria de 12 volts.

CODE-

int x // initialising variables
int y
int z
int w
int a=20
void setup()
{
pinMode(2,OUTPUT) //left motor
pinMode(3,OUTPUT) //left
pinMode(8,INPUT) // output from DO pin of DTMF
pinMode(9,INPUT) //output from D1 pin of DTMF
pinMode(10,INPUT) //output from D2 pin of DTMF
pinMode(11,INPUT) // output from D3 pin of DTMF
pinMode(12,OUTPUT) //right motor
pinMode(13,OUTPUT) //right
Serial.begin(9600)// begin serial communication between arduino and laptop
}
void decoding()// decodes the 4 bit binary number into decimal number
{
if((x==0)&&(y==0)&&(z==0)&&(w==0))
{
a=0
}
if((x==0)&&(y==0)&&(z==1)&&(w==0))
{
a=2
}
if((x==0)&&(y==1)&&(z==0)&&(w==0))
{
a=4
}
if((x==0)&&(y==1)&&(z==1)&&(w==0))
{
a=6
}
if((x==1)&&(y==0)&&(z==0)&&(w==0))
{
a=8
}
}
void printing()// prints the value received from input pins 8,9,10 and 11 respectively
{
Serial.print(' x ')
Serial.print( x )
Serial.print(' y ')
Serial.print( y )
Serial.print(' z ')
Serial.print( z )
Serial.print(' w ')
Serial.print( w )
Serial.print(' a ')
Serial.print(a)
Serial.println()
}
void move_forward()// both side tyres of bot moves forward
{
digitalWrite(2,HIGH)
digitalWrite(3,LOW)
digitalWrite(12,HIGH)
digitalWrite(13,LOW)
}
void move_backward()//both side tyres of bot moves backward
{
digitalWrite(3,HIGH)
digitalWrite(2,LOW)
digitalWrite(13,HIGH)
digitalWrite(12,LOW)
}
void move_left()// only left side tyres move forward
{
digitalWrite(2,HIGH)
digitalWrite(3,LOW)
digitalWrite(12,LOW)
digitalWrite(13,HIGH)
}
void move_right()//only right side tyres move forward
{
digitalWrite(2,LOW)
digitalWrite(3,HIGH)
digitalWrite(12,HIGH)
digitalWrite(13,LOW)
}
void halt()// all motor stops
{
digitalWrite(2,LOW)
digitalWrite(3,LOW)
digitalWrite(12,LOW)
digitalWrite(13,LOW)
}
void reading()// take readings from input pins that are connected to DTMF D0, D1, D2 and D3 PINS.
{
x=digitalRead(8)
y=digitalRead(9)
z=digitalRead(10)
w=digitalRead(11)
}
void loop()
{
reading()
decoding()
if((x==0)&&(y==0)&&(z==1)&&(w==0))
{
move_forward()
reading()
decoding()
printing()
}
if((x==1)&&(y==0)&&(z==0)&&(w==0))
{
move_backward()
reading()
decoding()
printing()
}
if((x==0)&&(y==1)&&(z==0)&&(w==0))
{
move_left()
reading()
decoding()
printing()
}
if((x==0)&&(y==1)&&(z==1)&&(w==0))
{
move_right()
reading()
decoding()
printing()
}
if((x==0)&&(y==0)&&(z==0)&&(w==0))
{
halt()
reading()
decoding()
printing()
}
a=20
printing()
}

EXPLICAÇÃO DO CÓDIGO

  1. Em primeiro lugar, inicializamos todas as variáveis ​​antes da configuração do vazio.
  2. Na configuração vazia, todos os pinos a serem usados ​​são atribuídos como entrada ou saída de acordo com sua finalidade.
  3. Uma nova função “void decoding ()” é feita. Nesta função, toda a entrada binária que obtemos do DTMF é decodificada em decimal pelo Arduino. E a variável atribuída a este valor decimal é a.
  4. Outra função “void printing ()” é feita. Esta função é usada para imprimir valores de entrada de pinos DTMF.
  5. Da mesma forma, cinco funções são funções necessárias para executar a tarefa exigida. Essas funções são:

void move_left () // robô vira à esquerda

void move_right () // robô vira à direita

void move_forward () // robô avança

void move_backward () // robô se move para trás

void halt () // robô para

  1. Agora, essas funções são usadas na função void loop para realizar suas tarefas sempre que forem chamadas de acordo com a entrada do teclado de discagem do celular.

Por exemplo:::

if((x==0)&&(y==0)&&(z==1)&&(w==0))
{
move_forward()
reading()
decoding()
printing()
}

portanto, quando o botão 2 é pressionado ou 0010 é recebido nos pinos de entrada, o Arduino decodifica isso e, assim, essas funções fazem seu trabalho: Siga em frente()

leitura()

decodificação ()

impressão()

FUNCIONAMENTO DO CIRCUITO

Os controles que usamos em nosso projeto são os seguintes -

2 - Para seguir em frente

4 - Para virar à esquerda

6 - Para virar à direita

8 - Para mover para trás

0 - para parar

Após fazer uma chamada para o telefone conectado ao robô, a pessoa abre seu teclado de discagem.

  • Se ‘2’ for pressionado. O DTMF recebe a entrada, decodifica-a em seu número binário equivalente, ou seja, '0010' e envia para os pinos digitais do Arduino. O arduino então envia este código para o driver do motor conforme programamos quando o código será '0010', os motores irão girar no sentido horário e, portanto, nosso robô se moverá para frente.
  • Se '4' for pressionado, então seu código equivalente é '0100' e de acordo com a programação os motores do lado esquerdo irão parar e apenas os motores do lado direito irão girar no sentido horário e, portanto, nosso robô irá virar para a esquerda.
  • Se '6' for pressionado, o motor do lado direito irá parar e apenas os motores do lado esquerdo irão girar no sentido horário e, portanto, nosso robô irá virar para a direita.
  • Se '8' for pressionado, nossos motores girarão no sentido anti-horário e, assim, nosso robô se moverá para trás.
  • Se '0' for pressionado, todos os nossos motores irão parar e o robô não se moverá.

Neste projeto, atribuímos uma função a apenas cinco números de teclado numérico. Podemos adicionar qualquer tipo de outro mecanismo e atribuir um número de teclado numérico a esse mecanismo para fazer uma versão atualizada deste projeto.

PONTOS A TER EM MENTE

1 - O macaco não deve ficar solto.

2 - Os tons do teclado do telefone devem ser no máximo.

3 - Internet / Wi-Fi do telefone receptor deve ser fechado para evitar efeitos de interferência.

4 - O pino esquerdo (ou seja, pino 'b') de DTMF é aterrado e o pino direito (ou seja, pino 'a') é conectado a 3,3v.

Imagens de protótipo do circuito do carro-robô controlado por celular usando DTMF
Demonstração de vídeo de carro RC controlado por celular usando DTMF



Anterior: Introdução à EEPROM no Arduino Próximo: Faça este robô seguidor de linha para o projeto da feira de ciências