工作と競馬2

電子工作、プログラミング、木工といった工作の記録記事、競馬に関する考察記事を掲載するブログ

WinSCPで、勝手にリモートのファイルが消えてしまう

概要

WinSCPで、勝手にリモートのファイルが消えてしまうことがあるため、暫定の対策をした。原因は今のところ分かっていない。


状況

環境

  • Windows10 PC
  • WinSCP 5.19.6 (現象自体はこのバージョンよりも前から起きていると思われる)
  • 既定のエディタ: Visual Studio Code
  • LinuxシステムにSFTPで接続し、ファイルを編集

現象

  • WinSCP上でVisual Studio Codeを開いていると、いつの間にか当該ファイルがリモート側から削除されている
  • WinSCPには、ファイル削除時に確認ダイアログが出るオプションがあり、有効にしているにもかかわらず、確認なしに削除されている
  • VSCode上では、削除されたファイルは閉じられることなくそのまま表示されている。すぐにそのまま保存すれば問題ないだろうが、保存できず
  • 頻度としては、1日使っていると起こるかな?という感じ。神出鬼没なので、実験して原因を追い込もうにもなかなかうまくいかない。

WinSCPの環境設定


原因の推測

今のところ不明だが、気になる部分を列挙。

  • VSCodeとの組み合わせの問題か? → VSCode以外のエディタにしてみたらどうか、確認したい
  • なんとなく、WinSCPの画面リフレッシュのタイミングで消えているような感じがする。リフレッシュは、自分で行っていないので、WinSCPが自動的に何かのタイミングで行っている???

対策

今のところ原因がわからないが、このままでは怖くて使えないため、対策としてWinSCPのゴミ箱機能を使うことにした。 ファイルが削除されるときに、ゴミ箱に退避してくれるものだ。 各セッションの設定で、高度なセッションの設定画面を出し、環境>ゴミ箱から、任意の設定を行う。リモートの普段触ることがないディレクトリを指定しておく。

この状態で、問題の現象が起きファイルは削除されてしまったが、ゴミ箱に残ってくれた。なので、最悪の状況はどうにか回避できそう。

しかし、原因はつかみづらく、しばらく格闘が必要な気がする。 そもそも、VSCodeを使っている時点で、FTPツールは卒業すべきかもなあ。

自動水やり器の小型ポンプの分解

概要

自動水やり器 ver2に使用している小型ポンプの分解を行った。



背景と目的

自動水やり器 ver2で使用している小型ポンプの1つが壊れてしまった。別の個体に交換すると同時に、せっかくなので分解して中身がどうなっているか、調べてみる。



詳細

1. 対象

かつて、Amazonで買った

https://www.amazon.co.jp/gp/product/B07VNDZDCR/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1

に入っていたもの。配線が切れてしまった。


2. 分解する

まず、モーター側の水を吸い込む側のカバーを無理やり破壊して、水を掻く部分が見える状態にした。

次に、水掻きを取り外し、モーターの軸が出ている面を破壊したところ、モーターが見えた。切れた配線の隙間から侵入したのか、モーターの軸の出口とケースとの間から侵入したのかわからないが、多少浸水の跡がある。

取り出したモーターは、ホビー用のものと思われる。配線が切れただけだったので、電源をつなぐとモーターはちゃんと回った。


3. 故障に見える現象について

ネット上で、この手のホビー用小型ポンプについてすぐに壊れるとか、初期不良の個体が多いとか、いろいろ書き込みがあり信頼性が低いような印象を受ける。しかし、私の手元にある6個は、今回の配線が切れたこと以外のトラブルはなく、1年以上水の中で動作している。 私の推定なのだが、

初期不良や壊れたように見える現象は、モーター起動に必要な摩擦抵抗がたまたまその時大きく、動かなかっただけ

なのではないかと考えている。なぜなら、私が調べた限り、

  • 手持ちのポンプに同じ電圧を加え電流を測ってみると、個体ごとにかなり大きさがばらつく。100-200mAくらい。
  • 裸のモーターを無負荷で4Vを与えると、50mA程度。
  • 同じ個体でも、まれに動き出さないことがある。このとき、4V、400mA程度の大きな電流が流れる。モーター静止電流だろう。水かきを無理やり動かすとその勢いで回り始め、電流値も本来の大きさに落ち着く。
  • 構造上、モーター軸とケースとの間は浸水をできるだけ防ぎ、なおかつモーター軸が回るだけの非常にわずかな隙間を持たせる必要があることは明らかで、モーター軸、ケース寸法の個体差で摩擦抵抗の大きさはかなりばらつくだろう。

