Mobiltelefonstyret robotbil ved hjælp af DTMF-modul

Prøv Vores Instrument Til At Fjerne Problemer





I dette projekt skal vi styre en manuel robot via vores mobiltelefon ved hjælp af DTMF-modulet og Arduino.

Af: Ankit Negi, Kanishk Godiyal og Navneet Singh sajwan



Mobiltelefonstyret robotbil ved hjælp af DTMF-modul

INTRODUKTION

I dette projekt bruges to mobiltelefoner, en til at ringe og en til at modtage opkaldet. Telefonen, der modtager opkaldet, er forbundet til robotten via lydstik.

Den person, der ringer, kan styre robotten ved blot at trykke på tastaturet. (dvs. robotten kan betjenes fra ethvert hjørne af verden).



KOMPONENTER Nødvendigt

1 - Arduino UNO

2 - Manuel robot

3-4 motorer (her brugte vi 300 omdrejninger pr. Minut hver)

4 - DTMF-modul

5 - Motordriveren

6 - 12 volt batteri

7 - Skift

8 - Stik til hovedtelefoner

9 - To mobiltelefoner

10 - Tilslutning af ledninger

OM MANUEL ROBOT

En manuel robot består af chassis (karosseri), hvor tre eller fire motorer (som er skruet med dæk) kan monteres afhængigt af kravet.

Motorer, der skal bruges, afhænger af vores krav, dvs. de kan enten give høj hastighed eller højt drejningsmoment eller en god kombination af begge. Anvendelser som quadcopter kræver motorer med meget høj hastighed for at løfte sig mod tyngdekraften, mens anvendelse som at bevæge en mekanisk arm eller klatre op ad en stejl hældning kræver motorer med højt moment.

Begge motorer på venstre og højre side af robotten er forbundet parallelt separat. Normalt er de tilsluttet et 12 volt batteri via DPDT-kontakter (dobbelt pin dobbelt kast).

Men i dette projekt bruger vi mobiltelefon i stedet for DPDT'er til at kontrollere bot.

OM MOTORDRIVER

Arduino giver maksimal strøm på 40mA ved hjælp af GPIO-pins (generel input-output), mens det giver 200mA ved hjælp af Vcc og jord.

Motorer kræver stor strøm for at fungere. Vi kan ikke bruge arduino direkte til at drive vores motorer, så vi bruger en motordriver.

Motordriveren indeholder H Bridge (som er en kombination af transistorer). IC-motoren (L298) drives af 5v, som leveres af arduino.

For at drive motorerne tager det 12V input fra arduino, som i sidste ende leveres af et 12V batteri. Så arduinoen tager bare strøm fra batteriet og giver til motorføreren.

Det giver os mulighed for at kontrollere motorens hastighed og retning ved at give maksimal strøm på 2 ampere.

INTRODUKTION TIL DTMF-MODUL

DTMF står for Dual tone multifrekvens. Vores opkaldstastatur er en to toner multipel frekvens, dvs. en knap giver en blanding af to toner med forskellig frekvens.

En tone genereres fra en højfrekvent gruppe af toner, mens den anden fra en lavfrekvent gruppe. Det gøres, så enhver form for stemme ikke kan efterligne tonerne.

Så det afkoder simpelthen telefonens tastaturets input til fire-bit binær kode. Frekvensen af ​​tastaturnumre, som vi har brugt i vores projekt, er vist i nedenstående tabel

DigitLow frekvens (hertz) Høj frekvens (hertz) 2697133647701209677014778852133609411336

Den binære afkodede sekvens af nummertastaturets cifre vises i nedenstående tabel.

ciffer D3 D2 D1 D0 1 0 0 0 1 to 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

KREDSLØBSDIAGRAM

FORBINDELSER

Motordriver -

  • Pin 'A' og 'B' styrer motoren i venstre side, mens pin 'C' og 'D' styrer højre side af motoren. Disse fire ben er forbundet med de fire motorer.
  • Pin 'E' er til at drive IC (L298), som er taget fra arduino (5v).
  • pin 'F' er jordet.
  • Pin 'G' tager 12 volt strøm fra batteriet via Vin pin af arduino.
  • Pins 'H', 'I', 'J' og 'K' modtager logik fra arduino.

DTMF -

  • pin 'a' er forbundet til 3,5 volt arduino for at drive IC (SC9270D).
  • Pin 'b' er forbundet med jorden.
  • Indgangen til DTMF er taget fra telefonen via jackstik.
  • Outputtet i form af binære data via (D0 - D3) ben går til arduino.

