課程目標
- 學習走迷宮的右手法則的應用
- 根據算法邏輯實現走迷宮功能
- 能根據場地實際要求進行車輛調試
相關知識
**機器人迷宮項目:**是常見的機器人競賽項目,在一個搭建好的迷宮場景內,設計機器人,實現從入口順利抵達出口,根據完成時間的長短來進行評分。
右手法則: 針對有墻壁的迷宮,只要順著墻壁走,遇到可以轉向的口子始終向右,轉向失敗再向右轉到下一個可以走的方向,這種方法只對樹形迷宮有效。對于有循環的迷宮就需要設計更加智能化的機器人才能實現。
**紅外接近傳感器:**紅外接近傳感器是一種集發射與接收于一體的光電開關傳感器。當發出的紅外光碰撞到范圍內的目標時,它會反射到光電二極管上,從而實現監測判斷。
電路搭建
所需材料
ArduinoUNO * 1
紅外接近傳感器 * 3
上節課的車輛結構 * 1
LED * 1
杜邦線若干
電路連接
程序編寫
練習一:紅外接近傳感器控制開關燈
手靠近傳感器時,LED燈開,離開傳感器時,LED燈關。
圖形化方式:
讀取9號管腳上的信號值為低電平,說明有障礙物靠近,這時候點亮2號管腳上的LED。
代碼方式:
/* 項目名稱:紅外控制開關燈
* 項目時間:2022.04.07
* 項目作者:MRX
*/
int SensorPin = 9;
int LedPin = 2;
void setup() {
pinMode(SensorPin,INPUT);
pinMode(LedPin,OUTPUT);
}
void loop() {
if(digitalRead(SensorPin)){
digitalWrite(LedPin,LOW);
}
else{
digitalWrite(LedPin,HIGH);
}
}
練習二:沿墻面前進的小車
使用一個傳感器,讓小車能夠沿著墻面前行,效果如下:
原理分析:
右手法則邏輯分析。
電路接線:
圖形化方式:
代碼方式:
/* 項目名稱:小車貼墻走
* 項目時間:2022.04.07
* 項目作者:MRX
*/
int IN1 = 2; // IN1 connected to pin 4
int IN2 = 4;
int ENA = 3;
int IN3 = 6; // IN3 connected to pin 6
int IN4 = 7;
int ENB = 5;
int value = 255; // the duty cycle
const int SensorPin = 10;
void Forward() {
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
analogWrite(ENA,value);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
analogWrite(ENB,value);
}
void Back() {
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
analogWrite(ENA,value);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(ENB,value);
}
void Right() {
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
analogWrite(ENA,value);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(ENB,0);
}
void Left() {
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
analogWrite(ENA,0);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(ENB,value);
}
void Stop() {
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
analogWrite(ENA,0);
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);
analogWrite(ENB,0);
}
void setup(){
Serial.begin(9600);
for (int i = 2;i <= 7;i++){
pinMode(i, OUTPUT);
}
pinMode(SensorPin,INPUT);
}
void loop(){
if (digitalRead(SensorPin) == LOW) {
Left();
} else{
Right();
}
}
練習三:走迷宮小車
編程控制小車沿著障礙物行走,效果如下:
圖形化方式:
代碼方式:
項目所涉及到的延時及電機正反轉,都要根據自己的接線來進行調整。
/* 項目名稱:走迷宮
* 項目時間:2022.04.07
* 項目作者:MRX
*/
int IN1 = 2; // IN1 connected to pin 4
int IN2 = 4;
int ENA = 3;
int IN3 = 6; // IN3 connected to pin 6
int IN4 = 7;
int ENB = 5;
int value = 255; // the duty cycle
void Forward() {
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
analogWrite(ENA,value);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
analogWrite(ENB,value);
}
void Back() {
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
analogWrite(ENA,value);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(ENB,value);
}
void Right() {
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
analogWrite(ENA,value);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(ENB,0);
}
void Left() {
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
analogWrite(ENA,0);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(ENB,value);
}
void Stop() {
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
analogWrite(ENA,0);
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);
analogWrite(ENB,0);
}
void TurnLeft() {
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
analogWrite(ENA,100);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
analogWrite(ENB,100);
}
void setup(){
for (int i = 2;i <= 7;i++){
pinMode(i, OUTPUT);
}
for (int i = 8;i <= 10;i++){
pinMode(i,INPUT);
}
}
void loop(){
if (digitalRead(8) == LOW) {
TurnLeft();
delay(500);
} else if (digitalRead(9) == LOW) {
TurnLeft();
delay(200);
} else if (digitalRead(10) == LOW) {
Left();
} else {
Right();
}
}
-
機器人
+關注
關注
211文章
28466瀏覽量
207306 -
led燈
+關注
關注
22文章
1592瀏覽量
108059 -
紅外傳感器
+關注
關注
9文章
519瀏覽量
47599 -
光電二極管
+關注
關注
10文章
402瀏覽量
35967 -
Arduino
+關注
關注
188文章
6471瀏覽量
187223
發布評論請先 登錄
相關推薦
評論