当前位置:首页 > 智能硬件 > 机器人
[导读] 一、软件架构与通信协议 1、软件架构 在开始前,我们来复习一下第一期文章中提到的软件架构图。 首先介绍一下软件的架构,小π机器人的软件部分主要包含手机APP程序、上

一、软件架构与通信协议

1、软件架构

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

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

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

2、通信协议

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

通信协议的基本格式为。

例如动作指令。其中,“”代表指令结束。这句话的意思就是向前走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库不起作用。

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

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