DTMF 모듈을 이용한 휴대폰 제어 로봇 자동차

문제를 제거하기 위해 도구를 사용해보십시오





이 프로젝트에서는 DTMF 모듈과 Arduino를 사용하여 휴대폰을 통해 수동 로봇을 제어 할 것입니다.

게시자 : Ankit Negi, Kanishk Godiyal 및 Navneet Singh sajwan



DTMF 모듈을 이용한 휴대폰 제어 로봇 자동차

소개

이 프로젝트에서는 두 개의 휴대폰, 하나는 통화 용이고 다른 하나는 통화 용입니다. 전화를받는 전화기는 오디오 잭을 통해 로봇에 연결됩니다.

전화를 건 사람은 다이얼 패드 키를 누르기 만하면 로봇을 제어 할 수 있습니다. (즉, 로봇은 전 세계 어느 곳에서나 작동 할 수 있습니다.)



필요한 구성 요소

1-Arduino UNO

2 – 수동 로봇

모터 3-4 개 (여기서는 각각 300 r.p.m 사용)

4-DTMF 모듈

5-모터 드라이버

6 – 12V 배터리

7-스위치

8-헤드폰 잭

9 – 두 대의 휴대폰

10 – 전선 연결

수동 로봇 정보

수동 로봇은 필요에 따라 3 개 또는 4 개의 모터 (타이어로 나사로 고정)를 부착 할 수있는 섀시 (바디)로 구성됩니다.

사용할 모터는 우리의 요구 사항에 따라 달라집니다. 즉, 고속 또는 높은 토크를 제공하거나 둘 모두를 잘 조합 할 수 있습니다. 쿼드 콥터와 같은 응용 분야에는 중력에 대항하여 들어 올리기 위해 초고속 모터가 필요하지만 기계식 팔을 움직이거나 가파른 경사를 오르는 것과 같은 응용 분야에는 높은 토크 모터가 필요합니다.

로봇의 왼쪽과 오른쪽에있는 두 모터는 별도로 병렬로 연결됩니다. 일반적으로 DPDT (double pin double throw) 스위치를 통해 12 볼트 배터리에 연결됩니다.

그러나이 프로젝트에서는 DPDT 대신 휴대 전화를 사용하여 봇을 제어합니다.

모터 드라이버 정보

Arduino는 GPIO (범용 입력 출력) 핀을 사용하여 최대 40mA의 전류를 제공하고 Vcc 및 접지를 사용하여 200mA를 제공합니다.

모터가 작동하려면 큰 전류가 필요합니다. arduino를 모터에 직접 사용할 수 없으므로 모터 드라이버를 사용합니다.

모터 드라이버에는 H 브리지 (트랜지스터 조합)가 포함되어 있습니다. 모터 드라이버의 IC (L298)는 arduino에서 공급하는 5v로 구동됩니다.

모터에 전원을 공급하려면 궁극적으로 12V 배터리로 공급되는 arduino에서 12v 입력이 필요합니다. 따라서 arduino는 배터리에서 전력을 가져와 모터 드라이버에 제공합니다.

최대 2A의 전류를 제공하여 모터의 속도와 방향을 제어 할 수 있습니다.

DTMF 모듈 소개

DTMF는 듀얼 톤 다중 주파수를 나타냅니다. 우리의 다이얼 패드는 두 개의 토너 다중 주파수입니다. 즉, 하나의 버튼은 주파수가 다른 두 톤의 혼합을 제공합니다.

한 톤은 고주파 톤 그룹에서 생성되고 다른 톤은 저주파 그룹에서 생성됩니다. 어떤 유형의 음성도 톤을 모방 할 수 없도록 수행됩니다.

따라서 단순히 전화 키패드의 입력을 4 비트 이진 코드로 디코딩합니다. 프로젝트에서 사용한 키패드 번호의 주파수는 아래 표에 나와 있습니다.

Digit 저주파 (hertz) 고주파 (hertz) 2697133647701209677014778852133609411336

이진 디코딩 된 다이얼 패드 숫자 시퀀스는 아래 표에 나와 있습니다.

숫자 D3 D2 D1 D0 1 0 0 0 1 0 0 1 0 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 핀을 통해 배터리에서 12V 전원을 사용합니다.
  • 핀‘H’,‘I’,‘J’,‘K’는 arduino에서 로직을받습니다.

DTMF –

  • 핀‘a’는 3.5V의 arduino에 연결되어 IC (SC9270D)에 전원을 공급합니다.
  • 핀‘b’는 접지에 연결됩니다.
  • DTMF의 입력은 잭을 통해 전화에서 가져옵니다.
  • (D0 – D3) 핀을 통한 바이너리 데이터 형태의 출력은 arduino로 이동합니다.

