经过上星期介绍的小π机器人硬件电路部分和3D打印部分,你是否现已打造出一款归于自己的小π机器人呢?这周小编将要给咱们介绍小π机器人的软件部分,让归于你自己的小π动起来。
一、软件架构与通讯协议
1、软件架构
在开端前,咱们来温习一下第一期文章中说到的软件架构图。
首要介绍一下软件的架构,小π机器人的软件部分首要包括手机APP程序、上位机程序、主控单片机程序和从机程序构成。本周首要解说主控单片机程序和从机程序,下周将解说手机APP程序和上位机程序。小π机器人的软件架构图如下图所示:
主控单片机收到数据今后先判别是动作指令仍是其他指令。如果是动作指令,直接将指令发给动作操控单片机,动作操控单片机调用不同的数组,输出不同的PWM,使舵机的转过不同视点,然后完成各种不同动作。如果是其他指令,比方三色RGB灯的操控,解分出三色的数据,输出不同电压,完成脸部变色功用。比方喇叭,能够播映SD卡中的音乐。
2、通讯协议
为了便利手机与单片机之间、上位机与单片机之间、主机与从机之间的通讯,咱们界说了归于自己的通讯协议。
通讯协议的根本格局为<指令,参数>。
例如动作指令<FW,5>。其间,“<”代表指令开端;指令“FW”是英文向前forward的缩写,代表向前的指令;英文“,”把指令和参数分离隔;参数“5”代表指令FW的参数为5;“>”代表指令完毕。这句话的意思便是向前走5步。其它动作指令也是相似的。
灯火色彩挑选指令由三条指令构成,别离为<R,R的参数>,<G,G的参数>和<B,B的参数>。众所周知,红、绿、蓝是光的三原色,经过操控红、绿、蓝的份额,就能够完成恣意色彩的输出。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)。发送<FW,5>指令代码为Serial.println(”<FW,5>”)。
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库不起作用。
这些模块的代码都比较简略、网上也有很多的例程。需求什么程序,咱们自由组合就好了。
【参考资料】
PMW:https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM
SD卡:https://www.arduino.cc/en/Reference/SD