手把手教你制作智能桌宠(小可爱哦!)

本文将引导你亲手制作一款可以运动、变身、聊天的桌面宠物,并提供源代码,让你能够DIY设计专属桌面宠物及智能功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家曾经记忆里的回忆,是不是腾讯企鹅的。它又萌又可爱,如图:

在这里插入图片描述

但是我们多么想制作一款自己的智能宠物啊,今天我们就将带你手把手制作桌宠。最主要的是文末我将给出源代码哦!大家可以DIY设计自己专属的桌面宠物和其智能功能。

其特点之一:
会运动,还会变身:
在这里插入图片描述
在这里插入图片描述
特点之二:
会说话聊天:
在这里插入图片描述
特点之三:
右键多功能性(可语音控制,连接WiFi等,最主要学完这篇文章之后可以自己添加功能):
在这里插入图片描述
代码如下:

class newWindow(QWidget):
    def __init__(self, parent=None):
        super(newWindow, self).__init__(parent)
        self.i = 1
        self.mypix()
        self.move(1750,50)
        self.timer = QTimer()
        self.timer.setInterval(500)
        self.timer.timeout.connect(self.timeChanged)
        self.timer.start()
        self.setWindowFlags(Qt.FramelessWindowHint)  # 去除界面边框
        self.setWindowFlags(Qt.WindowStaysOnTopHint)  
        self.setAttribute(Qt.WA_TranslucentBackground)  # 背景透明
        self.setMouseTracking(False)  # 设置鼠标移动跟踪是否有效
        self.initUI()

def mypix1(self):
            self.update()
            if self.i == 6:#散步
               time.sleep(5)
            elif self.i ==11:#甩膀子
                time.sleep(1)
            elif self.i ==16:#唱歌
                time.sleep(1)
            elif self.i ==21:#拖东西
                time.sleep(1)
            elif self.i ==26:#坐在地上无聊
                time.sleep(1)
            elif self.i ==31:#坐在地上沮丧
                time.sleep(1)
            elif self.i ==36:#爬起来
                time.sleep(1)
            elif self.i ==43:#准备变红
                time.sleep(1)
            elif self.i ==48:#变红
                time.sleep(1)
            elif self.i ==54:#红色状态
                time.sleep(1)
            elif self.i ==56:#返回
                self.i = 1
                time.sleep(2)
            self.mypic = {1: '.\img\shime1.png', 2: '.\img\shime1.png', 3: '.\img\shime1.png', 4: '.\img\shime1.png',5: '.\img\shime1.png',6: '.\img\shime2.png',7: '.\img\shime3.png',8: '.\img\shime2.png',
    9: '.\img\shime3.png' , 10: '.\img\shime3.png',11: '.\img\shime5.png',12: '.\img\shime6.png',13: '.\img\shime5.png',14: '.\img\shime6.png', 15: '.\img\shime6.png',16: '.\img\shime47.png',
    17: '.\img\shime48.png',18: '.\img\shime49.png',19: '.\img\shime50.png',20: '.\img\shime50.png',21: '.\img\shime38.png',22: '.\img\shime39.png',23: '.\img\shime40.png',24: '.\img\shime41.png',
    25: '.\img\shime30.png',26: '.\img\shime31.png',27: '.\img\shime32.png',28: '.\img\shime33.png',29: '.\img\shime33.png',30: '.\img\shime16.png',31: '.\img\shime15.png',32: '.\img\shime16.png' ,
    33: '.\img\shime17.png',34: '.\img\shime18.png',35: '.\img\shime19.png',36: '.\img\shime19.png',37: '.\img\shime19.png',38: '.\img\shime20.png',39: '.\img\shime20.png',40: '.\img\shime21.png' ,
    41: '.\img\shime22.png',42: '.\img\shime26.png',43: '.\img\shime27.png',44: '.\img\shime28.png',45: '.\img\shime29.png',46: '.\img\shime30.png',47: '.\img\shime47.png',48: '.\img\shime46.png',
    49: '.\img\shime45.png',50: '.\img\shime44.png',51: '.\img\shime43.png',52: '.\img\shime42.png',53: '.\img\shime42.png',54: '.\img\shime43.png',55: '.\img\shime42.png',56: '.\img\shime43.png'}
            self.pix = QPixmap(self.mypic[self.i], '0', Qt.AvoidDither | Qt.ThresholdAlphaDither | Qt.ThresholdDither)
            self.resize(self.pix.size())
            self.setMask(self.pix.mask())
            self.dragPosition = None

