2017年12月31日日曜日

クラウドファウンディングのハードウェア担当でした


股間のパッドを叩くと「チーン!」と音がするというシンプルな楽器Banggosのハードウェアを担当しました。

■発端■

発案者のFさんからWantedly経由でハードウェアを製作して欲しいと連絡がありました。SwitchScienceで発売しているハードウェアをご覧になったとのこと。面白そうなので担当させていただくことになりました。Chatのやりとりでこんなことが決まりました。
  • 担当するのはハードウェアのみ
  • ESP-WROOM-02を使う
  • WiFiで飛ばしてスマフォから音を出す
  • 衝撃スイッチを用いるバージョン
  • 導電布タッチセンサーを使うバージョン
  • 電源は単三電池3本(外国では単四を入手しにくいため)
    ※その後、海外対応が不要になったため単4電池2本に変更

※現在倉橋浩一はWantedlyは使用していません。
 ご連絡くださる場合には、facebook, LinkedInなどでお願いいたします。

■検討:衝撃スイッチ■

衝撃スイッチを搭載した基板を設計して、Elecrowに発注、自分で実装して試してみました。音楽センス皆無の私からすると叩いてすぐに反応しているように見えたのですが、発案者で音楽家のFさんには「遅延が大きすぎる」との評価。

スイッチを交換したバージョンを何種類か作ってみたものの、状況は変わりませんでした。

■検討:導電布■

ご存じのように多くのマイコンのGPIOは静電容量を用いてタッチセンサーとして用いることができます。まず、支給された高価な導電布を用いてESPに実装してみましたが、感度の調整が難しく、感度を上げると手を近づけただけで反応するなど思わしくありません。導電布ではなく導線・銅板などを使うと意図した通りに反応するので、導電布の導電性が思ったより低いのが原因のようでした。

また、動作が不安定なので、AT42QTシリーズなどの専用チップを用いてみました。これは電源投入時・リセット時に自動的にチューニングをしてくれるというものです。これも銅線ではうまくいきますが、導電布では難しい状態です。

導電布に変わるものを探したところ、Switch Scienceから「EaoTex感圧導電布」が発売され、試してみました。圧力で抵抗値が変わるモノなので、当初は抵抗値で作動させようと思って入手したのですが、これをAT42QTを組み合わせたところ、ほぼ理想的な特性が得られました。価格も前記導電布の1/10程度で非常に安く、耐久性もありそうです。

ただ、着衣状態でのタッチセンサー動作はやはり不安定で、安定させると反応が遅くなってしまう傾向があり、ドラムという打楽器には難しいのではないかと判断しました。

■検討:加速度■

加速度センサーについては当初も案があったのですが、踊りながら叩くというような状況で叩く衝撃と踊る衝撃を区別するには演算が必要で、そうすると遅れが出る……ということで没にしていました。

が、改めて使ってみたところ、叩く衝撃と踊る衝撃は方向が異なるので、ごく単純な演算処理だけで検出できるということがわかりました。Fさんの評価でも遅延はなく、加速度センサー使用によるコストアップは導電布を使わないことで吸収できるとわかり、最終的に決定しました。

また、音の出しやすさなどからCPUについてはESP-WROOM-32とし、内蔵DACからヘッドフォン端子に音を出しつつWiFiで飛ばす。電源については昇降圧DC/DCコンバータを用いて電池2本で駆動する、ということになりました。これならエネループでも新品のアルカリ乾電池でも安定して動作させられます。

■試作:失敗!■

設計した基板をpcbgogoに発注して自分で実装したところ、1発で動作しました。ステンシル無し+ホットプレートリフローでQFNを搭載したボードが一発で動くなんて奇跡です(笑)。ということで、いつものElecrowに5枚の試作を依頼しました。

が、これは動作しませんでした。それは、今回使用した加速度センサのパッケージはQFN16(0.5mmピッチ)はElecrowのデザインルールを下回っていて、ピン間にレジストが回っておらず豪快にブリッジしていました。Eagle CADにElecrowの支給するデザインルールを用いてチェックし問題はなかったのですが、それとは別にWebに最低0.25mmと記載されていました。こちらで設計したQFNのレジスト太さは最低0.1mmでした。

さて、困りました。数個の試作、あるいは数十個単位の製作をElecrowほどの低価格で引き受けてくれるところはそう多くありません。

国内の業者のWebで自動見積をしたところ5個7万円弱、50個9万円弱と出ました。量産はまだしも、失敗する可能性のある試作が7万円というのは非常に痛いです。

