A5サイズの6穴ファイルシステムには3つの規格

A5サイズの6穴には、主に「システム手帳用」と「ルーズリーフ用」の2種類の規格が存在します。システム手帳用は、穴の間隔が一定で、リフィルを差し替えて使うことを想定しています。一方、ルーズリーフ用は、A5サイズのルーズリーフを綴じるためのもので、穴の間隔が異なります。
また、100円ショップではA5サイズでありながら、B6Sサイズ用のとじ穴リングをもつバインダーが存在します。

システム手帳用(6穴)

  • 穴の間隔:中央の間隔は70mmで穴は19mm間隔で上下に3穴づつ空いてます。システム手帳リフィルを差し替えて使うことを想定しています。
  • 特徴:システム手帳用のリフィルを自由に差し替えが可能です。穴あけにはシステム手帳用のパンチが必要です。
  • サイズ:A5サイズ(148mm x 210mm)の用紙を使用します.

システム手帳用(B6-S 6穴)

  • 穴の間隔:中央の間隔は51mmで穴は19mm間隔で上下に3穴づつ空いてます。本来バイブルサイズのシステム手帳リフィルを差し替えて使うことを想定したとじ穴規格です。
  • 特徴:セリア100円ショップで売られている和泉化成株式会社のA5サイズ6リングバインダー専用となっています。穴あけにはシステム手帳用のパンチが利用できます。
  • サイズ:A5サイズ(148mm x 210mm)の専用リフィル用紙を使用します.
  • 穴の間隔:システム手帳用とは異なる間隔で、A5サイズの20穴ルーズリーフをもとに設計されています。そのため、中央の間隔が8穴分間隔の約67mm(9.5×7)になります。
  • 特徴:A5サイズのルーズリーフ用紙との互換性が高いので、6穴バインダーでも20穴ルーズリーフ用紙を綴じることができます。またルーズリーフ用の多穴パンチが利用できます。
  • サイズ:A5サイズ(148mm x 210mm)のルーズリーフ用紙を使用します.

M5stickC ENVII HAT & OneWire DS18B20

2系統同時に使ったときのメモ

M5StickC ENVII HAT DSB18B20 OneWire

  • ENV.II温度・湿度・気圧センサー HAT
  • DSB18B20温度センサー Grove端子接続

を同時に接続した場合は初期化で

void setup() {
M5.begin();
Wire1.begin(0, 26);
sensors.begin();
・・・・
}
  • 「UNIT_ENV」ライブラリ内の「SHT3X.h」「SHT3X.cpp」「Adafruit_BMP280.h」という3つのファイルを、作成したスケッチフォルダの下(XXX.ino と同じ場所)にコピーする。
  • コピーした「SHT3X.cpp」内の「Wire」という記述を、全て「Wire1」に変更する。
  • コピーした「SHT3X.cpp」内の「Wire1.begin();」という記述について、「Wire1.begin(0, 26);」(HATのピンソケット名)に変更する。
  • コピーした「Adafruit_BMP280.h」内の「TwoWire *theWire = &Wire」という記述について、「TwoWire *theWire = &Wire1」に変更する。

Arduino IDEからM5StampC3への書き込み

M5StampC3への書き込み後、Serial.printの結果がシリアルモニタから出力されなくなってしまった。LEDなどを見ると書き込めていそうなのだが、最初のリセット後のメッセージがでたあとシリアルモニタからは何も出力されない。

ツールメニューのUSB CDC On Boot:がC3系では関係している事がわかった。

Disableにすると無事に出力される事になったが、逆の場合もあるらしい。

RobotShopのI2C 土壌水分センサー

RobotShopが扱う「Catnip I2C moisture sensor 土壌水分センサー」

を使ってM5Stack Toughとの組み合わせで、プランターの土壌水分をモニタリングする記事を見つけたので、センサーを購入してみた。
このセンサーはAmazonやAliexpressで売られている安価(¥500程度)な静電容量式土壌水分センサー

Capacitive Soil Moisture Sensor V1.2

では測定周波数が1.5MHzだが、本機は16MHzと比較的高く、温度や電気伝導度の影響も公開しているので補正をすればある程度実用になるのではないかと試してみた。
価格は¥2,234とやや高いが、本格的な静電容量式土壌水分センサーの10分の1以下である。

M5Stack用にはArduino用のライブラリがあり、Arduino IDEで開発できる。またインターフェースがI2Cであるため、アナログ出力の安価なセンサーより扱いやすい。
まずは、記事のM5Stack Toughに近いM5Stack Core2で試してみた。ケーブルにはGrove用の50cmコネクターケーブルを使って鉢花の土壌に挿してモニタリングしてみた。
すると比較的安定的に土壌湿度、照度、温度の値が出力され良好な感触を得た。

