本文介绍了 RA-Eco-RA4E2-64PIN-V1.0 通过 ADC 读取光敏传感器,根据环境光线强度设定合适的阈值,驱动步进电机精确旋转,进而实现智能窗帘的项目设计。
步进电机与 RA4E2 开发板的接线方式如下
| ULN2003 驱动板 | RA4E2 | 说明 |
|---|---|---|
| IN1 | P100 | 步进脉冲 A |
| IN2 | P101 | 步进脉冲 B |
| IN3 | P104 | 步进脉冲 C |
| IN4 | P112 | 步进脉冲 D |
| VCC | 5V | 驱动板电源 |
| GND | GND | 共地 |
光敏传感器模块与开发板的接线方式如下
| 光敏传感器模块 | RA4E2 | 说明 |
|---|---|---|
| Signal | P000 | ADC 数据采集 |
| VCC | 3.3V | 模块供电 |
| GND | GND | 共地 |
串口通信使用板载 USB 转 TTL 工具,对应 P109 (TXD9) 和 P110 (RXD9) 引脚。


graph TD
A([开始]) --> B[初始化UART和步进电机]
B --> C[设置光照阈值和状态变量]
C --> D[启动ADC扫描<br>读取光敏传感器]
D --> E[读取ADC值并计算电压]
E --> F{光照强度判断}
F -- 光线强 ADC > 阈值 --> G{窗帘是否关闭?}
G -- 是 --> H[顺时针旋转打开窗帘]
H --> I[更新状态: 打开]
F -- 光线弱 ADC ≤ 阈值 --> J{窗帘是否打开?}
J -- 是 --> K[逆时针旋转关闭窗帘]
K --> L[更新状态: 关闭]
G -- 否 --> M[保持当前状态]
J -- 否 --> M
M --> N[等待500ms延时]
N --> D
在 .../src 目录下新建源文件 stepper_motor.c 、 stepper_motor_uart.c 和头文件 stepper_motor.h 用于配置步进电机相关驱动函数;
void hal_entry(void)
{
/* TODO: add your own code here */
// 初始化UART
err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg);
assert(FSP_SUCCESS == err);
if (FSP_SUCCESS != err) {
printf("UART open failed: 0x%x\r\n", err);
return;
}
/* Initializes the ADC module. */
err = R_ADC_Open(&g_adc0_ctrl, &g_adc0_cfg);
/* Handle any errors. This function should be defined by the user. */
assert(FSP_SUCCESS == err);
/* Enable channels. */
err = R_ADC_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg);
assert(FSP_SUCCESS == err);
printf("RA4E2 - Smart Curtain Control System\r\n");
printf("Light sensor controlled curtain operation\r\n");
// 初始化步进电机
stepper_motor_init();
// 启用UART接收
uint8_t dummy;
err = R_SCI_UART_Read(&g_uart9_ctrl, &dummy, 1);
if (err != FSP_SUCCESS) {
printf("UART read start failed: 0x%x\r\n", err);
}
// 设置回调函数
g_uart9_ctrl.p_callback = user_uart_callback;
// 启用全局中断
__enable_irq();
// 光敏传感器参数
uint16_t adc_raw = 0; // 原始ADC数据
double voltage = 0.0; // 电压值
uint16_t light_threshold = 2000; // 光照阈值(根据实际情况调整)
bool curtain_open = false; // 窗帘状态标志
uint32_t counter = 0;
uint32_t operation_counter = 0;
const uint32_t operation_interval = 50; // 操作间隔:50 * 100ms = 5秒
printf("Light threshold set to: %d\r\n", light_threshold);
printf("System initialized. Monitoring light level...\r\n");
while (1) {
/*======== ADC 光敏传感器读取 =========*/
/* 启用从ELC事件触发扫描 */
(void) R_ADC_ScanStart(&g_adc0_ctrl);
scan_complete_flag = false;
while (!scan_complete_flag)
{
/* 等待回调设置标志 */
}
err = R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_0, &adc_raw);
assert(FSP_SUCCESS == err);
voltage = (double)(adc_raw / 4095.0) * 3.3; // 计算电压值
// 显示当前光照信息
if (counter % 50 == 0) {
printf("Light level: %d, Voltage: %.2fV, Curtain status: %s\r\n",
adc_raw, voltage, curtain_open ? "OPEN" : "CLOSED");
}
// 检查操作间隔,避免频繁触发
if (operation_counter >= operation_interval) {
operation_counter = 0; // 重置计数器
// 根据光照强度控制窗帘
if (adc_raw > light_threshold) { // 天亮 - 光线较强
if (!curtain_open) { // 如果窗帘是关闭状态,则打开
printf("Daylight detected! Opening curtains...\r\n");
stepper_motor_rotate_degrees(90.0f); // 顺时针旋转打开
stepper_motor_stop();
curtain_open = true;
printf("Curtains are now OPEN.\r\n");
}
} else { // 天黑 - 光线较弱
if (curtain_open) { // 如果窗帘是打开状态,则关闭
printf("Darkness detected! Closing curtains...\r\n");
stepper_motor_rotate_degrees(-90.0f); // 逆时针旋转关闭
stepper_motor_stop();
curtain_open = false;
printf("Curtains are now CLOSED.\r\n");
}
}
}
// 检查UART是否有数据接收(用于调试或手动控制)
if (g_uart_received) {
printf("UART command received! Processing...\r\n");
stepper_motor_process_command();
// 根据命令执行结果可能需要更新curtain_open状态
}
R_BSP_SoftwareDelay(100, BSP_DELAY_UNITS_MILLISECONDS);
counter++;
operation_counter++;
}
#if BSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}
stepper_motor.c 、 stepper_motor_uart.c 和头文件 stepper_motor.h 详见帖子:RA4E2 - 步进电机的串口控制 .
发送目标旋转角度,可测试步进电机手动控制情况,对应窗帘打开或关闭;
» 90
« Data received! Processing...
Processing command: 90
Received command: 90
Parsed angle: 90.0°
Executing: 90.0° at fixed speed: 1ms/step
Angle: 90.0° -> Steps calculation:
Rotating CW, steps: 127, delay: 1ms
Progress: 100/127 steps
Rotation completed.
Motor stopped.
Execution completed.
测试光敏传感器模块在 天黑 和 天亮 情况下的控制效果,串口输出如下

动态效果见底部视频。
本文介绍了 RA-Eco-RA4E2-64PIN-V1.0 开发板通过 ADC 读取光敏传感器,根据环境光线强度设定合适的阈值,驱动步进电机精确旋转,进而实现智能窗帘的项目设计,包括硬件连接、工程创建、工程代码、测试效果等流程,为 Renesas RA 系列产品在智能家居、工业自动化控制、精密科研等相关领域的开发设计和快速应用提供了参考。
举报
更多回帖