ふる~いソケットレンチセット

このふる~いソケットレンチセット・・・安物ですがウン十年使っています。

かなり前から中のプラスチックがボロボロで工具のおさまりが悪くなりました。

プラスチックだけ取り出すとこんな感じ

そこで作り直す事にします。
まず大体の寸法を測ってJw-cadで図面を書いて・・・

ダイソーの6mm厚MDFボードをレーザーでカット。

こんな感じで納めます。

しかし6mm厚MDFだけだとちょっと薄く、取っ手を持って歩くとケース内で工具がバラけます。
そこで蓋側にプチプチを貼り付けて対策しました。

いままでソケットがバラバラでどこに何㎜のがあるかわからなくなっていましたがこれで大丈夫。

耕運機もらった・・その2

前回、エンジンを始動するとピチュピチュ音がしていた現象がいつの間にか治ったと書きました。しかし原因がかわからないままというのも気持ち悪いのでもう一度調べました。


結論を言うとシリンダーヘッドに鉄板をねじ止めし、その鉄板に燃料タンクをねじ止めする構造なのですが、このシリンダーヘッドのネジ穴から音が出ている様です。

ではネジあり/なしの音を比べてみましょう。動画にしてみました。

はっきり違いますね。間違いないです。
ちゃんと組み上げれば問題なかったところ、ネジをつけずにエンジンを掛けたのが間違いだった様です。

しかしこの穴、燃焼室につながっているんでしょうか?
なんでだろう?

耕運機もらった・・

知り合いから小型の耕運機をもらいました。
我が家の家庭菜園といっても大した広さはなく、まず自分で耕運機を買う事はないのですが鍬で耕すとヘトヘトになるし、もらえるのなら使ってみようかと。

但しくれた人も誰かから貰って10年ぐらい放置していたとの事。動くかどうかは分かりません。

シバウラのチビ楽200という機械です。 いつ頃の物かは分かりません。

空っぽの燃料タンクにに少しだけガソリンを入れ、リコイルスターターを引いてみましたがエンジンがかかる気配はありません。
でもプラグを外してスターターを引っ張ると火は飛び、点火系統は正常です。

ではキャブレターの掃除からですねー。
という事で外して開けてみました。やはりジェットは思いっきり詰まっています。
常套手段として荷札の針金でつつきました(こんな時のために荷札をを取ってあるのです)。なんかこうネバ~とした感触だったけど貫通しました。

フロートチャンバー内の汚れも取れるだけ取って組付けます。
で再トライ・・・・やっぱり掛かりませんね。しばらく試してダメだったので再びキャブを外してみたら、またジェットが詰まっていました。
こりゃタンクからキャブまでの燃料系統全部を掃除する必要がありそうです。

タンクは風呂場で洗い、燃料ホースはカチカチだったので交換しました。ストレーナーもコックもバラしてパーツクリーナーで洗浄。

キャブも再び徹底的に洗浄し、組付けようとしたところで本体とフロートチャンバーの間のパッキンが無くなっているのに気づきました。最初にバラした時にはあったので2度目の掃除の時に外れたんだと思います。
どこかで落としたんでしょうけど見つかりません。
どうしようか考えた挙句、自作する事にしました。

ガソリンに耐える材質が必要なので、ネットで調べたところニトリルという作業用手袋等に使われているゴムが良いらしいです。我が家にもゴム引き手袋はありますが布と一体なのでそのままだと何かマズそう。
ニトリルのシートならAmazonで売っていますが手元にはありません。
もうちょっと調べるとシリコンゴムも良いみたいです。これだと以前ダイソーで買ったのがあります。

リフローオーブンの時つかったシリコンゴム

コイツをレーザーで切ってみましょう。Jw-cadで二重丸を書いてカットします。

こんな感じ。輪ゴムにしか見えないですけど・・・

自作パッキン

サイズはピッタリです。

キャブレターに組付けるとピンク色のパッキンが見えてちょっとオシャレ。

これを組付けてエンジン始動。掛かりました!!
でも何だかピチュピチュという変な音がします。結構大きな音なので排気漏れかなーと思いマフラーを外してみても特に穴も見当たらず、そのまま取り付け。

小さなマフラー

その他色々調べたけど原因は分からず。まずは先に進みます。

