- ส่วนประกอบที่ต้องการ:
- แผนภูมิวงจรรวม:
- ไมโครคอนโทรลเลอร์ 8051:
- HC-05 โมดูลบลูทู ธ :
- L293D มอเตอร์ขับ IC:
- การทำงานของหุ่นยนต์ควบคุมโทรศัพท์ Android:
- คำอธิบายรหัส:
ในโครงการนี้เราจะสร้างหุ่นยนต์ควบคุมโทรศัพท์ Android โดยใช้ไมโครคอนโทรลเลอร์ 8051และโมดูลบลูทู ธ หุ่นยนต์ได้รับการออกแบบโดยใช้มอเตอร์กระแสตรงและทิศทางของมอเตอร์กระแสตรงจะถูกควบคุมโดยคำสั่งที่ได้รับจากแอปพลิเคชัน Android สถานะของหุ่นยนต์จะถูกส่งกลับไปที่แอป Android โครงการนี้จะช่วยในการเชื่อมต่อโมดูลบลูทู ธ HC-05 กับไมโครคอนโทรลเลอร์ 8051 เราใช้โมดูลบลูทู ธ เพื่อควบคุมเครื่องใช้ภายในบ้านด้วย 8051 แล้ว
ส่วนประกอบที่ต้องการ:
- ไมโครคอนโทรลเลอร์ 8051 (AT89S52)
- โมดูลบลูทู ธ HC-05
- L293D ขับมอเตอร์
- แชสซีหุ่นยนต์
- มอเตอร์กระแสตรง (2)
- ล้อ (2)
- ล้อเลื่อน
- สายจัมเปอร์
- แอพ Android Terminal Bluetooth
แผนภูมิวงจรรวม:
ไมโครคอนโทรลเลอร์ 8051:
ไมโครคอนโทรลเลอร์ 8051 เป็นไมโครคอนโทรลเลอร์ 8 บิตซึ่งมี 128 ไบต์บนชิป RAM, 4K ไบต์ของชิป ROM, ตัวจับเวลาสองตัว, พอร์ตอนุกรมหนึ่งพอร์ตและพอร์ต 8 บิตสี่พอร์ต ไมโครคอนโทรลเลอร์ 8052 เป็นส่วนขยายของไมโครคอนโทรลเลอร์ 8051 ในโครงการนี้เราใช้ไมโครคอนโทรลเลอร์AT89S52 ตารางด้านล่างแสดงการเปรียบเทียบสมาชิกในครอบครัว 8051 คน
ลักษณะเฉพาะ |
8051 |
8052 |
ROM (เป็นไบต์) |
4K |
8K |
RAM (ไบต์) |
128 |
256 |
ตัวจับเวลา |
2 |
3 |
หมุด I / O |
32 |
32 |
พอร์ตอนุกรม |
1 |
1 |
ขัดจังหวะแหล่งที่มา |
6 |
8 |
HC-05 โมดูลบลูทู ธ:
HC-05 เป็นโมดูลบลูทู ธ แบบอนุกรม สามารถกำหนดค่าได้โดยใช้คำสั่ง AT สามารถทำงานในการกำหนดค่าที่แตกต่างกันสามแบบ (Master, Slave, Loop back) ในโครงการของเราเราจะใช้มันเป็นทาส คุณสมบัติของโมดูล HC-05 ประกอบด้วย
- ความไว -80dBm ทั่วไป
- อัตราการส่งข้อมูลเริ่มต้น: 9600bps, 8 บิตข้อมูล, 1 บิตหยุด, ไม่มีความเท่าเทียมกัน
- รหัสพินจับคู่อัตโนมัติ: รหัสพินเริ่มต้น“ 1234”
- มี 6 พิน
- หมุด Vcc และ Gnd ใช้สำหรับเปิดเครื่อง HC-05
- หมุด Tx และ Rx ใช้สำหรับสื่อสารกับไมโครคอนโทรลเลอร์
- เปิดใช้งานพินเพื่อเปิดใช้งานโมดูล HC-05 เมื่ออยู่ในระดับต่ำโมดูลจะถูกปิดใช้งาน
- หมุดสถานะทำหน้าที่แสดงสถานะ เมื่อไม่ได้จับคู่ / เชื่อมต่อกับอุปกรณ์ Bluetooth อื่นไฟ LED จะกะพริบอย่างต่อเนื่อง เมื่อเชื่อมต่อ / จับคู่กับอุปกรณ์ Bluetooth อื่น ๆ แล้วไฟ LED จะกะพริบพร้อมกับความล่าช้าคงที่ 2 วินาที
L293D มอเตอร์ขับ IC:
L293D เป็นไอซีขับมอเตอร์สะพาน H คู่ ทำหน้าที่เป็นแอมพลิฟายเออร์ปัจจุบันเอาต์พุตของ L293D ขับเคลื่อน DC Motors ประกอบด้วยวงจร H-bridge ในตัวสองวงจร ในโหมดการทำงานทั่วไปสามารถขับเคลื่อนมอเตอร์ dc สองตัวพร้อมกันได้ทั้งสองทิศทาง ตารางด้านล่างแสดงคำอธิบายพินของ L293D IC นี่คือโครงการบางส่วนที่ใช้ L293D Motor Driver
คำอธิบายพิน
หมายเลขพิน |
ชื่อ |
ฟังก์ชัน |
1 |
เปิดใช้งาน 1,2 |
เปิดใช้งานพินสำหรับมอเตอร์ 1 |
2 |
อินพุต 1 |
อินพุต 1 สำหรับมอเตอร์ 1 |
3 |
เอาต์พุต 1 |
เอาต์พุต 1 สำหรับมอเตอร์ 1 |
4 |
Gnd |
กราวด์ (0V) |
5 |
Gnd |
กราวด์ (0V) |
6 |
เอาต์พุต 2 |
เอาต์พุต 2 สำหรับมอเตอร์ 1 |
7 |
อินพุต 2 |
อินพุต 2 สำหรับมอเตอร์ 1 |
8 |
Vcc 2 |
แรงดันไฟฟ้าสำหรับมอเตอร์ (5V) |
9 |
เปิดใช้งาน 3,4 |
เปิดใช้งานพินสำหรับมอเตอร์ 1 |
10 |
อินพุต 3 |
อินพุต 1 สำหรับมอเตอร์ 2 |
11 |
เอาต์พุต 4 |
เอาต์พุต 1 สำหรับมอเตอร์ 2 |
12 |
Gnd |
กราวด์ (0V) |
13 |
Gnd |
กราวด์ (0V) |
14 |
เอาต์พุต 4 |
เอาต์พุต 2 สำหรับมอเตอร์ 2 |
15 |
อินพุต 4 |
อินพุต 2 สำหรับมอเตอร์ 2 |
16 |
Vcc 1 |
แรงดันไฟฟ้า (5V) |
การทำงานของหุ่นยนต์ควบคุมโทรศัพท์ Android:
ในหุ่นยนต์ควบคุมสมาร์ทโฟนนี้ผู้ใช้แอพ android จะส่งข้อมูลไปยังไมโครคอนโทรลเลอร์ 8051 ผ่านโมดูล HC-05 ข้อมูลที่ได้รับจะถูกเปรียบเทียบในไมโครคอนโทรลเลอร์ 8051 และทำการตัดสินใจตามนั้น ตารางด้านล่างแสดงทิศทางของมอเตอร์และสถานะของหุ่นยนต์สำหรับอักขระที่ได้รับที่แตกต่างกัน
ตัวละครที่ได้รับ |
มอเตอร์ 1 |
มอเตอร์ 2 |
สถานะของหุ่นยนต์ |
ฉ |
ส่งต่อ |
ส่งต่อ |
เลื่อนไปข้างหน้า |
ข |
ย้อนกลับ |
ย้อนกลับ |
เลื่อนไปข้างหลัง |
ร |
ส่งต่อ |
ย้อนกลับ |
เลื่อนไปทางขวา |
ล |
ย้อนกลับ |
ส่งต่อ |
เลื่อนไปทางซ้าย |
s |
ปิด |
ปิด |
หยุดแล้ว |
สถานีบลูทู ธ app ที่ช่วยให้เราที่จะเลียนแบบสถานีบลูทู ธ แอพนี้รองรับการสื่อสารแบบสองทิศทางและแอพนี้เข้ากันได้กับอุปกรณ์ส่วนใหญ่
ขั้นตอนด้านล่างแสดงวิธีการติดตั้งและใช้แอพนี้
1. ดาวน์โหลดและติดตั้งแอพเทอร์มินัลบลูทู ธ บนโทรศัพท์ Android ของคุณ สามารถดาวน์โหลดแอพได้จากลิงค์ด้านล่าง
play.google.com/store/apps/details?id=ptah.apps.bluetoothterminal
2. หลังจากติดตั้งแอพแล้วให้เปิดแอพและเปิดบลูทู ธ
3. เลือกอุปกรณ์และคลิกที่ตัวเลือกเชื่อมต่อ หลังจากเชื่อมต่อสำเร็จเราสามารถเริ่มส่งข้อมูลไปยังโมดูล HC-05
ตรวจสอบคำอธิบายรหัสด้านล่างเพื่อดูว่าอักขระถูกส่งและรับโดยไมโครคอนโทรลเลอร์ 8051 เพื่อหมุนมอเตอร์ที่ต้องการอย่างไร
คำอธิบายรหัส:
โปรแกรม Cฉบับสมบูรณ์และวิดีโอสาธิตสำหรับโครงการนี้มีให้ในตอนท้ายของโครงการนี้ รหัสจะแบ่งออกเป็นส่วนเล็ก ๆ ที่มีความหมายและอธิบายไว้ด้านล่าง
สำหรับL293D ที่เชื่อมต่อกับไมโครคอนโทรลเลอร์ 8051เราต้องกำหนดพินที่ L293D เชื่อมต่อกับไมโครคอนโทรลเลอร์ 8051 ขาเข้า 1 ขาของมอเตอร์ 1 เชื่อมต่อกับ P2.0, ขาเข้า 2 ของมอเตอร์ 1 เชื่อมต่อกับ P2.1, ขาเข้า 1 ของมอเตอร์ 2 เชื่อมต่อกับ P2.2, ขาเข้า 2 ของมอเตอร์ 2 เชื่อมต่อกับ P2.3
sbit m1f = P2 ^ 0; // in1 พินของ motor1 sbit m1b = P2 ^ 1; // ขาเข้า 2 ขาของ motor1 sbit m2f = P2 ^ 2; // in1 พินของ motor2 sbit m2b = P2 ^ 3; // ขาเข้า 2 ขาของมอเตอร์ 2
ต่อไปเราจะต้องกำหนดฟังก์ชั่นบางอย่างที่ใช้ในโปรแกรม ฟังก์ชัน Delay ใช้เพื่อสร้างการหน่วงเวลาที่ระบุ ฟังก์ชัน Txdata ใช้ในการส่งข้อมูลผ่านพอร์ตอนุกรม ฟังก์ชัน Rxdata ใช้เพื่อรับข้อมูลจากพอร์ตอนุกรม
ความล่าช้าเป็นโมฆะ (int ไม่ได้ลงนาม); // ฟังก์ชันสำหรับสร้างการหน่วงเวลาถ่าน rxdata (โมฆะ); // ฟังก์ชั่นรับอักขระผ่านพอร์ตอนุกรมของ 8051 void txdata (ถ่านที่ไม่ได้ลงชื่อ); // ฟังก์ชันสำหรับส่งอักขระผ่านพอร์ตอนุกรม 8051
ในส่วนของรหัสนี้เราจะไปกำหนดค่า 8051 ไมโครคอนโทรลเลอร์สำหรับการสื่อสารแบบอนุกรม TMOD register ถูกโหลดด้วย 0x20 สำหรับตัวจับเวลา 1, โหมด 2 (โหลดอัตโนมัติ) SCON register โหลดด้วย 0x50 สำหรับ 8 data bits, 1 stop bit และเปิดใช้งาน TH1 register โหลดด้วย 0xfd สำหรับอัตราการส่งข้อมูลที่ 9600 บิตต่อวินาที TR1 = 1 ใช้เพื่อเริ่มจับเวลา
TMOD = 0x20; SCON = 0x50; TH1 = 0xfd; TR1 = 1; ในส่วนนี้ของรหัสอักขระที่ส่งคืนของฟังก์ชัน rxdata จะถูกเก็บไว้ในตัวแปร "s" เพื่อใช้งานต่อไป
s = rxdata (); // รับข้อมูลอนุกรมจากโมดูลบลูทู ธ hc-05
ในส่วนนี้ของรหัสเราต้องเปรียบเทียบอักขระที่ได้รับกับอักขระที่กำหนดไว้ล่วงหน้าสำหรับทิศทางต่างๆ หากตัวละครที่ได้รับคือ 'f' หุ่นยนต์จะต้องเคลื่อนที่ไปข้างหน้า สิ่งนี้ทำได้โดยการทำหมุด m1f, m2f ให้ สูงและ m1b, หมุด m2b ต่ำ เมื่อเสร็จแล้วต่อไปเราจะต้องส่งสถานะของหุ่นยนต์ไปยังแอพ android สิ่งนี้ทำได้ด้วยความช่วยเหลือของฟังก์ชัน txdata กระบวนการเดียวกันนี้ซ้ำแล้วซ้ำอีกสำหรับตัวละครต่างๆที่ได้รับและการตัดสินใจจะดำเนินการตามนั้น ตารางที่ 1 แสดงค่าต่างๆของ m1f, m1b, m2f, m2b สำหรับทิศทางต่างๆของการเคลื่อนที่ของหุ่นยนต์
ถ้า (s == 'f') // เลื่อนมอเตอร์ทั้งสองไปข้างหน้า {m1f = 1; ล่าช้า (1); m1b = 0; ล่าช้า (1); m2f = 1; ล่าช้า (1); m2b = 0; ล่าช้า (1); สำหรับ (i = 0; msg1! = '\ 0'; i ++) // ส่งสถานะของหุ่นยนต์ไปยังแอป Android ผ่านบลูทู ธ {txdata (msg1); }}
m1f |
m1b |
m2f |
ตรม |
มอเตอร์ 1 หมุน |
มอเตอร์ 2 หมุน |
สถานะของหุ่นยนต์ |
1 |
0 |
1 |
0 |
ไปข้างหน้า |
ไปข้างหน้า |
ก้าวไปข้างหน้า |
0 |
1 |
0 |
1 |
ย้อนกลับ |
ย้อนกลับ |
ย้ายไปข้างหลัง |
1 |
0 |
0 |
1 |
ไปข้างหน้า |
ย้อนกลับ |
ย้ายไปทางขวา |
0 |
1 |
1 |
0 |
ย้อนกลับ |
ไปข้างหน้า |
เลื่อนไปทางซ้าย |
0 |
0 |
0 |
0 |
หยุด |
หยุด |
หยุด |
นี่คือคุณสามารถหมุนรถ Robot ไปในทิศทางใดก็ได้โดยควบคุมมอเตอร์ทั้งสี่ตัวโดยใช้ไมโครคอนโทรลเลอร์8051 หุ่นยนต์นี้สามารถควบคุมได้โดยใช้ DTMF กับ 8051 หากคุณไม่มีโทรศัพท์ Android
ตรวจสอบโครงการ Robotics ทั้งหมดได้ที่นี่