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));
}
}