def mousePressEvent(self, event):  
        QtCore.Qt.NoButton - 0 - 没有按下鼠标键
        QtCore.Qt.LeftButton -1 -按下鼠标左键
        QtCore.Qt.RightButton -2 -按下鼠标右键
        QtCore.Qt.Mion 或 QtCore.Qt.MiddleButton -4 -按下鼠标中键
        nn = event.buttons() 
    def mouseReleaseEvent(self, event):  
        print('鼠标键放开了')
        # 显示不规则图片
    def mypix(self):
         self.update()
self.pix=QPixmap('.\img\shime1.png','0',Qt.AvoidDither|Qt.ThresholdAlphaDither|Qt.ThresholdDither)
         self.resize(self.pix.size())
         self.setMask(self.pix.mask())
def mouseMoveEvent(self, event):  # 鼠标键移动时调用
        ret = self.hasMouseTracking()
        #print('鼠标移动了:%s' % ret)
        x = event.x()  # 返回鼠标相对于窗口的x轴坐标
        y = event.y()  # 返回鼠标相对于窗口的y轴坐标
       # print('鼠标x坐标:%s  ,鼠标y坐标:%s' % (x, y))
        xy = event.pos()
        s = self.mapToGlobal(xy)  # 将窗口坐标转换成屏幕坐标.属于QWidget类的方法;参数类型QPoint
        #print('鼠标x坐标:%s  ,鼠标y坐标:%s' % (s.x(), s.y()))
        self.move(s.x()-75, s.y()-100)
        self.update()
        self.pix = QPixmap('.\img\shime4.png', '0', Qt.AvoidDither | Qt.ThresholdAlphaDither | Qt.ThresholdDither)
        self.resize(self.pix.size())
        self.setMask(self.pix.mask())
        xy1 = event.globalPos()  # 返回鼠标相对于屏幕的坐标。PyQt5.QtCore.QPoint(1096, 37)【用xy1.x()  xy1.y()提取值】
        s1 = self.mapFromGlobal(xy1)  # 将屏幕坐标转换成窗口坐标.属于QWidget类的方法;参数类型QPoint
        # mapToParent(QPoint) - 将窗口坐标转换成父窗口坐标。如果没有父窗口,则相当于mapToGlobal (QPoint)
        # mapFromParent(QPoint) - 将父窗口坐标转换成窗口坐标。如果没有父窗口,则相当于mapFromGlobal(QPoint)
        # mapTo (QWidget, QPoint) - 将窗口坐标转换成 QWidget父窗口坐标
        px = event.globalX()  # 返回相对于屏幕的x坐标
        py = event.globalY()  # 返回相对于屏幕的y坐标
        s = event.windowPos()  # 相对于窗口的坐标(保留一位小数),PyQt5.QtCore.QPointF(481.0, 1.0)【用s.x()  s.y()提取值】
        p = event.screenPos()  # 相对于屏幕的坐标(保留一位小数).PyQt5.QtCore.QPointF(476.0, 49.0)【用p.x()  p.y()提取值】
        t = event.timestamp()  

完整代码,欢迎大家关注我的公众号回复“制作桌宠”
在这里插入图片描述

