2018年12月22日土曜日

久しぶりにSwift:サイズの違うUnsafeMutablePointer間の変換(自信なし)

いやー…相変わらずDeprecatedの嵐ですわー。フィックスしますか?って聞いてくれなくていいから自動的に直せやコラ、とついガラが悪くなる今日このごろです。

えーと、MP3への変換をしようとして、lameは16bitだけどoutput streamは8bit、両方ともUnsafeMutablePointerなんだけどサイズが違ったら変換できないよ、って言われて散々苦労したんですが…これでとりあえずビルド通りました。デバッガで見るとpcmBufferとpcmU8Bufferには同じアドレスが入っているのでC言語の慣行的にはOK、ですかね。

let pcmBuffer = UnsafeMutablePointer<Int16>.allocate(capacity: Int(PCM_LENGTH))
let temp = UnsafeMutableRawPointer(pcmBuffer)
let pcmU8Buffer = temp.bindMemory(to: UInt8.self, capacity: PCM_LENGTH*2)

2時間ぐらい試行錯誤してましたわ…。

ググっても見つからなかったので貼っておきます。もっと簡単な方法があればご教示いただければ幸いです。コメント欄、スパム対策の承認制ですので、書き込んでもすぐには表示されません。ご注意くださいませ。

2018年12月2日日曜日

ランダムサンダーでやかん磨きました

羊毛+ピカール約12分

ランダムサンダーでやかん磨いてみました。使用前がこちらです。炒め物の油がはねてそのまま使うから焦げるんですよね…ってか汚いにも限度というものが。


中性洗剤で洗ったあと(ほとんど落ちないw)、#400ジスクペーパー(ジスク=ディスクなんだろうなぁ)で全体を磨いたあとがこちらです(約10分)。焦げは落ちていますが、研磨傷ヒドい。


ペーパーの後、本来はフェルト+研磨剤で磨くんですが注文ミスでハンドグラインダー用のフェルトを買ってしまいまして、他には手元に羊毛しかなかったので少し時間かかりました。約1/3を磨いて12分程度。それがトップの写真です。磨いていないところとの境界の写真を取りました。

なんで1/3しかやらないのかというと…重いってか重量もあるんですがジャイロ効果で手首が拗じられるので、普段キーボードより重いものを持ち上げない身(持ち上げません)にはとてもしんどくて、5分に1回休んでも指先がプルプル震えます。これ業務で長時間使う人って鉄人やな。あと、昔なつかしいトレーニング器具のダイナビーを思い出しました。

使ったのはマキタ(makita) ランダムオービットサンダ BO5030というタイプ。同様のボッシュのやつは壊れやすくトルクない、というレビューだったのでこれにしたんですが…これも意外とトルクがなくて羊毛押し付けると止まってしまいます。ただ、当てているつもりの場所と離れたところが鏡面になっていたりで使いこなせていないようです。

あと、細かいところはやっぱり無理で、取手の付け根のような場所はミニルーターにフェルトつけて磨かないとあかんかな、って感じです。

フェルトと研磨剤(茶・白・青棒というやつ)を買って、またそのうちに。

2018年11月29日木曜日

リフロー炉導入

いい仕上がりです。

■購入まで■

私淑する先輩がリフロー炉とステンシルプリンターは必需品とおっしゃったので、Aliexpressを物色。すると、定番リフロー炉T962の後継機種としてLY-962Aというのが出ていました。T962は赤外線加熱のみでしたが、LY-962Aは赤外線+熱風式。これまで私が使っていたホットプレートは手軽ですが均一に加熱されないのが悩みのタネでしたので、即購入しました。送料込みで$328.21です。

ステンシルプリンターは、ピンで基板の位置を自在に変えられるちょっと良いやつを買いました。送料込$421.98。

どちらも発注日は11月12日です。

■ちょっと紆余曲折■

ステンシルプリンターは11月21日に届きました。

でかい

サラリーマン業が忙しくて開封したのは28日なのですが…見事に破損していました。かなり重い機械なのですが、高いところから落としたようで、箱の一辺が潰れ、その中にある調節つまみがひん曲がり、アルミ製の分厚い定盤も曲がっていました。



Aliexpressに連絡を取ったのですが、業者は「配送業者FedExに連絡しろ」とのこと。で、FedExに連絡を入れたところ、折返しメールでクレームを出してくれと言われて、担当者と何度かやりとりをして提出しました。返金されるかどうかは7-10日ほどで通知されるそうです。どうなることやら…。

【追記】FedExに画像などを送ってクレームを入れたところ、運送中の破損だと認定され全額損害賠償されることになりました。クレームを入れてから10日で決裁されたと連絡があり、その1週間ほど後に入金されました。AliExpressへのdisputeは、一度却下されたのですが、破損状況を説明する怒りの動画を送って再審査を求めたところ、再度裁定の判断になり、業者側で対応を検討するステータスになりました。業者からは、「こうすれば治る」という説明は来るのですが、破損した部品を交換するとお金がかかるからFedExと交渉してくれ、の一点張りでした。結果的にFedExが認めたから良かったものの…。【追記終わり】

リフロー炉は11月23日に届きました。特に問題はないです。

でかい^2

■テスト運転■

こっちもでかくて重いです。作業場所がないので、とりあえずキャンプ用テーブルを引っ張り出して、その上で動作テストをしました。


スイッチのパネルが割れているというような些細なことはどうでもいいのです。


リフロー炉のテストです。110V仕様を100Vで使っているせいか150度から上の昇温が0.5度/秒って感じでとても遅い。220度まで2分ちょい。冷却も遅いので、150度以上に5分程度とどまってしまっています。



T962はそのままではまともに動かないので制御プログラムを入れ替えて使っている方が多いとのことですが、これは少しオーバーシュートしますが一応制御はまともに動いており、特に改造しなくても使えそうです。



遅大きな基板で試してみても端から端までのフラックスの流れ方が均一なので、ホットプレートで一部240度、反対側はまだ溶けてない…なんていうのより遥かに品質は良いはず。

■実践:ステンシルでスキージング■

