เซ็นเซอร์อุปสรรค Arduino IR เซ็นเซอร์อินฟราเรดอย่างง่าย การเชื่อมต่อกับ Arduino

ในการทบทวนนี้ เราจะตรวจสอบและทดสอบโมดูลเซ็นเซอร์สิ่งกีดขวางอินฟราเรดที่กำหนด MH-B โมดูลนี้สร้างขึ้นจากเครื่องเปรียบเทียบคู่ LM393

มีการสั่งซื้อในร้านค้าออนไลน์ของจีน Aliexpress เซ็นเซอร์มีราคาประมาณ 20 รูเบิล:

สินค้าถูกส่งไปยังจอร์เจียโดยไม่เสียค่าใช้จ่ายโดย บริษัท "4PX สิงคโปร์โพสต์ OM Pro" ในแพ็คเกจมาตรฐาน:

แผงโมดูลถูกปิดผนึกอย่างแน่นหนาในถุงป้องกันไฟฟ้าสถิตและห่อด้วยโพลีเอทิลีนที่มีสิว:

ที่ด้านหนึ่งของบอร์ดมีหมุดสำหรับจ่ายไฟและถอดสัญญาณและด้านตรงข้ามมีการติดตั้ง LED อินฟราเรดและโฟโตไดโอดขนานกันซึ่งจะต้องมุ่งตรงไปยังสิ่งกีดขวางเพื่อตรวจสอบการมีอยู่:

ผู้ติดต่อทั้งหมดได้รับการลงนามและจะง่ายมากในการเชื่อมต่อกับโมดูล:

  • VCC มาพร้อมกับแรงดันไฟฟ้า
  • พิน GND - ทั่วไป;
  • สัญญาณจะถูกลบออกจากขา OUT

อีกด้านหนึ่งของกระดานมีข้อความ +OUT แต่นี่ไม่เป็นความจริงทั้งหมด และเราจะพูดถึงเรื่องนี้ในภายหลัง:

นอกจากไมโครเซอร์กิตและ LED พร้อมโฟโตไดโอดที่ทำจากองค์ประกอบวิทยุแล้ว โมดูลนี้ยังมี:

  • ไฟ LED แสดงสถานะพลังงาน;
  • ไฟ LED แสดงสถานะสัญญาณ;
  • ตัวต้านทานดับ 1 kOhm สองตัวสำหรับ LED;
  • ตัวต้านทานดับไฟ LED อินฟราเรด 100 โอห์ม
  • ตัวต้านทานไบแอส 10 kOhm สองตัว;
  • ตัวต้านทานทริมเมอร์ 10 kOhm
  • ตัวเก็บประจุบายพาส 0.1 µF สองตัว;

ดังที่ได้กล่าวไปแล้ว โมดูลนี้ใช้ตัวเปรียบเทียบคู่ LM393 มาดูเอกสารประกอบสำหรับชิปนี้โดยย่อ:

ซีรีส์ LM393 เป็นตัวเปรียบเทียบแรงดันไฟฟ้าที่มีความแม่นยำอิสระแบบคู่ที่สามารถดำเนินการจ่ายไฟเดี่ยวหรือแยกได้ อุปกรณ์เหล่านี้ได้รับการออกแบบเพื่อให้มีการทำงานทั่วไปจากที่หนึ่งไปยังอีกที่หนึ่งด้วยโหมดพลังงานเดียว ข้อกำหนดออฟเซ็ตแรงดันไฟฟ้าขาเข้าสูงถึง 2.0 mV ทำให้อุปกรณ์นี้เป็นตัวเลือกที่ยอดเยี่ยมสำหรับการใช้งานด้านอิเล็กทรอนิกส์สำหรับผู้บริโภค ยานยนต์ และอุตสาหกรรมจำนวนมาก คุณลักษณะของเครื่องเปรียบเทียบ LM393:

  • ช่วงพลังงานกว้าง ดี.ซีแหล่งเดียว (2.0V ถึง 36V);
  • ช่วงแหล่งจ่ายไฟแบบไบโพลาร์ตั้งแต่ 1.0 V ถึง 18 V DC;
  • กระแสไฟนิ่งต่ำมาก โดยไม่ขึ้นอยู่กับแรงดันไฟฟ้า (0.4 mA)
  • กระแสไบแอสอินพุตโหมดทั่วไปต่ำ (25 nA);
  • กระแสไบแอสอินพุตส่วนต่างต่ำ (5nA);
  • แรงดันไฟฟ้าออฟเซ็ตอินพุตต่ำ (สูงสุด 5.0mV);
  • แรงดันไฟฟ้าอินพุตดิฟเฟอเรนเชียลเท่ากับแรงดันไฟฟ้า
  • แรงดันไฟฟ้าขาออกเข้ากันได้กับระดับลอจิก DTL, ECL, TTL, MOS และ CMOS;
  • อุณหภูมิ สิ่งแวดล้อมตั้งแต่ 0°C ถึง 70°C

Microcircuit มีแปดพิน โดยสองตัวเป็นแบบร่วม (4) และบวกกำลัง (8) อีกสองเอาต์พุต: 1 - เอาต์พุตของตัวเปรียบเทียบ A, 7 - เอาต์พุตของตัวเปรียบเทียบ B พิน 2 และ 3 ตามลำดับเป็นค่าผกผันและ อินพุตโดยตรงของตัวเปรียบเทียบ A และพิน 5 และ 6 ตามลำดับ อินพุตตรงและผกผันของตัวเปรียบเทียบ B ฉันยังนำเสนอวงจรภายในของหนึ่งในตัวเปรียบเทียบ:

