光るマウスパッドを作る

#はじめに
ゲーマーではありませんが、光り物が欲しくなったので「光るマウスパッド」作ってみました。机から離れているときはチカチカしたくないので、感圧センサーをつけました。Lチカは、じわっと点灯とナイトライダー仕様の２つをミックスしました。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr"><a href="https://twitter.com/hashtag/ArduinoNano?src=hash&amp;ref_src=twsrc%5Etfw">#ArduinoNano</a><a href="https://twitter.com/hashtag/Arduino?src=hash&amp;ref_src=twsrc%5Etfw">#Arduino</a> Lightning Mousepad, KnightRider mode and blink mode. <a href="https://t.co/wUyd7sIL21">pic.twitter.com/wUyd7sIL21</a></p>&mdash; nori.dev.akg (@nori_dev_akg) <a href="https://twitter.com/nori_dev_akg/status/1140617546682339328?ref_src=twsrc%5Etfw">2019年6月17日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

#ハード
* ArduinoNano([Amazon](https://www.amazon.co.jp/gp/product/B013QV27WI))
* LED × 6([秋月](http://akizukidenshi.com/catalog/g/gI-06411/))
* 抵抗 220Ω × 6、10KΩ × 1
* 感圧センサー([Amazon](https://www.amazon.co.jp/gp/product/B01C6VBYKA))
* ユニバーサル基板
* ワイヤー
* L字ピンヘッダ、ピンソケット (6ピン)
* アクリル板 ([ヨドバシ](https://www.yodobashi.com/product/100000001003778140/))
* マウスパッド([Amazon](https://www.amazon.co.jp/gp/product/B000JCEP6O))

マウスパッドを入れて2,500円ぐらいでしょうか。
ArduinoNano だと PWM が 6つなので、LED は 6つにしてます。
電池駆動は無理なので、どうせ電源いるので Nano にしました。
Nano でも中華互換機なら 400円程度ですので。
まだNanoがむき出しですので、継続運用できそうならケースを考えます。

#ソフト
プログラム仕様
* 感圧センサーでを読み取って手を置いたら、じわっと点灯
* 感圧センサーでを読み取って手を離したら、じわっと消灯
* 手を離して10秒経つと、ナイトライダーモード
* さらに手を離して60秒経つと、消灯


```cpp:LightningMousePad.ino
/*
  Lighhtning MousePad

  Harware
    Arduino Nano
    LED 6
    Register 6
    pressure sensor 1
*/

#define PRESS_SENSOR  A1
#define LED_SIZE 6
#define LOOP_SIZE (LED_SIZE - 1) * 2

#define FIRST_WEIGHT  700     // on your setting
#define ONHAND_WEIGHT  600    // on your setting
#define KNIGHT_RIDER_DELAY 200
#define WAIT_MODE_TIME 5     // 10 sec
#define SLEEP_MODE_TIME 60   // 60 sec

byte leds[LED_SIZE] = {3, 5, 6, 9, 10, 11}; // Digital Pin (PWM)

void setup()
{
  for (byte i = 0; i < LED_SIZE; i++)
  {
    pinMode(leds[i], OUTPUT);
    digitalWrite(leds[i], LOW);
  }
  pinMode(PRESS_SENSOR, INPUT);
}

void loop()
{
    static bool onhand = false;
    static uint32_t sleep = 0;

    int val = 0, vald;
    int ana = analogRead(PRESS_SENSOR);
    if(ana < ONHAND_WEIGHT) {
      if(!onhand)
      {
        for( val = 0; val < 81 ; ++val ){
          vald = getDutyCycle(val);
          for (byte i = 0; i < LED_SIZE; i++)
          {
            analogWrite(leds[i], vald);
          }
          delay(5);
        }
        onhand = true;
      }
      sleep = millis();
    }
    else if(ana > (FIRST_WEIGHT - 10) && onhand)
    {
      for( val = 81; -1 < val ; --val ){
        vald = getDutyCycle(val);
        for (byte i = 0; i < LED_SIZE; i++)
        {
          analogWrite(leds[i], vald);
        }
        delay(5);
      }
      onhand = false;
      sleep = millis();
    }
    else if(millis() - sleep > ((uint16_t)SLEEP_MODE_TIME) * 1000) {
      // sleep, led off
      for (byte i = 0; i < LED_SIZE; i++)
      {
        analogWrite(leds[i], 0);
      }
      delay(500);
    }
    else if(millis() - sleep > ((uint16_t)WAIT_MODE_TIME) * 1000) {
      KnightRider();
    }

    delay(10);
}

void KnightRider()
{
  static byte led_luma[LED_SIZE];

  for (byte repeat = 0; repeat < LOOP_SIZE; repeat++)
  {
    byte led_now = (repeat < LED_SIZE) ? repeat : LOOP_SIZE - repeat;
    for (byte i = 0; i < LED_SIZE; i++)
    {
      led_luma[i] /= 2;
    }
    led_luma[led_now] = 50;
    for (byte i = 0; i < LED_SIZE; i++)
    {
      analogWrite(leds[i], led_luma[i]);
    }
    delay(KNIGHT_RIDER_DELAY);
  }
}

int getDutyCycle(int val)
{
    double x = (double)val * 255.0 / 100.0;
    return (int)floor(x + 0.5);
}


```

#回路図
ほぼLチカ回路なので説明は不要かと。あと感圧センサーは分圧するぐらいです。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203949/6351f2fb-bc24-f12b-114b-9d86b883758e.png" width=80%>

A1/R10KΩ/GND は Nano の下を通ってます。L字ピンヘッダがユニバーサル基板の下から出て、ピンクのピンソケットに繋げてます。ピンソケットにしないと加工しづらいので。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203949/a292c8f5-6aee-3f4b-b572-a25be97555e9.png" width=80%>

アクリル板の方はこんな感じ。だいぶ貧素でイカの骨みたいですが、意外とキレイに光ります。どうせマウスパッドで隠れるので問題なしです。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203949/0b008a19-1745-3b60-c940-08d668125190.png" width=80%>
分かりづらいですが、↑アクリル板の表にVCC線、裏にGND線を通してます。
感圧センサは、手を置く位置に表面に貼り付けます。


アクリル板は 2mm か 3mm がいいと思います。私は 3mm だと少し厚みが出るので2mmにしました。値段も3mmは高いです。あと縁（フチ）の加工をしたほうが良いか迷います。当初はフチを斜め∠にするために少し大きめにカットしたのですが、これでも十分なのでまだ加工してません。


#終わりに
やっぱりアクリル板とか使いだすと、IoTだかDIYだか分からなくなってくる（あるある）。買ったほうが安い([Amazon](https://www.amazon.co.jp/dp/B07QRV7KN7))と思ったら負け。感圧で動きが付けられるのは他には無い！ナイトライダーモードはLEDが6つだとツラけど、これでも十分さ。マウスパッドとアクリル板をケチればもう少しお安くなるかも（塩ビ板にするとか）。

みなさんも「光るマウスパッド」を自作してはいかかでしょう？その際はぜひご一報を。


#SpecialThanks
http://canon4444.hatenablog.com/entry/2015/05/04/122748