ESP32 C3 Super Mini 포텐셔미터

포텐셔미터는 ESP32 C3 Super Mini 프로젝트에 조절 노브를 추가하는 가장 쉬운 방법입니다. 노브를 돌리면 보드가 숫자를 읽고, 이 숫자를 볼륨, 밝기, 속도 또는 다른 설정에 사용할 수 있습니다. 초보자를 위한 훌륭한 첫 아날로그 프로젝트입니다.

이 튜토리얼에서 배울 내용:

ESP32 C3 Super Mini - 포텐셔미터

필요한 하드웨어

1×ESP32 C3 Super Mini 아마존
1×USB 케이블 타입-A to 타입-C (USB-A PC용) 쿠팡 | 아마존
1×USB 케이블 타입-C to 타입-C (USB-C PC용) 아마존
1×포텐셔미터 쿠팡 | 아마존
1×노브가 있는 포텐셔미터 모듈 쿠팡 | 아마존
1×브레드보드 쿠팡 | 아마존
1×점퍼케이블 쿠팡 | 아마존
1×(옵션) DC 커넥터 전원 연결 잭 플러그 소켓 쿠팡 | 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

포텐셔미터에 대하여

포텐셔미터(회전 각도 센서라고도 함)는 스피커 볼륨, 방 온도, 램프 밝기 같은 설정을 바꾸는 노브입니다.

주요 특징:

  • 간단함: 핀 3개뿐이며 라이브러리가 필요 없습니다.
  • 저렴함: 구매할 수 있는 가장 저렴한 부품 중 하나입니다.
  • 아날로그 출력: ON/OFF만이 아닌 부드러운 전압을 출력합니다.
  • 저전력: 전류를 거의 사용하지 않습니다.

기술 사양:

  • 작동 전압: 3.3V 또는 5V (ESP32 C3 Super Mini에서는 3.3V 사용)
  • 출력: 0V부터 VCC 핀의 전압까지
  • 회전: 0°부터 제조사가 정한 최대 각도까지
  • 일반적인 값: 10kΩ이 가장 많이 사용됩니다
포텐셔미터 핀아웃

포텐셔미터 핀아웃

포텐셔미터에는 보통 핀이 3개 있습니다.

  • VCC 핀: 이 핀을 VCC(ESP32 C3 Super Mini에서는 3.3V)에 연결합니다
  • GND 핀: 이 핀을 GND(0V)에 연결합니다
  • 출력 핀: ESP32 C3 Super Mini의 아날로그 입력 핀으로 전압을 출력합니다
포텐셔미터 핀아웃

※ 주의:

GND 핀과 VCC 핀은 서로 바꿔 연결할 수 있습니다

WARNING

포텐셔미터에는 항상 5V가 아닌 3.3V로 전원을 공급하세요. ESP32 C3 Super Mini GPIO 핀은 3.3V 전용이며, 출력 핀에 5V가 들어가면 보드가 손상될 수 있습니다.

포텐셔미터의 작동 원리

축은 0°(GND 핀에 가장 가까운 쪽)부터 최대 각도(VCC 핀에 가장 가까운 쪽)까지 회전하며, 이 최대 각도를 ANGLE_MAX라고 합니다.

  • 요약하면: 각도가 클수록 출력 핀의 전압이 높아집니다.
  • 출력 전압은 축의 위치에 정비례하며, 0부터 VCC까지입니다.

아래 표는 각도와 출력 핀 전압 사이의 관계를 보여줍니다:

각도 전압
0°0v
ANGLE_MAX°VCC
angle°angle° × VCC / ANGLE_MAX°

※ 주의:

ANGLE_MAX 값은 제조사에 따라 다릅니다.

포텐셔미터의 작동 원리

ESP32 C3 Super Mini - 회전식 포텐셔미터

ESP32 C3 Super Mini의 아날로그 입력 핀은 전압을 숫자로 바꿉니다.

  • 입력 범위: 0V ~ 3.3V
  • 출력 숫자: 0 ~ 4095 (이를 ADC 값 또는 아날로그 값이라고 합니다)
  • 분해능: 12비트이므로 총 4096단계
  • 이 보드의 아날로그 핀: GPIO0 ~ GPIO4만 해당됩니다. 이 튜토리얼에서는 GPIO4를 사용합니다.

포텐셔미터의 출력 핀을 ESP32 C3 Super Mini의 아날로그 입력 핀에 연결한 다음, 그 핀에서 아날로그 값을 읽습니다.

아날로그 값은 다른 값으로 변환할 수 있습니다. 일반적인 사용 사례는 다음과 같습니다:

  • 각도로: 노브가 얼마나 돌아갔는지 알 수 있습니다.
  • 전압으로: 출력 핀의 실제 전압을 확인할 수 있습니다.
  • 설정 값으로: 볼륨, 온도, 밝기, 모터 속도 등.

변환 범위