照度は最も暗い値が65,535で明るいほど低くなるので注意が必要だった。別の同シーリズ製品では防水のため黒い熱収縮チューブで覆っているために、照度の測定はできないものも存在する。しかし、せっかく値が出力されるのだから透明な熱収縮チューブでカバーしてみた。

実用的なロガーとして使用するため、タカチの防水ハンドヘルドケースWHシリーズを利用したソーラーパネル充電付きNi-MH電池駆動のシステムをWeb記事を参考に制作した。
M5Stack Core2は高価でフィールドロガーとしてはもったいないので、手持ちのM5StampC3を利用して組んでみた。

Arduino IDEプログラム


#include <Adafruit_NeoPixel.h> // LED用ライブラリー
#define LED_PIN 2
#include <Wire.h>
#include <I2CSoilMoistureSensor.h> // 土壌水分センサー用ライブラリー
#include "Ambient.h"
#include <WiFi.h>
#include <esp_task_wdt.h>
#define WDT_TIMEOUT 90 // WDTウォッチドッグタイマー時間を指定

I2CSoilMoistureSensor sensor;

// create a pixel strand with 1 pixel on PIN_NEOPIXEL
Adafruit_NeoPixel pixels(1, LED_PIN);

uint8_t color = 0, count = 0;
uint32_t colors[] = {pixels.Color(125, 0, 0), pixels.Color(0, 125, 0), pixels.Color(0, 0, 125), pixels.Color(125, 125, 125)};
const uint8_t COLORS_LEN = (uint8_t)(sizeof(colors) / sizeof(colors[0]));

// Slee time sec.
#define TIME_TO_SLEEP  60  //サンプリング間隔(秒)

// WiFi
#define SSID "xxxxxxxx"
#define PASSWORD "xxxxxxx"
#define RETRY 20

// Ambient
#define CHANNELID xxxxxxx
#define WRITEKEY "00000000000000"

WiFiClient client;
Ambient ambient;

bool connect_wifi() {
    int i = RETRY;
    WiFi.begin(SSID, PASSWORD);
    while (WiFi.status() != WL_CONNECTED) {
        if (!i--) {
            // リトライ回数の上限に達したら接続失敗
            Serial.println("Could not connect to WiFi");
            return false;
        }
        delay(500);
        color = 0; // LED Red
        pixels.setPixelColor(0, colors[color]);
        pixels.show();
        Serial.print(".");
    }

    Serial.print("WiFi connected\r\nIP address: ");
    Serial.println(WiFi.localIP());
    color = 1; // LED Green
    pixels.setPixelColor(0, colors[color]);
    pixels.show();
    return true;
}

void setup() {
    pixels.begin();  // initialize the pixel
    // Watch Dog Timerを設定
    esp_task_wdt_init(WDT_TIMEOUT, true);
    esp_task_wdt_add(NULL); // WDTの開始

    // Wireを指定する場合は本体のラベルを確認
    Wire.begin(9,8,10000UL);  // SDA,SCL,Clock 10KHz
    Serial.begin(115200);
   // シリアルモニタの準備ができるまで待つ
    while( !Serial ) {
    }
    Serial.println("Serial Port OK!");
    
    // センサーの初期化
    sensor.begin(); // reset sensor
    delay(1000); // give some time to boot up
    Serial.print("I2C Soil Moisture Sensor Address: ");
    Serial.println(sensor.getAddress(),HEX);
    Serial.print("Sensor Firmware version: ");
    Serial.println(sensor.getVersion(),HEX);
    Serial.println();

    // 測定
    while (sensor.isBusy()) delay(50); // available since FW 2.
    float mos = sensor.getCapacitance(); // 土壌水分値は190から460ぐらい
    float tmp = sensor.getTemperature()/(float)10; // 値は℃の10倍なので10分の1にする
    float lig = (sensor.getLight(true)-65535)*-1; // 最も暗い値が65535なので、差の逆数とする

    // 測定値出力
    Serial.printf("Soil mois: %4.0f\r\n", mos);
    Serial.printf("temp:%4.1f'C\r\n", tmp);
    Serial.printf("Light:%4.0f\r\n", lig);

    // 無線LANへ接続
    if (connect_wifi()) {
        ambient.begin(CHANNELID, WRITEKEY, &client);

        // 土壌湿度、温度、照度の値をAmbientに送信する
        ambient.set(1, mos);
        ambient.set(2, tmp);
        ambient.set(3, lig);

        if (ambient.send()) {
            Serial.println("The data was successfully sent to the ambient");
            color = 2; // LED blue
            pixels.setPixelColor(0, colors[color]);
            pixels.show();
            delay(1000);
        }else{
            Serial.println("Failed to send data to ambient");
        }
    }

    // ディープスリープモードに落ちる
    sensor.sleep(); // available since FW 2.3
    Serial.println("### DEEP SLEEP START");
    pixels.clear();
    pixels.show();
    esp_deep_sleep(TIME_TO_SLEEP * 1000000);
}

