아두이노 우노 Q 조명 센서
이 튜토리얼에서는 Arduino UNO Q에서 LDR 조명 센서를 사용하는 방법을 보여줍니다. 자세한 내용은 다음과 같습니다:
- LDR 조명 센서의 작동 원리
- Arduino UNO Q에 조명 센서를 연결하는 방법
- 조명 센서에서 값을 읽기 위한 프로그램 작성 방법

필요한 하드웨어
| 1 | × | Arduino UNO Q | 아마존 | |
| 1 | × | USB Cable for Arduino Uno Q | 아마존 | |
| 1 | × | 조도 센서 | 아마존 | |
| 1 | × | 10 kΩ Resistor | 아마존 | |
| 1 | × | 브레드보드 | 쿠팡 | 아마존 | |
| 1 | × | 점퍼케이블 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노용 스크루 터미널 블록 쉴드 | 쿠팡 | 아마존 | |
| 1 | × | (추천) Sensors/Servo Expansion Shield for Arduino Uno | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노용 브레드보드 쉴드 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노용 케이스 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노용 프로토타이핑 베이스 플레이트 & 브레드보드 키트 | 아마존 |
LDR 조명 센서는 매우 저렴하지만 배선에 저항이 필요하므로 설정이 더 복잡할 수 있습니다. 배선을 간단히 하려면 대신 LDR 조명 센서 모듈을 사용할 수 있습니다.
조명 센서 소개
이 튜토리얼에서는 포토레지스터로도 알려진 Light-Dependent Resistor(LDR) 또는 포토셀이라고 불리는 조명 센서를 사용합니다. 이 센서는 주변 조명이 얼마나 밝은지를 찾고 측정하는 데 사용됩니다.
핀아웃
포토레지스터에는 두 개의 핀이 있습니다. 저항의 한 종류이기 때문에 이러한 핀들을 별도로 식별할 필요가 없습니다. 이들은 동일합니다.

작동 원리
포토레지스터는 감지하는 빛의 양에 따라 저항을 변경하는 특수한 유형의 저항기입니다. 빛이 많을 때는 저항이 매우 낮아집니다. 빛이 거의 없거나 전혀 없을 때는 저항이 매우 높아집니다. 포토레지스터의 저항을 측정하여 주변 조명이 얼마나 밝거나 어두운지 판단할 수 있습니다.

WARNING
조명 센서 값은 조명이 얼마나 밝은지에 대한 대략적인 아이디어를 보여주지만 정확한 조광량을 제공하지 않습니다. 매우 정확한 측정이 필요하지 않은 상황에서만 사용하세요.
Arduino UNO Q - 조명 센서
Arduino UNO Q STM32 MCU는 12비트 ADC와 3.3V 참조를 가지고 있습니다. 아날로그 입력 핀 A0–A5는 전압(0V ~ 3.3V)을 0 ~ 4095 사이의 값으로 변환합니다.
포토레지스터의 핀을 Arduino UNO Q의 아날로그 입력 핀에 연결하면 analogRead() 함수를 사용하여 아날로그 값을 읽어 상대적 조광 수준을 결정할 수 있습니다.
※ 주의:
Arduino UNO Q는 3.3V 참조가 있는 12비트 ADC(0–4095)를 사용합니다 — 14비트 ADC를 사용하는 Arduino UNO R4나 10비트(0–1023)를 사용하는 기존 Uno 보드와는 다릅니다. 항상 임계값을 그에 따라 조정하세요.
배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
MCU 코드
Arduino UNO Q에는 두 개의 프로세서가 있습니다: STM32 MCU(실시간 하드웨어 제어 처리) 및 Qualcomm MPU(Debian Linux 실행). 이 섹션에서는 STM32 MCU만 프로그래밍합니다 — Linux 측은 유휴 상태입니다. 나중 섹션에서는 두 프로세서가 함께 작동하는 방법을 보여줄 것입니다.
다음 코드는 500ms마다 포토셀에서 ADC 값을 읽습니다:
※ 주의:
Arduino UNO Q MCU는 12비트 ADC(값 0–4095)를 사용합니다. 조광 수준 임계값은 그에 따라 조정됩니다: Dark < 40, Dim < 800, Light < 2000, Bright < 3200, Very bright ≥ 3200.
빠른 단계
- Arduino UNO Q를 처음 사용하시나요? 진행하기 전에 아두이노 우노 Q 시작하기 튜토리얼을 따라 개발 환경을 준비하세요.
- 구성 요소 배선: 포토레지스터와 10kΩ 저항을 분압기로 연결하여 다이어그램에 표시된 대로 A0 핀에 연결합니다.
- 연결: USB-C 케이블로 Arduino UNO Q를 컴퓨터에 연결합니다.
- Arduino App Lab 열기: Arduino App Lab을 실행하고 Arduino UNO Q를 감지할 때까지 기다립니다.
- 새 앱 만들기: Create New App 버튼을 클릭합니다.

- 앱에 이름을 지정합니다(예: DIYables_LightSensor).
- Create를 클릭하여 확인합니다.
- 새 앱 내에 생성된 폴더 및 파일 집합을 볼 수 있습니다.

- sketch/sketch.ino 파일을 찾습니다 — 이 파일에 MCU 스케치를 붙여넣을 것입니다.
- Install the library: Click the Add sketch library button (the open book icon with a + sign) in the left sidebar.

- Search for Arduino_RouterBridge created by Arduino and click the Install button.
- 업로드: Arduino App Lab의 Run 버튼을 클릭하여 STM32로 컴파일하고 업로드합니다.

