エントリー

ロギング装置の作製(ESP8266版)

開発ボードでSD版が完成したので基板に載せた

ログ

(写真のようにESP-WROOM-02を置いたが上下逆に付けるようにすればコンパクトになるなと完成した後に気が付く)

正式なマイクロSDカードスロットはブレッドボートで開発用にとして利用したいのでマイクロSDカードアダプタにピンを付けて(余り物を)利用してみた

SDカード裏SDカード表

両端は未使用なので7ピンのみ取付,なかなか良い感じ

ピンの接続情報を記録しておく(上がスロット,下がアダプタの場合)

SD-PIN

放電器と高さを合わせ(合体)接続できるようにしたが,放電器の電源アダプタが左側で電源が接続できなくなり取り外して付け替えるのも大変なので電源アダプタを右側にも付け,ついでに入力が直5Vなので安全のため5.1Vのツェナーダイオードを追加

合体

テスト実施のログ出力(SDカード)

;Constant voltage : 1000mV
;End current : 100mA
0, 991, 325, 0
1, 1003, 311, 5
2, 1002, 310, 10
3, 997, 314, 15
4, 997, 314, 20
5, 996, 316, 26
6, 995, 318, 31
7, 995, 322, 36
8, 997, 323, 42
9, 1000, 326, 47
10, 1000, 332, 53
11, 1004, 334, 58
12, 1000, 344, 64
(略)
291, 999, 84, 1595
292, 998, 83, 1596
293, 997, 82, 1597

グラフ化すると

青線:放電流値(mA)

赤線:累積電力(mAh)

上記の試験サンプルは劣化している充電池のため大きな電流を流せていない

今後の展開

このボードではIoT化しないと効果を発揮しないのでWebとの連携仕様を考える

基本仕様として当初はロギング装置を汎用化と考えていたが,別物を作製することも早々無いしその都度プログラムを変えるのも趣味の世界はありなので,放電器専用のロギング装置として構築することにする

ログの数値表とグラフを表示する位までは構築していこうと思う(気長に・・・)

昇圧型100均ライトの分解&改造

いろんな携帯サイズの100均ライトがあり使ってみたが,やはり電池一本で使える(昇圧回路を内蔵している)100均ライトが良い

理由として,

  • 携帯サイズといってもでミニサイズになると水銀電池となりバッテリコスト高なので単3~4型使用が望ましい
  • 単4×3本式はライトが長いか太くなり,消費電流が大きいためか使用時間が比較的短い(ただし明るいとは思う)
  • 単4×3本式を充電池使用に改造(電流制限抵抗を替える)によりバッテリコストが下がるが交換用の単4×3本は携帯性が悪い

等のため,単三1本で使えるライトは充電池も使えるし携帯性も良く優秀である

しかし単三1本でも十分な(高価な)ライトと比べ100均ライトは光度が足りなく暗い感じがする

そこで少しは使い物になるような明るさに100均パーツで改造することに挑戦した(しかも時間ないので1日でやる)

エントリ(単3昇圧型100均ライト)

3種類持っていた(左からABCとしておく)

ABC

明るさを比べてみる(左からBACの順)

明るさ1明るさ2明るさ3

明るさは,A=C<B位かなと思う

分解&特徴
①Aライト

AライトA特徴A LED

100均としては部品点数が多い(ビスが6個もあるし100円で作れるのかこれ?)

先が延び縮みしてランタンのようにもなる

ON・OFFはグリップを回すタイプなので使い難い

②Bライト

BライトB LED

3種の中では(かなり)明るいライト

ON・OFFにスライドスイッチを使っていてSWの劣化が少ない

パーツ取りに優れている(SW,電池BOX,パワーLEDと昇圧パーツ)

③Cライト

CライトC LED

非常にコンパクト(胸ポケットでも邪魔にならない)で全体の質感が良い

押しボタンSWがそこそこ使える(100均ライトの押しボタンSWは直ぐに不良になるものが多い)

パワーLEDが青っぽく暗い

尚,ストラップは付属していない(別のライトのパーツを流用した)

消費電流

