스위치를 누를 때 가속도 값을 Bluetooth로 전송

※이 기사는, 「LSM9DS1로 가속도 값을 직렬로 인쇄」를 전제로 하고 있습니다.

제스처 게임을 목표로 하고 있으므로,
  • 무선 통신 가능
  • 동작 잘라내기

  • 필수적입니다.
    동작의 잘라내기는 역치를 지정해 하는 것으로 해결할 수 있습니다만, 이번은 Wii의 볼링을 견습해 버튼(스위치)로 잘라내고 싶습니다.
    스위치를 누르고 있는 동안의 움직임을 제스처로 인식합니다.

    회로



    이런 느낌↓



    코드



    acc_ble.ino
    #include <SparkFunLSM9DS1.h>
    #include "BluetoothSerial.h"
    
    #define LSM9DS1_M 0x1E
    #define LSM9DS1_AG 0x6B
    #define SW_PIN 7 //pin番号を指定する
    
    LSM9DS1 imu;
    BluetoothSerial SerialBT;
    
    float x,y,z;
    uint16_t connectionState = 0;
    
    void setup()
    {
      Serial.begin(115200);
      SerialBT.begin("ESP32"); //Bluetoothの名前を指定
      pinMode(SW_PIN, INPUT);
    
      imu.settings.device.commInterface = IMU_MODE_I2C;
      imu.settings.device.mAddress = LSM9DS1_M;
      imu.settings.device.agAddress = LSM9DS1_AG;
      if (connectionState == 0)
      {
        connectionState = imu.begin();
        while (connectionState == 0)
        {
          Serial.println("Failed to communicate with LSM9DS1.");
          Serial.println("Double-check wiring.");
          Serial.println("Default settings in this sketch will "
                         "work for an out of the box LSM9DS1 "
                         "Breakout, but may need to be modified "
                         "if the board jumpers are.");
          Serial.print("Connection Status: ");
          Serial.println(imu.begin());
          delay(1000);
          connectionState = imu.begin();
          Serial.println("------------------------------------------------------\n");
        }if(connectionState!=1){
          Serial.print("connectionState: ");
          Serial.println(connectionState);
        }
      }
    }
    
    
    void loop()
    {
      imu.readAccel();
      x=imu.calcAccel(imu.ax)*10;
      y=imu.calcAccel(imu.ay)*10;
      z=imu.calcAccel(imu.az)*10;
      if(digitalRead(SW_PIN) == 1){ //スイッチが押されたら1、離すと0
        SerialBT.print("x=");
        SerialBT.print(x);
        SerialBT.print(", y=");
        SerialBT.print(y);
        SerialBT.print(", z=");
        SerialBT.println(z);
      }
      delay(500);
    }
    

    Bluetooth 연결



    쓰기가 끝나면 ESP32는 블루투스 연결을 기다리는 상태가 됩니다.
    PC측에서 접속해 봅시다.
  • "설정"→ "장치"→ "Bluetooth 및 기타 장치"
  • 상단의 "Bluetooth 또는 기타 장치 추가"를 클릭
  • "Bluetooth"를 클릭하고 "ESP32"를 찾아 클릭
  • 일람에 "ESP32 페어링 완료"라고 나오면 접속 완료

  • 완료되면 PC와 분리하여 모바일 배터리 등의 전원에 연결되어 있으면 괜찮습니다.

    수신된 값 보기



    방법은 몇 가지 있습니다만, 모처럼 Arduino IDE를 사용하고 있으므로 그쪽의 시리얼 모니터(돋보기의 아이콘)로 봅시다.
    방금 쓴 포트인 채로 되어 있으므로, "도구"→ "시리얼 포트"에서 Bluetooth의 포트(얼마 전 아니었던 포트)를 찾아 변경합시다.

    이상입니다!
    뭔가 모르는 것이 있으면 질문 부탁!

    좋은 웹페이지 즐겨찾기