Skip to content

ควบคุมการทำงาน Ultrasonic

mrolarik edited this page Jul 29, 2018 · 11 revisions

ตัวอย่างการเชื่อมต่อ

RPi-ultrasonic ที่มา - https://hackernoon.com/android-things-basics-measure-distance-with-ultrasonic-sensor-3196fe5d7d7c

Ultrasonic sensor
ultrasonic

Connect ultrasonic pin to RPi

เชื่อมต่อสายระหว่าง ultrasonic sensor ไปยัง RPi

  • VCC --> 5V (Pin 2)
  • Trig --> GPIO 21 (Pin 40)
  • Echo --> GPIO 20 (Pin 38)
  • GND --> GND (Pin 34)

RPi-GPIO

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

ตัวอย่างโปรแกรมได้ดัดแปลงมาจากบทความในเว็บไซต์ ModMyPi โดยได้ดัดแปลงการเชื่อมต่อสาย (Wiring) จากบทความในเว็บไซต์ Hackernoon

#----------ultrasonic-01.py--------------
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)

TRIG = 21
ECHO = 20
print "Distance Measurement In Progress"

GPIO.setup(TRIG,GPIO.OUT)
GPIO.setup(ECHO,GPIO.IN)

GPIO.output(TRIG,False)
print "Waiting For Sensor To Settle"

time.sleep(2)

while(True):
        GPIO.output(TRIG,True)
        time.sleep(0.00001)
        GPIO.output(TRIG,False)

        while GPIO.input(ECHO)==0:
                pulse_start = time.time()

        while GPIO.input(ECHO) ==1:
                pulse_end = time.time()

        pulse_duration = pulse_end - pulse_start

        distance = pulse_duration * 17150
        distance = round(distance, 2)

        print "Distance:", distance, "cm"
        time.sleep(2)

GPIO.cleanup()

  • จากตัวอย่างข้างต้น การสั่งงานให้ ultrasonic ทำงานตลอดเวลา ใช้คำสั่ง while ครอบการทำงานของ ultrasonic ดังตัวอย่างต่ไปนี้
while(True):

        GPIO.output(TRIG,True)
        time.sleep(0.00001)
        GPIO.output(TRIG,False)

        print "GPIO.input(ECHO)", GPIO.input(ECHO)

        while GPIO.input(ECHO)==0:
                pulse_start = time.time()

        while GPIO.input(ECHO) ==1:
                pulse_end = time.time()

        pulse_duration = pulse_end - pulse_start

        distance = pulse_duration * 17150
        distance = round(distance, 2)

        print "Distance:", distance, "cm"
        time.sleep(2)

GPIO.cleanup()
  • หากไม่มีคำสั่ง time.sleep(2) โปรแกรมแสดงค่า Distance รวดเร็วจนมองไม่ทัน

ผลลัพธ์ของโปรแกรม

  • โปรแกรมจะแสดงผลลัพธ์ออกมาเป็นค่าระยะทาง (Distance) โดยคำนวณออกมาเป็นเซ็นติเมตร (Centimeter: cm)
  • จากตัวอย่างได้กำหนดชื่อของโปรแกรมคือ ultrasonic-01.py ดังนั้นหากจะเรียกใช้โปรแกรมสามารถทำได้ดังนี้
$ python ultrasonic-01.py

Distance Measurement In Progress
Waiting For Sensor To Settle
GPIO.input(ECHO) 0
Distance: 234.04 cm
GPIO.input(ECHO) 0
Distance: 234.03 cm
GPIO.input(ECHO) 0
Distance: 234.44 cm

RPi-ultrasonic

  • จากผลลัพธ์ หากระบบแสดงเฉพาะข้อความ Waiting For Sensor To Settle ค้างไว้ นั่นแสดงว่าโปรแกรมยังไม่สามารถเชื่อมต่อกับ ultrasonic sensor ได้ อาจเนื่องมาจากการกำหนดขาของ GPIO ผิดพลาด ต้องตรวจสอบให้ละเอียดอีกครั้ง
  • โปรแกรมจะทำงานตามเงื่อนไข while(True): ดังนั้น หากต้องการหยุดการทำงานให้กดปุ่ม ctrl+C

Download

Clone this wiki locally