# The problem i am addressing is the ENVIRONMENT of the elderly
# heat will definetly become a problem for the elderly so I will make a machine that controlls
# the heat of the roomhttps://www.google.com/search?q=%E0%B8%AA%E0%B8%B9%E0%B8%95%E0%B8%A3%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%84%E0%B8%B9%E0%B8%93%E0%B8%84%E0%B8%A5%E0%B8%B2%E0%B8%94%E0%B9%80%E0%B8%84%E0%B8%A5%E0%B8%B7%E0%B9%88%E0%B8%AD%E0%B8%99&client=safari&sca_esv=b0c8a5b5dae9aa98&hl=en-gb&udm=2&biw=862&bih=1243&sxsrf=AE3TifNGoCb819fL7coQ6rvgaWP6UELk4g%3A1754321226245&ei=StGQaITbDuifvr0P89_wyAQ&ved=0ahUKEwiEqIzsu_GOAxXoj68BHfMvHEkQ4dUDCBE&uact=5&oq=%E0%B8%AA%E0%B8%B9%E0%B8%95%E0%B8%A3%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%84%E0%B8%B9%E0%B8%93%E0%B8%84%E0%B8%A5%E0%B8%B2%E0%B8%94%E0%B9%80%E0%B8%84%E0%B8%A5%E0%B8%B7%E0%B9%88%E0%B8%AD%E0%B8%99&gs_lp=EgNpbWciP-C4quC4ueC4leC4o-C4geC4suC4o-C4hOC4ueC4k-C4hOC4peC4suC4lOC5gOC4hOC4peC4t-C5iOC4reC4mUicb1DzLFiXa3AFeACQAQCYAWqgAcIFqgEDMi41uAEDyAEA-AEBmAIAoAIAmAMAiAYBkgcAoAflArIHALgHAMIHAMgHAA&sclient=img#vhid=WApGFRtsvEq4OM&vssid=mosaic$0
from dht import DHT22
from machine import Pin, I2C , PWM, SoftI2C
import time
import ssd1306
from servo import Servo
from machine_i2c_lcd import I2cLcd
from time import sleep
# pre defined variables
last_temp = 0
# Define the LCD I2C address and dimensions
I2C_ADDR = 0x27
I2C_NUM_ROWS = 4
I2C_NUM_COLS = 16
# Initialize I2C and LCD objects
i2c = SoftI2C(sda=Pin(22), scl=Pin(21), freq=400000)
# for ESP8266, uncomment the following line
#i2c = SoftI2C(sda=Pin(4), scl=Pin(5), freq=400000)
lcd = I2cLcd(i2c, I2C_ADDR, I2C_NUM_ROWS, I2C_NUM_COLS)
lcd.putstr("It's working :)")
sleep(4)
warm_warn = Pin(18,Pin.OUT)
cold_warn = Pin(19,Pin.OUT)
on_off = ["off","on"]
open_closed = ["closed","open"]
servos = [Servo(Pin(17)), Servo(Pin(16))]
servos[0].write_angle(180)
servos[1].write_angle(0)
buzzer = PWM(Pin(23))
buzzer.freq(500)
buzzer.duty_u16(0)
dht = DHT22(Pin(5))
dht.measure()
temp = dht.temperature()
room = {
"heat" : 35,
"AC" : False,
"Heater" : False,
"windows" : True
}
def buzz():
buzzer.duty_u16(10000)
time.sleep(0.5)
buzzer.duty_u16(0)
time.sleep(0.5)
def measure_temp():
dht.measure()
return dht.temperature()
def warning(temp):
if temp > 30 and temp < 37:
if room["AC"] == False:
warm_warn.value(1)
cold_warn.value(0)
buzz()
print("buzzed")
else:
warm_warn.value(1)
cold_warn.value(0)
elif temp > 37:
warm_warn(1)
cold_warn(0)
buzz()
elif temp < 15:
if room["Heater"] == False:
warm_warn.value(0)
cold_warn.value(1)
buzzer.duty_u16(10000)
time.sleep(0.5)
buzzer.duty_u16(0)
print("buzzed")
else:
warm_warn.value(0)
cold_warn.value(1)
else:
warm_warn.value(0)
cold_warn.value(0)
buzzer.duty_u16(0)
def RegulateTemp(temp):
room["heat"] = temp
warning(temp)
if temp > 30:
room["AC"] = True
room["Heater"] = False
elif temp < 15:
room["Heater"] = True
room["AC"] = False
else:
room["AC"] = False
room["Heater"] = False
# display what is on and off
print(f"AC is : {room["AC"]}")
print(f"HEATER is : {room["Heater"]}")
def windows(temp):
if temp > 30 :
servos[0].write_angle(180)
servos[1].write_angle(0)
room["windows"] = 0
elif temp > 20 and temp <= 30:
servos[0].write_angle(90)
servos[1].write_angle(90)
room["windows"] = 1
elif temp <= 20:
servos[0].write_angle(180)
servos[1].write_angle(0)
room["windows"] = 0
def stausLCD(temp):
lcd.clear()
lcd.move_to(0,0)
lcd.putstr(f"Temp : {temp}")
lcd.move_to(0,1)
lcd.putstr(f"Ac : {on_off[room["AC"]]}")
lcd.move_to(4,2)
lcd.putstr(f"Win : {open_closed[room["windows"]]}")
lcd.move_to(4,3)
lcd.putstr(f"Heater : {on_off[room["Heater"]]}")
#main loop
while True:
temp = measure_temp()
if temp != last_temp:
warning(temp)
RegulateTemp(temp)
windows(temp)
stausLCD(temp)
last_temp = temp
# tried making a class
"""
class Room():
def __init__(self,heat,AC_state,Heater_state):
self.atr = {
"heat" : heat,
"AC" : AC_state,
"Heater" : Heater_state
},
self.dht = None,
self.warm_warn = None
self.cold_warn = None
self.buzzer = None
self.oledscreen = None
def ShowStatus(self):
for key in self.atr.keys():
print(self.atr[key])
"""
sound warning
heat sensor
light warnings