meta data for this page
  •  

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
ixc2025:lappeenranta:team_1:start [2025/05/21 11:55] – [9. Final Code] mrcixc2025:lappeenranta:team_1:start [2025/05/22 15:51] (current) – [1. Group Introduction] mrc
Line 5: Line 5:
 ==== 1. Group Introduction ==== ==== 1. Group Introduction ====
  
 +We are DAMP+J, a team formed during the hackathon to explore how IoT can be used to influence individual behavior for sustainability and well-being. Our group brings together complementary skills in embedded systems, software engineering, UX design, and environmental awareness.
  
 +Our approach prioritizes simplicity, functionality, and measurable impact. Rather than building complex systems for their own sake, we focused on applying accessible technologies to address everyday habits that have long-term environmental consequences.
 +
 +Our final project, FRoast, reflects this mindset—a behavior-aware smart fridge prototype designed to promote conscious food habits, reduce waste, and make sustainability both personal and actionable.
 +
 +
 +=== Our team members ===
 +- Jorge Leon
 +- Marcia Rodrigues
 +- Daniella Fajardo
 +- Prachi Singhal
 +- Abdulkadir Abubakar
 ==== 2. Initial brainstorming ideas/concepts ==== ==== 2. Initial brainstorming ideas/concepts ====
  
Line 13: Line 25:
 We explored several IoT-based concepts that aim to nudge individuals toward sustainable, healthy, and inclusive behaviors, using a combination of sensors, actuators, for IoT tools. Below are the documented ideas from our brainstorming process: We explored several IoT-based concepts that aim to nudge individuals toward sustainable, healthy, and inclusive behaviors, using a combination of sensors, actuators, for IoT tools. Below are the documented ideas from our brainstorming process:
  
-=== 🚿 Smart Bath / Water Control System ===+=== Smart Bath / Water Control System ===
   * **Goal**: Reduce water and energy waste by encouraging shorter, more efficient showers.   * **Goal**: Reduce water and energy waste by encouraging shorter, more efficient showers.
   * **What it’s about**: This system monitors shower duration using steam and temperature sensors. It gives real-time feedback using buzzers, RGB lights, or LCD messages when a user exceeds optimal limits. The aim is to build awareness of water usage and promote sustainable bathing habits.   * **What it’s about**: This system monitors shower duration using steam and temperature sensors. It gives real-time feedback using buzzers, RGB lights, or LCD messages when a user exceeds optimal limits. The aim is to build awareness of water usage and promote sustainable bathing habits.
Line 22: Line 34:
     * Eco-feedback or daily stats to reward water-efficient behavior.     * Eco-feedback or daily stats to reward water-efficient behavior.
  
-=== 🌱 Sustainability Coach – In-Room Behavioral Monitoring ===+=== Sustainability Coach – In-Room Behavioral Monitoring ===
   * **Goal**: Help individuals become more energy-conscious in their personal spaces.   * **Goal**: Help individuals become more energy-conscious in their personal spaces.
   * **What it’s about**: This system acts as a digital coach inside a user’s room. It monitors air conditioning use, artificial lighting, fan activity, and motion detection to identify unnecessary resource consumption. Feedback is delivered via lights, screen messages, and audio cues.   * **What it’s about**: This system acts as a digital coach inside a user’s room. It monitors air conditioning use, artificial lighting, fan activity, and motion detection to identify unnecessary resource consumption. Feedback is delivered via lights, screen messages, and audio cues.
Line 32: Line 44:
     * Idle Energy Consumption: Alerts if no motion is detected but devices/lights are left on.     * Idle Energy Consumption: Alerts if no motion is detected but devices/lights are left on.
  
-=== 🥩 Meat Consumption Awareness Coach (Concept) ===+=== Meat Consumption Awareness Coach (Concept) ===
   * **Goal**: Encourage more sustainable dietary choices by reducing unnecessary meat consumption.   * **Goal**: Encourage more sustainable dietary choices by reducing unnecessary meat consumption.
   * **What it’s about**: While not fully developed, the concept involved using fridge/cooking access data to infer meat-heavy consumption patterns. The system would then prompt users with healthy plant-based alternatives or reminders through the display or audio.   * **What it’s about**: While not fully developed, the concept involved using fridge/cooking access data to infer meat-heavy consumption patterns. The system would then prompt users with healthy plant-based alternatives or reminders through the display or audio.
