好久没有更新了,家里实在太乱,最近趁着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.