- import RPi.GPIO as GPIO
- import time
- import pygame
- # Configure GPIO pins for sensors
- 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 sound = 34300 cm/s
- 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 exits
- 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, num_readings=5)
- 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 needed
- # 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 needed
- print(people_inside)
- if people_inside > 0:
- print("people present")
- # play_audio()
- # control_led_strip(GPIO.HIGH)
- else:
- print("no one present")
- # stop_audio()
- # control_led_strip(GPIO.LOW)
- if not (enter_distance < 30):
- entry_cooldown = False
- if not (exit_distance < 30):
- exit_cooldown = False
- except KeyboardInterrupt:
- GPIO.cleanup()
- pygame.mixer.quit()