単三側の消費電流を比べてみたら,一番明るいBの消費電流が少なかった(90mA)

ABC

LED比較

発光部のサイズはA<BCだがBのほうが圧倒的に明るい

LED

改造

コンパクトで使い勝手が良いCのボディに明るいBのLEDを移植する

改造1

上のBの基板を,下のCの光源ホルダに入るようにするため,基板から部品を外し裏側で空中配線気味に取り付け

改造2

基板の左右をホルダに入るように削る

改造3

LEDの直径が大きくなって元々付いていたレフレクタが入らないので同じく削った結果,ライトの先までの距離が縮まりバッテリの+接点が届かなくなった(つまりライトの先方へ移動した)

そこで+接点部に他の100均ライト解体から回収したスプリングを加工して付けた

改造4

結果

一応は明るくなったが集光が悪く完璧とはいえない

上手く集光できそうなレンズが100均ライト解体から回収した中にあるが口径差のため削る必要がある(丸く削るのは簡単にはできないため本日は断念)

+接点のスプリング採用によりバッテリの接触が良くなかったのが改善された

ESP8266開発ボードを作る

次回に「ESP-WROOM-02」を使おうとした時に,また回路図など探してブレッドボードに展開するのが面倒なので,偉そうなものではないが開発ボードを作っておくことにした

必要な仕様
  • プログラム書込みボタンとリセットボタン
  • 3.3V電源(USB電源から降圧させる)
  • 3.3ロジックのUSBシリアル変換
  • ESP-WROOM-02は取り外し可能(こうしないと意味がない)
  • LEDをIO15に接続(動作確認用)
準備

USBシリアル変換はaitendoのUSB-TTL変換キットを使う(既に制作済の物)

USB

このUSB-TTL変換キットは5Vロジックなので3.3Vロジックにする

CH340Gの仕様などを参照して3.3VをVCCに入れれば3.3Vとして動作するのを確認

パターンを見てみるとVCCに入るUSB5Vの部分をカットして3.3Vの3端子レギュレーターを経由しVCCに入れれば良さそう

パターン

他にカットできそうな場所が無かったのでココにしたが,削ったパターンのカスがUSBコネクタとの間に入り+-がショートするといった問題が起きて嵌った

パターンカット

入念に掃除して解決

ボードに実装

今回はブレッドボード基板を使ってみた

基板1

ミニブレッドボードを載せるためのスペースを作るため両端の空きに寄せて配置

基板

SWやLEDを配置するためパターンのカットも行った

基板裏

3端子レギュレーター(NJM2845DL1-33 3.3V800mA)は裏に配置

開発中

SDカードスロットを取り付けてプログラム開発中(AVR用のプログラムはCSの変更のみで動作した)

開発中

NTPで日時を取得できるのでタイムスタンプが使えそうだ

ロギング装置の作製(Arduino版)

ロギング装置の構想は前々からあるのだがロギングするようなシステム作ってないので着手しなかった

ところが今回作製した放電器はロギングの必要性が高いと感じログ装置を作製することにする

どう実現するか,基本スタンドアロンでのロギングするとして,装置毎(例えば放電器)にSDカード等を実装して保存する内蔵型か,UART通信などを経由してので外付け型となる

外付け型ならSDカード保存の他にフラッシュメモリー保存や無線通信にてクラウド保存も可能だし融通がききそう

そこで楽しめそうな外付け型でSDカードへのロギングをやってみることにした

SDログ

この装置は前にも似たような物を作製したことあるのでさくっと実験版は完成

SDカードは3.3Vロジックのため3.3V版Arduino(AVR)を利用したほうが回路が楽になる

外付けなのでプロトコルが必要となるが通信は無手順,ログの記録として開始と終了のみ決めた

 開始:@Begin

 終了:@End

ログ装置側のプログラム(簡単すぎだけど公開)

//    Serial Logging To SD Card
//
//    シリアル出力のロギングをSDカードに書き込む
//    シリアル:9600bps
//    SD:ファイル名は連番(Ex.log.1xxxx.txt)
//    プロトコル
//        @Begin. - @End.間をSDに書き込む
//    Ex.
//        @Begin.
//        ;Constant current : 500mA
//        ;End voltage : 1000mV
//        0, 1237, 0, 0
//        1, 1237, 499, 8
//        2, 1226, 501, 16
//        131, 1051, 499, 1088
//        @End.
//
#include <EEPROM.h>
#include <SPI.h>
#include <SD.h>