시작 끝
각도사용자가 회전 0° → ANGLE_MAX°
전압포텐셔미터 핀에서 0V → 3.3V
ADC 값ESP32 C3 Super Mini가 읽음 0 → 4095
설정 값ESP32 C3 Super Mini가 변환 VALUE_MIN → VALUE_MAX

포텐셔미터와 ESP32 C3 Super Mini 간의 배선 다이어그램

배선은 간단합니다: 전원선 두 개와 신호선 하나입니다.

  • 참고: VCC에는 3.3V 핀을 사용하세요. 절대 5V를 사용하지 마세요.
  • 참고: 신호선은 아날로그 기능이 있는 핀인 GPIO4에 연결합니다.
  • 참고: GPIO8이나 GPIO9는 사용하지 마세요. 스트래핑 핀이라 보드가 부팅되지 않을 수 있습니다.
  • 참고: GPIO20과 GPIO21은 시리얼 모니터 UART입니다. 비워 두세요.
포텐셔미터 핀 ESP32 C3 Super Mini 핀
VCC 3.3V
GND GND
출력 GPIO4
ESP32 C3 Super Mini 포텐셔미터 배선 다이어그램

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

포텐셔미터 프로그래밍 방법

포텐셔미터를 읽는 데는 함수 하나와 약간의 계산만 필요합니다.

  • analogRead() 함수를 사용하여 포텐셔미터의 출력 핀에 연결된 아날로그 입력 핀에서 값을 읽습니다.
analog_value = analogRead(4); // GPIO4
  • map() 함수를 사용하여 포텐셔미터의 각도로 변환합니다.
angle = map(analog_value, 0, 4095, 0, ANGLE_MAX);
  • 포텐셔미터의 전압으로 변환합니다:
voltage = map(analog_value, 0, 4095, 0, 3.3);
  • 제어 가능한 값(예: 스테레오 볼륨, 밝기, DC 모터 속도 등)으로 변환합니다
value = map(analog_value, 0, 4095, VALUE_MIN, VALUE_MAX);
  • 예를 들어, LED 밝기로 변환하는 경우입니다. 이 튜토리얼에서 언급했듯이 LED 밝기는 0(항상 꺼짐)부터 255(항상 켜짐)까지의 PWM 값으로 제어할 수 있습니다. 따라서 아날로그 값을 LED 밝기(꺼짐부터 가장 밝음까지)로 다음과 같이 매핑할 수 있습니다:
brightness = map(analog_value, 0, 4095, 0, 255);

LED를 야간등 수준부터 가장 밝은 수준까지 조절하고 싶다면,

nightlight = 100; // depending on your desired brightness brightness = map(analog_value, 0, 4095, nightlight, 255);

※ 주의:

입력 범위의 최댓값으로 항상 1023이 아닌 4095를 사용하세요. ESP32 C3 Super Mini는 12비트 ADC를 가지고 있습니다. 이전 10비트 보드에서 복사한 코드는 흔히 1023을 사용하며, 이 보드에서는 잘못된 결과를 냅니다.

※ 주의:

map() 함수는 아날로그 값을 int 또는 long 타입 값으로 변환할 때만 사용할 수 있습니다. 제어 가능한 값이 float 타입이라면 map() 함수 대신 floatMap() 함수를 사용해야 합니다.

floatMap() 함수:

float floatMap(float x, float in_min, float in_max, float out_min, float out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }

ESP32 C3 Super Mini 코드

아래 코드는 GPIO4의 포텐셔미터를 읽고 원시 값과 전압을 모두 출력합니다.

이 코드가 하는 일:

  • 시리얼 시작: 115200 보드로 시리얼 모니터를 엽니다.
  • ADC 설정: analogSetAttenuation(ADC_11db)으로 핀이 0V부터 3.3V까지 전체 범위를 읽을 수 있게 합니다.
  • 노브 읽기: analogRead()가 0부터 4095까지의 숫자를 반환합니다.
  • 전압으로 변환: floatMap()이 그 숫자를 소수점이 있는 전압으로 바꿉니다.
  • 1초에 한 번 출력: 노브를 돌리면서 쉽게 따라갈 수 있습니다.
/* * 이 ESP32 C3 Super Mini 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP32 C3 Super Mini 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp32-c3/esp32-c3-super-mini-potentiometer */ #define POTENTIOMETER_PIN 4 // The ESP32 C3 SuperMini pin connected to the potentiometer's output pin float floatMap(float x, float in_min, float in_max, float out_min, float out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; } // the setup routine runs once when you press reset: void setup() { // Initialize the Serial to communicate with the Serial Monitor. Serial.begin(115200); // set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); } // the loop routine runs over and over again forever: void loop() { // read the input on analog pin GPIO4: int analog_value = analogRead(POTENTIOMETER_PIN); // Rescale to potentiometer's voltage (from 0V to 3.3V): float voltage = floatMap(analog_value, 0, 4095, 0, 3.3); // print out the value you read: Serial.print("Analog: "); Serial.print(analog_value); Serial.print(", Voltage: "); Serial.println(voltage); delay(1000); }

