第8课 风扇#
8.1 项目介绍#
130电机控制模块采用HR1124S电机控制芯片。HR1124S是应用于直流电机方案的单通道H桥驱动器芯片。HR1124S的H桥驱动部分采用低导通电阻的PMOS和NMOS功率管。低导通电阻保证芯片低的功率损耗,使得芯片安全工作更长时间。此外HR1124S拥有低待机电流,低静态工作电流,这些性能使HR1124S易用于玩具方案。
该模块兼容各种单片机控制板,如arduino系列单片机。模块上自带的防反插红色端子间距为2.54mm,实验中,我们可通过输出到两个信号端IN+和IN-的电压方向来控制电机的转动方向,使用PWM输出控制风扇的转速,让电机转动起来。
8.2. 模块相关资料#
(1)元件知识:
130电机控制模块采用HR1124S电机控制芯片。HR1124S是应用于直流电机方案的单通道H桥驱动器芯片。HR1124S的H桥驱动部分采用低导通电阻的PMOS和NMOS功率管。低导通电阻保证芯片低的功率损耗,使得芯片安全工作更长时间。此外HR1124S拥有低待机电流,低静态工作电流,这些性能使HR1124S易用于玩具方案。
该模块兼容各种单片机控制板,如arduino系列单片机。模块上自带的防反插红色端子间距为2.54mm,实验中,我们可通过输出到两个信号端IN+和IN-的电压方向来控制电机的转动方向,使用PWM输出控制风扇的转速,让电机转动起来。

工作电压: |
3.3-5V(DC) |
最大电流: |
200mA (DC5V) |
|---|---|---|---|
最大功率: |
1W |
控制接口: |
双数字口(数字输入) |
工作温度: |
-10°C ~+50°C |
环保属性: |
ROHS |
(2)控制方法
需要两个引脚控制风扇的电机,一引脚为IN+,二引脚为IN-。PWM值范围是0~255,当两个引脚的PWM输出一定差值时,风扇就能转动。
IN+ - INB- = -45 |
顺时针转动 |
|---|---|
IN± IN- ;= 45 |
逆时针转动 |
IN+ == 0 , IN- == 0 |
停止 |
8.3 实验组件#
|
|
|
|
|---|---|---|---|
ESP32 Plus主板 *1 |
按键 *2 |
130电机模块 *1 |
风扇叶 *1 |
|
|
|
|
4P线 *1 |
3P线 *2 |
USB线 *1 |
8.4 模块接线图#
木板房子⑦处(左侧)按键1,木板房子⑨处(右侧)按键2和130电机模块的控制引脚:
木板房子⑦处(左侧)按键1(S引脚) |
io4 |
|---|---|
木板房子⑨处(右侧)按键2(S引脚) |
io32 |
电机模块的IN+引脚 |
io19 |
电机模块的IN-引脚 |
io18 |
⚠️ 特别注意:智能家居已经组装好了,这里不需要把按键模块和130电机模块拆下来又重新组装和接线,这里再次提供接线图,是为了方便您编写代码!

8.5 控制风扇转动的实验代码1#
控制风扇的正反转和速度。
/*
* 项目: Fan
* 描述: 风扇转动
* 编译IDE:ARDUINO IDE
* 作者: http//www.keyes-robot.com
*/
#define fanPin1 19
#define fanPin2 18
void setup() {
pinMode(fanPin1, OUTPUT);
pinMode(fanPin2, OUTPUT);
}
void loop() {
digitalWrite(fanPin1, LOW); //pwm = 0
analogWrite(fanPin2, 180);
delay(3000);
digitalWrite(fanPin1, LOW);
digitalWrite(fanPin2, LOW);
delay(1000);
digitalWrite(fanPin1, HIGH); //pwm = 255
analogWrite(fanPin2, 210);
delay(3000);
digitalWrite(fanPin1, LOW);
digitalWrite(fanPin2, LOW);
delay(1000);
}
8.6 实验结果1#
按照接线图接好线,外接电源,选择好正确的开发板板型(ESP32 Dev Module)和 适当的串口端口(COMxx),然后单击按钮
上传示例代码至ESP32主控板。示例代码上传成功后,上电后,可以看到顺时针和逆时针不同转速转动。

