回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

二哈识图 2 + 行空板 M10 宠物智能陪伴助手 简单

头像 芯动大师 2025.12.08 6 0

本项目核心以行空板 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. 核心硬件清单

硬件名称数量规格 / 备注
行空板 M101自带 2.8 寸屏幕,支持 USB Host、GPIO 引脚输出
二哈识图 21内置 200 万像素摄像头,支持自定义 AI 模型训练
DS18B20 温度传感器1数字型,精度 ±0.5℃,单总线通信
WS2812 RGB 灯带15V 供电,10-20 灯珠(建议防水款)
杜邦线若干公对公 / 公对母,用于传感器 / 灯带接线
5V/2A 电源适配器1给行空板 + 灯带供电(避免供电不足)
USB 数据线2Type-C(行空板连电脑)、Micro USB(二哈识图连行空板)

2. 硬件连接示意图(行空板 M10 引脚)

硬件行空板引脚连接说明
二哈识图 2USB Host直接插行空板 USB Host 口,自动供电 + 串口通信
DS18B20 VCC5V传感器正极接 5V
DS18B20 GNDGND传感器负极接 GND
DS18B20 数据脚D2建议串 1kΩ 上拉电阻(提升稳定性)
WS2812 信号脚D3灯带 DIN 引脚接 D3
WS2812 VCC5V灯带正极接 5V(单独供电更佳)
WS2812 GNDGND灯带负极接 GND

注意:RGB 灯带若超过 10 灯珠,需单独接 5V 电源,避免行空板供电过载。

 

三、方案核心目标

  1. 基础监测:AI 识别宠物(猫 / 狗)类型,实时监测宠物活动区温度,超阈值报警;
  2. 状态感知:识别宠物 “放松 / 焦躁” 情绪,通过灯带可视化提醒;
  3. 互动陪伴:识别主人靠近时触发灯带渐变、语音提示等欢迎互动;
  4. 低门槛实现:全程采用 Mind + 图形化编程,无需手写代码,适配创客 / 学生群体。

 

二哈识图 2 模型训练(关键!)

识别场景模型类型训练 / 配置步骤
宠物类型(猫 / 狗)通用 / 自定义方式 1:用内置「动物识别」模型(快速上手);方式 2:上传 20 + 张猫 / 狗图片到二哈识图平台,训练自定义分类模型,烧录到模块;
宠物情绪(放松 / 焦躁)自定义标注 “放松(卧躺 / 摇尾)”“焦躁(炸毛 / 踱步)” 图片各 20 + 张,训练情绪分类模型;
主人识别人脸识别录入 1-2 张主人人脸特征到二哈识图平台,训练 “主人 / 陌生人” 分类模型;

模型烧录:训练完成后,通过平台生成固件,用 USB 线将二哈识图 2 连电脑,按教程烧录模型。

 

四、程序编写

screenshot-宠物智能陪伴助手-1765647931635.png

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)

评论

user-avatar