2023-12

主题:TT马达转速感应装置

器件

Atmega328P主控板1块,TT马达1个,直流电机驱动芯片或模块1个,超声波传感器1个,LED灯2个(分别为LED_A和LED_B)及相应辅件。以上模块也可使用分立器件结合面包板搭建。

任务要求

使用超声波传感器感应距离的变化,通过距离来控制TT马达的转向和转速,距离感应的范围是2-20cm。通过LED灯来指示TT马达的转向和转速。

(1) 当超声波传感器检测的距离在10-12cm之间时,TT马达停止转动,LED_A和LED_B均处于闪烁状态;

(2)当超声波传感器检测的距离大于12cm时,TT马达开始正向转动,随着距离的增加,TT马达的转速加快,LED_A由熄灭逐渐变亮,LED_B则处于熄灭状态;

(3)当超声波传感器检测的距离小于10cm时,TT马达开始反向转动,随着距离的减小,TT马达的反向转速加快,LED_B由熄灭逐渐变亮,LED_A则处于熄灭状态;

(4) 控制程序采用Arduino C/C++代码编写;

(5) 未作规定处可自行处理,无明显与事实违背即可。

说明

请考生在考试结束前,按照如下要求提交相关文件。

(1)将程序放在一个文件夹中,压缩为1个“rar或zip”格式文件,并命名为:DJKS4_身份证号,大小5M以下;

(2) 将程序文件通过“上传附件”按钮进行上传;

(3)程序编写过程中不得打开其它示例程序,不得使用图形化软件生成代码,如发现,实操成绩按照0分处理。

评分组成

1、电路搭设(20分)

元器件:

(1)装置中包含LED灯模块或LED灯;(2分)

(2)装置中包含超声波传感器;(2分)

(3)装置中包含TT马达;(2分)

(4)装置中包含直流电机驱动模块;(2分)

电路搭设:

(5)LED灯模块或LED灯与主控板正确连接;(3分)

(6)超声波传感器与主控板正确连接;(3分)

(7)直流电机驱动模块和主控板正确连接;(3分)

(8)TT马达和直流电机驱动模块正确连接。(3分)

2、功能实现(80分)

(1)实现当超声波传感器检测的距离在10-12cm之间时,TT马达停止转动,LED_A和LED_B均处于闪烁状态;(10分)

(2)实现当超声波传感器检测的距离大于12cm时,TT马达开始正向转动,并且随着距离的增加,TT马达的转速加快;(20分)

(3)实现当超声波传感器检测的距离大于12cm时,随着距离的增加,LED_A由熄灭逐渐变亮,LED_B则处于熄灭状态;(15分)

(4)实现当超声波传感器检测的距离小于10cm时,TT马达开始反向转动,并且随着距离的减小,TT马达的反向转速加快;(20分)

(5)实现当超声波传感器检测的距离小于10cm时,随着距离的减小,LED_B由熄灭逐渐变亮,LED_A则处于熄灭状态。(15分)

参考程序

器件 引脚
LEDA 9
LEDB 10
电机引脚1 3
电机引脚2 11
超声波T A0
超声波E A1
int cm()
{
    pinMode(A0, OUTPUT); // Trig  A0
    pinMode(A1, INPUT);  // Echo  A1
    digitalWrite(A0, 0);
    delayMicroseconds(2);
    digitalWrite(A0, 1);
    delayMicroseconds(10);
    digitalWrite(A0, 0);
    int s = pulseIn(A1, 1) / 58.0;
    return s;
}
void setup() {
  // put your setup code here, to run once:
  pinMode(9, OUTPUT);//LEDA
  pinMode(10, OUTPUT);//LEDB
  pinMode(3, OUTPUT);
  pinMode(11, OUTPUT);  
}
void loop() {
  // put your main code here, to run repeatedly:
  int s=cm();
  if(s>=10 and s<=12){
    analogWrite(3, 0);
    analogWrite(11, 0);
    digitalWrite(9, 1);
    digitalWrite(10, 1);
    delay(100);
    digitalWrite(9, 0);
    digitalWrite(10, 0);
    delay(100);
  }
  else if (s>12 and s<=20) {
    digitalWrite(10, 0);
    analogWrite(3, 0);
    analogWrite(11, map(s, 12, 20, 0, 255));    
    analogWrite(9, map(s, 12, 20, 0, 255));   
  }
  else if (s>=2 and s<10) {
    digitalWrite(9, 0);
    analogWrite(11, 0);
    analogWrite(3, map(s, 10, 2, 0, 255));    
    analogWrite(10, map(s, 10, 2, 0, 255));   
  }
}