Line 41: Line 53:
     * While not implemented, this idea is aligned with the final fridge project selected.     * While not implemented, this idea is aligned with the final fridge project selected.
  
-=== ♿ EcoAccess Station – Adaptive Smart Environment for Inclusion ===+=== EcoAccess Station – Adaptive Smart Environment for Inclusion ===
   * **Goal**: Combine energy efficiency with personalized accessibility for users with diverse needs.   * **Goal**: Combine energy efficiency with personalized accessibility for users with diverse needs.
   * **What it’s about**: EcoAccess Station uses **RFID** to identify users and adapt room conditions based on their physical or sensory requirements (e.g., mobility-impaired, heat-sensitive). It combines **motion**, **temperature**, and **humidity** sensors to optimize energy use while respecting user comfort.   * **What it’s about**: EcoAccess Station uses **RFID** to identify users and adapt room conditions based on their physical or sensory requirements (e.g., mobility-impaired, heat-sensitive). It combines **motion**, **temperature**, and **humidity** sensors to optimize energy use while respecting user comfort.
Line 51: Line 63:
     * Provides accessible feedback through color-coded LEDs and simple audio/text messages.     * Provides accessible feedback through color-coded LEDs and simple audio/text messages.
  
-=== ❄️ Coach Fridge – Personal Eating Habits(Selected Project) ===+=== Coach Fridge – Personal Eating Habits(Selected Project) ===
   * **Goal**: Promote healthier eating habits and reduce unconscious fridge use through personalized feedback.   * **Goal**: Promote healthier eating habits and reduce unconscious fridge use through personalized feedback.
   * **What it’s about**: Coach Fridge uses **RFID** to identify users and monitors their **frequency**, **duration**, and **timing** of fridge access using **motion**, **steam**, **gas**, and **temperature** sensors. Based on the behavior, it provides real-time nudges such as reminders to avoid late-night snacking or to shorten door-open time.   * **What it’s about**: Coach Fridge uses **RFID** to identify users and monitors their **frequency**, **duration**, and **timing** of fridge access using **motion**, **steam**, **gas**, and **temperature** sensors. Based on the behavior, it provides real-time nudges such as reminders to avoid late-night snacking or to shorten door-open time.
Line 75: Line 87:
 ==== 3. Day 2 Presentation slides ==== ==== 3. Day 2 Presentation slides ====
  
 +{{ :ixc2025:lappeenranta:team_1:measuring-user-behavior-change-in-froast.pdf |}}
 ==== 4. Finalised Idea, description & Functions ==== ==== 4. Finalised Idea, description & Functions ====
  
Line 82: Line 94:
 The project is a smart fridge system designed to monitor and influence users’ eating habits through real-time feedback and personalized behavior tracking. It uses RFID identification, sensors, and actuators to encourage healthier and more sustainable routines such as avoiding late-night snacking, reducing energy waste, and improving food management. The project is a smart fridge system designed to monitor and influence users’ eating habits through real-time feedback and personalized behavior tracking. It uses RFID identification, sensors, and actuators to encourage healthier and more sustainable routines such as avoiding late-night snacking, reducing energy waste, and improving food management.
  
-=== 🔎 Description ===+=== Description ===
  
 Each time a user approaches the fridge, they are identified using an RFID tag. The system monitors fridge access patterns — how often, when, and for how long the fridge is used — and cross-references this with sensor data (e.g., steam, gas, temperature, motion) to detect potential habits like: Each time a user approaches the fridge, they are identified using an RFID tag. The system monitors fridge access patterns — how often, when, and for how long the fridge is used — and cross-references this with sensor data (e.g., steam, gas, temperature, motion) to detect potential habits like:
Line 94: Line 106:
 Real-time nudges are provided through LEDs, buzzer sounds, and messages on an LCD display, mimicking the role of a digital “fridge coach.” Real-time nudges are provided through LEDs, buzzer sounds, and messages on an LCD display, mimicking the role of a digital “fridge coach.”
  
-=== ⚙️ Functions ===+=== Functions ===
  
   * **User Identification**: RFID module links behavior to individual users.   * **User Identification**: RFID module links behavior to individual users.
Line 112: Line 124:
 ==== 5. Future Improvements ==== ==== 5. Future Improvements ====
  