探した結果、Seeed StudioのFusion PCBならば0.1mm精度のマスクにも対応可能とのこと。ただ、当然ながら単価は大幅に上がってしまいます。20個で約4万円。当初予定の約10倍です。部品代もESP-WROOM-02のタッチセンス版と比べると約2倍になってしまいました。プロダクトオーナーのFさんの了解を得て進めました。

■量産試作■

回路に問題ないことは確認できていたのでFusion PCB Aに発注。すべての部品は日本から送り、部品到着後2週間。設計意図通りに動作しました。
 
ESP32のI2SライブラリはデータをまとめてセットするAPIと1語ずつセットするAPIが用意されています。前者だと音データが終わるまで他の処理ができないので、今回は後者を使いました。音をだすためのスレッドを作り、その中でシグナルが来たら音を出し、もし途中で別のシグナルが来たらそっちに切り替える、という単純な方法です。

加速度センサーの処理は直近のデータの三軸合成値の移動平均を求め(重力加速度)、その値から大きく変化したら「叩かれた」と判断して音出しシグナルを出します。こうすることで、踊って姿勢が変わっても無駄に音が出ず、叩いた時だけ的確に判定できるようになりました。

■量産■

内部抵抗の大きくなった電池でも安定して動作するようにDC/DCの入力側のパスコンを大きくするなど細かい変更を行って、量産発注しました。発注から約3週間、先方に部品到着から約10日で受け取ることができました。



12月30日の夕方到着。12月31日に動作確認を行った後、基板に電池ボックスをハンダ付けし、プロダクトオーナーの元に送りました。

基板試作は何だかんだで7種類、PCB Aでも3種類作りました。工数は軽く100時間を越え、失敗作分などの持ち出し経費もだいぶ多かったのですが、得るものの多いプロジェクトでした。

冒頭にも記載しましたが、倉橋浩一個人としてこのような基板の設計・製作をお請けすることは可能です。Facebook, LinkedInなどからご連絡いただければ幸いです。

また、KickstarterおよびCampfireでの募集はすでに終了しておりますが、発案者のFさんに直接コンタクトとっていただければ対応可能とのことです。

■IGNICTION■

プロジェクトが進んでいる間に、iFaceなどを作っているHamee株式会社に転職することができました。勤務先のHamee株式会社ではプロダクト・インキュベーション・プロジェクト「IGNICTION(イグニクション)」を開始いたしました。ハードウェア設計・製作支援もご相談可能ですので、ご興味のある方のコンタクトお待ち申し上げております。

念のためですが、このブログ記載内容の一切の責任は倉橋浩一個人にあり、Hamee株式会社とは関係ありません。またBanggosもHamee株式会社とは無関係です。IGNICTIONについてもここでは制度の存在を告知するのみであり、その以上のものではありません。

ラズパイ用micro SDカード管理(小ネタ)

ホコリも吸着するという問題が

あのちっこいSDカードに、ネームランドのテープを貼ったりしていまいしたが、ネームランド面倒くさい。

ふと思い立ってポストイットのノリ部分にmicro SDを直接貼ってみたら、意外と便利でした。しばらく使わないときはクリアファイルに内側から貼り付けておけばファイリングも可能ですw

2017年12月23日土曜日

ESP32で大量のNeoPixelsを正常に動作させる

Adafruits版だと正常に動作しないのですが、facebook上で「このライブラリを使えば動く」と教えていただき、試したところ正常に動作しました。Mさん、ご教授いただきありがとうございました。

ただちょっとビルドを通すのに手間取ったので、その辺を書いておきます。

まず、以下をダウンロードして解凍するか、cloneします。ここにWS2812のライブラリなどが入っています。

esp32-snippets直下のcpp_utilsをesp/esp-idf/components下にコピーします。本来であればこのままで良いのですが、簡単にビルドが通らないソースがある場合にはその拡張子を.cppから.bakに変えてしまいます。私の場合、BLEHIDDevice.cppをBLEHIDDevice.cpp.bak、BLESecurity.cppをBLESecurity.cpp.bakに変更しました。良いんだ今は使わないから(笑)。

ダウンロードした.zipとesp32-snippetsはゴミ箱に入れても構いません。

次に、以下をダウンロードして解答するか、cloneします。

ターミナルでespressif/app/ESP32_gpio_WS2812/mainに移動します。ここにあるWS2812.cppとWS2812.hを削除します(ここにあるのは古いライブラリで最新版は上でcomponents下にコピーしましたので)。

一つ上のディレクトリに戻って、make menuconfigでシリアルポートと通信速度を設定します。通常ならばこれだけで良いのですが、components下に入れた他のライブラリのビルドを通すためにCompilar options->Enable C++ exceptionsをonにします(カーソルを移動してスペースキー)。

