- 机器人等级考试
【2503】CIE 机器人四级实操 1.主题:智能自助红绿灯(四级)
- 2025-6-7 19:58:58 @
一、填空题。 (共1题,共100分) 1.主题:智能自助红绿灯(四级) 器件:Atmega328P主控板1块,交通灯模块2个,按键模块1个,蜂鸣器模块1个,超声波传感器1个。以上模块也可使用分立器件结合面包板搭建。 任务要求:自助红绿灯为行人横穿主路时使用,人行道的总通行时间为10秒。为了安全起见,当人行道变为绿灯前,通过超声波检测主路是否有车辆正在通过,如有车辆正在通过则延长主路黄灯的时长。当超声波传感器检测的距离值小于等于5cm时,表示主路有车辆正在通过人行道。具体要求如下: (1) 自助红绿灯未启动时,主路显示为绿灯,人行道显示为红灯,蜂鸣器保持静音; (2) 当人行道按键被按下后,如主路没有车辆通过,主路的绿灯延时1秒后由绿灯经黄灯转换为红灯,黄灯时长2秒; (3) 当人行道按键被按下后,如主路有车辆正在通过,主路的绿灯延时1秒后由绿灯经黄灯转换为红灯,此时黄灯的时长为5秒; (4) 当主路为红灯时,人行道的绿灯点亮并闪烁,闪烁时间间隔为500毫秒,蜂鸣器保持静音; (5) 当人行道的绿灯还剩余4秒时,绿灯快速闪烁,闪烁时间间隔为250毫秒,同时蜂鸣器发出提示音,提醒行人快速通过; (6) 人行道通行时间结束,人行道红灯点亮,主路绿灯点亮,蜂鸣器保持静音; (7) 未作规定处可自行处理,无明显与事实违背即可。
说明:请考生在考试结束前,按照如下要求提交相关文件。 (1) 将程序放在一个文件夹中,压缩为1个“rar或zip”格式文件,并命名为:DJKS4_身份证号,大小5M以下; (2) 将程序文件通过“上传附件”按钮进行上传; (3) 程序编写过程中不得打开其它示例程序,不得使用图形化软件生成代码,如发现,实操成绩按照0分处理。
评分项:
- 器件及器件连接(20分)
- 功能实现(80分) (1) 实现自助红绿灯未启动时,主路显示为绿灯,人行道显示为红灯,蜂鸣器保持静音;(10分) (2) 实现当人行道按键被按下后,且超声波传感器检测的距离大于5厘米时,主路的绿灯延时1秒后由绿灯经黄灯转换为红灯,黄灯的时长为2秒;(10分) (3) 实现当人行道按键被按下后,且超声波传感器检测的距离不大于5厘米时,主路的绿灯延时1秒后由绿灯经黄灯转换为红灯,黄灯的时长为5秒;(10分) (4) 实现当主路为红灯时,人行道的绿灯点亮并闪烁,闪烁时间间隔为500毫秒,蜂鸣器保持静音;(20分) (5) 实现当人行道的绿灯还剩余4秒时,绿灯快速闪烁,闪烁时间间隔为250毫秒;(20分) (6) 实现当人行道的绿灯还剩余4秒时,蜂鸣器发出提示音。(10分)(100分)
2 条评论
-
admin SU @ 2025-6-7 20:00:20
const int zhuGreen = 2; const int zhuRed = 3; const int zhuYellow = 4; const int renGreen = 5; const int renRed = 6; const int renYellow = 7; const int tonePin = 9; const int keyPin = 12; // 定义超声波传感器引脚 const int trigPin = A4; // 触发引脚,用于发送超声波信号 const int echoPin = A5; // 回声引脚,用于接收反射的超声波信号 double dis; // 存储测量到的距离值 void setup() { for (int i = 2; i <= 7; i++) { pinMode(i, OUTPUT); } //(1) 自助红绿灯未启动时,主路显示为绿灯,人行道显示为红灯,蜂鸣器保持静音; //主路显示为绿灯 digitalWrite(zhuGreen, HIGH); //digitalWrite(zhuRed,LOW); //digitalWrite(zhuYellow,LOW); //人行道显示为红灯 digitalWrite(renRed, HIGH); //digitalWrite(renGreen,LOW); //digitalWrite(renYellow,LOW); noTone(tonePin); pinMode(keyPin, INPUT); Serial.begin(9600); // 初始化变量和硬件 dis = 0; // 初始化距离变量 pinMode(trigPin, OUTPUT); // 设置触发引脚为输出模式 pinMode(echoPin, INPUT); // 设置回声引脚为输入模式 Serial.begin(9600); // 初始化串口通信,波特率9600 } boolean flag = false;//false表示按键没有按下 int keyValue; // 函数:测量距离 float checkdistance() { // 触发超声波发送 digitalWrite(trigPin, LOW); // 先将触发引脚拉低,确保状态稳定 delayMicroseconds(2); // 保持2微秒 digitalWrite(trigPin, HIGH); // 发送10微秒的高电平触发脉冲 delayMicroseconds(10); digitalWrite(trigPin, LOW); // 触发脉冲结束 // 测量回声时间并计算距离 // pulseIn()函数返回高电平持续时间(微秒),即超声波往返时间 // 距离计算公式:距离(厘米) = 时间(微秒) / 58.00 // (声速约340m/s,转换为厘米/微秒:34000/1000000 = 0.034cm/μs // 往返距离 = 0.034 * 时间 → 单程距离 = 0.034 * 时间 / 2 ≈ 时间 / 58) float distance = pulseIn(echoPin, HIGH) / 58.00; delay(10); // 短暂延时,避免传感器读数冲突 return distance; // 返回测量的距离值(厘米) } void loop() { //keyValue = digitalRead(keyPin); if (digitalRead(keyPin) == HIGH) { delay(500);//简单的消抖一下 flag = !flag; Serial.println(flag); } if (flag == true) { dis = checkdistance(); Serial.println(dis); if (dis > 5) { //(2) 当人行道按键被按下后,如主路没有车辆通过,主路的绿灯延时1秒后由绿灯经黄灯转换为红灯,黄灯时长2秒; digitalWrite(zhuGreen, HIGH); delay(1000); digitalWrite(zhuGreen, LOW); digitalWrite(zhuYellow, HIGH); delay(2000); digitalWrite(zhuYellow, LOW); digitalWrite(zhuRed, HIGH); } else { //(3) 当人行道按键被按下后,如主路有车辆正在通过,主路的绿灯延时1秒后由绿灯经黄灯转换为红灯,此时黄灯的时长为5秒; digitalWrite(zhuGreen, HIGH); delay(1000); digitalWrite(zhuGreen, LOW); digitalWrite(zhuYellow, HIGH); delay(5000); digitalWrite(zhuYellow, LOW); digitalWrite(zhuRed, HIGH); } flag = false; } }
-
2025-6-7 19:59:27@
- 1