מכונית רובוט נשלטת בטלפון נייד באמצעות מודול DTMF

נסה את הכלי שלנו לביטול בעיות





בפרויקט זה אנו הולכים לשלוט על רובוט ידני דרך הטלפון הסלולרי שלנו באמצעות מודול DTMF ו- Arduino.

מאת: אנקיט נגי, קנישק גודיאל ונבנייט סינג סאג'ואן



מכונית רובוט נשלטת בטלפון נייד באמצעות מודול DTMF

מבוא

בפרויקט זה משתמשים בשני טלפונים סלולריים, אחד להתקשרות ואחד לקבלת השיחה. הטלפון המקבל את השיחה מחובר לרובוט באמצעות שקע שמע.

האדם שמתקשר יכול לשלוט ברובוט רק על ידי לחיצה על מקשי לוח החיוג. (כלומר, ניתן להפעיל את הרובוט מכל פינה בעולם).



רכיבים נדרשים

1 - ארדואינו UNO

2 - רובוט ידני

3 - 4 מנועים (כאן השתמשנו 300 סל'ד כל אחד)

4 - מודול DTMF

5 - נהג מוטורי

6 - 12 וולט סוללה

7 - מתג

8 - שקע לאוזניות

9 - שני טלפונים סלולריים

10 - חוטי חיבור

אודות רובוט ידני

רובוט ידני מורכב משלדה (מרכב) בה ניתן לחבר שלושה או ארבעה מנועים (המוברגים בצמיגים) בהתאם לדרישה.

מנועים לשימוש תלויים בדרישה שלנו כלומר הם יכולים לספק מהירות גבוהה או מומנט גבוה או שילוב טוב של שניהם. יישומים כמו quad copter דורשים מנועים במהירות גבוהה מאוד כדי להרים כנגד כוח המשיכה ואילו יישום כמו הזזת זרוע מכנית או טיפוס במדרון תלול דורש מנועים מומנט גבוה.

שני המנועים בצד שמאל וימין של הרובוט מחוברים במקביל בנפרד. בדרך כלל הם מחוברים לסוללת 12 וולט באמצעות מתגי DPDT (כפול סיכה כפולה).

אך בפרויקט זה נשתמש בטלפון הנייד במקום ב- DPDT כדי לשלוט בבוט.

אודות נהג מנועים

Arduino נותן זרם מרבי של 40mA באמצעות סיכות GPIO (פלט קלט למטרות כלליות), בעוד שהוא נותן 200mA באמצעות Vcc וקרקע.

מנועים דורשים זרם גדול להפעלה. איננו יכולים להשתמש בארדואינו ישירות להפעלת המנועים שלנו ולכן אנו משתמשים במנהל מנוע.

נהג מנוע מכיל H Bridge (שהוא שילוב של טרנזיסטורים). ה- IC (L298) של נהג המנוע מונע על ידי 5v המסופק על ידי ארדואינו.

כדי להניע את המנועים, נדרש קלט של 12 וולט מארדואינו המסופק בסופו של דבר על ידי סוללת 12 וולט. אז הארדואינו פשוט לוקח כוח מהסוללה ונותן לנהג המנוע.

זה מאפשר לנו לשלוט במהירות ובכיוון של מנועים על ידי מתן זרם מקסימלי של 2 אמפר.

מבוא למודול DTMF

DTMF מייצג תדר רב טון כפול. לוח החיוג שלנו הוא תדר מרובה של שני טונרים כלומר כפתור אחד נותן תערובת של שני גוונים בעלי תדר שונה.

צליל אחד נוצר מקבוצת צלילים בתדירות גבוהה ואילו אחר מקבוצת תדרים נמוכה. זה נעשה כך שכל סוג של קול לא יכול לחקות את הטונים.

לכן, הוא פשוט מפענח את קלט לוח המקשים לטלפון לקוד בינארי עם ארבעה סיביות. התדרים של מספרי המקשים בהם השתמשנו בפרויקט שלנו מוצגים בטבלה שלהלן

תדר 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) שנלקח מארדואינו (5v).
  • סיכה 'F' היא קרקע.
  • Pin 'G' לוקח 12 וולט כוח מהסוללה דרך Vin pin של arduino.
  • סיכות 'H', 'אני', 'J' ו- 'K' מקבלות היגיון מארדואינו.

DTMF -

  • סיכה 'a' מחוברת ל -3.5 וולט של ארדואינו להפעלת ה- IC (SC9270D).
  • סיכה 'ב' מחוברת לקרקע.
  • הקלט של DTMF נלקח מהטלפון באמצעות שקע.
  • הפלט בצורה של נתונים בינאריים באמצעות סיכות (D0 - D3) עובר לארדואינו.

ארדו -

  • הפלט של DTMF מסיכות (D0 - D3) מגיע לסיכות דיגיטליות של ארדואינו. אנו יכולים לחבר פלט זה לכל אחד מארבעת הפינים הדיגיטליים המשתנים מ (2 - 13) בארדואינו. כאן השתמשנו בסיכות 8, 9, 10 ו -11.
  • סיכות דיגיטליות 2 ו -3 של ארדואינו מחוברות למספר סיכה 'H' ו- 'I' של נהג המנוע ואילו סיכות 12 ו -13 של ארדואינו מחוברות ל 'J' ו- 'K'.
  • הארדואינו מחובר לסוללת 12 וולט.

תכנית CODE-

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 מפוענח לעשרוני על ידי ארדואינו. ומשתנה שהוקצה לערך עשרוני זה הוא a.
  4. מתבצעת פונקציה נוספת 'הדפסה בטלה ()'. פונקציה זו משמשת להדפסת ערכי קלט מסיכות DTMF.
  5. באופן דומה, חמש פונקציות הן פונקציות נדרשות לביצוע המשימה הנדרשת. פונקציות אלה הן:

בטל move_left () // רובוט פונה שמאלה

בטל move_right () // הרובוט פונה ימינה

בטל 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 - יש לסגור את האינטרנט / Wi-Fi של הטלפון המקבל כדי למנוע אפקטים של הפרעות.

4 - סיכה שמאלית (כלומר סיכה 'b') של DTMF היא קרקע וסיכה ימנית (כלומר סיכה 'a') מחוברת ל -3.3 v.

תמונות אב טיפוס של מעגל מכוניות הרובוט הנשלט באמצעות הטלפון הסלולרי באמצעות DTMF
הדגמת וידאו של מכונית RC נשלטת באמצעות הטלפון הסלולרי באמצעות DTMF



קודם: מבוא ל- EEPROM בארדואינו הבא: הפוך את הרובוט לעוקב הקו הזה לפרויקט יריד מדע