아두이노 우노 Q LDR 모듈
이 튜토리얼은 Arduino UNO Q와 함께 LDR 라이트 센서 모듈을 사용하는 방법을 보여줍니다. 다음을 배우게 됩니다:
- LDR 라이트 센서 모듈을 Arduino UNO Q에 연결하는 방법
- 모듈의 디지털 출력(DO)을 사용하여 광선을 감지하는 방법
- 모듈의 아날로그 출력(AO)을 사용하여 광 강도를 측정하는 방법

필요한 하드웨어
| 1 | × | Arduino UNO Q | 아마존 | |
| 1 | × | USB Cable for Arduino Uno Q | 아마존 | |
| 1 | × | LDR 조도 센서 모듈 | 쿠팡 | 아마존 | |
| 1 | × | 점퍼케이블 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노용 스크루 터미널 블록 쉴드 | 쿠팡 | 아마존 | |
| 1 | × | (추천) Sensors/Servo Expansion Shield for Arduino Uno | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노용 브레드보드 쉴드 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노용 케이스 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노용 프로토타이핑 베이스 플레이트 & 브레드보드 키트 | 아마존 |
LDR 라이트 센서 모듈에 대해
LDR 라이트 센서 모듈은 주변의 빛을 감지하거나 빛의 수준을 측정하는 데 사용할 수 있습니다. 디지털 출력과 아날로그 출력 두 가지 선택이 있습니다.
핀아웃
LDR 라이트 센서 모듈에는 네 개의 핀이 있습니다:
- VCC 핀: 이를 VCC(3.3V ~ 5V)에 연결합니다.
- GND 핀: 이를 GND(0V)에 연결합니다.
- DO 핀: 디지털 출력 핀입니다. 어두울 때 HIGH를 표시하고 밝을 때 LOW를 표시합니다. 모듈의 포텐셀로미터를 조정하여 어둠/밝음 임계값을 변경할 수 있습니다.
- AO 핀: 아날로그 출력 핀입니다. 더 밝을수록 출력값이 낮아지고 더 어두울수록 출력값이 높아집니다.

또한 두 개의 LED 표시기가 있습니다:
- 하나의 PWR-LED는 전원이 켜져 있을 때 표시됩니다.
- 하나의 DO-LED는 DO 핀의 광 상태를 표시합니다: 광선의 존재 시 켜지고 어두울 때 꺼집니다.
작동 방식
DO 핀의 경우:
- 모듈에는 광 임계값을 설정하는 포텐셀로미터가 있습니다.
- 광 수준이 포텐셀로미터로 설정한 임계값보다 높으면 DO 핀은 LOW이고 DO-LED는 꺼집니다.
- 광 수준이 임계값보다 낮으면 DO 핀은 HIGH이고 DO-LED는 켜집니다.
AO 핀의 경우:
- AO 핀은 광 수준에 따라 변하는 읽음값을 제공합니다.
- 광량이 많으면 AO 읽음값이 더 낮습니다.
- 더 어두우면 AO 읽음값이 더 높습니다.
- 포텐셀로미터는 AO 핀에 영향을 주지 않으며 - DO 핀의 임계값만 변경합니다.
※ 주의:
Arduino UNO Q STM32 MCU는 3.3V 기준으로 12비트 ADC(0–4095)를 가지고 있습니다. AO 아날로그 값은 10비트 Arduino 보드(0–1023)의 값과 다릅니다. 항상 임계값을 그에 따라 조정하십시오.
배선도
라이트 센서 모듈에는 두 가지 출력이 있습니다. 필요에 따라 하나 또는 둘 다 사용할 수 있습니다.

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
MCU 코드 — DO 핀에서 값 읽기
Arduino UNO Q는 두 개의 프로세서를 가지고 있습니다: STM32 MCU(실시간 하드웨어 제어 처리) 및 Qualcomm MPU(Debian Linux 실행). 이 섹션에서는 STM32 MCU만 프로그래밍됩니다 — Linux 측은 유휴 상태입니다. 나중 섹션에서 두 프로세서가 함께 작동하는 방법을 보여줄 것입니다.
코드는 DO 핀의 디지털 상태를 읽습니다 — HIGH는 어두움을 의미하고, LOW는 빛이 있음을 의미합니다:
빠른 단계
- Arduino UNO Q 처음 사용하신가요? 아두이노 우노 Q 시작하기 튜토리얼을 따라 진행하기 전에 개발 환경을 준비하세요.
- 컴포넌트 배선: VCC → 3.3V, GND → GND, DO → 핀 2, AO → A0을 다이어그램에 표시된 대로 연결합니다.
- 연결: USB-C 케이블을 사용하여 Arduino UNO Q를 컴퓨터에 연결합니다.
- Arduino 앱 랩 열기: Arduino 앱 랩을 실행하고 Arduino UNO Q를 감지할 때까지 기다립니다.
- 새 앱 만들기: Create New App 버튼을 클릭합니다.

