ページ移動

エントリー

2017年03月の記事は以下のとおりです。

新しいWebサーバの検討

Webサーバ兼ホームサーバを玄箱からCubieboardに切り替えてから約2年経過となる(ちなみに玄箱はホームサーバとして継続して稼働している)

24H運転でリスタートは数回行ったが電源を切ることはない運用で,これまで異常もなく動作しており,おそらくこのまま数年は持つのではないかとは思っている

しかしなんらかの異常が発生した場合,現状では玄箱をバックアップシステムとして稼働させながら復旧していく手段しか持ち合わせていないので,もっと良いバックアップシステムを準備することが必要・・・だなと思いながら2年経過した

そこで思い切って「新しいWebサーバの検討」を行うことにした

何故ワンボードマイコンにしたか

当初は玄箱からATOM系のx86に移行しようとして検討,システムの構築まで行ったが電源部に難ありで実運用に待ったを掛けた経緯がある

再検討し考察の結果

  • 単一5V電源のため電源部が単純(自作で対処可能な電源部)
  • 消費電力が少ない,UPSも簡単に設計可能で容量も少なくて済む
  • 発熱が少ないので放熱対策で困らない,ケース作製も安易となる
  • カードサイズのため設置スペースを必要としない(更に軽量でもある)
  • I/Fが判り良いため自身で追加ハードを組み込み可能

である,世間では「シングルボードコンピュータ」というワンボードマイコンにした

当然のことながら,Web公開を主に性能的に問題はないボードを選択することになる

また,ワンボードマイコンだとハード構成がシンプルなため壊れにくいのではないかというのも理由にある

前回Cubieboardを選択した理由

玄箱から「Cubieboard」にした理由は,当時「Raspberry Pi」が第一候補だったのだが入手が困難だったのとHDDがUSB経由だったためである(実際ラズパイを使おうとラズパイマガジンを購入して読みふけった)

ラズパイが困難で手に入りそうなワンボードマイコンを探したところ,SATAがあってOSの提供(Debianだし)までされている「Cubieboard」を選択することになったわけだ(ラズパイが数年後にどうなっているか判らないしね)

新サーバのハードウェアは

次もワンボードでいく訳だがバックアップシステムとしてまずは決定する

単純に「Cubieboard」をもう1枚準備すれば異常があった場合は交換するだけで復旧できる訳だが,いまだに「Cubieboard」は古いハードも値引きされず新しいハードを含めワンボードマイコンとしては割高,そして同じハードだとつまらないので候補から外す

「Banana Pi」はSATAがあり「Cubieboard」に良く似ているラズパイを意識したワンボードマイコンで,ラズパイより性能は上だが少々割高(ただし旧ハードが値引きされてはいる)なのとOSの提供が怪しげで情報が少ないのが欠点でやはり候補から外す

「Orenge Pi」というのがあってハードのバリエーションが多く,SATAがあるハードや¥500程度なのにLANが利用できるラズパイZEROを意識したハードもあり,中華では頑張っているようで魅力はあるのだけど日本に代理店もなく直接購入しかないため割高になり情報も少ないので現状では手を出しにくい

検討の結果,現状では手に入り易く情報も多くハードが無難にまとまっている「Raspberry Pi」を入手して検証することにした(現状のラズパイだとUSB接続のHDDからもBoot可能らしい)

今後の展開として

まずは「Raspberry Pi」を使用してのサーバ構築を行い検証する

現状のサーバ「Cubieboard」は回復できないハード異常が発生するまで運用予定となる(ラズパイが優秀なら入れ替えるかも)

基本的に「Raspberry Pi」はバックアップサーバとしていつでも稼働できるようにを置いておくが,普段はサーバ以外の目的で利用できれば良いかなと考えている

DSO138の操作性改善に挑戦

今年の1月くらいにJYE Techから新しくDSO150なるオシロスコープキットが出て,スペック的にはDSO138とあまり変わらないが,ケースを追加しロータリエンコーダで操作するようになったようだ

DSO150

ケース付きになって良さそう・・・最近Amazonでも取り扱い開始・・・しかも安いが,いわくつきだけどサインスマートのDSO138があるのでどうしようか・・・

そこで,DSO150を真似てDSO138を改造(改良かな?)してしまおうと考えた

DSO138

サインスマートDSO138のメイン基板,キット制作時にコンデンサの変更やボタンを交換してある

ロータリーエンコーダ―を付ける

DSO150にはDSO138(DSO062も同じ)では操作性の悪い(+)(-)ボタンをロータリーエンコーダ―に変更してあり,ロータリーエンコーダ―の扱いも慣れてきたことだし(+)(-)ボタンを制御するようにすればいけそうなので付けてみる

ここでATMegaを使うのもオーバースペックでサイズ的にも組み込みしにくいのでATtiny13aでドライブすることにした

まずは実験・・・しようとしたが・・・嵌りまくった

