아래 시마 X5 드론과 NRF24L01+ 모듈이다. 설마 아두이노에 NRF24L01+ 모듈 연결 하여 시마 X5 조종기연결 될까?? 생각으로 인터넷을 폭풍 검색하기 시작했다. 드론은 몇년전에 알리에서 구매한 것이다.

<시마 X6&조정기 & NRF24L01+ 사진>


결론 부터 말하면 된다.^_____________^

https://forum.arduino.cc/index.php?topic=381589.0 <-구글에서 'syma x5 arduino' 검색

http://forum.arduino.cc/index.php?topic=385731.0 <- 관련 답변이 정리된 게시물

https://github.com/Suxsem/symaxrx <-소스와 함께 설명


This code decodes frames from the X5C-1, X11, X11C, X12... transmitter (blue or green led) with an arduino and a nrf24L01+ chip. NOT the old x5c! This code has not been tested enough and it is not super reliable. So don't use it with dangerous rc model as planes, helicopters, cars...


symaxrx-master.zip


아두이노로 송신기를 만들어도 되나 처음은 이것으로 해볼려고 한다.

블로그 이미지

김코치 나미쵸

컴퓨터 코치 김코치 컴퓨터 자격증 취득과 아는 힘의 즐거움을 드립니다. 나도 할 수 있다는 자신감은 덤으로 드립니다. 기초부터 실무까지 김코치를 찾아 주세요.

아래 사진은 드론 브러러쉬리스 모터 동작하기 위한 재료들이다.         

<브러쉬리스 모터를 돌리기 위한 재료들 사진>

------------------------------------

EMAX M2204 CW * 2, CWW * 2 

PDB DUAL BEC * 1

ESC 4 * 4

EX-C40(14.8V 1500mA)

아두이노 우노

------------------------------------


이 글을 쓰기까지 좌충우돌 한걸 고백한다. 나는 그냥 되겠지 하면서 인터넷에 있는걸 그냥 따라하면 될 줄 알았다. 다른 블로거게시판을 보면 브러쉬리스 모터를 돌리는데 까지 꽤 많은 시간걸린다는 글들을 봤다. 나는 많이는 아니여도 조금 걸렸다. 시간이 걸린 이유는 하나! 정확하게 알고 하면 괜찮은데 대충 알고 시작했기 때문이다!!!!!!!!!!!!!!!!!!!!!!!


드론을 보면 항상 모터에 변속기(ESC)가 달려 있다. 일반 코어리스 모터와는 다른 부분이다. 드론 모터를 동작 시킨다는 것을 정확하게 표현하면, '변속기를 제어하여 모터를 동작 시킨다.'라고 할 수 있다. 그래서 모터를 동작 시킬려면, 변속기 모터맞게 조정을 해야 한다. 그 후에 모터를 동작 하면 된다.


그럼 변속기 캘리브레이션(조정)을 해보자

1) 아두이노를 통하여 180 전송

2) 모터에 전원 연결

3) 소리가 나면 0 전송


정상적으로 될 경우아닐 경우를 아래의 동영상으로 확인 하자.

정상적이지 않을 경우

삐리삐리삐리 삐리 소리가 난다. 이 소리가 나면 정상적으로 캘리브레이션이 안된 경우다. 다시 해야 한다.


정상적인 경우

삐~~~ 삐 끝이다. 그리고 시리얼 모니터를 이용하여 숫자입력하면 그 숫자 만큼의 속도로 모터가 돈다.


이제 대략적으로 이렇게 하는 구나 큰그림을 기억하고 자세하게 해보자.

<소스코드 사진>


#include <Servo.h>


Servo esc_a;

int a = 0;


void setup() {

  Serial.begin(9600);

  esc_a.attach(6, 1000, 2000);

  esc_a.write(0);

}


void loop() {

  esc_a.write(a);


  Serial.print(a);

  Serial.println('\t');

}


void serialEvent()

{

  while (Serial.available()) {

    a = Serial.parseInt();

  }

}


위의 코드를 실행 시켜서 시리얼 모니터를 표시 한다.

