用ASR PRO离线语音芯片和月饼盒做一个会跑会跳会说话的机器狗

中秋节刚过,大家月饼盒应该还有,不要扔,可以做点小玩意。

机器狗的创意来自B站石桥北的视频,他使用了一块ESP32芯片和打印件加四个舵机实现,应该说是比较复杂的,需要有3D打印机打印外壳,还得会手机编程,有一定的专业度。

我这个简略版核心部件一块ASR芯片+4个舵机,四个舵机就是四条腿,ASR芯片本身带离线对话功能,自己设计一下对话控制舵机就好了。如果要增加趣问性,可以加一块OLED屏幕显示一些操作指令和绘制一些表情,

如上图,asrpro芯片包含六个舵机引脚pwm0到pwm5,我们只使用了四个,剩下两个有兴趣的还可以加上个尾巴和头,或者加上红外,温湿度传感器之类,oled屏将会占去两个,其他引脚就看大家发挥了。

最好是方形的盒子,这样好定位,贴着盒子底部,在盒子两侧一边挖两个方形的洞,如上图,正好可以把舵露出来舵机头为好,口的大小以能卡住固定镙丝的地方为宜。可以先使用纸片沿着舵机屁股裁一块相同大小的纸片,然后用这个纸片在盒子上比划出大小,然后使用美工刀挖出来。易拉罐应该也可以的,不过要使用胶带包一下,防止划破手,如下:

最终如下,:

接线:

PA2,PA3,PA5,PA6初始化为四个舵机,

PA0和PA1初始化为OLED屏。

完整的代码和图:

