連日のMARK-X赤道儀モータードライブ製造2021年09月23日 20時36分12秒

久しぶりにモータードライブ作ったという記事をブログに挙げた途端に次の注文いただきました。
仕様は全く同じ一体型のMARK-X用です。

■モーター在庫

モーター在庫から1個使用

■PICマイコンの設定
対応赤道儀などの一式の計算を載せておきます。
PICマイコン設定計算全パターン

PICマイコンのEEPROMに設定を書き込みます。

PICKitで書き込み

PICマイコンEEPROM設定

■モーター配線

A相とB相を逆に繋いで逆転で配線します。
ソフトで何でもかんでも対応することもできますがキリがないので配線で対応できる場合は手抜きです。
MD5配線

モーター配線

■リモートスイッチと電源用ケーブル接続

リモートスイッチ用ジャック配線

電源用DCジャック配線

■モータ駆動確認

駆動確認

■ケース加工

ケース加工開始

基板側加工開始

取付穴部分に穴をあけてビスを挿して

DIPスイッチ部分加工

DIPスイッチ部分くりぬき

モータ取り付け部分加工完了

■部品取り付け

カバー内配線状況

基板取り付け

全ての部品を取り付け

■リモートスイッチ用ジャックのビニールシール部分は傷つけてしまった

リモートスイッチ用ジャック

■MARK-X取り付け確認

MARK-X取り付け状態

MARK-X取り付け状態2

電源接続干渉確認

コピペ記事が技術をダメにする2017年09月28日 06時25分30秒

■きっかけ
最近IoT関連の技術開発のスタートアップの会社を取材しました。増資もして勢いがあるように見えます。若いけど優秀なエンジニアも揃っていて、と自信満々。いわゆる、はんだ付けカフェやレーザーカッター、3Dプリンタもそろえた「工作室」も一般に開放しました。
ところが、この会社のホームページのエンジニアが書いたArduinoでの温度センサーを使う記事が他のサイトのコピペ記事で、しかも、他の記事よりも質が悪い始末。
この記事は公開されてから4ヶ月以上放置されており、書いた当人以外のエンジニアもお粗末さを指摘していないということになります。
私はこの会社の技術力には疑問を持たざるを得ず、社長の資質にも疑問を感じる次第となりました。
社長に指摘の連絡をしましたが、「本人に伝えておきます」程度の反応でした。

■コピペ記事の弊害
コピペ記事の弊害はいわゆる検索エンジンに引っかかる複数の記事が「同じ」だということです。正しい内容ならもちろん問題ありません。
いくつかの主張のうちの一つを自分の考えで選択しているのならまだしも、無理解、無思想でコピペしてあたかもそれが正解かのような印象を持たせる。
間違っているのに数多くの記事で同じことを言っているのでそれを正しいと鵜呑みにする。
そこが問題です。

■技術の基本は考察と実験による実証
コピペ記事は書いてあることを鵜呑みにしてそれがソフトウェアであればコピーして実行して試しますが、それが正しい結果なのかの検証をしません。
なぜ、そのような計算をして、そのような結果が得られているのか。
それらを自分自身の頭で考えて検証してこその技術です。



Sensirion製温湿度センサーの湿度が100%になる?2016年05月09日 07時34分56秒

自作のWeatherSensorShield

現象

Weatherduinoという製品のサンプルライブラリをベースにセンシリオン製のSHT-11という温湿度センサーからのデータ取得を行っておりました。

ソースコードを何度確認してもデータシート通りの演算のように見えるのに、観測結果の湿度がいとも簡単に頻繁に100%に達してしまうのです。

Weatherduino用のライブラリはこちらから入手可能です。

このセンサーの入手はストロベリーリナックスが比較的安くて良いでしょう。

Weatherduinoのサンプルプログラムのバグ

さて、本題です。 上記の菅工房のサンプルライブラリG7Weather3.cppのSHT-11の処理では以下の演算部分があります。