だから。初期不良を指摘している人は、いちいち電流など測っていないだろうから、何が起きているのか、わからないのだと思う。

というわけで、私が2年近く使用した結果としては、

小型で安価だが実際には不良品はほとんど存在しない。もともと動く部分のあるものだから多少のメンテナンスは必要であることを考慮すれば、十分に役に立つポンプだ。

と感じる。



まとめと今後の課題

2年近く使ったポンプについて、中身を分解することで理解が深まった。


芽ねぎの水耕栽培(2) --- 発芽~収穫 ---

概要

芽ねぎの成長の様子をまとめ、収穫したものを試食した。



背景と目的

前回、種まきを行ってから、1か月弱が経過した。無事発芽して、収穫できるまで成長したのでここまでの成長の様子まとめと、収穫したものの試食を行う。



詳細

1. 成長の様子

水耕栽培の成長記録システムを用いて、1日1回写真を撮ったので、それをつなげたタイムラプス動画にまとめてみた。

dekuo-03.hatenablog.jp

  • 発芽までの所要日数は、種の場所ごとに数日以上差があった。最も早いもので6日目。遅いものは15日程度。しかし、発芽してしまえばそれなりにどの場所も勢いよく成長した。
  • また、発芽しない場所もあった。日当たりや水の量に大きな違いがあるとは思えないし、1か所あたりの種の数は20粒くらいなので、発芽率自体が低くても、確率的に1つも発芽しないというのはなかなか考えにくいので、理由がイマイチわからない。が、とにかく同じような条件で育てても発芽するかどうかはかなりバラツキがあると、考えておいた方がよいのだろう。

youtu.be


2. 収穫

根元5mm位を残して、5cm程度以上のものをすべて収穫した。少し、収穫が遅かったせいか、成長しきって濃い緑色になって先端が細い紐状になったものや、まっすぐになっていないもの、先端に残った種などを取り除いた結果、分量は握り寿司2,3貫が握れそうな程度となった。

タイムラプスを見ると、芽の出始めはどれも大体曲がっていて、成長とともにまっすぐになるので、曲がったままのものは単純に個体差なのかも?また、参考サイトに従い黒い種が残るのを防ぐためのネットをつけていたが、成長具合が見た目でよくわからないため、途中で外してしまった。そのせいもあって、やはりある程度種が残っている。収穫時に取り除く手間は確かに増えるのだが、成長そのものとはあまり関係がないので、次回以降はネットはしない方向になりそうだ。


3. 試食

握り寿司を作ってみた。素人なのでシャリをうまく握れていないが、一応形にはなった。



まとめと今後の課題

芽ねぎを無事収穫し、食べることができた。まだまだ、収穫できると思うので継続して育てていく。


田んぼ用リモートカメラ(2) 電気回路の設計・製作

概要

田んぼ用リモートカメラの電気回路を設計、製作した。



背景と目的

前回の構想に従い、電気回路を設計、製作する。



詳細

1. 仕様


2. 回路

2.1 庫内温度測定機能

庫内温度測定用温度センサは、手持ちのS-8100Bを利用。S-8100Bは廃番になっている。私の手持ち品としても最後の1個だったので、今後は後継品を使用することになるだろう。

2.2 BG96電源制御回路

BG96の電源を強制的に遮断するための回路。本来ソフトウェア(AT+QPOWD)でスリープできるはずだったが、事前検証でどうしてもうまくいかなかったので、仕方なくハードウェアを追加。

2.3 電池電圧測定機能

IO14で、BG96のリセット回路と電源電圧センシングを共用する。Unit-CAMは、使用できるGPIOが少ないため、強引に共用せざるを得なかったためだ。電池電圧センシングするためのポイントVBAT_SENSEは単純な抵抗分圧点ではなくリセット回路がつながってしまっているが、事前検証で電池電圧に対して電位がほぼリニアに変化することを確認できたので、ソフトウェアでの複雑な補正は必要なさそう。数10uAが常に電池から流れてしまう点は不本意だが、まあしょうがない。

2.4 Unit-CAMのOV2640電源制御

Unit-CAMは、回路図を見るとOV2640のPWDN端子をプルダウンしているため、OV2640はUnit-CAMに電源を供給すると常に大きな電流を消費する。電池駆動の機器として大きな問題だ。そこで、PWDN端子をESP32から駆動し、パワーダウン状態にできるように改造を施す。具体的には、

  • PWDN端子をプルダウンしている抵抗、すなわちUnit-CAMのR5を外す
  • IO2をOV2640のPWDNに接続する
  • R13でプルアップする

