반응형

안녕하세요!
녹칸다입니다!

녹칸다의 산업용 아두이노(fa-duino)의 빠른 내용 전달을 위해서 코드와 작동결과만을 별도로 정리해보도록 하겠습니다~!

녹칸다의 산업용 아두이노 3편에서 1번예제를 정리해보도록 하겠습니다~!

 

산업용 아두이노에서 누름버튼을 누르게 아래와 같은 채터링 현상이 발생하게 됩니다~~!

그리고 그것을 해결하는 방안을 디바운스 처리라고 합니다~!

 

1.우리가 산업용 아두이노의 입력에 버튼을 1회 누른다라고 생각을하고 눌렀을때 그것이 1회 눌른것으로 인식이 되어야하는데 20~30번 누른것으로 인식된다!(채터링 현상)
2.우리는 1회 눌렀지만 아두이노의 루프가 대단히 빠르게 회전하면서 점검하는 관계로 여러번 인식되게 되는 것이다!
3.채터링 현상을 소프트웨어 적으로 해결하는 방안을 디바운스 처리라고 한다!
4.지금은 디바운스 처리에 대해서 알아보도록 한다!
5.아두이노의 라이브러리에 의한 디바운스처리!
6.내가 직접 구현해서 사용하는 디바운스 처리!
7.라이브러리 매니저를 열어서 bounce2라고 검색한다음 다운로드 받는다!
8.아두이노의 모든 라이브러리는 라이브러리를 활용하는 기본적인 예제를 포함하도록 구성되어있다!

 

반드시 디바운스 처리를 해야하냐라고 하면 아래와 같이 그렇지는 않습니다~!

1.채터링 현상을 반드시 해결해야하느냐?(x)
2.버튼을 눌렀을때 릴레이나 버튼의 작동상태가 스위칭 되는 것이라면 디바운스 처리는 필요없다!(버튼 2개가 있고 1번버튼을 누르면 릴레이가 ON되고 2번버튼을 누르면 OFF된다)
3.그러나 토글되는것이라면 디바운스 처리가 필요하다!(켜져있으면 끄고, 꺼저있으면 켜는 방식)
4.버튼을 누르면 녹칸다에게 문자를 전송한다!(디바운스 처리가 안되면 경고문자가 복수개 전송된다)

 

요약을 하자면 누름버튼을 눌렀을떄 자기유지가 되는 형태면 디바운스처리를 할 필요가없고 원버튼으로 2개이상의 상태를 스위칭할때는 필수적이라고 볼 수 있습니다~!

 

이번 예제는 누름버튼을 디바운스 처리해서 아두이노의 시리얼 모니터에 버튼이 1회 눌려진것을 감지하도록 해보는 목표가 있습니다~!

#include <Bounce2.h> //디바운스 처리를 위한 라이브러리!

Bounce bounce = Bounce(); //클래스 생성!

void setup() {
  Serial.begin(9600); //결과를 PC에 출력하겠다!
  bounce.attach(37,INPUT);
  //숫자가 높으면 높을수록 강도가 좋아진다!
  //한번 누른것을 한번 눌렀다고 인식할 확률이 높아진다!
  //내가 의도하고 연속적으로 누른버튼이 1회 눌러진것으로 인식될 확률또한 높아진다!
  bounce.interval(5);
}
void loop() {
  bounce.update();//이건 묻고따지지도않고 있어야하는것!

  //안눌렀다가 눌렀다
  //누르고 있다가 뗏다!
  if ( bounce.changed() ) {
    int deboucedInput = bounce.read();
    if ( deboucedInput == HIGH ) {
      //내가 버튼을 눌렀다면~
      Serial.println("녹칸다가 1회 버튼을 눌렀다!");
    }
  }
}

예제의 작동결과는 녹칸다의 라이브방송중 해당부분의 위치를 링크로 대체하도록 하겠습니다~~~!(원본이 3시간정도인 관계로~)

https://youtu.be/uXZTirk2SYw?t=1958 

 

반응형
Posted by 덕력킹
,