/www/wwwroot/cloud.lincq.cn/业余项目/home-red-led.ino/** * @file home-red-led.ino * @brief 读取亮度传感器数据,并根据亮度自动控制继电器(晚上开启,白天关闭) * @author lcq * @date 2026-02-21 * * ========================================== * 接线说明 (Wiring Instructions) - Arduino Nano * ========================================== * * 1. 亮度传感器 (Photoresistor / LDR) * ------------------------------------------ * | 模块引脚 | Arduino Nano 引脚 | * | :---: | :---: | * | VCC | 5V | * | GND | GND | * | AO | A0 | * ------------------------------------------ * (如果使用独立元件,请参考代码下方的详细说明) * * 2. 继电器模块 (Relay Module) * ------------------------------------------ * | 模块引脚 | Arduino Nano 引脚 | * | :---: | :---: | * | VCC | 5V | * | GND | GND | * | IN | D2 | * ------------------------------------------ * 注意:大多数继电器模块可以是高电平触发或低电平触发。 * 本代码假设为【高电平触发】(High Level Trigger)开启继电器。 * 如果你的继电器是低电平触发,请修改代码中的 RELAY_ON/RELAY_OFF 定义。 */ // --- 硬件引脚定义 --- const int SENSOR_PIN = A0; // 亮度传感器连接的模拟引脚 const int RELAY_PIN = 2; // 继电器模块控制引脚 (D2) // --- 配置参数 --- // 亮度阈值:数值越小通常代表环境越暗(取决于传感器类型,请观察串口输出调整) // 假设:光照强 -> 阻值小 -> 分压大 -> 数值大 (0-1023) // 晚上开启阈值(低于此值视为晚上) const int THRESHOLD_ON = 300; // 白天关闭阈值(高于此值视为白天,设置滞回区间防止临界点闪烁) const int THRESHOLD_OFF = 400; // 继电器触发电平定义 (根据你的继电器模块调整) const int RELAY_ON_LEVEL = HIGH; // 开启继电器的电平 const int RELAY_OFF_LEVEL = LOW; // 关闭继电器的电平 /** * @Author lcq * @Date 2026-02-21 * @brief 初始化设置,包括串口通信和引脚模式 * @return void */ void setup() { // 初始化串口通信,波特率为 9600 Serial.begin(9600); // 设置继电器引脚为输出模式 pinMode(RELAY_PIN, OUTPUT); // 默认关闭继电器 digitalWrite(RELAY_PIN, RELAY_OFF_LEVEL); Serial.println("System Initialized."); Serial.println("Monitoring light levels..."); } /** * @Author lcq * @Date 2026-02-21 * @brief 主循环,读取传感器数据并控制继电器 * @return void */ void loop() { // 读取模拟引脚的值 (范围 0-1023) int sensorValue = analogRead(SENSOR_PIN); // 将读取到的值打印到串口监视器,方便调试阈值 Serial.print("Light Level: "); Serial.println(sensorValue); // 自动控制逻辑(带滞回区间) if (sensorValue < THRESHOLD_ON) { // 亮度低于开启阈值 -> 晚上 -> 开启继电器 digitalWrite(RELAY_PIN, RELAY_ON_LEVEL); } else if (sensorValue > THRESHOLD_OFF) { // 亮度高于关闭阈值 -> 白天 -> 关闭继电器 digitalWrite(RELAY_PIN, RELAY_OFF_LEVEL); } // 注意:在 THRESHOLD_ON 和 THRESHOLD_OFF 之间的“灰色地带”,保持继电器状态不变 // 延时 500 毫秒,降低检测频率,避免过于频繁切换 delay(500); }