こうすることで、ESP32のIO2をLOWにしたときのみ、OV2640をアクティブとなり、ESP32がスリープになったときは、IO2はハイインピーダンスとなるため、R13のプルアップが効いて確実にパワーダウン状態を維持する。


3. 製作

ユニバーサル基板に実装。表面にBG96、裏面にUnit-CAMを載せた。線出しが多くてあまりキレイではないが仕方ない。(Unit-CAMにこんなにゴチャゴチャ線出しして使っている奴は居ないだろうな。) BG96モジュールは、基板端にネジ穴が切ってあるが、片方はモジュールとぶつかってしまいシルク通りの位置にネジが来ない。ここまで基板サイズケチらなくても、という感じ。

  • 表面

  • 裏面


まとめと今後の課題

田んぼ用リモートカメラの電気回路の製作ができた。次回は、ソフトウェア・クラウド部の実装を行う。


田んぼ用リモートカメラ(1) 構想および基本仕様の整理

概要

田んぼに設置するカメラの構想を固めた。



背景と目的

これまで3シーズン稼働させてきたリモート水位センサは、昨年ソーラー発電で電力を賄えるようになったが、データ通信は、当初水位の監視を目的としてSigfoxを選択して水位、電圧、温度のみを送っている。一方、リモートからより多くのデータを送信することができるとよいと考え、以前SORACOMのLTE-Mモジュールを使って、画像データを送る確認を行い、まずまずできそうだということを確認した。そこで、4シーズン目の今年は、ソーラー発電で稼働できてLTE-Mモジュールを使用して田んぼの画像を送信するリモートカメラを田んぼに設置し、成長記録画像を蓄積することとした。


詳細

1. 構想、基本仕様

このカメラの役割は、成長記録である。田んぼに設置されるためリモート水位センサと同じく電源を引くことはできない。また、初年度ということもあり実験的に稼働させたい。そこで、

  • 1日1回、定時に写真を撮影し、クラウドへ送信する
  • 電源はソーラー発電で賄う

を最低限の仕様とする。クラウド側の写真の扱いはユーザーのスマホに通知したり、ビューワーアプリのようなもので表示するなどいろいろ考えられるが、ひとまずはデータ蓄積を確実にやるために特に蓄積部分以外、用意しない。(気が向いたら何かするかもしれないが)

1.1 撮像

撮像は、LTE-Mモジュールの性能と製作コストを考慮して手持ちカメラのUnit-CAMを使用する。800×600と解像度はイマイチだが、定点観測の成長記録用には十分と考える。

1.2 通信

SORACOMのLTE-Mモジュールを使用する。

dekuo-03.hatenablog.jp

1.3 ソーラー発電

リモート水位センサと同様の構成を用いる。カメラ+LTE-Mなので、水位センサ+Sigfoxのリモート水位センサに比べて電力消費は大きい構成だが、送信回数が少ないため十分賄えると思われる。

https://dekuo-03.hatenablog.jp/archive/category/%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E6%B0%B4%E4%BD%8D%E3%82%BB%E3%83%B3%E3%82%B5%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%20ver3%28%E3%82%BD%E3%83%BC%E3%83%A9%E3%83%BC%E7%99%BA%E9%9B%BB%E5%AF%BE%E5%BF%9C%E5%9E%8B%29dekuo-03.hatenablog.jp

1.4 その他

田んぼへの設置であることから、防水、日射による高温対策など屋外での稼働に十分なハードウェア要件が必要だが、これもリモート水位センサと同様の構成となるだろう。



まとめと今後の課題

次回は、電気回路の設計、製作を行う。


自動車ダッシュボード上に設置するトゥイーター用の台座を3Dプリンターで製作

概要

自分が所有する車のスピーカーを交換を行うにあたり、トゥイーターの設置高さと向きを調整するための足を3Dプリンターで作製することで、ダッシュボード構造による制約を克服した。



背景と目的

私の所有する車に装着されている純正のフロントドアスピーカーは、取付位置の関係上高域の再生が難しい。そこで、トゥイーターをダッシュボード上設置可能なセパレートタイプのスピーカーに交換する。



詳細

1. 実施環境

  • 車両
    • ホンダ フリード(GB7型 2021年製)

2. システム構成

2.1 現行システム

  • 再生機
    • AVIC-RL511
  • フロントスピーカー
    • 純正フルレンジ
  • リアスピーカー
    • 純正フルレンジ

