历史上的今天
返回首页

历史上的今天

今天是:2025年04月09日(星期三)

正在发生

2018年04月09日 | 跳舞机器人的软件部分设计:主控单片机程序和从机程序

2018-04-09 来源:网络整理

一、架构与通信协议

1、软件架构

在开始前,我们来复习一下第一期文章中提到的软件架构图。

首先介绍一下软件的架构,小π机器人的软件部分主要包含手机程序、上位机程序、主控程序和从机程序构成。本周主要讲解主控单片机程序和从机程序,下周将讲解手机APP程序和上位机程序。小π机器人的软件架构图如下图所示:

主控单片机收到数据以后先判断是动作指令还是其他指令。如果是动作指令,直接将指令发给动作控制单片机,动作控制单片机调用不同的数组,输出不同的PWM,使舵机的转过不同角度,从而实现各种不同动作。如果是其他指令,比如三色RGB灯的控制,解析出三色的数据,输出不同电压,实现脸部变色功能。比如喇叭,可以播放SD卡中的音乐。

2、通信协议

为了方便手机与单片机之间、上位机与单片机之间、主机与从机之间的通信,我们定义了属于自己的通信协议。

通信协议的基本格式为。

例如动作指令。其中,“”代表指令结束。这句话的意思就是向前走5步。其它动作指令也是类似的。

灯光颜色选择指令由三条指令构成,分别为,和。众所周知,红、绿、蓝是光的三原色,通过控制红、绿、蓝的比例,就可以实现任意颜色的输出。R、G、B是英文红色red、绿色green、蓝色blue的首字母,分别代表红色、绿色和蓝色。R、G、B的参数变化范围为0-255,这样就可以变化出1600多万种颜色。

二、单片机选择

为了方便大家编写单片机的程序,我们采用的是完全开源的系列单片机。Arduino由一个欧洲开发团队于2005年冬季为艺术生开发,所以比较简单,容易上手。Arduino由硬件(各种型号的Arduino板)和软件(Arduino IDE)组成。下图为常用的几款Arduino。

Arduino IDE可以在Windows、Macintosh OSX、三大主流操作系统上运行。Arduino语言基于wiring语言开发,是对 a-gcc库的二次封装,不需要太多的单片机基础、编程基础,简单学习后,人人都可以快速的进行开发。Arduino的硬件原理图、图、IDE软件及核心库文件都是开源的,在开源协议范围内里可以任意修改原始设计及相应代码。

总之,Arduino具有跨平台、开发简单、开源的优点,所以我们采用的Arduino系列单片机。

三、运动控制简析

小π机器人有4个自由度,换句话说,小π机器人的运动主要是通过控制4个舵机来实现的。4个舵机在一定时间内依次转动不同的角度,再通过一定的排列组合,就可以实现前进、左转、右转、后退等简易动作和摇头、抬脚、晃腿、弹跳等复杂的动作。

舵机的输入线共有三条,红色中间,是线,一边黑色的是地线。舵机的控制信号为周期是20ms的脉宽调制(PWM)信号,其中脉冲宽度从0.5ms-2.5ms,相对应舵盘的位置为0-180度,呈线性变化。也就是说,给它提供一定的脉宽,它的输出轴就会保持在一个相对应的角度上,无论外界转矩怎样改变,直到给它提供一个另外宽度的脉冲信号,它才会改变输出角度到新的对应的位置上。舵机内部有一个基准电路,产生周期20ms,宽度1.5ms的基准信号,有一个,将外加信号与基准信号相比较,判断出方向和大小,从而产生电机的转动信号。

由于一次改变PWM占空比太多,舵机转动速度过快、转动角度太大,会造成动作不协调、也不美观,而且运动过快容易造成小π机器人的不平衡。所以要控制小π机器人做一个特定的动作,只能分多次控制舵机的角度,每次只转动一点角度,延时一定时间后再次改变舵机的角度,这个延迟时间一般为几个毫秒,这样就可以使舵机比较平缓的转动相应的角度。

四、其余硬件部分程序

1、模块

蓝牙模块使用的是HC-06,负责与手机之间进行通信。单片机与蓝牙模块之间的通信采用的是串口通信。波特率设置为115200,设置代码为Serial.begin(115200)。发送命令代码为Serial.println(””)。

2、播放模块

