![การติดตามแสงและหลีกเลี่ยงหุ่นยนต์ตาม Arduino: 5 ขั้นตอน การติดตามแสงและหลีกเลี่ยงหุ่นยนต์ตาม Arduino: 5 ขั้นตอน](https://img.gwsigeps.com/img/circuits/light-following-and-avoiding-robot-based-on-arduino-2.jpg)
สารบัญ:
- วัสดุ:
- ขั้นตอนที่ 1: รหัส Ardunio
- ขั้นตอนที่ 2: ไฟล์ Proteus
- ขั้นตอนที่ 3: H-bridge ของคุณทำงานอย่างไร
- ขั้นตอนที่ 4: การทำงานของ LDR
- ขั้นตอนที่ 5:
นี่เป็นโครงการง่ายๆที่ติดตามหรือหลีกเลี่ยงแสง
ฉันสร้างแบบจำลองนี้ใน Proteus 8.6 pro
ส่วนประกอบที่จำเป็น: -
1) Arduino uno
2) 3 LDR
3) 2 Dc Gear Motors
4) เซอร์โวหนึ่งอัน
5) ตัวต้านทาน 1k สามตัว
6) หนึ่ง H-Bridge l290D
7) สวิตช์เปิด & ปิดหนึ่งครั้ง สำหรับเงื่อนไขการเปลี่ยนแปลงของโปรแกรม
8) Battry 9v และ 5v
วัสดุ:
ขั้นตอนที่ 1: รหัส Ardunio
ปรับปรุง: _
รหัส Arduino ได้รับการแก้ไขวันที่ 23 กุมภาพันธ์ 2559
หลักจรรยาบรรณนี้แสดงความคิดเห็นเป็นอย่างมากฉันไม่ต้องการอธิบาย แต่หากคุณต้องการความช่วยเหลือโปรดติดต่อฉันได้ที่ ([email protected])
บันทึก:-
ฉันใช้สองเงื่อนไขในโปรแกรมนี้
อันดับที่ 1 สำหรับการติดตามแสง
อันที่สองสำหรับการหลีกเลี่ยงแสง
เท่าที่เงื่อนไขเหล่านี้พอใจหุ่นยนต์จะติดตามหรือหลีกเลี่ยงแสง
นี่คือค่าต่ำสุดของ LDR ที่ฉันเลือก โดยทั่วไปแล้วแสงจะอยู่ในช่วง 80 ถึง 95 แต่เมื่อความเข้มแสงเพิ่มขึ้นจะทำให้เกิดแรงกระตุ้นเพิ่มขึ้นเนื่องจากทำงานบนหลักการของตัวแบ่งแรงดันไฟฟ้า
int a = 400; // ค่าความคลาดเคลื่อน
ขั้นตอนที่ 2: ไฟล์ Proteus
สำหรับ Arduino Library ดาวน์โหลดจากลิงค์นั้น
ขั้นตอนที่ 3: H-bridge ของคุณทำงานอย่างไร
L293NE / SN754410 เป็น H-bridge ที่ธรรมดามาก มันมีสะพานสองแห่งสะพานหนึ่งอยู่ทางด้านซ้ายของชิปและอีกสะพานอยู่ทางขวาและสามารถควบคุมมอเตอร์ได้ 2 ตัว สามารถขับกระแสได้สูงสุด 1 แอมป์และทำงานระหว่าง 4.5V ถึง 36V มอเตอร์กระแสตรงขนาดเล็กที่คุณใช้ในห้องปฏิบัติการนี้สามารถทำงานได้อย่างปลอดภัยจากแรงดันไฟฟ้าต่ำดังนั้นสะพาน H นี้จะทำงานได้ดี H-bridge มีพินและฟีเจอร์ดังต่อไปนี้: Pin 1 (1,2EN) เปิดใช้งานและปิดใช้งานมอเตอร์ของเราไม่ว่าจะให้ HIGH หรือ LOWPin 2 (1A) เป็นลอจิกแบบพินสำหรับมอเตอร์ของเรา (อินพุตเป็น PIN สูงหรือต่ำ) 3 (1Y) สำหรับเทอร์มินอลมอเตอร์พิน 4-5 สำหรับพินที่พิน 6 (2Y) สำหรับเทอร์มินัลมอเตอร์อื่นพิน 7 (2A) เป็นลอจิกพินสำหรับมอเตอร์ของเรา (อินพุตมีค่าสูงหรือต่ำ) Pin 8 (VCC2) เป็นแหล่งจ่ายไฟสำหรับมอเตอร์ของเราซึ่งควรได้รับแรงดันไฟฟ้าสูงสุดของมอเตอร์พิน 9-11 ของคุณซึ่งไม่ได้เชื่อมต่อเนื่องจากคุณใช้มอเตอร์เพียงหนึ่งตัวในแล็บนี้พิน 12-13 สำหรับกราวด์ 14-15 จะไม่เชื่อมต่อพิน 16 (VCC1) เชื่อมต่อกับ 5V. ข้างต้นเป็นไดอะแกรมของ H-bridge และหมุดที่ทำในตัวอย่างของเรา ที่มาพร้อมกับไดอะแกรมเป็นตารางความจริงที่ระบุว่ามอเตอร์จะทำงานอย่างไรตามสถานะของลอจิกพิน (ซึ่งถูกตั้งค่าโดย Arduino ของเรา)
ในโครงการนี้หมุดเปิดใช้งานเชื่อมต่อกับหมุดดิจิตอลบน Arduino ของคุณเพื่อให้คุณสามารถส่งได้ทั้งสูงหรือต่ำและเปิดหรือปิดมอเตอร์ ลอจิกมอเตอร์ยังเชื่อมต่อกับหมุดดิจิทัลที่กำหนดบน Arduino ของคุณเพื่อให้คุณสามารถส่ง HIGH และ LOW เพื่อให้มอเตอร์หมุนไปในทิศทางเดียวหรือ LOW และ HIGH เพื่อหมุนในทิศทางอื่น แรงดันไฟฟ้าของมอเตอร์เชื่อมต่อกับแหล่งจ่ายแรงดันไฟฟ้าของมอเตอร์ซึ่งโดยปกติจะเป็นแหล่งจ่ายไฟภายนอก หากมอเตอร์ของคุณสามารถทำงานบน 5V และน้อยกว่า 500mA คุณสามารถใช้เอาต์พุต 5V ของ Arduino มอเตอร์ส่วนใหญ่ต้องการแรงดันไฟฟ้าที่สูงขึ้นและกระแสไฟดึงที่สูงกว่านี้ดังนั้นคุณจะต้องใช้แหล่งจ่ายไฟภายนอก
เชื่อมต่อมอเตอร์เข้ากับ H-bridge เชื่อมต่อมอเตอร์เข้ากับ H-bridge ดังแสดงในรูปที่ 2
หรือถ้าคุณใช้แหล่งจ่ายไฟภายนอกสำหรับ Arduino คุณสามารถใช้ Vin pin
ขั้นตอนที่ 4: การทำงานของ LDR
ตอนนี้สิ่งแรกที่อาจต้องการคำอธิบายเพิ่มเติมคือการใช้ตัวต้านทานแบบพึ่งพาแสง ตัวต้านทานการพึ่งพาแสง (หรือ LDR's) เป็นตัวต้านทานที่มีการเปลี่ยนแปลงค่าขึ้นอยู่กับปริมาณของแสงรอบข้าง แต่เราจะตรวจจับความต้านทานกับ Arduino ได้อย่างไร คุณไม่สามารถทำได้จริง ๆ แต่คุณสามารถตรวจจับระดับแรงดันไฟฟ้าโดยใช้หมุดแบบแอนะล็อกซึ่งสามารถวัด (ใช้งานพื้นฐาน) ระหว่าง 0-5V ตอนนี้คุณอาจถามว่า "เราจะแปลงค่าความต้านทานเป็นการเปลี่ยนแปลงแรงดันไฟฟ้าได้อย่างไร" มันง่ายมากเราสร้างตัวแบ่งแรงดัน ตัวแบ่งแรงดันจะใช้แรงดันแล้วส่งออกเศษส่วนของแรงดันนั้นตามสัดส่วนของแรงดันอินพุตและอัตราส่วนของค่าตัวต้านทานสองตัวที่ใช้ สมการที่:
แรงดันไฟฟ้าขาออก = แรงดันไฟฟ้าขาเข้า * (R2 / (R1 + R2)) โดยที่ R1 คือค่าของตัวต้านทานตัวแรกและ R2 คือค่าที่สอง
ตอนนี้ยังคงถามคำถาม“ แต่ LDR มีค่าความต้านทานเท่าใด?” เป็นคำถามที่ดี
ปริมาณของแสงรอบข้างที่น้อยลงความต้านทานที่สูงกว่าแสงโดยรอบที่มากขึ้นหมายถึงความต้านทานที่ลดลง ตอนนี้สำหรับ LDR ที่เจาะจงฉันใช้ช่วงความต้านทานของพวกเขาอยู่ที่ 200 - 10 กิโลโอห์ม แต่การเปลี่ยนแปลงนี้สำหรับคนที่แตกต่างกันดังนั้นอย่าลืมดูที่ที่คุณซื้อพวกเขาจากนั้นลองหาแผ่นข้อมูลหรืออะไรก็ได้ กรณี R1 คือ LDR ของเราดังนั้นเราจะนำสมการนั้นกลับมาและทำคณิตศาสตร์ - อี - เวทย์มนตร์ (เวทย์มนตร์ทางคณิตศาสตร์ทางไฟฟ้า) ตอนนี้ก่อนอื่นเราต้องแปลงค่ากิโลโอห์มเป็นโอห์ม:
200 kilo-ohms = 200,000 ohms 10 kilo-ohms = 10,000 ohms
เพื่อหาว่าแรงดันไฟฟ้าขาออกคืออะไรเมื่อเราอยู่ในระยะพิทซ์ดำเราจึงทำการเสียบตัวเลขต่อไปนี้:
5 * (10000 / (200000 + 10000))
อินพุตเป็น 5V เนื่องจากเป็นสิ่งที่เราได้รับจาก Arduino
ด้านบนให้ 0.24V (ปัดเศษ) ตอนนี้เราจะพบว่าแรงดันเอาต์พุตอยู่ในความสว่างสูงสุดโดยใช้ตัวเลขต่อไปนี้: 5 * (10000 / (10000 + 10,000)) และนี่คือ 2.5V แน่นอน
ดังนั้นนี่คือค่าแรงดันไฟฟ้าที่เราจะเข้าสู่หมุดแบบอะนาล็อกของ Arduino แต่นี่ไม่ใช่ค่าที่จะเห็นได้ในโปรแกรม "แต่ทำไม" คุณอาจถาม
Arduino ใช้ชิปอนาล็อกเป็นดิจิตอลซึ่งแปลงแรงดันไฟฟ้าอนาล็อกเป็นข้อมูลดิจิตอลที่ใช้งานได้ ซึ่งแตกต่างจากพินดิจิตอลบน Arduino ที่สามารถอ่านสถานะ HIGH หรือ LOW เป็น 0 และ 5V หมุดอะนาล็อกสามารถอ่านได้ตั้งแต่ 0-5V และแปลงเป็นช่วงจำนวน 0-1023 ตอนนี้มี math-e-magic.
เราสามารถคำนวณค่าที่ Arduino จะอ่านได้จริง
เนื่องจากนี่จะเป็นฟังก์ชันเชิงเส้นเราสามารถใช้สูตรต่อไปนี้: Y = mX + C
ไหน; Y = ค่าดิจิตอลอยู่ที่ไหน; m = ความชัน, (เพิ่มขึ้น / เรียกใช้), (ค่าดิจิทัล / ค่าอะนาล็อก) ที่ไหน; C = Y intercept จุดตัดแกน Y คือ 0 นั่นทำให้เรา: Y = mXm = 1023/5 = 204.6 ดังนั้น: ค่าดิจิตอล = 204.6 * ค่าอนาล็อกดังนั้นในระดับสีดำค่าดิจิตอลจะเท่ากับ: 204.6 * 0.24
ซึ่งให้ประมาณ 49 และในความสว่างสูงสุดจะเป็น: 204.6 * 2.5
ซึ่งให้ประมาณ 511
ขณะนี้มีการตั้งค่าเหล่านี้สองตัวบนหมุดแบบอะนาล็อกสองตัวเราสามารถสร้างตัวแปรจำนวนเต็มสองตัวเพื่อเก็บค่าของพวกเขาสองตัวและทำการเปรียบเทียบตัวดำเนินการเพื่อดูว่าอันใดมีค่าต่ำสุด