Raspberry Pi 초음파 센서 + LED + DB 기록 프로젝트 안내 💡

이번 글에서는 라즈베리파이와 Python을 활용하여 초음파 센서로 물체의 접근을 감지하고, 일정 거리 이내일 경우 LED를 켜며 그 시점을 SQLite DB에 저장하는 방법을 소개합니다. 초보자도 따라할 수 있는 IoT 실습 예제입니다.


🔧 필요한 부품

  • 라즈베리파이 (Raspberry Pi)
  • HC-SR04 초음파 센서
  • LED (1개)
  • 점퍼 케이블
  • CNDI 보드 (선택 사항)
  • SQLite3 (파이썬 내장)

🛠 GPIO 라이브러리 설치

  1. 아래 사이트에서 GPIO 패키지 다운로드: 🔗 GPIO 다운로드 링크
  2. 터미널에서 다음 명령어 실행:
cd /home/pi/Downloads
tar zxvf RPi.GPIO-0.7.0.tar.gz
cd RPi.GPIO-0.7.0
sudo apt-get install python-dev
sudo python setup.py install

📌 회로 구성 (핀 연결)

  • LED: GPIO 4
  • 초음파 센서 Trigger: GPIO 24
  • 초음파 센서 Echo: GPIO 23

🔄 LED 동작만 테스트해보고 싶다면?

👉 LED + 초음파센서 포스트 보기


💻 Python 예제 코드 (DB 기록 포함)

import RPi.GPIO as gpio
import time
import sys
import warnings
import sqlite3
from datetime import datetime

warnings.filterwarnings('ignore')

# DB 초기 설정
table = "inout_"
sqlselect = "select * from " + table
con = sqlite3.connect("INOUT_DATA.db")
cur = con.cursor()

# 핀 지정
LED = 4
TRIGER = 24
ECHO = 23

gpio.setmode(gpio.BCM)
gpio.setup(TRIGER, gpio.OUT)
gpio.setup(ECHO, gpio.IN)
gpio.setup(LED, gpio.OUT)

try:
    while True:
        gpio.output(TRIGER, gpio.LOW)
        time.sleep(0.1)
        gpio.output(TRIGER, gpio.HIGH)
        time.sleep(0.00002)
        gpio.output(TRIGER, gpio.LOW)

        while gpio.input(ECHO) == gpio.LOW:
            startTime = time.time()

        while gpio.input(ECHO) == gpio.HIGH:
            endTime = time.time()

        period = endTime - startTime
        dist_cm = round(period * 17241, 2)

        if dist_cm <= 20:
            print('🔔 접근 감지! LED ON')
            gpio.output(LED, gpio.HIGH)
            time.sleep(1)
            gpio.output(LED, gpio.LOW)
            time.sleep(1)

            cur.execute("INSERT INTO " + table + " (Date) VALUES (\"" + str(datetime.now()) + "\")")
            con.commit()

            cur.execute(sqlselect)
            print("\n[기록된 DB 내역]")
            while True:
                row = cur.fetchone()
                if row is None:
                    break
                print(row[0], row[1])

        print(f"현재 거리: {dist_cm} cm")

except KeyboardInterrupt:
    print("프로그램 종료 및 GPIO 정리")
    con.close()
    gpio.cleanup()
    sys.exit()

📌 마무리 요약

  • 초음파 센서로 물체 접근을 감지함
  • 감지 거리가 20cm 이하일 경우 LED 작동
  • 그 시점은 SQLite DB에 자동 저장됨

이 코드는 간단한 보안 알림 시스템이나 출입 감지 시스템의 기초로 확장할 수 있습니다. 실시간 모니터링이나 로그 분석 기능도 더해보세요! 😎

댓글 남기기