DTMF Modülünü Kullanan Cep Telefonu Kontrollü Robot Araba

Sorunları Ortadan Kaldırmak Için Enstrümanımızı Deneyin





Bu projede, DTMF modülü ve Arduino kullanarak cep telefonumuz aracılığıyla manuel bir robotu kontrol edeceğiz.

Ekleyen: Ankit Negi, Kanishk Godiyal ve Navneet Singh sajwan



DTMF Modülünü Kullanan Cep Telefonu Kontrollü Robot Araba

GİRİŞ

Bu projede biri arama diğeri aramayı almak için olmak üzere iki cep telefonu kullanılmıştır. Çağrıyı alan telefon robota ses jakı ile bağlanır.

Arayan kişi, sadece tuş takımı tuşlarına basarak robotu kontrol edebilir. (yani robot dünyanın herhangi bir köşesinden çalıştırılabilir).



GEREKLİ BİLEŞENLER

1 - Arduino UNO

2 - Manuel robot

3 - 4 motor (burada her biri 300 r.p.m kullandık)

4 - DTMF modülü

5 - Motor sürücüsü

6-12 volt Akü

7 - Anahtar

8 - Kulaklık Jakı

9 - İki Cep Telefonu

10 - Bağlantı kabloları

MANUEL ROBOT HAKKINDA

Manuel bir robot, ihtiyaca göre üç veya dört motorun (lastiklerle vidalanmış) takılabildiği şasiden (gövde) oluşur.

Kullanılacak motorlar ihtiyacımıza bağlıdır, yani ya yüksek hız ya da yüksek tork ya da her ikisinin iyi bir kombinasyonunu sağlayabilirler. Dörtlü helikopter gibi uygulamalar, mekanik bir kolu hareket ettirmek veya dik bir yokuşu tırmanmak gibi uygulamalar yüksek torklu motorlar gerektirirken yerçekimine karşı kaldırma için çok yüksek hızlı motorlar gerektirir.

Robotun sol ve sağ tarafındaki her iki motor ayrı ayrı paralel bağlanır. Genellikle 12 voltluk bir aküye DPDT (çift pimli çift atışlı) anahtarları ile bağlanırlar.

Ancak bu projede botu kontrol etmek için DPDT'ler yerine cep telefonunu kullanacağız.

MOTOR SÜRÜCÜSÜ HAKKINDA

Arduino, GPIO (genel amaçlı giriş çıkışı) pinlerini kullanarak maksimum 40mA akım verirken, Vcc ve toprak kullanarak 200mA verir.

Motorların çalışması için büyük akım gerekir. Motorlarımıza güç sağlamak için doğrudan arduino kullanamayız, bu yüzden bir motor sürücüsü kullanıyoruz.

Motor sürücüsü H Köprüsü (transistörlerin bir kombinasyonu olan) içerir. Motor sürücüsünün IC (L298), arduino tarafından sağlanan 5v ile sürülür.

Motorlara güç sağlamak için, nihayetinde 12 v pil ile sağlanan arduino'dan 12v giriş alır. Yani arduino sadece bataryadan güç alır ve motor sürücüsüne verir.

Maksimum 2 amper akım vererek motorların hızını ve yönünü kontrol etmemizi sağlar.

DTMF MODÜLÜNE GİRİŞ

DTMF, Çift tonlu çoklu frekans anlamına gelir. Tuş takımımız iki toner çoklu frekanstır, yani bir düğme farklı frekansa sahip iki tonun karışımını verir.

Bir ton, yüksek frekanslı bir ton grubundan, diğeri ise düşük bir frekans grubundan üretilir. Herhangi bir sesin tonları taklit edememesi için yapılır.

Bu nedenle, telefon tuş takımının girişini dört bitlik ikili koda dönüştürür. Projemizde kullandığımız tuş takımı numaralarının frekansları aşağıdaki tabloda gösterilmektedir.

Basamak Düşük frekans (hertz) Yüksek frekans (hertz) 2697133647701209677014778852133609411336

Tuş takımının rakamlarının ikili kod çözme sırası aşağıdaki tabloda gösterilmektedir.

hane D3 D2 D1 D0 1 0 0 0 1 iki 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

DEVRE ŞEMASI

BAĞLANTILAR

Motor sürücüsü -

  • Pin 'A' ve 'B' sol taraftaki motoru kontrol ederken Pin 'C' ve 'D' motorun sağ tarafını kontrol eder. Bu dört pim, dört motora bağlanır.
  • Pin 'E', arduino'dan (5v) alınan IC'ye (L298) güç sağlamak içindir.
  • pin 'F' topraktır.
  • Pin 'G', arduino'nun Vin pini aracılığıyla pilden 12 volt güç alır.
  • 'H', 'I', 'J' ve 'K' pinleri arduino'dan mantık alır.