void loop() {
    // deepsleepでループすると毎回setup()が呼ばれるためloop()は特に何もしない
    esp_task_wdt_reset(); // 処理が正常に進んでいる場合にウォッチドッグタイマーを初期化
}

最初はM5Stack Core2と同じように測定値が得られたが、数回繰り返すと異常値になってしまった。

最初はセンサーに使っているケーブルを疑って、4芯シールド26AWGケーブル(MOGAMI 2948)50cmに交換してみたが変わらなかった。
次はGroveコネクター周りでM5Stack Core2とM5StampC3との大きな違いは電源部ではないかと考え、大きな違いはM5Stack Core2はバッテリーを内蔵しているため、センサーに流れる電圧の安定度が違うのではないかと考え、M5StampC3から引き出すGrove端子のセンサーへ供給する電源部を外部からの電源供給配線から直接繋いでセンサーへ供給してみた。すると今度は数回計測するとセンサーはフリーズ状態になりセンサーのLEDが点きっぱなしになってしまった。
電源にはNi-MHを4本使っているので、使い始めは5.2Vくらいになるので高すぎたのであろう。
ここで、土壌水分センサーの仕様を見返すと3.3〜5.0Vとなっている。電流も3.3Vの方が少ないので供給電圧を3.3VにするGrove端子を増設してみた。基板の上は標準のM5StampC3増設端子や電源から直に電源供給した端子などが並び美しくないが、なんとか収まった。


M5StampC3からGrove端子を実験のために3つ取り付けた。基板上のコネクタが3.3V電源。

結果は上々で、ベランダで育てているバラのプランターにセンサーを挿し込んでモニタリングをしている。

センサー、となりのチューブはスプリンクラー用

左の土壌水分値が急に上がっている箇所ははタイマー自動潅水による。右のLightはセンサー値から655,535を引いた逆数

金沢さいころきっぷ旅行2日目

金沢旅行2日目、朝起きると屋根に雪が積もる冷え込みになっていた。

予報では曇り日だったが、これが日本海側の天候である。雨さえ降らなければ予定通り、海岸付近まで走ってみることにした。

近江市場のホテルから

Wahooのサイクロコンピュータ純正アプリ「ELEMENT」が示す経路で海岸の街、金石(かなわ)・大野エリアへ向かった。最初は町中の玉川図書館あたりを通ってJRの新幹線と在来線の高架下をくぐり抜けて犀川へ出た。

玉川図書館
北陸新幹線の高架

すると犀川沿いの古い工場のような建物が見えた。

金沢職人大学校
金沢職人大学校教室
れんが亭

調べてみると古い紡績工場を活用した「金沢市民芸術村」と「金沢職人大学校」であった。一種の職業訓練学校であるが、無料で3年間伝統工芸を学べる施設と市民の芸術活動を支援する施設であった。よく似た名前の施設が奈良県にもあるが、眺めが良いホテルと道の駅レストランが作りたかった前知事の遺産とは大違いであった。

犀川沿いの自転車道
犀川沿いの自転車道
犀川沿いの自転車道

そこから犀川の河川敷を見ると管理道路と兼ねた自転車道があるのに気づいた。さっそく降りて自転車道を河口に向かって走ってみることにした。なんと走りやすい道であるか、整備状態はよくBromptonのスピードはどんどん上がっていく。これぞ真の自転車道である8kmも続き金沢県の力の入れ具合が違っている。市内の道路にも自転車帯が引いてあり、色も白色や茶色で景観にも配慮してあった。奈良県にも一部は河川敷を通る自転車専用道があるが、とてもこのレベルに達していない。奈良市内の自転車帯は青色でセンス無く、小さな看板だけを立てて自転車道を整備したと言っている奈良県とは大違いである。

Mac OSからQNAP NASにマウントできない

以前から使っていたNETGEARのREADYNAS RN214が更新時期になったが、もうNETGEARはNAS市場から撤退したので、QNAP TS-264を買った。

