import RPi.GPIO as GPIO
import time
import pygame
ENTER_TRIG_PIN = 23
ENTER_ECHO_PIN = 24
EXIT_TRIG_PIN = 5
EXIT_ECHO_PIN = 6
# Configure GPIO pin for relay (LED strip)
RELAY_PIN = 17
# Initialize GPIO settings
GPIO.setmode(GPIO.BCM)
GPIO.setup(ENTER_TRIG_PIN, GPIO.OUT)
GPIO.setup(ENTER_ECHO_PIN, GPIO.IN)
GPIO.setup(EXIT_TRIG_PIN, GPIO.OUT)
GPIO.setup(EXIT_ECHO_PIN, GPIO.IN)
GPIO.setup(RELAY_PIN, GPIO.OUT)
# Initialize pygame for audio playback
pygame.init()
pygame.mixer.init()
# Set up audio file
audio_file = "music.mp3" # Replace with your audio file
# Function to play audio
def play_audio():
pygame.mixer.music.load(audio_file)
pygame.mixer.music.play()
# Function to stop audio
def stop_audio():
pygame.mixer.music.stop()
# Function to control LED strip
def control_led_strip(state):
GPIO.output(RELAY_PIN, state)
def measure_distance(trig_pin, echo_pin, num_readings=5):
distances = []
for _ in range(num_readings):
GPIO.output(trig_pin, True)
time.sleep(0.00001)
GPIO.output(trig_pin, False)
pulse_start = time.time()
pulse_end = time.time()
while GPIO.input(echo_pin) == 0:
pulse_start = time.time()
while GPIO.input(echo_pin) == 1:
pulse_end = time.time()
pulse_duration = pulse_end - pulse_start
distance = pulse_duration * 17150 # Speed of
distances.append(distance)
avg_distance = sum(distances) / num_readings
return avg_distance
try:
people_inside = 0 # Counter for people inside the room
entry_cooldown = False # Flag to prevent rapid multiple entries
exit_cooldown = False # Flag to prevent rapid multiple
while True:
enter_distance = measure_distance(ENTER_TRIG_PIN, ENTER_ECHO_PIN, num_readings=5)
print("measuring enter distance", enter_distance)
exit_distance = measure_distance(EXIT_TRIG_PIN, EXIT_ECHO_PIN,
print("measuring exit distance", exit_distance)
# Detecting if someone is within 30 cm range for entry
if enter_distance < 30 and not entry_cooldown:
people_inside += 1
entry_cooldown = True
time.sleep(2) # Entry cooldown period, adjust as
# Detecting if someone is within 30 cm range for exit
if exit_distance < 30 and people_inside > 0 and not exit_cooldown:
people_inside -= 1
exit_cooldown = True
time.sleep(2) # Exit cooldown period, adjust as
print(people_inside)
if people_inside > 0:
# play_audio()
# control_led_strip(GPIO.HIGH)
else:
# stop_audio()
# control_led_strip(GPIO.
if not (enter_distance < 30):
entry_cooldown =
if not (exit_distance < 30):
exit_cooldown =
except KeyboardInterrupt:
GPIO.cleanup()
pygame.mixer.quit()