프로젝트

나도 메이커! 메이커스 여러분들의 작품/프로젝트를 공유하는 공간입니다.

조이스틱 센서 쉴드, nRF24L01를 사용하여 RC카 조종하기

2016-09-08 15:47:15

개요

 

코코아팹의 잇 제품들만 모아모아 만든 이번 프로젝트는 조이스틱 센서 쉴드와 새로 나온 RC카 키트를 사용하려 합니다.

핸드폰으로 하는것보다 확실히 RC카의 움직임이 부드러워 정교한 조종이 가능합니다.

 

 

RC카로 대결한다면 핸드폰으로 조종하는 RC카를 2대 1로 이길 자신이 생기네요

확실히 조이스틱이 들어가다보니 조종하는 재미가 다릅니다.

자 그럼 이 재미있는 프로젝트를 만들어 볼까요?

 

 

 

 

관련 튜토리얼

 

조이스틱 센서 쉴드 소개 : http://kocoafab.cc/tutorial/view/610

 

RC카 키트 1 : http://kocoafab.cc/tutorial/view/647

 

RC카 키트 2 :  http://kocoafab.cc/tutorial/view/648

 

nRF24L01 : http://kocoafab.cc/tutorial/view/578

 

 

 

부품 목록

 

NO 부품명 수량 상세설명
1 RC카 키트 1 오렌지보드 포함
2 오렌지보드 2 RC카 키트의 오렌지보드 포함
3 조이스틱 센서 쉴드 1  
4 nRF24L01 2  

 

오렌지보드는 총 단품팩 1개 + RC카 키트 속 오렌지 보드 = 2개의 오렌지 보드가 필요합니다.

 

 

 

 

 

하드웨어 메이킹

 

브레드보드 레이아웃

 

[조이스틱 센서 쉴드_ 조종기]

 

 

 

 

[Dip switch_설정]

 

 

 

 

 

[RC카]

 

 

 

회로도(스케메틱)

 

[조이스틱 센서 쉴드_ 조종기]

 

 

 

[RC카]

 

최근에 프리징 프로젝트를 올려주셔서 추가해서 사용하기 너무 좋네요~~~~^^

Fritzing 사용하기 - 소개 및 설치  http://kocoafab.cc/tutorial/view/652

Fritzing 사용하기 - 회로 그려보기 http://kocoafab.cc/tutorial/view/655​

 

 

 

위의 그림처럼 하셨나요???

조이스틱 쉴드 잘 끼워주세요~^^ 꼭 매뉴얼 참조하시기 바랍니다.

처음에 잘못 끼워서 망가트릴뻔했네요 

 

다 하셨으면 소스를 업로드 하겠습니다.

 

 

 

 

소프트웨어 코딩

 

 

 

TX_조이스틱 센서 쉴드 코드

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
 
#define CE_PIN 3
#define CSN_PIN 2


unsigned int joystick[3]={0,};


const uint64_t pipe = 0xE8E8F0F0E1LL;


//입출력핀 선언
unsigned char inputPin[5] = {A2, A3, A4, A5, 8};

RF24 radio(CE_PIN, CSN_PIN);


void setup(void)
{
  Serial.begin(9600);   //통신속도
  radio.begin();        //통신시작
  radio.setPALevel(RF24_PA_MIN); // LOW, MAX
  radio.openWritingPipe(pipe);
   //핀모드 입출력 설정
  for(char i = 0; i < 5; i++){
   pinMode(inputPin[i], INPUT); 
  }
  
 // for(int i = 0; i < 1; i++){
//   pinMode(outputPin[i], OUTPUT); 
 // }  
}


void loop(void)
{
 // radio.stopListening();
  //데이터저장

  
  //RED Button
  if(digitalRead(8) == LOW)
    joystick[2] = 0;
  else
    joystick[2] = 1;
    
  //x축 데이터 저장
  joystick[0] = analogRead(A0);

  //y축 데이터 저장
  joystick[1] = analogRead(A1);

  
  //시작 주소와 데이터 사이즈 전달
  for(int i= 0; i<3;i++){
    Serial.print("data");
    Serial.print(i);
    Serial.print(" : ");
    Serial.println(joystick[i]);
  }
  Serial.println("Send");  
  joystick[3]++;
  radio.write( joystick, sizeof(joystick) );
 // Serial.println("complete");
 //delay(1000);
}

 

 

 

 

RX_RC카 코드

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
 
#define CE_PIN 3
#define CSN_PIN 2


unsigned int joystick[3]={0,};


const uint64_t pipe = 0xE8E8F0F0E1LL;


//입출력핀 선언
unsigned char inputPin[5] = {A2, A3, A4, A5, 8};

RF24 radio(CE_PIN, CSN_PIN);


void setup(void)
{
  Serial.begin(9600);   //통신속도
  radio.begin();        //통신시작
  radio.setPALevel(RF24_PA_MIN); // LOW, MAX
  radio.openWritingPipe(pipe);
   //핀모드 입출력 설정
  for(char i = 0; i < 5; i++){
   pinMode(inputPin[i], INPUT); 
  }
  
 // for(int i = 0; i < 1; i++){
//   pinMode(outputPin[i], OUTPUT); 
 // }  
}


void loop(void)
{
 // radio.stopListening();
  //데이터저장

  
  //RED Button
  if(digitalRead(8) == LOW)
    joystick[2] = 0;
  else
    joystick[2] = 1;
    
  //x축 데이터 저장
  joystick[0] = analogRead(A0);

  //y축 데이터 저장
  joystick[1] = analogRead(A1);

  
  //시작 주소와 데이터 사이즈 전달
  for(int i= 0; i<3;i++){
    Serial.print("data");
    Serial.print(i);
    Serial.print(" : ");
    Serial.println(joystick[i]);
  }
  Serial.println("Send");  
  joystick[3]++;
  radio.write( joystick, sizeof(joystick) );
 // Serial.println("complete");
 //delay(1000);
}

 

 

소스도 잘 구분하여 업로드해야겠죠?

반대로 넣으시면 작동이 되지않습니다.

 

 

 

동영상

 

 

 

이번 프로젝트는 굳이 RC카 키트를 사용하지않으시더라도 nRF24L01 모듈을 사용해서 조이스틱을 무선으로 사용할 수 있는 방법을 알려드리는 거라보시면 되겠네요

조이스틱 쉴드를 오렌지 보드가 아닌 BLE나 WIFI보드를 이용하신다면 모듈을 굳이 사용 안하시고 더 간단히 사용하실 수 있으실 거라 생각합니다.

 

이러한 응용 프로젝트는 꼭 링크해드린 기초 튜토리얼을 읽어보시고 하시면 더욱 쉽고 이해하시기 편하실 겁니다.

이번에는 RC카로 보여드렸지만 RC배? 또는 드론을 조종하는 것도 재미있을것같네요~~~^^ 

 

다음은 더 유용한 컨텐츠로 찾아뵐게요~~~~ 

 

 

 

염소할배