WS2812/NeoPixelsはGPIO22に接続します。

これでmake flashします。するとesp-idfのバージョンによってはエラーがでますので、main/main.cの22行目heap_regions.hをincludeしている分をコメントアウトし、26行目のesp_heap_alloc_caps.hをesp_heap_caps.hに変更し、34行目をコメントアウトします。

ソースを保存して再度make flashすればデモ点灯します。

LEDの数や接続ピンを変更するにはmain/ws2812_task.cppの37-38行目の定数を変更します。

2017年12月22日金曜日

ESP32で33個以上のNeoPixelを使うと制御が乱れる



■追記■


たくさんつないでも点灯するライブラリを教えていただきました。


■うまく点灯してくれない■

原因はLEDが増えてshow()での処理に1mSec以上かかってしまうとデータ送出の最中にインタラプトが入ってフォーマットが崩れてしまうこと、とのことです。

ということで、ちょっと煩雑ですが、show()の前後を以下のコードにすることで少し解決します。
  portDISABLE_INTERRUPTS();
  strip.show(); // Initialize all pixels to 'off'
  portENABLE_INTERRUPTS();

「少し」というのはときどき1個だけおかしくなったりすることがあるからです。64個使う場合には27番目と56番目です。手元にある他のLEDストライプを使っても同じような感じなので、ソフト側の問題ですねぇ…。

焼け石に水で
    delay(1);
    portDISABLE_INTERRUPTS();
    strip.show();
    portENABLE_INTERRUPTS();

にすると61番目だけがおかしくなります。さらに、
    portDISABLE_INTERRUPTS();
    delay(1);
    strip.show();
    portENABLE_INTERRUPTS();

だとまた別のところが時々おかしくなります(笑)。いや笑い事じゃないですが。まぁ、Disable Interruptしないと全然見られないのに比べれば少しはマシということで…なんかwork aroundが出るのを待ちましょう(他力本願)。

SPIをDMAで動かせば何とかなるんじゃないかと思うんですが(思うだけ)。

2017年12月20日水曜日

新しいハンダ付け作業台(またか)

以前、$4で買った小さな基板用作業台、悪くないんですが雲台を別の用途で使っているので死蔵してました。

が、ふと、「この幅はスマフォと同じ」と気づきまして……クルマのダッシュボードなんかにスマフォを固定するために使うスタンドと組み合わせてみました。


完璧ですw




$4の作業台はバネで押さえるだけですがネジで位置を調整できるので基板の入れ替えは簡単。このスタンドは自由度が高いのでほぼ望む位置に作業台を持ってくることができます。ただ吸盤はイマイチで、吸盤を使わず粘着シートだけで貼り付けておいた方がしっかり固定されます(しっかりすぎて机のニスが剥がれるけどね)。

根元の方のネジは効きが悪いので、ここに荷重がかからない向きにして使うのがおすすめです。小さな基板をとっかえひっかえ作業するのに良いと思います。

合計約2,000円。

2017年12月10日日曜日

MDFのヤニ



MDFをレーザーカットするとヤニがついてしまいます。以前はIPAや水で拭き取ればきれいになるのですが、繊維が残らないように不織布を用意したり乾くのをまったり面倒くさい。

衛生用のアルコールティッシュを使ったら綺麗に落ちて乾燥も早いです。

2017年12月8日金曜日

PCB発注いろいろ

ご無沙汰しております。

最近、サラリーマン業が炎上気味かつメイカー仕事がキャパオーバーでブログ書く時間ありませんでした。

PCB / PCB A発注は以前はelecrowとpcbgogoだけでしたが、最近、seeedやp-ban.comも頼んでみたので、その辺の雑感など。

わたしはいずれの場合も日本から主要部品を送りました。送らないで済ませたいのですが、基本的にMouserなどからの仕入れになるので日本向け製品については送らざるを得ないのです。そういうものを使わないで設計したいのですが、普段秋月に依存しているのでしょうがないのです。

■Elecrow■

PCBの品質はPrototypeで70点ぐらい。シルク太い。カットが汚い。Premierで80点ぐらい。Premierなら文字サイズ24milでもなんとか読めるけど、Prototypeは32milがギリギリ、50milをオススメします。あ、1.6mm、緑レジストだとPrototypeでもわりときれいです。

PCB Aに関しては、半田付けはきれい。レジスト精度0.3mmまでなのでQFNには対応していないが、1mmピッチぐらいまでなら圧倒的に安く作れます(50x30mm, 1.6mm両面基板で20枚1万円ぐらい)。納期はあちらに部品が届いてから10-12日ぐらいで届く。時々腰の抜けるようなミスがあるので、指定はうるさいほど厳密に。表面実装のCRなどは無料で使える。Fusionだとメーカー型番を厳密に指定しないといけないけど、ここは2012, 1kΩと書いておけばライブラリから適当なものを使ってくれる。

