Mașină robot controlată de telefonul mobil folosind modulul DTMF

Încercați Instrumentul Nostru Pentru Eliminarea Problemelor





În acest proiect vom controla un robot manual prin intermediul telefonului mobil folosind modulul DTMF și Arduino.

De: Ankit Negi, Kanishk Godiyal și Navneet Singh sajwan



Mașină robot controlată de telefonul mobil folosind modulul DTMF

INTRODUCERE

În acest proiect sunt utilizate două telefoane mobile, unul pentru apel și unul pentru primirea apelului. Telefonul care primește apelul este conectat la robot prin mufa audio.

Persoana care sună poate controla robotul doar prin apăsarea tastelor tastaturii. (adică robotul poate fi operat din orice colț al lumii).



COMPONENTE NECESARE

1 - Arduino UNO

2 - Robot manual

3 - 4 motoare (aici am folosit 300 rpm fiecare)

4 - Modul DTMF

5 - Șofer de motor

Baterie de 6 - 12 volți

7 - Comutator

8 - Mufă pentru căști

9 - Două telefoane celulare

10 - Conectarea firelor

DESPRE ROBOTUL MANUAL

Un robot manual constă din șasiu (caroserie) în care pot fi atașate trei sau patru motoare (care sunt înșurubate cu anvelope), în funcție de cerințe.

Motoarele care trebuie utilizate depind de cerințele noastre, adică pot oferi fie viteză mare, fie cuplu ridicat, fie o combinație bună a ambelor. Aplicații precum quad copter necesită motoare cu viteză foarte mare pentru a se ridica împotriva gravitației, în timp ce aplicații precum deplasarea unui braț mecanic sau urcarea pe o pantă abruptă necesită motoare cu cuplu ridicat.

Ambele motoare din partea stângă și dreaptă a robotului sunt conectate în paralel separat. De obicei, acestea sunt conectate la o baterie de 12 volți prin intermediul comutatoarelor DPDT (double pin double throw).

Dar în acest proiect vom folosi telefonul mobil în loc de DPDT-uri pentru a controla botul.

DESPRE MOTOR DRIVER

Arduino oferă un curent maxim de 40mA utilizând pini GPIO (ieșire de intrare de uz general), în timp ce oferă 200mA folosind Vcc și masă.

Motoarele necesită curent mare pentru a funcționa. Nu putem folosi arduino direct pentru a ne alimenta motoarele, așa că folosim un driver de motor.

Driverul motorului conține H Bridge (care este o combinație de tranzistoare). IC (L298) al driverului motorului este acționat de 5v care este furnizat de arduino.

Pentru a alimenta motoarele, este nevoie de 12V de intrare de la arduino, care este furnizat în cele din urmă de o baterie de 12 V. Deci, arduino preia doar bateria și dă șoferului motorului.

Ne permite să controlăm viteza și direcția motoarelor, oferind un curent maxim de 2 amperi.

INTRODUCERE LA MODULUL DTMF

DTMF înseamnă multi-frecvență dual tone. Tastatura noastră este o frecvență multiplă cu două tonere, adică un buton oferă un amestec de două tonuri cu frecvență diferită.

Un ton este generat dintr-un grup de tonuri de înaltă frecvență, în timp ce altul dintr-un grup de frecvențe joase. Se face astfel încât orice tip de voce să nu poată imita tonurile.

Deci, pur și simplu decodează intrarea tastaturii telefonului în cod binar pe patru biți. Frecvențele numerelor de tastatură pe care le-am folosit în proiectul nostru sunt prezentate în tabelul de mai jos

Cifra Frecvență joasă (hertz) Frecvență înaltă (hertz) 2697133647701209677014778852133609411336

Secvența binară decodificată a cifrelor tastaturii este prezentată în tabelul de mai jos.

cifră D3 D2 D1 D0 1 0 0 0 1 Două 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 CIRCUITULUI

LEGĂTURI

Șofer de motor -

  • Pinul „A” și „B” controlează motorul din partea stângă, în timp ce pinul „C” și „D” controlează partea dreaptă a motorului. Acești patru pini sunt conectați la cele patru motoare.
  • Pinul „E” este pentru a alimenta IC (L298), care este preluat de la arduino (5v).
  • pinul „F” este măcinat.
  • Pinul 'G' necesită o putere de 12 volți de la baterie prin pinul Vin de arduino.
  • Pinii „H”, „I”, „J” și „K” primesc logică de la arduino.

DTMF -

  • pinul 'a' este conectat la 3,5 volți de arduino pentru a alimenta IC (SC9270D).
  • Pinul 'b' este conectat la masă.
  • Intrarea DTMF este preluată de la telefon prin mufă.
  • Ieșirea sub formă de date binare prin pinii (D0 - D3) merge la arduino.

