سيارة روبوت يتم التحكم فيها بواسطة الهاتف المحمول باستخدام وحدة DTMF

جرب أداة القضاء على المشاكل





في هذا المشروع ، سوف نتحكم في روبوت يدوي من خلال هاتفنا المحمول باستخدام وحدة DTMF و Arduino.

بقلم: عنكيت نيجي وكانيشك غوديال ونافنيت سينغ سجوان



سيارة روبوت يتم التحكم فيها بواسطة الهاتف المحمول باستخدام وحدة DTMF

المقدمة

في هذا المشروع ، يتم استخدام هاتفين خلويين ، أحدهما للاتصال والآخر لتلقي المكالمة. الهاتف الذي يستقبل المكالمة متصل بالروبوت عبر مقبس الصوت.

يمكن للشخص المتصل التحكم في الروبوت بمجرد الضغط على مفاتيح لوحة الاتصال. (أي يمكن تشغيل الروبوت من أي ركن من أركان العالم).



المكونات المطلوبة

1 - اردوينو UNO

2 - الروبوت اليدوي

3-4 محركات (استخدمنا هنا 300 دورة في الدقيقة لكل منها)

4 - وحدة DTMF

5 - سائق محرك

بطارية 6-12 فولت

7 - سويتش

8 - مقبس سماعة الرأس

9 - عدد 2 جوال

10- توصيل الاسلاك

حول الروبوت اليدوي

يتكون الروبوت اليدوي من هيكل (جسم) يمكن تركيب ثلاثة أو أربعة محركات (مثبتة ببراغي بإطارات) حسب المتطلبات.

تعتمد المحركات التي سيتم استخدامها على متطلباتنا ، أي يمكنها توفير سرعة عالية أو عزم دوران مرتفع أو مزيج جيد من الاثنين. تتطلب التطبيقات مثل المروحية الرباعية محركات عالية السرعة للرفع ضد الجاذبية بينما يتطلب التطبيق مثل تحريك ذراع ميكانيكي أو تسلق منحدر حاد محركات عالية عزم الدوران.

كلا المحركين على الجانب الأيسر والأيمن من الروبوت متصلان بشكل متوازٍ بشكل منفصل. عادة ما يتم توصيلهم ببطارية 12 فولت عبر مفاتيح DPDT (رمي مزدوج مزدوج).

لكن في هذا المشروع سوف نستخدم الهاتف المحمول بدلاً من DPDTs للتحكم في الروبوت.

عن سائق المحرك

يوفر Arduino أقصى تيار 40 مللي أمبير باستخدام دبابيس GPIO (إخراج إدخال للأغراض العامة) ، بينما يعطي 200 مللي أمبير باستخدام Vcc والأرضي.

تتطلب المحركات تيارًا كبيرًا للعمل. لا يمكننا استخدام اردوينو مباشرة لتشغيل محركاتنا لذلك نستخدم سائق محرك.

يحتوي محرك المحرك على جسر H (وهو عبارة عن مزيج من الترانزستورات). يتم تشغيل IC (L298) لمحرك المحرك بواسطة 5 فولت والذي يتم توفيره بواسطة اردوينو.

لتشغيل المحركات ، يتطلب الأمر إدخال 12 فولت من اردوينو والذي يتم توفيره في النهاية بواسطة بطارية 12 فولت. لذا فإن اردوينو يأخذ الطاقة من البطارية ويعطيها لسائق المحرك.

يسمح لنا بالتحكم في سرعة واتجاه المحركات من خلال إعطاء أقصى تيار 2 أمبير.

مقدمة إلى وحدة DTMF

DTMF تعني تردد متعدد النغمات. لوحة الاتصال الخاصة بنا عبارة عن تردد مزدوج للحبر ، أي أن الزر الواحد يعطي مزيجًا من نغمتين بتردد مختلف.

يتم إنشاء نغمة واحدة من مجموعة نغمات عالية التردد بينما يتم إنشاء نغمة أخرى من مجموعة منخفضة التردد. يتم ذلك بحيث لا يستطيع أي نوع من الأصوات تقليد النغمات.

لذلك ، يقوم ببساطة بفك تشفير إدخال لوحة مفاتيح الهاتف إلى كود ثنائي مكون من أربعة بتات. يتم عرض ترددات أرقام لوحة المفاتيح التي استخدمناها في مشروعنا في الجدول أدناه

رقم التردد المنخفض (هرتز) تردد عالي (هيرتز) 2697133647701209677014778852133609411336

يظهر التسلسل الثنائي لأرقام لوحة الاتصال في الجدول أدناه.

رقم D3 د 2 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' في محرك الجانب الأيسر بينما يتحكم Pin 'C' و 'D' في الجانب الأيمن من المحرك. هذه الأربعة دبابيس متصلة بالمحركات الأربعة.
  • Pin 'E' هو تشغيل IC (L298) المأخوذ من arduino (5v).
  • دبوس 'F' هو الأرض.
  • يستهلك دبوس 'G' طاقة 12 فولت من البطارية عبر دبوس Vin من اردوينو.
  • تستقبل الدبابيس 'H' و 'I' و 'J' و 'K' المنطق من اردوينو.

DTMF -

  • دبوس 'a' متصل بـ 3.5 فولت من اردوينو لتشغيل IC (SC9270D).
  • دبوس 'ب' متصل بالأرض.
  • يتم أخذ مدخلات DTMF من الهاتف عبر مقبس.
  • ينتقل الإخراج في شكل بيانات ثنائية عبر دبابيس (D0 - D3) إلى اردوينو.

