[TH] Raspberry Pi & Ultrasonic Sensor

บทความนี้กล่าวถึงการใช้โมดูล Ultrasonic กับบอร์ด Raspberry Pi (บทความก่อนหน้านี้ใช้กับ ESP8266) ด้วยภาษาไพธอนเพื่อแสดงระยะห่างจากเซ็นเซอร์กับวัตถุที่พบได้ใกล้ที่สุด

ภาพที่ 1 VisionRobo ที่ติดตั้งโมดูล Ultrasonic Sensor

อุปกรณ์

อุปกรณ์ประกอบการทดลองในบทความนี้ประกอบด้วย

  1. บอร์ด Raspberry Pi 3 หรือ 4
  2. บอร์ดโมดูลเซ็นเซอร์อัลตราโซนิค (Ultrasonic Sensor)

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

การเชื่อมต่อโมดูล Ultrasonic Sensor เข้ากับบอร์ด Raspberry Pi เป็นดังตารางต่อไปนี้

Raspberry PiUltrasonic Sensor
+5VDCVcc
GNDGND
GPIO20Trig
GPIO21Echo
ภาพที่ 2 การเชื่อมต่อสายระหว่างโมดูล Ultrasonic Sensor กับ GPIO ของบอร์ด Raspberry Pi

ตัวอย่างโปรแกรม

ตัวอย่างโปรแกรม code25-1 เป็นการกำหนดให้ขา GPIO20 เป็นขา Trig เพื่อส่งสัญญาณเสียงออก และขา GPIO21 เป็นขา Echo เพื่อรอรับสัญญาณเสียงที่สะท้อนกลับมา จึงกำหนดให้เป็นขา Output และ Input ตามลำดับ โดยการจับเวลาในการเคลื่อนที่ของเสียงที่สะท้อนกลับใช้คำสั่ง time.monotonic() หลังจากนั้นทำการคำนวณระยะทางในหน่วยเซ็นติเมตรแล้วรายงานผลออกทางจอแสดงผลดังตัวอย่างในภาพที่ 3


#code25-1
from time import time
from time import monotonic
from time import sleep
import RPi.GPIO as GPIO

pinTrig = 20
pinEcho = 21
mps = 343 # Metre per second (Sound speed)
GPIO.setmode(GPIO.BCM)
GPIO.setup(pinTrig, GPIO.OUT)
GPIO.setup(pinEcho, GPIO.IN)

GPIO.output(pinTrig, False)
sleep(0.5)
GPIO.output(pinTrig, True)
sleep(0.00001)
GPIO.output(pinTrig, False)

# send trig
GPIO.output(pinTrig, True)
sleep(0.00001)
GPIO.output(pinTrig, False)
# start count
t0 = monotonic()
while GPIO.input(pinEcho) == 0:
    # wait for echo
    pass
while GPIO.input(pinEcho) == 1:
    # wait for end echo
    pass
t1 = monotonic()
echoTime = t1-t0
distance = (echoTime*mps*100)/2
print("{} cm.".format(distance))
GPIO.cleanup()
ภาพที่ 3 ตัวอย่างผลลัพธ์การทำงานของ code25-1

สรุป

จากบทความนี้จะพบว่าหลักการทำงานและวิธีการเขียนโปรแกรมด้วยภาษาไพธอนเพื่อใช้งานโมดูล Ultrasonic Sensor ในการวัดระยะห่างระหว่างเซ็นเซอร์กับวัตถุที่พบใกล้ที่สุดนั้นใช้หลักการเขียนเหมือนกับบอร์ด ESP8266 เพียงแตกต่างในเรื่องขั้นตอนการสั่ง GPIO และไลบรารีที่แตกต่างกันเนื่องจาก MicroPython เป็นเพียงส่วนหนึ่งของตัวแปลภาษาไพธอนที่ใช้งานกับบอร์ดขนาดเล็ก ดังนั้น จึงต้องลดทอนและปรับปรุงให้เหมาะสม แต่ภาษาไพธอนบนบอร์ด Raspberry Pi นั้นเป็นตัวเดียวกับที่ใช้งานบนเครื่อง PC จึงมีความเข้ากันได้ และด้วยเหตุนี้การเขียนด้วยภาษาไพธอนจึงเหมาะกับผู้เขียนโปรแกรมที่เน้นการใช้งานและความเร็วในการทดสอบงาน แต่ถ้าเมื่อไรต้องการความเร็วของการทำงานโปรแกรมผู้เขียนโปรแกรมอาจจะต้องเลือกใช้ภาษาในระดับที่ลล่างกว่า เช่น ภาษา C/C++ และ Assembly

สุดท้ายนี้หวังว่าบทความนี้คงมีประโยชน์แก่ผู้อ่านบ้างไม่มากก็น้อย และขอให้สนุกกับการเขียนโปรแกรมครับ

(C) 2020, โดย อ.ดนัย เจษฎาฐิติกุล/อ.จารุต บุศราทิจ
ปรับปรุงเมื่อ 2020-12-15