実験

開発環境で嵌る

昔構築したIDE1.6環境が怪しげなのでIDE1.8.1で新たに環境構築したが(全てにおいて)ボードへの書込みができない問題が発生

すったもんだして動くようになったがはっきりした原因は不明(つまり何をやったら動くようになったか特定できなかった)

おそらくとなるがhardwareフォルダに昔の情報データがあったため動作不良となっていたのではないか(hardwareフォルダ内で不必要なのは削除した)

開発支援ボードで嵌る

今回UNO互換ボードで(自己開発の)開発支援ボードを使ったがUNOに未対応だった

3.3Vピンがショートしていたり余計なピンが絶縁されていなかった設計不良が発覚(これまで3.3Vピンが出力されていないボードで動作させていたため)

シリアル出力で嵌る

シリアル出力されない場合があり原因不明(ノイズか?)

プログラム開発

コード1KBの世界なので苦労するかと思ったが1KBはやっぱ広い・・・と思うのはTK80やLKIT世代のせいか^^

ただしデータ64Bytesは辛い(PROGMEMもあるけど利用は要注意)

PG

もっとハードウェアレジスタの直接操作でサイズを減らせるけど余裕あったので判りやすいコードで済ませた(とは思っている)

ATtiny13aのPB0とPB1をロータリーエンコーダ入力とし,PB2とPB3をそれぞれ+-ボタンとして出力する

//DSO138改造
//ロータリエンコーダを取り付け
//
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <util/delay.h>

#define EN_A PB0
#define EN_B PB1
#define OUT1 PB2
#define OUT2 PB3

#define BTNON_TIME_US 40000

//割込みはsleepから抜けるだけで処理は無い
ISR(PCINT0_vect) {}

void setup() {
pinMode(EN_A, INPUT_PULLUP);
pinMode(EN_B, INPUT_PULLUP);
pinMode(OUT1, OUTPUT);
pinMode(OUT2, OUTPUT);
digitalWrite(OUT1, HIGH);
digitalWrite(OUT2, HIGH);

GIMSK |= (1<<PCIE); //PCINT割込みを有効
PCMSK = _BV(EN_A) | _BV(EN_B); //割込み許可
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
}

void loop() {
unsigned char dt = 0;

for(;;) {
//前回値と今回値でインデックスを作る
dt = ((dt<<2) + (PINB&0x03))&0x0f;

if(dt == 0x07) { //right
digitalWrite(OUT1, LOW);
_delay_us(BTNON_TIME_US);
digitalWrite(OUT1, HIGH);
} else if(dt == 0x0d) { //left
digitalWrite(OUT2, LOW);
_delay_us(BTNON_TIME_US);
digitalWrite(OUT2, HIGH);
} else {
sleep_mode();
}
}
}

制御プログラムは難なく完成したがボタンONーOFF間隔の設定調整に時間を費やした

ボタンONーOFF間隔はロータリーエンコーダの回転速度に(そこそこは)合わせないとスムーズにならない(早くても遅くても駄目)

尚,変化なし時のウエイトは無くても良いことを実働では確認

既にロータリーエンコーダ―化している方もいたので参考にはさせてもらっている

エンコーダ

追加パーツは秋月D基板の取付穴が本体に整合したので右側に置いた

設定ボタンの複数化

DSO062では各設定項目の専用ボタンがあったがDSO138では6つの設定項目を1ボタンで順列選択する操作になった

DSO150ではグループ化して複数ボタンにしたようだ

同じようにするのはしゃくなのでボタンを3つにして選択できる設定項目をまとめた

DSO138の選択(select)ボタンで選択できる設定項目

  1. Horizonal Position
  2. Vertical Position Indicator
  3. Timebase(s/div)
  4. Trigger Mode
  5. Trigger Slope
  6. Trigger Level Indicator

3つのボタンを配置し以下のように割り当てた

  • 1,2  :H/V.Pos
  • 3    :S/Div
  • 4,5,6:Trigger

button

PG2

PB1,PB2,PB3をグループ化したボタン入力とし,本体の設定項目選択ボタンに接続したPB4へ出力する

//DSO138改造
//機能ボタンを追加
//

#include <avr/io.h>
//#include <avr/eeprom.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <util/delay.h>

//接続PIN
#define HVPOS            PB3        //PB0では動作しない(不明)
#define SECDIV           PB1
#define TRIGGER          PB2

#define BTNOUT           PB4
#define BTNON_TIME_MS    40        //ボタンON時間
#define BTNOFF_TIME_MS   20        //ボタンOFF時間

static int btint = 0;

//外部ピン変化割込み
ISR(PCINT0_vect) {
    //チャタリング10ms待ち
    _delay_ms(10);

    //ボタンの状態チェック(押下時のみ)
    if(!bit_is_set(PINB, HVPOS)) {
        btint = HVPOS;
    }
    else if(!bit_is_set(PINB, SECDIV)) {
        btint = SECDIV;
    }
    else if(!bit_is_set(PINB, TRIGGER)) {
        btint = TRIGGER;
    }
}