ดังที่เห็นได้จากแผนภาพ เอาต์พุตของตัวเปรียบเทียบเป็นแบบคาสเคดที่ใช้ทรานซิสเตอร์แบบโอเพ่นคอลเลกเตอร์

โมดูลที่ประกอบทั้งหมดมีความยาวไม่เกินก้านไม้ขีดไฟและสามารถใส่ในพื้นที่ขนาดเล็กได้อย่างง่ายดาย:

มาดูการตรวจสอบกันดีกว่าและเราต้องการ:

  1. ขั้วต่อสำหรับเชื่อมต่อกับหมุดโมดูล
  2. ตัวต้านทานจำกัดกระแสสำหรับ LED ที่มีความต้านทาน 220 โอห์ม
  3. และแน่นอนว่าโมดูลนั้นเอง

เราจะตรวจสอบให้มากที่สุด ด้วยวิธีง่ายๆโดยไม่มีตัวควบคุมใด ๆ และเราจะเชื่อมต่อทั้งหมดนี้ตามรูปแบบต่อไปนี้:

คำอธิบายของโมดูลบอกว่ามันจะทำงานที่แรงดันไฟฟ้าตั้งแต่ 3 V ถึง 5 V และเราจะทดสอบด้วยแรงดันไฟฟ้า 5 V ฉันต้องการทราบคุณสมบัติหนึ่งประการ - ในตอนแรกฉันบอกว่าพินเอาท์พุตมีป้ายกำกับว่า +OUT และนี่ไม่เป็นความจริงทั้งหมด จากวงจรภายในของตัวเปรียบเทียบที่ประกอบโมดูลเป็นที่ชัดเจนว่าตัวสะสมของทรานซิสเตอร์เอาต์พุตไม่ได้เชื่อมต่ออยู่ที่ใดและไม่สามารถมี "+" อยู่ได้แม้ว่าจะติดตั้งตัวต้านทานไบแอส 10 kOhm บนโมดูลแล้วก็ตาม บอร์ดระหว่างเอาต์พุตและแหล่งจ่ายไฟบวก แต่ในบางกรณีอาจไม่เพียงพอและในกรณีนี้ปรากฎว่าเอาต์พุตทำงานผกผัน: เมื่อเซ็นเซอร์ถูกกระตุ้น เอาต์พุตจะเป็นตรรกะ "0" สิ่งนี้จะต้องนำมาพิจารณาเมื่อออกแบบงานฝีมือบางอย่าง ตอนแรกฉันยังคงเชื่อคำจารึกบนบอร์ดและเชื่อมต่อ LED ระหว่างเอาต์พุตกับสายไฟทั่วไป แต่ LED เริ่มเรืองแสงทันทีเมื่อมีการจ่ายไฟโดยไม่มีสิ่งกีดขวางที่ด้านหน้าโมดูลและระหว่างการทำงานเมื่อมีสิ่งกีดขวาง ถูกนำเข้ามาในระยะ 3 ซม. มันออกไปตรงกันข้าม:

ฉันต้องเชื่อมต่อ LED ระหว่างเอาต์พุตและแหล่งจ่ายไฟที่เป็นบวก เรารวบรวม โครงการที่ถูกต้องและใช้แรงดันไฟฟ้า:

เราจะเห็นว่าหากไม่มีสิ่งกีดขวาง LED จะไม่สว่างขึ้น

เราวัดกระแสและดูว่าหากไม่มีสิ่งกีดขวางในโหมดพัก ปริมาณการใช้กระแสไฟคือ 36 mA:

หลังจากการทริกเกอร์ ไฟ LED ที่ระบุว่ามีสัญญาณจะสว่างขึ้นและการสิ้นเปลืองกระแสไฟจะเพิ่มขึ้นเป็น 47 mA:

ด้วยการเปลี่ยนความต้านทานของตัวต้านทานแบบทริมมิง ฉันจึงวัดระยะการตอบสนองขั้นต่ำและสูงสุดที่เป็นไปได้ของเซ็นเซอร์ได้อย่างเสถียร เมื่อแกนของตัวต้านทานทริมเมอร์หมุนทวนเข็มนาฬิกา ระยะตอบสนองจะลดลง และระยะห่างต่ำสุดที่เป็นไปได้คือ 1 ซม.:

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

เซ็นเซอร์ฝ่าอุปสรรค IR สำหรับรถยนต์หุ่นยนต์ YL-63 (FC-51)
โมดูลเซ็นเซอร์หลีกเลี่ยงอุปสรรครถสมาร์ทโมดูลหลอดอินฟราเรดเซ็นเซอร์โฟโตอิเล็กทริคสะท้อนแสง

