import machine
import ssd1306
import time
# Initialize the OLED display
i2c = machine.I2C(scl=machine.Pin(22), sda=machine.Pin(21))
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
# Initialize the ultrasonic sensor (HC-SR04)
# Trigger pin connected to pin 4, echo pin connected to pin 5
trigger_pin = machine.Pin(4, machine.Pin.OUT)
echo_pin = machine.Pin(5, machine.Pin.IN)
# Initialize the buzzer (change pin number accordingly)
buzzer_pin = machine.Pin(18, machine.Pin.OUT)
def read_distance():
# Send a 10us pulse to trigger the sensor
trigger_pin.value(1)
time.sleep_us(10)
trigger_pin.value(0)
# Measure the duration of the echo pulse
while echo_pin.value() == 0:
pulse_start = time.ticks_us()
while echo_pin.value() == 1:
pulse_end = time.ticks_us()
# Calculate the pulse duration and convert it to distance (in cm)
pulse_duration = time.ticks_diff(pulse_end, pulse_start)
distance = pulse_duration * 0.034 / 2 # Speed of sound in air is approximately 0.034 cm/μs
return distance
def display_distance(distance):
oled.fill(0)
oled.text("Distance: {:.2f} cm".format(distance), 0, 0)
oled.show()
def activate_buzzer():
# Activate buzzer
buzzer_pin.on()
def deactivate_buzzer():
# Deactivate buzzer
buzzer_pin.off()
while True:
distance = read_distance()
display_distance(distance)
if distance < 100:
activate_buzzer()
else:
deactivate_buzzer()
time.sleep(1) # Update every second