본문 바로가기
심화캡스톤

아두이노 워터 펌프와 로드셀 이용하여 자동 급수기 제작

by Enhydra lutris 2023. 6. 28.

사실 완성품에는 섭취량을 자바와 통신하는 방법이 있지만 이번 포스팅에서는 그부분을 빼고 물의 양이 줄어들면 채워주는 자동 급수기 제작하는 법만 소개할 것이다 ㅎㅎ

 

로드셀과 워터 펌프에 대한 자세한 설명은 아래 링크에 있다.

https://seaotter.tistory.com/84

https://seaotter.tistory.com/82

 

아두이노 릴레이 모듈로 워터 펌프 제어하기 및 주의 사항

준비물: 아두이노 우노, 케이블, 5V릴레이 모듈, 워터 펌프 (보통 5V릴레이 모듈 보다 L9110 듀얼 모터 드라이버를 많이 사용하는거 같지만 구매했던 키트에 릴레이 모듈 밖에 없어서 릴레이 모듈

seaotter.tistory.com

 

준비물

HX711 24비트 ADC 모듈, 로드셀, 점퍼선, 물담을 그릇, 아두이노 우노, 5V릴레이 모듈, 워터 펌프, 워터 펌프에 연결할 호스

 

제작 방법

HX711 24비트 ADC 모듈, 로드셀을 따로 구매해서 사용해도 되지만 아래 사진과 같이 키트로 구매 하는 편이 훨씬 편하다.

회로를 찍어둔게 없어서 올리지 못하지만 위에 있는 로드셀 글과 워터 펌프글에 있는 회로를 아두이노 하나에 같이 꽂으면 된다.

하지만 분명 회로 안올리면 어려워할 사람이 있기 때문에 회로를 글로 설명하면 아래와 같다.

(나는 브레드 보드를 사용하여 더 깔끔하게 정리 했다 아래 글 참고해서 브레드 보드에 정리해서 회로 짜는걸 추천한다.)

릴레이 모듈 SIG - 사용할 디지털 핀에 연결(예제에서는 4)

릴레이 모듈 VCC - 아두이노 5V

릴레이 모듈 GND - 아두이노 GND

워터 펌프 빨간선 - 릴레이 모듈 NO

릴레이 모듈 COM - GND

워터 펌프 검은선 - 아두이노 Vin

로드셀 빨간선 - HX711 E+

로드셀 검은선 - HX711 E-

로드셀 하얀선 - HX711 A+

로드셀 초록선 - HX711 A-

HX711 VCC - 아두이노 5V

HX711 SCK- 클럭 핀으로 사용할 아두이노 디지털핀(예제에서는 2)

HX711 DT -  데이터 핀으로 사용할 아두이노 디지털핀(예제에서는 3)

HX711 GND - 아두이노 GND

 

나는 우드락을 이용하여 로드셀센서, 아두이노, 워터펌프를 감췄다.

그리고 조립할때 워터 펌프가 물이 나오는 호스 끝의 위치보다 낮으면 사이펀의 원리 때문에 워터 펌프가 꺼져도 물이 계속 나올 수 있으니 물컵 밑에 받침대 같을걸 둬서 물컵의 위치를 높게 만들어 줘야 한다.

 

코드

아래 코드는 그릇의 무게는 449고 물이 110ml 아래면 펌프가 작동하고 120ml 이상이면 펌프가 멈춘다.

로드셀 포스팅에서 설명했듯이 로드셀을 사용할 때는 캘리브레이션을 하고 사용해야한다.

로드셀 라이브러리는 아래에서 다운 받으면 된다. 라이브러리 추가 방법은 로드셀 포스팅을 참고하면 된다.

HX711_library.zip
0.00MB

#include "HX711.h"
#define calibration_factor 574.3 //캘리브레이션 값
#define DOUT  3 //데이터 핀
#define CLK  2 // 클럭 핀
#define PUMP 4 // 펌프 핀

int value;
HX711 scale(DOUT, CLK);

void setup() {
    Serial.begin(9600);  // 값 모니터링 위해서...
    scale.set_scale(calibration_factor);
    //scale.tare(); //영점잡기. 현재 측정값을 0으로 둔다.
    pinMode(PUMP, OUTPUT);
    digitalWrite(PUMP, LOW);
}
void loop() {
    vlaue = (int)scale.get_units();
    if (value != 0) {
        value = value - 449; //그릇 무게가 449g이였기 때문에 빼줌
    }
    if (value < 110) { //물이 110ml 보다 적어지면 펌프 켜기
        digitalWrite(PUMP, HIGH);
    }
    if (value > 120) { //물이 120ml 보다 많아지면 펌프 끄기
        digitalWrite(PUMP, LOW);
    }
}

 

작동영상

 

 

댓글