เซ็นเซอร์แบบไม่สัมผัส YL-63 ตรวจจับวัตถุในช่วงระยะทางตั้งแต่เกือบศูนย์ไปจนถึงขีดจำกัดที่ตั้งไว้โดยไม่ต้องสัมผัสโดยตรงกับวัตถุเหล่านั้น ผู้ผลิตต่างๆกำหนดชื่อที่แตกต่างกันให้กับอุปกรณ์เดียวกัน บางคนเรียกเซ็นเซอร์ที่นำเสนอว่า YL-63 และบางตัวเรียกเซ็นเซอร์ FC-51 เซ็นเซอร์มีจุดประสงค์เพื่อใช้เมื่อไม่ต้องการข้อมูลเกี่ยวกับระยะห่างจากวัตถุ แต่เฉพาะเกี่ยวกับการมีอยู่หรือไม่มีเท่านั้น ระยะการตรวจจับสูงสุดขึ้นอยู่กับการตั้งค่า เซ็นเซอร์ YL-63 มีเอาต์พุตแยกกัน นี้ เซ็นเซอร์ออปติคัลการบันทึกการเพิ่มความเข้มของรังสีอินฟราเรดที่สะท้อน (IR) ในพื้นที่ควบคุม การเปลี่ยนแปลงของรังสีสะท้อนเกิดขึ้นเนื่องจากการเคลื่อนตัวของกลไกหรือการเคลื่อนที่ของวัตถุรอบข้าง YL-63 สามารถวางบนวัตถุที่กำลังเคลื่อนที่เพื่อกำหนดตำแหน่งในพื้นที่โดยรอบ มันถูกใช้เพื่อตรวจจับสิ่งกีดขวางเมื่อเคลื่อนที่ด้วยล้อและติดตามยานพาหนะอัตโนมัติ เซ็นเซอร์สามารถกลายเป็นส่วนหนึ่งของเครื่องช่วยการมองเห็นสำหรับนักเรียนในด้านระบบควบคุมและระบบอัตโนมัติ
อุปกรณ์ประกอบด้วยแหล่งกำเนิดรังสีอินฟราเรดและเครื่องตรวจจับแสง รังสีจะสะท้อนจากสิ่งกีดขวางและบันทึกโดยเครื่องตรวจจับแสง จะส่งสัญญาณไปยังเครื่องเปรียบเทียบ LM393 ซึ่งได้รับการกำหนดค่าให้ทำงานในระดับความสว่างของเครื่องตรวจจับแสง เครื่องเปรียบเทียบจะสร้างสัญญาณที่เอาต์พุตของเซ็นเซอร์ YL-63 ที่ระดับลอจิกต่ำหรือสูง

ออปติคัลเซนเซอร์ YL-63 เป็นของคลาสการแพร่กระจาย ชื่อของกลุ่มเซ็นเซอร์เกิดขึ้นเนื่องจากการทำงานพื้นฐานของเซ็นเซอร์เพื่อการสะท้อนของรังสีในหลายทิศทาง - การแพร่กระจายของรังสีโดยพื้นผิวสะท้อนแสง
การทำงานของอุปกรณ์คือการกำหนดความสว่างของเครื่องตรวจจับแสง เนื่องจาก YL-63 ตรวจจับรังสีสะท้อน จึงมีข้อผิดพลาดในการวัดระยะทางที่เกิดจากการสะท้อนแสงที่แตกต่างกันของพื้นผิวของวัตถุที่ทำจากวัสดุหลากหลายชนิด

ค่าสัมประสิทธิ์ระยะทางสำหรับการสะท้อนจาก วัสดุต่างๆ.

กระดาษเคลือบสีขาว 1
ผ้าฝ้าย 0,6
โพลีไวนิลคลอไรด์สีเทา 0,57
ต้นไม้
มีสีจางๆ 0,73
ดิบ 0,4
พลาสติก
สีขาว 0,7
สีดำ 0.22
ยางสีดำ 0,2-0,15
อลูมิเนียมขัดเงา 1,2
สแตนเลสขัดเงา 2,3

การสะท้อนและการดูดกลืนรังสีที่แตกต่างกันจากวัสดุที่แตกต่างกันจะถูกนำมาใช้เพื่อควบคุมยูนิตตรวจจับมาตรวัดความเร็ว สมมติว่าเรามี คุณจำเป็นต้องรู้จำนวนรอบต่อนาทีของเพลามอเตอร์ YL-63 จะช่วยเราออก ก็เพียงพอที่จะติดกระดาษสีขาวบนมู่เล่แล้วส่งลำแสงเซ็นเซอร์ไปที่มู่เล่แล้วเราจะได้หน่วยตรวจจับมาตรวัดความเร็ว
เพื่อลดผลกระทบจากการรบกวนต่างๆ ไมโครคอนโทรลเลอร์ที่ประมวลผลจะรวบรวมข้อมูลที่ได้รับจากเซ็นเซอร์ในช่วงเวลาสั้นๆ และทำการหาค่าเฉลี่ย เซ็นเซอร์ YL-63 สามารถทำงานในอุปกรณ์ที่ไม่มีไมโครคอนโทรลเลอร์ได้

ตัวเลือก

แรงดันไฟจ่าย 3.3-5 V
ระยะการตรวจจับถึงระนาบเคลือบสีขาวสะท้อนแสง 0.02-0.3 ม
มุมการตรวจจับ 35°
ขนาด 43 x 16 x 7 มม

รายชื่อผู้ติดต่อ

เซ็นเซอร์สิ่งกีดขวาง YL-63 หรือที่เรียกว่า FC-51 มีปลั๊กขั้วต่อสามพิน:
VCC - แหล่งจ่ายไฟ
GND - สายสามัญ
ออก - เอาท์พุต

ตัวชี้วัด

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

การตั้งค่าระยะการตรวจจับ

