-
아두이노 | 광학식 엔코더 센서 HC-020K 모듈Technology/Arduino 2026. 9. 25. 18:00반응형
1. 광학식 엔코더 센서 HC-020K 모듈

광학식 엔코더 센서 HC-020K 모듈 광학식 엔코더 센서 HC-020K 모듈은 모터와 연동하여 모터의 회전 위치를 감지하는 용도로 사용한다. 모듈 돌출부 내부에는 적외선 발생 소자와 적외선 감지 센서가 서로 마주보게 배치되어 있는데, 이 사이로 촘촘하게 틈이 파여진 엔코더 원판을 배치한다. 모터 축에 연결된 엔코더 원판이 모터를 따라 회전함에 따라 적외선은 원판에 막혀 센서가 감지하지 못하거나, 틈 사이로 빠져나가 센서에 의해 감지된다. 이때 원판의 원주를 따라 파여진 틈의 개수와 적외선 센서로 감지한 디지털 신호의 개수를 비교하여 모터의 회전 위치를 파악한다. HC-020K 모듈은 DC 5V 전원 단자와 접지 단자, 디지털 신호를 출력하는 단자를 가지고 있다. 아래 링크로 접속하면 HC-020K 모듈을 구매할 수 있다.
AI 코딩교구는, 에듀이노
AI 코딩교구 & 아두이노 전문 쇼핑몰
www.eduino.kr
Photoelectric Encoder HC-020K | 3D CAD Model Library | GrabCAD
The CAD files and renderings posted to this website are created, uploaded and managed by third-party community members. This content and associated text is in no way sponsored by or affiliated with any company, organization, or real-world good that it may
grabcad.com
2. 분해능
광학식 엔코더 센서가 인식할 수 있는 최소 회전 각도, 즉 분해능(resolution)은 엔코더 원판 있는 틈의 개수에 의해 결정된다. 모터 축이 한 바퀴 회전했을 때 센서가 출력하는 디지털 신호의 횟수는 원판의 원주를 따라 일정한 간격으로 파여진 틈의 개수와 같다. 따라서 엔코더 센서는 360°를 틈의 개수로 나눈 만큼의 각도를 최소 단위로 인식할 수 있다. 해당 예제에서 다루는 모듈을 구매하면 일반적으로 엔코더 원판이 함께 배송되는데, 이 원판에 있는 틈의 개수는 총 20개이므로 분해능은 다음과 같이 계산할 수 있다.
$$ \begin{align} \mathrm{Resolution}=\frac{360^\circ}{20}=18^\circ \end{align} $$3. 디지털 인터럽트

디지털 인터럽트 지금까지 아두이노로 센서값을 입력 받은 것처럼, 엔코더 센서 또한 반복문을 이용하여 디지털 신호의 개수를 저장할 수 있다. 하지만 아두이노 프로그램이 센서가 포함된 반복문 외에 다른 프로그램을 실행하는 동안에는 엔코더 센서로 신호 개수를 셀 수 없어 오차가 발생하는 문제가 있다. 따라서 엔코더 센서를 사용하는 경우에는 아두이노 디지털 인터럽트 핀을 통해 엔코더 센서 신호를 읽어 프로그램 실행 현황과 무관하게 신호 개수를 저장한다. 아래 링크로 접속하면 아두이노에서 지원하는 디지털 인터럽트와 그 예제를 확인할 수 있다.
아두이노 | 디지털 인터럽트
1. 디지털 인터럽트 디지털 인터럽트는 디지털 신호가 특정 조건을 만족할 때 자동으로 특정 함수를 실행하는 기능이다. 이때 아두이노 루프 함수에서 실행되던 프로그램은 일시 정지되고,
vedacube.tistory.com
4. 예제
4.1. 회로 구성

회로 구성 4.2. 프로그램 작성
// 인터럽트 내부 변수 정의 volatile unsigned long totalPulses = 0; // 총 누적 펄스 수 int PULSES_PER_REV = 20; // 엔코더 원판 틈 개수 void setup() { pinMode(2, INPUT); // 디지털 2번 핀을 입력(INPUT) 모드로 설정 // 디지털 인터럽트 정의 // (1) 디지털 2번 핀을 인터럽트로 사용 // (2) 인터럽트 시 countPulse 함수 호출 // (3) 디지털 신호가 LOW에서 HIGH로 변할 때 함수 호출 attachInterrupt(digitalPinToInterrupt(2), countPulse, RISING); Serial.begin(9600); // 시리얼 통신 시작 (통신 속도: 9600 bps) } void loop() { // 현재 회전 위치 계산 (0~360도) int currentAngle = (totalPulses % PULSES_PER_REV) * (360.0 / PULSES_PER_REV); Serial.print(currentAngle); // 시리얼 모니터에 회전 위치 출력 Serial.println(" degree"); delay(100); // 100 ms 대기 } void countPulse() { totalPulses++; // 센서로부터 디지털 신호를 받을 때마다 변수값 1 증가 currentPulses++; }[함께 읽으면 좋은 페이지]
아두이노 라이브러리 | 자기 엔코더 센서 AS5600 모듈
1. 자기 엔코더 센서 AS5600 모듈 엔코더 센서는 물체가 회전할 때마다 디지털 신호를 출력하는 전자 소자로, 스텝모터에 부착하여 사용할 경우에는 모터의 회전 위치를 알 수 있어 서보모터처럼
vedacube.tistory.com
반응형'Technology > Arduino' 카테고리의 다른 글
아두이노 | 조이스틱 모듈 (0) 2026.07.03 아두이노 라이브러리 | 로드셀 신호 증폭 모듈 HX711 (0) 2026.01.09 아두이노 라이브러리 | I2C 멀티플렉서 TCA9548A 모듈 (0) 2024.11.27 아두이노 라이브러리 | 자기 엔코더 센서 AS5600 모듈 (2) 2024.11.26 아두이노 | BLDC모터 (0) 2024.11.25