아두이노에서 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

메카리워즈 Image Map

예비공대생 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 2017-10-05 (목) 18:06 7년전
안녕하세요 과학 프로젝트 때문에 아두이노 프로그래밍을 통해 rssi를 스케치해야하는 데요. 이 프로젝트하면서 처음으로 아두이노를 접해봐서 잘 모르겠어요. Lilypad Simblee BLE RFD 77101 이 보드를 사용해서 스케치할건데요. 나중에 이 보드를 스마트폰이랑 연동할 건데 그 값이 스마트폰으로 나와야하거든요. 그런데 하는 법을 잘 모르겠어요. 혹시 이 스케치 할 수 있으신가요?? 아니면 다른 보드나 패드에 만들어놓으신 rssi 예제라도 얻을 수 있을까요? 부탁드립니다.
주소

모바일 버전으로 보기