- TT馬達+65mm 車輪 X 4
- L298N 直流馬達驅動板
- 紅外線發射LED X 3
- 紅外線居收LED X 3
- 200歐姆電阻 X 3
- 10K歐姆電阻 X 3
- 10K 可變電阻 X 1
- LM324運算放大器 X 1
- Arduino pro mini 5V/16M X 1
製作紅外線偵測障礙物電路板,三組LED紅外線發射接收分別偵測前、左、右障礙物。
線路圖如下
完成電路板
Arduino 使用PIN 5,6,9,10 PWM控制馬達轉向,PIN 11,12,13接收紅外線偵測信號
線路如如下
完成小車圖
實測影片
Arduino原始碼
const int PIN1A=6;
const int PIN1B=5;
const int PIN2A=9;
const int PIN2B=10;
const int PIN_R=11;
const int PIN_F=12;
const int PIN_L=13;
int _speed = 150;
int r,f,l;
void setup() {
pinMode(PIN1A, OUTPUT);
pinMode(PIN1B, OUTPUT);
pinMode(PIN2A, OUTPUT);
pinMode(PIN2B, OUTPUT);
pinMode(PIN_R, INPUT);
pinMode(PIN_F, INPUT);
pinMode(PIN_L, INPUT);
digitalWrite(PIN_R, LOW);
digitalWrite(PIN_F, LOW);
digitalWrite(PIN_L, LOW);
}
void _stop() {
analogWrite(PIN1A, 0);
analogWrite(PIN1B, 0);
analogWrite(PIN2A, 0);
analogWrite(PIN2B, 0);
}
void forward() {
analogWrite(PIN1A, _speed);
analogWrite(PIN1B, 0);
analogWrite(PIN2A, _speed);
analogWrite(PIN2B, 0);
}
void backward() {
analogWrite(PIN1A, 0);
analogWrite(PIN1B, _speed);
analogWrite(PIN2A, 0);
analogWrite(PIN2B, _speed);
}
void right() {
analogWrite(PIN1A, _speed);
analogWrite(PIN1B, 0);
analogWrite(PIN2A, 0);
analogWrite(PIN2B, 0);
}
void left() {
analogWrite(PIN1A, 0);
analogWrite(PIN1B, 0);
analogWrite(PIN2A, _speed);
analogWrite(PIN2B, 0);
}
void loop() {
f = digitalRead(PIN_F);
r = digitalRead(PIN_R);
l = digitalRead(PIN_L);
// 判斷前、左、右有障礙物採取動作
if (!f && !r && !l) forward();
if (!f && !r && l) {
_stop();
right();
delay(500);
}
if (!f && r && !l) {
_stop();
left();
delay(500);
}
if (!f && r && l) {
_stop();
backward();
delay(500);
}
// 前有障礙物,左右都無障礙物時,隨機採取右轉或左轉。
if (f && !r && !l) {
_stop();
if(random(2)) {
left();
} else {
right();
}
delay(500);
}
if (f && !r && l) {
_stop();
right();
delay(500);
}
if (f && r && !l) {
_stop();
left();
delay(500);
}
if (f && r && l) {
_stop();
backward();
delay(500);
}
}



沒有留言:
張貼留言