การตั้งค่าอุปกรณ์นั้นอำนวยความสะดวกด้วยตัวบ่งชี้การตรวจจับ ซึ่งช่วยให้คุณสามารถกำหนดค่า YL-63 หรือที่รู้จักในชื่อ FC-51 ให้ทำงานในสภาวะจริงได้ การตั้งค่าความไวของเซ็นเซอร์ทำได้โดยใช้ตัวต้านทานแบบปรับได้ที่ติดตั้งอยู่บนบอร์ด สิ่งกีดขวางได้รับการติดตั้งตามระยะห่างที่ต้องการจากอุปกรณ์ถ่ายภาพของเซ็นเซอร์ ด้วยการหมุนหน้าสัมผัสเคลื่อนที่ของตัวต้านทานปรับค่าได้บนบอร์ดโมดูล YL-63 คุณจะตั้งค่าระยะตอบสนองและเปิดไฟ LED สีแดง จากนั้นตรวจสอบระยะการตรวจจับโดยการเคลื่อนย้ายวัตถุสะท้อนแสง การตั้งค่าซ้ำอย่างน้อยสามครั้ง

โปรแกรมสำหรับการประมวลผลสัญญาณ ArduinoL-63

สัญญาณเซ็นเซอร์จะถูกส่งไปยังขา 12 ของ Arduino

การตั้งค่าเป็นโมฆะ() (
อนุกรมเริ่มต้น(9600);
pinMode(12,อินพุต);
}
เป็นโมฆะวน() (
Serial.print("สัญญาณ: ");
Serial.println(digitalRead(12));
ล่าช้า (500);
}

ภาพรวมของเซ็นเซอร์สิ่งกีดขวาง YL-63

เซ็นเซอร์หลีกเลี่ยงสิ่งกีดขวางอินฟราเรดดิจิตอล YL-63 (หรือ FC-51) (รูปที่ 1) จะใช้เมื่อจำเป็นต้องระบุการมีอยู่ของวัตถุ แต่ไม่จำเป็นต้องทราบระยะห่างที่แน่นอนจากวัตถุ เซ็นเซอร์ประกอบด้วย ตัวปล่อยอินฟราเรดและเครื่องตรวจจับแสง แหล่งกำเนิด IR ปล่อยคลื่นอินฟราเรด ซึ่งสะท้อนจากสิ่งกีดขวางและบันทึกโดยเครื่องตรวจจับแสง เซ็นเซอร์ตรวจจับสิ่งกีดขวางภายในช่วงระยะทางตั้งแต่ศูนย์ถึงขีดจำกัดที่ตั้งไว้ มันถูกสร้างขึ้นบนพื้นฐานของเครื่องเปรียบเทียบ LM393 ซึ่งจ่ายแรงดันเอาต์พุตตามหลักการ: ตรวจพบสิ่งกีดขวาง - ระดับลอจิคัลสูง, ตรวจไม่พบ - ระดับลอจิคัล ต่ำ, สถานะนี้ยังระบุด้วย LED สีแดงที่อยู่บนเซ็นเซอร์ ค่าเกณฑ์ขึ้นอยู่กับการตั้งค่าเซ็นเซอร์และปรับโดยใช้โพเทนชิออมิเตอร์ที่ติดตั้งบนโมดูล มีการติดตั้ง LED สีเขียวบนเซ็นเซอร์เพื่อระบุพลังงาน เซ็นเซอร์ใช้ในวิทยาการหุ่นยนต์เพื่อตรวจจับสิ่งกีดขวางเมื่อเคลื่อนย้ายหุ่นยนต์ที่มีล้อหรือติดตาม

ลักษณะทางเทคนิคของเซ็นเซอร์สิ่งกีดขวาง YL-63

  • รุ่น: YL-63 (หรือ FC-51)
  • แรงดันไฟฟ้า: 3.3–5 V
  • ประเภทเซนเซอร์: การแพร่กระจาย
  • เครื่องเปรียบเทียบ: LM393
  • ระยะการตรวจจับสิ่งกีดขวาง: 2 – 30 ซม
  • มุมตรวจจับสิ่งกีดขวางที่มีประสิทธิภาพ: 35°
  • โพเทนชิออมิเตอร์เพื่อเปลี่ยนความไว
  • ไฟ LED เพาเวอร์
  • ไฟ LED แสดงสถานะการทำงาน
  • ขนาด: 43 x 16 x 7 มม

การเชื่อมต่อ YL-63 กับ Arduino

โมดูลมี 3 เอาต์พุต:
  • VCC - แหล่งจ่ายไฟ 3-5 V;
  • GND - กราวด์;
  • ออก - เอาต์พุตดิจิตอล
มาเชื่อมต่อเซ็นเซอร์เข้ากับบอร์ด Arduino (แผนภาพการเชื่อมต่อในรูปที่ 1) และเขียนภาพร่างง่ายๆ ที่ส่งสัญญาณการมีอยู่ของสิ่งกีดขวางด้วยสัญญาณเสียง มาอัปโหลดภาพร่างจากรายการที่ 1 ไปยังบอร์ด Arduino และดูว่าเซ็นเซอร์ตอบสนองต่อสิ่งกีดขวางอย่างไร (ดูรูปที่ 2)

รูปที่ 1 แผนภาพการเชื่อมต่อสำหรับเชื่อมต่อเซ็นเซอร์ YL-63 เข้ากับบอร์ด Arduino

