รถหุ่นยนต์ควบคุมโทรศัพท์มือถือโดยใช้โมดูล 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 - การเชื่อมต่อสายไฟ

เกี่ยวกับ MANUAL ROBOT

หุ่นยนต์แมนนวลประกอบด้วยแชสซี (ตัวถัง) ซึ่งสามารถติดมอเตอร์สามหรือสี่ตัว (ซึ่งขันสกรูด้วยยาง) ได้ขึ้นอยู่กับความต้องการ

มอเตอร์ที่จะใช้ขึ้นอยู่กับความต้องการของเรานั่นคือสามารถให้ความเร็วสูงหรือแรงบิดสูงหรือทั้งสองอย่างที่เหมาะสม การใช้งานเช่นควอดคอปเตอร์ต้องใช้มอเตอร์ความเร็วสูงมากเพื่อยกต้านแรงโน้มถ่วงในขณะที่การใช้งานเช่นการขยับแขนกลหรือการขึ้นทางลาดชันต้องใช้มอเตอร์แรงบิดสูง

มอเตอร์ทั้งสองตัวทางด้านซ้ายและด้านขวาของหุ่นยนต์เชื่อมต่อแบบขนานแยกกัน โดยปกติจะเชื่อมต่อกับแบตเตอรี่ 12volt ผ่านสวิตช์ DPDT (double pin double throw)

แต่ในโครงการนี้เราจะใช้โทรศัพท์มือถือแทน DPDT เพื่อควบคุมบอท

เกี่ยวกับตัวขับมอเตอร์

Arduino ให้กระแสสูงสุด 40mA โดยใช้พิน GPIO (อินพุตเอาต์พุตวัตถุประสงค์ทั่วไป) ในขณะที่ให้ 200mA โดยใช้ 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

แผนภูมิวงจรรวม

การเชื่อมต่อ

ตัวขับมอเตอร์ -

  • Pin 'A' และ 'B' ควบคุมมอเตอร์ด้านซ้ายในขณะที่ Pin 'C' และ 'D' ควบคุมด้านขวาของมอเตอร์ หมุดทั้งสี่นี้เชื่อมต่อกับมอเตอร์ทั้งสี่ตัว
  • Pin ‘E’ คือการจ่ายไฟ IC (L298) ซึ่งนำมาจาก arduino (5v)
  • หมุด 'F' เป็นกราวด์
  • Pin 'G' ใช้พลังงาน 12 โวลต์จากแบตเตอรี่ผ่านขา Vin ของ arduino
  • Pins 'H', 'I', 'J' และ 'K' รับลอจิกจาก arduino

DTMF -

  • พิน 'a' เชื่อมต่อกับ 3.5 โวลต์ของ arduino เพื่อจ่ายไฟให้กับ IC (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. ก่อนอื่นเราเริ่มต้นตัวแปรทั้งหมดก่อนการตั้งค่าเป็นโมฆะ
  2. ในการตั้งค่าเป็นโมฆะพินทั้งหมดที่จะใช้จะถูกกำหนดให้เป็นอินพุตหรือเอาต์พุตตามวัตถุประสงค์
  3. มีการสร้างฟังก์ชันใหม่“ การถอดรหัสโมฆะ ()” ในฟังก์ชันนี้อินพุตไบนารีทั้งหมดที่เราได้รับจาก DTMF จะถูกถอดรหัสเป็นทศนิยมโดย arduino และตัวแปรที่กำหนดสำหรับค่าทศนิยมนี้คือ a.
  4. ฟังก์ชันอื่น“ การพิมพ์เป็นโมฆะ ()” ถูกสร้างขึ้น ฟังก์ชันนี้ใช้เพื่อพิมพ์ค่าอินพุตจากพิน DTMF
  5. ในทำนองเดียวกันฟังก์ชันที่จำเป็นต้องมีห้าฟังก์ชันเพื่อทำงานที่ต้องการ ฟังก์ชันเหล่านี้ ได้แก่ :

โมฆะ move_left () // หุ่นยนต์เลี้ยวซ้าย

โมฆะ move_right () // หุ่นยนต์เลี้ยวขวา

โมฆะ move_forward () // หุ่นยนต์เคลื่อนที่ไปข้างหน้า

โมฆะ move_backward () // หุ่นยนต์เคลื่อนที่ไปข้างหลัง

เป็นโมฆะ halt () // หุ่นยนต์หยุด

  1. ตอนนี้ฟังก์ชันเหล่านี้ถูกใช้ในฟังก์ชัน void loop เพื่อทำงานเมื่อใดก็ตามที่มีการเรียกใช้ตามอินพุตจากแป้นกดของโทรศัพท์มือถือ

ตัวอย่างเช่น:::

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 ถัดไป: สร้าง Line Follower Robot สำหรับโครงการ Science Fair