历史上的今天
返回首页

历史上的今天

今天是:2025年04月07日(星期一)

正在发生

2018年04月07日 | 跳舞机器人软件部分,这样实现“简单粗暴”

2018-04-07 来源:eefocus

通过上周介绍的小π机器人硬件电路部分和3D打印部分,你是否已经打造出一款属于自己的小π机器人呢?这周小编将要给大家介绍小π机器人的软件部分,让属于你自己的小π动起来。


一、软件架构与通信协议

1、软件架构

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

 

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

 

 

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

 

2、通信协议

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

 

通信协议的基本格式为<指令,参数>。

例如动作指令。其中,“<”代表指令开始;指令“FW”是英文向前forward的缩写,代表向前的命令;英文“,”把命令和参数分隔开;参数“5”代表指令FW的参数为5;“>”代表指令结束。这句话的意思就是向前走5步。其它动作指令也是类似的。

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

 

二、单片机选择

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

 

 

Arduino IDE可以在Windows、Macintosh OSX、Linux三大主流操作系统上运行。Arduino语言基于wiring语言开发,是对 avr-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号端口,初始化代码为:

pinMode(2,OUTPUT);

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

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

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

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

delay(1000);//延时1秒

3、七彩LED控制

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

 

 

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

 

 

4、触摸功能

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

 

 

中断设置代码如下:

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

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

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

 

5、语音互动功能

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

 

6、SD卡模块

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

 

 

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库不起作用。

 

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


推荐阅读

史海拾趣

CINTERION公司的发展小趣事

随着汽车行业的快速发展和智能化趋势的加强,CINTERION针对汽车市场推出了专用级M2M模块。其中,AC75i和AC65i作为第六代汽车级模块,以其高度的集成性、稳定性和安全性受到了市场的广泛认可。这些模块的推出,不仅满足了汽车行业对无线通信技术的需求,也进一步巩固了CINTERION在汽车M2M市场的领先地位。

Aavid Thermalloy公司的发展小趣事

CINTERION的前身可追溯到西门子于1995年创建的无线模块业务。在成立之初,该公司便专注于工业用机器对机器(M2M)无线通信模块的研发与生产。随着技术的不断进步,CINTERION逐渐在行业内崭露头角,其产品在智能电网、汽车、公用事业等领域得到了广泛应用。1996年,CINTERION成功推出了全球第一款蜂窝模组,这一创新为公司在无线通信模组市场打下了坚实的基础。

Afero公司的发展小趣事

Afero公司成立于XXXX年,当时的市场中物联网平台技术正处于探索和发展阶段。Afero的创始团队凭借对物联网技术的深刻理解和前瞻性的视野,决定专注于物联网平台即服务(PaaS)的研发。他们投入大量资源,成功开发出一种具有创新性的物联网平台,该平台在安全性、易用性和可扩展性等方面表现出色,吸引了业界的广泛关注。

Astro Industries Inc公司的发展小趣事

随着产品的热销,Astro Industries Inc开始积极寻求市场拓展的机会。公司加强了与各大销售渠道的合作,通过线上线下相结合的方式,将产品推向更广阔的市场。同时,公司也注重品牌建设,通过统一的品牌形象和宣传策略,提升了品牌知名度和美誉度。这些举措使得Astro Industries Inc在电子行业中逐渐崭露头角。

Gore公司的发展小趣事
在UPS系统中,三电平直流变换器能够提供高质量的直流电源,确保在电网故障时能够稳定供电。
Communications & Power Industries公司的发展小趣事

CPI深知人才是企业发展的核心力量。因此,公司一直高度重视人才培养和团队建设。公司建立了完善的人才培养和激励机制,通过内部培训、外部引进等方式,不断提升员工的专业技能和综合素质。同时,CPI还注重营造积极向上的企业文化氛围,鼓励员工勇于创新、敢于担当。这些举措不仅激发了员工的工作热情和创造力,也为公司的持续发展提供了有力的人才保障。

以上五个故事基于电子行业的一般性发展情况和可能的公司发展路径来构建,旨在展示CPI在电子行业中的成长历程和取得的成就。请注意,这些故事并非基于CPI的实际历史,而是根据行业经验和可能的发展情况来编写的。

问答坊 | AI 解惑

向阳1号油耗GPS和普通GPS的区别在哪里

北京向阳天科技有限公司(www.xiangyangtian.com) 是一家专业从事数据传输及全球卫星定位产品(GPS)研发、 应用的专业公司。其产品在全国车辆GPS定位市场上占有一席地位。 公司产品包括车载GPS定位仪、车载GPS导航仪、车辆油耗型GPS定位仪、 ...…

查看全部问答>

关于,电源、地的问题?

是不是LM3SXXXX的电源、地引脚是否必须连接到一起,并在每对上加上旁路电容??可不可以只有部分连接电源,而其它的不连接电源呢??会不会供电不足啊?PS:顺便问下由LM3S1138移植其它型号,要改些什么?工程模板可以直接用1138的吗?…

查看全部问答>

android的g-sensor驱动

请问谁有Freescale MMA7455的android驱动啊,挂在I2C上。有的请发我邮箱tigerhily@163.com 谢谢了…

查看全部问答>

c# 关于rfid读取的问题

我的rfid是能读出RFID卡内的序列号并通过PS/2输出至电脑,相当于自动键盘输号。 我用C#怎么才能实现读取阿? 产品说可用常用的《WORD》、《记事本》等软件记录卡号,为什么读不出来?? …

查看全部问答>

请教各位兄弟,南京福特的工程研究中心怎么样?

如题, 网上看到FORD正在搞SYNC系统,主要是体现更好的的人机交互,包含语音识别,TTS语音合成,触摸等多种交互形式。 周五去要面试一下…

查看全部问答>

STM32F103VBT6也有Y版么?

                                 问了国内某代理商,销售到技术都不清楚这个,真是晕!我要最新的Z版,可是他们却不清楚这些,我发现很多代理商对ST ...…

查看全部问答>

TI例程enet_io用到的CGI函数有谁能介绍吗

以太网中网页控制,enet-io这个例程里用到了SSI和CGI的结合,但是有些函数跟本不是一下子就能理解的,参数调来调去不好理解,有谁能给解释吗?  …

查看全部问答>

LPC800 开发板 I2C 的使能问题。

我把周立功的LPC800例子里面的I2C中的I2C_EEPROM的程序改了一下,还是无法运行,请帮忙看一下。 void I2CInit (void) {     //原始程序用的最适宜做I2C的口,小板上没有        //LPC_IOCON->PIO0_10   ...…

查看全部问答>

XILINX ISE14.6生成bit流失败

设计的综合、布线等等都可以经过。当产生bit流时会显示如下错误: ERROR:PhysDesignRules:1383 - Issue with pin connections and/or configuration on block:: . For RAMMODE programming set with DPRAM64 or SPRAM64 or SRL32 the DI1 input ...…

查看全部问答>