机器人等级考试4级第一章.docx
- 文档编号:9771983
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:24
- 大小:1.13MB
机器人等级考试4级第一章.docx
《机器人等级考试4级第一章.docx》由会员分享,可在线阅读,更多相关《机器人等级考试4级第一章.docx(24页珍藏版)》请在冰豆网上搜索。
机器人等级考试4级第一章
四级标准
科目:
机器人搭建、机器人常用知识。
形式:
机器人搭建采用实际操作的形式,机器人常用知识采用上机考试形式。
器材及软件:
结构件:
能够满足考试要求的结构件均可。
核心控制板:
开源硬件控制板,包含硬件的原理图、引导程序(如果含)、操作系统(如果含)、开源的开发环境及源码。
电子部分:
与核心控制板配套的电子元件或模块。
开发软件:
能够完成开源硬件控制板程序开发的免费软件即可。
考核内容:
四级内容标准是对前面三级内容的一个综合应用,相同的考核内容未在此列出。
(一)知识
1.掌握数学(加减乘除)、比较(大于小于等于)及逻辑(与或非)运算
2.了解数值在二进制、十进制和十六进制之间进行转换
3.掌握驱动电机或伺服电机运转的内容
4.掌握已有的一些传感器功能函数的使用
5.熟练通过编程实现选择结构和循环结构
6.掌握函数的应用,能够完成自定义的函数
7.了解类库的概念
8.了解自律型机器人的行动方式
9.了解细分领域的机器人理论及相关人物
10.掌握较为合理的使用变量和自定义函数的内容
(二)机器人搭建
这部分实践操作主要是搭建能够完成指定任务的机构,与语言程序设计中的内容有部分交叉1.掌握使用输出数字信号的传感器的内容,如灰度传感器、接近开关、触碰传感器
2.掌握使用输出模拟量信号的传感器的内容,如光线强度传感器
3.掌握使用输出数字脉冲信号的传感器的内容,如超声波测距传感器、红外遥控信号接收传感器
4.掌握驱动电机或伺服电机运转的内容
5.掌握数学(加减乘除)、比较(大于小于等于)及逻辑(与或非)运算
6.熟练应用控制器I/O口实现数字量输出
7.掌握控制机器人平台移动的内容
8.了解利用三极管完成控制电路通断的电路
9.掌握简单的自律型机器人制作(比如简单避障、单线条巡线)
10.熟练通过编程实现选择结构和循环结构
11.掌握函数的应用,能够完成自定义的函数
第一章迎宾机器人
现如今,机器人已经越来越多地应用到服务领域,如会场、餐厅、商场等场所。
当宾客经过时,机器人会主动打招呼:
"您好!
欢迎光临"。
当宾客离开时,机器人会说:
“欢迎下次光临"。
2016年Alpha机器人在央视春晚舞台上的表演动作整齐、韵律感十足,它们精彩的表演给全国观众留下了深刻的印象,在全国掀起了学习机器人的热潮。
下面我们来一起制作一个简单的迎宾机器人吧!
本章通过五个项目来学习舵机、超声波模块、语音模块的功能和使用。
舵机是执行器,类似人的手;超声波模块是传感器,类似人的眼睛;语音模块也是执行器,类似人的嘴巴。
本章还将了解、学习Arduino的类库,通过类库可以非常方便地对传感器、执行器进行操控。
在前四个项目铺垫的基础上,综合完成迎宾机器人。
1.1舵机动起来
1.1.1知识准备
Arduino之所以风靡全球,其中一个最大的优势就是有非常丰富的类库。
即使不了解某个器件的工作原理,但如果该器件有第三方的Arduino类库,则可以通过学习类库提供的例程来使用该器件。
什么是Arduino类库呢?
Arduino类库是操控特定硬件的源程序代码的集合。
在Arduino程序中,直接调用类库中封装的功能函数(也称为成员函数),就可以直接使用该硬件。
有了类库,就可以忽略硬件复杂的底层操作,把更多的精力放到创意中去。
Arduino类库从安装方式分为三类:
Ø核心库,例如Serial库;
Ø软件安装自带库,例如Servo库等;
Ø外部库,例如IRemote库等。
首先讲述外部库的安装。
外部库有两种发布方式,常用的发布方式为.ZIP压缩包,另一种发布方式为库源文件。
外部库的安装方式如图1-1所示。
选择“项目“→“加载库”→添加库”。
在弹出的窗口中选择.ZIP压缩包或者库源文件夹,单击“确认”按钮即可。
再次选择“项目“→”加载库”,查看弹出的菜单条,刚才添加的类库已经添加到弹出的菜单条中。
类库的使用。
系统安装自带库和外部库的使用方式—样,使用时遵循如下三个步骤:
Ø引用库的头文件;
Ø定义库对象;
Ø使用库函数。
1.1.2硬件搭建
1.1.2.1认识新硬件
舵机
舵机是一种精确定位角度的执行器。
舵机由直流电机、减速齿轮组、传感器和控制电路组成。
在微机电系统和航模中舵机常用作基本的输出执行机构。
图1-1舵机
工作电压:
3.5-6V
转动范围:
0°-180°
扭矩:
1.6N·m(电压4.8V时)
舵机有3个杜邦线母口接口,含义分别如下:
褐色连线:
GND
红色连线:
VCC
黄色连线:
信号端
电位器模块
电位器模块由电位器封装而成。
电位器是可变电阻的一种。
电位器有3个触点,它由一个电阻体和一个转动系统组成。
当在电阻体的两个固定触点(两端引脚)之间外加一个电压时,通过转动系统改变中间引脚上分到的电压比例,从而改变输出的电压值。
图1-2电位器模块
图1-3电位器原理示意图
电位器没有极性,在电路图中,电位器的符号如图
电位器模块有3个引脚:
GND、VCC、AO(AO是模拟输出AnalogOutput的简称)。
使用时AO引脚一般连接UNO主板的模拟(Analog)输入引脚。
1.1.2.2硬件清单
项目
模块
数量
1
电位器模块
1
2
舵机
1
3
传感器数据线
1
4
青蜓派arduino控制器
1
5
程序下载线
1
1.1.2.3电路搭建
图1-4舵机动起来电路连接示意图
舵机动起来电路原理图
1.1.2.4搭建说明
Ø将舵机的数据线和青蜓派控制器的舵机引脚1连接在一起;
Ø将电位器模块通过传感器数据线和控制器的7号端口连接在一起;
1.1.3编程实现
1.1.3.1程序编写
#include
(1)
ServomyServo;//
(2)
constintservoPin=3;//舵机的端口号是3
constintpotPin=A2;//电位器的端口号是A2
voidsetup(){
myServo.attach(servoPin);//(3)
}
voidloop(){
intangle=analogRead(potPin);
angle=map(angle,0,1023,0,180);//将angle从0-1023映射到0-180
myServo.write(angle);//(4)
delay(100);//延迟时间,让舵机转动到位
}
1.1.3.2程序说明
(1)本语句的含义是导入舵机函数库,以便在程序中是使用库中的功能函数控制舵机运行。
在使用库的功能函数前,必须导入库的头文件,语法格式如下:
#include<库头文件名.h>
库文件导入语句除了在程序编辑窗口直接输入外,还可以通过如下步骤快捷输入:
选择“项目”→“加载库”→单击所要导入的库名称即可。
(2)新建一个舵机对象myServo。
为了能操纵舵机,需要创建一个舵机库的变量,这个变量被称为对象。
定义类库对象的程序语句如下:
类库名称对象名称;
不同硬件的类库,在新建对象时,格式不完全一样。
当创建舵机库对象myServo后,myServo对象就拥有了舵机库提供的所有功能函数的功能,就可以直接通过舵机库功能函数来操控舵机。
使用类库提供的库函数的语法格式如下:
对象名称.库功能函教():
(3)使用舵机库功能函数attach(),该函数的功能是告诉将定义的舵机对象myServo连接到数字引脚3。
(4)功能函数write(angle)的功能是用于设定舵机旋转角度(angle),角度范围为0°-180°。
1.1.3.3运行结果
本程序使用analogRead函数读取电位器的值0-1023,再通过使用map函数将该値(angle)映射到0-180范围,从而控制舵机的转动。
单击工具栏中的上传按钮,将程序上传到UNO主控板。
通过旋转电位器,将观察到随着电位器转动角度的变化,舵机跟随转动。
1.1.3.4程序进阶
类库在Arduino学习中有着非常重要的位置,也是Arduino具有旺盛生命力的主要原因之一。
所有的库都是以源代码的方式.提供。
特别是官方提供的类库,软件文档齐全,写法规范,简洁高效,是不可多得的范例级程序。
类库在系统中的存储位置有两处:
ØArduino软件安装目录Libraries下;
ØArduino系统项目文件夹\Libraries下,系统的项目文件夹可以通过选择菜单“文件“→“首选项”查看。
下面以舵机Servo库为例,讲述类库的构成。
类库一般由四个部分组成••
Ø实现类库功能的源代码文件,该文件为C++源代码,后缀为.cpp。
Ø类库的头文件,为.h文件后缀的头文件,头文件定义了类库的数据和成员函数。
Ø示例文件,是演示类库的使用方法,一般放置在类库文件的examples(示例)文件夹里。
它可以通过选择菜单“文件”→“示例”,然后选择相应类库的示例文件即可。
Økeyword.txt文件,用于描述类库给Arduino词汇表添加了哪些新的关键词,这样在ArduinoIDE里输人库的名称或功能函数时,就会显示为彩色字体。
上述四个部分中,类库的源代码文件和头文件是不可缺少的。
Servo库位于Arduino软件安装目录\libraries\servo下。
Servo库文件名称及存储位置如表所列。
表1-1servo库文件名称及存储位置
名称
名称
源码文件
..\libraries\servo\src\avr\Servo.cpp
头文件
..\libraries\servo\Servo.h
示例文件
..libraries\Servo\examples
keyword.txt
..libraries\Servo\keyword.txl
1.2超声波测距
1.2.1知识准备
超声波传感器有2个信号引脚:
Trig引脚和Echo引脚。
Trig引脚是触发引脚,Echo引脚是信号接收引脚。
图1-5超声波传感器时序图
Ø先向Trig引脚发送时长不小于10μs的高电平,触发超声波模块。
Ø触发后,模块会自动发射8个40kHz的方波,并自动检测是否有信号返回。
Ø如果有信号返回,则通过Echo引脚输出一个高电平,高电平持续的时间是超声波从发射到接收的时间。
测试距离=高电平持续时间×340m/s÷2
1.2.2硬件搭建
1.2.2.1认识新硬件
超声波传感器及转接板
超声波传感器是利用超声波的特性研制而成的传感器。
超声波接收到触发信号后,模块自动发出8个40kHz的方波,同时开始计时并自动检测是否有信号返回,同时开始计时并自动检测是否有信号返回,通过记录超声波从开始发送到接收到问波的时间间隔,来判断前方障碍物的距离。
图1-6超声波传感器模块
工作电压:
5V
有效探测距商:
2mm-2.5m。
感应角度范围:
15°
超声波转接板的作用是为了便于连接和固定超声波传感器。
超声波传感器和的接板有4个引脚:
GND、VCC、Trig、Echo。
Trig引脚为触发引脚,Echo引脚为数据接收引脚。
1.2.2.2硬件清单
项目
模块
数量
1
超声波模块
1
2
传感器数据线
1
3
青蜓派arduino控制器
1
4
程序下载线
1
1.2.2.3电路搭建
图1-7超声波测距电路连接示意图
1.2.2.4搭建说明
Ø将超声波模块连接到青蜓派控制器的7号端口;
1.2.3编程实现
1.2.3.1程序编写
constintTrigPin=8;//超声波的触发引脚连接数字引脚8
constintEchoPin=7;//超声波的触发引脚连接数字引脚7
intdistance;
voidsetup(){
Serial.begin(9600);
pinMode(TrigPin,OUTPUT);
pinMode(EchoPin,INPUT);
}
voidloop(){
digitalWrite(TrigPin,LOW);
delayMicroseconds
(2);//
(1)
digitalWrite(TrigPin,HIGH);//
(1)
delayMicroseconds(10);//
(1)
digitalWrite(TrigPin,LOW);//
(1)
distance=pulseIn(EchoPin,HIGH)/58.0;
(2)
Serial.print(distance);
Serial.println("cm");
delay(100);
}
1.2.3.2程序说明
(1)本段语句的目的是先拉低Trig,然后发送10μs的高电平信号去触发超声波传感器。
(2)本语句的含义是计算距离并换算成cm(厘米)。
pulseln()函数是系统内建函数,用来读取一个引脚的脉冲(HIGH或LOW)。
例如,如果参数value的值是HIGH,pulseln()会等待引脚变为HIGH时开始计时,再等待引脚变为LOW时停止计时。
返回脉冲的持续时间单位为μs。
pulseIn()函数的用法如下:
pulseIn(pin,value);
pulseIn(pin,value,timeout);
pin:
要进行脉冲计时的引脚号。
value:
要读取的脉冲类型,HIGH或LOW
timeout(可选):
指定脉冲计数的等待时间,单位为μs,默认值是1μs。
返回值:
脉冲时长,单位μs,如果超时则返回0。
1.2.3.3运行结果
单击工具栏中的上传按钮,将程序上传到UNO板。
打开串口监视器,拿书本对着超声波传感器前后移动,串口监视器窗口将显示当前的距离数据。
1.2.3.4程序进阶
程序行中的58.0是如何得来的?
声音在干燥、摄氏20度的空气中的传播速度大约为343米/秒,合34,300厘米/秒。
或者,我们作一下单位换算,34,300除以1,000,000厘米/微秒。
即为:
0.0343厘米/微秒,再换一个角度,1/(0.0343厘米/微秒)即:
29.15微秒/厘米。
这就意味着,每291.5微秒表示10CM的距离。
1厘米就是29.15微秒。
但是发送后到接收到回波,声音走过的是2倍的距离呀。
所以实际距离就是1厘米,对应58.3微秒。
实际上整个测距过程是测的发出声波到收到回波的时间,所以换成距离cm,要除以58。
当然除以58.3可能更精确。
1.3距离说出来
1.3.1知识准备
将超声波返回的距离,通过语言芯片播报出来。
语言芯片的操作函数封装成一个VoiceBox库,VoiceBox库的初始化函数如下:
VoiceBox(intpin1,intpin2)
功能:
VoiceBox库的初始化函数,通过该函数,建立该函数,建立库对象,并初始化语言芯片的Data,Busy引脚。
pin1:
Busy引脚相连接的管脚
pin2:
Data引脚相连接的管脚
VoiceBox库提供了两个成员库函数,SendWord()和SendNum(),功能如下:
SendWord(intnum);
功能:
播报地址num所对应的语言。
参数:
num所播报语音的地址号。
SendNum(intnum);
功能:
将数num的语音播报出来。
参数:
num欲播报的数,0 使用前将VoiceBox库添加到arduinoIDE中。 1.3.2硬件搭建 1.3.2.1认识新硬件 语音模块 由语音芯片和喇叭组成,语音芯片预先将语音内容烧录进芯片厂,烧录后的语音内容不可二次修改,每条语音有一个地址编号,根据地址编号选择输出指定地址的语音内容。 图1-8语音模块 工作电压1.8-5.5V 语音模块有4个引脚: GND、VCC、Data、Busy 1.3.2.2硬件清单 项目 模块 数量 1 超声波模块 1 2 语音模块 1 3 传感器数据线 1 4 R12数据转接线 1 3 青蜓派arduino控制器 1 4 程序下载线 1 1.3.2.3电路搭建 图1-9距离说出来电路连接示意图 1.3.3.4搭建说明 Ø将超声波模块连接到青蜓派控制器的8号端口; ØR12数据转接线红色线接VCC,黑色线接GND,黄色线接Data端,白色线接Busy,水晶头接7号端口 1.3.3编程实现 1.3.3.1程序编写 #include constintTrigPin=13; constintEchoPin=12; intdistance; VoiceboxVoicebox(8,7);// (1)定义库对象Voicebox voidsetup(){ //putyoursetupcodehere,torunonce: Serial.begin(9600); pinMode(TrigPin,OUTPUT); pinMode(EchoPin,INPUT); Voicebox.SendWord(0xE1);//Volumecontrol0xE0-E7; delay(200); } voidloop(){ //putyourmaincodehere,torunrepeatedly; digitalWrite(TrigPin,LOW); delayMicroseconds (2); digitalWrite(TrigPin,HIGH); delayMicroseconds(10); digitalWrite(TrigPin,LOW); distance=pulseIn(EchoPin,HIGH)/58.0; Serial.print(distance); Serial.println("cm"); Voicebox.SendWord(14);//播报地址为14的语音,内容为: 前方 Voicebox.SendNum(distance);//播报距离值distance Voicebox.SendWord(15);//播报地址为15的语音,内容为: 厘米 Voicebox.SendWord(66);//播报地址为66的语音,内容为: 障碍物 delay(200); } 1.3.3.2程序说明 定义库对象VoiceBox(8,7),同时指定了语音芯片的Data,Busy引脚分别对应UNO主板的7,8引脚。 1.3.3.3运行结果 单击工具栏中的上传按钮,将程序上传到UNO板,打开串口监视器,将手对着超声波传感器前后移动,串口监视器窗口将显示当前的距离数据,同时语音播报“前方·········厘米障碍物“的提示。 1.4迎宾机器人 1.4.1知识准备 本项目将搭设一个人形迎宾机器人,具有的功能如下 Ø当自远而近逐渐靠近迎宾机器人,并且距离达到10cm时,机器人发出“欢迎光临"的语音,手臂依次向左摆动。 Ø当自近而远逐渐远离迎宾机器人且距离达到20cm时,机器人发出“请慢走,欢迎常来“的语音,手臂依次向右摆动。 Ø常态时机器人手臂向下。 图1-10迎宾机器人的程序流程图 1.4.2硬件搭建 1.4.2.1硬件清单 项目 模块 数量 1 超声波模块 1 2 语音模块 1 3 舵机 2 4 传感器数据线 1 5 R12数据转接线 1 6 青蜓派arduino控制器 1 7 程序下载线 1 1.4.2.2电路搭建 图1-11迎宾机器人电路连接示意图 1.4.2.3搭建说明 Ø将超声波模块连接到青蜓派控制器的8号端口; ØR12数据转接线红色线接VCC,黑色线接GND,黄色线接Data端,白色线接Busy,水晶头接7号端口 Ø左侧舵机连接舵机端口1 Ø右侧舵机连接舵机端口2 1.4.3编程实现 1.4.3.1程序编写 #include #include constintTrigPin=13;//超声波触发引脚连接UNO引脚13 constintEchoPin=12;//超声波触发引脚连接UNO引脚12 constintdistMin=10;//定义响应的范围下限 constintdistMax=20;//定义响应的范围上限 constintservoLeftPin=5;//右侧舵机连接UNO引脚5 constintservoRightPin=3;//左侧舵机连接UNO引脚3 intdistance;//全局变量,保存当前超声波返回的距离 intpreDist=0;//用于保存先前的距离状态,用于判断是靠近还是远离 intnearOrleft=0;//状态变量: 0为靠近,1为远离 VoiceboxVoicebox(8,7);//定义语音库对象Voicebox ServoservoLeft;//定义舵机库对象servoLeft ServoservoRight;//定义舵机库对象servoRight voidsetup(){ //putyoursetupcodehere,torunonce: Serial.begin(9600); pinMode(TrigPin,OUTPUT); pinMode(EchoPin,INPUT); ServoLeft.attach(servoLeftPin); ServoRight.attach(servoRightPin); ServoLeft.write(90);// (1)舵机初始状态为90°,向下 delay(100); ServoRight.write(90); delay(100); Voicebox.SendWord(0xE1);//Volumecontrol0xE0-E7; delay(200); } voidloop(){ //putyourmaincodehere,torunrepeatedly; getDistance();//获取当前超声波返回的距离值 Serial.println(distance); if((distance<=distMax)&&(distance>=distMin)){// (2) if(preDist nearOrleft=1; } else{ nearOrleft=0; } if((distance==distMin)&&(nearOrleft==0)){//(4) Voicebox.SendWord(20); Voicebox.SendWord(25); ServoLeft.write(10); delay(100); ServoRight.write(10); delay(100); } elseif((distance==distMax)&&(nearOrleft==1)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 机器人 等级 考试 第一章