กลับไปหน้ารวมไฟล์
object-counter-with-ir-sensor-975586.md
//made by Sujal Vasoya
//CD 4511 IC for 7 segment display
//pin 2,3,4,5 in first IC,pin 6,7,8,9 in second IC
//pin 10 in IR sensor out pin
#define ir 10
int count=0;
int j=1;
int i=1;
void setup() {
 pinMode(ir,INPUT);
 pinMode(2,OUTPUT);
 pinMode(3,OUTPUT);
 pinMode(4,OUTPUT);
 pinMode(5,OUTPUT);
 pinMode(6,OUTPUT);
 pinMode(7,OUTPUT);
 pinMode(8,OUTPUT);
 pinMode(9,OUTPUT);
 Serial.begin(9600);
}
void loop()
{
 int in_value=digitalRead(ir);
 if(in_value==LOW)
 {
   Serial.print("count=");
   Serial.println(count);
   number2(j);
   Serial.print("j=");
   Serial.println(j);
    if(j==0)
    {
      number1(i);
      Serial.print("i=");
      Serial.println(i);
      i++;
    }
   j++;
   if(j==10)
   {
     j=0;
   }
   count++;
   if(count==100)
   {
     count=0;
     i=1;
     j=1;
     number1(0);
     number2(0);
   }
   delay(150);
 }
}
void number1(int x)
{ if(x==0)
 {
 digitalWrite(2,0);
 digitalWrite(3,0);
 digitalWrite(4,0);
 digitalWrite(5,0);
 }
 if(x==1)
 {
 digitalWrite(2,1);
 digitalWrite(3,0);
 digitalWrite(4,0);
 digitalWrite(5,0);
 }
 if(x==2)
 {
 digitalWrite(2,0);
 digitalWrite(3,1);
 digitalWrite(4,0);
 digitalWrite(5,0);
 }
 if(x==3)
 {
 digitalWrite(2,1);
 digitalWrite(3,1);
 digitalWrite(4,0);
 digitalWrite(5,0);
 }
 if(x==4)
 {
 digitalWrite(2,0);
 digitalWrite(3,0);
 digitalWrite(4,1);
 digitalWrite(5,0);
 }
 if(x==5)
 {
 digitalWrite(2,1);
 digitalWrite(3,0);
 digitalWrite(4,1);
 digitalWrite(5,0);
 }
 if(x==6)
 {
 digitalWrite(2,0);
 digitalWrite(3,1);
 digitalWrite(4,1);
 digitalWrite(5,0);
 }
 if(x==7)
 {
 digitalWrite(2,1);
 digitalWrite(3,1);
 digitalWrite(4,1);
 digitalWrite(5,0);
 }
 if(x==8)
 {
 digitalWrite(2,0);
 digitalWrite(3,0);
 digitalWrite(4,0);
 digitalWrite(5,1);
 }
 if(x==9)
 {
 digitalWrite(2,1);
 digitalWrite(3,0);
 digitalWrite(4,0);
 digitalWrite(5,1);
 }

}
void number2(int y)
{ if(y==0)
 {
 digitalWrite(6,LOW);
 digitalWrite(7,LOW);
 digitalWrite(8,LOW);
 digitalWrite(9,LOW);
 }
 if(y==1)
 {
 digitalWrite(6,HIGH);
 digitalWrite(7,LOW);
 digitalWrite(8,LOW);
 digitalWrite(9,LOW);
 }
 if(y==2)
 {
 digitalWrite(6,LOW);
 digitalWrite(7,HIGH);
 digitalWrite(8,LOW);
 digitalWrite(9,LOW);
 }
 if(y==3)
 {
 digitalWrite(6,HIGH);
 digitalWrite(7,HIGH);
 digitalWrite(8,LOW);
 digitalWrite(9,LOW);
 }
 if(y==4)
 {
 digitalWrite(6,LOW);
 digitalWrite(7,LOW);
 digitalWrite(8,HIGH);
 digitalWrite(9,LOW);
 }
 if(y==5)
 {
 digitalWrite(6,HIGH);
 digitalWrite(7,LOW);
 digitalWrite(8,HIGH);
 digitalWrite(9,LOW);
 }
 if(y==6)
 {
 digitalWrite(6,LOW);
 digitalWrite(7,HIGH);
 digitalWrite(8,HIGH);
 digitalWrite(9,LOW);
 }
 if(y==7)
 {
 digitalWrite(6,HIGH);
 digitalWrite(7,HIGH);
 digitalWrite(8,HIGH);
 digitalWrite(9,LOW);
 }
 if(y==8)
 {
 digitalWrite(6,LOW);
 digitalWrite(7,LOW);
 digitalWrite(8,LOW);
 digitalWrite(9,HIGH);
 }
 if(y==9)
 {
 digitalWrite(6,HIGH);
 digitalWrite(7,LOW);
 digitalWrite(8,LOW);
 digitalWrite(9,HIGH);
 }
}

