CdSセルと2つのマイコンを使い、Youtubeの動画を再生する

#目的
寝る前のナイトルーティンとして、[もこ田めめめ](https://www.youtube.com/channel/UCz6Gi81kE6p5cdW1rT0ixqw)ちゃんの動画を再生することを日課にしていました。

しかしPCで動画を検索することさえできないほど疲れてしまう日もあったのでどうにかして自動化できないものかと考えました。

#使用したもの

| 機器 | リンク |
|:-:|:-:|
|  Digispark | https://www.amazon.co.jp/HiLetgo-Digispark-Kickstarter-ATTINY85-%E8%B6%85%E5%B0%8F%E5%9E%8BArduino%E4%BA%92%E6%8F%9B/dp/B07BJ2F2WZ |
|  ArduinoNano(互換機) |  https://www.amazon.co.jp/keyestudio-Nano-ATmega328P-Arduino%E3%81%A8%E4%BA%92%E6%8F%9B-USB%E3%82%B1%E3%83%BC%E3%83%96%E3%83%AB/dp/B01FSDVZ98 |
| CdSセル  | http://akizukidenshi.com/catalog/g/gI-00110/  |
| 1KΩ抵抗 |  |

上のリンク先にあるDigisparkのマイコンはキーボードやマウスの代わりとして動作し、今回はキー入力を自動化するために使いました。

これについての説明は[他の方](https://qiita.com/Toramin10/items/291748d4a0c887dd8d7b)が詳しく説明してくれているので興味がある方は調べてみてください。

#配線
![Untitled Sketch_ブレッドボード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/584277/acaa2818-23cc-0aa0-d5aa-030ecd711162.png)

###注意
写真上部のD7ピンから伸びている青い配線の先にDigisparkのD0ピンとつないでください。画像のインポートができず配線図に表すことができなかったため下の写真を参考にしてください。緑の配線がAruduinoNanoのD7ピンとDigisparkのD0ピンを繋いでいます。
動作をさせるにはDigisparkをPCのUSBコネクタに差し込んでください。
![DSC_0031.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/584277/734a44ab-679c-5e08-ed7f-ec2115d072d5.jpeg)


#プログラム
AruduinoNanoの互換機にこちらのプログラムを書き込みます。

```auto_mememe.ino
int val=0; //入力される値を格納する為の変数
int pinD7 = 7;
void setup() {
Serial.begin(9800); //モニターに出力するための設定
pinMode(pinD7,OUTPUT);
}
void loop() {
//ANALOG INの０番ピンからデータを受け付ける
val=analogRead(0);
Serial.println(val); //入力された値をモニターに出力
if(val>999){
  digitalWrite(pinD7,HIGH);//暗くなったら信号をD7ピンから送る
  delay(100);
  while(val > 999){
    digitalWrite(pinD7,LOW);//再度明るくなるまでループ
    val=analogRead(0);
    delay(100);
  }
  
}
else{
  digitalWrite(pinD7,LOW);
}
delay(100);
}
```
私の環境では明るいところで930くらいの値が、暗いところでは1000以上の値が計測されたため、条件式をval>999にしています。この条件式の値は各自の環境で異なると思いますので、環境に合わせて工夫してみてください。

これによって部屋が暗くなったことを検知してDigisparkに信号を送ることができます。

続いて信号を受け取る側のDigisparkに、キーボードの制御をするプログラムを書き込んでいきます。

```Auto_Key.ino
#include<DigiKeyboard.h>
int pin0 = 0;
int pin_now = 0;
void setup(){
  pinMode(pin0,INPUT);
}
void loop(){
  pin_now = digitalRead(pin0);//D0ピンの状態を取得
  if(pin_now == 1){
    DigiKeyboard.sendKeyStroke(0);//もし信号がきたらはじめにKey入力を初期化
    DigiKeyboard.delay(100);
    DigiKeyboard.sendKeyStroke(KEY_R,MOD_GUI_LEFT);//WindowsキーとRの同時押し
    DigiKeyboard.delay(100);
    DigiKeyboard.print("cmd");//コマンドプロンプトを指定
    DigiKeyboard.delay(100);
    DigiKeyboard.sendKeyStroke(KEY_ENTER);//コマンドプロンプトを起動
    DigiKeyboard.delay(100);
    DigiKeyboard.print("start https\'//www.youtube.com/watch?v_WtYgPZQBztk");//みたい動画のURLに移動するコマンド
    DigiKeyboard.delay(100);
    DigiKeyboard.sendKeyStroke(KEY_ENTER);//コマンドを実行
    DigiKeyboard.delay(100);
  }
}
```

このようにキーボードの制御を書いていきます。
プログラムの書き込みにはAruduinoの統合開発環境が使えますがDigisparkに書き込むにはひと工夫設定が必要です。[こちら](https://qiita.com/mt08/items/df4ed8c659b205d1fa1e)の記事を参考に設定をしました。
###注意点

DigisparkのライブラリにはUSキーボードでの入力が設定されており、日本語環境のPCでは文字が一部変わってしまいます。先ほども上に記載した[こちら](https://qiita.com/Toramin10/items/291748d4a0c887dd8d7b)にキーボード入力の置き換え表があったので参考にしました。

#最後に
下の画像から動作している動画ページに飛べます。
電気を消した後にコマンド入力している様子が分かると思います。
[![](http://img.youtube.com/vi/dbDQUrelMGw/0.jpg)](http://www.youtube.com/watch?v=dbDQUrelMGw)