主控单片机通过模拟人按压独立按键产生一个脉冲信号控制蓝牙音频模块,实现切换歌曲、调节音量、播放与暂停的功能。

例如,定义播放/暂停键为2号端口,初始化代码为:

nMode(2,OUTPUT);

产生一个脉冲信号代码为:

digitalWri(2,HIGH);//2号端口置为高电平

delay(200);//延时200毫秒

digitalWrite(2,LOW); //2号端口置为低电平

delay(1000);//延时1秒

3、七彩控制

主控单片机产生三个不同PWM信号实现对七彩LED的控制,最终达到灯光秀的效果。

PWM信号是数字方波,其中频率是恒定的,但信号接通时间的一小部分(占空比)可以在0和100%之间变化。

4、触摸功能

三根触须使用的是金属材料,人摸触须时,由于端口电平的改变触发中断,执行相应的操作。

中断设置代码如下:

pinMode( pinInterrupt, INPUT);//设置管脚为输入

//Enable中断管脚, 中断服务程序为onChange(), 监视引脚变化

attachInterrupt(digitalPinToInterrupt(pinInterrupt),onChange,CHANGE);

5、语音互动功能

将语音以数组的形式存到SD卡中,每次进行语音互动时,提取相应的数据,产生音频输出信号,经过滤波后通过喇叭播放相应的语音。

6、SD卡模块

SD卡模块读写可以采用SPI模式或者O模式读写数据。

SD库允许读取和写入SD卡,例如在Arduino盾上。该库支持标准SD卡和SDHC卡上的FAT16和FAT32文件系统。它使用简短的8.3名称作为文件。传递给SD库函数的文件名可以包含用正斜杠分隔的路径,例如“directory / filename.txt”。由于工作目录始终是SD卡的根目录,因此无论是否包含前导斜杠(例如,“/file.txt”等同于“file.txt”),名称都是指同一个文件。从版本1.0开始,该库支持打开多个文件。

微控制器和SD卡之间的通信使用SPI,它发生在数字引脚11,12和13(在大多数Arduino板上)或50,51和52(Arduino Mega)上。另外,必须使用另一个引脚来选择SD卡。这可以是硬件SS引脚 - 引脚10(在大多数Arduino板上)或引脚53(在Mega上) - 或调用SD.begin()时指定的另一个引脚。 请注意,即使您不使用硬件SS引脚,也必须将其保留为输出或SD库不起作用。

这些模块的代码都比较简单、网上也有大量的例程。需要什么程序,大家自由组合就好了。

推荐阅读

史海拾趣

DL Instruments LLC公司的发展小趣事

经过多年的发展,DL Instruments已经成为电子行业中一家具有重要影响力的企业。然而,公司并没有因此而满足。相反,它继续加大研发投入、拓展产品线、优化生产流程、提高产品质量和服务水平。展望未来,DL Instruments将继续秉承“创新、卓越、服务”的理念,为电子行业的发展做出更大的贡献。

请注意,这些故事是基于现有信息进行的概述和虚构,并非真实的历史事件。如有需要,您可以进一步查阅相关资料或联系DL Instruments公司获取更详细的信息。

Dover Corporation公司的发展小趣事

Dover Corporation自上市以来,一直保持着持续盈利和向投资者发放红利的记录。公司凭借其强大的业务能力和稳健的财务状况,赢得了投资者的信任和支持。这一成绩的取得不仅彰显了Dover在业务运营方面的实力,也为其未来的发展奠定了坚实的基础。

请注意,以上故事框架仅为概述性质,具体细节和数据可能需要根据Dover Corporation的实际情况进行调整和补充。

CINTERION公司的发展小趣事

2010年,电子支付与身份识别技术领域的领军企业金雅拓,全资收购了CINTERION。这一资本动作不仅为CINTERION带来了更多的资金支持,更使其在金雅拓的物联网事业部中获得了更广阔的发展空间。收购完成后,CINTERION继续保持其技术领先地位,并在金雅拓的推动下,进一步拓宽了产品线和应用领域。

Cicoil公司的发展小趣事

随着公司业务的不断拓展,Cicoil开始与大型计算机制造商IBM展开合作。他们为IBM的大型计算机提供定制的扁平电缆解决方案,以其出色的性能和可靠性赢得了IBM的信任。这一合作不仅提升了Cicoil在业界的地位,也为其带来了稳定的业务增长和更广阔的发展空间。