أردوينو -

  • يأتي إخراج DTMF من دبابيس (D0 - D3) إلى دبابيس رقمية من اردوينو. يمكننا توصيل هذا الإخراج بأي من المنافذ الرقمية الأربعة التي تتراوح من (2 - 13) في اردوينو. استخدمنا هنا دبابيس 8 و 9 و 10 و 11.
  • يتم توصيل المسامير الرقمية 2 و 3 من arduino بالرقم السري 'H' و 'I' الخاص بسائق المحرك بينما يتم توصيل الدبابيس 12 و 13 من arduino بـ 'J' و 'K'.
  • اردوينو متصل ببطارية 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. بادئ ذي بدء ، نقوم بتهيئة جميع المتغيرات قبل الإعداد الباطل.
  2. في الإعداد الفارغ ، يتم تعيين جميع المسامير التي سيتم استخدامها كمدخلات أو إخراج وفقًا للغرض منها.
  3. تم عمل وظيفة جديدة 'فك باطل ()'. في هذه الوظيفة ، يتم فك تشفير جميع المدخلات الثنائية التي نحصل عليها من DTMF إلى رقم عشري بواسطة اردوينو. والمتغير المخصص لهذه القيمة العشرية هو أ.
  4. وظيفة أخرى هي 'طباعة باطلة ()'. تُستخدم هذه الوظيفة لطباعة قيم الإدخال من دبابيس DTMF.
  5. وبالمثل ، هناك خمس وظائف مطلوبة لأداء المهمة المطلوبة. هذه الوظائف هي:

باطل move_left () // الروبوت يتجه إلى اليسار

باطل move_right () // الروبوت يتحول لليمين

void move_forward () // يتحرك الروبوت للأمام

باطل move_backward () // يتحرك الروبوت للخلف

توقف باطل () // توقف الروبوت

  1. تُستخدم الآن هذه الوظائف في وظيفة الحلقة الفارغة للقيام بمهمتها متى تم استدعاؤها وفقًا للإدخال من لوحة الاتصال بالهاتف المحمول.

على سبيل المثال:::

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

ومن ثم عند الضغط على الزر 2 أو تلقي 0010 على دبابيس الإدخال ، يقوم اردوينو بفك تشفير هذا وبالتالي تقوم هذه الوظائف بعملها: تقدم إلى الأمام()

قراءة()

فك ()

طباعة ()

عمل الدائرة

الضوابط التي استخدمناها في مشروعنا هي كما يلي -

2 - المضي قدما

4 - للانعطاف إلى اليسار

6 - للانعطاف يمينا

8 - التحرك للخلف

0 - للتوقف

بعد إجراء مكالمة للهاتف المتصل بالروبوت ، يفتح الشخص لوحة الاتصال الخاصة به.

  • إذا تم الضغط على '2'. يتلقى DTMF الإدخال ويفك تشفيره برقمه الثنائي المكافئ ، أي '0010' ويرسله إلى دبابيس رقمية في اردوينو. ثم يرسل اردوينو هذا الرمز إلى سائق المحرك كما برمجنا عندما يكون الرمز '0010' ، وستدور المحركات في اتجاه عقارب الساعة ومن ثم يتحرك الروبوت إلى الأمام.
  • إذا تم الضغط على '4' ، فإن الكود المكافئ له هو '0100' ووفقًا للبرمجة ، ستتوقف محركات الجانب الأيسر وستدور محركات الجانب الأيمن فقط في اتجاه عقارب الساعة ، وبالتالي سوف يتجه الروبوت إلى اليسار.
  • إذا تم الضغط على الرقم '6' ، فسيتوقف محرك الجانب الأيمن وستدور محركات الجانب الأيسر فقط في اتجاه عقارب الساعة ، وبالتالي فإن الروبوت الخاص بنا سوف يتحول إلى اليمين.
  • إذا تم الضغط على الرقم '8' ، فإن محركاتنا سوف تدور في عكس اتجاه عقارب الساعة ، وبالتالي فإن الروبوت الخاص بنا سوف يتحرك للخلف.
  • إذا تم الضغط على '0' ، ستتوقف جميع محركاتنا ولن يتحرك الروبوت.

في هذا المشروع قمنا بتعيين وظيفة لخمسة أرقام لوحة اتصال فقط. يمكننا إضافة أي نوع من الآليات الأخرى وتخصيص رقم لوحة اتصال لتلك الآلية لعمل نسخة مطورة من هذا المشروع.

نقاط يجب مراعاتها

1 - يجب ألا يكون المرفاع مفكوكًا.

2 - يجب أن تكون نغمات لوحة مفاتيح الهاتف بحد أقصى.

3 - يجب إغلاق الإنترنت / الواي فاي الخاص بهاتف الاستقبال لتجنب تأثيرات التداخل.

4 - الدبوس الأيسر (مثل الدبوس 'ب') من DTMF هو أرضي والدبوس الأيمن (مثل الدبوس 'أ') متصل بـ 3.3 فولت.

صور نموذجية لدائرة سيارة روبوت يتم التحكم فيها بواسطة الهاتف المحمول باستخدام DTMF
عرض توضيحي بالفيديو لسيارة RC يتم التحكم فيها بواسطة الهاتف المحمول باستخدام DTMF



السابق: مقدمة إلى EEPROM في Arduino التالي: اصنع هذا الروبوت التابع لمشروع معرض العلوم