RSS Twitter Facebook
DTM / シンセサイザー / VST / WebMusic 関係の技術情報を発信しています



2020/12/26 (2020年12月 のアーカイブ)

3Dプリンターでそれなりのものを作る(塗装編)


前回 (3Dプリンターでそれなりのものを作る(分割出力編)

先日組み立てた謎楽器 a.k.a そろばんに塗装を施しました。ちょっとお試しくらいのつもりで始めたので、部分的に積層痕が残っていたり塗料の飛沫を飛ばしてしまったりと粗い部分も多いのですが、手順としてはこれでかなりの物が作れそうです。



PLAフィラメントで出力した塗装前の状態はこれです。

塗装に使用したツール。左からタミヤのポリエステルパテ、サーフェーサー、ベース色のラッカー系スプレー缶(キャメルイエロー)、エアブラシとラッカー系塗料赤、黒、希釈用シンナー、溶剤系トップコートのMr.トップコート(光沢)。

先ずはポリエステルパテを塗ったくってサンドペーパーで磨く事を繰り返して平面を出します。ポリエステルパテは硬化してもまあまあ脆いので観賞用のものならともかく楽器のような手でベタベタと扱うようなものだと盛って新たな形を付けるのは無理がありそうですが積層痕のような凹部を埋めるにはちょうど良い感じです。

PLA樹脂は硬くて削れないとか言いますが、カッターナイフ等でサクサクとは切れないという程度の話でサンドペーパーでガリガリ削るというつもりでやれば結構削れます。平面を出すために削ると造形物のスキンを突き破ってしまう事もあるので造形時にスキン部を厚めに作っておいた方が良いかも知れません。

積層痕やパーツの繋ぎ目が消えたらサーフェーサーを吹きます。ここでまだ凸凹が見つかったりしますのでパテを追加したりしつつ面を整えます。表面の凸凹などはこの段階のものが結局最後まで残りますので先を急がず丁寧にやるのが良いですね。と言いつつ今回は初めてのお試しのつもりだったのでまあまあの所で切り上げてしまったので今になって少し後悔したりしています。

しかしまあ積層痕やパーツの繋ぎ目を感じないものを作ろうと思えば作れるという事がわかったのは収穫ですね。

塗装自体はベース色の黄色をスプレー缶で全体に塗った後、サンバーストのグラデーションはスプレー缶だと無理がありそうなのでエアブラシで赤、黒の順で付けて行きます。エアブラシと言えば数10年前、何万円もするばかみたいな騒音を出すコンプレッサーを買って以来なのですが、今は1万円以下で夜中でも平気で使える充電式エアブラシとかあるんですね。技術の進歩を感じます。

グラデーション付けはとにかく注意深くやらないと失敗します。ほら飛沫とばしちゃった...修復不能。

という事で今回は100%満足という出来ではないのですが、お試しとしては充分じゃないかな。手間がかかるのでお手軽とも言えませんがいかにも3Dプリンタで出力しましたという感じがしないものも作れるという事がわかったので良しとしましょう。

Posted by g200kg : 10:21 AM : PermaLink

2020/12/23 (2020年12月 のアーカイブ)

3Dプリンターでそれなりのものを作る(分割出力編)


ちょっとしたガジェットを作った時の筐体を3Dプリンターで作るというのはもう工作系界隈では良くやられている手法ですが、ネックはやはり造形サイズですかね。家庭用の3Dプリンターの造形サイズはせいぜい1辺が20cm程度なので、作りたいものがあるのだけど造形サイズにおさまらないという事が結構あります。

こういう場合はパーツを分割出力して組み立てる必要があるのですが、何度かやってみてその方式もある程度手順が安定してきたのでメモしておきます。

今回作ったのはこれ。謎楽器 BOU V.2 a.k.a 「そろばん」の筐体です。

ちなみにこの間まではこういう状態でした。

長さ方向は40cm程あります。家の3Dプリンター、QIDI X-Smart では1辺 17cm くらいが限界なので分割が必要になります。

使用するフィラメントはPLAです。今までに色々なフィラメントを試してみましたが最近は結局一番安定しているPLAを使う事が多いです。脆いので弾性を利用した嵌め込みとかは諦めるしかないですが。

データの作成

必要なデータの作成。使うツールや方法は人それぞれだと思いますが、私はBlenderを使っています。まずは組みあがった状態のモデルを作ってそれをコピペと不要部分の削除を繰り返して分割していきます。長さ方向は3分割。中に基板を仕込むので底部分と蓋部分を分けて6分割しました。

ちなみに円部分はBlenderではデフォルトで32角形として扱われますが、ネジ穴程度の大きさで32角形はそんなにプリンターの精度がないし、面ごとの微調整が必要になった時にとても面倒なので12角形で作っています。
そもそも3Dプリンターでは機種や素材にもよりますが、穴は出力すると小さくなりがちで計算通りには行かないので、例えばM3のネジを通すには12角形で何mmの穴を開ければ良いかなどの基本的な確認は予め必要です。

パーツの嵌め込み

組立の手段として考えられるのは「嵌め込み」「接着」「ネジ止め」くらいですかね。
本体構造の長手方向は接続部を次のような形状にして嵌め込みで接続します。


嵌め込むとこんな感じ。予想よりもしっかりした繋ぎになりました。差し込んだだけの状態でも乱暴に扱わなければ普通に使えるくらいの強度はあります。繋ぎ部分はデータとしては遊びなしでジャストで作成して嵌め込む際にカッターとヤスリで微調整する感じです。

パーツ間の接触面積も広く取れるので、仮り組みで確認した後、接着してしまいます。
蓋側の方は多少接触面積を稼いだ上で接着のみで接続します。

接着

PLA樹脂の接着にはアクリル樹脂用接着剤として販売されている「アクリサンデー」が最強という評判がすっかり出来上がっていますのでこれを使います。接着というか溶かしてくっつける溶着なんですが。

成分は二酸化メチレンという事で完全に粘性のない溶剤です。扱いやすいかというと結構そうでもないです。針のようなスポイトが付いているのですが油断して周りに雫を飛ばしてしまうと大抵の樹脂を溶かしてしまうのでえらい事になります。


扱いは慎重に接続面にしみこませる感じで。

接着の強度は流石に最強と言われるだけあってかなりしっかりしています。やや不安のあった蓋側の接着も充分な強度がありそうです。

ネジ止め

底部と蓋部ができたら間に基板を挟み込む形で入れてネジで止める構造になっています。
ネジ止めと言っても考えられる方法は幾つかあります。

  • ネジとナットで挟み込む
  • タッピングネジを使う
  • インサートナットを使う

ネジとナットで挟むのは簡単ですが裏にナットが丸見えなのは避けたいですね。
なので今までタッピングネジを使う事が多かったのですが、脆いPLA相手だとかなり頼りないです。一度組み立てるだけなら良いのですが何度か分解、組立をしているとあっという間にネジがバカになります。

という事で今回はインサートナットの熱圧入にしてみました。
所定のサイズで予め開けて置いた下穴に真鍮製のメネジを半田ごてで熱を掛けながら押し込んでいく方法です。

インサートナットはヒロスギ製のビットインサート等が売られています。
https://hirosugi.co.jp/technical/subjective-basis/hsb.html


これは是非おすすめしたい方法です。下穴のサイズは割と微妙なのでナットの仕様を良く確認してください。
またネジ穴に半田が入るとやっかいなのでコテ先は確実に拭き取っておく事と温度調整できるならPLA樹脂の場合は250℃くらいがベストです。

という事で組みあがりました。

積層痕が気になるとか底部と蓋部の隙間が気になる、とかまだなんとかしたい所はありますが、取り合えずこんな感じになりました。なお、底と蓋の隙間はプリンタの精度の問題ではなく、中に入れた基板の部品と筐体内側の干渉が原因です。なかなか一発で完全なものはできないですね。

もう少し手を入れて次回に続く、かもしれない...

次回 3Dプリンターでそれなりのものを作る(塗装編)

Posted by g200kg : 7:03 PM : PermaLink

2020/11/25 (2020年11月 のアーカイブ)

激安プロジェクターを静音化する試み


最近は中国製の激安プロジェクター製品の勢いが凄いですね。別にプロジェクターのガチ勢でもなく映れば割と何でも良い派なんですが、ちょっと手を出してみようかと評判が安定していた Vankyo V630 という機種を買って天吊りブラケットを 3D プリンタで作ったりしていました。

2万円かそこらという値段でこれならば充分じゃないですかね。安いのは安いなりの理由があるんでしょうけど。

ただ前評判でも一部指摘されていたのですが、ファンの騒音はちょっと気になります。慣れれば気にならないという話もあるようだし個人差もあると思いますが、やはり気になるレベルではあります。それなりに賑やかな場所で使うなら大丈夫だとは思いますが。

という事でどれくらいうるさいのか測定してみました。

プロジェクターの前面から1mの距離です。まずは電源を入れる前は 41.3dBA、静かな住宅街程度の環境です。そして電源投入すると52.3dBA。これがどれくらいかというと普通のオフィスくらいの音、部屋の中で人の話し声が聞こえているくらいのイメージです。

プロジェクターの左側面に吸気口があってフィルターが入っているのですが、風切り音が結構するのでフィルターが無ければ多少変わるかと思って外してみたのですが、52.0dBA、まあ誤差範囲ですね。

さて、じゃあ買ったばかりですが中身を見てみましょうか。開けるには見えているネジの他に出荷時期を示すシールの下にもネジがあります。当然保証は無くなりますが気にしない事にしましょう。

筐体を開けて左半分を覆っている黒いプラスチックのカバーを外すと大体の構造がわかります。単板のカラーLCDにLEDランプから光を当ててミラーで反射して投射レンズに行くという単純な構造ですね。騒音の元であるファンは2個あります。左上の吸気用のシロッコファン、そして右下には見えにくいですが、ヒートパイプ付きのヒートシンクがありその裏側にファンが付いています。ヒートパイプはLEDランプの熱をヒートシンクまで引っ張ってきているようです。

光の経路は黄色の線、空気の流れは赤い線です。空気はLCDの表側と裏側をそれぞれ流れるように分岐しています。

筐体を開けた状態で電源を入れると排気ファンよりも吸気シロッコファンの音が目立ちます。このシロッコファンはネジで固定もされておらずはさみこまれているだけです。

しかしこのシロッコファン、形状がちょっと変わってますね。開口部がやたら大きいです。空気の経路がそれなりに長くて空気を押し込むための圧力が必要なので静圧に有利なシロッコファンなんでしょうけど、効率とかどうなんでしょう。
ひっぱり出してみると定格は 12V 0.30A、高速でぶん回っていて風量もかなりあります。これは速度を落としてみたいですね。筐体内温度が上がって寿命に影響するでしょうけど。

オススメはしませんけど、試しに無理矢理止めてみましょうか。おー、46dBAまで下がりますね。これくらいならまあまあ気にしないでいられるレベルなんですけどね。

うーん、どうするかなあ。


取り合えずこの吸気ファンがなかったら筐体内がどうなるのか確認してみましょうか。

通常状態で排気部あたりの温度を測ると 44℃ くらいで安定します。そして吸気ファンを取っ払って電源を入れてみると 53℃ で安定。流石に常に10度近く温度が上がるのは寿命に影響しますね。LCD付近の空気の流量が極端に減ると思うので LCD のカラーフィルターが焼ける感じでしょうか。まあおもちゃとして 1~2 年程度で使い潰すくらいのつもりならありかも知れません。


他に気になる所は、シロッコファンの出口の近くで風がほぼ U ターンしているのですが、まあ基本構造は仕方ないとしてプラスチックのあまり強くなさそうな構造に風が至近距離で直接当たっているのが良くないかも知れません。少し振動が伝わってしまっている感じがします。

対策として風の通り道にブチルゴムシートを貼ってみます。

写真がなんだかわかりにくいですが、シロッコファンから風を吹き込む入口の所をブチルゴムで覆っています。これで同じ条件で騒音を測ると 51.1dBA。微妙なんですけどまあ悪い方向には働いてないようです。このアプローチでもう少しいけるかと思ってシロッコファンの周辺にかなりベタベタと貼り付けてみましたけどこれ以上の効果はなさそうです。


ここから先はファンの回転を抑えるしか無さそうですね。昔はPCのケースファン制御用に結構色んなファンコントローラがありましたけど、最近はそういうのは減ってるんですかね。Amazonで見つけた何用だかわからないファンコントロールモジュールをシロッコファンに仕込んでいきます。

さて、これで回転数を割と自由に制御できるようになりました。やはりシロッコファンの回転数を下げると騒音レベルはかなり下がりますが、排気ファンは通常通りに回転していますのである程度以下は排気ファンの方が支配的になります。

正確な回転数はわからないので、回転を落としていった時の騒音レベルと温度の関係を何点か測定すると大体の様子がわかります。ファンがフル回転時に44℃だったのが回転を落としていくと温度が上がり始め完全に停止すると53℃になります。温度上昇を3℃くらいまで許容すれば47dBAくらいまで騒音レベルを落とせます。勿論多少なりとも温度上昇の悪影響はあるでしょうけどバランス的にはこれくらいにしたい所ですね。

という事で、騒音レベルは 47.5dBA 排気部の温度が +3℃くらいの所に設定してみました。これがどれくらいかというとエアコンの静音設定くらいの音でしょうか。これ以上の静音化を目指すなら排気ファンの方にも手を入れる事になりますが、実際の所それならまずエアコンをなんとかする等も考えた方が良い気がします。

しばらくこれで様子をみましょうか。


なお、これらの試みは基本的にいじくりまわすのが目的なので、ぶっ壊す覚悟がなければやってはいけません。温度の上昇は確実に劣化の要因になるので、普通に映画を鑑賞する事が目的ならメーカーが保証する基本性能で自分が満足するものを買った方が幸せになれると思います。

Posted by g200kg : 12:39 AM : PermaLink

2020/11/18 (2020年11月 のアーカイブ)

RFリモコンの割と残念な連携


家には結構以前から Nasnos 製の電動カーテンを導入しています。電動ブラインドやカーテンの老舗ブランドです。特に必要があったわけでもないのですが面白そうだったので。これ、以前にニトリの電動カーテンとして OEM 供給されていたようなので同じものを持っている人はそれなりにいるんじゃないでしょうか。

これでリモコンによる開閉とタイマーによる朝夕の開閉が自動化できるのですが、残念ながら Amazon Echo などの AI スピーカーとの連携には対応していません。問題はこのリモコンが良くある赤外線リモコンではなく 315MHz帯を使うRFリモコンという奴で、そのため学習リモコン系のスマートホーム連携用のブリッジ等が使えません。

更にこのリモコン送信機は技適マーク付きの小電力無線機器になっています。こうなると送信機を改造する事もできず、厳密には分解した時点で二度と電波を出してはいけないので、解析もままなりません。AIスピーカーがブームになってから、そのうち Nasnos でも対応するのではないかと思って期待しつつ待っていたのですが、残念ながらその兆しもありません。

そうこうしている内に他社から AI スピーカー対応を謳った電動カーテン製品が出てきたのですが、その中のひとつ、LinkJapan 社製の電動カーテンを見て理解しました。「これメカ的には Nasnos のものと同じ」。つまり Nasnos がメカを供給して LinkJapan が AI スピーカー対応部分を作っている、と。Nasnos ではもう自社製品として AI スピーカー対応をする気がないのではないかという気がします。しかし LinkJapan の製品はもちろん別会社の別製品なので AI スピーカー対応部だけアドオンできるようなものでもなく、LinkJapan に乗り換えるなら Nasnos 製品を捨てて全取っ換えしかないし、ほとんど同じものを買いなおすというのも気が進みません。いや、Nasnos のメカ部分は結構長く使っていますがへたりも無く、優秀なんですよ。

取りうる手段としては物理的にリモコンのボタンを押すか同じ信号を小電力無線ではなく微弱無線で出す機器を一から作るか、くらいしかなさそうです。という事で、残念な方法ではありますが現実的な解としては、物理的にリモコンのボタンを押すというので良いんじゃないかなという気になってきました。スイッチボットのボタンを押す奴なんかもありますしね。

で作ったのがこれ

スイッチボットの指ロボット2つでリモコンのキーを押します。押す位置の調整が思ったより微妙で、輪ゴムで押さえる力の調整をしてなんとか動いている状態です。まあ動いているから良いかと思いますが。


なお、もう少しちゃんとしたものを作るのなら、電波を解析して信号をクローンし、Strawberry Linux で売っているこの辺のモジュールを使って送ればなんとかなるかもしれません :

微弱無線モジュール(315MHz送信)

とりあえず現状のでも動いてるし面倒なのでやらないですけど、誰か作らないですかね。

Nasnos
LinkJapan

Posted by g200kg : 3:11 AM : PermaLink

2020/11/15 (2020年11月 のアーカイブ)

Philips Hue 分解


家の電球をスマート電球、Philips Hue 化して半年、どうやら10球中の1球が死亡した模様です。せっかくなので中身を見てみたいですね。

1球だけ点灯しない...

Philips Hue の電球です。これは色の変化なしのバージョンです。電球が直接 Bluetooth、Zigbee の電波を飛ばすので技適マークがついています。

かなり硬い材質の半透明部分をなんとか切り取りました。LED がアルミ基板上に24個実装されています

土台部分のプラスチックとアルミを無理やり引きはがすと基板が見えてきます。

基板取出し成功。この縦に付いている小さな基板が無線関係のようです。

メイン基板の裏にも結構な部品があります。ちょっと煤けた感じはするけど、見た感じでは特に重大な問題はない様子です。

無線基板を拡大。どうやら MCU はシリコンラボの EFR32 Wireless Geckoです。枝番がかすかに読み取れるのは「MG13P8」 かな。なんだか基板のシルクが汚いですね。元々アウトレット品だったせいでしょうか。

無線基板の裏にある上に向かって弧を描いているのがアンテナパターンですね。


中が見たくなったのでいきなりバラしてしまいましたが、冷静になって考えると無線の設定が吹っ飛んだだけで設定をやり直せば正常に戻ったのかも。後の祭り。高い電球なんだから半年で壊れるのはちょっと勘弁です。

Posted by g200kg : 11:03 AM : PermaLink

2020/11/08 (2020年11月 のアーカイブ)

Arduino Nano Everyで高速PWMする例


Arduinoをそのまま組み込みで使う時にNanoを良く使ってたのだけど、そろそろ新機種である Nano Every に主力を移すべきかと思ったりもするのですが、完全に上位互換というわけではないので結局はケースバイケースかなと思います。

Arduino NanoArduino Nano Every
MCUATMega328pATMega4809
Flash32KB48KB
SRAM2KB6KB
EEPROM1KB256B
クロック最大16MHz最大20MHz
USBコネクタUSB MiniUSB Micro
価格純正品なら Nano Every の方が安い。※ただし互換品を探すと Nano の方が安い。
互換性Arduino IDE ベースでの互換性はそこそこ。タイマー周りはちょっと怪しい。


MCUが違うのでしょうがないのだけど、特にレジスタ直叩きでオーディオ周波数の波形生成なんかをしている場合は Every に移植するのは結構面倒です。 という事で、Nano Every で高速PWMによるサイン波生成のサンプルをメモしておきます。

ATMega4809 のタイマーは TCA というのが1つと TCB というのが4つで 328P とは全く構成が異なります。 クロック 16MHz を TCA0 で 512 カウントしてサンプリング 31.25kHz、9bit、これに PWM をかけて 440Hz サイン波を生成します。出力は Pin9 (PB0) 固定。

レジスタの定義はどこかでされているような気がするけど、取り合えず ATMega4809 のデータシートを見ながら全部このファイル内に置いてみました。


// Sin Wave Generation for Arduino-Nano-Every
#define PORTMUXBASE (0x05e0)
#define TCA0BASE (0x0a00)

#define TCAROUTEA (*((uint8_t*)(PORTMUXBASE + 0x04)))
#define TCA0CTRLA (*((uint8_t*)(TCA0BASE + 0x00)))
#define TCA0CTRLB (*((uint8_t*)(TCA0BASE + 0x01)))
#define TCA0CTRLC (*((uint8_t*)(TCA0BASE + 0x02)))
#define TCA0CTRLD (*((uint8_t*)(TCA0BASE + 0x03)))
#define TCA0PER (*((uint16_t*)(TCA0BASE + 0x26)))
#define TCA0CMP0 (*((uint16_t*)(TCA0BASE + 0x28)))
#define TCA0CMP0BUF (*((uint16_t*)(TCA0BASE + 0x38)))
#define TCA0INTCTRL (*((uint16_t*)(TCA0BASE + 0x0a)))
#define TCA0INTFLAGS (*((uint16_t*)(TCA0BASE + 0x0b)))
#define TCA0OVF_vect  _VECTOR(7)

float fdelta = 440.0 * 512 / 16000000.0;
uint16_t phase = 0;
uint16_t delta = (uint16_t)(fdelta * 32768);

int16_t sintab[512];

void setup() {
  for(int i=0; i<512; ++i){
    sintab[i] = 256 + sin(3.14159 * 2 * i / 512) * 255;
  }
  pinMode(9,OUTPUT);                // Pin9=Output
  TCAROUTEA = 0x01;                 // TCA0 PWM to PORTB
  TCA0CTRLA = 0x01;                 // PRESCALE : CLKSEL = fclk_per, peripheral Enable
  TCA0CTRLB = 0x13;                 // CMP0EN, SINGLESLOPE
  TCA0CTRLD = 0;                    // SPLIT mode=off
  TCA0INTCTRL = 0x01;               // Enable TCA0 OVF interrupt
  TCA0PER = 511;                    // Counter period = CLK / 512 (16MHz:31.25kHz or 20MHz:39.0625kHz)
  TCA0CMP0BUF = 100;                // PWM Value (0 - 511)
}
ISR(TCA0OVF_vect){
  TCA0INTFLAGS = 1;                 // Clear Interrupt
  phase += delta;
  if(phase >= 32768)
    phase -= 32768;
  TCA0CMP0BUF = sintab[phase >> 6]; // Set PWM value
}
void loop() {
  // put your main code here, to run repeatedly:
}


結果 : Pin9 出力に RC 一段入れただけなのでキャリアが乗ってしまっているけどこんな感じ。

Posted by g200kg : 10:14 AM : PermaLink

2020/11/04 (2020年11月 のアーカイブ)

組み込み系ArduinoのKiCAD用ライブラリ公開


組み込みにそのまま使えそうな 600mil 幅の Arduino の KiCAD 用のライブラリを 3D モデル付で公開しました。
Arduino Micro、 Arduino Nano、 Arduino Nano Every、 Arduino Pro Mini、 Sparkfun Pro Micro の 5 種類です。

GitHub に置いてあります。
https://github.com/g200kg/kicad-lib-arduino

ライセンスは Creative Commons CC0 にしてありますのでご自由にどうぞ。

KiCAD では GitHub から直接フットプリントを読み込むこともできますが、反応速度の問題もありますので、ローカルにコピーして自分の環境に合わせてパス等を設定する方がおすすめです。

なお、3D モデルは .x3d フォーマットです。KiCAD の推奨フォーマットは .wrl なんですが .x3d でも問題なく読み込めます。Blender でモデルを作る時は .wrl を直接吐けないので .x3d で出力するのが良さそうです。

シンボル

フットプリント

3Dモデル

Posted by g200kg : 2:10 AM : PermaLink

2020/10/06 (2020年10月 のアーカイブ)

メイカーフェア東京(MFT2020)が開催されました


久々のオンサイトのイベントでしたが無事終了しました。

日時 : 10月3日~4日
会場 : 東京ビッグサイト

原則として展示物には触れられないという事でもどかしい所はありましたが、流石に今はしょうがないですね。
入場日時の指定で人の密度はきっちりと管理されていたと思います。

以下大体楽器関係だけですけど、気になったものとか。

ビッグサイト入口の看板。今年は規模を縮小して西4ホールのみでの開催です

会場内の様子。閑散という事もなく密集という程でもなく適切な密度でしたかね

Web Music Developers JP のブース。毎度の事ながら割と適当。メイカーフェアへの出展は今回が初です。

隣のブースにあった例のチキンを楽器にした奴。コンプレッサーで溜めた空気を送り込んでいました。送り込む風量でピッチが変化するとか。そうなのか
tofunology

これはモックらしいけど、コンパクトなProphet-mini。モックの完成度が高すぎる。中身の回路は偽物ICをつかまされて直前に火を噴いたとか...
@PikopikoF

ギターを弾いている風のパフォーマンスができる「偽ター」
Happy Twig BBQ

音を可視化する「クント管」を光らせる奴。面白いです
奇楽堂&Company

カセットテープでDJするマシン。メカは意外と共通規格的なものが手に入るらしい
@ooedotechnica

Canvas:ノイズパフォーマンス。リアプロジェクションの効果が素晴らしい。音の発生源は米本実氏のヨネミン相当のものらしい
ActPaTH

ESP32と気圧センサーを使ったウインドシンセ AFUUE。マジ楽器を目指している感じが良い
@OtooneDev

いつものサーキットベンディングのやばいコレクション
@banzainuigurumi

MIDI自動演奏システム。ゴムベースが良い味を出しているんだけど、どうやらチューニングが結構大変とか。まあそうか
@necobitter

南部鉄器を使ったエフェクター。凄く良い。持ち運びの重さはどうなんだろ?
@fabterraceiwate

ゼロからニキシー管を作る人。海外のYouTubeでこんな事をやってる人がいたけど日本にもいるもんだな
@yuna_digick

叩くとなおるテレビ。そういえば最近の子供はアナログテレビを知らないので砂嵐画面を見るとオカルト現象だと思うとか。このネタはいつまで通用するのだろうか。
@diamond_dendenk

Posted by g200kg : 7:37 PM : PermaLink

2020/09/25 (2020年09月 のアーカイブ)

メイカーフェア東京2020に出展します


10月3日(土)、10月4日(日) は東京ビッグサイトで開催される Maker Faire Tokyo 2020 に Web Music Developers JP 名義で出展します。

今回のメイカーフェアはコロナの影響で密集を避けるためチケットはすべて入場日時指定制です。会場での当日チケットの販売は無いという事なのでご注意ください。

ブースの場所は会場の一番隅っこのようです。

https://makezine.jp/event/mft2020/

謎楽器公開予定

Posted by g200kg : 3:50 AM : PermaLink

2020/09/11 (2020年09月 のアーカイブ)

KiCadのプラグイン環境について


このところ基板CAD、KiCad のプラグインを書いてみたりしていた訳ですが、タイミング的にあまり良くなかったというのもありますが、これはなかなか厳しい環境のようです。

KiCad の対応プラットフォームはWindows、Mac、Linuxの三種類あります。現在の状況としては安定版最新リリースがバージョン5.1.6、Nightlyビルドは 現在 5.99、そして6.0リリースの準備が進められています。

プラグインはPythonで書けるのですがプラットフォームの OS の違いやバージョンの違いによって挙動がかなり異なります。

安定版の KiCad 5.1.6 に搭載されているPython、およびグラフィックスライブラリは

  • Windows Python 2.7.16 wxPython 3.0.2.0 msw (classic)
  • Mac だと Python 2.7.16 wxPython 3.0.2.0 osx-cocoa (classic)
  • Linux だと Python 3.6.7 wxPython 4.0.1 gtk3 (phoenix)

同じ安定版 5.1.6 ですが Python の 2.X 系と 3.X 系が混ざっているのが辛い所です。気を付けて両方で動くように書くしかないですね。また Win と Mac はバージョン番号こそ同じですが、グラフィックスライブラリのウィジェットの大きさや細かな挙動が違うのでどちらでも画面が崩れないようなレイアウトが必要です。

また現在の安定版 5.1.6 と Linux 版の Nightly build (5.99) では Python のプラグイン API に割合積極的な変更があり、今まで使えていた API が無くなっていたりします。同じメジャーバージョン内ですが後方互換はありません。

更にその後のメジャーアップデートである 6.0 については現在 RC 版がありますが、9月中に機能をフリーズして年内をかけてバグフィックスという予定のようですので、まだプラグインを突っ込んでどうこうできる状態ではなさそうです。

という事で、今現在、大体どこでも使えるプラグインを作ろうとすると少なくともバージョン 5.1.6 の Win、Mac、Linux、そして Linux Nightly 版での動作確認が必要になります。まあそれ以前に API が流動的なのもあってちゃんとしたドキュメントが無いというのが致命的に効率が悪いのですが。

APIのドキュメントとしては下のdoxygenで吐かれたクラス名やメソッド名の一覧からあたりを付けて実際に試すかソースを読むしか方法がなさそうです。(とは言え、KiCad のプラグインには期待しているんですよ。とにかくもう少し安定してくれれば)

https://docs.kicad-pcb.org/doxygen-python/annotated.html

Posted by g200kg : 3:54 AM : PermaLink

2020/08/28 (2020年08月 のアーカイブ)

[KiCad] GerberZipper : ガーバー/ZIPファイル作成の自動化


KiCad で作成した基板を業者に発注する際には、それぞれの業者向けの設定でガーバーを出力しZipでまとめる必要があります。これが発注先によって拡張子を変更したり設定を変えたりとなかなか面倒くさくて、添付忘れしたり設定を間違えたりという危険もあります。

という事で、発注先を選択するだけで必要なファイルを作成してZipにまとめるまでを自動的にやってくれる Python スクリプトを書きました。以前にも似たようなものを作っていたのですが、発注先の選択などができるように大幅に書き換えました。

起動すると発注先の選択をして、作成のボタンを押すだけで必要な Zip ファイルができます。

GitHubに置いてあります:
https://github.com/g200kg/kicad-gerberzipper


使用法

pcbnew のメニューから起動します。

発注先を選択して、作成ボタンを押すだけ:

とりあえず、各業者の推奨設定を見ながら
Elecrow / FusionPCB / JLCPCB / P板.com / PCBWay
の設定ファイルを作りました。
(※ 出力されるファイルは確認しましたが、全てのケースで実際に発注して大丈夫かどうか確認したわけではありません)

設定は json ですので、自分で書いて選択肢を追加する事もできます。
設定の詳細はこんな感じで確認できます。

Posted by g200kg : 6:30 PM : PermaLink

2020/08/27 (2020年08月 のアーカイブ)

KiCadのガーバー出力オプション詳細


この辺に興味があるのは世界で10人くらいしかいなさそうなので自分用メモ:

KiCadで基板のガーバーを出力する際のオプション設定画面はこれ:

英語モードだとこう

この中で、「シルクをレジストで抜く(Subtract soldermask from silkscreen)」と「シルクからパッドを除外(Exclude pads from silkscreen)」は似ているようでやっている事も目的も違う。このオプションで影響を受けるのはどちらもシルクレイヤーのみ。

「シルクをレジストで抜く」のは基板上の露出した銅箔の上にシルク印刷が重ならないようにするためのもの。ファブの方でも対処してくれそうだけど通常チェックしておく。

「シルクからパッドを除外」は言葉からすると同じようにパッド(銅箔)部分にシルク印刷が重ならないようにするためのもののように思えるが、実はこれをチェックしない場合にシルク印刷に(元々は存在していない)パッドの形状を書き加えるもの。なお、書き加えたところで「シルクをレジストで抜く」がチェックされている場合は結局シルクが抜かれて印刷には出てこないので実質影響はない。

ではなんのためにこのオプションがあるかと言うと、シルクとパッド形状を一緒に紙に印刷する事で組み立て時のドキュメントにするために使う。ガーバーで出力する際には「シルクをレジストで抜く」と「シルクからパッドを除外」を一緒にチェックをはずす必要がある。が、ドキュメントにするためなのでガーバーではなくPDF等で出す方が良い (この場合はそもそも「シルクをレジストで抜く」オプション自体が存在しない)。

ついでに言うと、このパッドの形状をシルクに書き加える際の線の太さは「デフォルトの線幅(Default line width)」で決まる。この「デフォルトの線幅」は昔はあちこちで使われていたが、バージョンが上がって各部の線幅が個別に指定できるようになると共にあまり使われなくなっていてここ以外のどこで使われているかもう良くわからない。

こんな感じになる:

なお、KiCadの昔のバージョンではこのオプションは「Plot pads on silkscreen」であり、ロジックが逆、というか本来の目的に対しては直接的だった、がいつの間にかロジックがひっくり返った。そして更にこれを Python スクリプトから操作しようとすると API は "SetPlotPadsOnSilkLayer()" のままで名前も違えばロジックも逆というカオスな状況。

そして、この"SetPlotPadsOnSilkLayer()"は現行バージョンの実装にはあるのだが、なぜかドキュメントには一切出てこない。まあこの辺のちゃんとしたドキュメントはそもそも無い。今後APIごと削除される可能性が無いとも言えないので使って良いのかどうか迷うところ。

ちなみに「境界線とタイトルブロックをプロット(Plot border and title block)」というオプションもガーバーに出しても何の意味もないが、ドキュメント用として体裁を整えるのが目的になる。


Posted by g200kg : 5:00 AM : PermaLink

2020/08/15 (2020年08月 のアーカイブ)

2021 NAMM 「Believe In Music」


来年1月の NAMM ショーは COVID-19 の影響でオンラインイベント「Believe In Music」に変更されたみたいですね。2021年夏、2022年冬の NAMM ショーの案内も出ているので今回だけの特別措置だと思いますが、オンラインでこういうイベントがあるのは気軽に見れて良いかも知れないな。

https://www.namm.org/support/believe-in-music-week


Posted by g200kg : 2:40 AM : PermaLink

2020/08/14 (2020年08月 のアーカイブ)

zoom-ms-utility スタンドアローン版


タイミングを逸して今更感はあるのだけど ZOOM マルチストンプ用のパッチ編集アプリを Web アプリからスタンドアローンアプリ化したものを公開しました。と言っても NW.JS に突っ込んだだけなんですが。何年か前にもやろうとしたけど、当時はまだ NW.JS に多少問題があってできなかったのをそのまま放置してしまっていました。

実行形式をZIPで固めてありますが、Mac版については GateKeeper がありますので、$ spctl コマンドで自分で一時的に止めるなどの作業が必要になります。Catalina でも起動できるのは確認していますが、今後どうなるんですかね。

https://github.com/g200kg/zoom-ms-utility

Posted by g200kg : 5:57 PM : PermaLink

2020/08/10 (2020年08月 のアーカイブ)

MIDI2.0とVST3.7


最近 MIDI 2.0 周辺の状況がそろそろ気になり始めたので色々と様子をうかがったりしています。先月末には VST SDK が 3.7 にアップデートされたのですが、その中にも MIDI 2.0 への言及が少しだけ追加されています。

https://www.steinberg.net/en/newsandevents/news/newsdetail/article/new-vst-37-sdk-available-5605.html

追加されたのはドキュメントだけで実装はもう前の版からやっているよ、という事みたいですが ( いや、やってるのかな? どこまでやってるのかは知らないけど)。

まず双方向通信で機器間のネゴシエーションをする MIDI 2.0-CI (Capability Inquiry) とか、プロファイルによるオートコンフィグレーション、プロパティ交換などは基本的にホストアプリの責任なのでプラグインがどうこうするという事は無いというスタンスで良いんですかね。

ホストアプリとプラグインの間の VST 規格として関係してくるのはプロトコルまわり、つまり MIDI 2.0 になって、ベロシティやコントローラー(コントロールチェンジ)の解像度の向上やパーノートコントローラーというあたりが追加されたのですが、これらが VST ではどう扱われるか、になってきます。

VST ではホストアプリとプラグインの間はノートオン、ノートオフ等の MIDI イベントの他、コントロールチェンジ的な各種パラメータは Parameter での受け渡しで密に繋がっていて、また音符毎に付与できるパーノートコントローラーに相当するものとして VST 3.5 で導入された NoteExpression があります。また、ベロシティやポリプレッシャーについては VST3 でのプラグインへの受け渡しは 32bit float なので、MIDI2.0で16bit/32bit int になってもまだ戦える、という事です。

いずれにしても、これらの MIDI 2.0 経由で入ってくる情報を VST のパラメータ等にどうマッピングして行くのかはホストアプリの責任、という事になります。プラグインとしては入ってくるパラメータを変に切り捨てたりせずに素直に使っていれば MIDI 2.0 の高解像なコントローラー等が使えるという事になりますね。

MIDI 1.0 => MIDI 2.0 => VST 3 の対応

Posted by g200kg : 12:42 PM : PermaLink

2020/08/08 (2020年08月 のアーカイブ)

USB-IFがMIDIデバイスv2.0向けUSBデバイス・クラス仕様を公開


気が付いてなかったのだけど、先月こういうニュースがあったのだね。
USB-IFがMIDIデバイスv2.0向けUSBデバイス・クラス仕様を公開

usb.org のプレスリリースはこちら:
USB-IF Publishes USB Device Class Specification for MIDI Devices v2.0

MIDI1.0から2.0への変化はかなり大がかりなものなので、普及も簡単ではないだろうなとも思うのだけど、既に色々と動きはあるようですね。
とは言え...、

本格的に使われるには DAW の対応が必要だしそれには OS レベルで API が整備されていないといけないのだけど、この辺の動きはどうなんだろね。 iOS では coreMIDI が既に MIDI 2.0 に対応しているとかいう話もちらっと聞いたりしたけどそれは MIDI 1.0 へのフォールバックの話のような気がするし、Windows 系だと MIDI 系の API って今どうなってるっけ? ユニバーサル Windows プラットフォームでの API だと今は完全に MIDI 1.0 の切り口なのでこの辺に増設する事になりそう(大変そう)。

現行 MIDI 1.0 の仕様も長い時間の中で色々と不満が出てきていて、各社勝手に色々と拡張を試みたりし始めていたので、ばらばらになる前に統一規格にしようという動きは良いんじゃないですかね。まあ予想外に根本的な所からの刷新ではありましたが。



ここに至るまでに出てきていた色々...。

ROLI MPE 規格 : ROLI 5次元キーボード対応で1つのノートに複数チャンネルを使う奴。設定に使うのは RPN 6
Hi-Res Velocity Prefix : ピアノでベロシティの解像度が足りなくなったのでノートオンの前に付けるタイプ、 CC#88 (58H)
eXtended Precision MIDI : ヤマハ製のピアノのベロシティ拡張 CC#16 (10H)


Posted by g200kg : 5:07 PM : PermaLink

2020/08/05 (2020年08月 のアーカイブ)

MIDI (SMF) ファイルのレガシーなノウハウとか今後とか


どこかにこういうものはあるだろうと思っていたのに意外と見当たらなくて、いきなり MIDI-dump ユーティリティなんか作ったりしましたけど、SMFの扱いはそれなりに癖があるのでメモ。

https://github.com/g200kg/midi-dump

ちゃんとした規格は AMEI のページから見れます。
http://amei.or.jp/midistandardcommittee/MIDIspcj.html

すっかりレガシーなノウハウになってしまいましたが、これから初めて SMF を触ろうとしているなら、はまりやすいのはこんな所です:

  • NoteOn のベロシティ 0 は NoteOff として扱う事。これと次のランニングステータスとの合わせ技でファイルサイズが小さくなる。

  • ( 場合によっては処理が面倒な事になったりするのだが ) ランニングステータスをちゃんと処理するのを忘れないように。最近はデータサイズにあまり敏感では無くなったので忘れられがち。

  • チャンクの構造はビッグエンディアンだけどベンドデータなんかはリトルエンディアンなので混同しないように。

  • Track Name 等のテキスト系メタイベントのエンコーディングは基本無法地帯。日本で作られたMIDIファイルは s-jis 文字列が入っている事が多い。内容から自動認識するしかないが、CP1252 (ISO-8859-1) と S-JIS が混ざったりすると割とお手上げ。

  • 読み込みの際に知らないタイプのチャンクはちゃんと読み飛ばす、チャンクのサイズはチャンクのlengthをリスペクトする事。XFフォーマットとか一部のMIDIファイルには追加のチャンクタイプが存在する場合がある。

  • データの読み込みでメタイベント End of Track にエンカウントしたら以降のデータは無視する事。各トラックのデータは EOT の後ろにゴミデータが存在する場合がある。

と、ここまでは復習。



ここからは予習。

既に MIDI 2.0 規格が発表されているわけで、今後 MIDI ファイルも 2.0 対応になっていくはずですが、MIDI 2.0 での MIDI ファイルがどうなるかはまだ不明です。MIDI 2.0 は双方向通信でネゴシエーションするのが大きな特徴なのだけど、MIDIファイルは基本的に楽曲再生用シーケンスデータとして使われるという事を考えると、ネゴシエーションは実機での接続に任せて MIDI ファイルはネゴシエーション後にシーケンサーに読み込むためのデータという事になるのかなあ。知らんけど。

MIDI 1.0 に対する下位互換はありますが、MIDI 2.0 で拡張された分解能の向上なんかが使えないと意味がないので、本命はやはり MIDI 2.0 ネイティブの UMP をファイル化する方法ですかね。つまり今までバイトストリーム状態でランニングステータスなんかを使って割とせこせことサイズ削減していたのが、Uint32 ベースのパケットストリームを扱う感じでしょうか。1楽曲あたりのサイズは増えそうだけどそこは時代の流れですね。

UMP のパケットストリームに適当なデルタタイムが付いている感じだとして MIDI 2.0 で追加された JR タイムスタンプ (Jitter Reduction) との関係はどうなるのか?

とか、まだ色々面倒な事がありそうですが、そのうち仕様が出てくるのではないかと期待。
まあテキスト系メタデータにエンコーディング指定が付いててくれればそれだけで...

MIDI 2.0 の規格はまだ英語版ですが AMEI のページからダウンロードできます。

http://amei.or.jp/midistandardcommittee/MIDI2.0/MIDIspcj2.html

結構大きな仕様なので、どこから読めば良いのか戸惑い勝ちだけど、100から104に順番に行くのが正攻法ですかね。ただ CI の周辺は今までにまったくなかった概念なのでなんとなくもやっとして全体像がつかみにくいので MIDI 2.0 プロトコルの UMP のあたりの話の方がとっつきやすいかも知れません。

何にしても MIDI 2.0 の規格は MIDI 1.0 の知識がある事を前提として書かれているので、MIDI 1.0 の内容を知らずにこれだけ読んでも多分なんだかよくわからなくなります。

Posted by g200kg : 12:38 PM : PermaLink

2020/08/02 (2020年08月 のアーカイブ)

midi-dump : midi (SMF) ファイルを読みやすくダンプするユーティリティ


今更だし、大したものではないのだけど、ちょっと MIDI ファイルの中身を確認したい事があったので作った。
取り合えずのものなので、適当な所が残っている。

こういうちょっとしたツールのようなものはもう大体 Web アプリで良いかなと思っている。

GitHub Repository : midi-dump
"midi-dump" Utility


Posted by g200kg : 1:32 PM : PermaLink

2020/07/29 (2020年07月 のアーカイブ)

Appleがハードウェア寄りなAPIの実装を拒否している件


Web MIDI、Web Bluetooth、Web USB、Web Serial...

と近年ハード寄りなブラウザ API がどんどん出てきていて、そこそこのものなら(ハードウェアの能力を限界まで絞り出すようなネイティブアプリがある以上完全に、とは言わないけど) Web アプリで済む世界は近いと思ってはいるのだけど、その一方でこういう話もあるのだよね。

元記事は6月末の頃のもののようだ。

厳しいなあ。
Gigazine : 「Appleが「プライバシー上の懸念あり」としてSafariへの一部ウェブAPIの実装を拒否」

面白そうな API が軒並み実装拒否対象になっている。まあ Web USB なんかが出てきた時に Web アプリからそんな所を触って大丈夫なのか? と多少は思ったというのも確かにあるけどね。Web MIDI は許して欲しいな、勝手な希望なのは承知しているけど。

対象の Web API は以下の通り :

・Web Bluetooth
・Web MIDI API
・Magnetometer API
・Web NFC
・Navigator API: deviceMemory
・NetworkInformation API
・Battery Status API
・Web Bluetooth Scanning
・AmbientLightSensor API
・EME Extension: HDCP Policy Check
・Proximity API
・WebHID API
・Serial API
・WebUSB
・Idle Detection

Posted by g200kg : 11:13 AM : PermaLink

2020/07/26 (2020年07月 のアーカイブ)

ノブのラベルはどう配置するべきか


特に気にしていない人には本当にどうでも良い話だとは思うのだけど、GUI画面のツマミの周辺の配置をどうするべきかちよっと迷ったりする事が多いんですよね。つまり、下の図のラベルとリードアウトをノブに対してどこに配置するかという話です。

幾つか考えるべき点はあって、まず実際のハードウェア機器ではリードアウトは普通存在しないので、ノブとラベルの位置関係だけになります。これがどうなるかというと、世の中の趨勢としても個人的な嗜好としても、家庭用オーディオやラックマウント機器のようなものならラベルはノブの上、小型のガジェットや鍵盤付きシンセのような平置きして使うものなら下、かなあ。絶対ではなくてあくまで傾向ですけどね。

というのも実際のハードウェア機器だと視線の問題があって機器の形によって見下ろす視線で使うものと見上げる視線で使うものでノブの陰にならないようにしないと使いづらいという事情があります。

ソフトウェアGUIになるとどこに置いても陰にはならないのでこういう呪縛がなくなるわけですが、ハードウェア機器へのリスペクトの高さによって、傾向としては残るんでしょうね。ハードウェアエミュレート系のソフトウェアならなおさらです。

そして現在のパラメータを表示するリードアウトですが、エミュレーション系ならそんなもの付いてないのが当たり前なんですが、せっかくのソフトウェアのメリットでもあるので個人的には付けたくはなりますね。

という事で身の回りの音楽系プラグイン等を数十程度ざっと見てみたのですが、まずラベルがノブの上に来るのか下に来るのかという事で言えば、下派がやや優勢で、上40%、下60%程度かと思います。やはり家庭用オーディオ機器よりもシンセやストンプエフェクターなんかの方が近い存在なんですかね。

そしてやや意外だったのが、リードアウト付きの比率が結構低いようです。リードアウト付きは全体の20%~30%程度でしょうか。付けても機能的にマイナスになる事は基本的に無いと思いますが、これはやはり楽器系ソフトウェア特有のハードウェアリスペクトの高さによるものなのでしょうか。

それで全体の2~3割の選択として、リードアウトを付けるとすると、ラベルとの配置の兼ね合いが割と厳しくなります。上か下ははともかく、ラベルとリードアウトを同じ方向に付けると下の図のようになるわけですが、やっぱりちょっとごちゃごちゃした感じになってしまいます。実際こういうパターンのもそれなりに存在するし駄目ではないんですが。

という事で結局ラベルとリードアウトをそれぞれノブの上と下に振り分けるというパターンが無難な感じにはなるんですが、それで上下にどう振り分けるかとなると、どっちを重視するかみたいな話で、どうするのが良いかもうわからない。ただ個人的にはラベルを上、リードアウトを下という方向でなんとなく収束しつつある気はしています。

大して変わらんと言えば変わらんのだけど、ただ、1画面内でラベルが上にあったり下にあったり混在しているのは流石に避けるべきかなとは思います。

Posted by g200kg : 2:31 AM : PermaLink



...更に以前の記事...


g200kg