print("this program will integrate ESP32 with ultrasonic sensor")
#import necessary modules/libraries
import hcsr04 #ultrasonic library
import ssd1306 #oled library
from utime import sleep
from machine import SoftI2C, Pin, PWM
#Create an object called ultrasonic_sensor using OOP (object oreinted programming)
#OOP format is --> library name.class(......)
ultrasonic_sensor = hcsr04.HCSR04(trigger_pin=13, echo_pin=27, echo_timeout_us=500*2*30)
#declare pin on OLED display
i2c_oled = SoftI2C(scl=Pin(22), sda=Pin(21))
oled_width = 128 #based on spec
oled_height = 64 #based on spec
#create an object called "oled"
#remark : object format "library name & class name"
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c_oled)
#Declare buzzer connection
buzzer = PWM(Pin(23, Pin.OUT))
while True:
#Let's test our ultrasonic sensor
jarak_in_cm = ultrasonic_sensor.distance_cm() #use when you need decimal point
jarak_in_mm = ultrasonic_sensor.distance_mm() #use when you want whole number
#Display the distance values on serial monitor
print('An object is detected in :', jarak_in_cm, 'cm')
print('An object is detected in :', jarak_in_mm, 'mm')
print('------------------------------------------------')
print('\n')
#Display distance value on OLED screen
oled.fill(1)
oled.text('Distance ditected:', 3, 0, 0)
oled.text(str(jarak_in_cm), 5, 20, 0)
oled.text('cm', 75, 20, 0)
oled.text(str(jarak_in_mm), 5, 40, 0)
oled.text('mm', 75, 40, 0)
oled.show()
if jarak_in_cm < 50:
for i in range (10):
buzzer.init(freq=1700, duty=400)
sleep(0.5)
buzzer.init(freq=1, duty=0)
sleep(0.5)
buzzer.init(freq=1000, duty=512)
elif 50<= jarak_in_cm < 150:
for i in range (10):
buzzer.init(freq=1700, duty=400)
sleep(1)
buzzer.init(freq=1, duty=0)
sleep(1)
else:
buzzer.init(freq=1, duty=0)
sleep(5)