ARDUINO -

  • ieșirea DTMF de la pinii (D0 - D3) vine la pinii digitali de arduino. Putem conecta această ieșire la oricare dintre cei patru pini digitali variind de la (2 - 13) în arduino. Aici am folosit pinii 8, 9, 10 și 11.
  • Pinii digitali 2 și 3 din arduino sunt conectați la numărul pin 'H' și 'I' al driverului motorului, în timp ce pinii 12 și 13 din arduino sunt conectați la 'J' și 'K'.
  • Arduino este conectat la o baterie de 12 volți.

Codul programului-

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ȚIE COD

  1. În primul rând, inițializăm toate variabilele înainte de configurarea nulă.
  2. În configurarea nulă, toți pinii care vor fi utilizați sunt atribuiți ca intrare sau ieșire în funcție de scopul lor.
  3. O nouă funcție „void decoding ()” este realizată. În această funcție, toate intrările binare pe care le obținem de la DTMF sunt decodificate în zecimal de către arduino. Și variabila atribuită pentru această valoare zecimală este a.
  4. Este realizată o altă funcție „void printing ()”. Această funcție este utilizată pentru a imprima valorile de intrare de la pinii DTMF.
  5. În mod similar, cinci funcții sunt necesare funcții sunt necesare pentru a îndeplini sarcina necesară. Aceste funcții sunt:

void move_left () // robotul virează la stânga

void move_right () // robotul se întoarce la dreapta

void move_forward () // robotul merge înainte

void move_backward () // robotul se mișcă înapoi

void halt () // robotul se oprește

  1. Acum aceste funcții sunt utilizate în funcția de buclă nulă pentru a-și îndeplini sarcina ori de câte ori sunt apelate în funcție de intrarea de pe tastatura numerică a telefonului mobil.

De exemplu:::

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

prin urmare, când butonul 2 este apăsat sau 0010 este primit pe pinii de intrare, arduino decodifică acest lucru și astfel aceste funcții își fac treaba: mergi inainte()

citind()

decodare ()

tipărire ()

FUNCȚIONAREA CIRCUITULUI

Controalele pe care le-am folosit în proiectul nostru sunt următoarele -

2 - Pentru a merge mai departe

4 - Pentru a vira la stânga

6 - Pentru a vira la dreapta

8 - Pentru a vă deplasa înapoi

0 - a opri

După efectuarea unui apel către telefonul conectat la robot, persoana își deschide tastatura.

  • Dacă este apăsat „2”. DTMF primește intrarea, o decodifică în numărul său echivalent binar, adică ‘0010’ și o trimite către pinii digitali de arduino. Arduino trimite apoi acest cod șoferului motorului așa cum am programat când codul va fi „0010”, motoarele se vor roti în sensul acelor de ceasornic și, prin urmare, robotul nostru se va deplasa înainte.
  • Dacă este apăsat „4”, atunci codul său echivalent este „0100” și conform programării, motoarele din partea stângă se vor opri și numai motoarele din dreapta se vor roti în sensul acelor de ceasornic și, prin urmare, robotul nostru va întoarce la stânga.
  • Dacă este apăsat „6”, atunci motorul din dreapta se va opri și numai motoarele din stânga se vor roti în sensul acelor de ceasornic și, prin urmare, robotul nostru se va întoarce la dreapta.
  • Dacă este apăsat „8” atunci motoarele noastre se vor roti în sens invers acelor de ceasornic și astfel robotul nostru se va deplasa înapoi.
  • Dacă este apăsat „0”, toate motoarele noastre se vor opri și robotul nu se va mișca.

În acest proiect am atribuit o funcție doar cinci numere de tastatură. Putem adăuga orice alt tip de mecanism și putem atribui un număr de tastatură mecanismului respectiv pentru a crea o versiune actualizată a acestui proiect.

PUNCTE DE ȚINUT ÎN MENT

1 - Cricul nu trebuie să fie slăbit.

2 - Tonurile tastaturii telefonului trebuie să fie maxime.

3 - Internetul / Wi-Fi al telefonului receptor trebuie închis pentru a evita efectele de interferență.

4 - Pinul stâng (adică pinul 'b') al DTMF este împământat, iar pinul drept (adică pinul 'a') este conectat la 3.3v.

Imagini prototip ale circuitului automobilului robot controlat de telefonul mobil folosind DTMF
Demonstrație video a mașinii RC controlate de telefonul mobil folosind DTMF



Precedent: Introducere în EEPROM în Arduino În continuare: Faceți acest robot Line Follower pentru proiectul Science Fair