本项目核心以行空板 M10 为中央控制中枢,整合二哈识图 2 的 AI 视觉感知、温度传感器的环境感知,通过 RGB 灯带实现可视化反馈,形成 “感知 - 判断 - 执行” 的闭环智能陪伴系统。
一、项目背景
该项目的背景既贴合当下人们的情感陪伴需求与养宠现实痛点,又依托于成熟的硬件技术与教育、创客领域的落地需求,是技术适配市场与场景需求的典型创意项目,具体可从社会需求、技术支撑和应用场景三个层面展开:
1、社会需求层面:填补孤独经济下的陪伴缺口与养宠痛点
- 情感陪伴需求激增:当前社会独居人群规模不断扩大,中国独居人口已超 9000 万,同时 Z 世代年轻人面临职场压力、银发群体缺乏日常陪伴等问题,传统家庭结构难以满足所有人的陪伴需求。而 AI 宠物类产品成为 “孤独经济” 的新出口,能为不同人群提供持续的情感回应,该宠物智能陪伴助手正是契合这一需求的轻量化方案。
- 解决传统养宠的现实阻碍:养真实宠物常面临租房限制、照料精力消耗、经济成本高、生病照料难等问题,许多渴望养宠的人因此望而却步。这款智能助手无需繁琐照料,还能通过识别宠物状态提供基础陪伴相关反馈,既满足人们对宠物互动的需求,又规避了传统养宠的诸多麻烦。
- 2、技术支撑层面:硬件与编程技术的成熟降低项目实现门槛
- 核心硬件的适配性与高性能:二哈识图 2 作为新一代 AI 视觉传感器,搭载 6TOPS 算力的芯片,集成内存与存储,支持物体检测等 20 余种预置 AI 模型,还能自定义训练模型,其 200 万像素摄像头和补光灯可保障宠物识别的精准性;而行空板 M10 作为高集成度的 AIoT 开发板,自带屏幕且接口丰富,能无缝对接二哈识图 2 及温度传感器、RGB 灯带等外设,二者搭配可高效实现视觉识别与外设控制的联动。
- 低代码编程降低开发难度:两款硬件均支持 Mind + 图形化编程,无需复杂的手写代码基础。这让创客、学生甚至普通科技爱好者都能快速上手开发,打破了 AI 项目开发的技术壁垒,为该陪伴助手项目的落地提供了编程层面的便利,也契合中小学人工智能通识教育的实践需求。
3、应用场景层面:适配家庭日常与创客教育双重场景
- 家庭日常陪伴的实用化需求:多数宠物主人外出时,难以实时了解家中宠物状态。该项目可通过二哈识图 2 识别宠物是否焦躁、是否处于活动状态,结合温度传感器监测宠物所处环境温度,再通过 RGB 灯带等外设反馈状态,解决主人对宠物居家状态的牵挂问题,是家庭养宠场景的实用补充工具。
- 创客与教育场景的落地需求:当前 STEAM 教育和创客项目愈发重视 AI 与硬件结合的实践。二哈识图 2 与行空板 M10 均已融入中小学人工智能教育课程体系,这款宠物智能陪伴助手项目,能将 AI 视觉识别、外设联动、逻辑编程等知识点融合,成为创客教育中的典型案例,帮助学习者理解嵌入式 AI 与物联网的实际应用,同时也为创意创客项目提供了可参考的硬件搭配与功能实现范式。
二、硬件清单与连接规范
1. 核心硬件清单
| 硬件名称 | 数量 | 规格 / 备注 |
|---|---|---|
| 行空板 M10 | 1 | 自带 2.8 寸屏幕,支持 USB Host、GPIO 引脚输出 |
| 二哈识图 2 | 1 | 内置 200 万像素摄像头,支持自定义 AI 模型训练 |
| DS18B20 温度传感器 | 1 | 数字型,精度 ±0.5℃,单总线通信 |
| WS2812 RGB 灯带 | 1 | 5V 供电,10-20 灯珠(建议防水款) |
| 杜邦线 | 若干 | 公对公 / 公对母,用于传感器 / 灯带接线 |
| 5V/2A 电源适配器 | 1 | 给行空板 + 灯带供电(避免供电不足) |
| USB 数据线 | 2 | Type-C(行空板连电脑)、Micro USB(二哈识图连行空板) |
2. 硬件连接示意图(行空板 M10 引脚)
| 硬件 | 行空板引脚 | 连接说明 |
|---|---|---|
| 二哈识图 2 | USB Host | 直接插行空板 USB Host 口,自动供电 + 串口通信 |
| DS18B20 VCC | 5V | 传感器正极接 5V |
| DS18B20 GND | GND | 传感器负极接 GND |
| DS18B20 数据脚 | D2 | 建议串 1kΩ 上拉电阻(提升稳定性) |
| WS2812 信号脚 | D3 | 灯带 DIN 引脚接 D3 |
| WS2812 VCC | 5V | 灯带正极接 5V(单独供电更佳) |
| WS2812 GND | GND | 灯带负极接 GND |
注意:RGB 灯带若超过 10 灯珠,需单独接 5V 电源,避免行空板供电过载。
三、方案核心目标
- 基础监测:AI 识别宠物(猫 / 狗)类型,实时监测宠物活动区温度,超阈值报警;
- 状态感知:识别宠物 “放松 / 焦躁” 情绪,通过灯带可视化提醒;
- 互动陪伴:识别主人靠近时触发灯带渐变、语音提示等欢迎互动;
- 低门槛实现:全程采用 Mind + 图形化编程,无需手写代码,适配创客 / 学生群体。
二哈识图 2 模型训练(关键!)
| 识别场景 | 模型类型 | 训练 / 配置步骤 |
|---|---|---|
| 宠物类型(猫 / 狗) | 通用 / 自定义 | 方式 1:用内置「动物识别」模型(快速上手);方式 2:上传 20 + 张猫 / 狗图片到二哈识图平台,训练自定义分类模型,烧录到模块; |
| 宠物情绪(放松 / 焦躁) | 自定义 | 标注 “放松(卧躺 / 摇尾)”“焦躁(炸毛 / 踱步)” 图片各 20 + 张,训练情绪分类模型; |
| 主人识别 | 人脸识别 | 录入 1-2 张主人人脸特征到二哈识图平台,训练 “主人 / 陌生人” 分类模型; |
模型烧录:训练完成后,通过平台生成固件,用 USB 线将二哈识图 2 连电脑,按教程烧录模型。
四、程序编写