มุมมองของโปรเจค

ตัวนับวัตถุด้วยเซ็นเซอร์อินฟราเรด (IR) นี่แหละคือ "สะพานอัตโนมัติ" พื้นฐานและเจ๋งๆ สำหรับนักพัฒนาไฟฟ้าอิเล็กทรอนิกส์ยุคใหม่ ด้วยการโฟกัสที่บล็อคสร้างพื้นฐานสำคัญ—นั่นคือ ตรรกะการสะท้อนของลำแสงอินฟราเรด และ การแมปเอาต์พุตจาก BCD ไปยังเซ็กเมนต์แบบประสานเวลา—น้องจะได้เรียนรู้วิธีตั้งทิศทางตัวเองและทำให้งานนับของอัตโนมัติ โดยใช้ตรรกะซอฟต์แวร์เฉพาะทางและการตั้งค่าพื้นฐานที่แข็งแกร่ง

การลงมือทำจริง: ตรรกะของเซ็นเซอร์ IR และไดรเวอร์ดิจิทัล

โปรเจคนี้เผยให้เห็นชั้นที่ซ่อนอยู่ของการโต้ตอบจากเซ็นซิ่งไปจนถึงการนับแบบง่ายๆ:

  • ชั้นการระบุ: เซ็นเซอร์อินฟราเรด (IR Proximity Sensor) ทำหน้าที่เป็นดวงตาระดับความละเอียดสูง คอยตรวจจับการมีอยู่ของสิ่งกีดขวางและสร้างพัลส์ดิจิทัลเมื่อตรวจพบ
  • ชั้นการแปลง: ระบบใช้พินดิจิทัลความเร็วสูงเพื่อรับพัลส์ไบนารีเหล่านี้ สำหรับงานเซ็นซิ่งที่สำคัญระดับภารกิจ
  • ชั้นอินเทอร์เฟซแสดงผล: จอแสดงผล 7-Segment สองตัว ทำหน้าที่เป็นแดชบอร์ดแสดงข้อมูลภาพความคมชัดสูง สำหรับตรวจสอบสถานะการนับของน้อง (เช่น 0 ถึง 99)
  • ชั้นตรรกะไดรเวอร์: ไอซี CD4511 สองตัว ทำหน้าที่แปลงสัญญาณจาก BCD เป็น 7-Segment ทำให้การแสดงผลสถานะเป็นไปโดยอัตโนมัติขณะทำงาน
  • ตรรกะการประมวลผล: โค้ด Arduino ใช้กลยุทธ์ "มองหา-ส่งต่อ" (หรือ นับ-ส่งต่อ): มันตีความพัลส์จากเซ็นเซอร์และจับคู่กับเอาต์พุตดิจิทัลแบบ BCD เพื่อให้การนับวัตถุเป็นไปอย่างปลอดภัยและเป็นจังหวะ
  • ลูปการสื่อสาร: บิตของตัวนับจะถูกส่งเป็นจังหวะไปยัง Serial Monitor เพื่อใช้ในการดีบั๊กแบบเรียลไทม์และตรวจสอบสถานะ

โครงสร้างพื้นฐานฮาร์ดแวร์-อัตโนมัติ

  • Arduino Uno: "สมอง" ของโปรเจค จัดการการสุ่มตัวอย่างดิจิทัลหลายทิศทางและประสานงานระหว่างไอซีไดรเวอร์กับเซ็นเซอร์
  • เซ็นเซอร์อินฟราเรด (IR Proximity Sensor): ให้ "ลิงก์การวัด" ที่ชัดเจนและน่าเชื่อถือสำหรับจุดใดๆ บนสายพานหรือทางผ่าน
  • ไอซีไดรเวอร์ CD4511: ให้อินเทอร์เฟซทางกายภาพที่มีความจุสูงและน่าเชื่อถือ สำหรับ "ภารกิจแสดงผล" ครั้งแรกให้สำเร็จ
  • จอแสดงผล 7-Segment: ให้ "ลิงก์ภาพ" ที่แม่นยำสูงและน่าเชื่อถือสำหรับหลักหน่วยและหลักสิบ
  • เบรดบอร์ด: วิธีที่สะดวกสำหรับการทำโปรโตไทป์วงจรอิเล็กทรอนิกส์อัตโนมัติชิ้นแรก และเชื่อมต่อทุกองค์ประกอบโดยไม่ต้องบัดกรี
  • สาย Micro-USB: ใช้สำหรับโปรแกรม Arduino และเป็นอินเทอร์เฟซหลักสำหรับตัวควบคุมระบบ

ขั้นตอนการนับอัตโนมัติและการโต้ตอบแบบทีละขั้น