試しに手持ちの2TB HDDを入れて使ってみた。基本的な設定が終えて、共有ファイルへMacBookから接続してみたがエラーメッセージが出て接続できなかった。

色々試してみたが、iOSのiPhoneやiPadからは接続できる。手持ちのWin10のThinkPadやUbuntu 22.10からも問題なく接続できた。

そこでQNAPのサポート・サービスを利用することにした。

やり取りに時間はかかったが、Wiresharkというネットワーク・プロトコルアナライザーを導入してログを送ったところ、「MacがSMBのバージョンを1でNASにネゴシエートして、NASはSMBバージョン1を許可していないため、プロトコルネゴシエーションの際にセッションが確立できない」という回答が得られ、SMB1を無効にする設定ファイルを書き込むという解決方法を提案してくれた。

macOS で SMB 1 や NetBIOS を無効にする方法

これにより見事にアクセスでき、今までREADYNASのTimeMachine領域へ接続できなかった問題も解決された。

QNAPのサポートは的確で優秀なことが分かった。

Mac版宛名職人に住所録をファイルから追加する

喪中葉書をだすためにCSVファイルの住所リストから、既存の宛名職人V25の住所録にファイル読み込みをしたら、別の住所録として生成された。

追加したいのだがメニューにはない。Winバージョンには「開いている住所録に、外部ファイルを読み込む」というメニューからの選択肢があるらしいが、Mac版には無い。そこで、検索してみると次の記事が役に立った。

Mac「宛名職人」に「筆まめ」から複数の住所録データを移行する方法


なんてことはない、新しく生成された住所録のリストを全て選択して、ドラッグアンドドロップで既存の住所録にコピーする。

MacBook Proの時計がタイムサーバに同期しない

システム設定の「日付と時刻を自動で設定」にチェックを入れると、Macの日付が2年ほどずれてしまい、メール受信やサイトアクセスのエラーが満載となってしまった。

「日付と時刻を自動で設定」のチェックを外して手動で設定すると正常に動作するが、チェックを入れ直すと大幅にずれてもとに戻ってしまう。

検索してみると有効な回答が少なかったが、バッテリー駆動で放置して置くとなりやすいらしい。

Appleコミュニティに有効な回答があったので参考にしてみた。

結局、解決方法はターミナルコマンドで

$ sudo rm /var/db/timed/timed/com.apple.timed.plist
$ sudo sntp -sS
ntp.nict.jp+6819667.1 +/- 0.022490 ntp.nict.jp 2001:df0:232:eea0::fff4
$ ps -ef | grep timed
501 5351 1 0 6:26PM ?? 0:00.28 /usr/libexec/mlruntimed
266 7247 1 0 8:23AM ?? 0:00.04 /usr/libexec/timed
501 7292 7236 0 8:29AM ttys000 0:00.00 grep timed
$ sudo kill 7247
$ sudo sntp -sS
ntp.nict.jp-0.001282 +/- 0.021482 ntp.nict.jp 2001:df0:232:eea0::fff4

設定ファイルを消して、プロセスをkillしてsntpコマンドで再同期させると元にもどった。

潅水用ポンプの交換

AliExpressから注文したダイヤフラムポンプが到着したので交換した。

高圧ダイヤフラムポンプ,自吸式,6l/min,70w 72w,dc 12v,130psi,6aパイプ,1/2

同時に取り付け方法を見直して、SPFで90cm程度の柱を制作して取り付けた。

以前は適当な板に水平に取り付けていたので、稼働時に振動で動いていた。

中華製のタイマーの取り付けにはDINレールを使ったが、溝の精度が低くガタガタだった。

SINOTIMER TM-616 ウィークリープログラマブルタイマー 30A DC 12V

置き場所はベランダだがタイマーに水がかかると誤動作の可能性があるので、ダイソーで買ったプラケースを逆さまにして取り付けた。

ポンプとタイマー

ソーラー発電チャージコントローラー故障

ソーラー発電チャージコントローラー故障

KAUSMEDIA CMP03

KAUSMEDIA CMP03

5年目にして正常な出力が得られず故障したので国産で定評のあるDENRYO製に交換した。

DENRYO Solar Amp B

12V対応 国内メーカー 電菱製 DENRYO PWM方式 10A ソーラーチャージコントローラー

交換した結果、正常に散水ポンプが稼働した。

しかし、別の問題として普通の流水ポンプは停止中も水が流れて、サイフォン原理でポタポタと点滴のように灌水してしまう。

やはり、ダイアフラムポンプに交換しなければならない。