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를 활용한 기본적인 스마트 농장 시스템을 구축할 수 있습니다. 토양 수분, 온도, 습도를 모니터링하고 자동으로 물을 공급하며, 정기적으로 농작물의 상태를 촬영하여 기록합니다. 이 시스템을 기반으로 더 많은 센서와 기능을 추가하여 더욱 정교한 스마트 농장을 만들 수 있습니다.