夏日的书桌总是闷热难耐,而传统风扇要么风力过猛要么角度固定。去年工作室搬迁时,我偶然用闲置的Arduino Uno配合摇杆模块,搭建了一个可以精准调节风量和角度的微型空调系统。这个成本不到百元的小装置,如今已经成为我码字时的必备神器。
选择硬件时需要考虑功耗、噪音和体积的平衡:
提示:电机建议选择转速在2000-4000RPM之间的型号,过高转速会产生明显风噪
测试了三种供电方式后的数据对比:
| 供电类型 | 稳定性 | 噪音水平 | 适用场景 |
|---|---|---|---|
| 电脑USB | ★★★☆ | ★★★★ | 临时测试 |
| 9V电池 | ★★☆☆ | ★★★☆ | 移动使用 |
| 5V/2A适配器 | ★★★★ | ★★★☆ | 长期固定 |
实际使用中发现,采用手机充电头供电时,建议在电路中加入100μF电容来消除PWM调速时的电流杂音。
用FreeCAD设计的可调节支架包含三个关键部件:
python复制# 支架参数示例(单位:mm)
base_plate = [120, 80, 3] # 底板尺寸
servo_mount = [25, 25, 15] # 舵机固定座
fan_holder = [40, 40, 30] # 风扇支架
组装时注意:
arduino复制// 引脚定义
const int JOYSTICK_X = A0; // 摇杆X轴→调速
const int JOYSTICK_Y = A1; // 摇杆Y轴→转向
const int MOTOR_PWM = 5; // 电机控制引脚
const int SERVO_PIN = 9; // 舵机控制引脚
实际布线时推荐:
原始摇杆值存在抖动,添加了滑动平均滤波:
arduino复制#define FILTER_SIZE 5
int filterBuffer[FILTER_SIZE];
int filterIndex = 0;
int smoothRead(int pin) {
filterBuffer[filterIndex] = analogRead(pin);
filterIndex = (filterIndex + 1) % FILTER_SIZE;
long sum = 0;
for(int i=0; i<FILTER_SIZE; i++) {
sum += filterBuffer[i];
}
return sum / FILTER_SIZE;
}
arduino复制#include <Servo.h>
Servo windServo;
void setup() {
pinMode(MOTOR_PWM, OUTPUT);
windServo.attach(SERVO_PIN);
// 启动自检
for(int i=0; i<=180; i+=10) {
windServo.write(i);
delay(100);
}
analogWrite(MOTOR_PWM, 100); // 测试最低启动电压
delay(500);
analogWrite(MOTOR_PWM, 0);
}
void loop() {
int speedValue = map(smoothRead(JOYSTICK_X), 0, 1023, 80, 255); // 限制最低转速
int angleValue = map(smoothRead(JOYSTICK_Y), 0, 1023, 30, 150); // 限制摆动范围
analogWrite(MOTOR_PWM, speedValue);
windServo.write(angleValue);
delay(20); // 控制刷新率约50Hz
}
通过EEPROM保存常用设置:
arduino复制#include <EEPROM.h>
struct Settings {
int defaultSpeed;
int minAngle;
int maxAngle;
};
void saveSettings() {
Settings cfg = {150, 40, 140};
EEPROM.put(0, cfg);
}
void loadSettings() {
Settings cfg;
EEPROM.get(0, cfg);
}
给3D打印外壳喷哑光漆可以减少塑料感,我用丙烯颜料手绘了温度计图案。实际使用中发现,将装置放在显示器后方约15cm处,可以让气流均匀覆盖上半身。夜间使用时,在电机供电线串联一个5mmLED,既能作为电源指示又营造出氛围光效。