前記の通りステンシルプリンタが破損していたので、手動でスキージングしました。

カッティングマットの裏側に捨て基板をマスキングテープで止めてから、実基板を固定し、ステンシルの位置を合わせてマスキングテープで止めます。



スキージングには漫画喫茶の会員証を使いましたw テレホンカードが良かったんですが、さすがに在庫が尽きました。一部で0.2mmほどズレましたけど、ユニクラフト製の基板はきっちりレジストが塗られているので大丈夫…と思います。



で、手で…というかピンセットで部品をマウントしました。ほとんどのパーツはルーペをみながら、0.4mmピッチコネクタだけはUSB顕微鏡を見ながらマウントしました。

■リフローとその結果■

付属の排気ダクトを装置裏の排気口につないで換気扇の下まで伸ばし、リフロー炉に基板を入れて、プロファイル1を選択してリフロー開始(予熱100度1分、プリヒート160度30秒、リフロー220度5秒、ホールド5秒(温度不明)、冷却)。室温から約10分で冷却まで終わります。

当たり前ですが、ホットプレートで手動で温度管理するよりも圧倒的に楽。

結果はトップの写真です。0.4mmピッチコネクタの下で3箇所ブリッジがありました。しかし、それ以外の箇所には完璧でハンダゴテでの補整は必要なしでした。表面実装のDCジャックは熱量が足りなくてハンダ不良になることもあるのですが、完璧でした。

いやー…やっぱり道具にはお金かけないとダメですね…。

■今後■

課題として前記の通り昇温が遅いので自宅量産を始める前に100->110Vの変圧器入れようと思います。1600Wぐらいの変圧器、適当な中古品が見つかれば良いのですが…デカイし重いし大変。【追記】溶接機なんかに使う15% / 25% up切り替えスイッチのついた2KVAのやつを購入しました(スター電器製造(SUZUKID)昇圧専用 ポータブル変圧器 トランスターハイアップ SHU-20D)。怖くて25%にはできませんが、15% upの115Vなら定格内、試してみたところ0.5度/秒ぐらいだった最後の昇温が1度/秒程度までスピードアップしました。新品で思ったよりも安かったし。よかったよかった。【追記終わり】

あとはステンシルプリンターの返金処理…。結果は後日ご報告します。【追記】輸送中の破損ということでFedExから返金されました【追記終わり】

2018年11月26日月曜日

導通試験器


テスターには導通試験モードというのがついてるんですが、大抵はブザーです。私は耳が悪いので、見てすぐわかる導通試験機を作りました。

材料:

  • 秋月のスイッチ付き電池ボックス(単4電池2本用)
  • 定電流IC(1mA)
  • 赤色LED
  • 熱収縮チューブ
  • ブレッドボード用リード


電池ボックスのマイナス側リード線を真ん中へんで切って熱収縮チューブを通してから定電流ICを取り付け熱収縮チューブで覆います。もう一度、別の熱収縮チューブを通してから先端にブレッドボード用のリードを圧着します。圧着は工具があるとキレイかつ楽にできますが、この用途であればラジオペンチでも十分ですし、そのへんに転がっているリード線の切れ端をはんだ付けしてもOKです。

LEDの足を写真のようにひん曲げておいてから、プラス側のリード線にも熱収縮チューブを通してからLEDをはんだ付けします。

以上で出来上がりです。



電池は普通のアルカリ単4電池でもいいですが、エネループなどのニッケル水素電池がおすすめです。アルカリ乾電池は新品だと2V近い電圧が出ますがニッケル水素電池だとフル充電の状態でも約1.4Vなので2本で最大3Vぐらい、赤色LEDのVfが1.8Vぐらいあるので、検査電圧1.2V 1mAの被検査回路に優しい導通試験機です。

1.2Vぐらいでは壊れない素子の方が圧倒的に多いですが、それでも壊れることは皆無ではないので、あくまでもはんだ付けなどの確認として使ってください。

2018年11月16日金曜日

Arduinoでカラスを追い払う…1



ハト対策が一段落したので、ハト対策に使った装置(PIRで体温を検知すると2つのNeoPixelsが激しく点滅する、だけ)をゴミ集積場に設置してみたところ、いつもは朝7:30ぐらいには盛大なパーティーを開いているカラス2羽がゴミを荒らすことはありませんでした。

すぐに「危険性がない」と舐められるような気がしますが、とりあえずは1勝ですw



2018年11月16日
06:00ごろPIR検知のNeoPixelsを設置。被害ゼロ。

〜2018年11月27日
火曜と金曜に設置、被害ゼロ。近所にたくさん似たような集積所があるのでわざわざヤバいところに行かなくてもいいんじゃね?的な判断なのだろうか。なおご近所の散らかりっぷりは変わらず。

2018年11年30日
設置停止したが被害ゼロw とりあえず被害が再発するまで停止するわ。

2018年12月11日
被害再発しました。ただ、9Fから私が顔を出しただけでカラスが逃げる。装置ではなく私が危険認定されている可能性。




2018年11月5日月曜日

今更ですがESP32でニキシー管時計を作る


■はじめに■

先日、知人Kさんから依頼されてニキシー管時計を修理しました。一度うまくいったんですが、数日後また破損。もう一度調べてみたら高圧側のトランジスタが破損。交換しても直らなかったのであとはわからーんとギブアップしました。申し訳ない。

K氏はオークションで入手したそうですが……基板はヤニまみれ(フラックス洗ってない)でICもニキシー管もソケット無しの直付け状態、少し経験のある人なら基板見ただけで「ギャッ」と叫びたくなる代物でした。

ちゃんと作ればそれなりにできるんじゃね?ってことで、ついうっかり、アマゾンでニキシー管と74141互換チップなどをポチってしまいました。

てことで作ります。

■仕様と設計■

せっかくニキシーなので時計の基本機能をTTL(Nシリーズ)やDTLで作ったら超クールなのですが、そこまでは攻めません。手元にゴロゴロしているESP32を使います。ESP-WROOM-02と比べてGPIOが潤沢なので時計も簡単に作れます(そういえばまだESP32でデジタルクロック作ってないな)。

