RPi3로 식물 급수 자동화

8940 단어 RaspberryPi

배경


며칠 전 생각해 보니 베란다에 화분을 놓고 가지와 피망을 키우기 시작했다.
문제는 물을 주는 것이다.
나는 매일 아침 너에게 주어야 한다.
사실 예전에도 베란다에서 콩을 키운 적이 있지만 물을 주는 것을 잊어버리고 시들었던 과거가 있다.
나는 전철을 다시 밟고 싶지 않다.
원래 사람이 시간을 결정하는 동작을 하는 것은 불가능하다.
그런 건 기계로 해야지.
그래서 나는 자동으로 작물에 물을 주는 시스템을 만들기로 했다.

하드웨어


개요


비록 졸렬하지만 아래의 그림을 보십시오.

펌프로 베란다에 설치된 물탱크의 물을 길어 호스를 통해 화분에 물을 뿌린다.
펌프를 릴레이 모듈에 연결하면 라즈베리 파이에서 ON/OFF를 진행할 수 있습니다.
방수가 힘들어 실내에 계전기 모듈을 설치하는 등 펌프만 베란다에 두기로 했다.
전선은 에어컨 파이프의 구멍을 통해 실내로 들어간다.
물탱크에 물을 공급하는 것은 수동이다.일주일치 저축해서 주말에 같이 넣어요.
또 물을 주는 것과는 별 상관이 없지만 USB 카메라로 정기적으로 사진을 찍어 식물의 성장 기록을 남긴다.

재료


처음이기 때문에 우선 돈을 잘 쓰지 않는다는 점을 중시한다.
라즈파와 USB 카메라가 워낙 있어서 새로 사지 않았어요.
  • 펌프
    360엔
    https://www.amazon.co.jp/gp/product/B008OPKSC8/
  • 호스
    φ8mm 100엔/m 정도?
    근처 패밀리 센터에서 구매
  • AC 어댑터
    899엔
    https://www.amazon.co.jp/gp/product/B077P769L7
  • 계전기 모듈
    375엔
    https://www.amazon.co.jp/gp/product/B00L11KL10
  • Raspberry Pi3 Model B
    https://www.switch-science.com/catalog/3050/
  • USB 카메라
    https://www.amazon.co.jp/gp/product/B002EBBBCE
  • 물탱크
    거품 플라스틱 용기와 슈퍼마켓 봉투로 만든 거예요.투명한 것은 호스이고, 검은색은 펌프의 전원선이다.안 좋아 보이지만 돈 안 쓰고 준비했어요.
  • 프로비저닝


    USB 카메라로 찍은 사진은 다음과 같다.
    나는 창문을 사이에 두고 베란다를 촬영하고 있다.

    화분에 물을 뿌리기 위해 가스 연소기로 뾰족한 핀셋을 가열해 찌르고 호스에 구멍을 뚫었다.

    주의사항


    사이펀 원리.
    만약 호스의 물을 뿌리는 부분의 위치가 물탱크 안의 수면보다 낮으면 펌프를 닫아도 물이 계속 흐를 것이다.
    탱크를 낮은 곳에 두지 못했기 때문에 호스 위에 사이펀이 발생하지 않도록 공기가 통하는 구멍만 뚫었다.

    소프트웨어


    개요


    펌프 ON → OFF


    L천 카드만큼 간단해요.
    첫 번째 파라미터에서 지정한 값의 시간 (초) 펌프를 시작합니다.
    구입한 계전기 모듈은 입력 단락을 GND로 연결하면 계전기가 연결되기 때문에 11번 핀을false(GND)로 설정합니다.
    water.py
    import RPi.GPIO as GPIO
    import time
    import sys
    
    if (len(sys.argv) < 2):
        print("notime")
        quit()
    
    try:
        pump_time = int(sys.argv[1])
    except Exception:
        print("bad time")
        quit()
    
    GPIO.setwarnings(False)
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(11, GPIO.OUT)
    GPIO.output(11,False)
    time.sleep(pump_time)
    GPIO.output(11,GPIO.OUT)
    GPIO.cleanup()
    

    cron 호출 스크립트


    cron에서 직접 호출되는 처리를 설명합니다.
  • 일기예보를 확인해 비가 올 때 물 뿌리는 양을 줄인다.
    여기 의 보도 코드를 빌려 썼습니다.
  • 애니메이션으로 물을 뿌리는 모습을 기록하기 위해.
    참조: http://docoma.club/?p=763
  • camera 디렉터리에 다른 파일 서버가 마운트되었습니다.(SD 카드에 저장되지 않음)
  • takewater.sh
    #!/bin/bash
    
    RAINS=$(curl -s https://weather.yahoo.co.jp/weather/jp/14/4610/14110/******.html | tr '\n' ' ' | sed -e 's/<[^>]*>//g' | grep -oE ' - [0-9].*明日' | tr ' ' '\n' | grep -v '^$' | head -47 | tail -n 8 | awk '{SUM += $1}END{print SUM}')
    
    echo "RAIN="$RAINS
    
    PUMP_TIME=20
    if [ $RAINS -gt 10 ]; then
        PUMP_TIME=10
    fi
    
    echo "PUMP_TIME="$PUMP_TIME
    
    CAMERA_TIME=$((PUMP_TIME + 10))
    
    ffmpeg -f v4l2 -s 1280x1024 -i /dev/video0 -t 00:00:$CAMERA_TIME -loglevel quiet /home/kaz/camera/$(date +%Y%m%d-%H%M%S).mp4 &
    sleep 5
    python /home/kaz/water.py $PUMP_TIME
    sleep $((PUMP_TIME+5))
    
    

    정기적인 촬영


    cron을 통해 10분 간격으로 그림을 저장합니다.
    #!/bin/bash
    
    /usr/bin/fswebcam  /home/kaz/camera/$(date +%Y%m%d-%H%M%S).jpg -r 1280x1024 -S 10
    

    되돌아보다

  • 아침에 바쁠 때 베란다에 물을 주느라 힘들었지만 상당히 가벼워졌다.
    작물이 늘어나도 대처할 수 있다.
  • 호스 하나로 모든 대야에 물을 주는 방식은 좀 어렵다.
    호스에 구멍을 뚫거나 테이프로 막는 것을 반복하여 적당한 수량을 주기 위해 조정한다.
  • 센서로 토양의 수분을 측정하고 적으면 물을 줄 수도 있다.
  • 좋은 웹페이지 즐겨찾기