Контролиран от мобилен телефон автомобил-робот, използващ DTMF модул

Контролиран от мобилен телефон автомобил-робот, използващ DTMF модул

В този проект ще управляваме ръчен робот чрез нашия мобилен телефон, използвайки DTMF модул и Arduino.



От: Ankit Negi, Kanishk Godiyal и Navneet Singh sajwan

Контролиран от мобилен телефон автомобил-робот, използващ DTMF модул

ВЪВЕДЕНИЕ

В този проект се използват два мобилни телефона, един за повикване и един за получаване на повикване. Телефонът, който получава повикването, е свързан с робота чрез аудио жак.





Човекът, който се обажда, може да контролира робота само чрез натискане на клавишите на клавиатурата. (т.е. роботът може да се управлява от всяко кътче на света).

ИЗИСКВАНИ КОМПОНЕНТИ

1 - Arduino UNO



2 - Ръчен робот

3 - 4 мотора (тук използвахме по 300 оборота в минута всеки)

4 - DTMF модул

5 - Шофьор на мотор

6 - 12 волта батерия

7 - Превключвател

8 - жак за слушалки

9 - Два мобилни телефона

10 - Свързващи проводници

ЗА РЪЧЕН РОБОТ

Ръчният робот се състои от шаси (тяло), в което могат да бъдат прикрепени три или четири двигателя (които се завинтват с гуми) в зависимост от изискванията.

Двигателите, които ще се използват, зависят от нашите изисквания, т.е.могат да осигурят висока скорост или висок въртящ момент или добра комбинация от двете. Приложения като quad copter изискват много високоскоростни двигатели за повдигане срещу гравитацията, докато приложения като движение на механично рамо или изкачване по стръмен наклон изискват двигатели с голям въртящ момент.

И двата двигателя от лявата и дясната страна на робота са свързани паралелно поотделно. Обикновено те са свързани към 12волтова батерия чрез DPDT (двойно пинови двойно хвърляне) превключватели.

Но в този проект ще използваме мобилен телефон вместо DPDT, за да контролираме бота.

ЗА МОТОРНИЯ ШОФЬОР

Arduino дава максимален ток от 40 mA, използвайки GPIO (вход за изход с общо предназначение), докато дава 200 mA, използвайки Vcc и земя.

Двигателите изискват голям ток за работа. Не можем да използваме arduino директно за захранване на нашите двигатели, затова използваме двигател.

Двигателят на двигателя съдържа H Bridge (който е комбинация от транзистори). IC (L298) на моторния драйвер се задвижва от 5v, който се захранва от arduino.

За захранване на двигателите са необходими 12v вход от arduino, който в крайна сметка се доставя от 12 v батерия. Така че arduino просто взема енергия от батерията и дава на драйвера на двигателя.

Позволява ни да контролираме скоростта и посоката на двигателите, като дава максимален ток от 2 ампера.

ВЪВЕДЕНИЕ В DTMF МОДУЛА

DTMF означава Dual tone multi frequency. Нашата клавиатура за набиране е двучестотна многократна честота, т.е. един бутон дава комбинация от два тона с различна честота.

Един тон се генерира от високочестотна група тонове, докато друг от нискочестотна група. Прави се така, че всеки тип глас да не може да имитира тоновете.

Така че, той просто декодира въведеното от клавиатурата на телефона в четирибитов двоичен код. Честотите на номерата на клавиатурата, които сме използвали в нашия проект, са показани в таблицата по-долу

DigitLow честота (херца) Висока честота (херца) 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“ контролира дясната страна на двигателя. Тези четири щифта са свързани към четирите мотора.
  • Пин ‘E’ е за захранване на IC (L298), който е взет от arduino (5v).
  • щифт „F“ е смлян.
  • Pin ‘G’ отнема 12 волта захранване от батерията чрез Vin pin на arduino.
  • Pins ‘H’, ‘I’, ‘J’ и ‘K’ получава логика от arduino.

DTMF -

  • щифт „а“ е свързан към 3,5 волта arduino за захранване на интегралната схема (SC9270D).
  • Пин ‘b’ е свързан със земята.
  • Входът на DTMF се взема от телефона чрез жак.
  • Изходът под формата на двоични данни чрез (D0 - D3) щифтове отива към arduino.

ARDUINO -

  • изходът на DTMF от (D0 - D3) щифтове идва към цифрови щифтове на arduino. Можем да свържем този изход към всеки от четирите цифрови щифта, вариращи от (2 - 13) в arduino. Тук използвахме щифтове 8, 9, 10 и 11.
  • Цифровите щифтове 2 и 3 на arduino са свързани с пин с номера „H“ и „I“ на драйвера на двигателя, докато щифтове 12 и 13 на arduino са свързани с „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. При настройка на void всички пинове, които трябва да се използват, се определят като вход или изход според тяхното предназначение.
  3. Извършва се нова функция „void decoding ()“. В тази функция всички двоични входни данни, които получаваме от DTMF, се декодират до десетични от arduino. И променливата, присвоена за тази десетична стойност, е a.
  4. Извършва се друга функция “void printing ()”. Тази функция се използва за отпечатване на входни стойности от DTMF щифтове.
  5. По същия начин, пет функции са необходими функции са необходими за изпълнение на необходимата задача. Тези функции са:

void move_left () // роботът завива наляво

void move_right () // роботът завива надясно

void move_forward () // роботът се придвижва напред

void move_backward () // роботът се движи назад

void halt () // роботът спира

  1. Сега тези функции се използват във функцията void loop, за да изпълняват задачата си всеки път, когато са извикани според входа от dialpad на мобилния телефон.

Например:::

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“, тогава всичките ни двигатели ще спрат и роботът няма да се движи.

В този проект сме присвоили функция само на пет номера на клавиатурата. Можем да добавим всякакъв вид друг механизъм и да му присвоим номер на клавиатурата за набиране, за да направим подобрена версия на този проект.

ТОЧКИ, КОИТО ДА СЕ ИМАТ В УМ

1 - Буксата не трябва да е разхлабена.

2 - Тоновете на клавиатурата на телефона трябва да са максимални.

3 - Интернет / Wi-Fi на приемащия телефон трябва да бъде затворен, за да се избегнат смущаващи ефекти.

4 - Левият щифт (т.е. щифт ‘b’) на DTMF е заземен, а десният щифт (т.е. щифт ‘a’) е свързан към 3.3v.

Прототипни изображения на контролирана от мобилен телефон схема на роботизирана кола, използваща DTMF
Видео демонстрация на управляван от мобилен телефон RC автомобил с използване на DTMF



Предишен: Въведение в EEPROM в Arduino Напред: Направете този проект за последовател на редове за научен панаир