最近の私は3.3Vが標準電圧で、5Vは高圧です。しかしニキシー管は180vという超高圧で動作しますので怖いとかいっていられません。高圧を作るには、DC/DCを使います。せっかくADC付きのCPUがあるので、それをコントローラにして昇圧チョッパー回路で高圧を作ります。

ニキシー管はダイナミックドライブにして、セグメントドライブには前記の通り74141を使い、カラム側のスイッチにはMOSフォトカプラを使います。これならよっぽどバカな失敗をやらかさない限りはCPUなどが壊れることがないので。CPUはまだしもMacに高圧かかったらもう生きていけません。

チョッパ昇圧回路のスイッチング周波数とかL値どうしようかなと思っていたら、計算式が見つかった。すごいよインターネッツ。試算するとだいたい経験則と近い値が返ってきたので、使わせていただきます(Rds=200mΩ,L=220uH,V=5v,I=0.1Aで520kHz)。ありがとうございます。

なお、ESP32にはPWMをわりと細かく制御できるledcなんたらという命令群がありますが、8bit精度の場合には320khzあたりが上限みたいです。1000000hzと指定してもこのぐらいの周波数しか出てきません。手持ちのMOSFET(パワーMOSFET TK6Q60W (600V6.2A))はRdsが600mΩ程度なので上記計算式からL=470uHを使えば良い感じで昇圧回路が働くのではないかと思われます(ブレッドボードの直流抵抗もバカにならないんですが、とりあえず気にしない)。整流にはファストリカバリダイオード(ファストリカバリダイオード 1JU41 (10本入))、キャパシタにはこれ(電源用電解コンデンサ   47μF400V105℃(ルビコンBXC))を使います。ESP32のledcなんたらについてはこの辺。


■実験■

とにもかくにも高圧回路。次にニキシー管点灯を実験します。

マイコンで制御する高圧発生回路は以前はと撃退用にLPC1114FN28で作りました。今回もよくあるMOSFET使用のチョッパー型昇圧回路を作ります。発生電圧の計測は抵抗で1/100に分圧しマイコンのADCを使います。MOSFETはNPNトランジスタでドライブします。

MOSFETの使い方に関しては、ここの解説が定番かと思います。

PWM周期はカットアンドトライで詰めて300vまで出せることを確認しました。コンデンサなどの耐圧がボトルネック(400V)なので、こんなに高くする必要はもちろんないんですが、PWMのデューティーとリニアに比例するあたりで使わないと制御プログラムが複雑になるので。

あとは可変抵抗もADCに接続して手動で設定電圧を可変できるようにしておき、発生した高圧も分圧抵抗通して別のADCに入力。可変抵抗で調節した値に電圧が自動調整されるコードを実行して、プレートに高圧、適当な数字をGNDに接続して、点灯テストをしました。IN-12Aの場合、120Vぐらいからセグメント?の一部が光り始め125Vでフル点灯になりました。よっしゃよっしゃ。


その後、一度部品をバラして組み直したら何故か電圧が60Vぐらいしか上がらなくなってしまいました。原因は電解コンデンサの極性が逆でした。怖い怖い。これヘタすれば爆発しますからね。気をつけましょう。なお逆接続で使った電解コンデンサは内部の劣化が進んでいる可能性が高いので、勿体ないけど廃棄します。申し訳ない>電解

で、この電圧管理部分は他の処理でブロックされるわけにはいかないので、別タスクとして起動します。Arduino ESP32はFree RTOSベースなのでありがたいです。

■そして茨の道■

ニキシー管には12本の端子があります。6桁だと72本っすね……ええもう修行僧になって配線しましたよ。今回ダイナミック点灯で数字に関しては全部並列です。なので、エナメル線を使いました。先日UEW線を試してみてイマイチだったのですが、線を細いものに変えてみたらばっちりでした。


ラグにエナメル線を2回通して絡めておき、少し温度を高めにしたハンダごてでじっくり溶かし込んでやります。イヤな煙が出るけど、気にしません。ざっと2時間ぐらいかかりましたが、最初にワイヤを全部切っておいて試行錯誤なしなら小一時間ぐらいでしょうか。なお、写真上の方にあるのは、導通確認用に作った定電流IC+LED付き電池ボックスです。


先週金曜日にiPhone Xが届いたのですが、なんかムダに写真がキレイですw なおソケットの色むらは買ったときからで私が焦がしたわけではないので念のため。

それからアノードは各桁ごとに配線します。写真ではオレンジ色の配線。高圧側なので一応26AWGのシリコンワイヤを使いました。ダイナミック点灯のコードを書いて、無事6桁点灯しました。最初隣の桁が薄ぼんやり点灯する現象が起こったのですが、そこはソフトウェア制御なので、ガードタイムを設けてカバー。

コーヒーカップ、洗いなさい

■ソフト■

と、ここまで三連休のうち7時間ぐらいで終わりました。時計のソフトは何度も作っているので、翌週末の午後で何とか完成。もうちょっと掃除したら公開します。

でも、時計として使うには、ちゃんとケースに入れないとダメですね。電流弱いからトラッキング現象で炎上、なんてことにはならないでしょうけども。

ってことで、そのうちケースとソフト掃除が終わったら続きを書きます。

2018年10月25日木曜日

ESP-IDF+Arduinoで書いたプログラムをバイナリ配布する


LGPLなライブラリを使用している場合、当該ライブラリが静的リンクなら製品のソースを配布しなければならない等いろいろありますが、少なくともArduino coreを使用している場合には、ユーザ自身の環境でビルドしてライブラリのバージョンアップなどに対応できるようになっていればソース公開の必要はないとされています(※下記FAQの記載ですが実際に利用する際には弁護士などに確認してください)。

個人の開発であれば、面倒なのでgithubでソース公開しちゃえば良いのですが、企業での製品開発だとソース公開ができない場合も多いです。