あとエアフィルターも整備が必要です。
見たことのない形のエアーフィルター。スポンジにオイルを浸み込ませる「湿式」の様です。昔乗っていたバイクも湿式でしたが構造が違いますね。

開けてみるとスポンジはボロボロ。スポンジが溶けた様になってこびり付いているのを落とせるだけ落とします。

新たに適当なスポンジをハサミで切って取り付けました(オイルに耐えるのかは不明だけど)。
そして新しいオイルを入れて取り付けます。

あとは外したカバー等を元通りに組み付けて再びエンジン始動。すると何故かピチュピチュ音は消えていました。
何が原因だったんだろう。エアフィルター?

では実際に耕す準備を。
その為には爪を取り付ける必要があります。これまでは代りに車輪を取り付けてあったのです。

爪は途中で分割できる様ですね。初心者なので最小単位でやってみます。

爪は軸に通した上で穴にピンを貫通させて止めるのですが、今までついていた車輪のピンだと短すぎる事に気付きました。8Φで100mmぐらいのピンかボルトが必要です。こりゃ買いに行くしかないかなと思いながら工作室の中を探すとちょうどいいのがありました。しかも5本もある・・・

これで準備完了。
早速耕してみました。人生初の耕運機です。

ちゃんと耕せるじゃないですかぁ。これを鍬でやったら汗だくですよ。
うん。いいものを貰った。

小モス、U99に軽量化

今年6月から航空法が改正になるので100グラム以上のラジコン機は機体登録が必要になります。
この機体登録って6月以降に新規登録するとリモートIDという機器(でもまだ実物が世に出ていないっぽい)を積む必要がありますが、今の内に登録すれば3年間は免除なのです。 これには色々と言いたい事もありますが、体制をひっくり返せる様なエネルギーもなく、まずは所有する機体を順次機体登録しているところです。

大モス

で、下の写真の機体、ムサシノ模型のモスキート・モスを電動に改造したモノで私が初めて飛ばした機体なのですが、熊本地震の時に翼が壊れたままになっていました(本棚の上に乗せていたら揺れた拍子に本棚の裏側に落ち込んでプレスされたのです)。
なのでもう登録はしなくていいかと思っていたのですがそれも悲しいので応急修理して登録しました。

ムサシノ模型製キットを電動化したモスキート・モス。
ウチでは「大モス」と呼んでいる。

小モス

そして次の写真の機体。これはバルサとスチレンペーパーで作った1/2サイズのモスキート・モスですが、コイツが120gなのです。
これもこのままだと機体登録が必要なんですね。100gという制限はちょっと厳しすぎるなぁ。

スチレンで作った1/2サイズ。
「小モス」と呼ぶ。

これはできれば登録せずに済ませたいです。という事でU99(アンダー99グラム)を目指して軽量化してみました。
変更したのは次の点・・・

・モーターを2205→1105に変更。
・バッテリーを380mAhの2セルパック→Tiny用300mAhx2本に変更。
・サーボを4gタイプ→1.xグラム(公称値わすれた)品に変更。
・受信機をPWM出力→SBUS出力+PWM変換基板に変更。
・サーボコネクタを使わず直結。

その結果が次の写真で98gです。脚を除けば93gに収まります。

はかりに載せてみると・・・
98グラム!

飛ばしてみる・・・

機体サイズに対してパワー不足は感じません。でもやっぱり風には弱いですね。今までも弱かったけど軽量化するともっと弱くなった気がします・・・まあ98gじゃ仕方ないか。

各部の写真・・・

モーター。ペラはこれしかなかったので4inchの折ペラ。
ちょっと径が大きすぎる気がする。
いつだったかMakerFaireTokyoで買ったサーボ。

SBUS→PWM変換基板でサーボに接続。
変換基板はこの時作ったモノ(基板は再設計)。
サーボコネクタは使わず直結。
TinyWhoop用バッテリ2本を挿す為PHコネクタに変更。

最後に、今まで使っていて取り外した部品。

モーター、サーボが enRouteブランド だったりする 。
(ホビー用パーツを売っていた頃の)

これで今後も気兼ねなく飛ばせます。

ESC DR-20Aのファーム書換え

以前購入した激安ESC DR-20Aのファームを書き換えてみました。

