(原创)天气又转热了,我给她做了个智能小风扇
2026/7/26 18:09:43 网站建设 项目流程

(原创)天气又转热了,我给她做了个智能小风扇

前言:为什么需要智能风扇?夏天来了,气温一天天攀升。女朋友在房间里工作,每次都要手动调节风扇的档位——温度高了要调快,凉快了又要调慢,非常麻烦。更别提晚上睡觉时,她经常忘记关风扇,第二天起来就感冒了。作为一个技术博主,我决定用 Arduino 和传感器做一个智能小风扇,让它能根据环境温度自动调节风速,还能通过手机远程控制。这样一来,她再也不用操心风扇的档位了,真正实现“懒人式”清凉。## 项目概述这个智能风扇的核心功能包括:1.温度自动调节:通过 DHT11 温湿度传感器检测环境温度,自动调整风扇转速(温度越高,风速越快)2.手动控制模式:通过手机 App 或网页端手动设置风速3.定时关机:设定时间到后自动关闭风扇,防止着凉4.节能模式:当温度低于某个阈值时,风扇自动停止## 硬件准备要完成这个项目,你需要以下硬件:- Arduino Uno 开发板 × 1- DHT11 温湿度传感器 × 1- L298N 电机驱动模块 × 1- 12V 直流风扇 × 1- 12V 电源适配器 × 1- 杜邦线和面包板若干- 可选:ESP8266 WiFi 模块(用于远程控制)## 电路连接电路连接其实很简单,主要分为三部分:1. 传感器部分:DHT11 的数据引脚连接到 Arduino 的数字引脚 22. 电机驱动部分:L298N 的 IN1、IN2 控制风扇正反转(这里只用正转),ENA 控制速度3. 供电部分:Arduino 用 USB 供电,L298N 用 12V 电源供电> 注意:不要直接把风扇连接到 Arduino 的引脚上,因为风扇需要的电流较大,会烧坏板子。一定要用电机驱动模块。## 核心代码实现### 1. 基础温度控制代码这是最核心的部分——根据温度自动调节风扇转速。python# 智能风扇基础温度控制代码# 使用 MicroPython 编写,适用于 ESP8266 或 Raspberry Pi Picoimport machineimport dhtimport time# 初始化温湿度传感器(DHT11 连接到 GPIO 2)sensor = dht.DHT11(machine.Pin(2))# 初始化风扇控制引脚(PWM 控制速度)fan_pwm = machine.PWM(machine.Pin(5))fan_pwm.freq(1000) # 设置 PWM 频率为 1kHz# 温度阈值设置TEMP_MIN = 22 # 最低温度阈值(摄氏度),低于此值风扇停止TEMP_MAX = 30 # 最高温度阈值,达到此值风扇全速运转def calculate_speed(temperature): """根据温度计算风扇速度(0-1023)""" if temperature < TEMP_MIN: return 0 # 温度太低,关闭风扇 elif temperature > TEMP_MAX: return 1023 # 温度太高,全速运转 else: # 线性插值:温度在 TEMP_MIN 和 TEMP_MAX 之间 ratio = (temperature - TEMP_MIN) / (TEMP_MAX - TEMP_MIN) return int(ratio * 1023)def main_loop(): """主循环:读取温度并调节风扇""" while True: try: sensor.measure() temp = sensor.temperature() speed = calculate_speed(temp) # 设置风扇速度 fan_pwm.duty(speed) print(f"当前温度: {temp}°C, 风扇速度: {speed}") # 每 2 秒检测一次 time.sleep(2) except OSError as e: print("读取传感器失败,重试中...") time.sleep(1)if __name__ == "__main__": main_loop()这段代码的逻辑很简单:- 每隔 2 秒读取一次温度- 温度低于 22°C 时,风扇不转(节能)- 温度在 22-30°C 之间时,速度线性增加- 温度超过 30°C 时,风扇全速运转### 2. 增加手动控制和定时功能上面的版本只有自动模式,但我们还需要手动控制和定时功能。下面这段代码增加了这两个功能:python# 智能风扇完整版:自动控制 + 手动控制 + 定时功能# 使用 MicroPython 编写import machineimport dhtimport timeimport _thread # 使用多线程处理定时任务# 初始化硬件sensor = dht.DHT11(machine.Pin(2))fan_pwm = machine.PWM(machine.Pin(5))fan_pwm.freq(1000)# 全局变量current_mode = "auto" # 当前模式:auto/manualmanual_speed = 0 # 手动模式下的速度timer_remaining = 0 # 定时剩余时间(秒)fan_running = True # 风扇是否运行def calculate_auto_speed(temperature): """自动模式下的速度计算""" TEMP_MIN = 22 TEMP_MAX = 30 if temperature < TEMP_MIN: return 0 elif temperature > TEMP_MAX: return 1023 else: ratio = (temperature - TEMP_MIN) / (TEMP_MAX - TEMP_MIN) return int(ratio * 1023)def timer_thread(): """定时器线程:每秒检查一次定时时间""" global timer_remaining, fan_running while True: if timer_remaining > 0: timer_remaining -= 1 print(f"定时剩余: {timer_remaining} 秒") if timer_remaining == 0: fan_running = False fan_pwm.duty(0) print("定时结束,风扇已关闭") time.sleep(1)def main_loop(): """主循环:控制风扇运行""" global current_mode, manual_speed, fan_running # 启动定时器线程 _thread.start_new_thread(timer_thread, ()) while True: try: # 读取温度 sensor.measure() temp = sensor.temperature() # 根据模式设置速度 if current_mode == "auto": target_speed = calculate_auto_speed(temp) print(f"自动模式 - 温度: {temp}°C, 目标速度: {target_speed}") else: target_speed = manual_speed print(f"手动模式 - 速度: {manual_speed}") # 如果风扇在运行且未触发定时停止,则设置速度 if fan_running: fan_pwm.duty(target_speed) time.sleep(2) except OSError as e: print("传感器错误,保持当前状态") time.sleep(1)def set_manual_speed(speed): """设置手动模式速度(0-1023)""" global current_mode, manual_speed current_mode = "manual" manual_speed = max(0, min(1023, speed)) print(f"切换到手动模式,速度设置为: {manual_speed}")def set_timer(seconds): """设置定时关机(秒)""" global timer_remaining timer_remaining = seconds print(f"定时器已设置: {seconds} 秒后关机")def switch_to_auto(): """切换回自动模式""" global current_mode current_mode = "auto" print("已切换到自动模式")if __name__ == "__main__": # 示例操作 print("智能风扇启动...") switch_to_auto() # 模拟用户操作(实际中可通过按键或网络接口调用) # 假设用户想设置手动模式,速度为 500,并定时 30 分钟 # set_manual_speed(500) # set_timer(1800) # 30 分钟 = 1800 秒 main_loop()这段代码增加了三个重要功能:-模式切换:通过current_mode变量在自动和手动之间切换-定时关机:使用独立的线程来倒计时,不影响主循环-手动速度设置:用户可以直接指定 0-1023 之间的速度值## 如何扩展到远程控制?如果你想让风扇支持手机控制,可以添加 ESP8266 WiFi 模块。基本思路是:1. 在 Arduino 上运行一个简单的 Web 服务器2. 通过 HTTP GET/POST 请求来设置模式和速度3. 手机浏览器或 App 发送请求即可控制核心代码片段如下(使用 ESP8266):python# 简单的 Web 控制接口import networkimport socketdef start_web_server(): """启动 Web 服务器""" # 连接 WiFi wlan = network.WLAN(network.STA_IF) wlan.active(True) wlan.connect("你的WiFi名称", "密码") # 创建 socket 服务器 addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1] s = socket.socket() s.bind(addr) s.listen(5) while True: conn, addr = s.accept() request = conn.recv(1024) # 解析请求中的命令 if b'/speed?value=500' in request: set_manual_speed(500) elif b'/timer?seconds=1800' in request: set_timer(1800) # 返回控制页面 response = "OK" conn.send(response) conn.close()这样,你只需要在浏览器中输入http://风扇IP地址/speed?value=500就能控制速度了。## 实际使用体验做好之后,我把风扇放在她的书桌上。效果非常棒:-白天工作:温度 26°C 左右,风扇自动中速运转,凉快又不吵-午休时间:她手动设置成低速,并定时 30 分钟,睡着了也不用担心-下午高温:温度升到 30°C 以上,风扇自动全速运转-晚上:温度降下来,风扇自动停止,省电又安静她再也不用频繁调节风扇了,而且再也没有因为忘记关风扇而感冒。## 总结这个智能风扇项目虽然简单,但融合了传感器读取、PWM 控制、多线程处理和网络通信等多个技术点。通过这个项目,你可以学到:1.传感器集成:如何读取 DHT11 的数据并处理异常2.PWM 调速:通过调节占空比来控制直流电机速度3.状态机设计:自动/手动模式的切换逻辑4.多任务处理:使用线程处理定时任务5.网络控制:扩展 WiFi 模块实现远程操作最重要的是,这个项目真正解决了实际生活中的问题——让女朋友在炎热的夏天里能享受智能化的清凉。如果你也想给心爱的人做点什么,不妨从这个小风扇开始吧!记住:技术不仅要酷,更要温暖人心。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询