극한의 아두이노 DIY생활 - 일정한 물을 따라주는 기계8
안녕하세요!! Jimae입니다.
오늘은 이 설명을 마무리 하러!! 왔습니다.
하하하.. ㅠㅠ
우선 대략적으로 프로그램이 어떤식으로 구성되어있는지 나열은 했는대
워터 펌프라던지 압전센서가 어떻게 구성되어있는지 안썻더라구요.
그래서 쓰러 왔습니다.
void AutoWateringProgram(void)
{
switch(autoWateringStep)
{
case DETECTION: // 센서 감지
if(UltrasonicDetection() && PressureSensorDetection()) //센서 감지 됬을때 초음파와 압전센서 두개다 동시
{
TimerCountStart(); // 타이머 카운트 시작
autoWateringStep = DETECTION; // 계속 감지하기 위해 대기
}
else // 센서 감지 안될 경우
{
TimerCountStop(); // 타이머 카운트 멈춤
autoWateringStep = ANALYSIS; // 카운트된 시간 분석
}
break;
case ANALYSIS: // 카운트된 시간 분석
if(second < ONESETTINGSECOND) // 처음 세팅한 시간 값보다 작을시 감지 안된걸로 치고 다시 감지모드로
{
TimeCountInit();
autoWateringStep = DETECTION; // 시간 분석후 기준치에 못미칠때 다시 감지 모드로
break;
}
if(second >= ONESETTINGSECOND) mLCount = 0; // 1초 이상 시간 경과 50mL 나온다
else if(second >= TWOSETTINGSECOND) mLCount = 1; // 30초 이상 시간 경과 100mL 나온다
TimeCountInit(); // 타이머 데이터 초기화
autoWateringStep = ACTION; // 시간 분석후 기준치에 충족할때 동작으로
break;
case ACTION:
WaterPumpStart(); // 워터 펌프 동작
delay(waterTime[mLCount]); // 각 설정된 시간에 따라 멈춤
WaterPumpStop(); // 워터 펌프 멈춤
mLCount = MLCOUNTINITDATA; // mLCount 변수 초기화
autoWateringStep = DETECTION; // 다시 감지모드로
break;
}
}
우선 초음파 감지 부분을 보게되면
#define ECHOPIN 13
#define TRIGPIN 12
#define ULTRASONICDISTANCE 50 // 초음파 센서 감지 거리 cm 단위
float UltrasonicSensorRead(void)
{
float duration, distance;
// 초음파를 보낸다. 다 보내면 echo가 HIGH 상태로 대기하게 된다.
digitalWrite(TRIGPIN, HIGH);
delay(10);
digitalWrite(TRIGPIN, LOW);
// echoPin 이 HIGH를 유지한 시간을 저장 한다.
duration = pulseIn(ECHOPIN, HIGH);
// HIGH 였을 때 시간(초음파가 보냈다가 다시 들어온 시간)을 가지고 거리를 계산 한다.
distance = ((float)(340 * duration) / 10000) / 2;
return distance;
}
bool UltrasonicDetection(void)
{
if(UltrasonicSensorRead() <= ULTRASONICDISTANCE) return true;
else return false;
}
UltrasonicSensorRead 함수를 사용하여 초음파 센서 인식을 거리로 계산해서 판단합니다.
pulseIn 함수는 아두이노 내부에 있는 함수이고 옆에 주석으로 설명했습니다.
그리고 UltrasonicDetection 이 함수를 이용하여 50cm 이하에 물체가 있을경우 판단하게 됩니다.
#define PRESSUREPIN A0
int PressureSensorRead(void)
{
return analogRead(PRESSUREPIN);
}
그리고 압전센서는 ADC 값을 사용하여 데이터를 사용하지만... 그냥 감지만 되면 나오게끔 프로그램이 되어있내요.
과거의 나... 반성하겠습니다.
정말 과거의 나... 왜이렇게 프로그램을 짯는지..
개발자로써 과거의 만든 프로그램을 되돌아보며 리뷰하는것도 괜찮군요.
#define WATERPUMPPIN 9
void WaterPumpStart(void)
{
digitalWrite(WATERPUMPPIN, HIGH);
}
void WaterPumpStop(void)
{
digitalWrite(WATERPUMPPIN, LOW);
}
그리고 물펌프 동작 관련된 함수들 입니다.
저 함수를 사용하여 물펌프를 동작하게 하는것이죠.
이렇게 각 함수들의 동작을 간단하게 보았는대 생각외로 구성이 잘되어있는 한편
이상하게 만든것도 있내요.
보통 프로그램을 만들때 각 기능들을 c, h 씨와 헤더파일들을 정리해서 사용하는대
아두이노는 그렇게 만들기가 어렵습니다.
컴파일러가 똑똑하지 않아서 순차적으로 만들어줘야 하기때문에 정리해서 나눠놓기가 힘듭니다.
뭐 이런말은 나중에 그렇게 만든 프로젝트가 하나있어서 그때 소개 하겠습니다.
다들 좋은하루 되세요!
극한의 아두이노 DIY생활 - 일정한 물을 따라주는 기계1
극한의 아두이노 DIY생활 - 일정한 물을 따라주는 기계2
극한의 아두이노 DIY생활 - 일정한 물을 따라주는 기계3
극한의 아두이노 DIY생활 - 일정한 물을 따라주는 기계4
극한의 아두이노 DIY생활 - 일정한 물을 따라주는 기계5
극한의 아두이노 DIY생활 - 일정한 물을 따라주는 기계6
극한의 아두이노 DIY생활 - 일정한 물을 따라주는 기계7
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.