ArduinoUNO省電力化-マイコン稼動時の消費電力調査

#概要
今回はArduinoUNOの省電力化について調べました。
省電力という記事では有りませんが、Arduino 小型化という目的で、ArduinoUNOのマイコンのみで稼動させるサイトを見つけたので、ほぼそのまま活用させていただきました。本当に助かりました。

＜Arduinoで作った回路の小型化(Arduino互換機の製作)(2)＞
　https://synapse.kyoto/hard/miniaturize_arduino_project/page002.html


今回は、ArduinoUNOからマイコンを取り外して余分な回路の無い状態で稼動させた場合の電力消費量を調査してみたいと思います。

#結論
まずは結論から報告させていただきます。

| Lチカスケッチ | 電流 |
|:-----------------|------------------:|
| ArduinoUNO稼動 | 56mA～63mA |
| マイコン稼動 | 17mA～23mA |


| deepSleepスケッチ | DeepSleep時 | 通常時 |
|:-----------------|------------------:|:------------------:|
| ArduinoUNO稼動 | 39.5mA | 56mA～63mA |
| マイコン稼動 | 0.42mA | 17mA～23mA |

マイコン稼動時のほうが圧倒的に消費電力が少ないことが分かります。
特にDeepSleep時の消費電力が凄く少なくなっています。
これであれば長期バッテリー稼動させるような環境でも運用に耐えれそうです。

#環境
##準備したもの
・ArduinoUNO

・ATmega328P-PU(ブートローダ書き込み済み）
・10kオームのカーボン抵抗×１
・22pFのセラミックコンデンサ×２
・0.1μFのセラミックコンデンサ×２
・16MHzの水晶振動子×１
・丸ピンICソケット28ピン×２
・ブレッドボード
・USBケーブル（電源供給用自作ケーブル）

・LED×１
・1kΩの抵抗×１

##計測用
・AVHzY USBテスターにて電流を測定します。
　http://u0u1.net/Vk3k

#テスト用スケッチ（Lチカ）

```c++:lcika.ino
int led = 13;            

void setup() {           
  pinMode(led, OUTPUT);  
}

void loop() {            
  digitalWrite(led, HIGH)
  delay(1000);           
  digitalWrite(led, LOW);
  delay(1000);           
}
```

#テスト用スケッチ（deepSleep）
```c++:ArduinoUnodDeepSleep.ino
#include <Arduino.h>
#include <Narcoleptic.h>
const int LED_PIN = 13;
/**
 * メイン処理
 */
void setup() 
{  
    pinMode(LED_PIN, OUTPUT);
    digitalWrite(LED_PIN, LOW);
}

/**
 * loop
 */
void loop() 
{
  deepSleep(10000);
  digitalWrite(LED_PIN, HIGH);
  delay(10000);
  digitalWrite(LED_PIN, LOW);
}

/**
 * deepSleep
 */
void deepSleep(unsigned long milliseconds)
{
  unsigned long sleepTimeUnit = 6000UL;
  unsigned long count = milliseconds / sleepTimeUnit;
  unsigned long mod = milliseconds % sleepTimeUnit;
  
  for (unsigned long index = 0; index <= count; index++) {
      int delayTime = (index < count) ? sleepTimeUnit : mod;
      if (milliseconds) {
          Narcoleptic.delay((int)delayTime);
      }
      else {
          delay((int)delayTime);
      }
  }
}
```

#テスト手順
**＜ArduinoUNOのまま稼動した場合の電流調査＞**
①ArduinoUNOにテスト用のLEDを点灯させるための配線を行う。
②ArduinoUNOにマイコン（ATmega328P-PU）がある状態で、PCと接続し、テストするスケッチを書き込む。
③一度、USBを抜き、電源供給を止める。
④再度、USBをAVHzY USBテスター経由で接続し、稼動させながら電流量を記録する。

**＜マイコンのまま稼動した場合の電流調査＞**
①ArduinoUNOからスケッチ書き込み済みのマイコン（ATmega328P-PU）を取り外す。
　※これが凄く硬くて大変でした。先の細いマイナスドライバーを使って外してみました。マイナスドライバーが２本あると両サイドから差し込めるので外しやすいと思います。１度外したマイコンは、ICソケットに装着します。

②参考サイトの回路図「図7、ATmega328P-PUをArduino互換機として使用する場合の基本回路」通り、ブレッドボード上に組み立てる。
　サイト：https://synapse.kyoto/hard/miniaturize_arduino_project/page002.html
　※マイコンを使用した別サイトの回路図の中には、参考にしたサイトのArduinoを動かすための基本回路を省略しているページが多いですので、注意してください。

③②のブレッドボードにテスト用のLEDを点灯させるための配線を行う。

④USB経由で電源を取得するため、ATypeのUSB端子を持った下記のケーブルを自作して使用。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/191429/9f701ef4-cda9-e428-04e8-5a4839b3c2d1.png)

⑥上記のUSBをAVHzY USBテスター経由で接続し、稼動させながら電流量を記録する。

**＜Sleep時＞**
![image.png](https://qiita-image-store.s3.amazonaws.com/0/191429/2b1558c8-676a-0fb2-8dd1-ac61312605b3.png)

**＜通常稼動時＞**
![image.png](https://qiita-image-store.s3.amazonaws.com/0/191429/1eacd425-c212-0304-a53f-5200015457f1.png)

#まとめ
今回の調査でArduinoUNOはメンテナンスが凄く便利な反面、余分な電力をかなり使っていることが明確になりました。
一応、知っているつもりでしたが、実際に動かして調べてみると気づきがたくさんありました。

今まで作成してきたセンサーがマイコンのみでも正常に動くかを確認して、実際の運用に生かすことが出来るか確認して行きたいと思います。