<시리얼 모니터 사진>


현재 초기 값이 0이므로 0이 찍힌다. 그리고 하단 중간꼭 line ending없으로 체크해 준다. 그렇지 않으면 마지막에 10을 입력해도 0이 입력 되니 꼭 확인 한다. 그리고 배터리만 연결하지 않은 상태에서 아두이노 변속기를 연결 한다. 


캘리브레이션 하기

1)시리얼 모니터에서 180을 입력 하면 180 표시되는 것을 확인 한다.

2)모터에 전원을 연결 하자 마자 시리얼 모니터에 0을 입력 한다.

3)위의 동영상처럼 정상적으로 되었는지 아닌지 확인 한다.

4)정상적으로 됐을 경우 숫자를 입력 하면 모터가 돌고, 아닐 경우는 1번 부터 반복 한다.


간단해 보여도 처음 하는 사람한테는 역시나 하나하나가 어렵다. 나도 처음에 모터를 돌려야지만 생각했지만 생각해서 고생했지만, 아두이노, 변속기, 모터 사이의 관계를 알게 되니 그 다음 부터 쉽게 풀렸다. 그 처음 생각하니 바보 같다. 그냥 모터가 돌았다고 되는 줄 알았으니 말이다. 그때 모터는 돌았다. 돈거 뿐이지 제어가 되지 않았다. 모터도 고정안해서 사방으로 튕겨 책상에 기스가 났다.


이제 다음으로 가보자~

블로그 이미지

김코치 나미쵸

컴퓨터 코치 김코치 컴퓨터 자격증 취득과 아는 힘의 즐거움을 드립니다. 나도 할 수 있다는 자신감은 덤으로 드립니다. 기초부터 실무까지 김코치를 찾아 주세요.

<베이스 보드 사진>

내가 가지고 있는 드론 베이스 보드다. 그치만 안탑깝게도 오른쪽 상단에 있는 MOSFET이 타버려서 제대로 동작을 안한다. 

AO3400 AO3400A A09T N-Channel MOSFET SOT-23 <- 일단 알리에서 구매하여 지금 오고 있다. 다른 보드로 이미 구동은 해 봤다. 오면 바로 교체를 해야 겠다.


<CORELESS MOTOR CIRCUIT 사진>


그리고 문제는 내가 가진 PDB가 5V인데 드론베이스보드에서 사용하는건 3.7이다. 레귤레이터 회로 구성을 해야 하나 보다. 그럼 찾아서 해봐야 겠다.

블로그 이미지

김코치 나미쵸

컴퓨터 코치 김코치 컴퓨터 자격증 취득과 아는 힘의 즐거움을 드립니다. 나도 할 수 있다는 자신감은 덤으로 드립니다. 기초부터 실무까지 김코치를 찾아 주세요.

꽤 오래 전에 재미있는 제품을 봤다. 3DCONNEXION의 SpaceNavigator다. 3D 모델링을 할때 쓰는 제품으로 오브젝트를 이리 돌리고 저리 돌리게 해주는 편리한 제품이다. 제품자세히보기 <- 클릭


사서 써볼려고 하니 비싸다. 그래서 만들어 보려고 한다. 재료는 사진과 같다.

<주요 재료 사진>


주요 재료

 

 ARDUINO LEONARDO

 1

 ENCODER

 1

 JOYSTICK

 1

 MPU6050

 1


며칠동안 조이스틱기능과 엔코더 기능이 같이 있는 제품을 찾아 봤는데, 내가 원하는 제품은 너무 비싸다. 

게임용 조이스틱은 엔코더기능과 조이스틱 기능은 있지만 조이스틱 기능에서 방향만 알려줄뿐 크기까지 포함된 벡터 값을 알 수 없다. 앗 쓰면서 그 기능을 할 수 있는 재료가 생각 났다!!!!!!!!!!!!!!!!!!!!!!!!!!!! 그것은 드론에 정말 많이 쓰이는 자이로 센서!!!!!!!!!!!!!!! 왜 지금까지 그 생각을 하지 못했을까!!!!!!! 생각해보면 조이스틱과 엔코더만 생각한 나머지 그 외에 재료에 대해서는 생각 자체를 못한거 같다. 이 바보 . 그래도 신난다 ㅋ


