아두이노 우노 Q LDR 모듈

이 튜토리얼은 Arduino UNO Q와 함께 LDR 라이트 센서 모듈을 사용하는 방법을 보여줍니다. 다음을 배우게 됩니다:

Arduino UNO Q ldr 광 센서 module

필요한 하드웨어

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 핀: 아날로그 출력 핀입니다. 더 밝을수록 출력값이 낮아지고 더 어두울수록 출력값이 높아집니다.
ldr 광 센서 module 사용법 핀아웃
image source: diyables.io

또한 두 개의 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)의 값과 다릅니다. 항상 임계값을 그에 따라 조정하십시오.

배선도

라이트 센서 모듈에는 두 가지 출력이 있습니다. 필요에 따라 하나 또는 둘 다 사용할 수 있습니다.

Arduino UNO Q ldr 광 센서 module 연결 배선도

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

MCU 코드 — DO 핀에서 값 읽기

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

코드는 DO 핀의 디지털 상태를 읽습니다 — HIGH는 어두움을 의미하고, LOW는 빛이 있음을 의미합니다:

/* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-ldr-module */ #define DO_PIN 2 // The Arduino UNO Q pin connected to DO pin of the LDR module void setup() { pinMode(DO_PIN, INPUT); } void loop() { int light_state = digitalRead(DO_PIN); // HIGH = light is NOT present (dark), LOW = light is present // TO DO: use light_state in your logic // Example: if (light_state == HIGH) { /* dark */ } else { /* bright */ } delay(200); }

빠른 단계

  • Arduino UNO Q 처음 사용하신가요? 아두이노 우노 Q 시작하기 튜토리얼을 따라 진행하기 전에 개발 환경을 준비하세요.
  • 컴포넌트 배선: VCC → 3.3V, GNDGND, DO → 핀 2, AO → A0을 다이어그램에 표시된 대로 연결합니다.
  • 연결: USB-C 케이블을 사용하여 Arduino UNO Q를 컴퓨터에 연결합니다.
  • Arduino 앱 랩 열기: Arduino 앱 랩을 실행하고 Arduino UNO Q를 감지할 때까지 기다립니다.
  • 새 앱 만들기: Create New App 버튼을 클릭합니다.
create new app in 아두이노 app lab on Arduino UNO Q
  • 앱에 이름을 지정합니다. 예: DIYables_LDRModule
  • Create를 클릭하여 확인합니다.
  • 새 앱 내에서 폴더 및 파일 세트가 생성됩니다.