มาอัปโหลดภาพร่างจากรายการที่ 1 ไปยังบอร์ด Arduino และดูว่าเซ็นเซอร์ตอบสนองต่อสิ่งกีดขวางอย่างไร (ดูรูปที่ 3) รายการ 1 // ร่างรีวิวเซ็นเซอร์สิ่งกีดขวาง YL-63 // http:// http://3d-diy.ru // หน้าสัมผัสสำหรับเชื่อมต่อเอาต์พุตเซ็นเซอร์ #define PIN_YL63 5 // ข้อมูลจากเซ็นเซอร์ Y63 #define สิ่งกีดขวาง digitalRead (PIN_YL63) การตั้งค่าเป็นโมฆะ () ( // การเริ่มต้นพอร์ตอนุกรม Serial.begin (9600); // ตั้งค่าพินการเชื่อมต่อเซ็นเซอร์เป็น INTPUT pinMode (PIN_YL63, INTPUT); ) void loop () ( ถ้า (สิ่งกีดขวาง == 1) ( Serial.println ("BARRIER!!!"); // โซนการตรวจจับอุปสรรคในขณะที่ (สิ่งกีดขวาง == 1) // กำลังรอทางออก (;) ) อื่น ๆ ( Serial.println ("ไม่ใช่สิ่งกีดขวาง"); // นอกโซนการตรวจจับสิ่งกีดขวางในขณะที่ (สิ่งกีดขวาง == 1) // กำลังรออินพุต (;) ) )

รูปที่ 2 เอาต์พุตมอนิเตอร์พอร์ตอนุกรม

ใช้โพเทนชิออมิเตอร์มาทดลองตั้งค่าเกณฑ์กัน

ตัวอย่างการใช้งาน

ลองพิจารณาตัวอย่างการใช้เซ็นเซอร์ YL-63 บนแพลตฟอร์มหุ่นยนต์ขับเคลื่อนด้วยตนเองยอดนิยม - หุ่นยนต์เคลื่อนที่บน ใช้ Arduino(ดู 3)

รูปที่ 3 แพลตฟอร์มหุ่นยนต์ – หุ่นยนต์เคลื่อนที่ที่ใช้ Arduino

มาสร้างภาพร่างหุ่นยนต์ที่กำลังเดินทางข้ามเขาวงกตกันเถอะ หากเมื่อเคลื่อนย้ายหุ่นยนต์ในเขาวงกต หากยืนชิดด้านใดด้านหนึ่ง (ซ้ายหรือขวา) ก็จะถึงทางออกอย่างแน่นอน (รูปที่ 4)

รูปที่ 4 แผนผังของหุ่นยนต์ที่เดินทางเข้าไปในเขาวงกต

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

การมีเซ็นเซอร์ด้านหน้าสองตัวช่วยปรับปรุงคุณภาพการตรวจจับสิ่งกีดขวางด้านหน้า เนื่องจากเซ็นเซอร์ตัวเดียวไม่ครอบคลุมพื้นที่ด้านหน้าทั้งหมด

รูปที่ 5 การเชื่อมต่อเซ็นเซอร์สิ่งกีดขวางกับหุ่นยนต์เคลื่อนที่ที่ใช้ Arduino

ในภาพร่าง เราจะตรวจสอบสถานะของเซ็นเซอร์ และทำการตัดสินใจเกี่ยวกับการเคลื่อนไหว ทั้งนี้ขึ้นอยู่กับข้อมูลที่ได้รับ เซ็นเซอร์เชื่อมต่อกับหมุด Arduino 2, 12, 13 // หมายเลขพอร์ตที่เชื่อมต่อเซ็นเซอร์สิ่งกีดขวาง const int Front1 = 2, Front2 = 12, ขวา = 13; มาสร้างภาพร่างใหม่ใน Arduino IDE เพิ่มโค้ดจากรายการ 2 ลงไปแล้วอัปโหลดภาพร่างไปยังบอร์ด Arduino รายการ 2 // ประกาศตัวแปรเพื่อจัดเก็บสถานะของมอเตอร์สองตัว อินท์ motor_L1, motor_L2, input_L; อินท์ motor_R1, motor_R2, input_R; // ค่าคงที่เวลาใช้เพื่อตั้งเวลาในการเลี้ยว หมุน ก้าวไปข้างหน้าอย่างแม่นยำ // ในหน่วยมิลลิวินาที const int time_90 = 390; // จำนวนพอร์ตที่เชื่อมต่อเซ็นเซอร์สิ่งกีดขวาง const int Front1 = 2, Front2 = 12, ขวา = 13; //================================================ ======== การตั้งค่าเป็นโมฆะ() ( // เราป้อนหมายเลขหน้าสัมผัส Arduino (พิน) ลงในตัวแปร // สำหรับมอเตอร์ด้านซ้ายและขวาของเครื่อง setup_motor_system(3, 4, 11, 7, 8, 10); // pinMode (Front1, INPUT); pinMode (ด้านหน้า 2, INPUT); pinMode (ขวา, INPUT); // เครื่องยนต์กำลังทำงานอยู่ void loop() ( บูลีน d_Front1, d_Front2, d_Right; d_Front1 = digitalRead(Front1); d_Front2 = digitalRead(Front2); d_Right = digitalRead(Right); // หากไม่มีเซ็นเซอร์ถูกกระตุ้น ถ้า (d_Front1 && d_Front2 && d_Right) ( // ชะลอความเร็วล้อขวาลง (255, 15); ไปข้างหน้า (); // หมุนไปทางขวา ) อื่น ๆ ( // หากเซ็นเซอร์ด้านหน้าตัวใดตัวหนึ่งถูกกระตุ้นและเซ็นเซอร์ที่ถูกต้องไม่ถูกกระตุ้น ถ้า ((! d_Front1) ||. (!d_Front2) ) ( //กำลังสูงสุดสำหรับทุกล้อ setspeed(255, 255); // เลี้ยวซ้าย 90 องศา ซ้าย(); ล่าช้า(time_90 / 5); ) else ( // ถ้า เซ็นเซอร์ขวาถูกกระตุ้น // ชะลอความเร็วล้อซ้าย (15, 255); ไปข้างหน้า();//เลี้ยวซ้าย ) ) // ฟังก์ชั่นสำหรับการเริ่มต้นการควบคุมมอเตอร์ ถือเป็นโมฆะ setup_motor_system (int L1, int L2, int iL, int R1, int R2, int iR) ( // ป้อนหมายเลขผู้ติดต่อ Arduino (พิน) ลงในตัวแปร motor_L1 = L1; motor_L2 = L2; input_L = iL; // สำหรับมอเตอร์ด้านซ้ายและขวาของเครื่อง motor_R2 = iR; // ถ่ายโอนพอร์ตที่ระบุไปยังสถานะเอาต์พุตข้อมูล input_R, OUTPUT); // ฟังก์ชั่นตั้งค่าความเร็วของมอเตอร์ เป็นโมฆะ setspeed (int LeftSpeed, int RightSpeed) ( // ตั้งค่าความกว้างของขอบบวกตั้งแต่ 0 ถึง 255 analogWrite (input_L, LeftSpeed); analogWrite (input_R, RightSpeed); // ยิ่งมีขนาดใหญ่เท่าใดมอเตอร์ก็จะยิ่งเข้มข้นมากขึ้นเท่านั้น ) // เลี้ยวซ้ายโดยล็อคล้อซ้ายไว้ เป็นโมฆะไปข้างหน้า () ( // ล้อซ้ายหมุนไปข้างหน้า digitalWrite (motor_L1, HIGH); digitalWrite (motor_L2, LOW); // ล้อขวาหมุนไปข้างหน้า digitalWrite (motor_R1, HIGH); digitalWrite (motor_R2, LOW); ) // เลี้ยวซ้าย. เป็นโมฆะซ้าย() ( // ล้อซ้ายหมุนไปข้างหลัง digitalWrite(motor_L1, LOW); digitalWrite(motor_L2, HIGH); // ล้อขวาหมุน digitalWrite(motor_R1, HIGH); digitalWrite(motor_R2, LOW); ) เปิดตัวหุ่นยนต์ใน เขาวงกตและดูว่าเขาเคลื่อนไหวอย่างไรในเขาวงกต