まず最初に現状がどうなっているかを見ます。
FCのモーター端子2~3に接続してBLHeliSuiteで・・・
ん?現状のファームウェアはErased or unknownとなっていますね。一応パッケージにはBLHeliと書いてあるんですけど・・・
これだとどのファームを書けば良いのかわかりません。

ならばESCの基板を眺めまわします。
ラベルを剥がすと・・・

表側
裏側

この写真を基にBLHeliがサポートするボード一覧のページ(どこだったか忘れた)と比べるとソックリのボードが載っていました。そこにはDYS SN20Aというファームを使えと書いてあります。

追記:本家ページのこの資料を見てました。33ページのところ。
 ↓  ↓
https://github.com/bitdump/BLHeli/blob/master/Atmel/BLHeli%20supported%20Atmel%20ESCs.pdf

ではDYS SN20Aを書き込んでみます・・・が、DYS SN20Aにも3つありますね。
とりあえず DYS_SN20A _MAINを選んだらメモリー不足っぽいエラーがでました。そこで DYS_SN20A _ MULTIを試すと書き込み成功。

追記:MAINはヘリコプターのメインローター用、TAILはテールローター用、MULTIはマルチコプター用との事です。
 ↓  ↓
https://github.com/bitdump/BLHeli/blob/master/Atmel/BLHeli%20manual%20Atmel%20Rev14.x.pdf


書込みが成功するとこんな画面となります。


モーターを繋いで回してみると動作も正常だったので3個とも書き込みました。

これで謎バージョンだったファームを最新に上げる事が出来ました。

ところで、なぜバージョンを上げたかったのかというと、回転方向をBIDIRECTIONに設定したかったから(謎バージョンにはこの選択がないのです)。こうするとスティックの中点をモーター停止、上を正転、下を逆転にできるのです。息子はこれで水中ドローンを作ろうとしています。

自動金ノコ

気がついたら前の投稿から3か月が過ぎていました。
この間も色々とやってはいたのですが、更新をサボってしまったんですよね。
で、最近作ったのはこれ。自動金ノコ。

鉄を切るなら高速切断機が早いですがアルミを切る場合や外で作業できない時、いままで金ノコを使って人力で切っていました。でも時間はかかるし疲れるんですよね。

そこでみら太さんのブログに以前書かれていたのを参考に作ってみました。

ほぼ手持ちのガラクタから作りましたがギヤードモーターだけAliexpressで購入しました。12V167rpm、ブラケット付きで¥1,103-。

早速動作中の動画です・・・まだセンサーもスイッチも付ける前の画像。

その後、切り終わった事を判別するリミットスイッチと・・・

ノコ刃が引っかかってロックした場合を検出するフォトインタラプタを取り付けました。3秒以上変化がないとモーターへの通電を止めます。

センサーの信号をこの箱の中のArduinoで読み、パワーMOSでモーターをコントロールします。ボタンはスタートとストップ。

電源入力はXT60コネクタなのでドローン用3セルリポでも動くかも。
(野外で使う事はないですけど)。

使わない時、こんな感じで立てておくと邪魔になりません(多少)。

DSHOT信号を作ってみる。その2

前のを壊しまったので新たに発注していたNucleoボードが届きました。
実験を再開してモーターを逆転させてみようと思います。

左が新たに届いたNucleoボード。
右は壊したやつ。

前回「値として0~47のどれかを送ると逆転するはず」という様な事を書きましたが、結局何番なん?というと、やはり資料が見当たらないのでbetaflightのソースを眺める事にします。

探し当てたのはこれ。ソースツリーを~/Gitに置いたとして次の場所にあるファイルを見ると・・・
~/Git/betaflight/src/main/drivers/dshot_command.h

