#include <LiquidCrystal.h>
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
const int trigPin1 = PB5; // Door sensor
const int echoPin1 = PB6;
const int trigPin2 = PB8; // Top wall sensor
const int echoPin2 = PB4;
const int relayPin = PB7; // LED light pin
long duration1, duration2;
int distance1, distance2;
bool doorOpen = false;
bool wasDoorOpen = false;
bool occupied = false;
int personDetectedThreshold = 50;
void setup() {
lcd.begin(16, 2);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, LOW); // Light initially off
lcd.setCursor(0, 0);
lcd.print("Lavatory Status");
delay(2000);
lcd.clear();
}
void loop() {
// Measure distance from door sensor
digitalWrite(trigPin1, LOW);
delayMicroseconds(2);
digitalWrite(trigPin1, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin1, LOW);
duration1 = pulseIn(echoPin1, HIGH);
distance1 = duration1 * 0.034 / 2;
// Measure distance from top wall sensor
digitalWrite(trigPin2, LOW);
delayMicroseconds(2);
digitalWrite(trigPin2, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin2, LOW);
duration2 = pulseIn(echoPin2, HIGH);
distance2 = duration2 * 0.034 / 2;
if (distance1 > 5) {
doorOpen = true;
} else {
doorOpen = false;
}
if (wasDoorOpen && !doorOpen) {
if (distance2 < personDetectedThreshold) {
occupied = true;
} else {
occupied = false;
}
}
if (doorOpen) {
digitalWrite(relayPin, HIGH);
}
if (!doorOpen && !occupied) {
digitalWrite(relayPin, LOW);
}
lcd.setCursor(0, 0);
if (occupied) {
lcd.print("Occupied ");
} else {
lcd.print("Vacant ");
}
wasDoorOpen = doorOpen;
delay(1000);
}
{
"version": 1,
"author": "Uri Shaked",
"editor": "wokwi",
"parts": [
{ "type": "wokwi-breadboard", "id": "bb1", "top": 131.4, "left": 473.2, "attrs": {} },
{ "type": "board-stm32-bluepill", "id": "stm32", "top": 0, "left": 0, "attrs": {} },
{ "type": "wokwi-lcd1602", "id": "lcd1", "top": -169.37, "left": -185.6, "attrs": {} },
{
"type": "wokwi-hc-sr04",
"id": "ultrasonic1",
"top": -152.1,
"left": 168.7,
"attrs": { "distance": "257" }
},
{ "type": "wokwi-relay-module", "id": "relay1", "top": -19, "left": 326.4, "attrs": {} },
{
"type": "wokwi-hc-sr04",
"id": "ultrasonic2",
"top": 241.5,
"left": 178.3,
"attrs": { "distance": "15" }
},
{
"type": "wokwi-led",
"id": "led1",
"top": -109.2,
"left": 512.6,
"attrs": { "color": "red" }
},
{
"type": "wokwi-resistor",
"id": "r1",
"top": 13.55,
"left": 470.4,
"attrs": { "value": "220" }
},
{ "type": "wokwi-gnd", "id": "gnd1", "top": 38.4, "left": 546.6, "attrs": {} },
{ "type": "wokwi-gnd", "id": "gnd2", "top": 38.4, "left": 594.6, "attrs": {} },
{ "type": "wokwi-vcc", "id": "vcc1", "top": -85.64, "left": 470.4, "attrs": {} }
],
"connections": [
[ "stm32:A10", "$serialMonitor:TX", "green", [] ],
[ "stm32:A9", "$serialMonitor:RX", "green", [] ],
[ "lcd1:VSS", "stm32:GND.1", "green", [ "v0" ] ],
[ "lcd1:V0", "stm32:GND.2", "green", [ "v38.4", "h220.5", "v9.6" ] ],
[ "lcd1:RS", "stm32:B11", "green", [ "v28.8", "h230.7", "v57.6" ] ],
[ "lcd1:RW", "stm32:GND.3", "green", [ "v19.2", "h239.9", "v38.4" ] ],
[ "lcd1:E", "stm32:B10", "green", [ "v57.6", "h76.8", "v-48", "h163.2", "v86.4" ] ],
[ "lcd1:D4", "stm32:B0", "green", [ "v364.8", "h192", "v-249.6" ] ],
[ "lcd1:D5", "stm32:B1", "green", [ "v355.2", "h172.9", "v-249.6" ] ],
[ "lcd1:D6", "stm32:C13", "green", [ "v345.6", "h153.8", "v-124.8" ] ],
[ "lcd1:D7", "stm32:C14", "green", [ "v336", "h134.7", "v-124.8" ] ],
[ "lcd1:A", "stm32:3V3.1", "green", [ "v0" ] ],
[ "lcd1:K", "stm32:GND.1", "green", [ "v182.4", "h172.8", "v39.76" ] ],
[ "ultrasonic1:GND", "stm32:GND.1", "black", [ "v278.4", "h-256.77" ] ],
[ "stm32:B5", "ultrasonic1:TRIG", "magenta", [ "h0" ] ],
[ "stm32:B6", "ultrasonic1:ECHO", "magenta", [ "h0" ] ],
[ "stm32:B7", "relay1:IN", "green", [ "h44.37", "v-58.96", "h268.8" ] ],
[ "stm32:3V3.2", "relay1:VCC", "green", [ "h224.84", "v-58.96", "h28.8" ] ],
[ "relay1:GND", "stm32:GND.1", "black", [ "h-9.6", "v95.6", "h-211.2", "v115.2", "h-92.37"
] ],
[ "ultrasonic2:TRIG", "stm32:B8", "cyan", [ "v57.6", "h-230.8", "v-240" ] ],
[ "ultrasonic2:ECHO", "stm32:B4", "cyan", [ "v67.2", "h-231.2", "v-288" ] ],
[ "ultrasonic2:GND", "stm32:GND.1", "black", [ "v28.8", "h-116.4", "v-115.2", "h-149.97" ]
],
[ "lcd1:VDD", "bb1:tp.2", "green", [ "v422.4", "h-57.5" ] ],
[ "ultrasonic2:VCC", "bb1:tp.3", "red", [ "v57.6", "h-451.2" ] ],
[ "ultrasonic1:VCC", "bb1:tp.4", "red", [ "v278.4", "h-470.4" ] ],
[ "stm32:5V.1", "bb1:tp.1", "red", [ "v56.24", "h505.97" ] ],
[ "relay1:NO", "r1:1", "green", [ "h0" ] ],
[ "r1:2", "led1:A", "green", [ "v-48", "h46.8", "v48" ] ],
[ "led1:C", "gnd1:GND", "green", [ "h-28.4", "v105.6" ] ],
[ "relay1:NC", "gnd2:GND", "green", [ "v-1.2", "h78", "v-38.4", "h86.4" ] ],
[ "relay1:COM", "vcc1:VCC", "green", [ "h0" ] ]
],
"dependencies": {}
}