电子萌新的第一个“活”项目:用Arduino+DS18B20,花50块自制智能鱼缸温控器(附代码与接线图)
电子萌新的第一个“活”项目:用Arduino+DS18B20,花50块自制智能鱼缸温控器(附代码与接线图)
养鱼爱好者都知道,水温稳定是鱼类健康的关键。市面上的成品温控器动辄几百元,而今天我们要用50元预算和一块Arduino开发板,打造一个会自主思考的鱼缸温控系统。这个项目特别适合刚接触硬件的编程爱好者——不需要电路基础,只要会插线就能完成。
1. 硬件清单与成本控制
我们先来算一笔经济账。整套系统核心部件只有4个:
| 元器件 | 型号 | 单价(元) | 采购平台 |
|---|---|---|---|
| 主控板 | Arduino Nano | 12.8 | 淘宝/拼多多 |
| 温度传感器 | DS18B20防水款 | 5.9 | 华强北商城 |
| 继电器模块 | 5V单路光耦隔离 | 3.5 | 立创商城 |
| 加热棒 | 50W不锈钢 | 18.0 | 本地水族店 |
| 合计 | 40.2 |
注:实际花费可能更低,很多元件可以复用其他项目剩余材料
DS18B20这个传感器堪称电子界的瑞士军刀:
- 防水封装可直接浸入鱼缸
- ±0.5℃精度远超普通NTC热敏电阻
- 单总线协议只需一根数据线连接
- 原生支持Arduino有现成库文件
2. 开发环境闪电搭建
别被"开发环境"这个词吓到,整个过程比安装手机APP还简单:
- 下载Arduino IDE(官方完全免费)
# Windows用户直接运行安装包 # Mac用户拖拽到Applications文件夹 - 插入Arduino Nano,设备管理器中确认COM端口号
- 安装DS18B20的库文件:
工具 -> 管理库 -> 搜索"OneWire"和"DallasTemperature" -> 安装
提示:如果遇到驱动问题,CH340芯片的板子需要单独安装驱动,卖家通常提供下载链接。
3. 电路连接:乐高式接线法
所有连接都采用防呆设计,根本不可能接错:
[DS18B20] [Arduino Nano] VCC --------- 5V GND --------- GND DATA ------- D2 (需接4.7K上拉电阻) [继电器] [加热棒] VCC --------- 5V GND --------- GND IN ---------- D3 COM --------- 火线 NO ---------- 加热棒实际接线时建议使用面包板过渡测试,正式使用时可以用热熔胶固定接头防水
4. 代码解析:智能温控逻辑
核心代码不到30行,但实现了完整的PID控制思想:
#include <OneWire.h> #include <DallasTemperature.h> #define RELAY_PIN 3 #define TEMP_PIN 2 OneWire oneWire(TEMP_PIN); DallasTemperature sensors(&oneWire); float targetTemp = 26.0; // 设置目标温度 void setup() { pinMode(RELAY_PIN, OUTPUT); sensors.begin(); Serial.begin(9600); } void loop() { sensors.requestTemperatures(); float currentTemp = sensors.getTempCByIndex(0); Serial.print("当前水温: "); Serial.print(currentTemp); Serial.println("°C"); if(currentTemp < targetTemp - 0.5) { // 0.5℃回差防止频繁开关 digitalWrite(RELAY_PIN, HIGH); Serial.println("加热棒启动"); } else if(currentTemp > targetTemp) { digitalWrite(RELAY_PIN, LOW); Serial.println("加热棒关闭"); } delay(5000); // 每5秒检测一次 }进阶技巧:在setup()函数里添加这段代码,可实现开机自检:
for(int i=0; i<3; i++) { digitalWrite(RELAY_PIN, HIGH); delay(200); digitalWrite(RELAY_PIN, LOW); delay(200); }5. 系统优化与扩展可能
基础版已经能用,但还有更多玩法值得尝试:
- OLED显示模块(+8元):实时显示水温曲线
#include <U8g2lib.h> U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0); - 手机监控(+0元):利用旧安卓手机+串口蓝牙模块
- 双重保护:在代码中加入超温报警
if(currentTemp > 32.0) { while(1) { // 死循环报警 digitalWrite(BUZZER_PIN, HIGH); delay(500); digitalWrite(BUZZER_PIN, LOW); delay(500); } }
我的热带鱼缸运行这个系统三个月后,温度波动始终保持在±0.8℃以内。最惊喜的是某天加热棒故障,系统通过串口日志及时发现了异常——这比普通温控器只能被动响应高明多了。
