from machine import I2C, Pin, PWM
import time
buzzer = PWM(Pin(16))
buzzer.freq(300)
class MPU6050:
def __init__(self, i2c, address=0x68):
self.i2c = i2c
self.address = address
self.init()
def init(self):
self.i2c.writeto_mem(self.address, 0x6B, b'\x00')
def read_raw_data(self, reg):
high = self.i2c.readfrom_mem(self.address, reg, 1)
low = self.i2c.readfrom_mem(self.address, reg + 1, 1)
value = (high[0] << 8) + low[0]
if value > 32767:
value -= 65536
return value
def get_accel_data(self):
ax = self.read_raw_data(0x3B)
ay = self.read_raw_data(0x3D)
az = self.read_raw_data(0x3F)
return ax, ay, az
def get_gyro_data(self):
gx = self.read_raw_data(0x43)
gy = self.read_raw_data(0x45)
gz = self.read_raw_data(0x47)
return gx, gy, gz
i2c = I2C(0, scl=Pin(1), sda=Pin(0))
mpu = MPU6050(i2c)
while True:
ax, ay, az = mpu.get_accel_data()
gx, gy, gz = mpu.get_gyro_data()
if gx < -20000 and not ax < -20000:
buzzer.duty_u16(60000)
elif gx > 20000 and not ax > 20000:
buzzer.duty_u16(60000)
else:
buzzer.duty_u16(0)
print('Accelerometer:', ax, ay, az)
print('Gyroscope:', gx, gy, gz)
time.sleep(0.3)