好久没有更新了,家里实在太乱,最近趁着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的自动调速风扇相关推荐

  1. 【毕业设计】基于超声波与红外的自动调速风扇系统(代码开源) -物联网 嵌入式 stm32

    文章目录 1 简介 1 设计概要 2 系统设计 2.1 系统供电问题 2.2 自动/手动模式的切换 2.3 PWM信号的产生 2.4 单片机内部资源的分配 三.硬件搭建 3.1 单片机最小系统 3.2 ...

  2. 毕业设计 超声波红外自动调速风扇系统

    文章目录 1 简介 1 设计概要 2 系统设计 2.1 系统供电问题 2.2 自动/手动模式的切换 2.3 PWM信号的产生 2.4 单片机内部资源的分配 三.硬件搭建 3.1 单片机最小系统 3.2 ...

  3. 基于ArduinoUNOR3的智能调速风扇

    一,项目介绍   如今相当一部分的家庭依然使用着一些老式家电,扔掉浪费,继续使用又有点土不拉叽的.利用机智云的云计算IoT软件平台,可以轻而易举地实现一些智能功能,旧瓶装新酒,让老式电气发出现代异彩, ...

  4. 51单片机PWM调速风扇转速显示转速设置

    实践制作DIY- GC0029-PWM调速风扇 一.功能说明: 基于51单片机设计-PWM调速风扇 二.功能介绍: STC89C52单片机(AT89C52)+5V4线PWM风扇+LCD1602显示器+ ...

  5. jetson nano 风扇自动调速

    jetson nano 风扇自动调速 概述 一.临时调试 二.驱动脚本 概述 jetson nano一定要配一个可调风扇,jetson nano散热不好极容易死机!! 一.临时调试 PWM范围:0-2 ...

  6. NanoPC-T4 上实现pwm风扇自动调速

    友善之臂推出的 NanoPC-T4 是一款采用 瑞芯微 RK3399 方案的嵌入式开发板,性能强大.发热量也杠杠的. 其板载PWM调速风扇接口采用GH1.25 插头,支持PWM调速.但查看了下 dts ...

  7. 基于51的多功能小风扇,可以实现定时,摇头,超声波自动调速等功能

    最近也是想加入一个实验室,考核题目就是写一个小风扇!下面是题目要求 由于我也是大一新生,也就自学了一点51和c语言知识,代码写的可能有点拙,还请多多指教! #include <REGX52.H& ...

  8. # Arduino小车PID调速——整定参数初试水

    Arduino小车PID调速--整定参数初试水 在实现了小车较为可靠的测速基础上,便可以正式开展PID调速实验了.本文是基于使用Arduino平台上由Brett Beauregard大神写的PID库进 ...

  9. 计算机控制直流电机闭环调速实验报告,电气工程及其自动化电力系统实训报告-基于PLC的直流电机调速实验.pdf...

    电气工程及其自动化电力系统实训报告-基于PLC的直流电机调速实验.pdf 华南理工大学广州汽车学院华南理工大学广州汽车学院 电力系统实训电力系统实训报告报告 设计题目设计题目基于基于 PLCPLC 的 ...

最新文章

  1. 谷歌机器智能大牛:AI模型要真正理解人类语言,关键是「序列学习」
  2. python入门到精通需要学多久-Python从入门到精通只需要一个月就够了!
  3. MyEcplise中SpringBoot怎样定制启动banner?
  4. LeetCode Algorithm 389. 找不同
  5. wget命令下载文件
  6. jQuery源码研究分析学习笔记-jQuery.deferred()(12)
  7. TypeSrcript如何引入第三方库 如果加d.ts以及async await如何使用 demo,只有代码,文字后续补充...
  8. 前端输入框错误提示_WEB/APP开发基础之旅--前端、服务器端、数据库综合开发案例...
  9. BZOJ44084299[Fjoi 2016]神秘数——主席树
  10. 启动Tomcat出现Using CATALINA_BASE
  11. md(Markdown)文件编辑
  12. 控制机械手叫什么_机械手控制系统?
  13. layui结合json viewer实现代码格式化
  14. MongoDB for Java Programmer ——2
  15. p标签内不能包含块级元素
  16. 有道云笔记,熊掌记和 Effie 哪个适合单口或脱口秀作者?
  17. 数据结构——非线性结构(树与二叉树)
  18. 正态分布的前世今生——如何发现的?
  19. WSL2安装Kali Linux超级新手指南
  20. 智慧磐石工程项目系统组成

热门文章

  1. mongodb 官网示例
  2. 成功解决 vscode远程调试python
  3. -moz-max-content使用
  4. 欧格教育:拼多多搜索排名的算法是怎么样
  5. 笔记---domoticz docker 启动指令
  6. Amazon API Gateway使用IP白名单控制后端服务访问
  7. css图片6边形,CSS3 实现六边形Div图片展示效果
  8. 关于携程多玩对接-订单对接
  9. 【数据竞赛】Kaggle知识点:比赛类型介绍
  10. 统计分析---多重共线性