Python代码
# MindPlus
#
import time
from unihiker import GUI
from pinpong.board import Board
from pinpong.board import DHT11
from pinpong.board import NeoPixel
from pinpong.board import Board,Pin
from pinpong.extension.unihiker import *
from pinpong.board import Board
from dfrobot_huskylensv2 import *
# 变量
WenDu = 0
JianBianZhi = 0
# 自定义函数
def DF_ChongWuShiBie():
huskylens.getResult(ALGORITHM_SELF_LEARNING_CLASSIFICATION)
print("13")
if (huskylens.available(ALGORITHM_SELF_LEARNING_CLASSIFICATION)):
if ((huskylens.getCachedCenterResult(ALGORITHM_SELF_LEARNING_CLASSIFICATION).name if huskylens.getCachedCenterResult(ALGORITHM_SELF_LEARNING_CLASSIFICATION) else -1).find("猫")!=-1):
np1.range_color(0,6,(0,0,255))
elif ((huskylens.getCachedCenterResult(ALGORITHM_SELF_LEARNING_CLASSIFICATION).name if huskylens.getCachedCenterResult(ALGORITHM_SELF_LEARNING_CLASSIFICATION) else -1).find("狗")!=-1):
np1.range_color(0,6,(255,255,0))
else:
np1.clear()
time.sleep(0.5)
def DF_ChongWuQingXuShiBie():
huskylens.getResult(ALGORITHM_SELF_LEARNING_CLASSIFICATION)
print("14")
if (huskylens.available(ALGORITHM_SELF_LEARNING_CLASSIFICATION)):
if ((huskylens.getCachedCenterResult(ALGORITHM_SELF_LEARNING_CLASSIFICATION).name if huskylens.getCachedCenterResult(ALGORITHM_SELF_LEARNING_CLASSIFICATION) else -1).find("放松")!=-1):
np1.range_color(0,6,(0,0,255))
elif ((huskylens.getCachedCenterResult(ALGORITHM_SELF_LEARNING_CLASSIFICATION).name if huskylens.getCachedCenterResult(ALGORITHM_SELF_LEARNING_CLASSIFICATION) else -1).find("焦躁")!=-1):
for index in range(5):
np1.range_color(0,6,(0,0,255))
time.sleep(0.2)
np1.clear()
time.sleep(0.2)
time.sleep(1)
def DF_WenDuJianCeBaoJing():
global WenDu
WenDu = dht1.temp_c()
if (WenDu>30):
print("高温")
np1.range_color(0,6,(255,0,0))
time.sleep(1)
elif (WenDu<15):
print("低温")
np1.range_color(0,6,(0,255,0))
time.sleep(1)
else:
np1.clear()
time.sleep(1)
time.sleep(0.5)
def DF_ZhuRenShiBieYuHuDong():
global JianBianZhi
huskylens.getResult(ALGORITHM_SELF_LEARNING_CLASSIFICATION)
if (huskylens.available(ALGORITHM_SELF_LEARNING_CLASSIFICATION)):
if ((huskylens.getCachedCenterResult(ALGORITHM_SELF_LEARNING_CLASSIFICATION).name if huskylens.getCachedCenterResult(ALGORITHM_SELF_LEARNING_CLASSIFICATION) else -1).find("主人")!=-1):
JianBianZhi = 0
for index in range(255):
np1.range_color(0,6,(JianBianZhi,9,(255 - JianBianZhi)))
JianBianZhi = (JianBianZhi + 1)
time.sleep(0.01)
np1.clear()
time.sleep(1)
# 主程序开始
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
print("11")
huskylens.switchAlgorithm(ALGORITHM_SELF_LEARNING_CLASSIFICATION)
time.sleep(5)
print("12")
dht1 = DHT11(Pin((Pin.P4)))
np1 = NeoPixel(Pin((Pin.P9)), 7)
np1.brightness(128)
np1.brightness(50)
np1.clear()
t1=u_gui.draw_text(text="欢迎登录",x=0,y=0,font_size=20, color="#0000FF")
t2=u_gui.draw_text(text="宠物智能陪伴助手",x=0,y=50,font_size=20, color="#0000FF")
buzzer.play(buzzer.ENTERTAINER,buzzer.Once)
while True:
DF_ChongWuShiBie()
DF_ChongWuQingXuShiBie()
DF_WenDuJianCeBaoJing()
DF_ZhuRenShiBieYuHuDong()
time.sleep(0.5)
总结
本项目实现了更好的情绪检测,可以让宠物主人实时了解宠物的状态,并针对获取到的结果进行调节,便于宠物可以更好的生活。
# MindPlus
#
import time
from unihiker import GUI
from pinpong.board import Board
from pinpong.board import DHT11
from pinpong.board import NeoPixel
from pinpong.board import Board,Pin
from pinpong.extension.unihiker import *
from pinpong.board import Board
from dfrobot_huskylensv2 import *
# 变量
WenDu = 0
JianBianZhi = 0
# 自定义函数
def DF_ChongWuShiBie():
huskylens.getResult(ALGORITHM_SELF_LEARNING_CLASSIFICATION)
print("13")
if (huskylens.available(ALGORITHM_SELF_LEARNING_CLASSIFICATION)):
if ((huskylens.getCachedCenterResult(ALGORITHM_SELF_LEARNING_CLASSIFICATION).name if huskylens.getCachedCenterResult(ALGORITHM_SELF_LEARNING_CLASSIFICATION) else -1).find("猫")!=-1):
np1.range_color(0,6,(0,0,255))
elif ((huskylens.getCachedCenterResult(ALGORITHM_SELF_LEARNING_CLASSIFICATION).name if huskylens.getCachedCenterResult(ALGORITHM_SELF_LEARNING_CLASSIFICATION) else -1).find("狗")!=-1):
np1.range_color(0,6,(255,255,0))
else:
np1.clear()
time.sleep(0.5)
def DF_ChongWuQingXuShiBie():
huskylens.getResult(ALGORITHM_SELF_LEARNING_CLASSIFICATION)
print("14")
if (huskylens.available(ALGORITHM_SELF_LEARNING_CLASSIFICATION)):
if ((huskylens.getCachedCenterResult(ALGORITHM_SELF_LEARNING_CLASSIFICATION).name if huskylens.getCachedCenterResult(ALGORITHM_SELF_LEARNING_CLASSIFICATION) else -1).find("放松")!=-1):
np1.range_color(0,6,(0,0,255))
elif ((huskylens.getCachedCenterResult(ALGORITHM_SELF_LEARNING_CLASSIFICATION).name if huskylens.getCachedCenterResult(ALGORITHM_SELF_LEARNING_CLASSIFICATION) else -1).find("焦躁")!=-1):
for index in range(5):
np1.range_color(0,6,(0,0,255))
time.sleep(0.2)
np1.clear()
time.sleep(0.2)
time.sleep(1)
def DF_WenDuJianCeBaoJing():
global WenDu
WenDu = dht1.temp_c()
if (WenDu>30):
print("高温")
np1.range_color(0,6,(255,0,0))
time.sleep(1)
elif (WenDu<15):
print("低温")
np1.range_color(0,6,(0,255,0))
time.sleep(1)
else:
np1.clear()
time.sleep(1)
time.sleep(0.5)
def DF_ZhuRenShiBieYuHuDong():
global JianBianZhi
huskylens.getResult(ALGORITHM_SELF_LEARNING_CLASSIFICATION)
if (huskylens.available(ALGORITHM_SELF_LEARNING_CLASSIFICATION)):
if ((huskylens.getCachedCenterResult(ALGORITHM_SELF_LEARNING_CLASSIFICATION).name if huskylens.getCachedCenterResult(ALGORITHM_SELF_LEARNING_CLASSIFICATION) else -1).find("主人")!=-1):
JianBianZhi = 0
for index in range(255):
np1.range_color(0,6,(JianBianZhi,9,(255 - JianBianZhi)))
JianBianZhi = (JianBianZhi + 1)
time.sleep(0.01)
np1.clear()
time.sleep(1)
# 主程序开始
u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
print("11")
huskylens.switchAlgorithm(ALGORITHM_SELF_LEARNING_CLASSIFICATION)
time.sleep(5)
print("12")
dht1 = DHT11(Pin((Pin.P4)))
np1 = NeoPixel(Pin((Pin.P9)), 7)
np1.brightness(128)
np1.brightness(50)
np1.clear()
t1=u_gui.draw_text(text="欢迎登录",x=0,y=0,font_size=20, color="#0000FF")
t2=u_gui.draw_text(text="宠物智能陪伴助手",x=0,y=50,font_size=20, color="#0000FF")
buzzer.play(buzzer.ENTERTAINER,buzzer.Once)
while True:
DF_ChongWuShiBie()
DF_ChongWuQingXuShiBie()
DF_WenDuJianCeBaoJing()
DF_ZhuRenShiBieYuHuDong()
time.sleep(0.5)

返回首页
回到顶部



评论