สวัสดีชาว Maker สาย Automation ทุกคนครับ! ปกติเวลาเราทำระบบตรวจจับคน (Person Detection) เรามักจะต้องส่งภาพจากกล้องขึ้น Cloud หรือส่งไปประมวลผลที่ PC ข้างนอกใช่ไหมครับ? ซึ่งนั่นทำให้เกิดปัญหาเรื่อง ความปลอดภัยของข้อมูล (Privacy) อย่างหลีกเลี่ยงไม่ได้
แต่วันนี้เรามีโซลูชันสุดเจ๋งมานำเสนอ! โปรเจกต์นี้จะใช้ Raspberry Pi AI Camera ที่สามารถรัน AI Inference ได้จบในตัวกล้องเลย (On-device) ทำให้ไม่มีการส่งภาพถ่ายออกสู่ภายนอก มีแค่ข้อมูล Metadata (สถานะและพิกัด) เท่านั้นที่ถูกส่งไปยัง OpenPLC (ซอฟต์แวร์จำลอง PLC) เพื่อสั่งงานเปิดไฟแจ้งเตือน (Stack Light) แบบเรียลไทม์ครับ!
เตรียมของให้พร้อม (Required Equipment)
โปรเจกต์นี้เราจะใช้บอร์ด Raspberry Pi ถึง 2 ตัว เพื่อแบ่งหน้าที่กันทำงาน (ตัวนึงรันกล้อง ตัวนึงรัน OpenPLC) มาดูรายการของกันครับ:
💡 Maker's Tip: งาน Automation แบบนี้ การจัดระเบียบสายไฟและการระบายความร้อนสำคัญมากครับ! หากเพื่อนๆ กำลังหา บอร์ด Raspberry Pi 4/5, Relay Module หรืออยากจะเอา เครื่อง 3D Printer ไปปริ้นท์เคสยึดกล้อง AI และขาตั้งไฟ Tower เจ๋งๆ แวะไปช้อปอุปกรณ์ IoT และเส้นพลาสติกคุณภาพสูงได้ที่ Globalbyte เลยครับ! มีของพร้อมลุยโปรเจกต์เพียบ!
Step 1: การติดตั้งฮาร์ดแวร์และกล้อง (Setup & Connection)
เริ่มจากการลง OS ให้ Raspberry Pi ผ่าน Raspberry Pi Imager จากนั้นนำกล้อง AI มาต่อเข้ากับบอร์ด Pi 5 โดยใช้สาย MIPI CSI 22-pin (สำหรับ Pi 5) ข้อควรระวังคือทิศทางของสายแพ (FPC cable) ต้องหันหน้าคอนแทคให้ถูกฝั่งนะครับ
เมื่อต่อเสร็จ ให้รันคำสั่งเพื่อทดสอบกล้อง หากกล้องตรวจจับหน้าคนหรือแอปเปิลได้ แสดงว่าพร้อมลุย!
ดูภาพการติดตั้งและทดสอบกล้อง AI (View more) ซ่อนภาพ (View less)
Step 2: การเขียนโค้ดฝั่งกล้อง AI (AI Camera & Modbus)
เราจะใช้โมเดล nanodet_plus_416x416.rpk ที่ถูกเทรนมาจาก COCO dataset ซึ่งรู้จักคลาส "person" อยู่แล้ว เราจะเขียนโค้ด Python เพื่อให้เมื่อกล้องเจอคน จะส่งสถานะ True/False ผ่านโปรโตคอล Modbus TCP (โดยใช้ไลบรารี pymodbus ) ไปยัง OpenPLC ครับ
ด้านล่างคือตัวอย่างโค้ด Pymodbus ที่ช่วยอัปเดตสถานะของ Modbus Server หากตรวจพบคนในพื้นที่ (Detection Area) ที่กำหนด:
def update_di(context, in_person):
if in_person:
values = [1, 0, 0]
context[0x01].setValues(2, 0, values)
else:
values = [0, 1, 0]
context[0x01].setValues(2, 0, values)
def check_including_person(request):
global context
detections = last_detections
labels = get_labels()
if detections == []:
update_di(context, in_person=False)
return
else:
for detection in detections:
if labels[int(detection.category)] == "person":
if is_detection_area:
p_x, p_y, p_w, p_h = detection.box
if not((detection_area.x + detection_area.w <= p_x) or (p_x + p_w <= detection_area.x) or (detection_area.y + detection_area.h <= p_y) or (p_y + p_h <= detection_area.y)):
update_di(context, in_person=True)
return
else:
update_di(context, in_person=True)
return
update_di(context, in_person=False)
return
ดูโค้ดการตรวจจับแบบเต็ม (View full code) ซ่อนโค้ด (View less)
Step 3: การตั้งค่า OpenPLC (PLC Logic Configuration)
ในฝั่งของบอร์ด Pi 4 เราจะลง OpenPLC Runtime ไว้ครับ โดยเราต้องเขียน Ladder logic ง่ายๆ (ภาษาควบคุมเครื่องจักร) ในโปรแกรม OpenPLC Editor บน PC เพื่อสั่งว่า "ถ้า Modbus ส่งค่ามาว่าเจอคน ให้สั่งเปิดไฟสีแดงที่ขา GPIO ถ้าไม่เจอ ให้เปิดไฟสีเขียว"
เมื่อเขียนเสร็จ ให้แปลงเป็นไฟล์ .st แล้วอัปโหลดขึ้นเว็บ Dashboard ของ OpenPLC Runtime พร้อมกับตั้งค่า Hardware Layer และ Slave Device ให้ตรงกับ IP ของ Pi 5 (ฝั่งกล้อง) ครับ
ดูภาพการตั้งค่า OpenPLC ทั้งหมด (View more) ซ่อนภาพ (View less)
Step 4: ต่อวงจรไฟ Stack Light และรันระบบ!
เนื่องจากขา GPIO ของ Raspberry Pi ปล่อยไฟได้แค่ 3.3V หรือ 5V แต่ไฟ Stack light ของโรงงานใช้ไฟถึง 24V เราจึงต้องต่อ Relay Module คั่นกลางครับ โดยรับสัญญาณทริกเกอร์จาก Pi ไปเปิด/ปิดไฟ 24V จาก Power Supply
ผลลัพธ์การรันระบบ (Execution Results)
เมื่อกด Start PLC และรันโค้ด Python ฝั่งกล้องเสร็จแล้ว ลองเดินผ่านกล้องดูครับ!
หากไม่มีคน: ไฟ Stack light จะโชว์สีเขียว
เมื่อคนเดินเข้ากล้อง (หรือเข้าโซนที่กำหนด): ไฟ Stack light จะเปลี่ยนเป็นสีแดงทันที!
สรุป (Conclusion)
โปรเจกต์นี้พิสูจน์ให้เห็นว่าเราสามารถนำ Raspberry Pi AI Camera มาประยุกต์ใช้กับ OpenPLC เพื่อจำลองการควบคุมเครื่องจักรในโรงงาน (Automation) ได้อย่างสมบูรณ์แบบ แถมยังตอบโจทย์เรื่อง Privacy ขั้นสุด เพราะไม่ต้องส่งรูปภาพออกไปประมวลผลที่ไหนเลย เพื่อนๆ สามารถนำไอเดียนี้ไปต่อยอดทำระบบแจ้งเตือนของเสีย หรือนับจำนวนคนเข้าออกได้สบายๆ เลยครับ!
*คำเตือน: เนื้อหานี้เป็นการสรุปและเรียบเรียงแนวคิดจากบทความโปรเจกต์ต้นฉบับภาษาอังกฤษ ข้อมูลและขั้นตอนการต่อวงจรบางส่วนอาจมีความคลาดเคลื่อนจากการย่อเนื้อหา โปรดใช้ความระมัดระวังในการต่อวงจรไฟฟ้ากระแสตรง (24V) ผ่านรีเลย์เพื่อป้องกันอันตรายจากไฟฟ้าลัดวงจร สามารถตรวจสอบรายละเอียดเชิงลึกและดาวน์โหลดโค้ดฉบับเต็มได้ที่
เว็บไซต์ต้นฉบับ