from machine import Pin, I2C
import utime
from ssd1306 import SSD1306_I2C
from mpu6050 import MPU6050
from ds18x20 import DS18X20
import onewire
# Setup I2C
i2c = I2C(0, scl=Pin(17), sda=Pin(16), freq=100000)
# Initialize OLED and Accelerometer
oled = SSD1306_I2C(128, 64, i2c)
mpu = MPU6050(i2c)
# DS18B20 Temperature Sensor Setup
ds_pin = Pin(22) # GPIO pin for DS18B20
ds_sensor = DS18X20(onewire.OneWire(ds_pin))
roms = ds_sensor.scan()
# Buzzer Setup
buzzer = Pin(14, Pin.OUT)
TEMP_THRESHOLD = 45 # Overheat limit
ACCIDENT_THRESHOLD = 2.5 # Sudden movement detection
while True:
try:
# Read DS18B20 Temperature
ds_sensor.convert_temp()
utime.sleep(0.75) # Wait for conversion
temp = ds_sensor.read_temp(roms[0]) # Read first detected sensor
# Read Accelerometer Values
accel = mpu.get_acceleration()
accel_magnitude = (accel['x']**2 + accel['y']**2 + accel['z']**2) ** 0.5
# Display on OLED
oled.fill(0)
oled.text("Smart Helmet", 20, 0)
oled.text(f"Temp: {temp:.2f}C", 10, 20)
oled.text(f"Accel: {accel_magnitude:.2f}G", 10, 40)
# Overheat Warning
if temp > TEMP_THRESHOLD:
buzzer.value(1)
oled.text("Warning: HOT!", 10, 50)
# Accident Detection (Sudden impact)
if accel_magnitude > ACCIDENT_THRESHOLD:
buzzer.value(1)
oled.text("Accident Alert!", 10, 55)
else:
buzzer.value(0)
oled.show()
utime.sleep(1)
except Exception as e:
print("Error:", e)