from machine import Pin, time_pulse_us
import time
# กำหนดขา GPIO
TRIG_PIN = 5 # ขา TRIG ของ Ultrasonic Sensor
ECHO_PIN = 18 # ขา ECHO ของ Ultrasonic Sensor
LED_PIN = 2 # ขาที่ต่อกับ LED (ใช้ GPIO 2 ซึ่งเป็น LED บนบอร์ด ESP32)
# ตั้งค่าขา
trig = Pin(TRIG_PIN, Pin.OUT)
echo = Pin(ECHO_PIN, Pin.IN)
led = Pin(LED_PIN, Pin.OUT)
def measure_distance():
# ส่งสัญญาณ TRIG
trig.off()
time.sleep_us(2)
trig.on()
time.sleep_us(10)
trig.off()
# วัดเวลาที่ใช้ในการรับสัญญาณกลับที่ ECHO
duration = time_pulse_us(echo, 1, 30000) # รอสูงสุด 30ms
if duration < 0:
return None # ถ้าไม่มีการตอบกลับ
# คำนวณระยะทาง (ความเร็วของเสียงในอากาศ ~343 m/s)
distance_cm = (duration / 2) / 29.1 # แปลงเป็นเซนติเมตร
return distance_cm
previous_distance = None
motion_detected = False
motion_timer = 0
try:
while True:
dist = measure_distance()
if dist is not None:
print(f"Distance: {dist} cm")
if previous_distance is not None:
# ตรวจสอบการเปลี่ยนแปลงของระยะทาง
distance_diff = abs(dist - previous_distance)
if distance_diff > 5: # ถ้าระยะทางเปลี่ยนมากกว่า 5 ซม.
print("Motion Detected")
motion_detected = True
motion_timer = time.ticks_ms() # บันทึกเวลาที่ตรวจพบการเคลื่อนไหว
previous_distance = dist
# ควบคุมไฟ LED
if motion_detected:
led.on()
# ตรวจสอบว่าผ่านไป 3 วินาทีหรือยัง
if time.ticks_diff(time.ticks_ms(), motion_timer) > 3000:
motion_detected = False
led.off()
else:
led.off()
time.sleep(0.1)
except KeyboardInterrupt:
print("Program stopped by user")
led.off()