ควบคุมการทำงาน Ultrasonic - mrolarik/simple-iot GitHub Wiki
ตัวอย่างการเชื่อมต่อ
ที่มา - https://hackernoon.com/android-things-basics-measure-distance-with-ultrasonic-sensor-3196fe5d7d7c
Ultrasonic sensor
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)
ตัวอย่างโปรแกรม
ตัวอย่างโปรแกรมได้ดัดแปลงมาจากบทความในเว็บไซต์ 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
- จากผลลัพธ์ หากระบบแสดงเฉพาะข้อความ
Waiting For Sensor To Settle
ค้างไว้ นั่นแสดงว่าโปรแกรมยังไม่สามารถเชื่อมต่อกับ ultrasonic sensor ได้ อาจเนื่องมาจากการกำหนดขาของ GPIO ผิดพลาด ต้องตรวจสอบให้ละเอียดอีกครั้ง - โปรแกรมจะทำงานตามเงื่อนไข
while(True):
ดังนั้น หากต้องการหยุดการทำงานให้กดปุ่มctrl+C
Download
- ดาวน์โหลดตัวอย่างโปรแกรม https://github.com/mrolarik/simple-iot/blob/master/raspberry-pi-program/RPi-ultrasonic-01.py