音の鳴る名刺基板

この記事ははJLCPCBの提供でお送りします。

またJLCPCBのブログとほぼ同じ内容です。

JLCPCBとは

jlcpcb.jp (↑こちらは日本語版のログインページで、お得なクーポンも配布されています。)

JLCPCBとは、プリント基板製造などで有名な香港の企業です。

日本からでもWebページでポチポチするだけでKiCADなどで作成した基板データの製造を依頼できます。

値段もかなりお手頃で、ホビー電子工作ユーザーの間では広く利用されています。

これは何?

基板を使った名刺を作るという活動があり、そういった基板を「名刺基板」と呼んだりします。

ということで、今回はinajobも名刺基板を作ってみようということで、挑戦してみたという話です。

要件定義としては、折角なので何か機能を持たせたいなと言うことで、ピアノのようなスイッチとボリューム・スピーカーなどを搭載し、「音が鳴る名刺基板」ということにしようと決めました。

設計

テーマは決まりましたが、細かいパーツに何を採用するかを決めていく必要があります。

色々考えて以下の構成に決定しました

  • メインICはCH32V003
    • 安いので、名刺基板に向いている?
  • 書き込み用USB端子(Type-C) + CH340G
  • 電源は単4電池2本
    • 外部電源なしで動くようにしたい
    • CH32V003は2.7V-5.5Vで動くので乾電池2本でそのまま動きます
  • オーディオアンプNS8002+ オーディオジャック + 表面実装スピーカー + ボリューム
  • 部品は片面にのみ配置
    • PCBAを見越して安く済むように
  • 12個の演奏用スイッチ
  • 12個のLED
  • 初回書き込み用のソケット

色々考えているとどんどん要件が膨らんで大変でしたが、ぎっしり部品が並んだ、見た目にも「それっぽい」基板になりそうです。

CH32V003のUSB経由での書き込みの仕組みやオーディオ周りは、ここ最近の製作で得た知識を応用することで、設計を流用しています。こういうことの積み重ねでできることがどんどん増えていくのは面白いですね。

スイッチののスキャンとLEDの点灯

12個のスイッチのスキャンと、12個のLED表示の制御を7個のGPIOで行おうと以下のような回路を設計しました(これは、あまり良い方法でないことがわかりました)

基板設計

片面に部品を寄せたので、表面はかなりごちゃごちゃした見た目になっていますが、個人的には名刺基板として「それっぽく」なっているので、良いなと思っています。

一応、表面に「Hello! inajob」と名前の紹介っぽいものが入っているのと、裏面にXのURLが記載してあるところが「名刺」的要素です。

JLCPCBに発注

今回も発注はJLCPCBです。今回の基板は青色にしてみました。

名刺基板のサイズは10cm×10cm以内なので、非常に安く作ることが出来ます(5枚で$2 + 送料)

jlcpcb.jp (↑こちらは日本語版のログインページで、お得なクーポンも配布されています。)

実装

さて、今回も・・・トラブルがありました!!!(毎回これですね・・)

基板設計で必要な配線が出来ていない

さて、以下の画像をみれば、何が起きたか、わかる人にはわかるのですが・・

論理回路図で接続している配線が、基板上で配線できていません(白い斜めの線がそれを示しています)

今回の配線はFreeroutingというソフトを使い、自動配線したので通常このようなことは起こらないのですが、おそらく発注に向けて作業しているどこかで、操作ミスをして自動配線で作成された回路の一部を削除してしまったのでは、と考えています。

この手のミスは、以下のように見た目でもわかりますし、発注前にKiCADの「デザインルールチェッカー」を実行すればすぐに気付くことが出来るので、気づけなかったことが悔しいです。

この問題については、必要な配線を導線でジャンパすることで対応しました。(格好悪い・・)

スイッチスキャンとダイオード点灯回路に課題あり

上で紹介したこの回路。まぁ見る人が見ればすぐ気づく問題があります。

それは「スイッチを押しているときに対応するLEDが消灯してしまう」という問題です。

スイッチを押していないときは、ダイナミック点灯ですべてのLEDを個別に制御できますし、押されたスイッチもそれぞれ個別に認識できますが。

スイッチが押されているときに、そのスイッチと同じピンに接続されているLEDを点灯することが出来ません。

まぁ、LEDで何を表示したいかによりますが、スイッチから手を離せば意図した表示になるので、今回は一旦「こういう仕様」ということでこの問題は無視することにしました。

PD1のピンがそのままGPIOとして利用できない

上のスイッチとLEDの回路図でDIOとラベルの付いた配線がありますが、これはPD1と名の付いたGPIOです。

CH32V003は、初期設定ではこのピンをGPIOとして利用することが出来ません。

一応設定をすることでGPIOとして利用できるようにはなるようなのですが、そうすると書き込み機で書き込めなくなってしまうようで、ちょっと不便です。

また、今回利用したライブラリであるch32v003funで、このピンの役割を変更する方法がぱっとわからなかったということもあり、この問題のために基板の回路に修正が必要でした。

CH32V003J4M6 PD1 SWIO ピン共用問題 シリアル出力の実装とFlash eraseでの解決方法 - 宅配おもちゃ病院 %

今回はPD4が何も使わずに空いていたので、配線をカットしてPD1を使うのをやめてPD4を使うように変更することでこの問題を回避しました。

そのほか細かい気づき

  • 基板厚をもう少し薄くすればよかった
    • 基板厚はいつもと同じ1.6mmにしましたが、「名刺基板」というからにはもう少し薄くしても良かったかなと思いました
  • ICの利用していないピンを引き出しておけばよかった
    • 上で記載したPD4を含めいくつかのピンが未使用なのですが、このピンを引き出しておくと、この名刺基板を開発ボードとして活用することもできると感じました
  • スルーホールUSB-C端子は基板厚が1.6mmでもはんだ付けできる
    • 以前 UARTで書き込みできるCH32V003開発ボードを作った - inajob's blog で1mm厚ではんだ付けできることを確認しましたが、1.6mmでも問題なくはんだ付けできました。足が裏面に飛び出さないので、ちゃんと導通するか不安でしたが、表面張力ではんだがスルーホール穴に吸い込まれるため、問題なく導通しました。

ソフトウェア開発

おなじみの GitHub - cnlohr/ch32v003fun: Open source minimal stack for the ch32 line of WCH processors, including the ch32v003, a 10¢ 48 MHz RISC-V Microcontroller - as well as many other chips within the ch32v/x line. を使って開発しました。

以前以下の2つの記事で使ったプログラムを組み合わせることで、一応鍵盤を押すと音が鳴るという動作を実現できました。

inajob.hatenablog.jp

inajob.hatenablog.jp

動作デモ

ソフトウェアを作りこめば和音も鳴らせるはずですが、今のところ単音のみ実験しています。

まとめ

とりあえず当初の目的であった「名刺基板」を設計し、それっぽい動作が出来るところまでこぎつけることが出来ました。

CH32V003を使った基板も何枚か作って、知見がたまってきてスムーズに設計ができるようになってきていると感じました。

不具合もたくさんあったので、もう一度似たようなものを作ってみたいです。