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

เมื่อเราดำเนินการผ่านโปรเจกต์นี้ เราจะครอบคลุมส่วนประกอบฮาร์ดแวร์ คำแนะนำการเดินสายไฟ และโค้ดที่จำเป็นในการใช้งานเซนเซอร์อย่างมีประสิทธิภาพ คุณสามารถดูคำอธิบายเพิ่มเติมได้ในวิดีโอ (ในวิดีโอที่ 00:00)
อธิบายฮาร์ดแวร์
ส่วนประกอบหลักของโปรเจกต์นี้คือโมดูลหลีกเลี่ยงสิ่งกีดขวางอินฟราเรด 4 ช่อง ซึ่งใช้ LM339 ควอดดิฟเฟอเรนเชียลคอมพาราเตอร์ ไอซีนี้สามารถทำงานได้ระหว่าง 2 ถึง 36 โวลต์ แต่ในกรณีของเรา เราจะใช้ 5 โวลต์เพื่อความเข้ากันได้กับ Arduino เซนเซอร์แต่ละตัวในโมดูลมีอินพุตแบบอินเวอร์ติ้งและไม่อินเวอร์ติ้ง ทำให้สามารถเปรียบเทียบแสงอินฟราเรดที่สะท้อนจากสิ่งกีดขวางและส่งสัญญาณออกไปตามนั้น
โมดูลถูกออกแบบด้วยตัวต้านทานแบบดึงขึ้นที่ทำให้เอาต์พุตสูงเมื่อไม่มีการตรวจจับสิ่งกีดขวาง เมื่อตรวจพบวัตถุ เอาต์พุตจะต่ำ ให้สัญญาณที่ชัดเจนแก่ Arduino นอกจากนี้ โมดูลยังมีไฟ LED ที่แสดงเมื่อตรวจพบสิ่งกีดขวาง เพิ่มการตอบสนองต่อผู้ใช้ระหว่างการทำงาน
รายละเอียดจากดาต้าชีต
| ผู้ผลิต | ไม่ทราบ |
|---|---|
| หมายเลขชิ้นส่วน | โมดูลหลีกเลี่ยงสิ่งกีดขวางอินฟราเรด 4 ช่อง |
| แรงดันไฟฟ้าลอจิก/IO | 5 โวลต์ |
| แรงดันไฟฟ้าจ่าย | 2–36 โวลต์ |
| กระแสเอาต์พุต (ต่อช่อง) | 10 mA (ทั่วไป) |
| กระแสสูงสุด (ต่อช่อง) | 20 mA (สูงสุด) |
| คำแนะนำความถี่ PWM | ไม่มี |
| เกณฑ์ลอจิกอินพุต | ต่ำ < 0.8 โวลต์, สูง > 2.0 โวลต์ |
| แรงดันตก / RDS(on) / อิ่มตัว | 0.2 โวลต์ (ทั่วไป) |
| ขีดจำกัดความร้อน | อุณหภูมิการทำงาน: -40 ถึง 125 องศาเซลเซียส |
| แพ็คเกจ | โมดูล |
| หมายเหตุ / รุ่นต่างๆ | รวมเซนเซอร์ 4 ตัวพร้อมปรับความไวได้ |
- ใช้กราวด์ร่วมสำหรับส่วนประกอบทั้งหมดเพื่อหลีกเลี่ยงอินพุตลอย
- ปรับโพเทนชิโอมิเตอร์ความไวเพื่อช่วงการตรวจจับที่เหมาะสมที่สุด
- ตรวจสอบให้แน่ใจว่าแรงดันไฟฟ้าจ่ายถูกต้องเพื่อหลีกเลี่ยงความเสียหายต่อเซนเซอร์
- ตรวจสอบการเชื่อมต่อสายไฟเพื่อป้องกันการอ่านค่าผิดจากเซนเซอร์
- ใช้ตัวเก็บประจุแยกสัญญาณเพื่อทำให้แหล่งจ่ายไฟสำหรับเซนเซอร์มีเสถียรภาพ
- ทดสอบเซนเซอร์แต่ละตัวแยกกันก่อนรวมเข้ากับระบบหลัก
คำแนะนำการเดินสายไฟ
ในการเดินสายไฟโมดูลหลีกเลี่ยงสิ่งกีดขวางอินฟราเรด 4 ช่องเข้ากับ Arduino ให้เริ่มต้นโดยเชื่อมต่อไฟและกราวด์ เชื่อมต่อพิน VCC ของโมดูลเซนเซอร์เข้ากับเอาต์พุต 5V บน Arduino จากนั้นเชื่อมต่อพิน GND ของโมดูลเข้ากับกราวด์ (GND) บน Arduino ซึ่งจะให้พลังงานที่จำเป็นสำหรับเซนเซอร์ในการทำงาน
ถัดไป เชื่อมต่อพินเอาต์พุตของเซนเซอร์เข้ากับพินอินพุตดิจิทัลบน Arduino ตัวอย่างเช่น เชื่อมต่อเอาต์พุตของเซนเซอร์หน้าซ้าย (ระบุเป็น N1) เข้ากับพินดิจิทัล 2 เซนเซอร์หน้าขวา (N2) เข้ากับพิน 3 เซนเซอร์หลังซ้าย (N3) เข้ากับพิน 4 และเซนเซอร์หลังขวา (N4) เข้ากับพิน 5 นอกจากนี้ คุณสามารถเชื่อมต่อเอาต์พุตเบรกเข้ากับพิน 8 ตัวบ่งชี้สิ่งกีดขวางด้านหน้าเข้ากับพิน 9 และตัวบ่งชี้สิ่งกีดขวางด้านหลังเข้ากับพิน 10 ตรวจสอบให้แน่ใจว่าการเชื่อมต่อทั้งหมดแน่นหนาเพื่อการทำงานที่เชื่อถือได้
ตัวอย่างโค้ดและคำอธิบาย
โค้ด Arduino เริ่มต้นด้วยการกำหนดค่าคงที่สำหรับพินเซนเซอร์แต่ละตัวเพื่อการอ้างอิงที่ง่ายขึ้นตลอดโปรแกรม ตัวอย่างเช่น FRONT_LEFT ถูกกำหนดเป็นพิน 2 ทำให้ชัดเจนว่าเซนเซอร์ใดตรงกับพินใด
#define FRONT_LEFT 2 // พิน 2 สำหรับเซนเซอร์หน้าซ้าย
#define FRONT_RIGHT 3 // พิน 3 สำหรับเซนเซอร์หน้าขวา
#define REAR_LEFT 4 // พิน 4 สำหรับเซนเซอร์หลังซ้าย
#define REAR_RIGHT 5 // พิน 5 สำหรับเซนเซอร์หลังขวา
ในฟังก์ชัน setup() พินเซนเซอร์แต่ละตัวถูกกำหนดเป็นอินพุตโดยใช้ pinMode() การตั้งค่านี้ช่วยให้ Arduino อ่านสถานะของเซนเซอร์ระหว่างการทำงาน
void setup() {
Serial.begin(9600);
pinMode(FRONT_LEFT, INPUT);
pinMode(FRONT_RIGHT, INPUT);
pinMode(REAR_LEFT, INPUT);
pinMode(REAR_RIGHT, INPUT);
}
ในลูปหลัก สถานะของเซนเซอร์แต่ละตัวจะถูกอ่านโดยใช้ digitalRead() หากตรวจพบสิ่งกีดขวาง (ระบุโดยสัญญาณต่ำ) ไฟ LED สิ่งกีดขวางที่เกี่ยวข้องจะถูกเปิดใช้งาน และข้อความจะถูกพิมพ์ไปยังจอภาพซีเรียล
void loop() {
int FR = digitalRead(FRONT_RIGHT);
int FL = digitalRead(FRONT_LEFT);
if( FR == LOW || FL == LOW) {
digitalWrite(FRONT_OB,HIGH);
Serial.println("สิ่งกีดขวางด้านหน้า");
} else {
digitalWrite(FRONT_OB,LOW);
}
}
โครงสร้างโค้ดนี้ช่วยให้ขยายและแก้ไขได้ง่าย ช่วยให้คุณปรับแต่งการตอบสนองตามความต้องการเฉพาะของแอปพลิเคชันของคุณ สำหรับโค้ดที่สมบูรณ์ โปรดดูส่วนการโหลดด้านล่าง
การสาธิต / สิ่งที่คาดหวัง
เมื่อทุกอย่างเชื่อมต่อสายไฟและอัปโหลดโค้ดเรียบร้อยแล้ว คุณควรคาดหวังว่าไฟ LED บนโมดูลจะสว่างขึ้นเมื่อใดก็ตามที่เซนเซอร์ตัวใดตัวหนึ่งตรวจพบสิ่งกีดขวาง จอแสดงผลซีเรียลจะแสดงข้อความที่ระบุว่ามีสิ่งกีดขวางอยู่ด้านหน้าหรือด้านหลังด้วย หากวางตำแหน่งเซนเซอร์อย่างถูกต้อง รถอัจฉริยะจะตอบสนองโดยการหยุดหรือเปลี่ยนทิศทางตามที่โปรแกรมไว้ (ในวิดีโอที่เวลา 02:30)
ข้อผิดพลาดทั่วไป ได้แก่ การเชื่อมต่อสายไฟที่ไม่ถูกต้อง ซึ่งอาจทำให้เกิดอินพุตลอยหรือการอ่านค่าผิดพลาด ตรวจสอบให้แน่ใจว่าเซนเซอร์ได้รับการปรับเทียบอย่างเหมาะสม และปรับโพเทนชิโอมิเตอร์เพื่อความไวตามที่ต้องการ การทดสอบเซนเซอร์แต่ละตัวแยกกันสามารถช่วยระบุปัญหาได้ก่อนการรวมระบบเต็มรูปแบบ
ไทม์สแตมป์ในวิดีโอ
- 00:00 – แนะนำโปรเจกต์
- 01:30 – คำอธิบายฮาร์ดแวร์
- 02:30 – อธิบายโค้ด
- 03:45 – คำแนะนำการเชื่อมต่อสายไฟ
- 04:50 – การสาธิตสด
++
/*
* This is the Arduino code for 4-channel Infrared Obstacle Sensors for a smart car.
* Watch YouTube video: https://youtu.be/6Qs4iFYm_lg
*
* Written by Ahmad Nejrabi for Robojax.com
* on January 15, 2018 at 21:04 in Ajax, Ontario, Canada
* Permission granted to share this code given that this
* note is kept with the code.
* Disclaimer: This code is "AS IS" and for educational purposes only.
*/
/*
4-Channel Infrared Obstacle Avoidance kit
Written by Ahmad Nejrabi for Robojax.com
on January 15, 2018 at 21:04 in Ajax, Ontario, Canada
What it does?
This module has 4 IR (infrared) sensors that sense obstacles and based on the position of the
obstacle, you can program your Arduino to take action. If you are using it for a smart car, you can
change the direction of the car, apply the brake, or stop it.
*/
// 4 Infrared Obstacle code for Robojax.com
#define FRONT_LEFT 2 // pin 2 for front-left sensor
#define FRONT_RIGHT 3 // pin 3 for front-right sensor
#define REAR_LEFT 4 // pin 4 for rear-left sensor
#define REAR_RIGHT 5 // pin 5 for rear-right sensor
#define BREAK 8 // pin 8 to apply break or turn LED ON
#define FRONT_OB 9 // pin 9 when obstacle is at front
#define REAR_OB 10 // pin 10 when obstacle is at rear
void setup() {
Serial.begin(9600);
pinMode(FRONT_LEFT, INPUT);//define front-left input pin
pinMode(FRONT_RIGHT, INPUT);//define front-right input pin
// 4 Infrared Obstacle code for Robojax.com
pinMode(REAR_LEFT, INPUT);//define rear-left input pin
pinMode(REAR_RIGHT, INPUT);//define rear-right input pin
pinMode(BREAK, OUTPUT);// define pin for break
pinMode(FRONT_OB,OUTPUT);// define front obstacle detection pin
pinMode(REAR_OB,OUTPUT);// define rear obstacle detection pin
}
void loop() {
// 4 Infrared Obstacle code for Robojax.com
int FR = digitalRead(FRONT_RIGHT);// read FRONT_LEFT sensor
int FL = digitalRead(FRONT_LEFT);// read FRONT_RIGHT sensor
int RR = digitalRead(REAR_RIGHT);// read REAR_RIGHT sensor
int RL = digitalRead(REAR_LEFT);// read REAR_LEFT sensor
if( FR == LOW || FL == LOW)
{
digitalWrite(FRONT_OB,HIGH);
Serial.println("Front obstacle");
}else{
digitalWrite(FRONT_OB,LOW);
}
if( RR == LOW || RL == LOW )
{
digitalWrite(REAR_OB,HIGH);
Serial.println("Rear obstacle");
}else{
digitalWrite(REAR_OB,LOW);
}
delay(200);
}
สิ่งที่คุณอาจต้องการ
-
อเมซอน
แหล่งข้อมูลและเอกสารอ้างอิง
ยังไม่มีทรัพยากรเลย
ไฟล์📁
ไฟล์ Fritzing
-
VS1838B Infrared receiver
VS1838B_part.fzpz
ไฟล์อื่น ๆ
-
เอกสารข้อมูลโมดูลตรวจจับสิ่งกีดขวางอินฟราเรด 4 ช่อง LM393
robojax-4-channel-infrared-obstacle_LM339.pdf1.36 MB