かっこいいアームを作ってみた

今回余っている電子部品で子供向けのアームを作ってみました。
子供に見せてみましたが、あまり喜ばれなかった。。。

まぁそんなことはさておき以下に記録のため記載しておきます。

<h1>ハードウェア構成</h1>
以下の様に配線をしました。
使用部品は
・Arduino nano
・MPU-6050　加速度センサー
・MAX7219　LEDモジュール

<h1>プログラム</h1>
今回面倒くさかったのはMAX7219のライブラリのインストールです。
同じようなライブラリがあってどれを選択すればいいのかかなり迷いました。
（ライブラリのインストールは、ツール＞ライブラリを管理　から）
インストールしたライブラリは「LedControl」のはず・・・
色々入れたので多少混乱しています。
![コメント 2021-10-18 113736.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1339052/efec7071-45a0-8ec9-0437-49db34d1bf61.png)

```c
#include <Wire.h>
int16_t axRaw, ayRaw, azRaw, gxRaw, gyRaw, gzRaw, temperature;

#include <LedControl.h>
int DIN = 2;
int CS =  3;
int CLK = 4;

byte up1[8]=   {0x80,0x40,0x20,0x10,0x10,0x20,0x40,0x80};
byte up2[8]=   {0x40,0x20,0x10,0x08,0x08,0x10,0x20,0x40};
byte up3[8]=   {0x20,0x10,0x08,0x04,0x04,0x08,0x10,0x20};
byte up4[8]=   {0x10,0x08,0x04,0x02,0x02,0x04,0x08,0x10};
byte up5[8]=   {0x08,0x04,0x02,0x01,0x01,0x02,0x04,0x08};
byte up6[8]=   {0x04,0x02,0x01,0x80,0x80,0x01,0x02,0x04};
byte up7[8]=   {0x02,0x01,0x80,0x40,0x40,0x80,0x01,0x02};
byte up8[8]=   {0x01,0x80,0x40,0x20,0x20,0x40,0x80,0x01};

byte dw1[8]=   {0x01,0x02,0x04,0x08,0x08,0x04,0x02,0x01};
byte dw2[8]=   {0x02,0x04,0x08,0x10,0x10,0x08,0x04,0x02};
byte dw3[8]=   {0x04,0x08,0x10,0x20,0x20,0x10,0x08,0x04};
byte dw4[8]=   {0x08,0x10,0x20,0x40,0x40,0x20,0x10,0x08};
byte dw5[8]=   {0x10,0x20,0x40,0x80,0x80,0x40,0x20,0x10};
byte dw6[8]=   {0x20,0x40,0x80,0x01,0x01,0x80,0x40,0x20};
byte dw7[8]=   {0x40,0x80,0x01,0x02,0x02,0x01,0x80,0x40};
byte dw8[8]=   {0x80,0x01,0x02,0x04,0x04,0x02,0x01,0x80};

byte LT1[8]=   {0x00,0x00,0x00,0x00,0x18,0x24,0x42,0x81};
byte LT2[8]=   {0x00,0x00,0x00,0x18,0x24,0x42,0x81,0x00};
byte LT3[8]=   {0x00,0x00,0x18,0x24,0x42,0x81,0x00,0x00};
byte LT4[8]=   {0x00,0x18,0x24,0x42,0x81,0x00,0x00,0x00};
byte LT5[8]=   {0x18,0x24,0x42,0x81,0x00,0x00,0x00,0x00};
byte LT6[8]=   {0x24,0x42,0x81,0x00,0x00,0x00,0x00,0x18};
byte LT7[8]=   {0x42,0x81,0x00,0x00,0x00,0x00,0x18,0x24};
byte LT8[8]=   {0x81,0x00,0x00,0x00,0x00,0x18,0x24,0x42};

byte RT1[8]=   {0x81,0x42,0x24,0x18,0x00,0x00,0x00,0x00};
byte RT2[8]=   {0x00,0x81,0x42,0x24,0x18,0x00,0x00,0x00};
byte RT3[8]=   {0x00,0x00,0x81,0x42,0x24,0x18,0x00,0x00};
byte RT4[8]=   {0x00,0x00,0x00,0x81,0x42,0x24,0x18,0x00};
byte RT5[8]=   {0x00,0x00,0x00,0x00,0x81,0x42,0x24,0x18};
byte RT6[8]=   {0x18,0x00,0x00,0x00,0x00,0x81,0x42,0x24};
byte RT7[8]=   {0x24,0x18,0x00,0x00,0x00,0x00,0x81,0x42};
byte RT8[8]=   {0x42,0x24,0x18,0x00,0x00,0x00,0x00,0x81};

LedControl lc=LedControl(DIN,CLK,CS,1);

void setup(){
  //LEDの設定
 lc.shutdown(0,false);       
 lc.setIntensity(0,5);
 lc.clearDisplay(0);

  //ジャイロの設定
  Serial.begin(9600);
  Wire.setClock(400000);
  Wire.begin();
  
  Wire.beginTransmission(0x68);
  Wire.write(0x6B);
  Wire.write(0x00);
  Wire.endTransmission();
  Wire.beginTransmission(0x68);
  Wire.write(0x1C);
  Wire.write(0x10);
  Wire.endTransmission();
  Wire.beginTransmission(0x68);
  Wire.write(0x1B);
  Wire.write(0x08);
  Wire.endTransmission();
  Wire.beginTransmission(0x68);
  Wire.write(0x1A);
  Wire.write(0x05);
  Wire.endTransmission();
}

void loop()
{ 

  Wire.beginTransmission(0x68);
  Wire.write(0x3B);
  Wire.endTransmission();
  Wire.requestFrom(0x68, 14);
  while (Wire.available() < 14);
  axRaw = Wire.read() << 8 | Wire.read();
  ayRaw = Wire.read() << 8 | Wire.read();
  azRaw = Wire.read() << 8 | Wire.read();
  temperature = Wire.read() << 8 | Wire.read();
  gxRaw = Wire.read() << 8 | Wire.read();
  gyRaw = Wire.read() << 8 | Wire.read();
  gzRaw = Wire.read() << 8 | Wire.read();

  Serial.print(axRaw); Serial.print(",");
  Serial.print(ayRaw); Serial.print(",");
  Serial.print(azRaw); Serial.print(",");
  Serial.print(gxRaw); Serial.print(",");
  Serial.print(gyRaw); Serial.print(",");
  Serial.println(gzRaw);
   
   if(axRaw < -2000){
     printByte(up1);     
     delay(100);
     printByte(up2);     
     delay(100);
     printByte(up3);     
     delay(100);
     printByte(up4);     
     delay(100);
     printByte(up5);     
     delay(100);
     printByte(up6);     
     delay(100);
     printByte(up7);     
     delay(100);
     printByte(up8);     
     delay(100);    
   }else if(axRaw > 2000){
     printByte(dw1);     
     delay(100);
     printByte(dw2);     
     delay(100);
     printByte(dw3);     
     delay(100);
     printByte(dw4);     
     delay(100);
     printByte(dw5);     
     delay(100);
     printByte(dw6);     
     delay(100);
     printByte(dw7);     
     delay(100);
     printByte(dw8);     
     delay(100);  
   }else if(ayRaw < -2000){
     printByte(LT1);     
     delay(100);
     printByte(LT2);     
     delay(100);
     printByte(LT3);     
     delay(100);
     printByte(LT4);     
     delay(100);
     printByte(LT5);     
     delay(100);
     printByte(LT6);     
     delay(100);
     printByte(LT7);     
     delay(100);
     printByte(LT8);     
     delay(100); 
   }else if(ayRaw > 2000){
     printByte(RT1);     
     delay(100);
     printByte(RT2);     
     delay(100);
     printByte(RT3);     
     delay(100);
     printByte(RT4);     
     delay(100);
     printByte(RT5);     
     delay(100);
     printByte(RT6);     
     delay(100);
     printByte(RT7);     
     delay(100);
     printByte(RT8);     
     delay(100);     
   }else{
     lc.clearDisplay(0);
   }   
}

void printByte(byte character [])
{
  int i = 0;
  for(i=0;i<8;i++)
  {
    lc.setRow(0,i,character[i]);
  }
}
```

<h1>使用動画</h1>
<iframe width="560" height="315" src="https://www.youtube.com/embed/a-4epBfLqcQ" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>