3:40
모터축이 들어가지 않도록 단단한 곳에 올려두고 누르기
납땜이 어려우면 전선만 연결해도 됨.
모터라고 쓰여진 점퍼선
/ vcc(나노5v핀), GND(나노 GND핀), 안쪽파랑선(나노D4핀), 바깥주황선(나노D2핀)
통신이라고 쓰여진 점퍼선
서보-배터리라고 쓰여진 점퍼선, 점퍼선 1개
서보모터의 빨간 점퍼선(나노의 VIN), 서보모터의 갈색선(GND), 서보모터의 주황색선(나노의 D9핀)
전원을 켰을 때 모터드라이버에 불이 들어오면 정상
조이스틱 잘 움직여지면 볼트 완전 체결
VCC -> 나노 3.3V 핀
GND -> 나노 GND핀
RXD핀 -> 나노 D8핀
TXD핀 -> 나노 D7핀
(송신부)TX파일 - 리모트컨트롤러
(수신부)RX파일 - RC카
//리모컨에 업로드
#include <SoftwareSerial.h> //소프트웨어시리얼 라이브러리 추가
#define joystick1 A0 //왼쪽 조이스틱 x축에 연결할 핀 번호 정의
#define joystick2 A1 //오른쪽 조이스틱 y축에 연결할 핀 번호 정의
SoftwareSerial HC12(7, 8);//(Tx,Rx) H12라는 소프트웨어 시리얼 포트를 만든다.
int data1, data2; // data1: x축(좌우) data2: y축(전후) 입력값을 저장할 변수 선언
void setup() {
//Serial.begin(9600); // Serial port to computer
HC12.begin(9600); //open Serial port to hc12
pinMode (joystick1, INPUT_PULLUP) ; // 입력핀 정의
pinMode (joystick2, INPUT_PULLUP) ;
}
void loop() {
data1 = map(analogRead (joystick1),0,1023,0,180) ;
data2 = map(analogRead (joystick2),0,1023,0,180) ;
//아날로그a0, a1핀 값을 10bit(2^10=1024) 분해능으로 읽어올 수 있다.
//읽어온 값을 map함수를 이용하여 0~180dml 값으로 바꿔준다.
HC12.print(data1); // 통신모듈을 통해 data1, data2값을 전송한다.
HC12.print(","); // 두 개의 값을 구분하기 위해 반드시 데이터 사이에 ','을 전송한다.
HC12.print(data2);
HC12.println(" ");//null. It tells you the end of the data. 전동되는 값의 끝부분을 확인하기 위해 null 전송.
//Serial.print(data1); //시리얼모니터를 이용하여 전송값을 확인할 수 있다.
//Serial.print(" ");
//Serial.print(data2);
//Serial.println(" ");
}
//rc카에 업로드
//#include <SoftwareSerial.h>
#include <Servo.h> //서보 라이브러리 추가(서보모터 컨트롤)
#define motorPin1 2 //DC모터 드라이버 핀 정의
#define motorPin2 4
#define servoPin 9 // 서보모터 핀 정의
String myData; //문자열 변수 선언, 송신부에서 받은 데이터를 문자열로 저장한다.
int data1, data2; // data1: 좌측조이스틱(좌우) data2: 우측조이스틱(전후)
int first_Position, second_Position; // 문자열에서 2개의 조이스틱 값을 추출하기 위한 변수 선언
//SoftwareSerial HC12(7,8);//Tx,Rx
//why? ->crash serial direct connection Tx->Rx, Rx->Tx
Servo myservo; //서보모터를 제어할 서보 object
void setup() {
Serial.begin(9600); //RX0, TX1 하드웨어 시리얼을 활성화 한다.
//HC12.begin(9600);
delay(1000);
myservo.attach(servoPin); // 핀9의 서보모터를 서보 object에 연결한다.
pinMode(motorPin1,OUTPUT); // 출력 핀 정의
pinMode(motorPin2,OUTPUT);
}
void loop()
{
if(Serial.available())
{
myData = Serial.readStringUntil('\n'); //송신기에서 받은 데이터(null문자가 나올때까지)를 문자열 변수에 저장한다.
//myData = HC12.readStringUntil('\n');
if(myData.length() > 0) //저장된 데이터가 확인되면
{
first_Position = myData.indexOf(','); //데이터 중 ','문자의 위치를 확인해서 first_Position 변수에 저장
data1 = myData.substring(0, first_Position).toInt(); // 데이터의 처음부터 ','위치까지의 문자열을 정수로 변환하여 data1에 저장
data2 = myData.substring(first_Position+1).toInt(); // 데이터의 ','위치 다음부터의 문자열을 정수로 변환하여 data2에 저장
//Serial.print(data1);
//Serial.print(" ");
//Serial.print(data2);
//Serial.println(" ");
//data2=map(data2,0,178,0,180);
myservo.write(data2) ; //data2의 변수에 저장되는 값으로 서보모터를 제어한다.
if(data1>80 && data1<100) //변수 data1에 저장된 값으로 DC모터를 제어
{
digitalWrite(motorPin1,LOW); //조이스틱이 가운데 있을 때 (정지)
digitalWrite(motorPin2,LOW);
}
if(data1>100)
{
digitalWrite(motorPin1,LOW); // 조이스틱을 위로 올렸을 때 (전진)
digitalWrite(motorPin2,HIGH); // 조이스틱을 위로 올렸을 때 후진하면(pin1, low로 pin 2, high로 수정)
}
if(data1<80 )
{
digitalWrite(motorPin1,HIGH); // 조이스틱을 아래로 내렸을 때(후진)
digitalWrite(motorPin2,LOW); // 조이스틱을 위로 올렸을 때 전진하면(pin1, high로 pin 2, low로 수정)
}
}
}
}
리모트컨트롤러(송신부) 전원을 켠다.
RC카(수신부)를 들고 전원을 켠다.
서보모터가 조금 움직인 뒤 멈춘다.
앞바퀴를 정면을 향하도록 한 뒤 서보모터 기어를 결합한다.
1. 휴대폰 블루투스 연결로 HC-06(아두이노 블루투스)연결
2. 앱을 열고 블루투스(HC-06) 선택하여 연결
3. CONTROLLER 실행
1. 원하는 버튼에 키 입력
2. 블루투스 시리얼 통신으로 입력값 확인
3. 입력값을 활용한 RC카 코딩
5:33