아르 두 이노-

  • (D0 – D3) 핀의 DTMF 출력은 arduino의 디지털 핀으로 전달됩니다. 이 출력을 arduino의 (2 – 13)에서 다른 4 개의 디지털 핀 중 하나에 연결할 수 있습니다. 여기에서는 핀 8, 9, 10 및 11을 사용했습니다.
  • arduino의 디지털 핀 2와 3은 모터 드라이버의 핀 번호‘H’와‘I’에 연결되고 arduino의 핀 12와 13은‘J’와’K’에 연결됩니다.
  • arduino는 12V 배터리에 연결되어 있습니다.

프로그램 코드-

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. void 설정에서 사용되는 모든 핀은 용도에 따라 입력 또는 출력으로 지정됩니다.
  3. 새로운 함수“void decode ()”가 만들어졌습니다. 이 함수에서 DTMF에서 얻은 모든 이진 입력은 arduino에 의해 십진수로 디코딩됩니다. 그리고이 십진수 값에 할당 된 변수는 a입니다.
  4. 또 다른 함수“void printing ()”이 만들어졌습니다. 이 기능은 DTMF 핀에서 입력 값을 인쇄하는 데 사용됩니다.
  5. 마찬가지로 필요한 작업을 수행하려면 5 가지 기능이 필요합니다. 이러한 기능은 다음과 같습니다.

void move_left () // 로봇이 좌회전

void move_right () // 로봇이 우회전

void move_forward () // 로봇이 앞으로 이동합니다.

void move_backward () // 로봇이 뒤로 이동

void halt () // 로봇 정지

  1. 이제이 함수들은 핸드폰 다이얼 패드의 입력에 따라 호출 될 때마다 그들의 작업을 수행하기 위해 void 루프 함수에서 사용됩니다.

예 :::

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

따라서 버튼 2를 누르거나 0010이 입력 핀에 수신되면 arduino가이를 디코딩하므로 다음 기능이 작동합니다. 앞으로가()

독서()

디코딩()

인쇄()

회로 작업

프로젝트에서 사용한 컨트롤은 다음과 같습니다.

2 – 앞으로 나아 가기 위해

4 – 좌회전

6 – 우회전

8 – 뒤로 이동하려면

0 – 중지

로봇에 연결된 전화기로 전화를 걸면 그 사람은 다이얼 패드를 엽니 다.

  • ‘2’를 누르면. DTMF는 입력을 수신하여 이진수 (예 : '0010')로 디코딩하여 arduino의 디지털 핀으로 보냅니다. 그런 다음 arduino는 코드가 '0010'이 될 때 프로그래밍 한대로이 코드를 모터 드라이버에 전송하고 모터는 시계 방향으로 회전하므로 로봇이 앞으로 이동합니다.
  • ‘4’를 누르면 해당 코드는‘0100’이고 프로그래밍에 따라 왼쪽 모터가 정지하고 오른쪽 모터 만 시계 방향으로 회전하므로 로봇이 왼쪽으로 회전합니다.
  • ‘6’을 누르면 오른쪽 모터가 정지하고 왼쪽 모터 만 시계 방향으로 회전하므로 로봇이 오른쪽으로 회전합니다.
  • ‘8’을 누르면 모터가 반 시계 방향으로 회전하여 로봇이 후진합니다.
  • '0'을 누르면 모든 모터가 멈추고 로봇은 움직이지 않습니다.

이 프로젝트에서는 5 개의 다이얼 패드 번호에만 기능을 할당했습니다. 다른 유형의 메커니즘을 추가하고 해당 메커니즘에 다이얼 패드 번호를 할당하여이 프로젝트의 업그레이드 버전을 만들 수 있습니다.

기억해야 할 사항

1 – 잭이 느슨하지 않아야합니다.

2 – 전화 키패드 톤이 최대 여야합니다.

3 – 간섭 효과를 피하기 위해 수신 전화의 인터넷 / Wi-Fi를 닫아야합니다.

4 – DTMF의 왼쪽 핀 (예 : 핀‘b’)은 접지이고 오른쪽 핀 (예 : 핀‘a’)은 3.3v에 연결됩니다.

DTMF를 이용한 휴대폰 제어 로봇 자동차 회로의 프로토 타입 이미지
DTMF를 이용한 휴대폰 제어 RC 카 시연 영상



Previous : Arduino의 EEPROM 소개 다음 : 과학 박람회 프로젝트를위한 라인 추종자 로봇 만들기