IR로 조종하기



주요부품

모터 드라이버 ( WB291111 / L298N )



  1. VMS 에 모터용 전원 연결
  2. GNS 에는 아두이노 GND와도 연결
  3. ENA, Int1, Int2 - 모터 A용 (속도, 앞, 뒤)
  4. Int3, Int4, ENB - 모터 B용 (앞, 뒤 속도)
    • 속도 : PWM 으로 속도 제어.
    • 앞,귀 :  (HIGH, LOW) , (LOW, HIGH) 값으로 전진/후진 제어



회로구성



  1. 9V 배터리 : 아두이노 Vin, MotorDriver-VMS
  2. IR 센서 : 3번핀
  3. MotorDriver-Enable : 9번핀
  4. MotorDriver-Int1, Int2 : 12, 11번핀
  5. MotorDriver-Int3, Int4 : 6, 5번핀



하두이노 소스

#include "IRRemote.hpp"

int RECV_PIN = 3;
IRRemote irrecv(RECV_PIN);

int PIN_MOTOR_R_FORWARD = 11;
int PIN_MOTOR_R_BACK = 12;
int PIN_MOTOR_L_FORWARD = 6;
int PIN_MOTOR_L_BACK = 5;
int PIN_SPEED = 9;

void setup()
{
  pinMode(PIN_MOTOR_L_FORWARD, OUTPUT);
  pinMode(PIN_MOTOR_L_BACK, OUTPUT);
  pinMode(PIN_MOTOR_R_FORWARD, OUTPUT);
  pinMode(PIN_MOTOR_R_BACK, OUTPUT);
  pinMode(PIN_SPEED, OUTPUT);

  Serial.begin(9600);
  irrecv.start();
  irrecv.useRepeat(true);
}

void loop() {
  if (irrecv.receive()) {
    Serial.println(irrecv.toString());

    analogWrite(PIN_SPEED, 255);

    switch (irrecv.value()) {
      case NUM1 :
        digitalWrite(PIN_MOTOR_L_FORWARD, LOW);
        digitalWrite(PIN_MOTOR_L_BACK, LOW);
        digitalWrite(PIN_MOTOR_R_FORWARD, HIGH);
        digitalWrite(PIN_MOTOR_R_BACK, LOW);
        break;
      case NUM2 :
        digitalWrite(PIN_MOTOR_L_FORWARD, HIGH);
        digitalWrite(PIN_MOTOR_L_BACK, LOW);
        digitalWrite(PIN_MOTOR_R_FORWARD, HIGH);
        digitalWrite(PIN_MOTOR_R_BACK, LOW);
        break;
      case NUM3 :
        digitalWrite(PIN_MOTOR_L_FORWARD, HIGH);
        digitalWrite(PIN_MOTOR_L_BACK, LOW);
        digitalWrite(PIN_MOTOR_R_FORWARD, LOW);
        digitalWrite(PIN_MOTOR_R_BACK, LOW);
        break;
      case NUM4 :
        digitalWrite(PIN_MOTOR_L_FORWARD, LOW);
        digitalWrite(PIN_MOTOR_L_BACK, HIGH);
        digitalWrite(PIN_MOTOR_R_FORWARD, HIGH);
        digitalWrite(PIN_MOTOR_R_BACK, LOW);
        break;
      case NUM5 :
        digitalWrite(PIN_MOTOR_L_FORWARD, LOW);
        digitalWrite(PIN_MOTOR_L_BACK, LOW);
        digitalWrite(PIN_MOTOR_R_FORWARD, LOW);
        digitalWrite(PIN_MOTOR_R_BACK, LOW);
        break;
      case NUM6 :
        digitalWrite(PIN_MOTOR_L_FORWARD, HIGH);
        digitalWrite(PIN_MOTOR_L_BACK, LOW);
        digitalWrite(PIN_MOTOR_R_FORWARD, LOW);
        digitalWrite(PIN_MOTOR_R_BACK, HIGH);
        break;
      case NUM7 :
        digitalWrite(PIN_MOTOR_L_FORWARD, LOW);
        digitalWrite(PIN_MOTOR_L_BACK, LOW);
        digitalWrite(PIN_MOTOR_R_FORWARD, LOW);
        digitalWrite(PIN_MOTOR_R_BACK, HIGH);
        break;
      case NUM8 :
        digitalWrite(PIN_MOTOR_L_FORWARD, LOW);
        digitalWrite(PIN_MOTOR_L_BACK, HIGH);
        digitalWrite(PIN_MOTOR_R_FORWARD, LOW);
        digitalWrite(PIN_MOTOR_R_BACK, HIGH);
        break;
      case NUM9 :
        digitalWrite(PIN_MOTOR_L_FORWARD, LOW);
        digitalWrite(PIN_MOTOR_L_BACK, HIGH);
        digitalWrite(PIN_MOTOR_R_FORWARD, LOW);
        digitalWrite(PIN_MOTOR_R_BACK, LOW);
        break;
    }
  } else {
    digitalWrite(PIN_MOTOR_R_FORWARD, LOW);
    digitalWrite(PIN_MOTOR_R_BACK, LOW);
    digitalWrite(PIN_MOTOR_L_FORWARD, LOW);
    digitalWrite(PIN_MOTOR_L_BACK, LOW);
  }
  delay(300);
}