0.5mmピッチQFNには非対応。知らないで頼んだらロット全滅しました(笑)。

あと、事前に言っておけば余った部品は返却してくれます。

困った点は、基板発送時に写真を送ってくれるんですが、「送ったよ」メールなのでもしそこで間違いなどに気づいてもどうすることもできません。PCB Aのときには写真なしなので届いてびっくりということもあります。まぁでもそれは大抵の場合自分のBOMや図面に間違いがあるから悪いので、安いけれど自己責任、という選択肢だと思います。

担当者との連絡はすべて英語。

■PCBgogo■

PCBの品質は85点ぐらい。十分きれい。48時間特急料金にしてもそれほど高くない(50x50mm, 1.6mm, ENIG仕上げ5枚で送料込み1万円弱)。土曜日も作業してくれるので、タイミングによってはp-ban.comの標準納期より早く着く。

PCB A、こないだ特別オファーでElecrowと同じぐらいの費用で受けてくれたので頼んで見た。 基板の品質は良いし、この値段なら普通に頼める。QFNについては頼んだことないのでわかりません。

あ、あと、日本から部品を送る場合、少し余分に入れておいてくださいと言われるんだけど、余った部品はちゃんと返してくれます。あとPCB Aで発送前にかならず写真を送ってくれて、ちょっと怪しい箇所(例えば1個だけ向きの違うLED)については、「この向きで大丈夫ですか?」と確認してくれます。うっかり八兵衛の生まれ変わりな私には大変ありがたいです。

担当者とのやりとりは日本語。

■Fusion / Seeed■

PCBの品質は90点ぐらい。十分きれい。

PCB Aでは、一般的な基板とQFNを含むレジスト精度0.1mm以下の基板を頼んで見たけど、不良ゼロだった(当たり前か)。事前のチェックはElecrowよりかなり細かく、抜けをそのまま放置する、なんてことはなく問い合わせが来ます。納期はあっちに部品が届いてから2週間+αという感じ。作業過程が見えないので、ちょっと遅く感じます。いや実際Elecrow / PCBGOGOより5日ぐらい遅いかな。

担当者とのやりとりは日本語。やっぱり楽。リンクはこちら


■P-ban.com■

PCBを頼んで見た。納期予定通り。金額はWebの見積もり通り、だいたい中国勢の5-7倍ぐらい。ただ、中国勢に特急料金払って空輸してもらっても日本国内なら翌日配達なので、急ぎの基板については差はもう少し縮まるし、最短翌々日に届くのは中国からでは絶対に不可能なので、非常用手段としてキープ。

仕上がりは驚愕するレベル、100点満点。エッジはつるつるだしシルクも美しい。

今まで、中国勢に50mil, 8%でシルク指定してて「このぐらいの太さだな」と思っていたものが、細過ぎて老眼鏡が必要なレベル。もちろん24milでもくっきりと読むことができて、顕微鏡で拡大してもにじみがない。いやびっくりです。なんでこんなに違うの?

なお、P-ban.comで標準になった水溶性フラックス仕上げってので頼んでみたのですが……半田付けしたあとにフラックスクリーナーでわたしの半田付けの下手さを洗い流すことができないのが辛い(フラックスを洗い流すと銅箔が錆びるから)。

担当者とのやりとりは当然日本語。PCB Aはまだ頼んだことありません。

■まとめ■


基板のみの場合、超特急なら国内。週末に設計・発注して翌週末に作業したい週末メイカーにはPCBGOGO。試作でとにかく安くということであればElecrow(pcbgogoも安いけど、ElecrowはOCS/ANAを選べるのでDHL/FedExより1日早いし、もっと安い一般航空便も選べる……試したことないけど)。高精度のものはFusionか国内。

PCB Aについては、簡単なものを安くあげたいならElecrow。高精度なものを比較的安価にということであればFusion。高精度なもの and/or 美しく and/or 早くであれば国内。

……ごく当たり前の結論ですね。

このところ、本格的な受託開発が多く、「値段は(あまり)気にしないから早く早く」ということで国内業者を使って見たのですが、いやー、やっぱ綺麗だわ……というのが感想。ただ、わたしら基板を手にとって見る人間にとっては綺麗だけど、基板の入った装置を買う人にとってはオーバークォリティなのかもしれないなぁと思いました。

……また当たり前のことを書いてしまった。