8.7 代码流程图#

8.8 按钮开关风扇的实验代码2#
一台简易的风扇,通过木板房子⑦处(左侧)按键1开关风扇,木板房子⑨处(右侧)按键2控制风扇的速度。
/*
* 项目: btn_fan
* 描述: 按键控制风扇,模拟换档风扇
* 编译IDE:ARDUINO IDE
* 作者: http//www.keyes-robot.com
*/
#define fanPin1 19 // 风扇控制引脚1
#define fanPin2 18 // 风扇控制引脚2
#define btn1 4 // 按钮引脚1
#define btn2 32 // 按钮引脚2
int btn_count = 0; // 计数器按钮1按下
int btn_count2 = 0; // 计数器按钮2按下
int speed_val = 130; // 风扇初始转速(PWM值)
void setup() {
Serial.begin(9600);
pinMode(btn1, INPUT);
pinMode(btn2, INPUT);
pinMode(fanPin1, OUTPUT);
pinMode(fanPin2, OUTPUT);
}
void loop() {
boolean btn1_val = digitalRead(btn1);
// 按钮1(功率/速度控制)处理
if(btn1_val == 0) // 如果按下按钮
{
delay(10); // 防反跳延迟
if(btn1_val == 0) // 确认按下按钮
{
boolean btn_state = 1;
while(btn_state == 1) // 等待松开按键
{
boolean btn_val = digitalRead(btn1);
if(btn_val == 1) // 如果松开按键
{
btn_count++; // 增量压计数器
Serial.println(btn_count);
btn_state = 0; // 退出循环
}
}
}
boolean power_state = btn_count % 2; // 切换电源状态(0或1)
while(power_state == 1) // 当风扇打开时
{
digitalWrite(fanPin1, LOW); // 设置方向
analogWrite(fanPin2, speed_val); // 设置速度
// 按钮2(速度调节)处理
boolean btn2_val = digitalRead(btn2);
if(btn2_val == 0) // 如果按下速度键
{
delay(10); // 防反跳延迟
if(btn2_val == 0) // 确认按下
{
boolean btn_state2 = 1;
while(btn_state2 == 1) // 等待释放
{
boolean btn2_val = digitalRead(btn2);
if(btn2_val == 1) // 如果松开
{
btn_count2++; // 递增速度等级
if(btn_count2 > 3) // 循环1-3
{
btn_count2 = 1;
}
// 根据计数设置速度
switch(btn_count2)
{
case 1:
speed_val = 130; // 低速
Serial.println(speed_val);
break;
case 2:
speed_val = 180; // 中速
Serial.println(speed_val);
break;
case 3:
speed_val = 230; // 高速
Serial.println(speed_val);
break;
}
btn_state2 = 0;
}
}
}
}
// 检查是否断电
btn1_val = digitalRead(btn1);
if(btn1_val == 0) // 如果按下电源按钮
{
delay(10); // 防反跳延迟
if(btn1_val == 0) // 确认按下
{
digitalWrite(fanPin1, LOW); // 关闭风扇
analogWrite(fanPin2, 0);
power_state = 0; // 退出控制风扇循环
}
}
}
}
}
8.9 实验结果2#
按照接线图接好线,外接电源,选择好正确的开发板板型(ESP32 Dev Module)和 适当的串口端口(COMxx),然后单击按钮
上传示例代码至ESP32主控板。示例代码上传成功后,上电后,先点击一下木板房子⑦处(左侧)按键1,风扇开始转动,再点击木板房子⑨处(右侧)按键2进行调速,可以调节风扇不同的转速,最后按一下木板房子⑦处(左侧)按键1,风扇停止。