そこでESP-IDFを利用している場合に製品のバイナリだけ配布する方法を調べてみました。試行錯誤でずいぶん手間取ってしまったのですが…結果としてはとても簡単です。コンポーネントはlib〜.aとしてまとめられるので、これをcomponent.mkで指定してmakeするだけです。通常はlibmain.aですが、componentsに自身で書いたコードが置いているときには、lib+コンポーネント名のlibができます。

  1. esp-idfでmake
  2. build/main下にあるlibmain.aをプロジェクトディレクトリに移動
  3. その他の自作コンポーネントがあれば同様にlib〜.aを移動
  4. main下のcomponent.mkに
    COMPONENT_ADD_LDFLAGS := libmain.a
    を追加する。他の自作コンポーネントがあればスペース区切りで列挙
  5. main下および自作コンポーネントのソース(.c, .cpp, .h)を消す
  6. buildディレクトリなど不要な要素を消す

これだけです。makeでビルドできるはずです。ビルドが確認できたら、component.mkへの追加事項などビルドに必要な情報を記載したreadmeとlib〜aを配布すれば、ライセンス要件をカバーできます(くれぐれも弁護士さんに確認してから実施することをおすすめします)。

ライブラリを追加すれば良いのはわかっていたのですが、COMPONENT_ADD_LDFLAGSで追加するという方法を見つけるまでさんざん苦労しました…お役に立てば幸いです。

2018年8月29日水曜日

鳩対策は終わらない:1


ベランダについては、電撃柵などの対策により、ようやく来なくなりました。

が、共同廊下側にまた来るようになりました。公団でテグスを張ったり、私がサーボで追い払ったり、止まらないようにカバーをつけたりして、2ヶ月ぐらいは来なかったのですが。

一度来るようになると、追い払っても毎朝来ます。そして大量のフンを残します。

小手調べとして、市販のセンサーライトを設置しました。PIRを使ったもので、生物が近づくとライトが点きます。ただ、明るいところでは点灯しないためのCdSセンサーがついているので、センサーの上にアルミ箔を貼って遮光してあります。ご覧の通りの2眼式?で目っぽく見えるのが味噌。かな。

昨日設置して、とりあえず今朝は糞がありませんでした。それで喜んでいたら、その後ジョギングから戻ったツマ「いや、普通に来てたよ」とのことorz

で、プランターなど「いかにも巣を作りたくなりそうなエリア」の近くにセンサーライトを移動しました。その翌朝、糞もないし、鳩も見かけませんでした。

今のところは。

しかし鳩が一度その場所に執着してしまうと、結局は物理的に排除しないとダメ(殺すのではなく防鳥ネットなどで入れないようにするという意味ですよ>鳥獣保護法)、というのが結論ではありますが、共同の廊下なのでそうもいきません。

なので、新しいガジェットに慣れたら次のものを用意するのではなく、なれるヒマを与えず次々と用意する、ってのはどうだろう。

ということで、いろいろ考えています。基本になるのは、ラズパイとカメラを使った顔認識+PIR。鳩を認識して、ってのができれば良いのですが、学習させている間に廊下が糞だらけになってしまうので…とりあえず「何か生物が来ている」から「顔を認識したから人だわ」を引き算すれば、「人間以外の生物が来ている」と判断できるんではないかと。

後ろ向きはどうする?ってのはありますが、普通の人は顔をこっちに向けて歩いてくるので、去っていく時間に余裕を見ておけばまぁ大丈夫かなーと。

で、アクチュエーター?部分ですが:
  • プロジェクタで猛禽類の映像を投影する
  • 電池駆動プラモに最小限の改造を加えて生物を検知するとぐるぐる走り回るようなものを作る
  • 蛇のおもちゃを複数のウインチ+モーターでつってSkycamならぬSkySnakeで驚かす
  • めんどくさいからルンバのパチモノ導入
  • いっそトイドローン飛ばして驚かしたらいいんじゃね
  • 空飛ぶドラえもんとか
  • 忌避剤スプレーをセンサー検知で噴霧
  • ISD1820にPIRつないでカラスの鳴き声を流す
  • ESP32にスピーカーつないで、動きを検知したらFlash内の音を再生する。Flash内の音は適宜http server経由で入れ替えができるようにする

最後のはうっかり途中までソースを書いてしまったw

「ボタンを押すと上がっていく」程度のトイヘリコプター(「空飛ぶドラえもん」など)に紐つけて飛ばすってのが私のヘボ技術力と予算と鳩への脅威という点で良さげだったのですが、ちょうど良いトイヘリが見つからず。

というわけで、続きます。

2018年10月15日
久しぶりに糞が落ちていました。糞を片付けてからその正面にPIRセンサーライトを1つ追加しました。なにもしないと糞を発見した後はエスカレートする一方(産卵期が終わると収束)なのですが、さて今回は防げるかどうか。

2018年10月30日
糞が落ちていました。ので、自作のPIRセンサーライト(2個のRGB LEDを様々なパターンで点滅させまくる)を追加しました。

2018年11月5日
ここまでPIRのGND浮き、風による誤検知、風邪寝込みなどありましたが特に糞はなし。ですが今朝方2個小さな糞が落ちているのを見つけました。産卵期特有の茶色いものですが、このまま悪化しないことを祈ります…。ただ、これまでの被害パターンと比べれば、格段に糞は少ないです。設置前は写真をここに貼れないレベルでしたので…。

2018年11月9日
ごく小さな糞が2個。

2018年8月22日水曜日

ESP-IDF 3.2で一度WiFi接続に失敗すると二度と接続できない

という現象が出てしまい、頭を抱えてました。
  • v3.2で一度WiFi接続に失敗するとそのボードは二度と WiFiに接続できない。ただし、一度3.0で接続した直後は正しいStationには接続できる。
  • v3.0ではこの現象はでない
  • v3.2でもごく単純なアプリでは出ないが、複数threadにまたがって処理するような規模のアプリで出る。
というWiFiマイコンESP32にとっては致命的な現象。そのSSIDが確かに存在しているのにエラーとして「WL_NO_SSID_AVAIL」が返ってくる、というのが特徴です。

ArdunoをESP-IDFのコンポーネントとして使っていて、WiFi接続にはArduinoのWiFiクラスを使っている、というのが影響しているのでしょうか。