คำถามที่พบบ่อย FAQ

1. ไฟ LED สีเขียวไม่สว่างขึ้น
  • ตรวจสอบว่าเชื่อมต่อเซ็นเซอร์อย่างถูกต้อง
2. เซ็นเซอร์ตรวจไม่พบสิ่งกีดขวางในระยะที่กำหนด
  • ใช้โพเทนชิออมิเตอร์ เลือกเกณฑ์การตอบสนองของเซ็นเซอร์

หุ่นยนต์ทุกตัวที่สามารถขับเคลื่อน บิน หรือว่ายน้ำได้จะต้องสามารถมองเห็นสิ่งกีดขวางที่ขวางทางได้ เพื่อให้หุ่นยนต์ทำเช่นนี้ได้ จำเป็นต้องมีเซ็นเซอร์ที่เหมาะสม ใน วรรณคดีอังกฤษอุปกรณ์ดังกล่าวเรียกว่า เซ็นเซอร์ความใกล้ชิดเราจะเรียกพวกมันว่าเซ็นเซอร์สิ่งกีดขวาง ในบทนี้ เราจะดูเซ็นเซอร์สิ่งกีดขวางที่พบบ่อยที่สุดตัวหนึ่ง ซึ่งทำงานบนหลักการสะท้อนกลับ มันถูกออกแบบมาอย่างเรียบง่ายมาก เซ็นเซอร์ประกอบด้วยแหล่งกำเนิดแสงแบบกำหนดทิศทางและเครื่องตรวจจับแสง แหล่งกำเนิดมักเป็น LED อินฟราเรดพร้อมเลนส์ และตัวตรวจจับคือโฟโตไดโอดหรือโฟโตทรานซิสเตอร์ ไฟ LED บนเซ็นเซอร์จะเปิดตลอดเวลาและปล่อยลำแสงแคบไปในทิศทางไปข้างหน้า หากมีสิ่งกีดขวางด้านหน้าเซ็นเซอร์ (รูป A) แสงที่สะท้อนจากแหล่งกำเนิดจะกระทบกับเครื่องตรวจจับ และพัลส์บวกจะปรากฏขึ้นที่เอาต์พุตเซ็นเซอร์ มิฉะนั้นหากไม่มีสิ่งกีดขวางเซ็นเซอร์ก็จะเงียบ (รูป B) มีตัวเลือกที่สาม เมื่อมีสิ่งกีดขวาง แต่ไม่มีแสงสะท้อนออกมา! รูปที่ B แสดงกรณีดังกล่าว ปรากฎว่าหุ่นยนต์จะไม่เห็นพื้นผิวสีดำด้าน

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

เราจะเชื่อมต่อเซ็นเซอร์ที่ง่ายที่สุดกับเอาต์พุตดิจิทัล แผนผังของการเชื่อมต่อกับเทอร์มินัล อาร์ดูโน่ อูโน่:
ลักษณะเค้าโครง

2. การตั้งค่าความไว

