DTMFモジュールを使用した携帯電話制御ロボットカー

問題を排除するために楽器を試してください





このプロジェクトでは、DTMFモジュールとArduinoを使用して、携帯電話から手動ロボットを制御します。

投稿者:Ankit Negi、Kanishk Godiyal、Navneet Singh sajwan



DTMFモジュールを使用した携帯電話制御ロボットカー

前書き

このプロジェクトでは、通話用と着信用の2つの携帯電話を使用します。電話を受ける電話は、オーディオジャックを介してロボットに接続されます。

電話をかけている人は、ダイヤルパッドのキーを押すだけでロボットを制御できます。 (つまり、ロボットは世界のどこからでも操作できます)。



必要なコンポーネント

1-Arduino UNO

2 –手動ロボット

3〜4個のモーター(ここではそれぞれ300 r.p.mを使用)

4-DTMFモジュール

5-モータードライバー

6〜12ボルトのバッテリー

7-スイッチ

8-ヘッドフォンジャック

9 –2台の携帯電話

10 –接続線

マニュアルロボットについて

手動ロボットは、シャーシ(本体)で構成されており、必要に応じて3つまたは4つのモーター(タイヤでねじ込まれている)を取り付けることができます。

使用するモーターは、要件によって異なります。つまり、高速または高トルク、あるいはその両方の適切な組み合わせを提供できます。クワッドコプターのようなアプリケーションでは、重力に逆らって持ち上げるために非常に高速のモーターが必要ですが、機械式アームの移動や急な坂を登るようなアプリケーションでは、高トルクのモーターが必要です。

ロボットの左側と右側の両方のモーターは、別々に並列に接続されています。通常、それらはDPDT(ダブルピンダブルスロー)スイッチを介して12ボルトのバッテリーに接続されます。

ただし、このプロジェクトでは、DPDTの代わりに携帯電話を使用してボットを制御します。

モータードライバーについて

ArduinoはGPIO(汎用入力出力)ピンを使用して最大40mAの電流を供給し、Vccとグランドを使用して200mAを供給します。

モーターは動作するために大電流を必要とします。 arduinoを直接使用してモーターに電力を供給することはできないため、モータードライバーを使用します。

モータードライバーには、Hブリッジ(トランジスタの組み合わせ)が含まれています。モータードライバーのIC(L298)は、arduinoから供給される5vで駆動されます。

モーターに電力を供給するために、それは最終的に12vバッテリーによって供給されるarduinoからの12v入力を取ります。したがって、arduinoはバッテリーから電力を受け取り、モータードライバーに供給します。

最大電流2アンペアを与えることにより、モーターの速度と方向を制御することができます。

DTMFモジュールの概要

DTMFは、デュアルトーン多重周波数の略です。私たちのダイヤルパッドは2トナーの複数周波数です。つまり、1つのボタンで周波数の異なる2つのトーンを混合できます。

1つのトーンは高周波数グループのトーンから生成され、もう1つのトーンは低周波数グループから生成されます。これは、どのタイプの声もトーンを模倣できないようにするために行われます。

そのため、電話のキーパッドの入力を4ビットのバイナリコードにデコードするだけです。プロジェクトで使用したキーパッド番号の頻度を次の表に示します。

Digit低周波数(ヘルツ)高周波数(ヘルツ)2697133647701209677014778852133609411336

ダイヤルパッドの数字のバイナリデコードシーケンスを次の表に示します。

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

回路図

接続

モータードライバー–

  • ピン「A」と「B」は左側のモーターを制御し、ピン「C」と「D」はモーターの右側を制御します。これらの4つのピンは4つのモーターに接続されています。
  • ピン「E」は、arduino(5v)から取得したIC(L298)に電力を供給するためのものです。
  • ピン「F」は接地されています。
  • ピン「G」は、arduinoのVinピンを介してバッテリーから12ボルトの電力を受け取ります。
  • ピン「H」、「I」、「J」、「K」は、arduinoからロジックを受け取ります。

