import machine
import time
# 1. Pin Configuration
trig = machine.Pin(5, machine.Pin.OUT)
echo = machine.Pin(18, machine.Pin.IN)
# Setup a clean hardware PWM channel on Pin 13
servo_pin = machine.Pin(13)
servo = machine.PWM(servo_pin)
servo.freq(50) # Standard frequency for SG90 servo
def get_distance():
trig.off()
time.sleep_us(2)
trig.on()
time.sleep_us(10)
trig.off()
duration = machine.time_pulse_us(echo, 1, 30000)
if duration < 0:
return 999
return (duration * 0.034) / 2
def set_angle(angle):
# Precise duty cycle mapping (40 = 0 degrees, 115 = 90 degrees)
duty_value = int(((angle / 180) * 150) + 40)
servo.duty(duty_value)
# System Initialization Reset
set_angle(0)
time.sleep(0.5)
print("✨ Hardware Loop Reset Complete! ✨")
print("Drag the green ultrasonic sensor slider back and forth to test.")
while True:
dist = get_distance()
print("Live Distance Reading:", round(dist, 1), "cm")
if 0 < dist < 20:
print("🔓 Object Detected! Lifting Gate Arm Up (90°)...")
set_angle(90)
else:
print("🔒 Way Cleared. Lowering Gate Arm Down (0°)...")
set_angle(0)
time.sleep(0.2)