from machine import Pin, PWM
from time import sleep, sleep_us, ticks_us, ticks_diff
#tarif pin haye ersal va daryaft amvaj seda ultrasonic va tarif pin buzzer
trig_pin = Pin(28, Pin.OUT)
echo_pin = Pin(27, Pin.IN)
buzzer_pin = PWM(Pin(26,Pin.OUT)) #tarif pin besorat pwm
def measure_distance():
# tashkil va ersal palse triger
trig_pin.off()
sleep_us(2)
trig_pin.on()
sleep_us(10)
trig_pin.off()
# entezar baraye shoroee palse echo
while echo_pin.value() == 0: #monazer shoroee palse echo mimanim
start_time = ticks_us() #zakhire zaman shoroee palse echo
#enteza baraye payan palse echo
while echo_pin.value() == 1: #montazer payane palse echo mimanim
end_time = ticks_us() #zakhire zaman payan palse echo
#mohasebe modat zaman palse echo
duration = ticks_diff(end_time, start_time)
#tabdil modat zaman palse be fasele bar hasbe cm
distance_cm = (duration * 0.0343) / 2
return distance_cm
def detect_and_alert():
distance = measure_distance() #andaze giriee fasele ba sensor
if distance is None:
print("Error measuring distance!") #dar sorat khata dar andaze giri, payam khata, namayesh dade mishavad
return
print(f"Distance: {distance:.2f} cm") #namayesh fasele andaze giri shode
#baresi inke aya fasele dar mahdode moshakhas shode ghara darad ya kheyr
if 20 <= distance <= 40:
print("!!!DETECTION Person!!!")
buzzer_pin.freq(3000) #tanzim ferecans buzzer bar roye 3000hz
buzzer_pin.duty_u16(32768) #tanzim duty cycle buzzer bar roye 50% az 65536 be 32768
sleep(0.8) #roshan mandan buzzer baraye 0.8s
buzzer_pin.duty_u16(0) #khamosh kardan buzzer
while True:
detect_and_alert() #ejraye halghe asli baraye andaze giri va hoshdar
sleep(1)