Uno 보드, L9110S 모터 드라이버, HC-06 블루투스 모듈을 사용하는 블루투스RC카

Uno 보드, L9110S 모터 드라이버, HC-06 블루투스 모듈을 사용하는 블루투스RC카

codemaster 6 20681

#include <SoftwareSerial.h>


// 모터 핀 설정
int A_1A = 6;
int A_1B = 11;
int B_1A = 3;
int B_2A = 5; // B_1B를 B_2A로 변경
int B_1B = 0; // 해당 핀이 없다고 가정


// 블루투스 모듈 핀 설정
int btRxPin = 12; // HC-06 RX 핀 - Arduino D13
int btTxPin = 13; // HC-06 TX 핀 - Arduino D12


SoftwareSerial bluetoothSerial(btRxPin, btTxPin); // 소프트웨어 시리얼 객체 생성


int speed = 255; // 모터 속도


void setup() {
  bluetoothSerial.begin(9600); // 블루투스 통신 시작
  pinMode(A_1A, OUTPUT);
  pinMode(A_1B, OUTPUT);
  pinMode(B_1A, OUTPUT);
  pinMode(B_2A, OUTPUT);
  digitalWrite(A_1A, LOW);
  digitalWrite(A_1B, LOW);
  digitalWrite(B_1A, LOW);
  digitalWrite(B_2A, LOW);
  Serial.begin(9600);
}


void loop() {
  char cmd = 0;


  // Bluetooth 통신을 통해 명령 받기
  if (bluetoothSerial.available()) {
    cmd = bluetoothSerial.read();
  }


  // 시리얼 통신을 통해 명령 받기
  if (Serial.available()) {
    cmd = Serial.read();
  }


  // 명령에 따라 모터 제어
  switch (cmd) {
    case 'f':
      analogWrite(A_1A, speed);
      analogWrite(A_1B, 0);
      analogWrite(B_1A, 0);
      analogWrite(B_2A, speed); // B_1B를 B_2A로 변경
      break;
    case 'b':
      analogWrite(A_1A, 0);
      analogWrite(A_1B, speed);
      analogWrite(B_1A, speed);
      analogWrite(B_2A, 0); // B_1B를 B_2A로 변경
      break;
    case 'r':
      // 오른쪽 명령 시 A 모터는 정회전, B 모터는 역회전
      analogWrite(A_1A, 0);
      analogWrite(A_1B, speed);
      analogWrite(B_1A, 0);
      analogWrite(B_2A, speed); // B_1B를 B_2A로 변경
      break;
    case 'l':
      // 왼쪽 명령 시 A 모터는 역회전, B 모터는 정회전
      analogWrite(A_1A, speed);
      analogWrite(A_1B, 0);
      analogWrite(B_1A, speed);
      analogWrite(B_2A, 0); // B_1B를 B_2A로 변경
      break;
    case 's':
      analogWrite(A_1A, 0);
      analogWrite(A_1B, 0);
      analogWrite(B_1A, 0);
      analogWrite(B_2A, 0); // B_1B를 B_2A로 변경
      break;
  }
}

6 Comments
code master 2024.03.06 18:43  
//라이브러리 포함
#include <SoftwareSerial.h>
SoftwareSerial 라이브러리를 사용하여 소프트웨어 시리얼 통신을 설정합니다. 이를 통해 디지털 핀을 시리얼 통신 핀으로 사용할 수 있습니다.
code master 2024.03.06 18:44  
int A_1A = 6;
int A_1B = 11;
int B_1A = 3;
int B_1B = 5;
int btRxPin = 12;
int btTxPin = 13;
A와 B 모터의 제어 핀, 그리고 Bluetooth 모듈의 RX 및 TX 핀을 설정합니다.
code master 2024.03.06 18:45  
SoftwareSerial bluetoothSerial(btRxPin, btTxPin);
Bluetooth 통신을 위한 소프트웨어 시리얼 객체를 생성
이 객체는 HC-06 모듈과의 통신에 사용됨
cto메이커 2024.03.06 18:46  
int speed = 255;
모터의 속도를 설정합니다. PWM 신호를 사용하여 모터의 속도를 제어하므로 0부터 255까지의 값을 사용합니다.
Makerist 2024.03.06 18:48  
void setup() {
  bluetoothSerial.begin(9600);
  pinMode(A_1A, OUTPUT);
  pinMode(A_1B, OUTPUT);
  pinMode(B_1A, OUTPUT);
  pinMode(B_1B, OUTPUT);
  digitalWrite(A_1A, LOW);
  digitalWrite(A_1B, LOW);
  digitalWrite(B_1A, LOW);
  digitalWrite(B_1B, LOW);
  Serial.begin(9600);
}

초기 설정을 위한 함수입니다. Bluetooth 통신 및 각 모터 핀을 출력으로 설정하고, 초기 상태로 설정합니다.
Makerist 2024.03.06 18:49  
loop 함수
void loop() {
  char cmd = 0;
  if (bluetoothSerial.available()) {
    cmd = bluetoothSerial.read();
  }
  if (Serial.available()) {
    cmd = Serial.read();
  }
  switch (cmd) {
    case 'f':
      // 전진 명령
      // 모터 A와 B를 전진 방향으로 회전하도록 제어
      break;
    case 'b':
      // 후진 명령
      // 모터 A와 B를 후진 방향으로 회전하도록 제어
      break;
    case 'r':
      // 오른쪽 명령
      // 모터 A는 정회전, 모터 B는 역회전하도록 제어
      break;
    case 'l':
      // 왼쪽 명령
      // 모터 A는 역회전, 모터 B는 정회전하도록 제어
      break;
    case 's':
      // 정지 명령
      // 모터 A와 B를 정지시킴
      break;
  }
}

무한 루프에서 Bluetooth 통신을 통해 명령을 받아와 해당 명령에 따라 모터를 제어
'f'는 전진, 'b'는 후진, 'r'은 오른쪽으로 회전, 'l'은 왼쪽으로 회전, 's'는 정지
위의 설명을 통해 주어진 코드가 Bluetooth 모듈을 사용하여 시리얼 통신을 통해 모터를 제어하는 기능을 수행함.