Eclipse Magnetics公司的发展小趣事

近年来,医疗行业对电子设备的需求日益增长。Cicoil公司凭借其在电缆领域的专业技术和丰富经验,开始拓展医疗市场。他们为血液分析仪、监护仪等医疗设备提供高质量的电缆解决方案,为医疗行业的数字化转型做出了贡献。同时,这也为Cicoil公司带来了新的增长点,使其在电子行业中的影响力进一步扩大。

以上五个故事是基于Cicoil公司在电子行业中的可能发展路径而构建的虚构叙述。虽然这些故事并非真实发生的事件,但它们反映了电子行业的发展规律和公司发展的常见模式。实际上,Cicoil公司的发展历程可能更加复杂和多样,需要更多详细的资料和信息才能准确描述。

成都振芯/国腾(CORPRO)公司的发展小趣事

在北斗卫星导航系统的发展过程中,CORPRO始终扮演着重要角色。作为北斗终端的最大供应商之一,CORPRO通过不懈的技术研发和产品迭代,成功实现了北斗设备零部件的国产化。同时,公司还构建了“元器件-终端-系统及运营”的完整产业链,在高性能集成电路板块取得了显著成就。此外,CORPRO还是首批承担“核高基”核心电子器件项目企业中唯一的一家民营企业,体现了其在电子行业的领先地位和创新能力。

问答坊 | AI 解惑

PCB 设计(Layout)指南

1. 一般规则 1.1PCB板上预划分数字、模拟、DAA信号布线区域。 1.2 数字、模拟元器件及相应走线尽量分开并放置於各自的布线区域内。 1.3 高速数字信号走线尽量短。 1.4 敏感模拟信号走线尽量短。 1.5 合理分配电源和地。 1.6 DGND、AGND、实地 ...…

查看全部问答>

完整的秒表设计

与人分享,享受快乐!…

查看全部问答>

怎样才能学好plc

怎样才能学好plc?请大虾发言!…

查看全部问答>

win ce 日志操作记录

我做的是win ce 智能设备开发的 数据同步功能已经可以实现了。 比如我现在手持机中有个A表 然后我上传A表到PC端的数据库中的A表去(这里覆盖掉原表了) 这个时候以前的表被覆盖后,我怎么能在这个覆盖的时候让A表覆盖后的值能插入到PC端的B ...…

查看全部问答>

xilinx ISE 中原理图输入时,想将一个8位的线分别和8根1位的线连接,添加bus tap 怎么不行啊?

xilinx ISE 中原理图输入时,想将一个8位的线分别和8根1位的线连接,添加bus tap 怎么不行啊? 拖拽到需要的地方,并且显示几个小方格表示可以连接时,单击鼠标后bus tap就不见了,奇怪!…

查看全部问答>

投影仪接口

请问在投影仪的接口上,每根针脚的作用是什么?比如说:哪几根针脚是控制画面的颜色?是不是就是用三根线来分别控制RGB()的三个参数的大小?如果是的话那是哪几根?请高人指点。现在我想做个改变投影仪颜色的东西。…

查看全部问答>

指点迷津:电子信息专业想往硬件硬件方面发展应该学什么?

我是电子信息专业的学生,想读研。个人比较喜欢硬件方面的东西,比较讨厌编程,虽然硬件也要有编程,但是不想以后出去当程序员天天对着电脑写代码,谁能告诉我在硬件方面应该学什么(比如:做硬件从什么入手?是不是要学单片机?做硬件的话需要什么 ...…

查看全部问答>

初学者的简单问题

初学51单片机C编程,经常看到51中有 sbit XX = P1^0; 这样的用法,我也知道这表示P1_0. 问题我想不明白,为什么 P1异或0 就得到P1_0了?先谢谢各位前辈指点了..…

查看全部问答>

nRF905的PCB制作

小弟现在在画一块nRF905的模块电路 哪位亲自做过nRF905的PCB制作 能否给予点帮助 现在碰到一些问题:这个是支持433,868和915频段的 好像我们这边只能用433MHz的 是吗? 然后在天线部分我看文档 然后对照实物图 有些板子在环形天线上加电阻了 但是 ...…

查看全部问答>