- 机器人等级考试
【2209】CIE机器人四级实操 主题:红外遥控舵机
- 2025-6-14 16:15:42 @
【2209】CIE机器人四级实操
总分:100分题数:1
一、填空题。 (共1题,共100分) 1.主题:红外遥控舵机 器件:ATmega328控制板1个,舵机1个,红外遥控器(或发射装置)1个,红外遥控接收模块1个,电位器1个,结构件若干(也可使用普通电子元器件结合面包板搭建)。
任务要求: (1) 本项目由舵机、红外遥控器、红外接收模块、电位器组成;
(2) 控制板上电后,舵机初始化角度为90°;
(3) 使用红外遥控器控制舵机到0°,如按下0号键舵机转到0°;
(4) 使用红外遥控器控制舵机到90°,如按下1号键舵机转到90°;
(5) 使用红外遥控器控制舵机到180°,如按下2号键舵机转到180°;
(6) 使用红外遥控器允许通过电位器控制舵机角度,如按下3号键后,扭动电位器旋钮,舵机角度跟随发生变化;
(7) 使用红外遥控器控制舵机自动转动,如按下4号键后,舵机在0°~180°之间往复转动;
(8) 使用红外遥控器停止舵机的往复转动,如按下5号键,舵机停止转动;
(9) 可使用任意结构件搭;
(10) 未作规定处可自行处理,无显与事实违背即可;
(11) 红外线的有关程序提供参考代码,见下图,其他程序需自行完成。
说明:请考生在考试结束前,按照如下要求提交相关文件: (1)将程序放在一个文件夹中,并将文件夹命名为:DJKS4_身份证号;
(2)将程序文件夹压缩为1个“rar或zip”格式文件,大小5M以下;
(3)将程序文件通过“上传附件”按钮进行上传。
(100分)
4 条评论
-
admin SU @ 2025-6-16 19:55:18
#include <IRremote.h> // 引入红外遥控库 #include <Servo.h> // 引入舵机控制库 const int RECV_PIN = 11; // 定义红外接收引脚 IRrecv irrecv(RECV_PIN); // 创建红外接收对象 decode_results results; // 用于存储解码结果的对象 Servo myServo; // 创建舵机对象 const int servoPin = 9; // 定义信号引脚 int angle = 0; // 当前角度值 // 电位器代码 const int POT_PIN = A0; // 定义电位器连接的引脚(A0) void setup() { Serial.begin(9600); // 初始化串口通信 irrecv.enableIRIn(); // 启用红外接收 //irrecv.blink13(true); // 启用LED指示(可选) Serial.println("等待红外信号..."); myServo.attach(servoPin); // 初始化舵机连接 myServo.write(90); //Serial.begin(9600); // 初始化串口通信,波特率9600 pinMode(POT_PIN, INPUT); // 将A0设置为输入模式 } boolean f1 = false; //boolean f2 = false; void loop() { if (irrecv.decode(&results)) { // 尝试解码接收到的信号 Serial.println(results.value, HEX); // 以十六进制打印按键值 irrecv.resume(); // 继续接收下一个信号 if (results.value == 0XFF6897) { myServo.write(0); } else if (results.value == 0XFF30CF) { myServo.write(90); } else if (results.value == 0XFF18E7) { myServo.write(180); } else if (results.value == 0XFF7A85) {//3 //f1 = true; f1 = !f1; } else if (results.value == 0XFF10EF) {//4 //f1 = true; //f2 = true; boolean f2 = false; while (1) { if (f2 == true) { break; } for (int i = 0; i <= 180; i++) { if (f2 == true) { break; } myServo.write(i); delay(10); if (irrecv.decode(&results)) { // 尝试解码接收到的信号 Serial.println(results.value, HEX); // 以十六进制打印按键值 irrecv.resume(); // 继续接收下一个信号 if (results.value == 0XFF38C7) {//5 //f1 = true; f2 = true; break; } } } for (int i = 180; i >= 0; i--) { if (f2 == true) { break; } myServo.write(i); delay(10); if (irrecv.decode(&results)) { // 尝试解码接收到的信号 Serial.println(results.value, HEX); // 以十六进制打印按键值 irrecv.resume(); // 继续接收下一个信号 if (results.value == 0XFF38C7) {//5 //f1 = true; f2 = true; break; } } } } } } else { } if (f1 == true) { int value = map(analogRead(POT_PIN), 0, 1023, 0, 180); myServo.write(value); } delay(20); // 短暂延时 // 读取电位器的值(范围0-1023) //int potValue = analogRead(POT_PIN); // 将模拟值转换为百分比(0-100%) //int percentage = map(potValue, 0, 1023, 0, 100); //myServo.write(angle); }
-
2025-6-16 19:42:10@
#include <IRremote.h> // 引入红外遥控库 #include <Servo.h> // 引入舵机控制库 const int RECV_PIN = 11; // 定义红外接收引脚 IRrecv irrecv(RECV_PIN); // 创建红外接收对象 decode_results results; // 用于存储解码结果的对象 Servo myServo; // 创建舵机对象 const int servoPin = 9; // 定义信号引脚 int angle = 0; // 当前角度值 // 电位器代码 const int POT_PIN = A0; // 定义电位器连接的引脚(A0) void setup() { Serial.begin(9600); // 初始化串口通信 irrecv.enableIRIn(); // 启用红外接收 //irrecv.blink13(true); // 启用LED指示(可选) Serial.println("等待红外信号..."); myServo.attach(servoPin); // 初始化舵机连接 myServo.write(90); //Serial.begin(9600); // 初始化串口通信,波特率9600 pinMode(POT_PIN, INPUT); // 将A0设置为输入模式 } boolean f1 = false; //boolean f2 = false; void loop() { if (irrecv.decode(&results)) { // 尝试解码接收到的信号 Serial.println(results.value, HEX); // 以十六进制打印按键值 irrecv.resume(); // 继续接收下一个信号 if (results.value == 0XFF6897) { myServo.write(0); } else if (results.value == 0XFF30CF) { myServo.write(90); } else if (results.value == 0XFF18E7) { myServo.write(180); } else if (results.value == 0XFF7A85) {//3 //f1 = true; f1 = !f1; } else if (results.value == 0XFF10EF) {//4 //f1 = true; //f2 = true; boolean f2 = false; for (int i = 0; i <= 180; i++) { myServo.write(i); delay(10); // if (f2 == true) { // break; // } if (irrecv.decode(&results)) { // 尝试解码接收到的信号 Serial.println(results.value, HEX); // 以十六进制打印按键值 irrecv.resume(); // 继续接收下一个信号 if (results.value == 0XFF38C7) {//5 //f1 = true; f2 = true; break; } } } for (int i = 180; i >= 0; i--) { if (f2 == true) { break; } myServo.write(i); delay(10); if (irrecv.decode(&results)) { // 尝试解码接收到的信号 Serial.println(results.value, HEX); // 以十六进制打印按键值 irrecv.resume(); // 继续接收下一个信号 if (results.value == 0XFF38C7) {//5 //f1 = true; f2 = true; break; } } } } } else { } if (f1 == true) { int value = map(analogRead(POT_PIN), 0, 1023, 0, 180); myServo.write(value); } delay(20); // 短暂延时 // 读取电位器的值(范围0-1023) //int potValue = analogRead(POT_PIN); // 将模拟值转换为百分比(0-100%) //int percentage = map(potValue, 0, 1023, 0, 100); //myServo.write(angle); }
-
2025-6-16 19:39:18@
#include <IRremote.h> // 引入红外遥控库 #include <Servo.h> // 引入舵机控制库 const int RECV_PIN = 11; // 定义红外接收引脚 IRrecv irrecv(RECV_PIN); // 创建红外接收对象 decode_results results; // 用于存储解码结果的对象 Servo myServo; // 创建舵机对象 const int servoPin = 9; // 定义信号引脚 int angle = 0; // 当前角度值 // 电位器代码 const int POT_PIN = A0; // 定义电位器连接的引脚(A0) void setup() { Serial.begin(9600); // 初始化串口通信 irrecv.enableIRIn(); // 启用红外接收 //irrecv.blink13(true); // 启用LED指示(可选) Serial.println("等待红外信号..."); myServo.attach(servoPin); // 初始化舵机连接 myServo.write(90); //Serial.begin(9600); // 初始化串口通信,波特率9600 pinMode(POT_PIN, INPUT); // 将A0设置为输入模式 } boolean f1 = false; //boolean f2 = false; void loop() { if (irrecv.decode(&results)) { // 尝试解码接收到的信号 Serial.println(results.value, HEX); // 以十六进制打印按键值 irrecv.resume(); // 继续接收下一个信号 if (results.value == 0XFF6897) { myServo.write(0); } else if (results.value == 0XFF30CF) { myServo.write(90); } else if (results.value == 0XFF18E7) { myServo.write(180); } else if (results.value == 0XFF7A85) {//3 //f1 = true; f1 = !f1; } else if (results.value == 0XFF10EF) {//4 //f1 = true; //f2 = true; boolean f2 = false; for (int i = 0; i <= 180; i++) { myServo.write(i); delay(10); // if (f2 == true) { // break; // } if (irrecv.decode(&results)) { // 尝试解码接收到的信号 Serial.println(results.value, HEX); // 以十六进制打印按键值 irrecv.resume(); // 继续接收下一个信号 if (results.value == 0XFF38C7) {//5 //f1 = true; f2 = true; break; } } } for (int i = 180; i >= 0; i--) { myServo.write(i); delay(10); if (f2 == true) { break; } if (irrecv.decode(&results)) { // 尝试解码接收到的信号 Serial.println(results.value, HEX); // 以十六进制打印按键值 irrecv.resume(); // 继续接收下一个信号 if (results.value == 0XFF38C7) {//5 //f1 = true; f2 = true; break; } } } } } else { } if (f1 == true) { int value = map(analogRead(POT_PIN), 0, 1023, 0, 180); myServo.write(value); } delay(20); // 短暂延时 // 读取电位器的值(范围0-1023) //int potValue = analogRead(POT_PIN); // 将模拟值转换为百分比(0-100%) //int percentage = map(potValue, 0, 1023, 0, 100); //myServo.write(angle); }
-
2025-6-14 16:34:03@
#include <IRremote.h> // 引入红外遥控库 #include <Servo.h> // 引入舵机控制库 const int RECV_PIN = 11; // 定义红外接收引脚 IRrecv irrecv(RECV_PIN); // 创建红外接收对象 decode_results results; // 用于存储解码结果的对象 Servo myServo; // 创建舵机对象 const int servoPin = 9; // 定义信号引脚 int angle = 0; // 当前角度值 // 电位器代码 const int POT_PIN = A0; // 定义电位器连接的引脚(A0) void setup() { Serial.begin(9600); // 初始化串口通信 irrecv.enableIRIn(); // 启用红外接收 //irrecv.blink13(true); // 启用LED指示(可选) Serial.println("等待红外信号..."); myServo.attach(servoPin); // 初始化舵机连接 //Serial.begin(9600); // 初始化串口通信,波特率9600 pinMode(POT_PIN, INPUT); // 将A0设置为输入模式 } void loop() { if (irrecv.decode(&results)) { // 尝试解码接收到的信号 Serial.println(results.value, HEX); // 以十六进制打印按键值 irrecv.resume(); // 继续接收下一个信号 } delay(20); // 短暂延时 // 读取电位器的值(范围0-1023) //int potValue = analogRead(POT_PIN); // 将模拟值转换为百分比(0-100%) //int percentage = map(potValue, 0, 1023, 0, 100); //myServo.write(angle); }
- 1