from machine import Pin, I2C, PWM
import time
import struct
# =========================
# I2C Setup (MPU6050)
# =========================
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
MPU_ADDR = 0x68
# Wake up MPU6050
i2c.writeto_mem(MPU_ADDR, 0x6B, b'\x00')
# =========================
# Buzzer Setup
# =========================
buzzer = PWM(Pin(14))
buzzer.freq(2000)
buzzer.duty(0)
# =========================
# Read Accelerometer
# =========================
def read_accel():
data = i2c.readfrom_mem(MPU_ADDR, 0x3B, 6)
ax, ay, az = struct.unpack(">hhh", data)
return ax, ay, az
# =========================
# Main Loop
# =========================
while True:
# Read raw accelerometer values
ax, ay, az = read_accel()
# Convert to g
ax = ax / 16384
ay = ay / 16384
az = az / 16384
# Print sensor readings
print("X={:.2f} | Y={:.2f} | Z={:.2f}".format(ax, ay, az))
# Calculate tilt level using X and Y axes
tilt = max(abs(ax), abs(ay))
# Turn off buzzer by default
buzzer.duty(0)
# Check tilt level
if tilt > 0.5:
buzzer.duty(512)
print("Status: WARNING - Large Tilt")
else:
print("Status: Normal")
print("------------------------")
time.sleep(0.3)