아두이노에서 pulseIn 함수 알아보고 응용하기 / 펄스인 / PWM / 기초 강좌안녕하세요 메카솔루션입니다. 이번에는 아두이노의 pulseIn(펄스인) 함수를 사용하는 방법과 응용하는 방법을 알아보고자 합니다. pulseIn 함수는? pulseIn 함수는 아두이노로 들어오는 특정 신호의 길이를 읽어들이는 함수입니다. 예를 들어서 다음 사진과 같은 신호가 들어오고있고 각 신호에서 HIGH 값이 몇 마이크로초동안 들어왔는지 읽을 수 있습니다. 저희가 아두이노를 사용하면서 가장 흔히 접하는 펄스 신호는 PWM 신호일 것입니다.(이름부터 Pulse Width Modulation) 이러한 PWM 신호를 아두이노에서 출력할 때는 analogWrite(핀,값); 의 모습인데 읽어들일 때는 pulseIn을 사용합니다. 또다른 pulseIn의 사용 사례로는 초음파 센서의 신호값이 돌아오는 것을 기다리는것도 하나의 pulseIn을 이용해 계산할 수 있습니다. 즉, pulseIn의 역할은 HIGH 또는 LOW 의 신호가 몇 마이크로 초동안 들어왔는지를 계산해주는 기능입니다. 기본적인 함수 사용법 기본적인 함수의 형태는 다음과 같습니다. unsigned long value = pulseIn(4,HIGH); 여기서 제한시간(TIME OUT)을 두면 다음 처럼 표현이 가능하지요 unsigned long value = pulseIn(4,HIGH,1000); 펄스를 읽는데 제한시간을 초과하면 0으로 출력되도록 하는것입니다. 여기서 펄스를 읽는 데 걸리는 시간이라하면 특정값(HIGH또는 LOW) 의 값이 올때까지 기다리는 시간과 값이 진행되는 시간을 의미합니다. 펄스를 읽는데 걸리는 시간이 제한 시간을 초과하면 출력되는 value 라는 변수값에는 0이 저장됩니다. 간단한 예제를 통해서 알아봅시다. 예제 따라해보기 - 회로 아두이노 보드 하나만으로 시도 할 수 있는 예제 입니다.
점퍼선으로 11번핀(PWM핀) 과 4번핀(디지털핀) 을 연결해줍니다. 예제 따라해보기 - 코드 void setup() { Serial.begin(9600); pinMode(4,INPUT); //디지털 핀 4번 pinMode(11,OUTPUT);// PWM 핀 11번 analogWrite(11,127);// 127의 PWM 값을 출력합니다. } void loop() { unsigned long value = pulseIn(4,HIGH,20000);//펄스를 읽습니다. int out = map(value,0,2000,0,255); //읽힌 펄스의 값을 PWM범위로 다시 바꾸어줍니다. Serial.println(out); } 정리하기 다음과 같은 동작 결과를 확인 할 수 있습니다.
PWM 으로 출력한 값인 127과 같거나 약간 벗어나는 값을 얻을 수 있었습니다. 이렇듯 pulseIn 은 PWM 등의 신호를 읽어들일 수 있는 역할을 하며 간혹 PWM값을 출력하는 센서에 사용하거나 드론수신기(PWM 값을 출력하는 대표 부품) 등의 제어 신호를 읽어 볼 수 있습니다. 감사합니다. 담당자: yevgeny
|