극한의 아두이노 DIY생활 - 일정한 물을 따라주는 기계8

in kr-dev 커뮤니티2 years ago

안녕하세요!! 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

Sort:  
 2 years ago 

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

Coin Marketplace

STEEM 0.29
TRX 0.11
JST 0.033
BTC 63458.69
ETH 3084.37
USDT 1.00
SBD 3.99