ดังที่คุณทราบ มีแหล่งกำเนิดรังสีอินฟราเรดมากมายรอบตัวเรา รวมถึงโคมไฟและดวงอาทิตย์ด้วย องค์ประกอบที่ไวต่อแสงของเซนเซอร์จะตรวจจับรังสีพื้นหลังนี้และอาจส่งสัญญาณเตือนที่ผิดพลาด กล่าวอีกนัยหนึ่ง เซ็นเซอร์สิ่งกีดขวางสามารถทำงานได้เมื่อไม่มีสิ่งกีดขวางเลย เพื่อแก้ไขปัญหานี้ เซ็นเซอร์สามารถปรับความไวเพื่อให้ตรวจจับได้เฉพาะแสงที่มีความแรงเพียงพอเท่านั้น โดยปกติจะทำโดยใช้เครื่องเปรียบเทียบ ซึ่งเป็นอุปกรณ์อิเล็กทรอนิกส์ที่ให้คุณเปรียบเทียบระดับแรงดันไฟฟ้าสองระดับได้ แรงดันไฟฟ้าหนึ่งถูกส่งไปยังเครื่องเปรียบเทียบจากโฟโตไดโอดและอีกแรงดันไฟฟ้าหนึ่งจากตัวแบ่งแรงดันไฟฟ้าโดยใช้โพเทนชิออมิเตอร์ เราจะเรียกแรงดันไฟฟ้าที่สอง เกณฑ์- ตอนนี้เซ็นเซอร์จะให้สัญญาณบวกเฉพาะเมื่อแรงดันไฟฟ้าบนโฟโตไดโอดมากกว่าที่เราตั้งไว้ ในการตั้งค่าแรงดันไฟฟ้าตามเกณฑ์ เราต้องใช้ไขควงปากแบน (หรือที่เรียกว่าไขควงหัวแบน) นอกจากนี้เรายังจะได้รับความช่วยเหลือในขั้นตอนนี้ด้วยไฟ LED แสดงสถานะสีเขียว ซึ่งจะสว่างขึ้นเมื่อเซ็นเซอร์ตรวจพบแสงอินฟราเรดในระดับที่เพียงพอ อัลกอริธึมการตั้งค่ามีสามขั้นตอน:
  • เราวางเซ็นเซอร์ไว้ในสภาพแสงที่จะใช้งาน
  • เชื่อมต่อเซ็นเซอร์เข้ากับแหล่งจ่ายไฟและไฟ LED สีแดงที่เซ็นเซอร์จะสว่างขึ้น
  • กำจัดสิ่งกีดขวางทั้งหมดที่ด้านหน้าเซ็นเซอร์แล้วหมุนโพเทนชิออมิเตอร์จนกระทั่งไฟ LED แสดงสถานะสีเขียวดับลง
ในการตรวจสอบ เรานำฝ่ามือของเราไปที่เซ็นเซอร์ และไฟ LED สีเขียวจะสว่างขึ้นในระยะหนึ่ง หากเราเอามือออก ไฟ LED จะดับลง ระยะห่างที่เซ็นเซอร์ตรวจจับสิ่งกีดขวางจะขึ้นอยู่กับระดับแสงพื้นหลัง การตั้งค่าความไว และการเปิด ตำแหน่งที่ถูกต้องโฟโตไดโอดและ LED บนเซ็นเซอร์ ต้องวางขนานกันอย่างเคร่งครัด ตอนนี้เซ็นเซอร์ได้รับการกำหนดค่าอย่างถูกต้องแล้ว มาเริ่มสร้างโปรแกรมกันดีกว่า

3. โปรแกรม

เช่น เราจะเปิดปิดไฟ LED มาตรฐานเบอร์ 13 ขึ้นมา อาร์ดูโน่ อูโน่ขึ้นอยู่กับการอ่านเซ็นเซอร์ เมื่อใช้เซ็นเซอร์ดิจิตอลโปรแกรมจะเหมือนกับในกรณีที่ใช้งานปุ่มต่างๆ ในการวนซ้ำแต่ละครั้ง วนซ้ำเราอ่านค่าที่พิน #2 แล้วเปรียบเทียบค่านี้กับระดับ สูง- หากมีค่าเป็น สูงซึ่งหมายความว่าเซ็นเซอร์มองเห็นสิ่งกีดขวางและเราเปิดไฟ LED ที่พินหมายเลข 13 มิฉะนั้นเราจะปิด LED

