ค้นหาโค้ด

โค้ด Arduino และวิดีโอ: เซนเซอร์ตรวจจับสิ่งกีดขวางอินฟราเรด 4 ช่องสำหรับรถอัจฉริยะ Arduino

โค้ด Arduino และวิดีโอ: เซนเซอร์ตรวจจับสิ่งกีดขวางอินฟราเรด 4 ช่องสำหรับรถอัจฉริยะ Arduino

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

เมื่อเราดำเนินการผ่านโปรเจกต์นี้ เราจะครอบคลุมส่วนประกอบฮาร์ดแวร์ คำแนะนำการเดินสายไฟ และโค้ดที่จำเป็นในการใช้งานเซนเซอร์อย่างมีประสิทธิภาพ คุณสามารถดูคำอธิบายเพิ่มเติมได้ในวิดีโอ (ในวิดีโอที่ 00:00)

อธิบายฮาร์ดแวร์

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

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

รายละเอียดจากดาต้าชีต

ผู้ผลิตไม่ทราบ
หมายเลขชิ้นส่วนโมดูลหลีกเลี่ยงสิ่งกีดขวางอินฟราเรด 4 ช่อง
แรงดันไฟฟ้าลอจิก/IO5 โวลต์
แรงดันไฟฟ้าจ่าย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 – การสาธิตสด

ภาพ

4 channel infrared sensor module-6
4 channel infrared sensor module-6
4 channel infrared sensor module-1
4 channel infrared sensor module-1
4 channel infrared sensor module-3
4 channel infrared sensor module-3
4 channel infrared sensor module-
4 channel infrared sensor module-4
4 channel infrared sensor module-
4 channel infrared sensor module-5
60-This is the Arduino code for a 4-channel infrared obstacle sensor.
ภาษา: C++
++
/*
 * 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