結果として、以下のコードで解決しました。失敗したらesp_wifi_restore()を実行する、だけです。

ググって、同様のエラーにハマっている人がいましたが、どうも解決できていないようでしたので、記事にまとめました。I'm sorry this message is in Japanese, but I hope my sample code below may help you!

2018年8月2日木曜日

なんちゃって冷やし中華

重曹入れたお湯でパスタ茹でると中華麺っぽくなる。

ならば、冷やし中華にもなるんではないか?と思って研究してみました。

  1. お湯一リットルに塩10gと重曹10gをいれて、パスタをゆでる。細めのパスタはアルデンテ+1分、太めのものは+2-3分。
  2. ザルにあげてよく水洗いする。手で揉み洗いする感じ。粗熱をとったあと氷水で締めると尚良
  3. ザルで水を切る。大事なのは、手のひらでザルにぎゅううう、と押し付けて、水を絞り出すこと。すべての冷たい麺はこれで味がぼやけなくなります。
  4. 冷やし中華たれやバンバンジーたれなどで適当に味をつけて食う

結果、ちょっと沖縄ソバにも似たプツプツした歯ごたえの麺になります。

なお、普通冷製のパスタは細い麺を使いますが、重曹でゆでると太いのでも大丈夫。先祖返りっぽいですが、ダイスカットのトマトと刻んだバジルか青じそもしくは青じそ味のドレッシングなどかけても夏の昼食として美味しゅうございます。

2018年7月16日月曜日

USBケーブル直結ジャンパーワイヤ



何を作っていいか思いつかない。そんなときに一本作っておくと便利なケーブルがこちらです。

安いUSBケーブルをぶった切りの電源線にオスのジャンパーを圧着し熱収縮チューブとカプトンで覆っただけのものです。

USBからブレッドボードに電源を供給したいとき、とても楽に使えます。

なお、使うときには先にブレッドボード側に挿しておいてから、USBハブなどに接続すること。ショートさせると大変なことになるので。

2018年7月13日金曜日

超音波カッター入手

厚いダンボールにほとんど力を入れないでスーッと刃が入っていく

Kickstarterと私の相性が非常に悪いことは一部で有名ですが、珍しくほぼオンタイムでブツが届きました。

さっそく開封して使ってみたら…いやーダンボールがトコロテンみたいに切れます! 普通のデザインナイフでコピー用紙を切るよりも手応えがない。手応えなさすぎてかえって難しいレベルです。ケーブルが結構太くて存在感があるので、取り回しを気にしながらかっちりホールドするのは慣れが必要かもしれないです。

ただ、プラスチックに関しては、スッと刃が入ったり、まったく動かなくなってしまったりで、少し慣れが必要な感じです。とりあえずフル充電して、練習しますわ。

以下開封写真。

おまけの防刃グローブ付き

開封のワクワク感は異常www


中身。あれ?

welcome back to Japan !!

こちらこそ。 

2018年5月18日金曜日

C基板用アクリル板


秋月のユニバーサル基板はサイズごとに名前がついてシリーズ化されてます。

そのうち、C基板はサイズが手頃なので、よく使います。少し前に基板にフィットするサイズのアクリル板が発売されていたので、使ってみました。

バラックなのに、いい感じに見えますw



これは空気質(TVOC:総揮発性有機化合物)とCO2濃度センサーのCCS811と0.96インチOLEDをESP32 Dev Kitで制御しているものです。友達に頼まれて作りました。

CO2、締め切って眠り、起床一番での数値は4000ppmを越えていました。あまり風がないせいか換気してもせいぜい1000ppm程度。屋外に出ても同程度でした。その後風向きが変わって大気レベルに近い450ppmまで下がりました。

前にも書きましたけど…換気は大事っすね…。

あと、当たり前ですがガス排気筒の近くは恐ろしい値になりますw

2018年5月13日日曜日

LTEモジュールでえらい目に会った



■トラブル発生■

「SIM7500JE-B2BというLTEモジュールをマイコンと接続する基板作って」という依頼を受けて試作したのですが…いやー苦労しました。

触ったことがないモジュールなので、仕様書の推奨回路の通りで作ってみたのですが…動きません。Power Key信号を送ると起動するんですが、シリアルに"AT\r\n"を送ってもOKが帰ってきません。

SIM7500JEのロジック回路は1.8V、マイコンは5Vなのでレベルシフタが必要です。レベルシフタにはTIのTXB0108RGYRが推奨されていたので、5Vでも対応可能なことを確認した上で使用しました。

信号を見ると、SIM7500JEからのLOW出力が0.4Vぐらいあります。Vthとしては微妙ってか、TXB0108RGYR的にはNG。仕様書には入力側のVL/VHは書いてあるんですが、出力については書いてないんですよね…。

■対策1-トランジスタレベルシフト回路■

結局、SIM7500JEからの出力には、昔からあるトランジスタ1個の非反転レベルシフト回路で処理しました。Arduinoで動作確認OK。

…まぁ、これで終われば半日仕事だったんですが、この後、ちょっと特殊なマイコンを使ったら動作せず。

■対策2-トランジスタとインバーター■

結局、昔からあるトランジスタ1個の反転型レベルシフト回路で1.8 → 5.0vに変換してから、インバーターで反転しなおして、Arduinoでも特殊マイコンでもOKになりました。作業時間合計11時間…バイトなので残業代でませんw

■教訓■

  1. 仕様書にVL, VHなどのごく基本的な資料すら乗っていないチップは使わない。
  2. 推奨回路など寸毫たりとも信じてはならない。そもそも双方向のレベルシフト回路いらねえじゃん、って話。
  3. 「テストポイントを用意しておくかな…でも、こんな基本的な信号で問題は出ないだろう」という判断は甘い。常に甘い。試作は全ラインを引っ張り出すぐらいの勢いが必要。でないと以下のような苦労をします(笑)。

■作業風景■