-While the current prototype effectively demonstrates the core concept of behavior tracking and real-time feedback, several improvements can be made to expand functionality and user impact:+While the current prototype of FRoast successfully demonstrates real-time behavior tracking and feedback mechanisms, several enhancements could significantly broaden its impact, adaptability, and long-term user engagement. The following proposals aim to transform the system from a fixed, rule-based framework into a dynamic, user-centered behavioral assistant.
  
-  * **Data Logging and Analysis**   +=== 1. Nutritional Categorization and Food Typing === 
-    Store user behavior data (e.g.access timeduration, triggers) to analyze trends over days or weeks and generate visual feedback or reports.+Integrating basic food identification features—such as barcode scanningNFC tags, or weight sensors—could enable FRoast to provide context-specific feedback based on the type of food being storedThis would allow the system to: 
 +  * Encourage the storage of healthier food options 
 +  * Discourage excessive processed food consumption 
 +  * Track diversity in food selection
  
-  * **Mobile App or Dashboard Integration**   +=== 2. Inventory Management and Waste Reduction === 
-    Develop a simple companion interface to allow users to view their eating habits, receive personalized suggestions, and set behavioral goals.+By associating RFID tags with specific food items or enabling manual item logging, FRoast could offer inventory tracking capabilities. This would support: 
 +  Food rotation recommendations 
 +  * Alerts for items nearing expiration 
 +  * Waste reduction via proactive usage reminders
  
-  * **Nutritional Categorization**   +=== 3. Multimodal Feedback: Voice Integration === 
-    Add basic food recognition (via weight sensor or barcode scan) to help detect the type of food being accessed and give more specific dietary feedback.+To enhance accessibility, especially for users with visual impairments or limited literacy, the system could include auditory feedback through basic speech synthesis. Voice guidance could supplement or replace LCD text, making the system more inclusive for children, elderly users, or individuals with disabilities.
  
-  * **Fridge Inventory Tracking**   +=== 4. Energy Efficiency Adaptation === 
-    Track stored items using RFID or manual input to suggest food rotation and reduce waste (e.g., reminders for expiring items).+Incorporating ambient temperature sensing would enable FRoast to adjust its behavioral prompts based on seasonal energy considerationsFor example: 
 +  * Stricter alerts during hot weather when open-door cooling loss is more severe 
 +  * Relaxed thresholds during colder months when external temperatures mitigate loss
  
-  * **Voice Feedback System**   +=== 5. Machine Learning and Personalized Adaptation === 
-    Replace or supplement LCD messages with audio guidance for better accessibility, especially for children or visually impaired users.+Introducing a lightweight machine learning layer could allow the system to evolve beyond fixed thresholds. Using historical behavior data, the model could: 
 +  Adapt the intensity and tone of feedback to each user’s responsiveness 
 +  Identify subtle habit shifts and adjust nudging strategies accordingly 
 +  * Differentiate between habitual and intentional exceptions 
 +==== 6SUSAF Analysis ====
  
-  * **Energy Optimization Module**   +{{:ixc2025:lappeenranta:team_1:screenshot_2025-05-22_at_2.04.45 pm.png?400|}}
-    Add external temperature detection to adapt internal feedback based on seasonal energy demands (e.g., reducing unnecessary opening in summer).+
  
-  * **Machine Learning Integration**   +{{:ixc2025:lappeenranta:team_1:screenshot_2025-05-22_at_2.04.30 pm.png?400|}} 
-    Train a simple model to adapt nudging patterns based on user-specific behaviors rather than using static thresholds.+ 
 +{{:ixc2025:lappeenranta:team_1:screenshot_2025-05-22_at_2.04.11 pm.png?400|}} 
 + 
 +{{:ixc2025:lappeenranta:team_1:screenshot_2025-05-22_at_2.04.06 pm.png?400|}}
  
-These improvements would help transform FRoast from a rule-based behavior tool into a more adaptive, personalized, and accessible smart system. 
  
-==== 6. SUSAF Analysis ==== 
  
  
 ==== 7. Behavioral Change Analysis ==== ==== 7. Behavioral Change Analysis ====
  
