M5Stack의 Joystick에서 WHILL Model CR을 움직여 보았습니다.

11550 단어 WHILLM5stack

소개



이 기사는 WHILL Advent Calendar 2018의 15 일째 기사입니다.

지난번처럼 좋아하는 M5Stack에서 WHILL을 움직여 본 시리즈입니다.

마지막 기사는 여기
M5Stack에서 WHILL Model CR의 전원을 ON/OFF해 보았다

이번에는 Joystick module에서 Model CR을 움직여 보겠습니다.


접속 방법이나 Model CR Arduino SDK (esp32) 의 사용 방법은 마지막 기사 를 참조해 주십시오.

주의점



이번 기사는 실제로 기체를 주행시키는 것이 됩니다.
Model CR은 사람도 탈 수 있는 이동성이므로 잘못된 조작으로 부상이나 물손상이 발생할 수 있습니다.
실제로 실시하는 경우는 자기 책임이며, 사고 등에 충분히 주의해 가 주세요.

위험하다고 생각하면,
- 전원 OFF
- 배터리 빼기
- RS232C 케이블 분리
- 기체를 들어 올려 뒷바퀴를 띄우십시오.
등 즉시 대응하십시오.

또, 최초의 시험으로 움직일 때는, 후륜을 띄운 상태로 실험하는 것이 추천입니다.


준비하는 것


  • WHILL Model CR
  • M5Stack
  • M5Stack Joystick module
  • M5Stack comm module(WANT)

  • comm module은 Joystick를 연결하는 데 유용합니다. 그렇지 않으면 I2C 포트에 연결하면 사용할 수 있습니다.

    연결하면 이렇게 됩니다.


    Joystick 제어 코딩



    Joystick module의 센서 값을 얻는 것은 M5Stack example의 Joystick 코드를 참조했습니다.

    Model CR 측은 Arduino SDK의 setJoystick(joy_x, joy_y) 함수를 사용하면 실제로 움직입니다.
    joy_x, joy_y는 -100 ~ 100 사이의 값을 설정합니다.
    전진 후진: joy_y
    좌우:joy_x
    됩니다.

    joystick module의 값은 중심 128 정도의 0 ~ 256 정도의 범위를 취하는 uint8_t의 값이 되었으므로,
    적당히 -100 ~ 100으로 변환합니다.

    구체적으로 코드는 다음과 같습니다.
    이 코드도 동작 보상을 한 것이 아니므로 참고하시는 분은 자기 책임으로 사용하십시오.

    M5Stack_whill_joystick_controller.ino
    #include <M5Stack.h>
    #include "WHILL.h"
    #include "Wire.h"
    
    #define JOY_ADDR 0x52
    
    uint8_t x_data;
    uint8_t y_data;
    uint8_t button_data;
    char data[100];
    
    const uint8_t NEUTRAL = 120;
    const int8_t MAX_TH = 100;
    const int8_t MIN_TH = 10;
    
    WHILL whill(&Serial2);
    
    bool is_power_on = false;
    
    void setup()
    {
      Serial.begin(115200);
      // Power ON Stabilizing...
      delay(500);
      M5.begin();
    
      Wire.begin(21, 22, 400000);
    }
    
    int8_t convertJoystick(uint8_t ext_joy)
    {
      int8_t conv_joy = ext_joy - NEUTRAL;
    
      if(conv_joy >= 0){
        if(abs(conv_joy) < MIN_TH) return 0;
        conv_joy -= MIN_TH; //offset;
        if(abs(conv_joy) >= MAX_TH) return MAX_TH;
        return conv_joy;
      }else{
        if(abs(conv_joy) < MIN_TH) return 0;
        conv_joy += MIN_TH; //offset;
        if(abs(conv_joy) >= MAX_TH) return -MAX_TH;  
        return conv_joy;
      }
    }
    
    void loop() {
      Wire.requestFrom(JOY_ADDR, 3);
      if (Wire.available()) {
        x_data = Wire.read();
        y_data = Wire.read();
        int8_t conv_y = convertJoystick(y_data);
        int8_t conv_x = convertJoystick(x_data);
        button_data = Wire.read();
    
        sprintf(data, "x:%d y:%d button:%d\n", conv_x, conv_y, button_data);
        Serial.print(data);
    
        if(button_data == 1){
          if(is_power_on){
            whill.setPower(false);
            is_power_on = false;
          }else{
            whill.setPower(true);
            is_power_on = true;
          }
        }else{
          whill.setJoystick(conv_x, conv_y);
        }
      }
       delay(10);
    }
    

    다음에, joystick 밀어넣으면 버튼이 되어 있었으므로, 그래서 전원 ON/OFF도 할 수 있도록 했습니다.

    실제로 움직이고 있는 모습입니다.
    타면서 찍었기 때문에 계속 보고 있으면 취하기 때문에 주의.

    M5Stack의 joystick module에서 WHILL Model CR을 움직여 보았다. #M5Stack #WHILL 피 c. 라고 r. 코 m / 이 gma d2 우지 8 — Katsushun89 (@katsushun89) 2018년 12월 14일


    Joystick가 잡히는 곳이 가끔 중심으로 돌아오지 않기 때문에 조금 무서웠습니다. (웃음)



    마지막으로



    마지막으로 M5Stack에서 Model CR을 움직여 보았습니다.

    SDK가 준비되어 있기 때문에 움직이는 것도 꽤 간단하게 할 수 있었습니다.

    코드도 첨부한 것+SDK뿐입니다.

    꼭 시도해보십시오.


    좋은 웹페이지 즐겨찾기