DTMF –

  • ピン「a」は、IC(SC9270D)に電力を供給するために3.5ボルトのarduinoに接続されています。
  • ピン「b」はアースに接続されています。
  • DTMFの入力は、電話からジャックを介して取得されます。
  • (D0 – D3)ピンを介したバイナリデータ形式の出力はarduinoに送られます。

ARDUINO-

  • (D0 – D3)ピンからのDTMFの出力は、arduinoのデジタルピンに送られます。この出力は、arduinoの(2 – 13)から変化する4つのデジタルピンのいずれかに接続できます。ここでは、ピン8、9、10、および11を使用しました。
  • arduinoのデジタルピン2と3はモータードライバーのピン番号「H」と「I」に接続され、arduinoのピン12と13は「J」と「K」に接続されています。
  • arduinoは12ボルトのバッテリーに接続されています。

プログラムコード-

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

コードの説明

  1. まず、voidセットアップの前にすべての変数を初期化します。
  2. ボイド設定では、使用するすべてのピンが目的に応じて入力または出力として割り当てられます。
  3. 新しい関数「voiddecoding()」が作成されました。この関数では、DTMFから取得するすべてのバイナリ入力がarduinoによって10進数にデコードされます。そして、この10進値に割り当てられた変数はaです。
  4. 別の関数「voidprinting()」が作成されます。この関数は、DTMFピンからの入力値を出力するために使用されます。
  5. 同様に、5つの機能が必要です。必要なタスクを実行するには、機能が必要です。これらの関数は次のとおりです。

void move_left()//ロボットが左に曲がる

void move_right()//ロボットが右に曲がる

void move_forward()//ロボットが前進します

void move_backward()//ロボットが後方に移動します

void hold()//ロボットが停止

  1. 現在、これらの関数は、携帯電話のダイヤルパッドからの入力に従って呼び出されるたびにタスクを実行するために、voidループ関数で使用されます。

例えば:::

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

したがって、ボタン2が押されるか、入力ピンで0010が受信されると、arduinoはこれをデコードし、これらの関数が機能します。 move_forward()

reading()

デコード()

印刷()

回路の働き

プロジェクトで使用したコントロールは次のとおりです–

2 –前進する

4 –左に曲がる

6 –右に曲がる

8 –後方に移動するには

0 –停止する

ロボットに接続された電話に電話をかけた後、その人は自分のダイヤルパッドを開きます。

  • 「2」が押された場合。 DTMFは入力を受信し、それを2進数の等価番号(「0010」)でデコードして、arduinoのデジタルピンに送信します。次に、コードが「0010」になると、arduinoはこのコードをモータードライバーに送信します。モーターは時計回りに回転するため、ロボットは前進します。
  • 「4」を押すと、同等のコードは「0100」になり、プログラミングによれば、左側のモーターが停止し、右側のモーターのみが時計回りに回転するため、ロボットは左に回転します。
  • 「6」を押すと、右側のモーターが停止し、左側のモーターのみが時計回りに回転するため、ロボットは右に曲がります。
  • 「8」を押すと、モーターが反時計回りに回転するため、ロボットが後方に移動します。
  • 「0」を押すと、すべてのモーターが停止し、ロボットは動きません。

このプロジェクトでは、5つのダイヤルパッド番号にのみ機能を割り当てました。他の任意のタイプのメカニズムを追加し、そのメカニズムにダイヤルパッド番号を割り当てて、このプロジェクトのアップグレードバージョンを作成できます。

心に留めておくべきポイント

1 –ジャックは緩んではいけません。

2 –電話のキーパッドのトーンを最大にする必要があります。

3 –干渉の影響を避けるために、受信電話のインターネット/ Wi-Fiを閉じる必要があります。

4 – DTMFの左側のピン(つまり、ピン「b」)は接地され、右側のピン(つまり、ピン「a」)は3.3vに接続されています。

DTMFを使用した携帯電話制御のロボットカー回路のプロトタイプ画像
DTMFを使用した携帯電話制御のRCカーのビデオデモンストレーション



前:ArduinoのEEPROMの紹介 次へ:サイエンスフェアプロジェクトのためにこのラインフォロワーロボットを作成する