2018年2月28日 星期三

Arduino (23) 紅外線收發器+二輪智能車系統。



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

遙控車不過就這樣而已嘛....













沒有留言:

張貼留言

8051 (6) 紅外線避障模組控制LED七段顯示器。

這篇要做的Project就是感測器測到訊號時,LED七段顯示器會開始計算偵測次數, 到第5次時會讓紅色LED燈發光。 程式如下: #include <reg52.h> unsigned char seg[5]={0xf9,...