プリント基板のTxラインをUSB顕微鏡で見ながらデザインナイフでカットして、同じく顕微鏡を見ながら0.5mmピッチのコネクタからスズメッキ線で引き出しました。USB顕微鏡を買ったばかりの頃に試してみたらぜんぜんうまく出来なくて諦めていたのですが、最近背に腹は代えられぬ事態が多く、使っていたら馴れてきました。

やっぱり人間必要に迫られると適応するものです。

コツは、
  1. USB顕微鏡だと立体感がなくて上下方向の動きはよくわからないので…まず裸眼で基板近くまでコテ先やカッターを移動し、それから拡大された画面を見ながら作業する。
  2. USB顕微鏡が動かないように机にしっかり固定する
  3. 顕微鏡のステージに小指を置いて作業する
って感じでしょうか。0603(mm)のチップコンデンサなどで練習するとよろしいです。

また、写真のようなハンダ付けでは、
  1. コテがあたったら溶けてしまいそうな部品にカプトンテープを貼って保護する。その際、テープをピッタリと密着させるのではなく、熱が伝わらないように隙間を開けつつ何枚か貼ること。カプトンテープは熱伝導率が高いのでぴったり貼ると中の物を保護できません。
  2. マスキングテープで誤差0.5mmぐらいの位置にスズメッキ線を仮止めする。基板のパターンとマスクに段差があるので、この段階でピッタリの位置に置くのは難しいです。なので、あくまで仮止め。 
  3. USB顕微鏡をみながらピンセットで正しい位置に完全に合わせてから、マスキングテープをしっかり貼る。最後の0.1mm以下の調整は、スズメッキ線に直接さわるよりスズメッキ線の横からマスキングテープを押さえて調整する方が良いです。 
  4. USB顕微鏡をみながらハンダ付け箇所にクリームハンダを塗る。普段使っているシリンジだと針が太い/細い針だとクリームが出てこないので、マイナスのマイクロドライバーの先にちょこっとつけてから、左にドライバー、右手にピンセットを持って、蟹が食事をするような気分で目的の箇所にハンダを置きます。 
  5. あとはハンダゴテを目的の箇所に当てるだけ 
です。

【追記】カプトンテープはぴったり貼らないでふわっと隙間をもたせて何枚か貼ると良いとのアドバイスをいただき、記事に反映させました。ご教示いただきありがとうございますm(_ _)m【追記終わり】

島津とかモノタロウの立体顕微鏡試してみたいんですが、お試しで買って失敗したらかなり辛いお値段。私が買えるような安いやつはレンタルなんてやってないですし。お友達の歯科技工士さんは「工場落ちのニコンの中古最高」って言ってました。

うーん。でも買うんだろうなぁ…きっと…。

2018年5月11日金曜日

小手先クリーナーを掃除した衝撃映像がこちらです



4年分ぐらいでしょうか。こういう鉛を再利用してくれるところはないだろか。

でも純度低いしなぁ…。

ESP32 LEDCのちょっとめんどくさい話


ledcはESP32のLED用高精度PWM機能です。通常のPWMだけでなく、ledc_set_fade_with_timeとledc_fade_startを使えば自動的に指定秒数でfadeしてくれて大変便利。

使い方はだいたいこんな感じです。



なのですが、逆論理のLED(HIGHで消灯、LOWで点灯する回路)でちょっとハマりました。

通常消灯は
    ledc_set_duty(ledc_channel[ch].speed_mode, ledc_channel[ch].channel, 0);
    ledc_update_duty(ledc_channel[ch].speed_mode, ledc_channel[ch].channel);
で良いのですが、逆なので、
    ledc_set_duty(ledc_channel[ch].speed_mode, ledc_channel[ch].channel, 1023);
    ledc_update_duty(ledc_channel[ch].speed_mode, ledc_channel[ch].channel);
と書いてみたらほんのり点灯してます。細い細いパルスが出てるのですね。

1023を1024に書き換えたら治りました。

じゃあ、ってんで、fadeを
    ledc_set_fade_with_time(ledc_channel[ch].speed_mode,
                                ledc_channel[ch].channel, 1024, BlinkDuration);
    ledc_fade_start(ledc_channel[ch].speed_mode,
                                ledc_channel[ch].channel, LEDC_FADE_NO_WAIT);
にしてみたら…StackOverflowくらいましたw 【追記2018年9月7日:esp-idf 3.2では治っています。1024でもエラーにならずきっちり消灯します!】

しょうがないので、fadeは1023を使いましたけども…細いパルスが残っているのか完全には消えてくれません。演出で処理しますけども…やぁねぇ。

写真は、Kickstarterで入手したハンダ付け作業治具PCBite 2.0を使って基板を空中に浮かせている図。さすがに製品を晒すわけにはいかないのでダミーです。ケースなしでテストしているとショートの危険性があるけど、テープで止めたり剥がしたりするのも煩雑…ってんで、基板の端をバネ付きのクリップで挟んで磁石で灰皿に張り付いています。とても便利です。

クリップだけ追加注文しておけばよかったなぁ。SwitchScienceさんで扱ってくれないからし。

2018年5月9日水曜日

空気質+CO2センサー CCS811

空気質センサーとOLEDをESP32に接続し、Ambientで可視化しました。

Strawberry LinuxさんのCCS811モジュールとAdafruitさんのライブラリで何事もなく動作します。Adafruitさん、今度買うからね(AdaとSparkfunさんには購入ノルマを設定して時々お布施しています)。

ただ、ハマりポイントがいくつか。
  1. 電源、I2Cの他にReset(VDDへ)とWake(GNDへ)も接続しよう
  2. 基板裏のアドレス選択ジャンパをハンダ付けしよう(0 : 0x5A)
  3. I2CはGPIO21(SDA)とGPIO22(SCL)
これでサンプルコードは動きます。

さらに、OLEDに値を表示するようにしてみました。OLEDライブラリもCCS811ライブラリも初期化でWire.begin()呼んだりするので、初期化の順番が違うとCCS811がヘソを曲げます。この複数のライブラリが勝手にWire.begin呼び出す問題、なんとかならんですかね。どうせWireはオブジェクト一個なので、ライブラリを使うユーザが自主的に初期化すべし、の方がありがたいのですが…初心者保護でしょうがないのかなぁ…。

