工科男是如何通过送礼物气死女朋友的?对于优秀的硬件师,这存在吗?(嘴角疯狂上扬)(其实我之前把电工作业——一个51摩天轮送女朋友,差点没被揍,哈哈哈哈)
这次应客户要求,做一个异地互动玩偶,话不多说,先看视频(目前是第一版本,暂未优化,客户经费有限,嘿嘿,所以只是简陋版的,可继续优化)
小怪兽&情侣互动玩偶~别被女朋友看到,点赞过万,开源模型跟代码
智能互动玩偶,当抚摸一只的头部,另一只的心脏会亮起来;当人出现在一只的后面的时候,另外一只的翅膀会动起来。
两个玩偶是通过蓝牙模块进行交互的,起初是想选用ESP8266利用物联网的方式进行通信,这样可以实现异地的功能,但是客户不想连WiFi,所以只能选蓝牙,有利有弊。相比之下,蓝牙设计起来其实更简单,配置没有那么复杂。
这个玩偶,因为体积不能太大,所以只能用最小系统板,选32不选arduino nano的原因是,nano3.0玄学实在是太多了,调起来是真的麻烦,代码没问题的情况下,能一直出错,过一会去编译又好了(你就说玄不玄学,这还这只是其中一点)
连接方式:
1、【AT模式】两个蓝牙模块的PIO11(也就是EN引脚,HC-05有6个脚,HC-06是4个)接VCC,上电后即进入AT指令模式,都用USB转TTL模块连接到电脑的USB接口。
2、【打开串口调试助手】开启2个串口调试窗口,一个打开蓝牙A的COM口,一个打开蓝牙B的COM口。【默认波特率一般为38400】
3、【恢复A默认设置】串口调试助手A,将蓝牙A恢复默认设置:AT+ORGL 【 即回车、换行,在串口调试助手上输入一个回车即可】
4、【设置A配对码】串口调试助手A,配置蓝牙A的配密码:AT+PSWD=0000 【蓝牙A与蓝牙B的密码相同,这样才能成功配对】
5、【设置A主模式】串口调试助手A,将蓝牙A配置为主机模式:AT+ROLE=1
6、【恢复B默认设置】串口调试助手B,将蓝牙B恢复默认设置:AT+ORGL
7、【设置B配对码】串口调试助手B,配置蓝牙B的密码与蓝牙A一致:AT+PSWD=0000
8、【设置B从模式】串口调试助手B,将蓝牙B配置为从机模式:AT+ROLE=0
第8步完成后直接跳到第11步,因为绑定地址后,有玄学,两个蓝牙没办法互连,让他们任意自动连就没问题
11、【常规工作模式】2个模块的PIO11引脚都接地,重新上电后进入常规工作模式,自动完成配对。之后,串口调试助手A和串口调试助手B就能互传数据了。
4只小蓝舵机(如果翅膀用连杆结构,那么一只玩偶可以只用一只舵机,这里考虑到单独控制,所以一只玩偶是用了两只舵机)
用这个模块主要是为了能实现重放电,因为客户非工科专业所以如果把电池拿进拿出就会很不方便。
触摸后,会反馈高电平信号,记得做按键滤波,不然会有毛刺,检测不准。
因为客户时间赶,本来这块板子是我用来调试作品用的,所以看起来并不是最优的,如果后面有做第二版应该优化一下的。(电路不做过多解释,主要是给核心板做个扩展板,方便调试)
3D建模主要由不眠者科技团队的向子声设计:
交互玩偶采用的是PLA材料用FDM3D打印技术制造完成,由于受到FDM技术成型原理的影响,所以把玩偶的畸角从模型上分割开来单独打印,不仅可以减少支撑用料,而且还可以让模型更加光滑细腻,除此之外,模型的整体曲线设计也有一定的技巧,可以让模型的成品效果更好。因为模型里面要放传感器之类的电子元器件,所以在模型后面开了个后盖,使用自攻螺丝安装固定后盖。对于PLA材料打印的模型,市面上有专门的PLA涂料可以给模型上色DIY,可以让每个模型都独具特色。
打印注意事项:
1.冬天打印要把热床温度稍微调高一点,防止翘边。
2.模型整体比较大,如果是近端挤出的打印机建议把喷头温度调到190度,不然打印时间长了容易卡料。
3.翅膀打印的时候和热床接触面比较小,建议加个底板打印,防止打印途中模型翻倒。
//主函数main.c
#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "led.h"
#include "usart.h"
#include "string.h"
#include "timer.h"
/************************************************
PB6、7作为按键CM_KEY
PC13作为LED测试
PA11作为舵机口
按键为单次按键,按下后松开程序才会正常运行,不可一直按着不动,会丢失另一端发过来的数据
PB0 LED
RX接B10 TX接B11
************************************************/
//USART_PRINTF_FLAG=1 就是用串口1打印数据,USART_PRINTF_FLAG=3,就是用串口3打印数据
extern int USART_PRINTF_FLAG;
u8 TX_flag1=0;
u8 TX_flag2=0;
u8 RX_flag1=0;
u8 RX_flag2=0;
u8 DJ_flag=1;
void usart3(void);
int main(void)
{
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
LED_Init(); //初始化与LED连接的硬件接口(LED0 端口PC13)
KEY_Init(); //初始化按键
uart1_init(9600); //串口1初始化为115200//一般连电脑,可以作为蓝牙的接收端,波特率要与蓝牙一致。
uart3_init(9600);//蓝牙波特率一般都是9600
TIM1_PWM_Init(199,7199);
TIM_SetCompare4(TIM1,195);
TIM_SetCompare1(TIM1,195);
while(1)
{
if(CM_KEY1==1)
{
if(TX_flag1==1)TX_flag1=0;
else TX_flag1=1;
printf("[%d,%d]\r\n",TX_flag1,TX_flag2);
while(CM_KEY1==1);
}
if(CM_KEY2==1)
{
if(TX_flag2==1)TX_flag2=0;
else TX_flag2=1;
printf("[%d,%d]\r\n",TX_flag1,TX_flag2);
while(CM_KEY2==1);
}
delay_ms(10);
usart3();
if(LED1==1)
{
TIM_SetCompare4(TIM1,190);
TIM_SetCompare1(TIM1,182);
delay_ms(1000);
TIM_SetCompare4(TIM1,182);
TIM_SetCompare1(TIM1,190);
delay_ms(1000);
}
if (LED1==0)
{
TIM_SetCompare4(TIM1,180);
TIM_SetCompare1(TIM1,180);
}
if(LED5==1)
GPIO_ResetBits(GPIOA,GPIO_Pin_7);
if(LED5==0)
GPIO_SetBits(GPIOA,GPIO_Pin_7);
}
}
void usart3(void)//接收函数
{
if(USART3_RX_STA&0x8000)
{
if((USART3_RX_BUF[0]==0x5B)&&(USART3_RX_BUF[4]==0x5D)) //判断第0位是否是"["和第2位是否是“]”
{
RX_flag1=USART3_RX_BUF[1]-'0';
LED5=RX_flag1;
RX_flag2=USART3_RX_BUF[3]-'0';
LED1=RX_flag2;
}
USART3_RX_STA=0;
}
}
五、完整工程获取(32程序+3D模型+AD电路)
(2022年1月22号上传,还在整理)
获取方式①:关注公共号:不眠者科技。回复:情侣互动玩偶,即可免费获取资源链接。
获取方式②:直接点击下载:基于STM32:情侣互动玩偶(设计方案+源码+3D图纸+AD电路)
不眠者科技,一个专注于大学生竞赛的平台,欢迎大家关注交流。