아두이노 제품중 레오나르도선택이유 키보드/마우스 라이브러리사용할 수 있는 보드이기 때문이다. ATMEGA32U4 칩을 가진 아두이노라면 사용가능하다. 이에 관련하여 검색을 하다 보면 이것으로 게임기 패드를 만들어 파는 사람도 있다. 특히 최근에는 에임봇을 만들어 파는 사람도 있다. 또한 커스텀 키보드 보드를 살펴 보면 이 칩이 있다. 


ENCODERJOYSTICK은 아두이노 키트에 들어있는 것이다. 이 두개부품으로 SpaceNavigator기능흉내 내보려고 한다. 만들어 가면서 부닺히는 문제는 그때 그때 풀어가면 될거라 생각 한다. 지금 계획으로는 거의 대부분 구현 가능할거라고 생각 된다. 그럼 시작해보자!


 






블로그 이미지

김코치 나미쵸

컴퓨터 코치 김코치 컴퓨터 자격증 취득과 아는 힘의 즐거움을 드립니다. 나도 할 수 있다는 자신감은 덤으로 드립니다. 기초부터 실무까지 김코치를 찾아 주세요.

중고나라에서 SKYRC IMAX B6 MINI 충전기를 구매하면서 몇개의 드론 부품도 같이 구매를 했다. 구매 당시에는 드론은 날려봤지만, 드론에 대해서 자세하게는 몰랐다. 그냥 그 부품이면 날릴 수 있을거라 생각하고 구매를 했는데...... 못나른다...... 부품 조합이 전혀 맞지 않는다 ㅠㅠ.


------------------------------------

EMAX M2204 CW * 2, CWW * 2 

ESC 4 * 4

PDB DUAL BEC * 1

EX-C40(14.8V 1500mA) * 2 

------------------------------------

DADUINO 드론 베이스 보드 * 1

3.7V 500Ah 25C * 1

Arduino Nano V3.0 * 1

Arduino Pro Micro * 1

HM-10 블루투스 * 2

MPU-6050 * 2

------------------------------------


역시 몰랐으니 샀던 거다...... 그래 그런거다 ㅠㅠ 판매자가 레이싱 드론을 아두이노로 만들려고 구매한 재료이라고 한다.

최소한으로 해서 드론을 만들려면 다음과 같은 재료가 필요하다.


프레임 (X)

  QAV-R 220 <-구매 

  F450 Multi-Copter Quadcopter Rack Frame  <-구매

FC - 비행컨드롤러(자이로센서 포함) (O)

모터 (O)

ESC - 변속기 (O)

PDB - 전원 분배기 (O)

배터리 (O)

조정기 (O)


오른쪽에 O,X 표시된 부분은 중고나라에서 구매한 재료와 일치되는걸 표시한것인데, 위 내용대로라면 프레임만 있으면 되는듯 하다.

그러나!!!!!!

1) Daduino 드론 베이스에 마춰 날리고 싶다면 다두이노 사이트에 가서 드론 바디 + 기어타입 드론 모터 + 지지대 구매해야 한다. +58,000

    coreless motor를 써야 하기 때문에 BL모터를 사용할 수 없다.

2) 모터에 맞혀서 할려면 프레임 + FC + 조정기를 구매해야 한다. + ㅠㅠ

    

원래 있던 조합으로 억지로 만들면 만들 수는 있을거 같다...... 프래임을 사서 고정만 잘 시키면 말이다 ......


그래서 몇개목표를 세웠다.

1)Daduino 드론 베이스 보드 기반으로 아두이노 드론을 만든다

  아두이노CORELESS 모터 구동 - 해결

                  BL모터 구동            - 해결

  MPU-6050 데이터 처리

  HM-10 제어

  PID 공부

  Processing 공부

