如何手搓一个智能激光逗猫棒
背景
最近家里的猫胖了,所以我就想做个逗猫棒。找了一圈市场上的智能逗猫棒,运行轨迹比较单一,互动性不足。

轨迹单一,活动范围有限

而我希望后续可以结合人工智能+物联网,通过摄像头来捕捉猫的位置,让小猫可以追着这个激光走。
第一个版本
这是刚刚做好的样子,实现了基本的机械结构,使用两个舵机分别控制激光头的照射方向,使用了一块ESP32 Mini来驱动舵机。

舵机的声音和镜片的光点吸引来了这个大胖子:

这个版本有几个问题
- 外壳前面出光的地方没有遮挡,容易暴露里面的元件,舵机动作还会分散小猫的注意力,于是就考虑给它加块玻璃。
- 激光运动存在梯形失真,光投出来之后因为是斜的,所以投在地面上的范围是一个梯形。
- 没有实现交互,还没有办法实现远程控制、按指定轨迹运行。
- 还没有实现智能化的控制,如拍照录像、远程查看宠物状态、远程互动等等。
最后这个问题优先级可以放低点,可以先解决玻璃面板和梯形失真的问题
加块玻璃
用一块红色的透明亚克力给它做个玻璃面板,这个玻璃面板费了老大劲。
首先直接贴,是不行的。
因为直接贴的话镜片会凸出来,要么就是凹了一层会很不好看啊。
第二个方案,是找淘宝的第三方去帮我代加工。
我本来预期可能是几十块钱解决的问题,结果它小小的一个镜片,他要收我180。
第三个方案,是购买雕刻机/铣床。
结果能用的产品,基本要2000块钱,而且体积不小,噪音还很大。
考虑到暂时没有空间,我决定用第四个方案:
动手做一个最简单的版本来解决这个问题。
一个小台钻和一个十字滑台,组成一个简单的铣床,把亚克力板四周铣出一个凹槽,就可以把它嵌入到出光口了。
小台钻现成的很多,买了100多块钱的

十字滑台的话要200多,性价比不高,而且尺寸满足不了要求,所以这个部分,用3D打印机和一些零件做了一个。

这是组装后的样子,压板牺牲了个铁皮扳手

因为是3D打印的原因,滑台的精度不是很高,结构也不是很结实,已经设计了个铝合金的,做好以后再发上来。
成品
这是装上面板后的效果,感觉高级了不少:)

猫咪们可以快乐 的玩耍了