// SD card attached to SPI bus as follows:
// * MOSI - pin 11
// * MISO - pin 12
// * CLK  - pin 13
// * CS   - pin 10
// ※CS pinは使用しているシールドで変更する必要がある
//        イーサーネットシールドは 4
//        Adafruit のSDシールドは 10
//        Sparkfun のSDシールドは 8
//
//#define DEBUG        1

#define CSPIN        10                  //チップセレクト
#define LEDPIN        8                  //状態表示LED
#define BLINKTIME    1000                //点滅間隔

static char strBegin[] = { '@', 'B', 'e', 'g', 'i', 'n', '.', '\r', '\n', '\0' };
static char strEnd[] = { '@', 'E', 'n', 'd', '.', '\r', '\n', '\0' };

static uint16_t year = 2017;
static uint8_t month = 1, day = 1, hour = 19, minute = 0, second = 0;

static char fileName[16];                //ログファイル名

static boolean sd = false;               //SD書込み開始フラグ
static boolean light;                    //LED点灯フラグ
static int timer;                        //LED点滅時間カウンタ

static int getByte() {
    for(;;) {
        timer++;
        if(Serial.available()) {
            return(Serial.read());
        }
        delay(1);
        if(timer > BLINKTIME) {
            timer = 0;
            if(sd) {
                if(light) {
                    digitalWrite(LEDPIN, LOW);
                    light = false;
                } else {
                    digitalWrite(LEDPIN, HIGH);
                    light = true;
                }
            }
        }
    }
}

void dateTime(uint16_t *date, uint16_t *time) {
    // FAT_DATEマクロでフィールドを埋めて日付を返す
    *date = FAT_DATE(year, month, day);
    // FAT_TIMEマクロでフィールドを埋めて時間を返す
    *time = FAT_TIME(hour, minute, second);
}

static void makeFileName() {
    int fileNum = (EEPROM.read(0)<<8) + EEPROM.read(1);
    if(fileNum < 10000) fileNum = 10001;
    sprintf(fileName, "log%5d.txt", fileNum);
    //次のファイル番号
    fileNum++;
    EEPROM.write(0, fileNum>>8);
    EEPROM.write(1, fileNum&0xff);
}

void setup() {
    Serial.begin(9600);                    // 9600bpsでポートを開く
#ifdef DEBUG
//    Serial.println("Start");
#endif
    //SSピンは使用しない場合でも出力にしないとSDライブラリが動作しない
    //pinMode(SS, OUTPUT);
   
    //SDライブラリの初期化
    if(!SD.begin(CSPIN)) {
        Serial.println("SD Card failed");
        for(;;);
    }   
    //日付と時刻を返す関数を登録
    //登録することでファイルの作成日時や変更日時が記録できる
    SdFile::dateTimeCallback(&dateTime);

    //初期化正常で開始
    pinMode(LEDPIN, OUTPUT);
    digitalWrite(LEDPIN, HIGH);            //点灯
    light = true;
    sd = false;
    timer = 0;
}

void loop() {
    char c, buf[128];
    int n = 0;
    File dataFile;

    for(;;) {
        c = getByte();
        buf[n++] = c;
        if(c == '\n') {
            buf[n] = '\0';
            n = 0;
#ifdef DEBUG
//            Serial.print(buf);
#endif
            if(!sd) {
                if(!strcmp(buf, strBegin)) {
                    //sd write start
                    makeFileName();
                    if(dataFile = SD.open(fileName, FILE_WRITE)) {
                        sd = true;
#ifdef DEBUG
                        Serial.println("logging start");
#endif
                    } else {
                        //ファイルが開けなかったらエラーを出力
                        Serial.print("can not open ");
                        Serial.println(fileName);
                    }
                }
#ifdef DEBUG
                else {
                    //ignore string
                    Serial.print("ignore : ");
                    Serial.print(buf);
                }
#endif
            } else {
                if(!strcmp(buf, strEnd)) {
                    //sd write done
                    dataFile.close();
                    sd = false;
#ifdef DEBUG
                    Serial.println("logging done");
#endif
                } else {
                    //sd writting
                    dataFile.print(buf);
#ifdef DEBUG
                    Serial.print("sd wrt : ");
                    Serial.print(buf);
#endif
                }
            }
        }
    }
}