2) 원래 구매했던 재료 조합으로 레이싱 드론을 만든다.

  블루투스 제어 말고 NRF24L01제어 한다. 조종기도 만든다. - 해결

  FPV 기능을 넣는다.


3) APM2.8 + F450급 드론을 일리에서 구매하여 만들어 재미있게 가지고 논다.


3번의 경우 지금 당장이라도 할 수 있으나 잠시 미뤄두고 1번부터 해볼까 한다.


그럼 시작해 보자.

블로그 이미지

김코치 나미쵸

컴퓨터 코치 김코치 컴퓨터 자격증 취득과 아는 힘의 즐거움을 드립니다. 나도 할 수 있다는 자신감은 덤으로 드립니다. 기초부터 실무까지 김코치를 찾아 주세요.

일단 무슨 기능인지 결과를 먼저 보자

<기능 추가한 동영상>

그렇다. 그냥 뺑글뺑글 도는 기능 추가한 것이다. 소스 코드에는 여러가지 흔적이 있지만 그냥 이걸 보여주는 걸로 만족 ㅋ


아래는 작업 과정이다.

이랬던 뒷면이 

<오크통뱅크 상판 뒷면_작업 하기전>

이렇게 바뀌었다. --.--

<오크통뱅크 상판 뒷면_작업 후>

막손이라 정리가 잘 안된다. <- 잘 안된거 숨기기 위해 글씨는 작게......


원래 오크통네오픽셀아두이노 나노가 들어갈 자리는 없다. 그런데 들어가 있다. 이유는 간단하다.

처음 배터리팩과 오크통을 구매할 당시 어거지로 넣다가 뺄수도 없고 완벽하게 넣을 수도 없는 중간에

걸린 상황이 되어 눈물(ㅠㅠ)을 머금고 오크통을 분해 했다. 조립하는 과정에서 공간을 만든다고 바닥을

아래의 사진처럼 만들었다.

<오크통뱅크 바닥>


분해된 오크통 재활용 하다보니 공간이 남아서 아두이노 나노를 넣을수 있었다. 그러나 꽉 찬다...... 


이제 소스 코드를 보자!

기본에 있는 예제 소스를 기본으로 몇개 추가 하고 수정 했다.


#include <Adafruit_NeoPixel.h>

//#include <MsTimer2.h>

#ifdef __AVR__

  #include <avr/power.h>

#endif


#define PIN 6


// Parameter 1 = number of pixels in strip

// Parameter 2 = Arduino pin number (most are valid)

// Parameter 3 = pixel type flags, add together as needed:

//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)

//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)

//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)

//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)

//   NEO_RGBW    Pixels are wired for RGBW bitstream (NeoPixel RGBW products)

Adafruit_NeoPixel strip = Adafruit_NeoPixel(13, PIN, NEO_GRB + NEO_KHZ800);

uint32_t oakStrip[13] = {strip.Color(0,255,0) //초록색

                        ,strip.Color(0,255,0)       //단색으로 돌릴대는 이부분 수정해 주면 된다. 적어도 앞 부분에 5개 정도 색을 지정해야

                        ,strip.Color(0,255,0)       //이쁘게 나온다.

                        ,strip.Color(0,255,0)

                        ,strip.Color(0,255,0)

                        ,strip.Color(0,0,0)

                        ,strip.Color(0,0,0)

                        ,strip.Color(0,0,0)

                        ,strip.Color(0,0,0)

                        ,strip.Color(0,0,0)

                        ,strip.Color(0,0,0)

                        ,strip.Color(0,0,0)

                        ,strip.Color(0,0,0)

};

int onStrip[13] = {1,1,1,1,1,0,0,0,0,0,0,0,0}; //

int currentPos = 10;

int fade = 2;


// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across

// pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input

// and minimize distance between Arduino and first pixel.  Avoid connecting

// on a live circuit...if you must, connect GND first.


void setup() {

  // This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket

  #if defined (__AVR_ATtiny85__)

    if (F_CPU == 16000000) clock_prescale_set(clock_div_1);

  #endif

  // End of trinket special code


  Serial.begin(9600);

  strip.begin();

  strip.show(); // Initialize all pixels to 'off'

  //MsTimer2::set(60, onFade); //숨쉬는 기능을 적용할려면 이 부분 주석을 풀어 부면 된다.

  //MsTimer2::start();

}


