라즈베리파이4를 활용한 스마트 농장 프로젝트

라즈베리파이4를 활용한 스마트 농장 프로젝트 – 지식에 대한 탐구

1. 준비물

  • 라즈베리파이 4 (컨트롤 센터 역할)
  • 토양 수분 센서 (토양의 수분 상태를 체크)
  • 온도/습도 센서 (DHT11 또는 DHT22) (온도와 습도를 측정)
  • 카메라 모듈 (농작물의 상태를 촬영)
  • 릴레이 모듈 (자동 물 분사 장치를 제어)
  • 자동 물 분사 장치 (토양의 수분 상태에 따라 물을 분사)
  • 전원 어댑터 (전원 공급)
  • Micro SD 카드 (운영체제와 데이터 저장)
  • 브레드보드와 점프 와이어 (하드웨어 연결)

 

2. 라즈베리파이 설정

 

2-1. OS 설치

1. Micro SD 카드를 FAT32 형식으로 포맷합니다.

2. 라즈베리파이용 OS(라즈비안)을 다운로드하고, 라즈베리파이 imager를 이용해서 SD 카드에 쓰기를 합니다.

 

2-2. 기본 설정

키보드, 와이파이, 지역 설정을 마칩니다.

 

3. 하드웨어 연결

 

3-1. 토양 수분 센서 연결

센서의 VCC 핀을 라즈베리파이의 5V에, GND 핀을 GND에, SIG 핀을 GPIO 17에 연결합니다.

 

3-2. 온도/습도 센서 연결

DHT11의 VCC 핀을 3.3V에, GND 핀을 GND에, DATA 핀을 GPIO 27에 연결합니다.

 

3-3. 카메라 모듈 연결

라즈베리파이 보드에 있는 카메라 슬롯에 카메라 모듈을 연결합니다.

 

3-4. 릴레이 모듈 연결

릴레이의 VCC 핀을 5V에, GND 핀을 GND에, IN 핀을 GPIO 22에 연결합니다.

 

4. 코드 작성

 

4-1. 토양 수분 체크 코드 (check_soil_moisture.py)

import RPi.GPIO as GPIO

# GPIO 모드 설정
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.IN)

def check_soil_moisture():
    if GPIO.input(17):
        print("토양이 건조하여 수분이 필요합니다!")
        return False
    else:
        print("토양에 수분이 충분합니다!")
        return True

 

4-2. 온도/습도 체크 코드 (check_temp_humidity.py)

import Adafruit_DHT

def check_temp_humidity():
    # DHT11 센서 사용, GPIO 27번 핀에 연결
    humidity, temperature = Adafruit_DHT.read_retry(11, 27)
    if humidity is not None and temperature is not None:
        print(f"Temperature = {temperature:.1f}°C, Humidity = {humidity:.1f}%")
    else:
        print("센서 읽기 실패. 다시 시도합니다.")

 

4-3. 릴레이 제어 코드 (control_relay.py)

import RPi.GPIO as GPIO

# GPIO 모드 설정
GPIO.setmode(GPIO.BCM)
GPIO.setup(22, GPIO.OUT)

def control_relay(moisture):
    if not moisture:
        GPIO.output(22, True)
        print("물 공급을 시작합니다!")
    else:
        GPIO.output(22, False)
        print("물 공급을 중단합니다!")

 







 

4-4. 카메라 촬영 코드 (capture_image.py)

from picamera import PiCamera
from datetime import datetime

def capture_image():
    camera = PiCamera()
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    filename = f"/home/pi/farm_images/image_{timestamp}.jpg"
    camera.capture(filename)
    print(f"이미지가 저장되었습니다: {filename}")
    camera.close()

 

5. 실행

 

5-1. 메인 실행 코드 (main.py)

import time
from check_soil_moisture import check_soil_moisture
from check_temp_humidity import check_temp_humidity
from capture_image import capture_image
from control_relay import control_relay

def main():
    try:
        while True:
            soil_moisture = check_soil_moisture()
            control_relay(soil_moisture)
            check_temp_humidity()
            capture_image()
            time.sleep(60)  # 60초마다 실행
    except KeyboardInterrupt:
        print("프로그램을 종료합니다.")
    finally:
        GPIO.cleanup()  # GPIO 설정 초기화

if __name__ == "__main__":
    main()

위에서 작성한 모든 코드를 통합하여 main.py 파일을 주기적으로 실행시키면 됩니다.

# 메인 프로그램 실행
python3 main.py

 

이 프로젝트를 통해 라즈베리파이4를 활용한 기본적인 스마트 농장 시스템을 구축할 수 있습니다. 토양 수분, 온도, 습도를 모니터링하고 자동으로 물을 공급하며, 정기적으로 농작물의 상태를 촬영하여 기록합니다. 이 시스템을 기반으로 더 많은 센서와 기능을 추가하여 더욱 정교한 스마트 농장을 만들 수 있습니다.