<think>好的,我现在需要帮助用户寻找与可爱的猫型机器人设计或开发程相关的IT内容。首先,我得分析用户的请求,看看他们具体需要什么。用户提到了“可爱的猫型机器人”,这可能涉及到硬件设计、软件开发,或者是结合两者的项目。另外,用户可能希望找到程,所以需要分步骤的指导资源。 接下来,我要回忆一下之前提供的引用内容。引用[2]提到了Stack-chan机器人,这是一个可爱且适合探索物联网和编程的项目。引用[4]则提到了绪山真寻bot,是基于Nonebot2和go-cqhttp开发的聊天机器人,可能符合“可爱”的需求,但主要是软件方面。引用[3]讨论了ROS/ROS2,这可能与机器人开发框架有关,但需要确认是否有猫型相关的设计。 用户的需求可能包括硬件和软件的结合,比如实体机器人或者虚拟的聊天机器人。需要区分这两个方向。例如,Stack-chan有实体构建,而绪山真寻bot是聊天机器人。可能需要分别推荐这两个方向的资源。 然后,我需要确保推荐的程是中文的,或者有详细的中文文档,因为用户使用中文提问。比如,Stack-chan可能有英文资料,但引用[2]提到的是中文介绍,所以可能社区有中文程支持。另外,Nonebot2和go-cqhttp在国内开发者中比较流行,相关的中文程应该较多。 还要考虑用户的技术水平。如果是初学者,可能需要更基础的程,比如使用现成的框架搭建聊天机器人;如果有硬件经验,可能适合推荐Arduino或ROS相关的项目。例如,Stack-chan涉及3D打印和微控制器,适合喜欢动手的用户。而Nonebot2开发则适合对Python和聊天机器人感兴趣的用户。 另外,需要检查引用中的链接是否有效或相关。引用[4]直接链接到GitHub仓库,用户可以直接访问。引用[2]中的Stack-chan可能需要进一步查找具体程链接,但根据描述,它强调模块化和灵活性,可能适合育或创客项目。 可能还需要补充一些其他资源,比如使用Raspberry Pi或Arduino制作猫耳机器人的程,或者使用Unity/Blender进行3D建模的指南,以增强机器人的可爱元素。不过根据现有引用,可能需要依赖已有的信息,但可以适当建议扩展方向。 最后,组织回答结构,分点列出不同的方案,包括硬件和软件,每个方案提供程或项目链接,并说明特点,帮助用户选择最适合的路径。同时,生成相关问题,引导用户进一步探索,比如硬件选型、软件框架比较等。</think>### 可爱的猫型机器人设计与开发程推荐 #### 1. **Stack-chan:开源物联网猫型机器人** - **特点**:基于ESP32微控制器,支持3D打印外壳,具备表情反馈和物联网交互功能。 - **程资源**: - 官方GitHub仓库提供硬件搭建指南与代码示例,涵盖传感器集成(如陀螺仪)和无线通信模块[^2]。 - 社区分享的《从零搭建Stack-chan》程,包含3D模型修改与Arduino编程步骤。 - **适用场景**:适合学习嵌入式开发、物联网应用及硬件-软件协同设计。 #### 2. **Nonebot2 + go-cqHttp:QQ猫娘聊天机器人** - **特点**:基于Python的异步框架Nonebot2,结合go-cqhttp协议实现高互动性对话。 - **程资源**: - 绪山真寻Bot的GitHub仓库(引用[4])提供完整配置文档,支持插件扩展和数据库管理。 - B站UP主“机器人开发入门”系列视频,手把手学搭建猫娘AI对话逻辑。 - **适用场景**:适合开发虚拟物、社群管理助手或结合NLP技术的智能交互应用。 #### 3. **ROS/ROS2机器人操作系统:模块化开发** - **特点**:引用[3]提到的模块化架构,可用于设计仿生猫机器人运动控制与SLAM导航。 - **程资源**: - 《ROS机器人开发实践》第8章“仿生机器人建模”,使用URDF描述猫型机械结构。 - Gazebo仿真平台程,模拟猫机器人步态与环境感知。 - **适用场景**:学术研究或复杂行为机器人开发,需Linux基础。 #### 4. **Tinkercad + Arduino:快速原型设计** - **简易方案**:通过Tinkercad在线模拟器设计猫耳反应装置,例如: ```arduino void setup() { pinMode(8, INPUT); //触摸传感器 pinMode(3, OUTPUT); //舵机控制猫耳 } void loop() { if(digitalRead(8)) analogWrite(3, 90); //触摸时猫耳竖起 else analogWrite(3, 0); } ``` - **程**:DFRobot《Arduino互动猫耳发箍制作指南》。 ---
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI看世界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值