void loop() {

  

  //onColor(); //단색으로 돌리기

  

  rainbow(60); //무지개색으로 돌리기


}


void onColor()

{

  for(int j = 13 ; j > 0 ; j--){

    for(int i = 0 ; i < strip.numPixels() ; i++)

    {

     strip.setPixelColor(i, oakStrip[(j+i)%strip.numPixels()]);

    }

    strip.show();

    delay(60);

  }

}


void rainbow(uint8_t wait) {

  uint16_t i, j;


  //strip.setBrightness(0);

  //currentPos = 0;


  for(j=0; j<256; j++) {

    for(i=0; i<strip.numPixels(); i++) {

      if(onStrip[(j+i)%13] == 1)

      {

        strip.setPixelColor(i, Wheel((i+j) & 255));

      }

      else

      {

        strip.setPixelColor(i, 0);

      }

    }

    strip.show();

    delay(wait);

  }

}


// Input a value 0 to 255 to get a color value.

// The colours are a transition r - g - b - back to r.

uint32_t Wheel(byte WheelPos) {

  WheelPos = 255 - WheelPos;

  if(WheelPos < 85) {

    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);

  }

  if(WheelPos < 170) {

    WheelPos -= 85;

    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);

  }

  WheelPos -= 170;

  return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);

}


void onFade() // 숨시기 기능 함수

{

  if( currentPos < 3 || currentPos > 125 )

  {

    fade = fade * (-1);

  }

  currentPos = currentPos + fade;

  strip.setBrightness(currentPos);

  Serial.println(currentPos);

}


소스코드는 이렇다. 그냥 쓰면 된다. 더 좋은 방법이 있다면 댓글로 살짝 알려 줬으면 좋겠다. 그래야 나도 보고 배우니까^^

여기에 추가 기능 하다 더 넣고 싶은게 있다. 배터리 전압을 체크 하여 배터리 전압대응하는 색으로 표시하는 기능이다.

mcu 자체적으로 내부 전압을 알수 있다고 하는데...... 검색해봐야 겠다.


오크통뱅크 자료는 에다이카페에 있다. 


___LED.ino

Adafruit_NeoPixel-master.zip


블로그 이미지

김코치 나미쵸

컴퓨터 코치 김코치 컴퓨터 자격증 취득과 아는 힘의 즐거움을 드립니다. 나도 할 수 있다는 자신감은 덤으로 드립니다. 기초부터 실무까지 김코치를 찾아 주세요.

<인두기 사진>

내가 주력으로 사용하는 오크통 무선 인두기다. 주력이 된 이유는 언제든 편하게 꺼내서 쓸 수 있기 때문이다.

이전에 쓰던 인두기는 하코 FX951 디지털 인두기인데, 한번 사용할려고 하면 꺼내서 설치해야 하는 번거로움

있다. 오크통 무선 인두기를 만들어 사용하면서, 무선과 유선의 편안함의 차이를 확실하게 느끼고 있다.

 

만들게 된 사연은 간단하다. 인터넷 서핑 중 오크통 무선 인두기 사진을 보게 되었는데, 눈에 확 띄었다. 그리고

바로 에다이 카페를 가입하고, 충분한 공부 없이 무작정 시작했다. 중간에 몇몇 문제에 부닺혔지만, 하나씩 해결하여

위 사진의 오크통 무선 인두기를 완성했다.

 

<인두기 재료 사진>

 사진은 재료들이다. 관련 자료는 이곳에서 확인하면 된다. 그리고 취미생활로 땜질을 하는 사람이라면 추천한다.

블로그 이미지

김코치 나미쵸

컴퓨터 코치 김코치 컴퓨터 자격증 취득과 아는 힘의 즐거움을 드립니다. 나도 할 수 있다는 자신감은 덤으로 드립니다. 기초부터 실무까지 김코치를 찾아 주세요.