-FRoast is designed to influence user behavior through repeated exposure to personalized, real-time feedbackBy monitoring interactions and providing subtle nudges, the system encourages users to adopt healthier and more sustainable eating habits over time.+FRoast is designed as more than a sensor-based monitoring system—it is a behavior-oriented intervention tool focused on reducing food and energy waste in domestic environmentsThrough RFID-linked user profiles, sensor feedback, and context-aware prompts, the system promotes conscious engagement with everyday habits related to food storage and refrigerator use.
  
-=== 🎯 Targeted Behaviors === +=== Rationale for Behavior Change ===
-  * Late-night snacking +
-  * Leaving the fridge open too long +
-  * Storing hot food improperly +
-  * Repetitive short visits (poor food rotation) +
-  * Ignoring seasonal energy efficiency +
-  * Lack of dietary awareness (e.g., not enough fruits or meal structure)+
  
-=== 🔍 Behavior Detection Mechanism === +Refrigerators contribute significantly to household energy consumption and are often involved in avoidable food waste due to poor usage habits. Traditional tracking alone provides data but fails to initiate meaningful changeFRoast addresses this gap by integrating real-time interventions—turning passive monitoring into active behavioral guidance.
-  * **RFID Identification** links behavior data to individual users. +
-  * **Sensor Data** (motion, temperature, steam, gas) enables contextual understanding of fridge use. +
-  * **Time-based Logic** determines whether behaviors occur during target windows (e.g., night hours, meal prep times). +
-  * **Usage Frequency & Duration** are logged to identify repetitive or excessive patterns.+
  
-=== 🔁 Feedback Strategy === +The premise is simple but effective: raising user awareness through timelypersonalized prompts can influence decision-making at the moment it matters mostBy embedding behavioral nudges into daily routinesthe system seeks to support more sustainable and health-conscious food practices over time.
-  * **Immediate feedback** through RGB lightsbuzzer alerts, and LCD messages reinforces self-awareness at the moment of action. +
-  * **Positive reinforcement** for reduced usage or healthy timing encourages habit building. +
-  * **Warning signals** during undesired behaviors (e.g., frequent night visits) create disruption that prompts reconsideration.+
  
-=== 📈 Potential Impact Over Time === +=== User-Specific Monitoring and Triggers ===
-  * Increased mindfulness around food access +
-  * Reduction in energy waste (fridge left open or hot food storage) +
-  * Healthier timing of meals and snacks +
-  * Decrease in impulsive or unconscious food-related behavior+
  
-Through continued use, the system promotes gradual behavior shifts without requiring drastic user effortrelying instead on consistent micro-interventions tailored to individual patterns. +Each user is identified via RFIDenabling individualized tracking and tailored feedbackThe following behaviors are monitored:
-==== 8Final Day Presentation Slides ====+
  
 +  * **Fridge Door Access Patterns**
 +    * Frequency of openings per day
 +    * Duration of door open per session
  
-==== 9. Final Code ====+  * **Nighttime Usage** 
 +    * Identification of fridge use during designated rest hours
  
-=== 🧪 Test CodeRFID + Servo + Buzzer ===+  * **Steam Events** 
 +    * Detection of hot food insertion through steam sensors, indicating inefficient storage behavior 
 + 
 +  * **Gas Events** 
 +    * Detection of spoilage or strong odors, signaling delayed disposal or neglected items 
 + 
 +  * **Fruit and Compartment Use** 
 +    * Patterns of compartment interaction, used as proxies for dietary diversity or habit stagnation 
 + 
 +=== Metrics for Evaluating Change === 
 + 
 +To assess the effectiveness of FRoast in modifying behavior, both quantitative and qualitative metrics are collected: 
 + 
 +**Quantitative Indicators** 
 +  * Average duration of fridge door openings over time 
 +  * Number of late-night access events per week 
 +  * Frequency of steam or gas sensor activations 
 +  * Interaction rates with the fruit compartment or healthier food zones 
 +  * Frequency of sustainability warnings recorded via the internal log or connected web interface 
 + 
 +**Qualitative Indicators** 
 +  * User-reported changes in snacking frequency or food discipline 
 +  * User preference tracking based on response to feedback tone (e.g., comedic, neutral, advisory) 
 + 
 +=== Anticipated Impact === 
 + 
 +The long-term objective of FRoast is to instill sustainable behavior without requiring significant user effort or intrusive systems. By embedding behaviorally-informed micro-interventions into an everyday appliance, the system can contribute to: 
 + 
 +  * Improved food storage habits and reduced spoilage 
 +  * Lower average energy usage through better door discipline 
 +  * Reduced impulsive eating, particularly at night 
 +  * Increased user engagement with sustainability as a personal responsibility 
 + 
 +Through repeated exposure to feedback and subtle reinforcement, FRoast supports gradual habit reformation, enhancing both environmental outcomes and personal well-being. 
 + 
 +==== 8. Final Day Presentation Slides ==== 
 + 
 +{{ :ixc2025:lappeenranta:team_1:impactxchange-hackathon-3.pdf |}} 
 +==== 9. Final Code ====
  
 <code python> <code python>