ARDUINO -

  • output af DTMF fra (D0 - D3) stifter kommer til digitale stifter af arduino. Vi kan forbinde denne udgang til en af ​​de fire digitale stifter, der varierer fra (2 - 13) i arduino. Her brugte vi ben 8, 9, 10 og 11.
  • Digitale ben 2 og 3 på arduino er forbundet med pin nummer 'H' og 'I' i motordriveren, mens ben 12 og 13 i arduino er forbundet til 'J' og 'K'.
  • Arduinoen er tilsluttet et 12 volt batteri.

Program KODE-

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()
}

KODE FORKLARING

  1. Først og fremmest initialiserer vi alle variabler inden ugyldig opsætning.
  2. I ugyldig opsætning tildeles alle ben, der skal bruges, som input eller output i henhold til deres formål.
  3. En ny funktion 'ugyldig afkodning ()' oprettes. I denne funktion dekodes alt binært input, som vi får fra DTMF, til decimal af arduino. Og en variabel, der er tildelt denne decimalværdi, er a.
  4. En anden funktion 'ugyldig udskrivning ()' foretages. Denne funktion bruges til at udskrive inputværdier fra DTMF-ben.
  5. Tilsvarende er fem funktioner påkrævede funktioner er nødvendige for at udføre den krævede opgave. Disse funktioner er:

ugyldigt move_left () // robot drejer til venstre

ugyldigt move_right () // robot drejer til højre

ugyldigt move_forward () // robot bevæger sig fremad

ugyldigt move_backward () // robot bevæger sig bagud

ugyldigt stop () // robot stopper

  1. Nu bruges disse funktioner i ugyldig sløjfefunktion til at udføre deres opgave, når de kaldes i henhold til input fra mobiltelefonens tastatur.

For eksempel:::

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

derfor, når der trykkes på knap 2, eller 0010 modtages på inputstifter, afkoder arduino dette, og dermed udfører disse funktioner deres arbejde: komme videre()

læsning()

afkodning ()

trykning()

CIRCUIT ARBEJDER

De kontroller, som vi har brugt i vores projekt, er som følger -

2 - For at komme videre

4 - For at dreje til venstre

6 - For at dreje til højre

8 - At bevæge sig baglæns

0 - for at stoppe

Efter at have foretaget et opkald til telefonen, der er tilsluttet robotten, åbner personen sin opkaldstastatur.

  • Hvis der trykkes på '2'. DTMF modtager input, afkoder det i dets binære ækvivalente antal, dvs. '0010' og sender det til digitale stifter i arduino. Arduino sender derefter denne kode til motordriveren, som vi har programmeret, hvornår koden vil være '0010', motorerne vil dreje i urets retning, og derfor bevæger vores robot sig fremad.
  • Hvis der trykkes på '4', er dets ækvivalente kode '0100', og ifølge programmeringen stopper motorerne i venstre side, og kun højre motorer roterer med uret, og dermed vil vores robot dreje til venstre.
  • Hvis der trykkes på '6', stopper højre sidemotor og kun venstre motorer roterer med uret, og vores robot vil derfor dreje til højre.
  • Hvis der trykkes på '8', vil vores motorer dreje mod uret, og dermed vil vores robot bevæge sig bagud.
  • Hvis der trykkes på '0', stopper alle vores motorer, og robotten bevæger sig ikke.

I dette projekt har vi kun tildelt en funktion til fem nummertaster. Vi kan tilføje enhver form for anden mekanisme og tildele et opkaldsnummer til den mekanisme for at lave en opgraderet version af dette projekt.

PUNKTER, DER SKAL DU FORHOLDE

1 - Stikket bør ikke være løst.

2 - Telefonens tastaturtoner skal være maksimale.

3 - Internet / Wi-Fi for modtagende telefon skal være lukket for at undgå interferenseffekter.

4 - Venstre pin (dvs. pin 'b') på DTMF er jordet, og højre pin (dvs. pin 'a') er forbundet til 3.3v.

Prototype billeder af det mobiltelefonstyrede robotbilkredsløb ved hjælp af DTMF
Videodemonstration af mobiltelefonstyret RC-bil ved hjælp af DTMF



Forrige: Introduktion til EEPROM i Arduino Næste: Lav denne Line Follower-robot til Science Fair-projektet