相关文章:
如何手搓一个智能激光逗猫棒
背景 最近家里的猫胖了,所以我就想做个逗猫棒。找了一圈市场上的智能逗猫棒,运行轨迹比较单一,互动性不足。 轨迹单一,活动范围有限 而我希望后续可以结合人工智能物联网,通过摄像头来捕捉猫的位置,让小…...
leetcode LCP 开幕式焰火
LCP 44. 开幕式焰火 - 力扣(LeetCode) 「力扣挑战赛」开幕式开始了,空中绽放了一颗二叉树形的巨型焰火。 给定一棵二叉树 root 代表焰火,节点值表示巨型焰火这一位置的颜色种类。请帮小扣计算巨型焰火有多少种不同的颜色。 示例…...
使用GDI对象绘制UI时需要注意的若干细节问题总结
目录 1、一个bitmap不能同时被选进两个dc中 2、CreateCompatibleDC和CreateCompatibleBitmap要使用同一个dc作为参数 3、不能删除已经被选入DC中的GDI对象 4、使用完的GDI对象,要将之释放掉,否则会导致GDI对象泄漏 5、CreateCompatibleBitmap返回错…...
51单片机(STC89C52RC版本)学习笔记(更新中...)
文章目录 参考资料1. 准备工作1.1 win10配置51单片机开发环境1.1 Ubuntu配置51单片机开发环境问题1:mcs51/8051.h依赖于mcs51/lint.h问题2:提示找不到头文件mcs51/8051.h 2. 认识51单片机2.1 STC89C52单片机2.2 管脚图2.3 原理图2.4 按键抖动2.5 头文件说…...
七:仪表盘安装-controller node
一:工具、环境准备-controller node 二:OpenStack环境准备-controller node 三:安装服务-controller node 四:工具、环境准备-compute node 五:OpenStack环境准备-compute node 六:安装服务-compute node 七…...
C++设计模式之外观模式
动机 下图中左边方案的问题在于组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战。 如何简化外部客户程序和系统间的交互接口?如何将外部客户程序的演化和内部子系统…...
显卡(Graphics Processing Unit,GPU)比特币挖矿
1. 比特币挖矿基本原理 比特币挖矿是通过参与比特币网络的共识机制——工作量证明(Proof of Work, PoW) 来完成的。具体来说,矿工通过不断尝试不同的哈希值,以解决一个难度逐渐增大的数学问题,从而验证交易并获得比特…...
【SARL】单智能体强化学习(Single-Agent Reinforcement Learning)《纲要》
📢本篇文章是博主强化学习(RL)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅…...
CSS 动画效果实现:图片展示与交互
🌈个人主页:前端青山 🔥系列专栏:Css篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来Css篇专栏内容:CSS 动画效果实现:图片展示与交互 前言 在现代网页设计中,动态效果能够显著…...
【机器学习】—Transformers的扩展应用:从NLP到多领域突破
好久不见!喜欢就关注吧~ 云边有个稻草人-CSDN博客 目录 引言 一、Transformer架构解析 (一)、核心组件 (二)、架构图 二、领域扩展:从NLP到更多场景 1. 自然语言处理(NLP) 2…...
Linux权限机制深度解读:系统安全的第一道防线
文章目录 前言‼️一、Linux权限的概念‼️二、Linux权限管理❕2.1 文件访问者的分类(人)❕2.2 文件类型和访问权限(事物属性)✔️1. 文件类型✔️2. 基本权限✔️3. 权限值的表示方法 ❕2.3 文件访问权限的相关设置方法✔️1. ch…...
NineData云原生智能数据管理平台新功能发布|2024年11月版
本月发布 8 项更新,其中重点发布 2 项、功能优化 6 项。 重点发布 数据库 Devops - 数据生成支持多个数据源 NineData 支持在数据库中自动生成符合特定业务场景的随机数据,用于模拟实际生产环境中的数据情况,帮助用户在不使用真实数据的情况…...
Vue中控制组件的挂载位置
在 Vue 中,append-to-body“true” 主要用于一些第三方组件(如 Element UI 或 Ant Design Vue 中的弹出框、下拉菜单等)来控制组件的挂载位置。具体来说,当你设置 append-to-body“true” 时,它会将该组件的 DOM 元素插…...
查看docker容器日志
容器里面的服务运行报错了,要查看容器的日志 要查看 Docker 容器的日志,可以使用 docker logs 命令。以下是一些常见的使用方法: 基本用法 docker logs <container_name_or_id> 查看最近的日志 docker logs --tail 100 <contai…...
Apache Commons工具类库使用整理
文章目录 Apache Commons工具类库分类- commons-lang3字符串工具:StringUtils日期工具:DateUtils数值工具:NumberUtils对象工具:ObjectUtils数组工具:ArrayUtils异常工具:ExceptionUtils枚举工具࿱…...
力扣第89题 格雷编码
题目描述 格雷编码序列是一个二进制数字序列,其中的每两个相邻的数字只有一个二进制位不同。给定一个整数 n,表示格雷编码的位数,要求返回 n 位的格雷编码序列。 示例 1 输入: n 2输出: [0, 1, 3, 2]解释&#x…...
Linux C/C++编程中的多线程编程基本概念
【图书推荐】《Linux C与C一线开发实践(第2版)》_linux c与c一线开发实践pdf-CSDN博客《Linux C与C一线开发实践(第2版)(Linux技术丛书)》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 (jd.com…...
解决Tomcat运行时错误:“Address localhost:1099 is already in use”
目录 背景: 过程: 报错的原因: 解决的方法: 总结: 直接结束Java.exe进程: 使用neststat -aon | findstr 1099 命令: 选择建议: 背景: 准备运行Tomcat服务器调试项目时,程序下…...
C/C++中的调用约定
在C/C编程中,调用约定(calling conventions)是一组指定如何调用函数的规则。主要在你调用代码之外的函数(例如OS API,操作系统应用程序接口)或OS调用你(如WinMain的情况)时起作用。如果编译器不知道正确的调用约定,那么你很可能会遇到非常奇怪…...
微信创建小程序码 - 数量不受限制
获取小程序码:小程序码为圆图,且不受数量限制。 目录 文档 接口地址 请求方式 功能描述 注意事项 获取 scene 值 请求参数 返回参数 对接 请求方法 获取小程序码 调用获取小程序码 总结 文档 接口地址 https://api.weixin.qq.com/wxa/get…...
5步搞定CYBER-VISION零号协议:Anaconda环境搭建与依赖安装
5步搞定CYBER-VISION零号协议:Anaconda环境搭建与依赖安装 1. 为什么选择Anaconda管理AI项目环境 在开始安装CYBER-VISION零号协议前,我们需要先解决一个关键问题:如何避免Python环境混乱。想象你正在装修房子,把所有工具和材料…...
像素剧本圣殿步骤详解:如何导出带角色关系图谱的交互式剧本HTML文档
像素剧本圣殿步骤详解:如何导出带角色关系图谱的交互式剧本HTML文档 1. 工具介绍与环境准备 像素剧本圣殿(Pixel Script Temple)是基于Qwen2.5-14B-Instruct深度微调的专业剧本创作工具。它不仅具备强大的剧本生成能力,还能将创…...
Linux实现简易版Shell的代码详解
一、程序流程分析我们日常使用Bash时,通过输入命令执行相应的操作,比如:那么,Bash是如何进行工作的呢?观察一下,就会发现,首先Bash会打印命令行提示符,包括当前用户、主机名以及路径…...
阿姆智创15.6寸工控一体机厂家,源头智造ODM定制方案,赋能SMT产线及设备场景
阿姆智创15.6寸工业触控工控一体机,以强悍硬件性能、丰富工业接口、稳定系统适配与一站式解决方案,深度服务SMT产线、运动控制、机器视觉等工业场景,为设备厂商与制造企业提供高可靠、可定制、易集成的智能控制终端,助力工业自动化…...
实测挖到宝!这款AI修图工具,开发者/设计师都能直接用
最近刷CSDN,看到很多同行在讨论AI修图工具的实测对比,大多要么操作复杂、要么效果拉胯,直到我偶然刷到椒图AI(官网:https://www.jiaotuai.cn/),用了一周果断分享,不管是日常修图还是…...
折腾光纤模型的手记
comsol仿真-W型光子晶体光纤色散与损耗分析效果展示最近在实验室被导师催着搞光子晶体光纤的仿真,W型结构这种带双包层设计的玩意儿确实有点意思。作为COMSOL萌新,边啃说明书边试错,折腾一周终于把色散曲线和损耗谱给整明白了。先说建模这个重…...
OpenClaw与企业微信/飞书/钉钉深度集成方案
第1章 引言 1.1 OpenClaw简介与定位 OpenClaw是一个现代化的AI Agent运行框架,专为构建企业级智能助手和应用而设计。它采用模块化架构,通过统一的Gateway接口支持多种通信渠道的接入,让AI能力能够无缝融入企业现有的协作生态中。 OpenClaw的核心特性包括: 多渠道统一接…...
Pandas 数据分析:统计每个人吃的蔬菜数量
在数据分析中,Pandas 是一个非常强大且灵活的工具,特别是当我们处理数据表格时。今天,我们将通过一个实际例子来展示如何使用 Pandas 统计每个人的蔬菜消费量。这个例子不仅展示了 Pandas 的基本操作,还深入到数据筛选和聚合的细节。 场景描述 假设我们有这样一个 CSV 文…...
如何0失败部署ChemCrow?从环境配置到功能落地的全景指南
如何0失败部署ChemCrow?从环境配置到功能落地的全景指南 【免费下载链接】chemcrow-public Chemcrow 项目地址: https://gitcode.com/gh_mirrors/ch/chemcrow-public ChemCrow是一款基于Langchain构建的开源化学智能工具包,集成了RDKit化学工具、…...
GB/T 4996-2015 或 ISO 8611-1对实木托盘抗压施加3倍的重量测试
关于实木托盘抗压测试中施加“3倍重量”这个做法,它并非标准中的通用要求,而是一种特定场景下的安全系数验证方法。以下是针对“3倍重量”测试的详细解读和执行建议。“3倍重量”测试的目的与定位在托盘的标准检测中,常规的抗压或堆码测试通常…...
