エントリー

NanoPi NEOのサーバ化(その2)

NanoPi NEOのサーバ化は,ひとまず運用可能レベルで完成したが,以下の改良(機能追加)を行うことにした

電源スイッチ

NanoPi NEOにはリセットスイッチが無いため,ハードリセットするためには電源をOFF/ONする必要がある

そのためUPSを組み込んだ場合,ハードリセットするにはUPS電源をOFFしないとならない

何らかの異常が発生した時に無いと蓋を開ける手間が掛かることになるだけだが電源スイッチを追加することにした

miniups_回路図_u.png

(注)無電圧時スイッチを切りにしたかったのでNチャネルFETを使ったせいでGndを共通にできなくなり嵌る

DCDCの入力に電源スイッチを設けDCDCの出力に緑LEDを消灯したことで判断できるようにする(主電源は赤LED)

IMG_20210822_172431.jpgIMG_20210822_172358.jpgIMG_20210822_172508.jpg

スイッチは3Dプリンタで作製した台座を付けてホットボンドで取付け

IMG_20210823_173809.jpg

小型スイッチなのでケースは簡単な加工で済ませた

主電源信号

長時間の停電対応ができるように停電を判断するための信号線を追加(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モジュールを改造した

DS1307_circuit_u.png

  赤:プルアップ抵抗を取り除く

黄・緑:バッテリーの充電回路で取り除く(R6とD1だけでも可)

  緑:短絡(取り除いた後)

IMG_20210822_122509_u.jpg

(処理後)

IMG_20210822_162906_u.jpg

後で嵌らないように動作確認する

IMG_20210822_173755.jpg

Arduino IDEで,ファイル>スケッチ例>Wire>i2c_scannerを実行

WS_20210820_001.png

接続は問題なし(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);
}

結果

WS_20210820_002.png

正常に動作したので,バッテリーを付け正しい日時を登録しておく

バッテリー

改良によって18650ではケースのスペースが不足したのでコンパクトなリポバッテリーに変更

IMG_20210821_205919.jpg

1100mAhのリポで連続1.5A可能,過充電,過放電の安全回路も付いているので安全性も上がる

付属のコネクタはPHを小型にしたもので「Micro JST 1.25」と呼ぶらしい

基板用のコネクタが見つからなかったのでケーブル付きコネクタを購入

全体構成

IMG_20210822_202429.jpg

IMG_20210822_202845.jpg

消費電力

改良が終わりハードウェアは完成したのでバッテリーを空にして充電を含む消費電量を計測したところ0.89Aだったので約5V1Aで5W

IMG_20210823_181318.jpg

充電が終わりアイドル状態では0.17Aであった

IMG_20210825_174853.jpg

尚,充電中はMAX.0.89Aで徐々に減っていく

もう1つ改良(2021.8.26追加)

ソフトウェアの調整をしながらテスト運用していたところCPUのヒートシンクが結構熱くなっていることに気付いた

CPU温度が42℃(外気30℃)位なので大したことはないが,ケースに熱を逃がして冷却することにした

そこでケースに接触できるサイズのサーマルパッド(30x30x3)を準備して装着

IMG_20210826_190927.jpgIMG_20210826_193345.jpg

CPU温度46℃時,サーマルパッドは37.2℃に上昇

IMG_20210826_193908.jpg

ケースに放熱し経過をみると

IMG_20210826_194040.jpg

34.6℃(外気27.6℃)

32.6℃(外気26.7℃)

35.9℃(外気28.9℃)

と,十分効果あり

IMG_20210828_140422.jpg

固定設置してソフトウェアの調整,正式運用準備を進める

・・・

後に赤LEDは眩しいことに気付く・・・修理等のタイミングがあればオレンジ色にでも交換するかな

ページ移動

コメント

  • コメントはまだありません。

コメント登録

  • コメントを入力してください。
登録フォーム
名前
メールアドレス
URL
コメント
閲覧制限
投稿キー(スパム対策に、投稿キー を半角で入力してください。)

ユーティリティ

検索

エントリー検索フォーム
キーワード

新着コメント

過去ログ

Feed