Arduino 玩到最後都要碰一下智能車才行。
兩輪智能車的結構大概就是兩顆減速直流馬達和一個L298N直流馬達驅動模組。
減速直流馬達是什麼??就是內建齒輪比讓輸出轉速降低,
就像是以前玩的軌道車,都會搭配1比3和1比4的齒輪比來降低輸出轉速。
而這台車送來發現兩顆輪子顏色不太一樣= =。
第一篇智能車專案就來搭配紅外線收發來控制前進、後退和方向。
程式如下 :
#include <IRremote.h>
#include <LedControl.h>
const int irReceiverPin = 2;
IRrecv irrecv(irReceiverPin);
decode_results results;
const byte IN1 = 3;
const byte IN2 = 4;
const byte IN3 = 5;
const byte IN4 = 6;
//L298N的接腳宣告,控制兩顆馬達正反轉的輸出。
void setup() {
Serial.begin(115200);
irrecv.enableIRIn();
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}
void forward()
{
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
}
//前進的函式。
void backward()
{
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
}
//後退的函式。
void turnLeft()
{
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
//左轉的函式。
void turnRight()
{
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
}
//右轉的函式。
void stop()
{
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
//停止的函式。
void loop() {
if (irrecv.decode(&results)){
Serial.print("Protocol: ");
switch(results.decode_type) {
case NEC:
Serial.print("NEC");
break;
case SONY:
Serial.print("SONY");
break;
case RC5:
Serial.print("RC5");
break;
case RC6:
Serial.print("RC6");
break;
default:
Serial.print("Unknown encoding");
}
Serial.print(" irCode: ");
Serial.print(results.value);
//紅外線我直接沿用我前面之前寫的,我懶的在重新對編碼。
if (results.value == 16753245) {
forward();
delay(100); }
if (results.value == 16736925) {
backward();
delay(100); }
if (results.value == 16738455) {
turnLeft();
delay(100); }
if (results.value == 16724175) {
turnRight();
delay(100); }
if (results.value == 16730805) {
stop();
}
delay(1000);
irrecv.resume();
}
}
遙控車不過就這樣而已嘛....