micro:bitからのログの方法

Wi-Fi機能があれば簡単ですが、micro:bitには無いので普通はBLE使うのですが、BLEはいまいち使いづらい、

というわけで、もう一台micro:bitを用意してmicro:bit間は専用のradio機能で通信、受け側はUSB serialを使えば割と簡単にログが取れます。パソコンでのターミナルのシリアル動作はいまいち不安定(文字が抜ける)なのでMakeCodeのログ機能で表示させてみました、最終的にはProcessingで物体の状態を表示させるのが目的ですが、

micro:bitの送り側からはコンパス情報と加速度情報を送って、受け側にシリアル転送、MakeCodeのログ機能でビジュアル化しています。

<コンパス機能>

角度360から0は断絶してますが、micro:bitを徐々に回転させた時の数値の変化

<x軸の加速度>

micro:bitを手で左右(x軸方向)に振ってる状態

事前の処理は必要ですが、これらを使ってクラゲホバークラフトの安定化に使うつもり、

P.S. USB シリアルのデータ抜け、飛びはM1 Macで起こるけれどもIntel Macでは問題なさそうだ、MakeCodeではまともそうな理屈はつきませんが、

 

admin

 

 

 

 

 

 

 

シリカゲル再生

乾燥剤はものによっては再生可能らしいのでやってみた

要は熱を加えて水分追い出せば良いのだから、最初はフィラメント脱湿機でやってみたけど赤い色(吸湿状態)は数時間ではほぼ変化しない

で、世の中でよくやられているようにフライパン(弱火)で炒ってみる、これは顕著に変化して、徐々に赤玉が青玉に変化していく

写真は赤玉ほとんど見えなくなった状態なのでこの程度で完了、二、三回はこの方法で再生できそうだ、再生後は適度に空気を通す袋に入れて使用

 

admin

3Dフィラメント防湿

フィラメント保管用に密閉ケースを買ったつもりでしたが、半年ぐらい経過すると湿度上昇して、乾燥剤追加しても割とすぐの戻ってしまう、つまり密閉度が保証されなくなってしまった模様で、フィラメントもポキポキ折れるから完全に吸湿してます

全体をボックスに入れるのではなくて、フィラメント一巻を個別で密閉袋に入れるような仕組みに変更するために

3Dプリンターフィラメント収納バッグ 真空ハンドポンプ付き

というのをAmazonで購入、中の空気を抜くポンプ付きですが、なぜポンプで中の空気が抜けるのか、つまり一方向性をどうやって確保しているのかがおそらくポイントなんだろうけどメカニズムは不明

ともかくも、中心部に乾燥剤いれて封入してみました、これでなんとかなるものなのかは時間経過しないと効果の程は不明ですが

ともかくも、3Dフィラメント保管用には吸湿したフィラメント乾燥用のヒーターと吸湿防止手段の二つは必需品です

 

admin

 

ホバークラフト(ver2.1ぐらい)

3Dプリンタの熱にも耐えられる季節になってきたので、ホーバークラフトのアップデートをしてみる

① PLA性は車の中に放置されると軟化してグダグダになるので材料はABSに変更

造形パラメターはチューニングが必要、プラットホームから剥離対策(樹脂押し出し量増やして接地面積大きくする)とラフトとオブジェクトの距離設定が大きくて最初の層の密着が改善用(デフォルトで良いけどPLAだとうまく剥がれないから大きめにしていた)

 

② ファンの位置極めができるようにバンプを追加

裏側から隙間テープで留めて、ファンの水へからの角度を安定させる

 

③ 移動方向側のファンの回転数を浮上できる範囲で小さくする

つまり回転数の差を大きくして反対側が持ち上がる量を大きくしてやることで推力を増加してやる

 

 

PWM指定で最大値は1024、

 

以上で左右(前後)方向の移動はコントロールできるようになった、動画は以下のリンクから

マイムービー – SD 480p

ただし当然の如くドリフトはするから、micro:bitの加速度センサーとジャイロ(コンパス)機能使ってフィードバックして安定したポジションを取るようにするのが次のステップ

 

admin

 

 

ssd1306をRustで動かす

ラズパイゼロのRustクロス環境使って、ssd1306を動かしてみる

以下のリンクのサンプルプログラムを動かしてみただけですが、

https://github.com/fmckeogh/ssd1306-raspi-examples/tree/master

クロス環境はVMware +Ubuntu(20.xx)の環境です

Rust(@Raspberry PI zero)のクロスコンパイル環境構築

Cargo.tomlはそのまま使い、examplesディレクトリのgraphics-i2c.rsをビルドしてラズパイにscpで転送して実行した結果は以下のようになります

ADCもFFTもどちらのcrateも存在しているようだから、PythonコードをRustで置き換えできそうです

 

admi

地震計を作ってみる(その4)— コードと回路からの考察

震度計算で気象庁から提示されているのは以下のリンクになります。

https://www.data.jma.go.jp/eqev/data/kyoshin/kaisetsu/calc_sindo.html

じゃ、近似計算でどの程度近似なのかをちょっと考察、

計算方法は① 加速度波形を周波数軸に変換(実質FFT)して、② 重み付けを行ない、さらに③ それを周波数に変換(実質IFFT)して、④ 0.3秒以上継続する値の最小値を求めて⑤ 震度計算式(対数目盛)で求めた値を四捨五入と切り捨てで震度とする、というステップになりますが、

近似計算と気象庁提示の差分のポイントは、②の周波数重み付けに差があります、このフィルターの特性は建物や構造物への影響度を考慮したものだと思われます

filter.png

近似計算方式では、ハイカット側はデジタル処理ではなくて、以下の回路図で加速度計に付加されているキャパシタ(0.1μF)で一次のカットオフ周波数30Hzぐらい(デフォルトでは内蔵の3300pFでカットオフ800Hzを変化させている、一方ロー側は格段の処理はされていない模様

コード(以下のリンク)でフィルター処理のコメントありますが、実質は平滑処理になってます

https://github.com/p2pquake/rpi-seismometer/blob/master/seismic_scale.py

とはいえ、FFTを使って計算するのとそれほどの差があるわけでもなさそうだから、実用的には十分じゃないかというところで、正確に震度を求めようとすると計測器を設置する工事だけでも大変なのだから

 

P.S. pythonでnumpyの機能にあるFFTを実行してみると、

M1 Macとラズパイzeroでの速度比較

<用意したデータ>
sampling_rate = 2000  # サンプリング周波数(Hz)
T = 1 / sampling_rate  # サンプリング間隔
t = np.arange(0, 1.0, T)  # 時間ベクトル

# 信号生成(50Hzと120Hzのサイン波を重ねたもの)
f1 = 100  # Hz
f2 = 300  # Hz
signal = np.sin(2*np.pi*f1*t) + 0.5*np.sin(2*np.pi*f2*t)

<実行速度>
M1 Mac:		np.fft.fft:     0.000027 [sec] 
ラズパイゼロ:	np.fft.fft:	 0.001830 [sec] 

ふーむ、およそ60倍ぐらい違うか、想定範囲だけど

ラズパイzeroでもフレーム周期5msでできなくはなさそうなレベル

 

admin