- 앱에 이름을 지정합니다. 예: DIYables_LDRModule
- 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 앱 랩에서 실행 버튼을 클릭하여 STM32에 컴파일 및 업로드합니다.

- 테스트: 손으로 LDR 모듈의 빛을 차단 및 개방합니다. 아래의 브리지 섹션을 사용하여 모니터를 통해 결과를 봅니다.
- LED가 항상 켜져 있거나 밝은 상태에서도 꺼져 있으면 포텐셀로미터를 돌려 모듈의 감도를 조정합니다.
MCU 코드 — AO 핀에서 값 읽기
코드는 AO 핀에서 아날로그 강도값을 읽습니다(12비트 ADC: Arduino UNO Q에서 0–4095):
빠른 단계
- DO 스케치를 위의 AO 코드로 바꿉니다(sketch/sketch.ino에 붙여넣기).
- 다시 업로드하고 아래의 브리지 섹션을 사용하여 모니터를 통해 아날로그 읽음값을 봅니다.
Linux + MCU 브리지 프로그래밍
Arduino UNO Q는 함께 작동하는 두 개의 프로세서를 가지고 있습니다: MPU(Qualcomm, Debian Linux 실행) 및 MCU(STM32, Arduino 스케치를 실행하는 Zephyr OS). 그들은 Arduino_RouterBridge 라이브러리를 사용하여 RPC를 통해 통신합니다 — 절대 raw 시리얼 포트를 통해 통신하지 않습니다.
- LDR 모듈은 MCU(STM32)에 연결됩니다 — DO 핀은 디지털 입력에 연결되고 AO 핀은 STM32의 아날로그 입력 A0에 연결됩니다.
- MPU는 이 핀을 직접 읽을 수 없습니다 — Bridge.call()을 통해 MCU의 함수를 호출하여 DO 또는 AO 읽음값을 요청해야 합니다.
- MPU는 Wi-Fi를 가지고 있습니다 — MPU가 Wi-Fi가 있는 전체 Debian Linux를 실행하므로 텔레그램 명령을 수신하고 센서 읽음값을 원격으로 보낼 수 있습니다.
- 통신: Linux 측의 Bridge.call()은 MCU 측의 Bridge.provide() 함수를 호출합니다(디지털/아날로그 읽음은 안전합니다 — 하드웨어 GPIO 쓰기가 필요하지 않음).
- ⚠️ 예약됨: /dev/ttyHS1(Linux) 및 Serial1(MCU)은 Arduino Router에서 사용됩니다 — 절대 직접 열지 마십시오.
간단히 말해: MPU가 읽음 요청 → MCU가 DO/AO를 읽음 → MCU가 결과를 모니터에 출력합니다.
MCU 스케치 — 브리지 및 모니터 출력이 있는 LDR 모듈 읽음:
Python 스크립트(Arduino 앱 랩) — 매초 Linux에서 읽음을 요청:
- 참고: MCU 스케치에서 Bridge.begin()이 호출되었는지 확인하고 스케치가 업로드된 후 Linux 측에서 Python 스크립트를 실행해야 합니다.
- ⚠️ 경고: /dev/ttyHS1(Linux의 경우)을 직접 열거나 코드에서 Serial1(MCU의 경우)을 사용하지 마십시오 — 이들은 Arduino Router에서 예약되어 있으며 액세스하면 브리지가 중단됩니다.
빠른 단계
- MCU 스케치 업로드: Arduino 앱 랩을 열고 새 앱을 만들고 브리지 MCU 스케치를 sketch/sketch.ino에 붙여넣고 Arduino_RouterBridge 라이브러리를 설치한 후 실행을 클릭합니다.
- Python 스크립트 추가: 위의 Python 코드를 동일한 앱의 Python 탭에 붙여넣습니다.
- 앱 실행: 실행을 클릭합니다 — Python은 매초 DO 및 AO 읽음값을 요청합니다.
- 콘솔 확인: 콘솔 탭을 열고 → MCU 모니터 서브탭을 열어 읽음값을 봅니다.
앱 랩 콘솔 출력
텔레그램 통합
텔레그램을 통해 어디서나 LDR 모듈을 원격으로 읽습니다.
아직 텔레그램 봇이 없으면 계속 진행하기 전에 아두이노 우노 Q - 텔레그램 봇을 참고하여 봇 토큰을 얻으세요.
MCU 스케치: 이전 브리지 섹션의 동일한 MCU 스케치를 유지합니다 — 변경 사항이 없습니다. 진행하기 전에 STM32에 이미 업로드되어 실행 중인지 확인하세요.
Python 스크립트(Arduino 앱 랩) — LDR 모듈 읽음을 위한 텔레그램 봇:
- 참고: YOUR_BOT_TOKEN을 텔레그램의 @BotFather에서 얻은 토큰으로 바꾸세요.
- /do를 보내서 디지털 출력(빛/어두움 상태)을 읽습니다.
- /ao를 보내서 아날로그 출력(0–4095)을 읽습니다.
- /read를 보내서 DO와 AO 모두를 읽습니다.
빠른 단계
- MCU 스케치 업로드: 이전 섹션의 브리지 MCU 스케치를 사용합니다(아직 완료하지 않았으면 먼저 업로드).
- 텔레그램 스크립트 붙여넣기: 위의 Python 코드를 Arduino 앱 랩의 앱의 Python 탭에 복사합니다.
- 토큰 설정: 스크립트의 YOUR_BOT_TOKEN을 실제 봇 토큰으로 바꿉니다.
- 앱 실행: 실행을 클릭합니다 — 봇은 텔레그램 메시지 수신을 시작합니다.
- 테스트: /do를 보냅니다 — 봇이 디지털 상태로 응답합니다. /ao를 보냅니다 — 봇이 아날로그 값으로 응답합니다. /read를 보냅니다 — 봇이 둘 다로 응답합니다.
앱 랩 콘솔 출력
ArduinoBot
OpenClaw 통합
이 튜토리얼에 OpenClaw를 적용하려면 아두이노 우노 Q - OpenClaw 튜토리얼의 지침을 참조하십시오.
애플리케이션/프로젝트 아이디어
- 자동 야간 조명: 모듈이 어둠을 감지할 때 조명 제어 트리거
- 스마트 커튼: AO 읽음값을 사용하여 하루 종일 변화하는 광 수준 모니터링
- 식물 모니터: 식물의 광 노출이 임계값 이하로 떨어질 때 텔레그램을 통해 경고 발송
- 보안 시스템: 방에서 광 변화 감지(예: 밤에 누군가 조명을 켤 때) 및 경고 발송
- 데이터 로거: MPU의 Linux 파일시스템을 사용하여 시간 경과에 따른 광 수준 기록 및 분석
직접 시도해보기
- 쉬움: 실제 디지털 상태("Light present" 또는 "Dark")를 MCU 모니터를 통해 텔레그램 사용자에게 다시 보냅니다.
- 중간: 실제 AO 값을 모니터를 확인할 필요 없이 텔레그램 사용자에게 직접 보냅니다.
- 어려움: 텔레그램을 통해 임계값을 설정합니다(예: /threshold 2000). AO 값이 임계값을 초과하면 자동으로 경고를 보냅니다.