ログ装置側が動作してるかどうか判るようにLEDで通知(点灯:Reday,点滅:Logging)するようにした

・・・

さてボードに組み込もうかと思ったところで,どうせならSDカード記録版も・・・

ESP-WROOM-02

いつか使おうと思いながら購入して置きっぱなしだった「ESP-WROOM-02」を取り出す(世間では「ESP-WROOM-32」が旬みたいだけど・・・)

いつもお世話になってるこちらを参考にしてブレッドボードに展開

ブレッドボード

ATコマンドで動作確認して

AT1

AT2

開発環境を整え

IDE

プログラムを書き込み動作させることができた

注意点や嵌った事など

デフォルトでは「softAP」モードになっていて先ずは「station」モードに変更しないとWiFiが使えない(AT+CWMODE=1)

cc版でないとESPは扱えないのでダウンロードしてarduino.1.8.1を設定(和解統合されてIDEはorg版オンリーになったようだが)拙者はcc版だとなんかしらうまくいかない問題があったのでorgを使っていたため,これまでのローカル設定が全部使えてない

尚,分裂時のorg版とは共存できるようなので良かった

ボード選択設定(追加)

ボード Generic ESP8266 Module
Flash Mode QIO
Flash Frequency 40MHz
CPU Frequency 80MHz
Flash Size 4M(3M SPIFFS)
Debug port Disabled
Debug Level なし
Reset Method 手動SWなら「ck」,自動の場合(スイッチサイエンスの開発ボードなら)「nodemcu」
Upload Speed 115200
シリアルポート シリアルポート番号

放電器の作製(その4)

アルミのアングルを2枚増やして放熱版を改良(大して発熱なかったので手抜きしたのがミス)

これで1A以上の放電でも放熱できるようになったようだ

そこで長期放置(3カ月以上半年未満位)の充電池を放電処理した(尚,管理者は年1回は長期放置の充電池をまとめて再充電している)

放電は定電圧放電1.0V,終止電流250mAで行う

VOLCANO

VOLCANO(単4形,750mAh)

VOLCANO

管理番号 内部抵抗(mΩ) 放電容量(mAh) 備考
188 595 ¥100 NiMH
146 610 ¥100 NiMH
208 602 ¥100 NiMH
146 615 ¥100 NiMH
146 590 ¥100 NiMH
208 578 ¥100 NiMH
210 148 ¥100 NiMH
eneloop(単4形,Min.750mAh)

eneloop

管理番号 内部抵抗(mΩ) 放電容量(mAh) 備考
159 604 HR-4UTGA
139 677 HR-4UTGB
199 601 HR-4UTGA
Ni-MH700(単4形,650mAh,min.600mAh)

Ni-MH700

管理番号 内部抵抗(mΩ) 放電容量(mAh) 備考
140 426 旧新品
100 331 旧新品
STAMINA(Cyber-shot用 単4形,min.740mAh)

STAMINA

管理番号 内部抵抗(mΩ) 放電容量(mAh) 備考
632 513 旧新品

 

全てにおいて放電容量が公称値より少ないのでオペアンプの倍率の調整ミスかプログラムの計算ミスかと思ってシャント抵抗の電圧を計測してみたが問題ないようだ

ページ移動

ユーティリティ

検索

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

新着コメント

Re:LEDライトの改造計画(2)
2016/11/19 from admin
Re:LEDライトの改造計画(2)
2016/11/18 from イチマル
Re:XP64OSディスクのSSD換装
2016/10/18 from 権限がありません
Re:SSDのアライメント調整
2014/01/31 from admin
Re:SSDのアライメント調整
2014/01/26 from 通りすがり

Feed