아두이노 우노 Q 포텐셔미터로 LED 밝기 제어

이 튜토리얼은 Arduino UNO Q로 포텐셔미터를 사용하여 LED의 밝기를 제어하는 방법을 보여줍니다. 포텐셔미터 노브를 돌리면 LED의 밝기가 실시간으로 변합니다.

※ 주의:

Arduino UNO Q ADC 차이: Arduino UNO Q의 STM32 MCU는 10비트(0–1023)가 아닌 12비트 ADC(값: 0–4095)를 가지고 있습니다. analogWrite()를 사용할 때 ADC 값을 0–4095에서 밝기 0–255로 매핑하세요.

Arduino UNO Q - 포텐셔미터로 LED 밝기 제어

필요한 하드웨어

1×Arduino UNO Q 아마존
1×USB Cable for Arduino Uno Q 아마존
1×포텐셔미터 쿠팡 | 아마존
1×노브가 있는 포텐셔미터 모듈 쿠팡 | 아마존
1×LED 쿠팡 | 아마존
1×LED Module 아마존
1×220 ohm Resistor 아마존
1×브레드보드 쿠팡 | 아마존
1×점퍼케이블 쿠팡 | 아마존
1×(추천) 아두이노 우노용 스크루 터미널 블록 쉴드 쿠팡 | 아마존
1×(추천) Sensors/Servo Expansion Shield for Arduino Uno 쿠팡 | 아마존
1×(추천) 아두이노 우노용 브레드보드 쉴드 쿠팡 | 아마존
1×(추천) 아두이노 우노용 케이스 쿠팡 | 아마존
1×(추천) 아두이노 우노용 프로토타이핑 베이스 플레이트 & 브레드보드 키트 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

포텐셔미터 및 LED에 대해

포텐셔미터 또는 LED가 처음이라면 먼저 다음 튜토리얼을 확인하세요:

배선도

Arduino UNO Q 포텐셔미터 LED 배선도

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

프로그래밍 방법

  • 핀 A0에서 ADC 값 읽기 (Arduino UNO Q에서 12비트, 0–4095):
int adc_value = analogRead(A0);
  • ADC 값을 PWM 밝기로 매핑 (0–255):
int brightness = map(adc_value, 0, 4095, 0, 255);
  • PWM을 사용하여 LED 핀에 밝기 쓰기:
analogWrite(LED_PIN, brightness);

MCU 코드 — 포텐셔미터로 LED 밝기 제어

Arduino UNO Q는 두 개의 프로세서를 가지고 있습니다: STM32 MCU(실시간 하드웨어 제어 담당)와 Qualcomm MPU(Debian Linux 실행). 이 섹션에서는 STM32 MCU만 프로그래밍됩니다 — Linux 측은 유휴 상태입니다. 나중 섹션에서는 두 프로세서가 함께 작동하는 방법을 보여줍니다.

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-potentiometer-fade-led */ #define LED_PIN 3 // pin connected to LED #define POTENTIOMETER_PIN A0 // pin connected to potentiometer void setup() { pinMode(LED_PIN, OUTPUT); } void loop() { // Read ADC value from potentiometer (12-bit: 0-4095 on Arduino UNO Q) int adc_value = analogRead(POTENTIOMETER_PIN); // Map ADC value to brightness (0-255 for PWM) int brightness = map(adc_value, 0, 4095, 0, 255); // Set LED brightness analogWrite(LED_PIN, brightness); delay(100); }

빠른 단계

  • Arduino UNO Q를 처음 사용하나요? 계속 진행하기 전에 아두이노 우노 Q 시작하기 튜토리얼을 따라 개발 환경을 준비하세요.
  • 부품 배선: 포텐셔미터 출력을 A0에 연결하고, GNDGND에, VCC를 3.3V에 연결하세요. 배선도에 따라 LED(220 Ω 저항 포함)를 핀 3에 연결하세요.
  • 연결: Arduino UNO Q를 USB-C 케이블로 컴퓨터에 연결하세요.
  • Arduino App Lab 열기: Arduino App Lab을 실행하고 Arduino UNO Q를 감지할 때까지 기다리세요.
  • 새 App 만들기: Create New App 버튼을 클릭하세요.
Arduino UNO Q에서 아두이노 app lab에서 새 app 만들기
  • App에 이름을 지정합니다(예: DIYables_PotLED)
  • Create를 클릭하여 확인합니다.
  • 새 App 내에 폴더와 파일 세트가 생성됩니다.