// SHT11 温度(℃)・湿度(%)取得
void G7Weather::get_sht11 (float *temp, float *humi) {
       unsigned short sot, sorh;
       float t, rhl, rht;
 
       // 温度読込み
       sht_tsseq();
       sht_write(0x03);
       SHT_SDA_H;
       while (SHT_SDA); // 変換終了待機
       sot = (unsigned short)sht_read(1) << 8;
       sot |= sht_read(1);
       sht_read(0);

       // 湿度読込み
       sht_tsseq();
       sht_write(0x05);
       SHT_SDA_H;
       while (SHT_SDA); // 変換終了待機
       sorh = (unsigned short)sht_read(1) << 8;
       sorh |= sht_read(1);
       sht_read(0);

       // 温度補正 14bit (3.3V)
       sot &= 0x3fff;
       t = -39.66 + 0.01 * (float)sot;
       *temp = t;

       // 湿度補正 12bit
       sorh &= 0x0fff;
       // rhl = -4.0 + 0.0405 * sorh + (-2.8 * 0.000001) * (sorh * sorh); // Ver.3
       rhl = -2.0468 + 0.0367 * (float)sorh + (-1.5955 / 1000000.0) * (float)(sorh * sorh); // Ver.4
       rht = (t - 25.0) * (0.01 + 0.00008 * (float)sorh) + rhl;
       if (rht > 99.0) rht = 100.0;
       *humi = rht;
}

この処理の中でのバグは以下です。

(float)(sorh * sorh)

この部分だけですね。問題があるのは。 sorhという変数はunsigned shortで有効なデータは12ビット分です。単独で使う場合は16ビットで十分ですが2乗すると演算結果は16ビットでは足りなくなります。

バグ修正

なので、以下のように修正の必要があります。

(float)((long)sorh * (long)sorh)

観測データは12ビットなので最大値は4095となります。 それを2乗すると16769025となり16ビットの最大値である65535を 超えてしまっていたわけです。

一方、符号付のlongの正の最大値は2147483647ですので十分に格納可能になります。 この修正により、湿度が簡単に100%になる問題は解消しました。 原因解明に3年かかりました。

ちなみに、写真の基板はWeatherduinoではなく自作品です。 ArduinoUnoとの組み合わせで使っています。

モータードライブコントローラとステッピングモータの接続2015年07月07日 23時45分49秒

五藤光学8cm赤道儀用モータードライブ製造で、今回使用するモータはビクセンMT-1とMD-5/MD-6で使われている日本パルスモーター社製です。
モデルとしては同じモータを使っています。
以前に10個購入した物の在庫を使います。

以下の在庫から1個使って製造。
※写真としてはこの日のものではありません。未来です。左に写っているのが完成品のモータードライブです。

モータはタカチMB-1というアルミケースに組み込みます。これはMARK-X赤道儀用で選定した部品で、コントローラ内蔵型のモータードライブとなり、製造過程や方法論も全てMARK-X赤道儀用で開発したやり方です。


配線して駆動確認。問題ありません。
※後日「カタカタ」音が気になって個体を変えますが改善しませんでした。



モータードライブコントローラ追加製造完了と発振周波数記録2015年07月05日 22時46分25秒

五藤光学8cm屈折赤道儀の赤道儀の純正モータードライブは現在入手することは困難です。メーカも対応できません。そんな中でモータードライブの相談を受けましたので、注文を受け付けました。

モータードライブコントローラ基板製造1ロット10枚分完了しました。

部品実装完了しましたので発振周波数測定です。




1枚づつ分周した結果の周波数を測定しているところです。これを逆算して実際の発振周波数を求めます。水晶発振子は8MHzの物を使っています。

私のモータードライブコントローラの製造では単純な水晶発振子の仕様上の周波数では計算せずに、実測値でタイマーカウンタの分周設定をするようにしているからです。