from machine import Pin, ADC, I2C
from time import sleep
import dht
from ssd1306 import SSD1306_I2C
#OLED setup
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
oled = SSD1306_I2C(128, 64, i2c)
#Inputs
button = Pin(12, Pin.IN, Pin.PULL_UP)
ldr = ADC(Pin(34))
ldr.atten(ADC.ATTN_11DB)
pot = ADC(Pin(35))
pot.atten(ADC.ATTN_11DB)
sensor_dht = dht.DHT22(Pin(4))
pir = Pin(27, Pin.IN)
#Outputs
led_green = Pin(2, Pin.OUT)
led_yellow = Pin(18, Pin.OUT)
led_red = Pin(5, Pin.OUT)
buzzer = Pin(15, Pin.OUT)
#OLED Display Function
def show_message(line1, line2=""):
oled.fill(0)
oled.text(line1, 0, 10)
oled.text(line2, 0, 30)
oled.show()
show_message("Smart Learning", "Panel Ready")
sleep(2)
while True:
# Read sensor values
light_val = ldr.read()
pot_val = pot.read()
pir_val = pir.value()
button_val = button.value()
# Temperature + Humidity
sleep(0.3)
sensor_dht.measure()
temp = sensor_dht.temperature()
hum = sensor_dht.humidity()
print("LDR:", light_val, "POT:", pot_val, "TEMP:", temp, "HUM:", hum, "PIR:", pir_val)
# Reset outputs
led_green.off()
led_yellow.off()
led_red.off()
buzzer.off()
#Motion Detected
if pir_val == 1:
led_yellow.on()
show_message("Motion Detected", "Student Present")
sleep(0.5)
#Light Check
if light_val > 600:
led_red.on()
buzzer.on()
show_message("Too Dark!", "Increase Light")
sleep(0.5)
buzzer.off()
#Temperature Check
if temp > 30:
led_red.on()
buzzer.on()
show_message("Too Hot!", f"Temp: {temp:.1f}C")
sleep(0.5)
buzzer.off()
#Potentiometer (Score level)
if pot_val > 3000:
led_green.on()
show_message("Good Job!", "High Score Level")
sleep(0.5)
if button_val == 0:
buzzer.on()
show_message("Answer", "Project Submitted!")
sleep(0.5)
buzzer.off()
sleep(0.3)