กระบวนการนับที่ขับเคลื่อนด้วย IR ออกแบบมาให้ใช้ง่ายมาก:

  1. เตรียมพื้นที่ทำงาน: ตั้งค่าเซ็นเซอร์ IR และไอซีไดรเวอร์ในเบรดบอร์ดให้ถูกต้อง และเชื่อมต่อเข้ากับพินของ Arduino อย่างเหมาะสม
  2. ตั้งค่าการซิงค์ความเร็วสูง: ในสเก็ตช์ Arduino ให้กำหนดค่า pinMode() และกำหนดการแมปหลัก BCD ในฟังก์ชัน setup()
  3. ลูปการสื่อสารภายใน: ระบบจะทำการตรวจสอบดิจิทัลประสิทธิภาพสูงอย่างต่อเนื่อง และอัปเดตสถานะตัวนับแบบเรียลไทม์ตามทริกเกอร์จากเซ็นเซอร์ของน้อง
  4. การบูรณาการข้อมูลและการตอบรับภาพ: ดูแดชบอร์ด 7-Segment ของน้องเปลี่ยนเป็นสัญญาณสถานะที่มีจังหวะโดยอัตโนมัติ พัลส์และตามการตั้งค่าตำแหน่งของน้องไปเลย

อนาคตที่รอการขยาย (Future Expansion)

  • เชื่อมต่อ OLED Dashboard แสดงตัวตน: ต่อจอ OLED ขนาดเล็กไว้ข้างๆ เพื่อแสดง "ยอดรวมทั้งชุด" หรือ "แบตเตอรี่ (%)" ไปเลยวัยรุ่น!
  • ซิงค์ข้อมูลสภาพอากาศหลายเซ็นเซอร์: ต่อบลูทูธโมดูล (Bluetooth Module) แบบเฉพาะทาง เพื่อทำ "Cloud-Logging" แม่นยำสูงแบบไร้สาย สะดวกเวอร์!
  • ซัพพอร์ตการลงทะเบียนผ่าน Cloud Interface: สร้างเว็บแดชบอร์ดเฉพาะทางบนมือถือผ่าน WiFi/BT เพื่อติดตามและบันทึกประวัติการนับแบบเป๊ะๆ เก็บไว้ดูย้อนหลังได้
  • ซัพพอร์ตปรับแต่งโปรไฟล์ความเร็วขั้นสูง: เพิ่ม "Deep Learning (vCore)" แบบเฉพาะทางลงในโค้ด เพื่อให้ระบบเปลี่ยนการทำงานอัตโนมัติตามรูปแบบที่ผู้ใช้กำหนดเอง! เก่งขึ้นอีกขั้น

Object Counter with IR Sync นี่แหละโปรเจกต์เด็ดสำหรับสายวิทย์-เทคที่อยากได้เครื่องมืออัตโนมัติแบบอินเทอร์แอคทีฟและน่าสนใจ! สู้งานนะน้อง!

[!IMPORTANT] เซ็นเซอร์อินฟราเรด (IR Sensor) ต้องมีการ ปรับเทียบแสงแวดล้อม (ambient light calibration) ที่แม่นยำ! อย่าลืมตรวจสอบว่าใช้ ตัวต้านทาน (Resistor) ที่แมตช์กันเหมาะสมสำหรับแต่ละส่วนของ LED Display ด้วยนะ ห้ามช็อตนะตัวนี้!

ข้อมูล Frontmatter ดั้งเดิม

title: "เคาน์เตอร์นับของเทพๆ ด้วยเซนเซอร์ IR งานง่ายแต่หล่อ!"
description: "งานนี้จัดไปแบบตึงๆ โดยพี่ Sujal Vasoya ให้น้องวัยรุ่นได้ลองเล่นกับเซนเซอร์ IR กับ Arduino กัน รับรองว่าได้ใช้ Interrupt และเขียนโค้ดแบบมือโปรแน่นอน!"
author: "vasoyasujal42"
category: ""
tags:
  - "display"
  - "monitoring"
  - "counting"
views: 9908
likes: 0
price: 1499
difficulty: "Intermediate"
components:
  - "1x USB-A to B Cable"
  - "2x 7 Segment LED Display, InfoVue"
  - "1x Breadboard (generic)"
  - "1x Jumper wires (generic)"
  - "1x Arduino UNO"
  - "2x CD4511 IC"
  - "1x IR sensor"
tools: []
apps:
  - "1x Arduino IDE"
downloadableFiles: []
documentationLinks: []
passwordHash: "571d6fab594f4c0e23d1ddbd8443dc2645d4d97a755a8286e5ee22ac588fbdd2"
encryptedPayload: "U2FsdGVkX1+f3Yr+d+deoWv8zRzhg5sJmYUwadA1aDhKo8XuPYT+zw1EtkRr3Q/XTVSYWT39n1q269PUUilAocUFRTAhNldazTuYpGO8xao="
seoDescription: "Build an Object counter with IR sensor using Arduino. A simple DIY project for beginners by Sujal Vasoya."
videoLinks:
  - "https://www.youtube.com/embed/hWM6uRdfr6w"
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/object-counter-with-ir-sensor-975586_cover.jpg"
lang: "en"