라즈베리 파이 로터리 인코더
이 튜토리얼은 라즈베리 파이로 증분 회전 인코더를 사용하는 방법을 안내합니다. 다룰 내용은 다음과 같습니다:
- 로터리 엔코더의 작동 원리
- 로터리 엔코더와 전위차계(또 다른 유형의 노브) 간의 차이점
- 로터리 엔코더를 Raspberry Pi에 물리적으로 연결하는 방법
- Raspberry Pi에서 로터리 엔코더의 방향과 위치를 읽기 위한 코딩 방법
Hardware Preparation
1 | × | Raspberry Pi 4 Model B | Amazon | |
1 | × | Rotary Encoder | 쿠팡 | Amazon | |
1 | × | Jumper Wires | Amazon | |
1 | × | (추천) Screw Terminal Block Shield for Raspberry Pi | 쿠팡 | Amazon | |
1 | × | (추천) USB-C Power Cable with On/Off Switch for Raspberry Pi 4B | Amazon | |
1 | × | (추천) Plastic Case and Cooling Fan for Raspberry Pi 4B | Amazon | |
1 | × | (추천) HDMI Touch Screen Monitor for Raspberry Pi | Amazon |
로터리 엔코더에 대하여
회전 운동을 신호로 변환하는 회전 손잡이는 로터리 인코더라고 불립니다. 그것은 얼마나 많이 회전했는지와 어디에 위치했는지를 보여줍니다. 주요 종류는 두 가지입니다:
- 증분 엔코더: 이는 빠른 신호를 사용하여 얼마나 변화했는지를 측정합니다.
- 절대 엔코더: 이 종류는 각 위치에 고유한 코드를 제공하여 전원이 꺼져도 정확히 어디에 있는지 알 수 있습니다.
이 가이드는 증분 엔코더에 집중합니다.
로터리 인코더 모듈 핀아웃
회전 인코더 모듈에는 4개의 핀이 있습니다:
- CLK 핀 (출력 A): 얼마나 많은 회전이 발생했는지를 알려주는 주 펄스입니다. 노브를 한 단위(클릭)만큼 어느 방향으로 돌릴 때마다, CLK 핀은 완전한 사이클(LOW → HIGH → LOW)을 완료하는 신호를 출력합니다.
- DT 핀 (출력 B): CLK 핀처럼 작동하지만, 신호가 CLK 신호보다 90도 뒤처져 출력됩니다. 회전 방향(시계 방향 또는 반시계 방향)을 알아내는 데 도움을 줍니다.
- SW 핀: 인코더 내부의 푸시 버튼에서 나오는 출력입니다. 일반적으로 열려 있습니다. 이 핀에 풀업 저항을 사용하면, 노브가 눌리지 않았을 때 SW 핀은 HIGH, 눌렸을 때 LOW가 됩니다.
- VCC 핀 (+): VCC(3.3~5볼트 사이)에 연결되어야 합니다.
- GND 핀: GND(0V)에 연결되어야 합니다.
로터리 엔코더 대 포텐셔미터
회전 인코더를 포텐셔미터와 혼동할 수 있지만, 이들은 별개의 구성 요소입니다. 다음은 그들 간의 비교입니다:
- 로터리 인코더는 현대 버전의 포텐셔미터와 같지만, 더 많은 기능을 수행할 수 있습니다.
- 로터리 인코더는 풀 서클로 멈추지 않고 회전할 수 있지만, 포텐셔미터는 원의 약 3/4 정도만 회전할 수 있습니다.
- 로터리 인코더는 펄스를 출력하고, 포텐셔미터는 아날로그 전압을 출력합니다.
- 로터리 인코더는 손잡이가 얼마나 움직였는지를 파악할 때 유용하지만, 정확히 어디에 있는지를 알고 싶을 때는 포텐셔미터가 유용합니다.
로터리 인코더의 작동 원리
인코더 내부에는 슬롯이 있는 디스크가 C라고 불리는 핀에 연결되어 있으며, 이는 공통 접지와 같습니다. A와 B라는 두 개의 핀이 더 있습니다.
- 노브를 돌릴 때, 핀 A와 B는 공통 그라운드 핀 C와 접촉하지만, 노브를 어느 방향으로 돌리느냐에 따라 특정 순서로 접촉합니다 (시계 방향 또는 반시계 방향).
- 이러한 접촉은 두 개의 신호를 생성합니다. 두 신호는 타이밍이 약간 다릅니다. 하나의 핀이 다른 핀보다 먼저 그라운드에 접촉하기 때문입니다. 두 신호는 서로 90도 어긋나 있으며, 이를 쿼드러처 인코딩이라고 합니다.
- 노브를 시계 방향으로 돌리면, 핀 A가 핀 B보다 먼저 그라운드에 접촉합니다. 노브를 반시계 방향으로 돌리면, 핀 B가 핀 A보다 먼저 그라운드에 접촉합니다.
- 각 핀이 그라운드와 접촉하거나 떨어지는 시점을 감지함으로써, 우리는 노브가 어느 방향으로 돌고 있는지 알아낼 수 있습니다. 이는 핀 A가 변할 때 핀 B에 어떤 변화가 있는지를 확인함으로써 이루어집니다.
A가 LOW에서 HIGH로 상태가 변경될 때:
- B가 LOW이면 노브를 시계 방향으로 돌립니다.
- B가 HIGH이면 노브를 반시계 방향으로 돌립니다.
※ NOTE THAT:
핀 A와 B는 CLK 및 DT 핀에 연결됩니다. 그러나 제조사에 따라 순서가 다를 수 있습니다. 아래 제공된 코드는 DIYables의 로터리 인코더로 테스트되었습니다.
로터리 엔코더 프로그래밍 방법
- CLK 핀의 신호를 확인하십시오.
- LOW에서 HIGH로 상태가 변경되면, DT 핀의 상태를 확인하십시오.
- DT 핀의 상태가 HIGH이면, 노브가 반시계 방향으로 회전하였으며, 카운터를 1 증가시키세요.
- DT 핀의 상태가 LOW이면, 노브가 시계 방향으로 회전하였으며, 카운터를 1 감소시키세요.
Wiring Diagram
이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
배선 구성을 간단하고 체계적으로 만들기 위해, Raspberry Pi용 스크루 터미널 블록 실드 사용을 권장합니다. 이 실드는 아래와 같이 더욱 안정적이고 관리하기 쉬운 연결을 제공합니다:
라즈베리 파이 코드 – 로터리 인코더
다음 Raspberry Pi 코드는:
- 인코더의 회전 방향과 회전량을 감지합니다.
- 노브가 시계 방향으로 한 덴트(클릭)만큼 회전했을 경우, 카운터를 하나 증가시킵니다.
- 노브가 반시계 방향으로 한 덴트(클릭)만큼 회전했을 경우, 카운터를 하나 감소시킵니다.
- 버튼이 눌렸는지 감지합니다.
Detailed Instructions
- Raspberry Pi에 Raspbian 또는 기타 Raspberry Pi 호환 운영 체제가 설치되어 있는지 확인하십시오.
- Raspberry Pi가 PC와 동일한 로컬 네트워크에 연결되어 있는지 확인하십시오.
- 라이브러리를 설치해야 하는 경우 Raspberry Pi가 인터넷에 연결되어 있는지 확인하십시오.
- Raspberry Pi를 처음 사용하는 경우, Raspberry Pi 설정 방법을 참조하십시오.
- Linux 및 macOS에서는 내장된 SSH 클라이언트 또는 Windows에서는 PuTTY를 사용하여 SSH를 통해 PC를 Raspberry Pi에 연결하십시오. PC를 SSH를 통해 Raspberry Pi에 연결하는 방법을 참조하십시오.
- RPi.GPIO 라이브러리가 설치되어 있는지 확인하십시오. 설치되어 있지 않으면 다음 명령을 사용하여 설치하십시오.
- Python 스크립트 파일 rotary_encoder.py을(를) 생성하고 다음 코드를 추가하십시오:
- 파일을 저장하고 터미널에서 다음 명령어를 실행하여 Python 스크립트를 실행하세요:
- 노브를 시계 방향으로 돌린 다음, 반시계 방향으로 돌리세요.
- 노브를 누르세요.
- 터미널에서 결과를 확인하세요.
코드 설명
코드의 각 줄에 대한 주석을 확인하세요.
Raspberry Pi 로터리 인코더 어플리케이션
로터리 인코더를 사용하여 우리는 다음과 같은 응용 프로그램을 수행할 수 있습니다. 단, 이에 국한되지는 않습니다:
- Raspberry Pi - 회전 인코더로 서보 모터 위치 제어
- Raspberry Pi - 회전 인코더로 LED 밝기 제어
- Raspberry Pi - 회전 인코더로 스테퍼 모터 속도 제어
Video Tutorial
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.