아두이노 app lab app folders and files on Arduino UNO Q
  • sketch/sketch.ino 파일을 찾습니다 — 이것이 MCU 스케치를 붙여넣을 위치입니다.
  • 스케치 붙여넣기: 위의 DO 코드를 복사하여 스케치 파일에 붙여넣습니다. 다른 파일은 기본값으로 유지합니다.
    • 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 앱 랩에서 실행 버튼을 클릭하여 STM32에 컴파일 및 업로드합니다.
    click run 버튼 in 아두이노 app lab on Arduino UNO Q
    • 테스트: 손으로 LDR 모듈의 빛을 차단 및 개방합니다. 아래의 브리지 섹션을 사용하여 모니터를 통해 결과를 봅니다.
    • LED가 항상 켜져 있거나 밝은 상태에서도 꺼져 있으면 포텐셀로미터를 돌려 모듈의 감도를 조정합니다.

    MCU 코드 — AO 핀에서 값 읽기

    코드는 AO 핀에서 아날로그 강도값을 읽습니다(12비트 ADC: Arduino UNO Q에서 0–4095):

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-ldr-module */ #define AO_PIN A0 // The Arduino UNO Q pin connected to AO pin of the LDR module // Arduino UNO Q: 12-bit ADC (0-4095), 3.3V reference // Higher value = darker; lower value = brighter void setup() { // nothing to set up } void loop() { int light_value = analogRead(AO_PIN); // TO DO: use light_value in your logic // Example: if (light_value > 2000) { /* relatively dark */ } delay(200); }

    빠른 단계

    • 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 모듈 읽음:

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-ldr-module */ #include "Arduino_RouterBridge.h" #define DO_PIN 2 #define AO_PIN A0 void read_do() { int state = digitalRead(DO_PIN); Monitor.print("DO: "); Monitor.println(state == HIGH ? "Dark (no light)" : "Light present"); } void read_ao() { int value = analogRead(AO_PIN); Monitor.print("AO: "); Monitor.println(value); } void setup() { Bridge.begin(); Monitor.begin(); pinMode(DO_PIN, INPUT); Bridge.provide("read_do", read_do); Bridge.provide("read_ao", read_ao); Monitor.println("LDR Module Bridge ready"); } void loop() {}

    Python 스크립트(Arduino 앱 랩) — 매초 Linux에서 읽음을 요청:

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-ldr-module */ from arduino.app_utils import * import time def loop(): Bridge.call("read_do") Bridge.call("read_ao") time.sleep(1) App.run(user_loop=loop)
    • 참고: 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 모니터 서브탭을 열어 읽음값을 봅니다.

    앱 랩 콘솔 출력

    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
    LDR Module Bridge ready DO: Light present AO: 145 DO: Light present AO: 152 DO: Dark (no light) AO: 3890

    텔레그램 통합

    텔레그램을 통해 어디서나 LDR 모듈을 원격으로 읽습니다.

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

    MCU 스케치: 이전 브리지 섹션의 동일한 MCU 스케치를 유지합니다 — 변경 사항이 없습니다. 진행하기 전에 STM32에 이미 업로드되어 실행 중인지 확인하세요.

    Python 스크립트(Arduino 앱 랩) — LDR 모듈 읽음을 위한 텔레그램 봇:

    /* * 이 Arduino UNO Q 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO Q 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-q/arduino-uno-q-ldr-module */ 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 == "/do": result = Bridge.call("read_do") send_message(chat_id, result) elif text == "/ao": result = Bridge.call("read_ao") send_message(chat_id, result) elif text == "/read": do_result = Bridge.call("read_do") ao_result = Bridge.call("read_ao") send_message(chat_id, f"{do_result}\n{ao_result}") else: send_message(chat_id, "Commands:\n/do — read digital output (light/dark)\n/ao — read analog output (0-4095)\n/read — read both DO and AO") time.sleep(1) App.run(user_loop=loop)
    • 참고: YOUR_BOT_TOKEN을 텔레그램의 @BotFather에서 얻은 토큰으로 바꾸세요.
    • /do를 보내서 디지털 출력(빛/어두움 상태)을 읽습니다.
    • /ao를 보내서 아날로그 출력(0–4095)을 읽습니다.
    • /read를 보내서 DO와 AO 모두를 읽습니다.

    빠른 단계

    • MCU 스케치 업로드: 이전 섹션의 브리지 MCU 스케치를 사용합니다(아직 완료하지 않았으면 먼저 업로드).
    • 텔레그램 스크립트 붙여넣기: 위의 Python 코드를 Arduino 앱 랩의 앱의 Python 탭에 복사합니다.
    • 토큰 설정: 스크립트의 YOUR_BOT_TOKEN을 실제 봇 토큰으로 바꿉니다.
    • 앱 실행: 실행을 클릭합니다 — 봇은 텔레그램 메시지 수신을 시작합니다.
    • 테스트: /do를 보냅니다 — 봇이 디지털 상태로 응답합니다. /ao를 보냅니다 — 봇이 아날로그 값으로 응답합니다. /read를 보냅니다 — 봇이 둘 다로 응답합니다.

    앱 랩 콘솔 출력

    DIYables_Apps
    Stop
    sketch.ino
    1#include "Arduino_RouterBridge.h"
    Serial Monitor
    Python
    [2026-04-29 12:00:01] Telegram: /do [2026-04-29 12:00:01] DO: Light present [2026-04-29 12:02:10] Telegram: /ao [2026-04-29 12:02:10] AO: 2156 [2026-04-29 12:04:05] Telegram: /read [2026-04-29 12:04:05] DO: Light present AO: 2156
    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
    /do
    10:15 AM ✓✓
    DO: Light present
    10:16 AM
    /ao
    10:17 AM ✓✓
    AO: 2156
    10:18 AM
    /read
    10:19 AM ✓✓
    DO: Light present AO: 2156
    10:20 AM

    OpenClaw 통합

    이 튜토리얼에 OpenClaw를 적용하려면 아두이노 우노 Q - OpenClaw 튜토리얼의 지침을 참조하십시오.

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

    • 자동 야간 조명: 모듈이 어둠을 감지할 때 조명 제어 트리거
    • 스마트 커튼: AO 읽음값을 사용하여 하루 종일 변화하는 광 수준 모니터링
    • 식물 모니터: 식물의 광 노출이 임계값 이하로 떨어질 때 텔레그램을 통해 경고 발송
    • 보안 시스템: 방에서 광 변화 감지(예: 밤에 누군가 조명을 켤 때) 및 경고 발송
    • 데이터 로거: MPU의 Linux 파일시스템을 사용하여 시간 경과에 따른 광 수준 기록 및 분석

    직접 시도해보기

    • 쉬움: 실제 디지털 상태("Light present" 또는 "Dark")를 MCU 모니터를 통해 텔레그램 사용자에게 다시 보냅니다.
    • 중간: 실제 AO 값을 모니터를 확인할 필요 없이 텔레그램 사용자에게 직접 보냅니다.
    • 어려움: 텔레그램을 통해 임계값을 설정합니다(예: /threshold 2000). AO 값이 임계값을 초과하면 자동으로 경고를 보냅니다.