若该文为原创文章,转载请注明原文出处。
一、引言
(一)研究背景及意义
变色龙作为一种对环境变化极度敏感的奇特宠物,其饲养难度远高于普通宠物。其对温度、湿度、光照、饮水及食物的要求极为苛刻,传统的人工饲养方式难以提供持续稳定且精准的照料,极易导致变色龙出现应激、拒食、脱水等健康问题,甚至死亡。变色龙的体色变化是其健康状况和环境适应性的“晴雨表”,但普通人难以准确解读。因此,开发一套集自动喂食、智能补水、环境监测与体色状态解析于一体的智能化养殖系统,具有重要的应用价值。本项目基于STM32单片机,通过传感器实时监控养殖环境,并创新性地引入颜色传感器解读变色龙的情绪与状态,通过蓝牙与手机App交互,旨在为变色龙提供一个稳定、安全、智能的生存环境,极大降低饲养难度,提升饲养乐趣和成功率。
(二)国内外研究现状
目前,智能宠物饲养设备多集中于猫、狗、鱼等常见宠物,如智能喂食器、智能鱼缸。针对爬行动物,尤其是变色龙这类对环境有特殊要求的物种,专业化、智能化的养殖设备几乎处于市场空白。现有研究大多集中于大型农场的环境监控,或功能单一的温湿度控制器。将精准定时喂食、水位自动维持与基于颜色的生物反馈相结合,并用于变色龙养殖,是一项创新性的探索。本研究旨在填补这一空白,提供一个高度定制化、自动化的智能养殖解决方案。
二、系统总体设计
(一)系统架构
本系统采用“环境感知-状态解读-智能执行-人工交互”的闭环控制架构。
-
感知层:由DS1302、水位传感器、颜色传感器(如TCS34725)组成,负责采集时间、水位和变色龙体色数据。
-
决策层:STM32主控制器,是系统的核心大脑。它处理传感器数据,运行核心逻辑(如定时判断、颜色解析),并生成控制指令。
-
执行层:包括步进电机(模拟喂食)、水泵(加水)、加湿器(增湿)、蜂鸣器(报警),负责完成具体的物理操作。
-
交互层:包括OLED显示屏、按键和蓝牙模块(如HC-05/HC-08),实现本地设置、状态显示以及与手机App的无线数据交互和控制。
(二)功能模块划分
-
定时与喂食模块:DS1302计时 + 步进电机执行。
-
供水模块:水位传感器 + 水泵。
-
状态监测与调节模块:颜色传感器 + 蜂鸣器 + 加湿器。
-
人机交互模块:OLED显示屏 + 按键。
-
通信模块:蓝牙模块。
三、硬件设计与实现
(一)系统硬件框架图
-
STM32F103C8T6 (主控核心)
-
DS1302时钟模块:RST接
PA4
, DAT接PA5
, CLK接PA6
-
水位传感器(数字):DO引脚接
PA0
-
TCS34725颜色传感器(I2C):SCL接
PB6
, SDA接PB7
-
ULN2003驱动板 & 28BYJ-48步进电机(喂食):IN1-IN4接
PB8
,PB9
,PB10
,PB11
-
继电器模块 x 2:分别接
PC13
(水泵)、PC14
(加湿器) -
蜂鸣器(有源):接
PA8
-
OLED (SSD1306) : I2C接口,与颜色传感器共享I2C总线(地址不同)
-
按键 x 4:设置、加、减、确认/喂食 接至
PA1
,PA2
,PA3
,PA15
-
HC-05蓝牙模块:接USART2
PA2
(TX),PA3
(RX)
(二)主控模块选型及介绍
主控芯片选用STM32F103C8T6。其丰富的外设资源完美匹配本项目:
-
多个GPIO:用于连接DS1302(模拟三线时序)、驱动继电器、蜂鸣器和按键。
-
I2C接口:同时挂载颜色传感器TCS34725和OLED显示屏,节省引脚。
-
UART接口:用于与蓝牙模块进行双向通信。
-
充足的IO:用于控制步进电机驱动板的4个输入信号。
(三)传感器模块选型及电路设计
-
DS1302时钟模块:提供精准的实时时钟,保证定时喂食的准确性。即使系统断电,靠后备电池也能继续走时。
-
水位传感器:选用数字输出型模块,当液位低于探头时,DO输出高电平;反之输出低电平。直接与STM32 GPIO连接。
-
颜色传感器TCS34725:一款高性能RGB颜色光数字转换器,可获取精确的R(红)、G(绿)、B(蓝)三原色值。通过I2C接口与STM通信,是解读变色龙体色的关键。
(四)通信模块选型及配置
选用HC-05主从一体蓝牙串口模块。配置流程简单:
-
进入AT命令模式(KEY引脚拉高),通过USB转TTL模块配置其参数(如名称、配对码)。
-
在正常工作中,STM32通过串口将数据以特定格式发送给HC-05,HC-05即将其无线传输至已连接的手机App。反之,App发送的指令也通过串口传递给STM32。无需复杂的网络协议,简单易用。
(五)执行模块选型及驱动电路
-
步进电机:选用28BYJ-48(5V减速步进电机)模拟喂食器的旋转撒食动作。通过ULN2003驱动板进行驱动。
-
水泵与加湿器:均为220V设备,安全第一! 必须使用继电器模块进行隔离控制。STM32 GPIO输出低电平控制继电器吸合,从而接通水泵/加湿器的电源。
-
蜂鸣器:有源蜂鸣器,通过一个NPN三极管驱动,基极串联电阻后接STM32的PA8引脚。
(六)显示模块选型及接口电路
选用0.96寸I2C接口的OLED显示屏,用于显示当前时间、设定的喂食时间、水位状态、当前检测到的RGB颜色值及解读出的状态(稳定/不稳定/干燥)。
(七)电源模块设计
系统包含数字电路和继电器负载,采用双路隔离供电最为安全:
-
一路5V电源:经AMS1117-3.3稳压后,为STM32、传感器、OLED、蓝牙模块供电。
-
另一路5V电源:专门为ULN2003驱动板(步进电机)和继电器线圈供电。
-
强烈警告:继电器输出侧控制的220V水泵和加湿器,必须与所有低压电路完全物理隔离,接线处做好绝缘,防止触电。
四、软件设计与实现
1. 定时喂食功能 (核心):
-
利用DS1302获取精确时间。
-
用户通过按键或APP设置每日喂食时间点(如08:00, 18:00)。
-
当系统时间与预设时间匹配时,STM32控制步进电机旋转特定角度,推动喂食器工作,完成投食。
-
APP或按键手动控制:随时发送指令触发上述动作。
2. 自动供水功能:
-
STM32通过ADC读取水位传感器的值。
-
设定一个低水位阈值。
-
当水位低于阈值时,STM32启动水泵抽水;当水位上升到安全高度后,自动关闭水泵。
3. 颜色分析与智能控制 (核心与创新点):
-
颜色识别: STM32控制TCS3200传感器,分别读取红色(R)、绿色(G)、蓝色(B)分量的频率值。
-
逻辑判断:
-
红色主导 (情绪不稳定):
if (R > G && R > B && R > Red_Threshold)
-> 触发蜂鸣器报警,提醒主人关注。 -
绿色主导 (情绪稳定):
if (G > R && G > B)
-> 系统状态正常,无需操作。 -
蓝色主导 (环境干燥):
if (B > R && B > G && B > Blue_Threshold)
-> STM32自动启动加湿器,直到蓝色强度降至阈值以下。
-
-
阈值校准: 需要针对实际养殖环境和变色龙种类进行RGB阈值的实验和校准。
4. 蓝牙通信与APP功能:
-
HC-05与STM32通过串口通信,使用自定义的简单协议。
-
STM32 -> APP (上报数据): 以字符串或JSON格式持续发送时间、水位状态、当前RGB值、解读出的颜色状态(“稳定”、“不稳定”、“干燥”)。
-
APP -> STM32 (发送指令): APP可发送指令,如:
-
FEED_NOW
: 立即喂食 -
SET_TIME:12:30:00
: 设置时间 -
SET_FEED:08:00
: 设置喂食时间点
-
5. 按键功能:
-
用于本地设置DS1302的当前时间。
-
设置每日喂食的时间点。
-
手动强制喂食、开启/关闭水泵、开启/关闭加湿器。
系统软件流程图
(三)系统初始化(代码片段)
// main.c
#include "ds1302.h"
#include "tcs34725.h"
#include "stepper.h"
#include "ssd1306.h"
#include "bluetooth.h"
I2C_HandleTypeDef hi2c1;
UART_HandleTypeDef huart2; // For Bluetooth
int main(void) {
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_I2C1_Init();
MX_USART2_UART_Init();
OLED_Init();
DS1302_Init();
TCS34725_Init();
STEPPER_Init();
// Load feeding time from EEPROM
target_hour = ...;
target_minute = ...;
while (1) {
Main_Task();
HAL_Delay(1000); // 主循环周期1秒
}
}
(四)传感器数据采集与处理(代码片段)
void Sensor_ReadTask(void) {
// 1. 读取DS1302时间
DS1302_GetTime(¤t_hour, ¤t_minute, ¤t_second);
// 2. 读取水位传感器 (数字输入)
water_low = (HAL_GPIO_ReadPin(WATER_GPIO_Port, WATER_Pin) == GPIO_PIN_SET);
// 3. 读取颜色传感器
TCS34725_GetRawData(&r, &g, &b, &c); // c是 Clear通道值
// 计算归一化的RGB值,消除光照强度影响
float sum = r + g + b;
r_norm = r / sum;
g_norm = g / sum;
b_norm = b / sum;
}
(五)控制功能实现(代码片段)
void Control_Task(void) {
// 1. 水位控制 (优先级高)
if (water_low) {
HAL_GPIO_WritePin(PUMP_RELAY_GPIO_Port, PUMP_RELAY_Pin, GPIO_PIN_RESET); // 继电器ON
} else {
HAL_GPIO_WritePin(PUMP_RELAY_GPIO_Port, PUMP_RELAY_Pin, GPIO_PIN_SET); // 继电器OFF
}
// 2. 颜色状态解析与控制
if (r_norm > 0.5 && r_norm > g_norm && r_norm > b_norm) { // 红色主导
// 情绪不稳定
Buzz_Enable(1); // 蜂鸣器报警
current_status = STATUS_STRESSED;
} else if (g_norm > 0.5 && g_norm > r_norm && g_norm > b_norm) { // 绿色主导
// 情绪稳定
Buzz_Enable(0);
current_status = STATUS_NORMAL;
} else if (b_norm > 0.4 && b_norm > r_norm) { // 蓝色主导 (阈值需实验校准)
// 环境干燥
HAL_GPIO_WritePin(HUMIDIFIER_RELAY_GPIO_Port, HUMIDIFIER_RELAY_Pin, GPIO_PIN_RESET); // 加湿器ON
current_status = STATUS_DRY;
} else {
// 其他颜色或不确定状态
Buzz_Enable(0);
HAL_GPIO_WritePin(HUMIDIFIER_RELAY_GPIO_Port, HUMIDIFIER_RELAY_Pin, GPIO_PIN_SET); // 加湿器OFF
current_status = STATUS_UNKNOWN;
}
// 3. 定时喂食
if (current_hour == target_hour && current_minute == target_minute && current_second == 0) {
Feed_Once(); // 执行一次喂食动作
}
}
// 喂食函数
void Feed_Once(void) {
STEPPER_Move(512, 1); // 步进电机正转一定角度,投下食物
HAL_Delay(1000);
// 可以正反转几次模拟撒食动作
Bluetooth_Send("Feeding completed."); // 通过蓝牙发送喂食完成通知
}
(六)远程控制功能实现(代码片段)
// 蓝牙数据发送函数
void Bluetooth_SendStatus(void) {
char buffer[64];
sprintf(buffer, "T:%02d:%02d,S:%d,R:%d,G:%d,B:%d", current_hour, current_minute, current_status, (int)(r_norm*100), (int)(g_norm*100), (int)(b_norm*100));
HAL_UART_Transmit(&huart2, (uint8_t*)buffer, strlen(buffer), 100);
}
// 蓝牙数据接收解析 (在串口中断回调函数中处理)
void USART2_IRQHandler(void) {
HAL_UART_IRQHandler(&huart2);
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
if (huart == &huart2) {
if (strstr(bluetooth_rx_buffer, "FEED")) {
Feed_Once(); // App发送"FEED"指令,手动喂食
} else if (strstr(bluetooth_rx_buffer, "SET_TIME")) {
// 解析指令中的时间参数并设置DS1302, 如 "SET_TIME 14:30"
sscanf(bluetooth_rx_buffer, "SET_TIME %d:%d", &new_hour, &new_minute);
DS1302_SetTime(new_hour, new_minute, 0);
} // ... 其他指令
}
}
五、系统测试与优化
(一)测试方案
-
功能测试:
-
喂食测试:设置不同的喂食时间,测试步进电机是否准时、准确动作。
-
水位控制测试:将水位传感器从水中拿出再放入,测试水泵自动启停。
-
颜色解析测试:使用不同颜色的色卡或物体模拟变色龙,测试系统是否能正确解析RGB并触发相应动作(蜂鸣器、加湿器)。
-
-
可靠性测试:连续运行72小时,观察系统是否稳定,有无误动作。
-
用户体验测试:测试蓝牙连接稳定性,App指令发送与接收是否及时可靠。
(二)测试结果与分析
预计测试结果:核心功能均可实现。测试难点与关键点在于:
-
颜色识别的准确性:环境光照会严重影响RGB原始值,必须采用归一化算法,并在实际饲养环境中进行大量测试和校准,以确定不同状态下的RGB阈值。
-
机械结构的可靠性:喂食机构的出食量需要精确设计,防止卡死或出食不均。
-
防误触发:喂食判断需加上“一天只触发一次”的逻辑,防止在临界时间点反复触发。
(三)系统优化
-
光照补偿:颜色识别算法需持续优化,可采用更先进的白平衡算法或机器学习模型进行模式识别,提高状态判断的准确率。
-
历史数据记录:在App端记录颜色变化、喂食时间、加湿时长等数据,绘制趋势图,帮助饲养者更好地了解宠物状态。
-
多参数融合决策:结合温湿度传感器数据,与颜色判断结果进行交叉验证,使系统决策更智能(例如,蓝色且湿度低才启动加湿)。
-
低功耗设计:如果采用电池供电,需优化系统,在无操作时进入休眠模式,由定时器或外部中断唤醒。
六、结论与展望
(一)未来展望
-
图像识别升级:将颜色传感器升级为微型摄像头,通过CNN卷积神经网络图像识别算法,不仅能识别颜色,还能识别变色龙的姿态、体型丰满度,更全面地评估其健康状况。
-
环境参数扩展:增加温湿度、UVB紫外线强度监测,自动控制加热灯、UVB灯的开关,实现全环境闭环控制。
-
Web端管理平台:开发Web后台,通过Wi-Fi而非蓝牙连接,实现远程、多用户、多设备的集中化管理。
-
社群化App:开发功能丰富的App,集成饲养知识库、异常报警推送、饲养经验分享社群等功能,构建爬宠饲养爱好者社区。
如有侵权,或需要完整代码,请及时联系博主。