NanoPi NEOのサーバ化(その2)
- 2021/08/22 22:05
- カテゴリー:Nano Pi NEO, PC
NanoPi NEOのサーバ化は,ひとまず運用可能レベルで完成したが,以下の改良(機能追加)を行うことにした
電源スイッチ
NanoPi NEOにはリセットスイッチが無いため,ハードリセットするためには電源をOFF/ONする必要がある
そのためUPSを組み込んだ場合,ハードリセットするにはUPS電源をOFFしないとならない
何らかの異常が発生した時に無いと蓋を開ける手間が掛かることになるだけだが電源スイッチを追加することにした
(注)無電圧時スイッチを切りにしたかったのでNチャネルFETを使ったせいでGndを共通にできなくなり嵌る
DCDCの入力に電源スイッチを設けDCDCの出力に緑LEDを消灯したことで判断できるようにする(主電源は赤LED)
スイッチは3Dプリンタで作製した台座を付けてホットボンドで取付け
小型スイッチなのでケースは簡単な加工で済ませた
主電源信号
長時間の停電対応ができるように停電を判断するための信号線を追加(PG11へ入力)
RTC(リアルタイムクロック)
NanoPi NEOにはRTCが無いのでソフトリセットでも日時が初期化される
日時はサーバ起動時にネット取得され更に一定期間で更新する機能もあるので常時接続運用では問題にはならないのだけどRTCモジュールを使ってみたいので追加した(専用ケースにはDS1307が付いている)
使用したのはDS1307が載っているTinyRTCモジュールで,そのまま使うには問題があるので手を加えた
TinyRTCモジュール仕様
- リアルタイムクロックDS1307搭載,I2C接続
- EEPROM:AT24C32(32Kb)搭載
- 発振器動作中のバッテリバックアップモードの消費電流は500nA以下の低消費電力
- モジュールにEEPROMを搭載しているので,日付時刻と共にセンサーなどの数値を保存することが可能
- コンパクトなデザイン:27mm * 28mm * 8.4mm
TinyRTCモジュールは5VでNanoPi NEOは3.3V
I2Cのレベル変換もあるがTinyRTCモジュール上のプルアップ抵抗を取り除き外部で3.3Vをプルアップする
バッテリーバックアップが充電池
バックアップ電池が充電池使用(LIR2032)なので4.5V程印加されている
充電回路を無効化し同サイズのCR2032を使用する
回路図を見つけたのでTinyRTCモジュールを改造した
赤:プルアップ抵抗を取り除く
黄・緑:バッテリーの充電回路で取り除く(R6とD1だけでも可)
緑:短絡(取り除いた後)
(処理後)
後で嵌らないように動作確認する
Arduino IDEで,ファイル>スケッチ例>Wire>i2c_scannerを実行
接続は問題なし(0x68がRTCで,0x50はメモリ)
確認のためのスケッチ
#include <Wire.h>
#define RTC_address 0x68
const char *week[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
uint8_t REG_table[7];
void setup() {
Wire.begin();
Serial.begin(9600);
//初期日時を書き込む(データ形式は二進化十進)
Wire.beginTransmission(RTC_address);
Wire.write(0x00); //Register 先頭アドレス
Wire.write(0x00); //second
Wire.write(0x34); //minute
Wire.write(0x19); //hour
Wire.write(0x04); //week
Wire.write(0x22); //day
Wire.write(0x08); //month
Wire.write(0x21); //year
Wire.endTransmission();
}
void loop() {
Wire.beginTransmission(RTC_address);
Wire.write(0x00);//Register 先頭アドレス
Wire.endTransmission();
//RTCデータの読み込み
Wire.requestFrom(RTC_address,7);
for(int i = 0; i < 7; i++) {
REG_table[i] = Wire.read();
}
//RTCデータ表示
Serial.print("20");
Serial.print(REG_table[6],HEX); //year
Serial.print("/");
Serial.print(REG_table[5],HEX); //month
Serial.print("/");
Serial.print(REG_table[4],HEX); //day
Serial.print("(");
Serial.print(week[REG_table[3]]);//week
Serial.print(") ");
Serial.print(REG_table[2],HEX); //hour
Serial.print(":");
Serial.print(REG_table[1],HEX); //minute
Serial.print(":");
Serial.print(REG_table[0],HEX); //second
Serial.println();
delay(1000);
}
結果
正常に動作したので,バッテリーを付け正しい日時を登録しておく
バッテリー
改良によって18650ではケースのスペースが不足したのでコンパクトなリポバッテリーに変更
1100mAhのリポで連続1.5A可能,過充電,過放電の安全回路も付いているので安全性も上がる
付属のコネクタはPHを小型にしたもので「Micro JST 1.25」と呼ぶらしい
基板用のコネクタが見つからなかったのでケーブル付きコネクタを購入
全体構成
消費電力
改良が終わりハードウェアは完成したのでバッテリーを空にして充電を含む消費電量を計測したところ0.89Aだったので約5V1Aで5W
充電が終わりアイドル状態では0.17Aであった
尚,充電中はMAX.0.89Aで徐々に減っていく
もう1つ改良(2021.8.26追加)
ソフトウェアの調整をしながらテスト運用していたところCPUのヒートシンクが結構熱くなっていることに気付いた
CPU温度が42℃(外気30℃)位なので大したことはないが,ケースに熱を逃がして冷却することにした
そこでケースに接触できるサイズのサーマルパッド(30x30x3)を準備して装着
CPU温度46℃時,サーマルパッドは37.2℃に上昇
ケースに放熱し経過をみると
34.6℃(外気27.6℃)
32.6℃(外気26.7℃)
35.9℃(外気28.9℃)
と,十分効果あり
固定設置してソフトウェアの調整,正式運用準備を進める
・・・
後に赤LEDは眩しいことに気付く・・・修理等のタイミングがあればオレンジ色にでも交換するかな