const int prx_pin = 2; const int led_pin = 13; ไบต์วี; การตั้งค่าเป็นโมฆะ () ( pinMode (prx_pin, INPUT); pinMode (led_pin, OUTPUT); ) void loop () ( v = digitalRead (prx_pin); if (v == HIGH) digitalWrite (led_pin, HIGH); else digitalWrite (led_pin , ต่ำ);

4. ตัวอย่างการใช้งาน ตอนนี้เรามาลองใช้เซ็นเซอร์ดิจิตอลตามวัตถุประสงค์ที่ตั้งใจไว้ มาทำให้หุ่นยนต์สองล้อตอบสนองต่อการอ่านเซ็นเซอร์สองตัวที่อยู่ทางซ้ายและขวากัน วนซ้ำ.

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

เควส
  1. หากทุกอย่างเรียบร้อยดี ให้ลองทำงานบางอย่างกับหุ่นยนต์ให้สำเร็จ
  2. ชี้เซ็นเซอร์สิ่งกีดขวางลงเพื่อให้หุ่นยนต์สามารถตรวจจับขอบโต๊ะได้ เขียนโปรแกรมป้องกันหุ่นยนต์ตกจากโต๊ะ
  3. ชี้เซ็นเซอร์ลงอีกครั้ง แต่คราวนี้มีจุดประสงค์อื่น ตามที่เราค้นพบ เซ็นเซอร์สามารถแยกแยะพื้นผิวสีดำจากพื้นผิวสีขาวได้ ใช้คุณสมบัตินี้เพื่อสร้างตัวติดตามหุ่นยนต์ (หรือที่เรียกว่า LineFollower)

ชี้เซ็นเซอร์ไปด้านข้างแล้วให้หุ่นยนต์เคลื่อนที่ไปตามผนัง

บทสรุป

อุปกรณ์นี้เป็นเซ็นเซอร์สิ่งกีดขวางแบบดิจิทัลอย่างง่าย ซึ่งนำทางโดยรังสีอินฟราเรดที่สะท้อน เซ็นเซอร์นี้ซื้อจาก Aliexpress หลักการทำงานคล้ายกับโครงการที่เพิ่งพิจารณาไป


เซ็นเซอร์อินฟราเรดอุปสรรคที่ซื้อจากอาลี

การออกแบบและพารามิเตอร์

โครงสร้างเซ็นเซอร์คือ แผงวงจรพิมพ์กระดานขนาด 31 x 14 มม. มีรูสำหรับยึดหนึ่งรู


เซ็นเซอร์อุปสรรคอินฟราเรด - แผงวงจรพิมพ์

น้ำหนักของเซ็นเซอร์คือ 2.7 กรัม สำหรับการจ่ายไฟและการส่งข้อมูลเซ็นเซอร์จะมีขั้วต่อสามพินซึ่งมีหมุดทำเครื่องหมายไว้


ขั้วต่อการเชื่อมต่อเซ็นเซอร์สามพิน
  • อุปกรณ์ใช้พลังงานจากแรงดันไฟฟ้าคงที่ในช่วง 3.3 ถึง 5 V การใช้กระแสไฟฟ้าคือ 25 mA ที่แรงดันไฟฟ้า 3.3 V และ 40 mA ที่แรงดันไฟฟ้า 5 V

เซ็นเซอร์ประกอบด้วยไฟ LED อินฟราเรดและตัวตรวจจับแสง การมีสิ่งกีดขวางถูกกำหนดโดยความเข้มของรังสีอินฟราเรดที่สะท้อน ด้วยการใช้ทริมเมอร์บนบอร์ดเซ็นเซอร์ คุณสามารถตั้งค่าความไวที่ต้องการของอุปกรณ์ได้ ตามที่ผู้ผลิตระบุว่าเซ็นเซอร์ตอบสนองต่อสิ่งกีดขวางในช่วง 2 ถึง 30 ซม. มุมมองของเซ็นเซอร์คือ 35 องศา ผู้เขียนสามารถปรับเซ็นเซอร์ให้เข้ากับสิ่งกีดขวางได้ในระยะ 3-8 ซม. แม้ว่าปัญหาอาจเป็นเพราะทดสอบเซ็นเซอร์เพียงตัวเดียวเท่านั้น และนอกจากนี้ มุมมองของเซ็นเซอร์ยังค่อนข้างกว้างจริงๆ ก็ไม่ควรลืมเช่นกัน พื้นผิวต่างๆสะท้อน รังสีอินฟราเรดในรูปแบบต่างๆ พื้นผิวที่ "มันวาว" มากขึ้นในช่วงนี้จะถูกตรวจจับจากระยะไกลที่ไกลกว่าพื้นผิวที่มืด ไม่ว่าในกรณีใด เซ็นเซอร์นี้คือ "อาวุธระยะประชิด"


เซ็นเซอร์ฝ่าอุปสรรค IR - ขนาดบอร์ด

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

การเชื่อมต่อกับ Arduino

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


เซ็นเซอร์สิ่งกีดขวาง IR พร้อม Arduino

สำหรับตัวอย่างวิธีที่เซ็นเซอร์โต้ตอบกับแพลตฟอร์ม Arduino คุณสามารถใช้โปรแกรมที่ให้ไฟ LED ที่เชื่อมต่อกับพอร์ตดิจิทัล 13 ได้โดยกดปุ่มที่เชื่อมต่อกับพอร์ตดิจิทัล 12 ของบอร์ด Arduino UNO โปรแกรมนี้นำมาจากเว็บไซต์ robocraft.ru

/*
* ไฟ LED พร้อมปุ่ม
*/

int ledPin = 13; // นำ
int btnPin = 12; // ปุ่ม
int วาล=0;

การตั้งค่าเป็นโมฆะ ()
{
pinMode(ledPin, เอาท์พุต); // นี่คือเอาต์พุต - LED
pinMode(btnPin, อินพุต); // และนี่คือปุ่มอินพุต
อนุกรมเริ่มต้น(9600); // เราจะเขียนไปที่พอร์ต COM
}

เป็นโมฆะวน()
{
val = digitalRead(btnPin); // ค้นหาสถานะของปุ่ม
if(val==HIGH) // กดปุ่ม
{
digitalWrite (ledPin, สูง); // เปิดไฟ LED
Serial.println("H");
}
else // ไม่ได้กดปุ่ม
{
digitalWrite (ledPin, ต่ำ); // ปิดไฟ LED
Serial.println("L");
}
ล่าช้า(100);
}

ในกรณีนี้ เซ็นเซอร์จะเชื่อมต่อแทนปุ่ม หลังจากโหลดโปรแกรมลงในหน่วยความจำของไมโครคอนโทรลเลอร์แล้ว คุณสามารถทดลองใช้โหมดการทำงานต่างๆ ของเซ็นเซอร์ได้

สรุปการซื้อ

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