RC카란?
RC카의 RC란, 라디오 컨트롤(Radio Control)의 약자로 전파에 의한 무선조종을 의미합니다.
무선조종이라는 한마디의 단어는 그 적용범위가 대단히 넓어서 유아용 완구에서부터 군사위성에 이르기까지의 여러 가지 것들이 무선으로 컨트롤되고 있습니다.
인용: http://sunny1412.com/rc/beginner/rc_is.html
스마트카란?
스마트카는 전기 전자 통신 기술(ICT)을 자동차 기술과 융합하여 커넥티드 카 및 무인자동차를 의미합니다.
이번에 만들 RC카는 스마트카이고, 아두이노 기반이다.
https://www.bodnara.co.kr/bbs/article.html?num=130155
사실 엔비디이아는 이미 초당 최대 24조의 처리 능력을 가진 인공지능(슈퍼컴퓨터)을 탑재한 차로 전기자동차 경주 대회
포뮬러 E에 출전한 바가 있는데, 우리가 쓰는 아두이노는 이정도의 괴물급 성능은 못 내지만 흉내는 낼 수 있는 정도이다.
(에초에 규모가 몇억 배 다름)
준비물
아두이노 우노 1개
https://eduino.kr/product/detail.html?product_no=59&cate_no=24&display_group=2
아두이노 센서 확장 쉴드 1개
https://eduino.kr/product/detail.html?product_no=115&cate_no=25&display_group=1
아두이노 우노용 USB 케이블 1개
바퀴 4개
바디 프레임 2개
9V 배터리 홀더 1개
1.5V 베터리 홀더 1개
점퍼 케이블 암-수 20CM 1세트
https://eduino.kr/product/detail.html?product_no=49&cate_no=71&display_group=1
점퍼케이블 암-암 20CM 1세트
https://eduino.kr/product/detail.html?product_no=107&cate_no=71&display_group=1
DC 모터 4개
초음파 센서 1개
적외선 리모컨 수신 모듈 1개
적외선 리모컨 1개
미니 브레드 보드 1개
3V 리튬 배터리 1개
케이블 타이 2개
DC 모터 드라이버 1개
초음파 센서 브라켓 1개
라인 트레이서 센서 3개
황동 서포트 1세트
https://eduino.kr/product/detail.html?product_no=103&cate_no=51&display_group=1
DC 모터 브라켓 4개
서보모터 SG90 1개
https://eduino.kr/product/detail.html?product_no=663&cate_no=55&display_group=1
https://eduino.kr/product/detail.html?product_no=614&cate_no=68&display_group=1
볼트/너트(M3) 1세트
https://eduino.kr/product/detail.html?product_no=447&cate_no=51&display_group=1
총정리 링크: https://eduino.kr/product/detail.html?product_no=80&cate_no=97&display_group=1
웬만해선 에듀이노에서 세트로 구매하는 게 좋다.(협찬 아님)
조립기
1층, 2층 구성이다. 바퀴를 굴릴 모터 4개와 그것을 조절하는 기판이 1층 그리고 아두이노와 확장 센서 등이 2층에 위치.
확장 쉴드에 점퍼 케이블 연결하는 게 좀 난이도가 있다. 힘들다.
조립 후(완성)
완성하였다. 이름은 간단히 '붕붕이'로 하자.
완성된 붕붕이의 전면이다. 밑에 빨간 조명은 라인 트레이서 3개에서 빛나는 것이다.
1층에 위치한 브레드 보드에는 적외선 리모컨 모듈이 달려있다.
블루투스(BT) 모듈은 2층에 그냥 노출되어있다. (선정리는 귀찮아서 안 한 게 아님, 줄이 긴 건 길고 짧은 건 짧음)
이래 보여도 붕붕이는 첨단이다.
블루투스로도 조정 가능하고 적외선 리모컨으로도 조정 가능하다.
라인트레이서로 라인 만들면 라인을 따라가는 것도 가능하고,
앞에 초음파 센서로 장애물 감지도 가능하다!
무엇보다 중요한 것은 속도가 은근히 빠르고 힘도 세다는 것이다.(생각보다)
좌회전 우회전 방식은 왼쪽 바퀴 두 개가 멈추면 우회전 오른쪽 바퀴 두개가 멈추면 좌회전하는 방식이다.(동영상 참조)
내가 붕붕이에 코드 적용할 것은 블루투스 조정이다.
개인 스마트폰 (안드로이드만 가능)의 아두이노 블루투스 조종 앱으로 페어링 및 조종이 가능하다.
코드 참조 블로그
https://steemit.com/kr-arduino/@codingman/serial-string
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=5497
https://www.arduino.cc/reference/ko/language/functions/digital-io/digitalwrite/
https://www.arduino.cc/reference/ko/language/functions/analog-io/analogwrite/
https://www.arduino.cc/reference/ko/language/functions/digital-io/pinmode/
https://stackoverflow.com/questions/21447332/increment-i-i-and-i-1
(제일 많이 참조)
https://deneb21.tistory.com/311
http://www.ntrexgo.com/archives/30243
https://steemit.com/kr-arduino/@codingman/2-rc-bluetooth
코드는 이렇게
* 명령
* 1. 블루투스 w
* -> FORWARD 전진
* 2. 블루투스 s
* -> BackWARD 후진
* 3. 블루투스 a
* -> left 좌회전
* 4. 블루투스 d
* -> right 우회전
* 5. 블루투스 u
* -> BREAK 정지
*/
#include <SoftwareSerial.h>
#define BT_RXD 3
#define BT_TXD 4
SoftwareSerial bluetooth(BT_RXD, BT_TXD);
void controllerByBTCommand(char szBTCmd);
int RMEpin = 5;
int RM1pin = 8;
int RM2pin = 9;
int LM3pin = 10;
int LM4pin = 11;
int LMEpin = 6;
int CSPEED = 153;
int PVSPEED= 0;
#define FORWARD 1
#define BACKWARD 2
#define LEFT 3
#define RIGHT 4
#define BREAK 5
char CARDIR= 0;
void CARGo();
void CARBACk();
void CARBREAk();
void CARLEFT();
void CARIGHT();
void CARUDT();
void SERVOROT1();
void SERVOROT2();
int cnt =0;
void setup() {
pinMode(RMEpin, OUTPUT);
pinMode(RM1pin, OUTPUT);
pinMode(RM2pin, OUTPUT);
pinMode(LM3pin, OUTPUT);
pinMode(LM4pin, OUTPUT);
pinMode(LMEpin, OUTPUT);
Serial.begin(9600);
bluetooth.begin(9600);
digitalWrite(RMEpin, HIGH);
digitalWrite(LMEpin, HIGH);
}
void CARUDT()
{
if(CARDIR== FORWARD)
CARGo();
else if(CARDIR== BACKWARD)
CARBACk();
else if(CARDIR== LEFT)
CARLEFT();
else if(CARDIR== RIGHT)
CARIGHT();
else if(CARDIR== BREAK)
CARBREAk();
}
void CARGo()
{
digitalWrite(RM1pin, HIGH);
digitalWrite(RM2pin, LOW);
digitalWrite(LM3pin, HIGH);
digitalWrite(LM4pin, LOW);
for(int i=PREVSPEED; i<=CSPEED; i=i+5){
analogWrite(RMEpin, i);
analogWrite(LMEpin, i);
delay(20);
}
PVSPEED= CSPEED;
}
void CARBACk()
{
digitalWrite(RM1pin, LOW);
digitalWrite(RM2pin, HIGH);
digitalWrite(LM3pin, LOW);
digitalWrite(LM4pin, HIGH);
for(int i=PREVSPEED; i<=CSPEED; i=i+5){
analogWrite(RMEpin, i);
analogWrite(LMEpin, i);
delay(20);
}
PVSPEED= CSPEED;
}
void CARLEFT()
{
digitalWrite(RM1pin, HIGH);
digitalWrite(RM2pin, LOW);
digitalWrite(LM3pin, HIGH);
digitalWrite(LM4pin, LOW);
for(int i=PREVSPEED; i<=CSPEED; i=i+5){
analogWrite(RMEpin, i*1.4);
analogWrite(LMEpin, i*0.2);
delay(50);
}
PVSPEED= CSPEED;
}
void CARIGHT()
{
digitalWrite(RM1pin, HIGH);
digitalWrite(RM2pin, LOW);
digitalWrite(LM3pin, HIGH);
digitalWrite(LM4pin, LOW);
for(int i=PREVSPEED; i<=CSPEED; i=i+5){
analogWrite(RMEpin, i*0.2);
analogWrite(LMEpin, i*1.4);
delay(50);
}
PVSPEED= CSPEED;
}
void CARBREAk()
{
if(CARDIR== FORWARD || CARDIR== LEFT || CARDIR== RIGHT){
for(int i=CSPEED; i>=0; i=i-5){
analogWrite(RMEpin, i);
analogWrite(LMEpin, i);
delay(20);
}
}else if(CARDIR== BACKWARD){
for(int i=CSPEED; i>=0; i=i-5){
analogWrite(RMEpin, i);
analogWrite(LMEpin, i);
delay(20);
}
}
digitalWrite(RMEpin, LOW);
digitalWrite(LMEpin, LOW);
}
void loop() {
char szRecvCmd = bluetooth.read();
controllerByBTCommand(szRecvCmd);
CARUDT();
if((cnt % 20) == 0){
cnt = 0;
delay(10);
}
else if((cnt % 10) == 0){
delay(10);
}
cnt++;
}
void controllerByBTCommand(char szBTCmd)
{
if (szBTCmd == '+')
{
PVSPEED= CSPEED;
CSPEED += 20;
CSPEED = min(CSPEED, 255);
Serial.print("SPD UP ");
Serial.println(CSPEED);
}
else
if (szBTCmd == '-')
{
PVSPEED= CSPEED;
CSPEED -= 20;
CSPEED = max(CSPEED, 50);
Serial.print("SPD DOWN ");
Serial.println(CSPEED);
}
else if(szBTCmd == 'w')
CARDIR= FORWARD;
else if(szBTCmd == 'u')
CARDIR= BREAK;
else if(szBTCmd == 's')
CARDIR= BACKWARD;
else if(szBTCmd == 'a')
CARDIR= LEFT;
else if(szBTCmd == 'd')
CARDIR= RIGHT;
}
참조할 자료가 많았다. (구글에 보면 참조할 자료가 널렸다.)
코드가 좀 길다.
코딩하고 업로드하면
플레이스토어에서 아두이노 블루투스 컨트롤러를 깔자
컨트롤러 모드를 선택한 뒤
키 지정을 해주자
전진: W
후진: S
좌회전: A
우회전: D
브레이크(정지) U
▲ 속도 올리기: +
X 속도 내리기: -
요렇게 키 지정을 해주자.
동영상
성공적으로 붕붕이가 명령대로 움직이는 걸 확인할 수 있다. (사용한 기종: Samsung Galaxy S10 5G / SM-G977)
아두이노 조종 앱에서 블루투스 장치 스캔해도 안 뜰 때 팁.
1. 스마트폰 설정 -> 블루투스 가서 HC-06을 찾는다.
2. 초기 비밀번호 1234 입력 후 페어링 한다.
3. 앱에서 HC-06을 리스트에서 찾은 후 열기
다른 조종 시연 영상 내꺼아님! (출처: 에듀이노 유튜브)
https://www.youtube.com/watch?v=JFUmgpiyXcc
부품 구매는 에듀이노에서 하였다.
다시 링크 낭낭하게 드림.
https://eduino.kr/product/detail.html?product_no=80&cate_no=97&display_group=1
이렇게 블루투스로 움직이는 붕붕이를 만들었다.
붕붕이의 활용 방법은 무궁무진한데(?) 그중 젤 하고 싶은 것은 온습도 센서와 미세먼지 측정기를 달아서
짭-기상청-붕붕이로 재탄생시키고 싶다.
그렇게 되면 붕붕이가 할 수 있는 기능을 열거하자면
{
미세먼지 측정이 가능하면서도 온습도 측정을 하면서도 라인을 따라갈 수 있으면서 초음파로 장애물을 회피하고
속도를 단계별로 조절할 수 있으면서 전, 후, 좌, 우로 움직일 수 있으면서 AA 배터리 6개 정도로 움직일 수 있으며 조종을 블루투스 및 적외선 리모컨 둘 중 선택하여 할 수 있는 그러한!
}
스마트카-붕붕이 되시겠다.
결론: 추후 장치 업데이트가 기대되는 발전 가능성이 매우 높은 스마트카 붕붕이를 만들었다.
조립 난이도: ★★★★☆
코드 난이도(?): ★★★☆☆
성취감: 조립하며 고생한 만큼.
'포트폴리오' 카테고리의 다른 글
아두이노, 라즈베리파이, 비글본블랙 등 여러 보드의 비교 (0) | 2019.08.10 |
---|---|
5G 통신에 대한 소고 (0) | 2019.08.10 |
초간단 아두이노로 롤 점멸 빼기 (0) | 2019.08.07 |
아두이노 충격/진동 센서(SW-18010P) 활용(?)해보기 (1) | 2019.08.04 |
아두이노 자이로센서(MPU6050센서) 써보기 (5) | 2019.08.04 |