で、とりあえずCCS811から読んだ値をOLEDに表示できるようになった…と思ったら、途中で動作が不安定に。CCS811から値が返らなくなり、電源を切るかCCS811のRESET端子を一度GNDに落とさないと動いてくれません。I2Cの処理が干渉しているようで、それぞれの通信後にdelayを入れたら安定して動作するようになりました。あるある。

ついでにAmbientにデータを上げるようにしました。Ambientホント楽。

化学物質過敏症で困っている方に貸し出してしまったので写真はありません。いやー、歩きながらディスプレイ見ていると、時々すっごい値が出てきますね。ちょっと窓を閉めているとあっという間に1000ppmに達します。近くに手を置いただけで600ppmになったり。人間がどれだけ二酸化炭素を噴出しているかがわかります。

TVOCの最高値はとある喫煙室で、6000ppbを記録しました。おおおおお。

ってことで、ソースです。


2018年5月4日金曜日

安いお絵かきタブレットと思いきや

ebayで2000円ぐらいでdrawing tabletが出てまして。


2000円なら、最悪落書き用にでも使えりゃいいや、って買ってみたんすよ。


…LEDライトボックスでした。上の広告写真だとわからないけど、こっち(下)をよく見ると紙をクリップで止めているよね。あははははははははは。


2018年4月29日日曜日

0603のMLCCを手ハンダ

56歳会社員です。秋月で0603(mm)のMLCCが発売されたので買ってみました。


いやー…ホコリですね。顆粒ダシより細かいっす。

普段MLCCを手ハンダ付けする時には逆作用ピンセットを使うのですが、先端太すぎてまったくつかめません。最初の1個はピンセットで掴みそこねて見事に飛ばしてしまいました。さすがのDUMONTでもダメ。安いHOZANの精密ピンセットをルーターで研磨してかみ合わせを調整してから使いました。いやー、ルーターはいい買い物でした。今まで研いだりするのは大の苦手だったんですが、持っているだけで水平垂直に研磨できるので、少し荒い道具を使いやすいように仕上げることもできます。


基板は手元にあったaitendoの0.6mmピッチSOIC用。例によってサンハヤトのクリームはんだを使います。0.6mm間隔で2つクリームを盛るなんてのは無理なので、設置場所の両端を覆うように1mmぐらいのハンダ山を作りました。しまった写真取り忘れた。

ルーペはヘッドルーペではなくアームルーペ(TERASAKI)を使いました。ハンダゴテはHAKKO FX-100です。

基板をマスキングテープ(3M)で固定してから、左手にピンセット、右手にハンダゴテ。ルーペでもほぼ見えませんw MLCCをクリーム山の中央付近で保持します。コテを基板に当て、少しずつクリームに近づけて行って、クリームが溶けたところでコテを離す。これを4方向から繰り返しました。

最後にUSB顕微鏡下ではみだしたところを修正したのですが…コテ太いw



洗浄したのがこちらです。容量を測定したら70nF程度(MLCCは直流では容量が減ります…秋月のWeb参照)で、損傷せずショートもせずに取り付けできました。


電子工作に復帰して初めて表面実装部品(2012)をいじった時は「わしら年寄りはどうすればええんじゃ…」と思ったもんですが、最近は「2012でけーw」とか言ってるんですから、人間は慣れるもんですね(しみじみ)。

2018年4月22日日曜日

セミナーの進行を止める老人、それが私

Fusion 360のセミナーに参加しました。良いセミナーでした(もう1日あるけど)。Fusion 360の操作感や3Dモデルを作っていく流れを習得できるのでみなさんもぜひ。操作も大事だけど流れはもっと大切です。

セミナーに参加するのは久しぶり。

こういう技術系ハンズオンセミナーでは、まず講師が操作をしながら説明をして、それから「では、一緒に操作してみましょう」という流れになる。

ただ、余裕をもって習いたいので、私は最初の説明を聞きながら操作をして「一緒に操作をしてみましょう」のところではメモなんかを書いていたもんでした。若い頃は。

ところが、今回、最初の操作で躓いた。自分が「ごく初歩的な操作で躓いて、セミナーの進行を止める年寄り」になってしまった。ショック。

何でだろうと思ったら、昔は操作しながらでも講師の説明が頭に入ってきたんですが、今は全然耳に入らない。「聞きながら操作」しているつもりがそうではなかった。

それに気づいてからは、ちゃんと講師の説明をガン見してから自分の操作をすることにして、なんとかついていけるようになったんですが(いや、3D CADのモード切り替えや選択方法の違いなどで戸惑うことはありましたが)…自分の老化にビックリです。

で、講師の説明を聞きながら周りを見ていると…毎回進行を止める人は、やっぱり講師の説明を見てないですね。たぶん御本人は、何で自分が操作をわからないのか、わかっていないんだと思います。

かつて自然にできたことができなくなっている、それは良くあることなんですが…できなくなっていることに気づかない、というのは怖いですね。

----

セミナー会場は南千住。遠いです。写真がないと寂しいので、ランチ写真貼っておきます。

ランチってか「やよい軒」ですけどね。かつてご飯を2杯3杯とおかわりしたもんですが、今は1杯でお腹いっぱい。


あと11:22に撮影した写真がこちらです。これで何度目だ。


2018年4月13日金曜日

ESP32+Mongoos OS、入れてみました。

まず、ESP-IDFが正しくインストールされている必要があります。

で、ホストMac/PCに環境を構築します。macの場合はターミナルに3行コピペするだけ。1分もかからず終了し、ブラウザにmongoose os環境が立ち上がります。

mongoose osは、ESP上で動くOS(FreeRTOSベース?)、JavaScriptランタイム、フラームワーク、それらと連携するMac/PC上で動くホストツールなどで構成されています。フレームワークはAWS, Google IoTなど各社クラウドサービスに対応していて、お手軽に使えます。

