【RA-Eco-RA4E2-64PIN-V1.0 开发板】智能窗帘
本文介绍了 RA-Eco-RA4E2-64PIN-V1.0 通过 ADC 读取光敏传感器,根据环境光线强度设定合适的阈值,驱动步进电机精确旋转,进而实现智能窗帘的项目设计。
项目介绍
- 硬件连接:28BYJ-48 步进电机、ULN2003 驱动板、光敏传感器模块、Jlink 调试器、供电电源等;
- 工程创建:配置 GPIO 、ADC、UART 、串口中断等;
- 工程代码:包括主函数、步进电机驱动代码、ADC 采集代码、串口配置代码等;
- 测试效果:包括 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 用于配置步进电机相关驱动函数;
hal_entry.c
void hal_entry(void)
{
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;
}
err = R_ADC_Open(&g_adc0_ctrl, &g_adc0_cfg);
assert(FSP_SUCCESS == err);
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();
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;
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;
printf("Light threshold set to: %d\r\n", light_threshold);
printf("System initialized. Monitoring light level...\r\n");
while (1) {
(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");
}
}
}
if (g_uart_received) {
printf("UART command received! Processing...\r\n");
stepper_motor_process_command();
}
R_BSP_SoftwareDelay(100, BSP_DELAY_UNITS_MILLISECONDS);
counter++;
operation_counter++;
}
#if BSP_TZ_SECURE_BUILD
R_BSP_NonSecureEnter();
#endif
}
- 保存代码,构建工程并调试。
- 源文件
stepper_motor.c 、 stepper_motor_uart.c 和头文件 stepper_motor.h 详见帖子:RA4E2 - 步进电机的串口控制 .
效果演示
- 28 BYJ-48 步进电机、ULN2003 驱动板、RA4E2 开发板接线硬件连接完成;
- TypeC - USB 数据线连接开发板串口和电脑;
- 打开串口调试助手,配置对应的波特率等参数;
- 打开串口,即可接收芯片发送的字符串;

发送目标旋转角度,可测试步进电机手动控制情况,对应窗帘打开或关闭;
» 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 系列产品在智能家居、工业自动化控制、精密科研等相关领域的开发设计和快速应用提供了参考。