#define ASC2_12#include "asr.h"
extern "C"{ void * __dso_handle = 0 ;}
#include "setup.h"
#include "myLib/asr_event.h"
#include "myLib/asr_ssd1306.h"
#include "myLib/asr_servo.h"uint32_t snid;
Servo servo_3;
Servo servo_2;
Servo servo_5;
Servo servo_6;
void ASR_CODE();//{speak:程程-标准男童,vol:10,speed:10,platform:haohaodada}
//{playid:10001,voice:汪汪汪,用旺旺唤醒我。}
//{playid:10002,voice:我去玩了,用旺旺唤醒我}SSD1306 ssd1306(128,64,0,1);
/*描述该功能...
*/
void ASR_CODE(){switch (snid) {case 0:ssd1306.clear((0));ssd1306.set_cursor(0,0);ssd1306.draw_hanzi_12("有什么事请吩咐");ssd1306.fill_circle(86,44,10,(1));ssd1306.fill_circle(40,44,10,(1));ssd1306.display();break;case 1:ssd1306.clear((0));ssd1306.set_cursor(0,0);ssd1306.draw_hanzi_12("打开灯光");ssd1306.display();break;case 2:ssd1306.clear((0));ssd1306.set_cursor(0,0);ssd1306.draw_hanzi_12("关闭灯光");ssd1306.display();break;case 3:ssd1306.clear((0));ssd1306.draw_rectangle(44,22,84,42,(1));ssd1306.display();break;case 4:ssd1306.clear((0));ssd1306.draw_circle(64,32,20,(1));ssd1306.display();break;case 5:ssd1306.clear((0));ssd1306.fill_circle(86,44,10,(1));ssd1306.fill_circle(40,44,10,(1));ssd1306.fill_round_rect(76,29,96,59,10,(1));ssd1306.fill_round_rect(30,29,50,59,10,(1));ssd1306.display();servo_3.write(0);servo_2.write(0);servo_5.write(180);servo_6.write(180);break;case 6:ssd1306.clear((0));ssd1306.fill_round_rect(76,39,96,49,5,(1));ssd1306.fill_round_rect(30,39,50,49,5,(1));ssd1306.display();servo_3.write(90);servo_2.write(90);servo_5.write(90);servo_6.write(90);break;case 7:ssd1306.clear((0));ssd1306.draw_line(30,39,45,44,(1));ssd1306.draw_line(30,49,45,44,(1));ssd1306.draw_line(96,39,81,44,(1));ssd1306.draw_line(96,49,81,44,(1));ssd1306.display();servo_3.write(180);servo_2.write(180);servo_5.write(0);servo_6.write(0);break;case 8:vol_set(7);break;case 9:vol_set(3);break;case 10:vol_set(1);break;case 11:servo_2.write(0);servo_3.write(90);servo_5.write(180);servo_6.write(90);ssd1306.clear((0));ssd1306.fill_round_rect(76,29,96,59,10,(1));ssd1306.fill_round_rect(30,29,50,59,10,(1));ssd1306.display();break;case 12:servo_2.write(180);servo_3.write(180);servo_5.write(0);servo_6.write(0);ssd1306.clear((0));ssd1306.fill_round_rect(76,39,96,49,5,(1));ssd1306.fill_round_rect(30,39,50,49,5,(1));ssd1306.display();break;case 13:servo_2.write(90);servo_3.write(90);servo_5.write(90);servo_6.write(90);ssd1306.clear((0));ssd1306.draw_line(30,39,45,44,(1));ssd1306.draw_line(30,49,45,44,(1));ssd1306.draw_line(96,39,81,44,(1));ssd1306.draw_line(96,49,81,44,(1));ssd1306.display();break;case 14:servo_2.write(90);servo_3.write(0);servo_5.write(90);servo_6.write(180);ssd1306.clear((0));ssd1306.draw_line(30,39,50,49,(1));ssd1306.draw_line(30,49,50,39,(1));ssd1306.draw_line(76,39,96,49,(1));ssd1306.draw_line(76,49,96,39,(1));ssd1306.display();break;case 15:servo_2.write(90);servo_3.write(90);servo_5.write(90);servo_6.write(90);break;case 16:servo_2.write(90);servo_3.write(90);servo_5.write(90);servo_6.write(90);break;}}void hardware_init(){vol_set(3);set_wakeup_forever();taskENTER_CRITICAL();ssd1306.begin(0x3c);ssd1306.clear((0));ssd1306.set_cursor(0,0);ssd1306.draw_hanzi_12("欢迎使用旺旺");ssd1306.display();taskEXIT_CRITICAL();vTaskDelete(NULL);
}void setup()
{//{ID:0,keyword:"唤醒词",ASR:"旺旺",ASRTO:"我在"}//{ID:1,keyword:"命令词",ASR:"打开灯光",ASRTO:"好的,马上打开灯光"}//{ID:2,keyword:"命令词",ASR:"关闭灯光",ASRTO:"好的,马上关闭灯光"}//{ID:3,keyword:"命令词",ASR:"正方形",ASRTO:"马上执行"}//{ID:4,keyword:"命令词",ASR:"圆形",ASRTO:"马上执行"}//{ID:5,keyword:"命令词",ASR:"最大角度",ASRTO:"好的"}//{ID:6,keyword:"命令词",ASR:"中等角度",ASRTO:"好的"}//{ID:7,keyword:"命令词",ASR:"最小角度",ASRTO:"好的"}//{ID:8,keyword:"命令词",ASR:"大声一点",ASRTO:"好的"}//{ID:9,keyword:"命令词",ASR:"小声一点",ASRTO:"好的"}//{ID:10,keyword:"命令词",ASR:"最小音量",ASRTO:"好的"}//{ID:11,keyword:"命令词",ASR:"坐下",ASRTO:"我已经坐下了,主人"}//{ID:12,keyword:"命令词",ASR:"卧倒",ASRTO:"我已经 卧倒了,主人"}//{ID:13,keyword:"命令词",ASR:"起立",ASRTO:"我已经站立了,主人"}//{ID:14,keyword:"命令词",ASR:"趴下",ASRTO:"我已经趴下了,主人"}//{ID:15,keyword:"命令词",ASR:"打招呼",ASRTO:"你好"}//{ID:16,keyword:"命令词",ASR:"走路",ASRTO:"好的"}//{ID:17,keyword:"命令词",ASR:"生气",ASRTO:"好的"}setPinFun(3,SECOND_FUNCTION);setPinFun(2,SECOND_FUNCTION);setPinFun(5,SECOND_FUNCTION);setPinFun(6,SECOND_FUNCTION);servo_3.attach(3);servo_2.attach(2);servo_5.attach(5);servo_6.attach(6);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/879715.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux标准IO-系统调用详解

1.1 系统调用 系统调用(system call)其实是 Linux 内核提供给应用层的应用编程接口(API),是 Linux 应用层进入内核的入口。不止 Linux 系统,所有的操作系统都会向应用层提供系统调用,应用程序通…

【Harmony】轮播图特效,持续更新中。。。。

效果预览 swiper官网例子 Swiper 高度可变化 两边等长露出,跟随手指滑动 Swiper 指示器导航点位于 Swiper 下方 一、官网 例子 参考代码: // xxx.ets class MyDataSource implements IDataSource {private list: number[] []constructor(list: nu…

软考高级:嵌入式系统调度算法 AI 解读

嵌入式系统中的调度算法用于管理任务的执行顺序,确保系统资源能够有效分配。以下是几种常见的调度算法的通俗讲解。 生活化例子 想象你是一位超市收银员,有很多顾客排队,每位顾客都可以看作一个任务,收银台就是你的处理器。你需…

PostgreSQL技术内幕10:PostgreSQL事务原理解析-日志模块介绍

文章目录 0.简介1.PG日志介绍2.事务日志介绍3.WAL分析3.1 WAL概述3.2 WAL设计考虑3.2.1 存储格式3.2.2 实现方式3.2.3 数据完整性校验3.3 check ponit 4.事务提交日志(CLOG)4.1 clog存储使用介绍4.2 slru缓冲池并发控制 0.简介 本文将延续上一篇文章内容…

vue常用业务场景

vue3: 使用本地存储 import { useStorage } from /hooks/web/useStorage const { getStorage, setStorage, removeStorage } useStorage()setStorage("data", data); // 可为对象使用pinia (1)state: ({isDisableSwitch: false}) (2) getters: getIs…

【无标题】Java_Se 数据变量与运算符

标识符、变量、常量、数据类型、运算符、基本数据类型的类型转换等。这些是编程中的“砖块”,是编程的基础。要想开始正式编程,还需要再学“控制语句”,控制语句就像“水泥”,可以把“砖块”粘到一起,最终形成“一座大…

华为OD机试 - 二维伞的雨滴效应(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…

多模态AI技术详解:跨越数据边界的智能未来

1. 引言 在当今快速发展的人工智能(AI)领域,多模态AI技术正逐渐成为研究热点。它通过结合不同类型的数据(如文本、图像、音频等),为机器提供更全面的理解能力。本文将深入探讨多模态AI的基本概念、应用场景…

ClickHouse-Kafka Engine 正确的使用方式

Kafka 是大数据领域非常流行的一款分布式消息中间件,是实时计算中必不可少的一环,同时一款 OLAP 系统能否对接 Kafka 也算是考量是否具备流批一体的衡量指标之一。ClickHouse 的 Kafka 表引擎能够直接与 Kafka 系统对接,进而订阅 Kafka 中的 …

PHP 数组排序类型介绍

在PHP中,数组排序是一项常见且重要的操作,它允许开发者根据一定的规则对数组中的元素进行排序。PHP提供了多种数组排序函数,以适应不同的排序需求。这些函数包括基本的升序和降序排序,以及基于特定键值、自定义排序逻辑等的复杂排…

镀金引线---

一、沉金和镀金 沉金和镀金都是常见的PCB金手指处理方式,它们各有优劣势,选择哪种方式取决于具体的应用需求和预算。 沉金(ENIG)是一种常用的金手指处理方式,它通过在金手指表面沉积一层金层来提高接触性能和耐腐蚀性…

【C++】模拟实现vector

在上篇中我们已经了解过的vector各种接口的功能使用,接下来我们就试着模拟实现一下吧! 注意:我们在此实现的和C标准库中实现的有所不同,其目的主要是帮助大家大概理解底层原理。 我们模拟vector容器的大致框架是: t…

2024年【四川省安全员B证】新版试题及四川省安全员B证考试试卷

题库来源:安全生产模拟考试一点通公众号小程序 四川省安全员B证新版试题参考答案及四川省安全员B证考试试题解析是安全生产模拟考试一点通题库老师及四川省安全员B证操作证已考过的学员汇总,相对有效帮助四川省安全员B证考试试卷学员顺利通过考试。 1、…

什么是注解?

1.是什么 注解(Annotation)是Java语言中一种元数据(metadata)的形式,它用于提供关于代码的额外信息,这些信息不会影响代码的编译或执行,但可以被工具用来进行编译时的检查或者在运行时进行处理。…

【webpack4系列】webpack基础用法(二)

文章目录 entryoutputloaderpluginmode前端构建基础配置关联HTML插件html-webpack-plugin构建 CSS 解析 ES6和React JSX解析 ES6解析 React JSX 解析CSS、Less和Sass解析CSS解析Less解析sass 解析图片和字体资源解析:解析图片资源解析:解析字体资源解析&…

Flutter 优化技巧分享

Flutter 作为一个跨平台框架,凭借其高效的开发体验和丰富的生态,受到越来越多开发者的青睐。然而,在开发过程中,随着项目的复杂度增加,性能问题和代码优化需求也逐渐显现。为了确保应用在各种场景下保持流畅的用户体验…

JS - 获取剪切板内容 Clipboard API

目录 1,需求最终效果 2,实现示例 3,注意点1,只支持安全上下文环境2,只能读取当前页面的剪切板3,权限获取问题4,获取内容的 MIME_TYPE 问题1,文本内容2,图片内容 5&#x…

魅思-视频管理系统 getOrderStatus SQL注入漏洞复现

0x01 产品简介 魅思-视频管理系统是一款集成了视频管理、用户管理、手机端应用封装等功能的综合性视频管理系统。该系统不仅以其强大的视频管理功能、灵活的用户管理机制、便捷的手机端应用封装功能以及高安全性和现代化的界面设计,成为了市场上备受关注的视频管理系统之一。…

【MySQL】使用C语言连接数据库

看到标题,可能会疑惑,我们学习的不是C吗,为什么使用C语言去连接数据库呢??实际上,这两种语言都可以连接数据库,但是C语言提供的API没有进行封装,更有利于我们学习数据库连接。面向API编程,哈哈…

一个基于 laravel 和 amis 开发的后台框架, 友好的组件使用体验,可轻松实现复杂页面(附源码)

前言 随着互联网应用的发展,后台管理系统的复杂度不断增加,对于开发者而言,既要系统的功能完备,又要追求开发效率的提升。然而,传统的开发方式往往会导致大量的重复劳动,尤其是在构建复杂的管理页面时。有…