from machine import Pin, I2C, sleep, PWM, ADC
import mpu6050
import time
from oled import SSD1306, SSD1306_I2C
from stepper import StepperMotor
i2c = I2C(scl = Pin(22), sda = Pin(21))
mpu = mpu6050.accel(i2c)
oled = SSD1306_I2C(128, 64, i2c)
buzzer = Pin(23, Pin.OUT)
stepper = StepperMotor(step_pin=15, dir_pin=2)
ldr_pin = Pin(34)
ldr = ADC(ldr_pin)
ldr.atten(ADC.ATTN_0DB)
def det_state(ax, ay, az):
if ax > 0.5:
return "leaning Right"
stepper.step(1)
elif ax < -0.5:
return "leaning left"
elif ay> 0.5:
return " leaning forward"
elif ay< -0.5:
return " leaning backward"
elif az> 0.5:
return " upright"
elif az<- 0.5:
return " downward"
stepper.step(1)
else:
return "unkown"
def motor_motion():
if acy> 0.5 or acy < -0.5:
buzzer.on()
else:
buzzer.off()
# stepper.step(1)
while True:
values = (mpu.get_values())
gyz = values["GyZ"] / 131
gyy = values["GyY"] / 131
gyx = values["GyX"] / 131
acz = values["AcZ"] / 16384
acy = values["AcY"] / 16384
acx = values["AcX"] / 16384
state = det_state(acx, acy, acz)
oled.fill(0)
oled.text("leaning state", 0, 0)
oled.text(state, 0, 20)
oled.show()
motor_motion()
print("Gyro Z-Axis : ", gyz)
print("Gyro Y-Axis : ", gyy)
print("Gyro X-Axis : ", gyx)
print("Accel Z-Axis: ", acz)
print("Accel Y-Axis: ", acy)
print("Accel X-Axis: ", acx)
print("-----------------------")
time.sleep(1)
light_level = ldr.read()
print("Light level:", light_level)
# Check if it’s night (light level is low)
if light_level < 1000: # Adjust threshold as needed
print("It's night")
# Move the stepper motor (e.g., 100 steps)
print("Moving stepper motor...")
stepper.step(100)
else:
print("It's day")
time.sleep(1) # Delay between readings