・・・こういう記述がありました。

 typedef enum {
DSHOT_CMDtypedef enum {
DSHOT_CMD_MOTOR_STOP = 0,
DSHOT_CMD_BEACON1,
DSHOT_CMD_BEACON2,
DSHOT_CMD_BEACON3,
DSHOT_CMD_BEACON4,
DSHOT_CMD_BEACON5,
DSHOT_CMD_ESC_INFO, // V2 includes settings
DSHOT_CMD_SPIN_DIRECTION_1,
DSHOT_CMD_SPIN_DIRECTION_2,
DSHOT_CMD_3D_MODE_OFF,
DSHOT_CMD_3D_MODE_ON,
DSHOT_CMD_SETTINGS_REQUEST, // Currently not implemented
DSHOT_CMD_SAVE_SETTINGS,
DSHOT_CMD_SPIN_DIRECTION_NORMAL = 20,
DSHOT_CMD_SPIN_DIRECTION_REVERSED = 21,
DSHOT_CMD_LED0_ON, // BLHeli32 only
DSHOT_CMD_LED1_ON, // BLHeli32 only
DSHOT_CMD_LED2_ON, // BLHeli32 only
DSHOT_CMD_LED3_ON, // BLHeli32 only
DSHOT_CMD_LED0_OFF, // BLHeli32 only
DSHOT_CMD_LED1_OFF, // BLHeli32 only
DSHOT_CMD_LED2_OFF, // BLHeli32 only
DSHOT_CMD_LED3_OFF, // BLHeli32 only
DSHOT_CMD_AUDIO_STREAM_MODE_ON_OFF = 30, // KISS audio Stream mode on/Off
DSHOT_CMD_SILENT_MODE_ON_OFF = 31, // KISS silent Mode on/Off
DSHOT_CMD_MAX = 47
} dshotCommands_e;

enamを使ってコマンド毎の番号を定義しています。注目したのは20番と21番。
20だと正転、21だと逆転する様に見えます。更にソースを眺めると、コマンドを送る時は10回繰り返して送っており、それ以降は指定された回転方向になりそうな雰囲気です。10回送るのは少しくらい伝送エラーが出ても確実に伝える様にだと思います。

そこでNucleoボードのGPIOにボタンを2個追加し、これらを押すと回転数信号の代わりに20と21の値を出す様にプログラムを変更しました。

そしてESCとモーターを接続し、逆転ボタンを押した後に回転させると・・・何も起らず同じ方向に回っています。
何か違うのかなー。

上記リストを見ているとDSHOT_CMD_BEACON1というコマンドもあります。これはたぶんモーターを機体発見ブザー代りに鳴らす時のアレみたいですね。
betaflightからはブザーの音色を5種類から選べるのに対し、上記コマンドもBEACON1~5まであるので間違いないでしょう。値として1番~5番を送ってやればモーターから音が鳴りそうです。
そこでさっき取り付けた2個のボタンを押せば1や2を送る様にプログラムを変更しました。
そして試すと・・・やっぱり鳴りません。

うーん。
betaflightのソースをもっと細かく見ていけば解るんでしょうけど結構大変ですよね。

そこでFCから出てくる信号をオシロスコープで見ながら機体発見ブザーを鳴らしてみます。反転信号だと一瞬なので波形を捕まえ難いですがブザーだと繰り返し発生するので捕まえやすいのです。そして以下の事が判りました。

まず今までDSHOTで送る16bitのデータはこう思っていました。
値とCRCの間の1bit(右のLSB側から5番目なので以後「5bit目」と呼びます)は通常は0でテレメトリを要求するとき(RPMフィルタで回転数を取り出す場合等)に1にする。・・・と色々なサイトに書いてあります・・・

Hパルス幅が長いと1、短いと0を表します。

しかし実際にFCが出しているブザーコマンドを見ると1になっていました・・・

どうやら制御コマンドを送る時は5bit目を1にする様です。
ならばNucleoボードでもこの通りの波形を作ってみると・・・
鳴りますねぇ。
そして予想通りBEACON1 と2で音程が変わります。
また普段機体発見ブザーを鳴らすとピッ、ピッと断続的に鳴るのは FCから断続的にコマンドをON/OFFしている訳では なく、ボタンを押し続ければESC側で断続させてくれる様ですね。
試した様子を動画で・・・

では同様に逆転コマンドの20番、21番も5bit目=1でやってみます。
これもちゃんと逆転しますねー。
逆転に設定しておき電源を入れ直すと正転に戻ります(もしかするとどっかに覚えてるんじゃないかと思ったけど、そんな事ないですね)。
これも動画で・・・

という事でコマンドを送る時は右から5bit目を1にするのが正しい様です。という事はテレメトリの場合はどうなんでしょう?一つ判っているのはFCでRPMフィルターをONにするとDSHOT信号のH/Lが逆転している様です。
って事はテレメトリは5bit目ではなくH/Lの極性で決まるのかな・・・
あと回転数の値は48~2047だと思っていますが、コマンドである事が5it目で決まるのなら回転値は47以下を使っても良さそうな気がします。

BetaflightでRPMフィルターONの波形

このあたりはもうちょっと調べる必要がありそうですね。

Nucleoボードを壊した

やってしまいました。
先日STM32 Nucleo-F411REボードでDSHOT信号を作って、もう少し調べようと試していたら突然PCとの接続ができなくなったのです。

Nucleo-F411REボード

よく見るとICクリップが壊れてバネが見えており、これがボードのST-LINK部分に接触していたみたいです。

根本で折れてバネが見えている。

ST-LINKのファームを更新(なぜかこの時更新はできた)したりPC側のドライバを入れ直してもダメです。

このボード、既に3.3Vのレギュレータが壊れており外付けで動かしていました。
自作フライトコントローラーの実験で屋根くらいの高さから落とした事もあります。
もうそろそろ諦めて新しいのを発注しました。秋月電子で1850円の出費です。

DSHOT信号を作ってみる。

先日自作フライトコントローラーでRPMフィルターをいじった時DSHOT関係でハマって以来、気になっていました。
何でも理解を深める為には作ってみるのが一番、という事でSTM32マイコンボードでDSHOT信号を作ってモーターを回してみます。

DSHOT とはフライトコントローラーからESCに伝える信号のプロトコルで、 これによりモーターの回転量をESCに伝えます。
同種のプロトコルには色々(PWM,ONESHOT,MULTISHOT等)ありますが、恐らく現在のドローンレースで一番使われているのがDSHOTなのです。

DSHOT の概要については以前NONSAYAさんが紹介されています。
これを読んで大体のところは理解できましたが、実際に信号を作るためにはもう少し詳細な情報が必要です。で、色々探したけれど全体を通した仕様というか、本家のサイトの仕様書みたいなのが見つからないのです。

それでもこの辺りのサイトが参考になりました・・・

DSHOT概略

詳しい内容は上記サイトを読んで頂くとして、ここではサラッと概略を書きます。
まずDSHOT波形の例・・・

  • まず16発のHパルスを1セットとし、少しの時間を置いてこれを繰り返します。PWMっぽくも見えますが一発ずつパルス幅が長かったり短かったりします。
  • Hパルスの幅が短い場合が0、長い場合は1を示し、これにより16ビットのデータを表します。
  • 左から11bit分がスロットル量を表します(左がMSB)。この11bitの値は48から2047迄なので2000個の値を表せます。なお0~47は特別な意味を持ち、例えば0だとディスアームです(それ以外の値は資料が見当たりませんが、モーター逆転等が含まれる様です)。
  • 12bit目は基本は0ですが、ここを1にするとテレメトリ要求の意味となり、16発のパルスを送り終えた後に今度はESC側から信号を送ってきます。RPMフィルターではこの機能を使って回転数を読み出している様ですが今回の実験ではそこまでの域には達しておらず、一方的に回転数を伝えるのみです。
  • 13bit目から16bit目の4bitはこれまでの12bitデータに対するCRC値で、次の式で算出しています。CRC=(DATA ^ (DATA >> 4) ^ (DATA >> 8)) & 0xf
  • これまで一言でDSHOTと言ってきましたが実際にはDSHOT150、
    DSHOT300、 DSHOT600、 DSHOT1200等、速度に応じた名前がついています。150とか300とかの数字は1bitを表すパルス幅が150Kbpsとか300Kbpsという意味みたいです。なのでDSHOT300での1bit分のパルス間隔は1/300Kbps=3.33μSとなります。
  • DSHOT300の場合、パルス間隔は上記の通り3.33μSで、L(を表す短いパルス幅)は1.25μS、H(を表す長いパルス幅)は2.5μSです。

マイコンボードSTM32 Nucleo-F411RE

マイコンボードにはNucleo-F411REを使用します。このボード、フライトコントローラの実験で使ったときに3.3Vのレギュレータを壊してしまい、それ以来外付けレギュレータで無理やり動かしています。

ピロッと付いているのが3.3Vレギュレータ。

開発環境

開発環境にはSTマイクロエレクトロニクス社純正のCubeIDEを使用します。
これにはCubeMXというコード生成ツールが付属していて、周辺機能の初期化をGUIで設定できるので便利です(でもドキュメントが分かりにくい気がする)。

構想

DSHOTの信号をどうやって作りだしましょう?DSHOT150でも6.66μS毎に異なる幅のパルスを生成する必要があります。手持ちのESCがなぜかDSHOT150では動作しないのでDSHOT300を使うとなると3.33μS周期という結構な速さで更新が必要です。
タイマーをPWMモードで使うのがやり易そうですが、1パルス毎に幅を変える必要があるのでDMAを使って都度書き換えてみます。
これにはあらかじめRAM上のバッファにパルス数分のデータを格納しておき、1パルス毎にDMAコントローラーが (パルス幅を決める) CCRレジスタに転送していくのです。図にするとざっとこんな感じ。

作る・・・

実際にはRAM上のバッファはデータの16個分に加えて空白期間34個分の合計50個分を用意し、後半の34個分は常に値を0にしています。
以上の動作は一旦タイマやDMAコントローラーを設定すればCPUとは係りなく動き続けます。
なおRAM上のバッファはDMAが呼び出す割り込み処理ルーチン内で書き換える事にします。DMAの割込みはバッファの内容を半分出力した時点で呼ぶ事もできるので、これを用いて空白期間の間にデータを書き換えています。

そしてメインプログラム側ではDSHOTに出力する値を決めます。
今回はスイッチと可変抵抗を1個ずつ使い、スイッチはアーミング、可変抵抗は回転数を決める事にします。なのでGPIO一つとA/D入力一つが必要ですが、これもCubeMXの機能で簡単に設定できます(設定後の使い方がドキュメント見てもわかりずらいのですが)。

メインルーチンは初期化後無限ループに入ります。このループ内で可変抵抗の値を取るためAD変換を実施し、ESCに送る16bitのデータを作ります。
これをRAM上の仮バッファに置くところまでがメインルーチンの処理です。
そして仮バッファの値をDMAバッファに転送するのがDMA転送が半分終了した時点で呼び出す割り込みコールバックルーチンで行います。わざわざバッファを2段階にしているのはDMA転送中にバッファを書き換えてしまう事を防ぐためです。

詳細はソースを参照ください。
これ→DSHOT_MX.zip
プロジェクトディレクトリ丸ごとなので他のプロジェクトと同列の場所に置いて下図のメニューで開けると思います(試した限り大丈夫でしたがIDEのバージョンが違うとエラーとか出るかもしれません)。

動かしてみる

ESCに繋いでモーターを回してみたところを動画で・・・

そして・・・

あとモーターを反転させるのを試したいのですが、このあたりの情報が見つかりません。Betaflightのソースを解読すべきなのでしょうか?

スマホ変更2021

もう3週間ほど過ぎてしまいましたが、先日スマホを変更しました。

今まで使っていたのはSONYのXPERIA SO-02Gでこの時購入したもの。2015年の3月だったので6年半近く使っていた事になります。
周囲に同時期の物を使用している人はおらず、同じ頃購入した知人はその後2回ぐらい機種変更しているので、私はかなり長期間使用した部類だと思います。

このSO-02G、RAMは2GB、内臓FLASHは16GBしか無いのでどちらも全く余裕はなく、よく数秒固まるしアプリはもう何も入れられないという状態。
もっと早く買い替えるべきなのは分かっていたのですが、最近のスマホは殆どの機種がサイズが大きくて嫌だったのです。

そして最近目についたのが同じくXPERIAのACEⅡという機種。特にXPERIAにこだわっている訳ではないのですが今までより少し大きくなる程度のサイズで、何よりも値段が2万円を切っています。
ただ中身は全く強力ではなく、口コミを見ても遅い、古いとあまり良いことは書かれていません。といってもゲームをする訳でもないし6年前の機種と比べりゃ十分性能が上がっている筈。またRAM/内蔵FLASHも4GB/64GBなので当面は十分でしょう。

という事でAmazonでポチりました。
数日後に届いたのがこれ。

表側
左が新しいACEⅡ、右が今までのSO-02G
新しい方が一回り大きくなっていますが一般的な機種よりはコンパクトなのです。
裏側

使った感じは全く問題なく、アプリの起動待ちが格段に短くなっています。
まあ今までが遅すぎただけなんですけど。