-from machine import Pin, PWM, I2C+import uasyncio as asyncio 
 +from machine import Pin, PWM, SoftI2C, ADC, DAC 
 +from i2c_lcd import I2cLcd
 import time import time
 +import dht
 from mfrc522_i2c import mfrc522 from mfrc522_i2c import mfrc522
 +import collections
  
-# ====== RFID Setup ====== +class MessageQueue: 
-addr 0x28          I2C address for MFRC522 +    def __init__(self): 
-scl 22             # I2C SCL pin +        self.queue = [] 
-sda = 21             I2C SDA pin + 
-rc522 = mfrc522(sclsdaaddr)+    async def put(self, item): 
 +        self.queue.append(item) 
 + 
 +    async def get(self): 
 +        while not self.queue: 
 +            await asyncio.sleep(0.1)  Non-blocking wait 
 +        return self.queue.pop(0) 
 + 
 +message_queue MessageQueue() 
 + 
 +# Constants 
 +SERVO_PIN 
 +BUZZER_PIN 25 
 +I2C_SCL 22 
 +I2C_SDA 21 
 +I2C_ADDR 0x27 
 +RFID_ADDR 0x28 
 +AUTHORIZED_ID 547 
 +SERVO_OPEN 125 
 +SERVO_CLOSE 28 
 +BUZZER_FREQ1 1000 
 +BUZZER_FREQ2 1500 
 +ALARM_DURATION 0.5 
 +HUMIDITY_THRESHOLD = 30 
 +TEMP_THRESHOLD = 27 
 +GAS_PIN = 23 
 +GAS_SENSOR = Pin(GAS_PIN, Pin.IN, Pin.PULL_UP) 
 +GAS_THRESHOLD = 70  Adjust based on sensor calibration 
 + 
 +# State 
 +door_opened False 
 +open_time = 0 
 + 
 +# I2C + LCD setup 
 +i2c = SoftI2C(scl=Pin(I2C_SCL, Pin.OUT, pull=Pin.PULL_UP), 
 +              sda=Pin(I2C_SDA, Pin.OUT, pull=Pin.PULL_UP), 
 +              freq=100000) 
 +lcd = I2cLcd(i2c, I2C_ADDR, 2, 16) 
 + 
 +Buzzer setup 
 +buzzer = PWM(Pin(BUZZER_PIN)) 
 +buzzer.duty(0) 
 + 
 +# RFID setup 
 +rc522 = mfrc522(I2C_SCLI2C_SDARFID_ADDR)
 rc522.PCD_Init() rc522.PCD_Init()
 rc522.ShowReaderDetails() rc522.ShowReaderDetails()
  
