基于Arduino的自动调速风扇
好久没有更新了,家里实在太乱,最近趁着618活动,买了一堆收纳抽屉和置物架,把家里彻底收拾了一下,然后客厅就成了这个奇葩样子,注孤生的节奏了。
话不多说,夏天到了,天气逐渐热起来,风扇成了必不可少的消暑利器。
本文主要介绍两种基于Arduino的风扇自动调速方案,使用的是5V的USB风扇,物美价廉还省电。
方案一是通过舵机控制旋钮变压器实现调速,方案二通过脉冲宽度调制(PWM)实现调速。
方案一:旋钮变压器
材料清单
名称 | 数量 | 淘宝单价 |
---|---|---|
Arduino UNO | 1 | 15 |
USB风扇调速器 | 1 | 6 |
DH11温湿度传感器 | 1 | 4 |
SG90S舵机 | 1 | 7.5 |
红外接收模块加遥控器 | 1 | 3.3 |
所用零件均可在淘宝买到,价格时有波动。
思路是通过DH11温湿度传感器测量温度,根据温度控制舵机的角度,舵机的转轴与USB风扇调速器的旋钮连接,带动旋钮转动,进而控制风扇的输入电压,实现转速控制。
此外,增加了红外控制,用于远程开关风扇,切换模式。
接线
代码
需要红外控制模块和DH11温湿度传感器的库,代码及库的下载链接在文末。
3种红外信号分别对应全开、全关和自动模式。
自动模式会根据室温调节风扇的转速。
#include <dht.h> //调用dh11温湿度传感器的库
#include <IRremote.h> //调用红外控制的库
#include <Servo.h> //调用舵机控制的库dht DHT;
Servo servo;#define RECV_PIN 9 //定义红外接收器针脚
IRrecv irrecv(RECV_PIN);
decode_results results;#define dataPin 10 //定义温湿度传感器针脚
int servoPin = 7; //定义舵机针脚
char value; //红外接收器接收的数值
float t; //温湿度传感器测量的温度数值
int a = 0;
int b = 0; //a、b用于切换模式void setup() {irrecv.enableIRIn();servo.attach(servoPin);servo.write(0);delay(1000);servo.detach();//Serial.begin(9600);
}void loop() {if (irrecv.decode(&results)) {if (results.value == 16753245) {a = 1;}if (results.value == 16736925) {a = 0;b = 0;}if (results.value == 16769565) {a = 0;b = 1;}irrecv.resume();}if (a == 0 && b == 0) {servo.attach(servoPin);servo.write(0);delay(1000);servo.detach(); //关闭风扇}if (a == 0 && b == 1) {servo.attach(servoPin);servo.write(180);delay(1000);servo.detach(); //打开风扇}if (a == 1) {int readData = DHT.read11(dataPin);t = DHT.temperature;if (t <= 26) {servo.attach(servoPin);delay(1);servo.write(0);delay(500);servo.detach(); //自动模式低于26度关风扇}else if (t > 26 && t <= 28) {servo.attach(servoPin);delay(1);servo.write(60);delay(500);servo.detach(); //自动模式26-28度一档}else if (t > 28 && t <= 30) {servo.attach(servoPin);delay(1);servo.write(120);delay(500);servo.detach(); //自动模式28-30度二档}else if (t > 30 && t <= 40) {servo.attach(servoPin);delay(1);servo.write(180);delay(500);servo.detach(); //自动模式高于30度全开}//Serial.println(t);delay(1000);}
}
方案二:脉冲宽度调制(PWM)
脉冲宽度调制(pulse width modulation)通过快速打开和关闭电源来调整发送到电子设备的平均电压值。
平均电压取决于占空比,占空比是指在一个脉冲循环内,通电时间相对于总时间所占的比例。
可以通过Arduino的脉宽调制输出连接L298N电机驱动模块,并通过控制脉宽调制输出来控制电机的速度。
通过下图可以看出,输入电压为12V,当占空比为0.25时,平均电压值为3V;当占空比为0.5时,平均电压值为6V。
材料清单
名称 | 数量 | 淘宝单价 |
---|---|---|
Arduino UNO | 1 | 15 |
L298N电机控制模块 | 1 | 6 |
DH11温湿度传感器 | 1 | 4 |
所用零件均可在淘宝买到,价格时有波动。
仍然是通过DH11温湿度传感器测量温度,然后根据温度计算占空比,改变L298N电机控制模块的平均输出电压,实现转速控制。
接线
代码
需要L298N电机控制模块和DH11温湿度传感器的库,代码及库的下载链接在文末。
通过map
函数将室温转换为占空比。
motorSpeed = map(t, tempMin, tempMax, speedMin, speedMax);
以本文为例
motorSpeed = map(t, 28, 50, 30, 100);
上文已经交代,占空比是指在一个脉冲循环内,通电时间相对于总时间所占的比例。
即温度从28变化到50,占空比从0.3变化到1。
#include <Robojax_L298N_DC_motor.h> //调用L298N模块的库
#include <dht.h> //调用dh11温湿度传感器的库dht DHT;
#define IN1 2
#define IN2 4
#define ENA 3 //必须是带有~符号的PWM针脚const int CCW = 2; //反转
const int CW = 1; //正转
const int motorDirection = CW;
#define motor1 1
Robojax_L298N_DC_motor motor(IN1, IN2, ENA, true);#define dataPin 10 //定义温湿度传感器针脚
float t; //温湿度传感器测量的温度数值const float tempMin = 28.0; //温度下限
const int speedMin = 30; //转速下限
const float tempMax = 50.0; //温度上限
const int speedMax = 100; //转速上限int motorSpeed; //根据温度计算出的转速void setup() {motor.begin();
}void loop() {tempToSpeed();motor.rotate(motor1, motorSpeed, motorDirection);delay(500);
}void tempToSpeed()
{float readData = DHT.read11(dataPin);t = DHT.temperature;motorSpeed = map(t, tempMin, tempMax, speedMin, speedMax);if (t < tempMin){motorSpeed = 0;motor.brake(1); //温度低于下限停止}if (t > tempMax){motorSpeed = 100; //温度高于上限全开}
}
代码及库下载的链接
- 方案一代码
提取码:vgwz - 方案二代码
提取码:akgf - 红外控制模块库
提取码:ldhx - DH11温湿度传感器库
提取码:9x70 - L298N电机控制模块库
提取码:8vek
本人菜鸟,发现错误,欢迎指出,谢谢大家。
基于Arduino的自动调速风扇相关推荐
- 【毕业设计】基于超声波与红外的自动调速风扇系统(代码开源) -物联网 嵌入式 stm32
文章目录 1 简介 1 设计概要 2 系统设计 2.1 系统供电问题 2.2 自动/手动模式的切换 2.3 PWM信号的产生 2.4 单片机内部资源的分配 三.硬件搭建 3.1 单片机最小系统 3.2 ...
- 毕业设计 超声波红外自动调速风扇系统
文章目录 1 简介 1 设计概要 2 系统设计 2.1 系统供电问题 2.2 自动/手动模式的切换 2.3 PWM信号的产生 2.4 单片机内部资源的分配 三.硬件搭建 3.1 单片机最小系统 3.2 ...
- 基于ArduinoUNOR3的智能调速风扇
一,项目介绍 如今相当一部分的家庭依然使用着一些老式家电,扔掉浪费,继续使用又有点土不拉叽的.利用机智云的云计算IoT软件平台,可以轻而易举地实现一些智能功能,旧瓶装新酒,让老式电气发出现代异彩, ...
- 51单片机PWM调速风扇转速显示转速设置
实践制作DIY- GC0029-PWM调速风扇 一.功能说明: 基于51单片机设计-PWM调速风扇 二.功能介绍: STC89C52单片机(AT89C52)+5V4线PWM风扇+LCD1602显示器+ ...
- jetson nano 风扇自动调速
jetson nano 风扇自动调速 概述 一.临时调试 二.驱动脚本 概述 jetson nano一定要配一个可调风扇,jetson nano散热不好极容易死机!! 一.临时调试 PWM范围:0-2 ...
- NanoPC-T4 上实现pwm风扇自动调速
友善之臂推出的 NanoPC-T4 是一款采用 瑞芯微 RK3399 方案的嵌入式开发板,性能强大.发热量也杠杠的. 其板载PWM调速风扇接口采用GH1.25 插头,支持PWM调速.但查看了下 dts ...
- 基于51的多功能小风扇,可以实现定时,摇头,超声波自动调速等功能
最近也是想加入一个实验室,考核题目就是写一个小风扇!下面是题目要求 由于我也是大一新生,也就自学了一点51和c语言知识,代码写的可能有点拙,还请多多指教! #include <REGX52.H& ...
- # Arduino小车PID调速——整定参数初试水
Arduino小车PID调速--整定参数初试水 在实现了小车较为可靠的测速基础上,便可以正式开展PID调速实验了.本文是基于使用Arduino平台上由Brett Beauregard大神写的PID库进 ...
- 计算机控制直流电机闭环调速实验报告,电气工程及其自动化电力系统实训报告-基于PLC的直流电机调速实验.pdf...
电气工程及其自动化电力系统实训报告-基于PLC的直流电机调速实验.pdf 华南理工大学广州汽车学院华南理工大学广州汽车学院 电力系统实训电力系统实训报告报告 设计题目设计题目基于基于 PLCPLC 的 ...
最新文章
- 谷歌机器智能大牛:AI模型要真正理解人类语言,关键是「序列学习」
- python入门到精通需要学多久-Python从入门到精通只需要一个月就够了!
- MyEcplise中SpringBoot怎样定制启动banner?
- LeetCode Algorithm 389. 找不同
- wget命令下载文件
- jQuery源码研究分析学习笔记-jQuery.deferred()(12)
- TypeSrcript如何引入第三方库 如果加d.ts以及async await如何使用 demo,只有代码,文字后续补充...
- 前端输入框错误提示_WEB/APP开发基础之旅--前端、服务器端、数据库综合开发案例...
- BZOJ44084299[Fjoi 2016]神秘数——主席树
- 启动Tomcat出现Using CATALINA_BASE
- md(Markdown)文件编辑
- 控制机械手叫什么_机械手控制系统?
- layui结合json viewer实现代码格式化
- MongoDB for Java Programmer ——2
- p标签内不能包含块级元素
- 有道云笔记,熊掌记和 Effie 哪个适合单口或脱口秀作者?
- 数据结构——非线性结构(树与二叉树)
- 正态分布的前世今生——如何发现的?
- WSL2安装Kali Linux超级新手指南
- 智慧磐石工程项目系统组成