모터 펌프 제어

1) 모터 펌프 연결하기

물을 화분에 공급하거나 분수를 만들 때 사용되는 물 공급 펌프는 선풍기 연결과 동일합니다. 선풍기를 빼고 동일한 자리에 모터 펌프를 연결합니다. (Motor1 단자)

보드의 Motor1 단자에 연결시 검정색 선이 센서 핀 방향으로 향하도록 연결합니다. 만약, 잠시 후 소개할 예제가 실행되지 않는다면, 연결 방향을 반대로 하여 다시 연결해 봅니다.

2) 모터 펌프 제어하기

모터 펌프는 최소 작동 전압이 4.5V입니다. 따라서 Motor1 단자의 출력값을 최대값인 255로 설정해 주어야 모터가 작동됩니다.

아래 그림과 같이 모터가 작동되는 지를 확인하기 위해 Motor1Write 명령을 통해 255값을 설정해 줍니다.

procedure loop

Motor1Write(255)

Delay(1000)

end

3) 토양 습도센서를 활용하여 화분의 습도가 건조해 지면 자동으로 물주기

모터 펌프를 활용하여 화분에 물을 공급하는 예제를 작성해 보도록 하겠습니다. Push 버튼 스위치 등을 통하여 버튼이 클릭되었을 때 물을 펌프를 작동시켜서 물을 공급해도 되지만, 이번 예제에서는 토양습도 센서를 활용해 보도록 하겠습니다.

우선 모터 펌프에 물 공급 호스를 아래 그림과 같이 연결해 줍니다.

그 다음으로, 토양 습도 센서를 아날로그 0번 핀에 연결해 줍니다. 이 때 파란색 선이 보드 바깥쪽으로 향하도록 연결해 줍니다.

먼저 토양센서의 값을 출력해 보도록 하겠습니다. 다음과 같이 아날로그 0번 핀의 값을 읽어서 출력해 보도록 합니다.

procedure loop

a = AnalogRead(0)

PrintLine(a)

Delay(1000)

end

토양습도 센서는 공기중에서 두 개의 전극 사이가 전혀 연결되지 않은 상태에서는 값이 0이 출력됩니다.

하지만, 물에 담그거나 젖은 흙에 잠겨 있을 경우에는 400 이상의 값이 출력됩니다.

- 200 이하: 건조한 상태임

- 400 이상: 습도가 높은 상태임

이제 프로그램을 수정하여 습도값이 200 이하이면, 모터를 작동시켜서 물을 공급시켜 보도록 하겠습니다. 토양습도 센서값에 따라 펌프를 작동시키는 코드는 다음과 같습니다.

procedure loop

a = AnalogRead(0)	//토양 습도 센서의 값을 읽어옴

if (a < 200)

Motor1Write(255)	//모터를 작동시킴

else

Motor1Write(0)	//모터를 꺼줌

Delay(10000)	//10초 간격으로 체크

end

4) 아두이노 스케치 C 코드 예제입니다.

: 모터 펌프를 제어하는 C코드입니다.

//모터 펌프를 모터1 단자에 연결합니다.

//아래의 예제는 모터 펌프를 계속 작동시키는 예제입니다.

void MotorWrite(int power)

{

int v = abs(power);

if (v > 255)

v = 255;

if (power >= 0)

digitalWrite(4, LOW);

else

digitalWrite(4, HIGH);

analogWrite(5, v);

}

void setup()

{

pinMode(4, OUTPUT);

}

void loop()

{

MotorWrite(255);

delay(1000);

}

: 토양 습도 센서의 값을 출력하는 예제입니다.

//토양습도 센서를 아날로그 0번 핀에 연결합니다.

//아래의 예제는 토양습도 센서의 값을 0.1초 간격으로 시리얼로 출력시키는 예제입니다.

void setup()

{

Serial.begin(115200);

}

void loop()

{

int a0 = analogRead(0);

Serial.println(a0);

delay(100);

}

: 토양 습도 센서로 모터를 작동시키는 예제입니다.

//토양습도 센서를 아날로그 0번 핀에 연결합니다.

//모터 펌프를 모터1 단자에 연결합니다.

//아래의 예제는 토양습도 센서로 모터 펌프를 작동시키는 예제입니다.

void MotorWrite(int power)

{

int v = abs(power);

if (v > 255)

v = 255;

if (power >= 0)

digitalWrite(4, LOW);

else

digitalWrite(4, HIGH);

analogWrite(5, v);

}

void setup()

{

Serial.begin(115200);

pinMode(4, OUTPUT);

}

void loop()

{

int a0 = analogRead(0);

if (a0 < 200)

MotorWrite(255);

else

MotorWrite(0);

Serial.println(a0);

delay(100);

}