サーバとなっているツール部分がESPと通信しながら動いているので、ブラウザIDEなのにスタンドアローンアプリ形式のIDEと同様に使えます。例えば、こんなダイアログが出てくるので、ESP32 Dev-CモジュールをUSBに接続するとシリアルポートが選べます。選んだらSelectボタン。


次にプラットフォームと書き込むアプリを選んでFlash。書き込みが自動で始まります。書き込みが終わるとデモアプリ「demo-js」が起動して、じわじわとメッセージを流してきます。


このあとSet WiFiで使用場所でのSSIDとPasswordを設定してSetボタンを押せば接続完了。

楽だなー。ESP32用の開発ツールとして一番よく出来ているかも。

JavaScriptとC/C++も簡単に連携できるし、しばらく遊んでみます。ずっと保留したままになっているニキシー管時計、これで作ってみようかしらw

ESP32 + VisualStudio Code + PlatformIO

マカーだけどいろいろあってVisualStudio Codeを入れてESP-IDFを動かすことに。参考にしたのはこの辺。ありがとうございます。
Install the IDE PlatformIO extension for Visual Studio Code

Windows版VSCだとArudino IDEプラグインが使えるんですが、このプラグインはMacには出ていないようなので、PlatformIOを使います。AtomやSublimeでもPlatformIOは使えるんですが、どうもしっくりこない。

まずVisualStudio Code、Mac版のインストール。ダウンロードして解凍すると.appができるので /Application へコピーし、ダブルクリック。

PlatformIOのインストールは、表示>拡張機能メニューから platformio を探して選びます。


試しにプロジェクトを作ってみます。PlatformIOのHome(画面下コマンド行の家アイコン)をクリックし、New Projectをクリックします。

プロジェクト名を入力し、BoardのところでESP32と入力すると候補が出てきますので、無難にEspressif ESP32 Dev Moduleを選びます。FrameworkはESP-IDFを選び、Finishをクリックすると空のプロジェクトができます。


すると勝手に依存関係が解消されていきセットアップが完了します。PlatformIO偉い。

srcを右クリックして「新しいファイル」を選び、main.cを作ります。適当なコードを入力します。とりあえずesp-idfのexamplesにあるhello_world/main/hello_world_main.cの内容をコピーしました。

シリアルモニタのポートとボーレート設定は、platformio.iniに
monitor_port = /dev/cu.SLAB_USBtoUART
monitor_baud = 115200
を追加。ポートは設定しなくても聞いてきてくれるけど、まぁこっちの方が楽かと。

では、ESP32をUSBに接続し、ウィンドウ最下行の「→」ボタンでbuild&uploadします。最初のコンパイルが長い遅いのはお約束。なお、VSCを再起動する度に再コンパイルする仕様ですが、修正してコンパイルした時は対象ファイルだけコンパイルされます。

コンパイルが終わり、ESP32へのアップロードが始まります。

終わったらウィンドウ最下行の「Monitorアイコン(横向きのACプラグ)」をクリックするとmake monitorが起動します。

なお、シリアルポートを専有するので再度uploadするときにはmonitorを止めなければいけませんが、uploadボタンをクリックすると「monitorタスク止めますか?」と聞いてくれるので安心です。

Windowsは大嫌いですが、MSの開発ツールは嫌いではありません。VSCも良く出来ています。少なくともEclipseよりもサクサク動いてくれる、ような気がしますw 

少なくともArduino IDEよりもかなりマシに使えます(※個人の感想です)。

ただ、ESP-IDFとビルド方法が異なるので、ESP-IDFで作った既存プロジェクトを開くことはできません。開こうとするとplatformio.iniが無いって言われるので適当にコピーして入れて開いても、VSCからはビルドできません。

PlatformIOで作ったらプロジェクトならビルドできますが、標準ツールと違うビルドシステムにするのは少し抵抗があります。

とりあえず、VSC上でターミナルを開き、そこで make flash を実行すれば、ビルドしてくれるんですけども…違う…そこじゃない感が凄いです。

まぁサクサクで落ちないIDEってだけでも十分っす。あとArduinoプロジェクトに関しては、Arduino IDEよりぜんぜん良いですし。

2018年4月6日金曜日

動物の活動状態を記録する@ココナラ

動いた痕跡

うわわわわ

農業試験場の研究員の方からCoconalaにて「条件を変えたときに害虫の行動にどのような影響があるかを記録したい」というご相談をいただきました。

当初のご相談は「(フォトインタラプタを使用して)通路を遮る動きをカウントしたい」ということでしたが、ラズパイを用いた画像による動体検知を提案しました。

赤外線LED、IR Picamera、Raspberry Piだけという大変シンプルな構成です。起動すると指定秒数ごとに差分を求め、全画素のうち何%が変化したかを標準出力に書き出します。オプションとしてウィンドウに画像を表示するか画像ファイルを出力するか、を指定できるようにしました。

プログラムはPython + OpenCVで書きました。当初、よくある動体検知としてBackgroundSubtractorMOGとapplyを使うタイプで試していただいたのですが、結果は少し意図と違っていました。
虫ではなく坊主頭中年体型のわたくし
ということで「背景からどのぐらい変化したか」ではなく単純に前フレームと差分を求めるプログラムに変更しました。とはいえPython不慣れ+OpenCV初心者なので、こちらのコードを参考にさせていただきました。ありがとうございます。

冒頭の画像が演算結果です。害虫がケースの中で動いているところを捉えた画像と飼育環境の写真です。

依頼者の方からは、新しい知見も含めて期待以上の結果が得られたとのご報告をいただきました。日本の農業のために微力ながらお手伝いができて何よりです。

今回のように「こういう観察がしたい」というテーマがあればご相談ください。相談だけなら500円、実装についても公的な研究機関からの公益性のあるテーマであればできるだけお力になりたいと思っています。お気軽にどうぞ。

一応ソースです…間隔指定ではなくwait指定だ、とか、いろいろ突っ込みどころはあると思いますがpython初心者ということでご寛恕いただきたく存じますm(_ _)m

【追記4月11日】
公開当初のソースは背景との差分検知をするものでした。
フレーム間差分に書き換えました。