2019年3月9日土曜日

受託開発もやってます

宣伝です。ココナラハンドメイドなどでハードウェアの受託開発をやっています。下記はいずれもブログ公開を許可していただいたもの。TwitterやFacebookでご依頼いただいてAmazonギフトやPayPalで決済することが多かったのですが、今年は少しココナラハンドメイドの実績を増やしていこうという魂胆でございます。

以下2018年の主な実績です。公開の許可をいただいた関係で何故かArduino nanoが多くなりましたが、ESP32、LPC1114やRaspberry pi用拡張ボードも同数あります。

これはATMega328とSakuraのIoTモジュールを搭載した基板です。0.4mmピッチのSIMモジュールコネクタが難物でしたが、ステンシルプリンターとリフロー炉を導入したことで歩留まりが一気に上る契機になりました(導入後リフローおよび手ハンダによる不良はQFNやVSONパッケージも含めてゼロです)。現在、ESP32-WROVER-IとSakura IoTモジュールを簡単に使える基板を製作中です。

これは、スイッチ2個の状態に応じてランプを表示させる装置のメイン部分。ご覧の通り、Arduino nanoの互換機で作っています。

またUnoです。マイクからの入力をFFT処理してノイズ部分をカットした後、エネルギーレベルが一定以上を越えたらリレーをONにして電力機器を動かすデバイスです。インジケーターは赤緑LEDで3色表示、音量の閾値とON継続時間はロータリーDIP SWでデジタル指定する方式です。