Arduino UNO Q에서 아두이노 app lab app 폴더 및 파일
  • sketch/sketch.ino 파일을 찾으세요 — MCU 스케치를 붙여넣을 위치입니다.
  • 스케치 붙여넣기: 위의 MCU 코드를 복사하여 스케치 파일에 붙여넣습니다. 다른 파일은 기본값으로 유지하세요.
    • Install the library: Click the Add sketch library button (the open book icon with a + sign) in the left sidebar.
    add sketch 라이브러리 in 아두이노 app lab on Arduino UNO Q
    • Search for Arduino_RouterBridge created by Arduino and click the Install button.
    My Apps / DIYables Apps
    Run
    Bricks
    No bricks added...
    Sketch Libraries
    No sketch libra...
    Files
    python
    sketch
    .gitignore
    README.md
    app.yaml
    sketch.ino
    Add sketch library
    Arduino_RouterBridge Arduino

    This library provides a simple RPC bridge for Arduino UNO Q boards, allowing communication between the board and other devices using MsgPack serialization.

    0.4.1
    Install
    More Info
    • 업로드: Arduino App Lab의 Run 버튼을 클릭하여 STM32로 컴파일 및 업로드하세요.
    Arduino UNO Q에서 아두이노 app lab에서 run 버튼 클릭
    • 포텐셔미터 노브를 돌리세요 — LED 밝기가 실시간으로 부드럽게 변해야 합니다.

    Linux + MCU 브릿지 프로그래밍

    Arduino UNO Q는 함께 작동하는 두 개의 프로세서를 가지고 있습니다: MPU(Qualcomm, Debian Linux 실행)와 MCU(STM32, Zephyr OS 및 Arduino 스케치 실행). 이들은 Arduino_RouterBridge 라이브러리를 통해 RPC를 사용하여 통신합니다 — raw 시리얼 포트를 통해서는 절대 안 됩니다.

    • 포텐셔미터 및 LED는 MCU(STM32)에 연결되어 있습니다 — 포텐셔미터 출력 와이어는 아날로그 핀 A0에, LED는 PWM 가능한 출력 핀에 연결됩니다. MCU는 loop()에서 지속적으로 ADC 값을 읽고 LED 밝기를 업데이트합니다.
    • MPU는 포텐셔미터를 직접 읽거나 LED를 제어할 수 없습니다Bridge.call()을 통해 MCU에서 현재 밝기를 요청해야 합니다.
    • MPU에는 Wi-Fi가 있습니다 — MPU가 Wi-Fi가 있는 전체 Debian Linux를 실행하기 때문에 요청 시 Telegram을 통해 밝기 수준을 보고할 수 있습니다.
    • 통신: Linux 측의 Bridge.call()은 MCU 측의 Bridge.provide() 함수를 호출합니다
    • ⚠️ 예약됨: /dev/ttyHS1(Linux) 및 Serial1(MCU)은 Arduino Router에서 사용됩니다 — 절대 직접 열지 마세요

    간단히 말해: MPU가 밝기를 요청 → MCU가 ADC를 읽고 변환 → MCU가 ADC 및 밝기 값 보고 → MPU가 로깅 또는 전달.

    MCU 스케치 — 포텐셔미터-LED 및 브릿지 및 모니터 출력:

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-potentiometer-fade-led */ #include "Arduino_RouterBridge.h" #define LED_PIN 3 #define POTENTIOMETER_PIN A0 void get_brightness() { int adc_value = analogRead(POTENTIOMETER_PIN); int brightness = map(adc_value, 0, 4095, 0, 255); Monitor.print("ADC: "); Monitor.print(adc_value); Monitor.print(", Brightness: "); Monitor.println(brightness); } void setup() { pinMode(LED_PIN, OUTPUT); Bridge.begin(); Monitor.begin(); Bridge.provide("get_brightness", get_brightness); Monitor.println("Potentiometer-LED Bridge ready"); } void loop() { int adc_value = analogRead(POTENTIOMETER_PIN); int brightness = map(adc_value, 0, 4095, 0, 255); analogWrite(LED_PIN, brightness); delay(50); }

    Python 스크립트 (Arduino App Lab) — Linux에서 밝기 폴링:

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-potentiometer-fade-led */ from arduino.app_utils import * import time def loop(): while True: Bridge.call("get_brightness") time.sleep(1) App.run(user_loop=loop)
    • 주의: MCU 스케치에서 Bridge.begin()이 호출되고 스케치가 업로드된 후 Linux 측에서 Python 스크립트를 실행해야 합니다.
    • ⚠️ 경고: 코드에서 /dev/ttyHS1(Linux)을 직접 열거나 Serial1(MCU)을 사용하지 마세요 — 이는 Arduino Router에서 예약되어 있으며 액세스하면 브릿지가 손상됩니다.

    빠른 단계

    • MCU 스케치 업로드: Arduino App Lab을 열고, 새 App을 만들고, 위의 브릿지 MCU 스케치를 sketch/sketch.ino에 붙여넣고, Arduino_RouterBridge 라이브러리를 설치하고, Run을 클릭하세요.
    • Python 스크립트 추가: 위의 Python 코드를 동일한 App의 Python 탭에 붙여넣습니다.
    • App 실행: Run을 클릭합니다 — Python 측에서 매초 밝기 수준을 폴링합니다.
    • 포텐셔미터 노브를 돌리고 LED가 밝아지고 어두워지는 것을 확인하세요.
    • 콘솔 확인: Console 탭 → MCU Monitor 서브탭을 열어 ADC 및 밝기 값이 기록된 것을 확인하세요.

    App Lab 콘솔 출력

    DIYables_Apps
    Stop
    sketch.ino
    1#include "Arduino_RouterBridge.h"
    Serial Monitor
    Python
    Message (Enter to send a message to "Newbiely" on usb(2820070321))
    New Line
    9600 baud
    Potentiometer-LED Bridge ready ADC: 0, Brightness: 0 ADC: 820, Brightness: 51 ADC: 2048, Brightness: 127 ADC: 3275, Brightness: 204 ADC: 4095, Brightness: 255

    Telegram 통합

    Telegram을 통해 어디서나 원격으로 현재 밝기 수준을 확인하세요.

    Telegram 봇이 아직 없다면 계속 진행하기 전에 아두이노 우노 Q - 텔레그램 봇을 참조하여 봇 토큰을 얻으세요.

    MCU 스케치: 이전 브릿지 섹션의 동일한 MCU 스케치를 유지 — 변경 사항 없음. STM32에서 이미 업로드되고 실행 중인지 확인하세요.

    Python 스크립트 (Arduino App Lab) — 밝기 수준을 위한 Telegram 봇:

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-potentiometer-fade-led */ from arduino.app_utils import * import requests import time BOT_TOKEN = "YOUR_BOT_TOKEN" API_URL = f"https://api.telegram.org/bot{BOT_TOKEN}" last_update_id = 0 def send_message(chat_id, text): requests.post(f"{API_URL}/sendMessage", json={"chat_id": chat_id, "text": text}) def get_updates(): global last_update_id resp = requests.get(f"{API_URL}/getUpdates", params={"offset": last_update_id + 1, "timeout": 5}) return resp.json().get("result", []) def loop(): global last_update_id updates = get_updates() for update in updates: last_update_id = update["update_id"] msg = update.get("message", {}) chat_id = msg.get("chat", {}).get("id") text = msg.get("text", "").strip() if text == "/brightness": reading = Bridge.call("get_brightness") send_message(chat_id, reading) else: send_message(chat_id, "Commands:\n/brightness — read current LED brightness level (ADC and PWM value)") time.sleep(1) App.run(user_loop=loop)
    • 주의: YOUR_BOT_TOKEN을 Telegram의 @BotFather에서 얻은 토큰으로 바꾸세요.
    • /brightness를 보내 현재 ADC 및 밝기 값을 확인하세요.

    빠른 단계

    • MCU 스케치 업로드: 이전 섹션의 브릿지 MCU 스케치를 사용합니다 (아직 없으면 먼저 업로드하세요).
    • Telegram 스크립트 붙여넣기: 위의 Python 코드를 Arduino App Lab의 App의 Python 탭에 복사하여 붙여넣습니다.
    • 토큰 설정: 스크립트에서 YOUR_BOT_TOKEN을 실제 봇 토큰으로 바꾸세요.
    • App 실행: Run을 클릭합니다 — 봇이 Telegram 메시지를 수신 대기합니다.
    • 테스트: 포텐셔미터를 돌리고, /brightness를 보냅니다 — 봇이 ADC 및 PWM 밝기 값으로 응답합니다.

    App Lab 콘솔 출력

    DIYables_Apps
    Stop
    sketch.ino
    1#include "Arduino_RouterBridge.h"
    Serial Monitor
    Python
    [2026-04-29 12:00:01] Telegram: /brightness [2026-04-29 12:00:01] ADC: 1234, Brightness: 77 [2026-04-29 12:03:20] Telegram: /brightness [2026-04-29 12:03:20] ADC: 3072, Brightness: 191
    Telegram
    Telegram 12:45
    Welcome to Telegram!
    ArduinoBot 10:19
    Chatting with Arduino...
    telegram-botfather
    BotFather Yesterday
    Your bot has been created.

    ArduinoBot

    bot
    Today
    /brightness
    10:15 AM ✓✓
    ADC: 1234, Brightness: 77
    10:16 AM

    OpenClaw 통합

    아두이노 우노 Q - OpenClaw 튜토리얼의 지침을 참조하여 이 튜토리얼에 OpenClaw를 적용할 수 있습니다

    애플리케이션/프로젝트 아이디어

    • 스마트 디머: 포텐셔미터를 조명의 물리적 밝기 제어로 사용합니다 — Telegram을 통해 수준 모니터링합니다
    • 볼륨 노브 표시기: 포텐셔미터에서 매핑된 현재 "볼륨 수준"을 원격 모니터에 표시합니다
    • 주변광 컨트롤러: 포텐셔미터 위치를 따뜻한 흰색 LED 스트립 밝기에 연결합니다
    • 수동 오버라이드 패널: 포텐셔미터를 사용하여 자동화된 밝기 일정을 수동으로 재정의합니다
    • 시각적 피드백 다이얼: 포텐셔미터를 LED 배열로 매핑하여 진행률 또는 수준을 표시합니다

    자신을 도전하세요

    • 쉬움: LED가 밝을 때 두 번째 LED가 희미해지도록 역으로 페이드하는 두 번째 LED를 추가합니다
    • 중간: 브릿지 콜백을 통해 ADC 값과 백분율(0–100)을 모두 노출합니다
    • 고급: 고정 간격으로 밝기 읽기를 기록하고 일일 요약을 전송하는 Telegram 봇을 구축합니다