2.2 新規システム

AVIC-RL511の出力と純正配線とを変換するハーネス(カナック KLS-H807D同梱)を加工し、スピーカー信号をネットワークボックスまで取り出す。ウーファー信号は車両配線に戻してドアへ送り、ドア内でスピーカー変換ハーネス(エーモン 2079)を使用してTS-V7Aのウーファーに接続する。トゥイーターは、ダッシュボード上に固定する。

  • 再生機
    • AVIC-RL511
  • フロントスピーカー
  • リアスピーカー
    • 純正(交換なし)


2. ダッシュボード構造

ホンダ フリード(GB7)のダッシュボードは、中央手前寄りが高く、左右Aピラー近くが数cm低い。また、手前側に傾斜している。トゥイーターの取り付け位置として想定されるのは、Aピラー近くの3角窓の前だが、ここにトゥイーターを仮置きしてみると、中央手前寄りの盛り上がりに音がぶつかるような向き、高さになってしまい、乗員の頭の方向に向いてくれない。


3. 解決策の検討

トゥイーターの取り付け高さを稼ぐことと、傾斜を打ち消す必要があるため、トゥイーターに台座を付けたらどうかと考えた。形は、TS-V7Aのトゥイーター底面の大きさに合わせた円柱で、取り付け面の傾斜に合わせて斜めにカットされたようなものがあればよさそうだ。そこで、CADで以下のようなものをデザインした。 見た目は完全にレンコンだが、穴には意味がある。ややオフセット下中央の穴は、TS-V7Aトゥイーター底面の板金とねじ止めするための穴。周囲の穴は、樹脂をケチるための穴。


4. プリント

以前から使用している3Dプリンターで、プリントした。材料はPLA樹脂。 斜めの面は、3Dプリンターの積層厚みの関係でどうしても段々になってしまうので、プリント後にヤスリで均した。が、PLA樹脂のため硬くあまり平らにならなかった。しかし、両面テープの付きが均す前よりも明らかによくなったことが実感できたので良しとする。

PLA樹脂むき出しでは、見た目が良くないのと、強烈な直射日光が当たるダッシュボード上での使用を考慮して、フェルトを巻き付けることにした。100均で、シールタイプのフェルトを購入して、切り貼りした。


5. 設置

乗員の方を向けて設置できている。フェルトを巻いたおかげで、見た目もまずまず。

6. 試聴&試走

ダッシュボード上に音が広がり、各楽器の明瞭感が劇的に良くなった。トゥイーターを乗員の方をちゃんと向けて設置できたおかげだろう。試しに、走ってみたが振動でぐらつくこともなく、しっかり装着できている。



まとめと今後の課題

3Dプリンターによるトゥイーター用台座を作製し、理想的な位置にトゥイーターを設置できた。これから、車内という過酷な環境で稼働していかなければならないので、台座の様子を注視しつつ、音楽を楽しんでいきたい。


TensorFlowで、AttributeError: module 'tensorflow.lite.python.schema_py_generated' has no attribute 'Model' が出るとき

背景

Tensorflow LiteのTFLiteConverterでconvertしようとしたときに、

AttributeError: module 'tensorflow.lite.python.schema_py_generated' has no attribute 'Model' 

というエラーが出た。コードは以下のような感じ。

converter = tf.lite.TFLiteConverter.from_keras_model(model)

# 量子化の設定
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.representative_dataset = representative_dataset_gen # 量子化基準のデータセット
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
converter.inference_input_type = tf.uint8
converter.inference_output_type = tf.uint8

tflite_model = converter.convert()

※参考

www.tensorflow.org



環境



解決方法

github.com

こちらにある

I had the exact same problem using TensorFlow 2.4.1 with python 3.7 on Windows 10, and unzipping the above-mentioned schema_py_generated.py.zip to replace an existing but 0-byte file schema_py_generated.py in my python 3.7 installation subfolder Python37\Lib\site-packages\tensorflow\lite\python fixed the problem. I'd rather not use nightly versions unless I really have to.

Thanks!

に従って、schema_py_generated.py.zipというファイルをダウンロードし、解凍して出てきたschema_py_generated.pyを以下のフォルダに置く。というか、同名の0byteのファイルに上書きする。

Python37\Lib\site-packages\tensorflow\lite\python

これで、でなくなった。Tensorflowのバージョンをあげればそもそもこの問題が起きないのでは?と思われるが、今回は上記バージョンで実施しなければならなかったので、解決できてよかった。