빠른 단계

  • ESP32 C3 Super Mini가 처음이신가요? 먼저 ESP32 C3 슈퍼 미니 - 시작하기 튜토리얼을 완료하여 개발 환경을 설정하세요.
  • 배선: 위와 같이 포텐셔미터를 3.3V, GND, GPIO4에 연결합니다.
  • 보드 연결: USB Type-C 케이블로 ESP32 C3 Super Mini를 컴퓨터에 연결합니다.
  • IDE 열기: 위 코드를 복사하여 Arduino IDE에 붙여넣습니다.
  • 보드 선택: Tools > Board에서 ESP32 C3 Super Mini가 선택되어 있는지 확인합니다.
  • 포트 선택: Tools > Port에서 보드의 COM 포트를 선택합니다.
  • 업로드: Arduino IDE에서 Upload 버튼을 클릭합니다.
  • 시리얼 모니터 열기: 보드레이트를 115200으로 설정합니다.
  • 노브 돌리기: 포텐셔미터를 한쪽 끝에서 다른 쪽 끝까지 천천히 돌립니다.
  • 결과 확인: 시리얼 모니터에 값이 변하는 것이 표시됩니다. 아래와 같이 보입니다:
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32C3 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32C3 Dev Module' on 'COM15')
New Line
9600 baud
Analog: 0, Voltage: 0.00 Analog: 128, Voltage: 0.10 Analog: 642, Voltage: 0.52 Analog: 1487, Voltage: 1.20 Analog: 2059, Voltage: 1.66 Analog: 3310, Voltage: 2.67 Analog: 4095, Voltage: 3.30 Analog: 4095, Voltage: 3.30
Ln 11, Col 1
ESP32C3 Dev Module on COM15
2
  • 전문가 팁: 값이 0이나 4095에 도달하지 않으면 VCC와 GND가 단단히 연결되어 있는지 확인하세요. 느슨한 전선이 가장 흔한 원인입니다.

※ 주의:

이 튜토리얼은 analogRead() 함수를 사용하여 센서나 부품에 연결된 ADC(아날로그-디지털 변환기)에서 값을 읽습니다. ESP32 C3 Super Mini의 ADC는 높은 정확도가 필요하지 않은 프로젝트에 적합합니다. 그러나 정밀한 측정이 필요한 프로젝트라면 다음 사항을 염두에 두세요:

  • ESP32 C3 Super Mini의 ADC는 완벽하게 정확하지 않으며, 올바른 결과를 얻으려면 보정이 필요할 수 있습니다. ESP32 C3 Super Mini 보드마다 약간씩 차이가 있으므로 보드마다 개별 보정이 필요합니다.
  • 보정은 특히 초보자에게 어려울 수 있으며, 항상 원하는 정확한 결과를 얻지 못할 수도 있습니다.

높은 정밀도가 필요한 프로젝트라면 ESP32 C3 Super Mini와 함께 외부 ADC(예: ADS1115)를 사용하거나, 더 신뢰할 수 있는 ADC를 가진 다른 보드를 사용하는 것을 고려하세요. 그래도 ESP32 C3 Super Mini의 ADC를 보정하고 싶다면 ESP32 ADC 보정 드라이버를 참조하세요.

프로젝트 아이디어

노브가 작동하면 실제로 무언가를 제어하는 데 사용해 보세요.

  • 디머 스위치: 노브를 돌려 LED 밝기를 바꿉니다.
  • 볼륨 노브: 부저나 스피커의 음량을 설정합니다.
  • 서보 컨트롤러: 서보 모터를 원하는 각도로 움직입니다.
  • 모터 속도 다이얼: DC 모터나 팬의 속도를 바꿉니다.
  • 임계값 설정기: 코드를 수정하지 않고 노브로 센서 알람 수준을 설정합니다.
  • 메뉴 선택기: OLED나 LCD 화면에서 옵션을 스크롤합니다.

도전 과제

ESP32 C3 Super Mini의 아날로그 입력에 대해 더 배우기 위해 다음 작은 업그레이드를 해보세요.

  • 쉬움: 원시 숫자 대신 0%부터 100%까지의 백분율로 값을 출력해보세요.
  • 쉬움: 지연 시간을 바꿔 값이 1초에 10번 업데이트되도록 해보세요.
  • 보통: 값을 0°부터 270°까지의 각도로 매핑하여 출력해보세요.
  • 보통: 출력하기 전에 10번 읽은 값을 평균 내어 값을 안정시켜 보세요.
  • 고급: 노브로 PWM을 사용하여 GPIO3에 연결된 LED의 밝기를 설정해보세요.
  • 고급: GPIO2에 두 번째 포텐셔미터를 추가하고 두 노브를 동시에 읽어보세요.

댓글

관련 튜토리얼