# Micropython開發板DIY智能溫控小風扇的方法
## 一、項目概述
在物聯網和智能家居的背景下,利用Micropython開發板制作一個能根據環境溫度自動調節轉速的智能溫控小風扇,既有趣又實用。本項目適合初學者學習傳感器數據采集、PWM控制和自動化邏輯的實現。
## 二、所需材料清單
| 組件名稱 | 數量 | 備注 |
|-------------------|------|-------------------------------|
| Micropython開發板 | 1 | ESP32/ESP8266等支持Micropython的板卡 |
| 溫度傳感器 | 1 | DS18B20或DHT11 |
| 直流電機風扇 | 1 | 5V供電 |
| 三極管/電機驅動 | 1 | 如L9110S模塊 |
| 電阻 | 若干 | 根據傳感器需求配置 |
| 面包板及杜邦線 | 1套 | 用于原型搭建 |
| USB數據線 | 1 | 供電及程序下載 |
## 三、硬件連接方法
### 1. 溫度傳感器連接(以DS18B20為例)
DS18B20引腳說明: - 紅線:VCC(3.3V) - 黃線:DATA → GPIO12 - 黑線:GND
需在DATA腳與VCC間加4.7KΩ上拉電阻
### 2. 風扇驅動電路
L9110S模塊連接: - VCC → 5V - GND → GND - INA → GPIO14(PWM控制引腳) - INB → GND(單方向控制)
## 四、Micropython代碼實現
### 1. 初始化設置
```python
from machine import Pin, PWM
import onewire, ds18b20, time
# 初始化DS18B20
ow = onewire.OneWire(Pin(12))
ds = ds18b20.DS18B20(ow)
roms = ds.scan()
# 初始化PWM
fan_pwm = PWM(Pin(14), freq=1000, duty=0)
def read_temp():
ds.convert_temp()
time.sleep_ms(750)
return ds.read_temp(roms[0])
# 溫度-轉速映射表(示例)
temp_ranges = {
(0, 25): 0, # 低于25℃不轉動
(25, 28): 512, # 25-28℃ 50%轉速
(28, 32): 768, # 28-32℃ 75%轉速
(32, 100): 1023 # >32℃ 全速運轉
}
def control_fan(temp):
for range_, duty in temp_ranges.items():
if range_[0] <= temp < range_[1]:
fan_pwm.duty(duty)
break
while True:
current_temp = read_temp()
print("當前溫度: {:.1f}°C".format(current_temp))
control_fan(current_temp)
time.sleep(5) # 每5秒檢測一次
CALIBRATION = -1.5 # 校準值
def read_calibrated_temp():
return read_temp() + CALIBRATION
from machine import ADC
pot = ADC(Pin(34)) # 接電位器
pot.atten(ADC.ATTN_11DB)
def manual_mode():
while True:
speed = pot.read() // 4 # 10bit轉8bit
fan_pwm.duty(speed)
from ssd1306 import SSD1306_I2C
i2c = I2C(scl=Pin(22), sda=Pin(21))
oled = SSD1306_I2C(128, 64, i2c)
def display_temp(temp):
oled.fill(0)
oled.text("Temp: {:.1f}C".format(temp), 0, 0)
oled.show()
def smooth_temp(temp): temp_history.append(temp) if len(temp_history) > 5: temp_history.pop(0) return sum(temp_history)/len(temp_history)
2. **風扇不轉動**
- 檢查PWM頻率是否合適(建議500-2000Hz)
- 測量電機驅動模塊輸出端電壓
3. **Micropython內存不足**
- 使用`gc.collect()`定期回收內存
- 優化代碼結構減少變量使用
## 七、項目擴展思路
1. **增加網絡功能**
- 通過MQTT上報溫度數據
- 添加Web控制界面
2. **多風扇協同控制**
- 使用多個PWM通道
- 實現區域溫差控制
3. **能耗優化**
- 加入光敏傳感器實現夜間自動關閉
- 設置溫度遲滯范圍防止頻繁啟停
## 結語
通過本項目,我們不僅實現了一個實用的溫控風扇,更掌握了Micropython開發的基本流程。建議嘗試將系統封裝為3D打印外殼,最終成品既可作為桌面實用工具,也是展示創客能力的優秀作品。
> 注意事項:操作電子元件時注意防靜電,大功率電機建議外接電源,避免開發板過載。
該文檔采用標準Markdown格式,包含: 1. 分級標題結構 2. 硬件清單表格 3. 多段代碼塊(標注語言類型) 4. 有序/無序列表 5. 注意事項提示框 6. 關鍵引腳說明圖表 實際字數約1500字,可根據需要調整代碼示例的詳細程度。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。