DTMF -

  • 'a' pimi, IC'ye güç sağlamak için 3,5 volt arduino'ya bağlanır (SC9270D).
  • Pin 'b' toprağa bağlı.
  • DTMF girişi telefondan jak aracılığıyla alınır.
  • (D0 - D3) pinleri üzerinden ikili veri formundaki çıktı arduino'ya gider.

ARDUINO -

  • (D0 - D3) pinlerinden gelen DTMF çıkışı arduino'nun dijital pinlerine gelir. Bu çıkışı arduino'da (2 - 13) arasında değişen dört dijital pinden herhangi birine bağlayabiliriz. Burada 8, 9, 10 ve 11 numaralı pimleri kullandık.
  • Arduino'nun 2 ve 3 numaralı dijital pinleri motor sürücüsünün 'H' ve 'I' pinlerine bağlanırken, arduino'nun 12 ve 13 numaralı pinleri 'J' ve 'K' ye bağlıdır.
  • Arduino, 12 voltluk bir pile bağlıdır.

Program kodu-

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

KOD AÇIKLAMASI

  1. İlk olarak, void kurulumundan önce tüm değişkenleri başlatıyoruz.
  2. Geçersiz kurulumda kullanılacak tüm pinler amacına göre giriş veya çıkış olarak atanır.
  3. Yeni bir işlev 'geçersiz kod çözme ()' yapılır. Bu işlevde DTMF'den aldığımız tüm ikili girişler arduino tarafından ondalık sayıya çözülür. Ve bu ondalık değer için atanan değişken a.
  4. Başka bir işlev olan 'geçersiz yazdırma ()' yapılır. Bu işlev, DTMF pinlerinden giriş değerlerini yazdırmak için kullanılır.
  5. Benzer şekilde, gerekli görevi gerçekleştirmek için beş işlev gereklidir. Bu işlevler şunlardır:

void move_left () // robot sola döner

void move_right () // robot sağa döner

void move_forward () // robot ileri hareket eder

void move_backward () // robot geriye doğru hareket eder

void halt () // robot durur

  1. Artık bu işlevler, cep telefonunun tuş takımından gelen girişe göre her çağrıldıklarında görevlerini yerine getirmek için boşluk döngü işlevinde kullanılıyor.

Örneğin:::

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

bu nedenle düğme 2'ye basıldığında veya giriş pinlerinde 0010 alındığında, arduino bunu çözer ve böylece bu işlevler işlerini yapar: move_forward ()

okuma()

kod çözme ()

baskı()

DEVRE ÇALIŞMA

Projemizde kullandığımız kontroller aşağıdaki gibidir -

2 - İleri gitmek için

4 - Sola dönmek

6 - Sağa dönmek

8 - Geri gitmek için

0 - durdurmak için

Robota bağlı telefona bir arama yaptıktan sonra kişi tuş takımını açar.

  • '2' ye basılırsa. DTMF girişi alır, onun ikili eşdeğer sayısında, yani '0010' da kodunu çözer ve onu arduino'nun dijital pinlerine gönderir. Arduino daha sonra bu kodu, kod '0010' olduğunda programladığımız gibi motor sürücüsüne gönderir, motorlar saat yönünde dönecek ve dolayısıyla robotumuz ileri doğru hareket edecektir.
  • '4' tuşuna basılırsa, eşdeğer kodu '0100' olur ve programlamaya göre sol taraftaki motorlar duracak ve sadece sağ taraftaki motorlar saat yönünde dönecek ve dolayısıyla robotumuz sola dönecektir.
  • '6' tuşuna basıldığında, sağ taraftaki motor duracak ve sadece sol taraftaki motorlar saat yönünde dönecek ve dolayısıyla robotumuz sağa dönecektir.
  • '8' tuşuna basıldığında motorlarımız saat yönünün tersine dönecek ve böylece robotumuz geriye doğru hareket edecektir.
  • '0' tuşuna basılırsa tüm motorlarımız duracak ve robot hareket etmeyecektir.

Bu projede sadece beş tuş takımı numarasına bir işlev atadık. Bu projenin yükseltilmiş bir sürümünü oluşturmak için herhangi bir tür başka mekanizma ekleyebilir ve bu mekanizmaya bir tuş takımı numarası atayabiliriz.

DİKKAT EDİLMESİ GEREKEN HUSUSLAR

1 - Kriko gevşek olmamalıdır.

2 - Telefon tuş takımı tonları maksimum olmalıdır.

3 - Parazit etkilerini önlemek için alıcı telefonun interneti / Wi-Fi bağlantısı kapatılmalıdır.

4 - DTMF'nin sol pini (yani 'b' pini) topraklıdır ve sağ pini (yani 'a' pini) 3,3v'ye bağlıdır.

DTMF kullanan cep telefonu kontrollü robot araba devresinin prototip görüntüleri
DTMF kullanarak Cep Telefonu kontrollü RC Arabanın Video Gösterimi



Önceki: Arduino'da EEPROM'a Giriş Sonraki: Bilim Fuarı Projesi için Bu Çizgi İzleyen Robotu Yapın