void setup() {
    //機能ボタン(入力)
    pinMode(HVPOS,   INPUT_PULLUP);
    pinMode(SECDIV,  INPUT_PULLUP);
    pinMode(TRIGGER, INPUT_PULLUP);
    //ハンドルボタン(出力)
    pinMode(BTNOUT, OUTPUT);
    digitalWrite(BTNOUT, HIGH);

    //ピン変化割込み許可
    GIMSK |= (1<<PCIE);                            //PCINT割込みを有効
    //PCMSK = (1<<PCINT1)|(1<<PCINT2)|(1<<PCINT3);//PB1,2,3の割込み許可
    PCMSK = (1<<HVPOS)|(1<<SECDIV)|(1<<TRIGGER);//割込み許可
    sei();
}


//    0.Horizonal Position
//    1.Vertical Position Indicator
//    2.Timebase(s/div)
//    3.Trigger Mode
//    4.Trigger Slope
//    5.Trigger Level Indicator

void loop() {
    int nowpos, movpos, btncnt;

    //nowposを復旧
    //(本体は電源OFFで記憶してなかったので処理を外す)
    //eeprom_busy_wait();
    //nowpos = (int)eeprom_read_byte((uint8_t *)0);
    nowpos = 2;
    set_sleep_mode(SLEEP_MODE_PWR_DOWN);

    for(;;) {
        //_delay_ms(1);
        sleep_mode();

        cli();
        if(btint) {
            switch(btint) {
            case HVPOS:
                if(nowpos == 0) {
                    movpos = 1;
                //} else if(nowpos == 1) {
                //    movpos = 0;
                } else {
                    movpos = 0;
                }
                break;
            case SECDIV:
                movpos = 2;
                break;
            case TRIGGER:
                if(nowpos == 3) {
                    movpos = 4;
                } else if(nowpos == 4) {
                    movpos = 5;
                //} else if(nowpos == 5) {
                //    movpos = 3;
                } else {
                    movpos = 3;
                }
                break;
            }
            if(movpos < nowpos) {
                btncnt = movpos + 6 - nowpos;
            } else {
                btncnt = movpos - nowpos;
            }
            while(btncnt--) {
                _delay_ms(BTNOFF_TIME_MS);
                digitalWrite(BTNOUT, LOW);
                _delay_ms(BTNON_TIME_MS);
                digitalWrite(BTNOUT, HIGH);
                _delay_ms(BTNOFF_TIME_MS);
            }
            nowpos = movpos;
            //nowposを退避(本体は電源OFFで記憶してなかったので処理を外す)
            //eeprom_busy_wait();
            //eeprom_write_byte((uint8_t *)0, (uint8_t)nowpos);
            btint = 0;
        }
        sei();
    }
}

完成ボード

操作性はそこそこで(雰囲気がイメージでは判らないので上記画像選択でビデオが観えるようにした)劇的に良くなったとは言えない

スクロールする操作はボタンを押すよりロータリーエンコーダで良くなったとは思う

ボタン

赤:HOLDボタン,回路は本体のボタンと並列で付けている(ATtiny13aは感知しない)

黄:H/V.Posの切替

青:S/Div専用

黒:Trigger関係3箇所の選択

電源と電源SW

本オシロは家の中でもコンパクトなため扱いやすく見易い場所で利用することができるのがメリットである

しかしACアダプタではコンセントまでのケーブル取り回しが厄介なこともあり006Pの充電池(8.4V)を使用することが多い

だが電力消費が9V120mAあるため,連続使用時間が約1時間(持たないことも)程度となる

そこでコンパクトな電源の構想を延々と考えている

・・・小容量のバッテリの昇圧では厳しそう

・・・コンパクトで大容量なら2000mAh+クラスのリポで昇圧・・・だけど高価かな(スマホ充電用の5Vの旧品が安く出回ってはいる)

・・・電子ライターのリポを取り出し3個直列という方法は・・・もともと取扱に気を遣うリポを直列は面倒なので極力パス

・・・やはり単4ニッケル水素×7個か8個かな

電源は電源SWを含み検討中

その他(まとめ)
  • ピンの余裕がないので機能別にATtiny13aを2個使用
  • ケースは横幅が増えたため凝らない程度で作り直しする予定
  • ATtiny13aの使い方を改めて検証できたのと,その開発ボードの欠点(欠陥かな)が判明したので満足
  • こつこつと調整したので記事の公開が遅くなった(最終編集が4/2(日)となる)

ロギング装置の作製(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均ライト解体から回収した中にあるが口径差のため削る必要がある(丸く削るのは簡単にはできないため本日は断念)

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

ページ移動

  • ページ
  • 1
  • 2

ユーティリティ

検索

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

過去ログ

Feed