- 테스트: 센서에 빛을 비추거나 손으로 덮은 다음 아래 Bridge 섹션을 사용하여 Monitor를 통해 값을 읽습니다.
Linux + MCU Bridge 프로그래밍
Arduino UNO Q에는 함께 작동하는 두 개의 프로세서가 있습니다: MPU(Qualcomm, Debian Linux 실행) 및 MCU(STM32, Arduino 스케치를 실행하는 Zephyr OS). 이들은 Arduino_RouterBridge 라이브러리를 통해 RPC를 사용하여 통신합니다 — 절대로 원본 직렬 포트를 통해서 아닙니다.
- 조명 센서는 MCU(STM32)에 연결됩니다 — 포토레지스터 분압기는 STM32의 아날로그 핀 A0에 공급합니다.
- MPU는 A0을 직접 읽을 수 없습니다 — Bridge.call()을 사용하여 MCU의 함수를 호출하여 센서 판독값을 요청해야 합니다.
- MPU는 Wi-Fi를 가지고 있습니다 — MPU가 Wi-Fi를 가진 전체 Debian Linux를 실행하므로 Telegram 명령을 받고 센서 판독값을 원격으로 보낼 수 있습니다.
- 통신: Linux 측의 Bridge.call()은 MCU 측의 Bridge.provide() 함수를 호출합니다(아날로그 읽기는 안전합니다 — 하드웨어 GPIO 쓰기가 필요하지 않음).
- ⚠️ 예약됨: /dev/ttyHS1(Linux) 및 Serial1(MCU)은 Arduino Router에서 사용합니다 — 절대로 직접 열지 마세요.
요약하면: MPU가 읽기를 요청 → MCU가 ADC를 읽음 → MCU가 결과를 Monitor에 출력합니다.
MCU 스케치 — Bridge 및 Monitor 출력이 포함된 조명 센서 판독:
Python 스크립트(Arduino App Lab) — Linux에서 매초마다 판독값 요청:
- 참고: MCU 스케치에서 Bridge.begin()이 호출되었는지 그리고 스케치가 Linux 측에서 Python 스크립트를 실행하기 전에 업로드되었는지 확인하세요.
- ⚠️ 경고: /dev/ttyHS1(Linux) 또는 Serial1(MCU)을 코드에서 직접 열지 마세요 — 이들은 Arduino Router에서 예약되었으며 이들을 접근하면 Bridge가 손상됩니다.
빠른 단계
- MCU 스케치 업로드: Arduino App Lab을 열고, 새 앱을 만들고, Bridge MCU 스케치를 sketch/sketch.ino에 붙여넣고, Arduino_RouterBridge 라이브러리를 설치한 다음 Run을 클릭합니다.
- Python 스크립트 추가: 위의 Python 코드를 같은 앱의 Python 탭에 붙여넣습니다.
- 앱 실행: Run을 클릭합니다 — Python이 매초 조명 판독값을 요청합니다.
- 빛을 비추거나 센서를 덮습니다: Monitor에서 값이 변하는 것을 확인합니다.
- 콘솔 확인: Console 탭 → MCU Monitor 서브탭을 열어 아날로그 판독값을 확인합니다.
App Lab 콘솔 출력
Telegram 통합
Telegram에서 조명 센서를 원격으로 읽습니다.
아직 Telegram 봇이 없으면 계속하기 전에 아두이노 우노 Q - 텔레그램 봇을 보고 봇 토큰을 얻으세요.
MCU 스케치: 이전 Bridge 섹션의 동일한 MCU 스케치를 유지하세요 — 변경할 필요가 없습니다. STM32에서 이미 업로드하고 실행 중인지 확인하세요.
Python 스크립트(Arduino App Lab) — 조명 센서 읽기용 Telegram 봇:
- 참고: YOUR_BOT_TOKEN을 Telegram의 @BotFather에서 얻은 토큰으로 바꾸세요.
- /read를 전송하여 현재 조명 센서 판독값을 요청합니다.
- 판독값은 MCU Monitor(Console → MCU Monitor 탭)에 나타납니다.
빠른 단계
- MCU 스케치 업로드: 이전 섹션의 Bridge MCU 스케치를 사용합니다(아직 업로드하지 않았으면 먼저 업로드합니다).
- Telegram 스크립트 붙여넣기: 위의 Python 코드를 Arduino App Lab의 앱의 Python 탭에 복사합니다.
- 토큰 설정: 스크립트의 YOUR_BOT_TOKEN을 실제 봇 토큰으로 바꿉니다.
- 앱 실행: Run을 클릭합니다 — 봇이 Telegram 메시지 수신을 대기하기 시작합니다.
- 테스트: /read를 전송합니다 — 봇이 센서 ADC 값과 조광 수준으로 응답합니다.
App Lab 콘솔 출력
ArduinoBot
OpenClaw 통합
이 튜토리얼에 OpenClaw를 적용할 수 있습니다. 아두이노 우노 Q - OpenClaw 튜토리얼의 지침을 참조하세요.
응용 프로그램/프로젝트 아이디어
- 자동 야간 조명: MPU에서 조광 수준을 읽고 어두워지면 Telegram/Bridge를 통해 LED 스트립을 켭니다.
- 스마트 커튼 컨트롤러: 조광 수준을 사용하여 서보 모터를 통해 커튼을 자동으로 열거나 닫습니다.
- 식물 조명 모니터: 주기적으로 조광 수준을 확인하고 식물에 더 많은 빛이 필요할 때 Telegram 알림을 보냅니다.
- 보안 조명: 조명이 예기치 않게 꺼지면 알람을 트리거하거나 카메라 녹화를 시작합니다.
- 데이터 로깅: 분석을 위해 Linux MPU의 CSV 파일에 매분 조광 수준을 로깅합니다.