ラズパイを使った、工場ライン用ファームウェア書き込みの試作機です。ESP32の基板を接続してから緑ボタンを押すと自動的にpythonスクリプトで書き込みが始まり、終わると簡単な検査を行って正常だとグリーンランプが点灯します。ラズパイはSD Card保護のためRead Only + RAM DISK化してあります。これを原型としたコピー機が中国・深圳にて実際の生産ライン(1万台規模)で使用されました。なお、マステで説明書いてますけど…超特急のご依頼だったので(遠い目

DFPlayer + Arduino unoを使った音源デバイスです。センサーで一定の条件になると録音した音声が流れます。DFPlayer、間違えて100個注文してしまったので、大量に余ってます。お仕事ください(必死)。ちなみに余ったやつを使ってカラスが猛禽類に襲われている音声を録音してときどき流すようにしたらカラスがまったく来なくなりました。カラスを撃退するためにはタイマーで同じ音声を適当に流すのではなく、複数仕込んでおきセンサーに反応させて流すと効果が高いようです。

最後に、サラリーマン業で作ったものです。Hamicベアって商品名です。私はプロトタイプ〜製品版ファームウェア担当者の一人で、ハードウェアについてもちょこっと口出ししました。

単価は1万円〜10万円です。以下ページからダイレクトメッセージをお送り下さい。相談は無料ですので、どぞお気軽に。

RX8900、時計メーカーのICすげえ

紅い基板がRX8900

RX8900は、DXCXO内蔵高精度リアルタイムクロックです。温度補正され、出荷時に周波数調整されているのでトリムなしに高精度(公称月差9秒)で働くRTC ICです。

バッテリバックアップ性能を試してみました。

RX8900は、Vbat端子が独立していて電気二重層キャパシタの場合抵抗を1本つけるだけで充電・バックアップが可能になります。リチウム一次電池などの場合には充電阻止のダイオードが必要です。

買い置きの1Fの電気二重層と抵抗を直列にして、Vbatに接続し、時刻をセットしたあとVccを切ってそのまま放置します。キャパシタの電圧を見てると直後に2.4Vまで下がってバックアップモードに入り、その後はごくゆっくり電圧が下がっていきます。

72時間後の電圧は1.656Vでした。最低電圧1.6Vとのことなので、まだ余裕です。

マイコンを接続して時刻を読み出したところ…見事に経時されていました。いやー…すごいですね。いま、製品としてデジタル時計を作っているところなので、しっかり働いてもらおうと思います。

追記:96時間での計測を忘れて104時間後に計測したところ1.44Vでした。もうダメかと思ったのですが、ちゃんと正確にときを刻んでいました。さすが、墜落した飛行機が海底から引き上げられた際にも動いていたというSEIKOの子孫ですね!



2019年3月1日金曜日

IO12に気をつけて!(ESP32への書き込みが出来ない件)

おまえーがー 生まれたーときー …きれいな基板だったんだぜ

初期の通信はネゴシエーションはできるのですが、その後以下のエラーがでます。

esptool.py v2.6-beta1
Serial port /dev/cu.usbserial-DN0483G4
Connecting.....
Chip is ESP32D0WDQ5 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, BLK3 partially reserved, Coding Scheme 3/4
MAC: 30:ae:a4:c6:88:50
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 921600
Changed.
Configuring flash size...
Warning: Could not auto-detect Flash size (FlashID=0xffffff, SizeID=0xff), defaulting to 4MB
Compressed 8192 bytes to 47...
A fatal error occurred: Timed out waiting for packet content

結果を先に書くと、IO12をプルアップしていたのが原因でした。プルアップしているとSPI Flashが1.8Vモードになってしまうので、書き込みできなくなります。
Cannot Download to ESP-WROVER-KIT

てことで、配線をカットしたら無事動きました…。

ほぼ同じ設計の基板が問題なく動いているので、リフローの不良を疑ってコテを全ピンに当ててみたり、果てはESP32-WROVERを交換してみたりしたのですが…そりゃー動きませんよね。

あとで思い返してみると、上の赤字の行の2つ上にwarningが出ていますが、これはFlashへの書き込みができないからサイズ検出が働いていなかったのでしょう。

いやー…アホでした…いつもは気をつけて使わないようにしているピンですが、GPIOを使い切ってしまって、その後、布線の都合で大スワップ大会になってしまい、いつの間にか使っていました…。

ESP32チップの交換

ソフト屋なのかハード屋なのかはっきりしろ!な机
カプトンテープで軽く周囲をカバーしてからリワークステーションで加熱。プリヒートで150度ぐらいに温めてから280度の温風で溶かします。ESP32-WROVERは私が外した部品のうちで最大級なのですが、風量とか温度にノウハウないと難しいですね…今回は外した部品を再利用しないので壊れても良いんですが…。


外した後は、吸い取り線とハンダゴテでお掃除。この写真でいえば吸い取り線を縦に置いて、一番上のピンの上側にハンダゴテを当てます。溶けるとコテが下に動かせるようになるので次のピンへと順次吸い取っていきます。なお写真でみてGNDが残っていることに気づいてもうちょっと掃除しました。ハンダを吸い取った後はフラックスクリーナーで清掃します。

右上1箇所にだけハンダを盛り、手で左手でチップを抑えながら右手ではんだ付けします。ズレていないことを確認しながら、右下にもはんだ付けします。動かなくなったら、シリンジではんだペーストを塗っていきます。細い針が見つからなかったので、どうも汚いな。


あとは、一番上から下へ、ハンダゴテで1ピン2-4秒ぐらいずつ、溶かし込ませながらゆっくりコテを移動していきます。ちょっとハンダが少なかったので、その時は糸ハンダで補充します。だいたい均等になったら、最後にまた上から下にゆっくりハンダゴテをあてて均一にならします。



均一にといいつつ、GNDはムラが出てしまいますね…。


余談ですが最近ハンドラップ使ってます。フラックスクリーナーを入れてキムワイプで使っているんですが、便利っす。

昭和の補修テクニック

チップ→LED→GNDという流れで設計したのですが、点灯せず。確認したらチップの出力端子がオープンドレインでした。チップ←LED←Vccに変更しないとダメです。



ということでスズメッキ線と抵抗で補修しました。

なお、余っているスズメッキ線は、オシロなどを接続するための延長です(TPつけるのを忘れてた。テヘ)。

最初の試作ということであまり詰め込まないで設計しといてよかった…。

昔はこうやってスズメッキ線で回路作ったなぁ…としみじみする朝でございました。

そうそう、電動式のハンダ吸い取り器を導入して、その圧倒的な威力に震えているところなのですが…LED、抵抗など2端子のチップ抵抗を外すのであれば、吸い取るよりも左にハンダゴテ右手にハンダ吸い取り器を持って、単に両方から加熱して取る方が簡単である…というごく当たり前のことに最近になって気づきました。

なお、この基板、ESP32-WROVERに書き込みが出来ないという問題が生じていて、それで定数変えたりもしたんですが、USBシリアルと通信はできるけどFlashサイズを検出できない等のエラーを出す、という状態です。ESP32-WROVERが不良なのだと思うのですが、リワークで交換するのが面倒なので他に理由がないか、回避する言い訳ができないか考えているところでございます。esptool.py、一応betaは取れたみたいだけど…。

esptool.py v2.6-beta1
Serial port /dev/cu.usbserial-DN0483G4
Connecting.....
Chip is ESP32D0WDQ5 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, BLK3 partially reserved, Coding Scheme 3/4
MAC: 30:ae:a4:c6:88:50
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 921600
Changed.
Configuring flash size...
Warning: Could not auto-detect Flash size (FlashID=0xffffff, SizeID=0xff), defaulting to 4MB
Compressed 8192 bytes to 47...

A fatal error occurred: Timed out waiting for packet content