-# ====== Variables ====== +DHT Sensor setup 
-data = 0 +DHT_SENSOR dht.DHT11(Pin(17)) 
-doorOpened = False +=== STEAM SETUP === 
-openTime = 0+STEAM_SENSOR ADC(Pin(34))  # Analog pin (VP/A2) 
 +STEAM_SENSOR.atten(ADC.ATTN_11DB)  # Full voltage range (0-3.3V) 
 +STEAM_THRESHOLD 800  # Analog value above this steam detected 
 + 
 +current_user "Unknown" 
 + 
 + 
 +async def move_servo(position): 
 +    servo PWM(Pin(SERVO_PIN)) 
 +    servo.freq(50) 
 +    servo.duty(position) 
 +    await asyncio.sleep(0.5) 
 +    servo.deinit() 
 + 
 +async def open_door(): 
 +    global door_opened, open_time 
 +    print("Opening door"
 +    await move_servo(SERVO_OPEN) 
 +    open_time = time.time() 
 +    door_opened = True 
 + 
 +async def close_door(): 
 +    global door_opened 
 +    print("Closing door"
 +    await move_servo(SERVO_CLOSE) 
 +    door_opened = False 
 + 
 + 
 +async def play_alarm(): 
 +    print("Playing alarm"
 +    buzzer.duty(512) 
 +    end_time time.ticks_ms() + 2000 
 +    while time.ticks_ms() < end_time: 
 +        buzzer.freq(BUZZER_FREQ1) 
 +        await asyncio.sleep(ALARM_DURATION) 
 +        buzzer.freq(BUZZER_FREQ2) 
 +        await asyncio.sleep(ALARM_DURATION) 
 +    buzzer.duty(0
 + 
 + 
 +async def scroll_text(text, row, delay=0.5): 
 +    if len(text) <= 16: 
 +        lcd.move_to(0, row) 
 +        lcd.putstr(text + ' ' * (16 - len(text))) 
 +        return 
 +    for i in range(len(text) - 15): 
 +        lcd.move_to(0, row) 
 +        lcd.putstr(text[i:i + 16]) 
 +        await asyncio.sleep(delay) 
 +     
 +async def message_handler(): 
 +    while True: 
 +        upper, lower = await message_queue.get() 
 +        lcd.clear() 
 +        await scroll_text(upper, 0) 
 +        await scroll_text(lower, 1) 
 + 
 +# --- ASYNC TASKS --- 
 + 
 +async def monitor_rfid(): 
 +    global door_opened, open_time 
 +    while True: 
 +        buzzer.duty(0) 
 +        if rc522.PICC_IsNewCardPresent(): 
 +            if rc522.PICC_ReadCardSerial(): 
 +                data = sum(rc522.uid.uidByte[0:rc522.uid.size]) 
 +                print("Card UID:", data) 
 +                current_user = data 
 +                print("USER,TYPE={}, TIMESTAMP={}".format(current_user, time.time())) 
 +                 
 +                if data == AUTHORIZED_ID: 
 +                    if door_opened: 
 +                        print("LOG,TYPE=OPEN_DOOR, TIMESTAMP={}".format(time.time())) 
 +                        duration = time.time() - open_time 
 +                        print("Duration:", duration) 
 +                        await close_door() 
 +                        if duration > 15: 
 +                            await play_alarm() 
 +                            await message_queue.put(("Your indecision is heating the planet.", "")) 
 +                            print("WARNING,TYPE=OPEN_DOOR, TIMESTAMP={}".format(time.time())) 
 + 
 +                        else: 
 +                            await message_queue.put(("Thanks", "For closing me")) 
 +                    else: 
 +                        await open_door() 
 + 
 +                        # Time-based snacking roast 
 +                        current_hour = time.localtime()[3] 
 +                        if current_hour >= 23 or current_hour < 5: 
 +                            await message_queue.put(("You hungry or just emotionally empty again?", "Go to sleep, goblin.")) 
 +                            print("WARNING,TYPE=LATE_NIGHT, TIMESTAMP={}".format(time.time())) 
 +                        else: 
 +                            await message_queue.put(("Welcome!", "Door is open")) 
 + 
 +                else: 
 +                    print("Not authorized"
 +                    await message_queue.put(("Access Denied", "Invalid Card")) 
 +        await asyncio.sleep(1) 
 + 
 +def monitor_steam_sensor(): 
 +    print("🔍 Steam sensor activated..."
 +    while True: 
 +        try: 
 +            analog_value = STEAM_SENSOR.read() 
 +            print("Steam sensor value:", analog_value) 
 + 
 +            if analog_value > STEAM_THRESHOLD: 
 +                await message_queue.put(("The fridge is not your sauna, pal.", "")) 
 +                print("WARNING,TYPE=HOT_FOOD, TIMESTAMP={}".format(time.time())) 
 + 
 +            await asyncio.sleep(2) 
 +  
 +        except Exception as e: 
 +            print("DHT read error:", e) 
 +        await asyncio.sleep(2) 
 +         
 +async def monitor_humidity(): 
 +    while True: 
 +        try: 
 +            DHT_SENSOR.measure() # Start DHT11 to measure data once. 
 +            # Call the built-in function of DHT to obtain temperature 
 +            # and humidity data and print them in “Shell”. 
 +            temperature_value = DHT_SENSOR.temperature() 
 +            humidity_value = DHT_SENSOR.humidity() 
 +            print('temperature:', temperature_value,'℃','humidity:', humidity_value,'%'
 +            if temperature_value > TEMP_THRESHOLD: 
 +                await message_queue.put(("Want to cool the Sahara too?", "")) 
 +                print("WARNING,TYPE=HOT_FOOD, TIMESTAMP={}".format(time.time())) 
 +            elif humidity_value > HUMIDITY_THRESHOLD: 
 +                await message_queue.put(("Too hot in here!", "Not a sauna, pal.")) 
 +                print("WARNING,TYPE=HOT_FOOD, TIMESTAMP={}".format(time.time())) 
 +        except Exception as e: 
 +            print("DHT read error:", e) 
 +        await asyncio.sleep(2) 
 + 
 +async def monitor_compartments(): 
 +    button1 = Pin(16, Pin.IN, Pin.PULL_UP) 
 + 
 +    button2 = Pin(27, Pin.IN, Pin.PULL_UP)                          #close 
 +      
 +    #Nest two for loops to make the module repeatedly display five states of red, green, blue, white and OFF. 
 + 
 +    while True: 
 +        try: 
 +            btnVal1 = button1.value()  # Reads the value of button 1
  
-====== Servo Setup (Fridge Door Simulation) ====== +            #print("button1 =",btnVal1 #Print it out in the shell
-servo = PWM(Pin(5)) +
-servo.freq(50)+
  
-# ====== Buzzer Setup ====== +            if(btnVal1 == 0): 
-buzzer = PWM(Pin(25)) +                await message_queue.put(("Those vitamins won’t drink themselves.", ""))
-buzzer.duty(0)  # Start with buzzer off+
  
-# Warning tone settings +                print("LOG,TYPE=VITAMIN, TIMESTAMP={}".format(time.time())) 
-freq1 1000     # First tone frequency +          
-freq2 1500     # Second tone frequency +            btnVal2 button2.value()
-alarmDuration 0.1  # Tone switch duration (seconds)+
  
-====== Main Loop ====== +            if(btnVal2 == 0): 
-while True: +                await message_queue.put(("Food compartment opened."""))
-    if rc522.PICC_IsNewCardPresent(): +
-        if rc522.PICC_ReadCardSerial(): +
-            print("Card UID:"+
-            for i in rc522.uid.uidByte[0 : rc522.uid.size]: +
-                data += i +
-        print("Card ID:", data)+
  
-        if data == 547:  # Authorized card ID (example) +                print("LOG,TYPE=FOOD, TIMESTAMP={}".format(time.time())) 
-            if doorOpened: +        except Exception as e: 
-                # Closing the door +            print("Compartments read error:", e
-                duration = time.time() - openTime +        await asyncio.sleep(0.5)
-                print("Duration:", duration+
-                print("Closing door") +
-                doorOpened = False+
  
-                # If door was left open too long, trigger warning +async def monitor_gas(): 
-                if duration > 3+    while True
-                    buzzer.duty(512)  # Medium volume +        try: 
-                    end_time time.ticks_ms() + 2000  # Run for 2 seconds +            gas_level GAS_SENSOR.value() 
-                    while time.ticks_ms() < end_time+            print("Gas Level:", gas_level) 
-                        buzzer.freq(freq1+            if not gas_level
-                        time.sleep(alarmDuration+                await message_queue.put(("You really like cultivating diseases, huh?", "Did your fruit die?")
-                        buzzer.freq(freq2+                print("WARNING,TYPE=FOOD_SPOILAGE, TIMESTAMP={}".format(time.time())
-                        time.sleep(alarmDuration) +        except Exception as e: 
-                    buzzer.duty(0 # Turn buzzer off+            print("Gas sensor error:", e
 +        await asyncio.sleep(3)
  
-                servo.duty(28)  Close position +--- MAIN --- 
-            else+async def main()
-                # Opening the door +    await asyncio.gather( 
-                buzzer.duty(0+        monitor_rfid(), 
-                servo.duty(125 # Open position +        monitor_humidity(), 
-                openTime = time.time() +        monitor_compartments(), 
-                doorOpened = True +        monitor_steam_sensor(), 
-                print("Opening door"+        monitor_gas(), 
-        else: +        message_handler(
-            print("Card not authorized")+    )
  
-        data = 0  # Reset for next read +asyncio.run(main())
-    time.sleep(0.5)+
 </code> </code>