以下の記事で紹介したJLCPCBですが、今回は王道、基板を発注してみることにします。
※今回もJLCPCBの提供です。(EasyEDAとJLCPCB周りの不具合の話で、提供していただくのも恐縮だったのですが、問題を含めて記事にして良いということで、今回包み隠さず書いています!)
EasyEDAとは?
EasyEDAはブラウザ上で動作する基板CADです。 作成した基板を公開することなどもでき、まぁ雑に言うとKiCAD+GitHubみたいなWebサービスです。
このEasyEDAですが、ちょっとUIを見ていると、編集中の基板をそのままJLCPCBに発注できるボタンがあることに気付きました。
今回は試していませんが、基板で使用する部品リストをLCSCに発注したり、PCBAを依頼するのも簡単にできるようでした。
今回やりたかったこと
EasyEDAでは様々な基板のデータが公開されています。
今回は基板を設計せずに、人の公開したデータをEasyEDAからJLCPCBにぽちっと発注するというのを試してみたかったのです。
これができると、基板づくりに詳しくない人も簡単にマージンを取られず原価で基板を作ることが出来ます。
まぁ、今回の結果は、「そんなに甘くないぞ」というものだったのですが・・・
EasyEDAでよさそうなデータを探す
EasyEDAには様々な基板のデータが公開されていますが、いざ自分で「作ってみよう」という観点で探すと意外と良いものが見つかりません
- 家に、ある程度部品がそろっている
- 表面実装部品の場合はサイズもある程度合っている必要がある
- 部品リストから型番が明らかでない部品もある
- 部品が細かすぎて家で実装するのが難しいものがある
- 仕様がある程度公開されている必要がある
- さすがに回路図だけではわからない
- ファームウェアなども公開してあると良い
とか、色々考えて、みつけたのがこちら!! (注意!このデータで発注するといろいろ問題があります!!)
Gram Pianoについて
これはSparkFunでかつて販売されていたキットのデータをEasyEDAにインポートしたもののようです。
モノとしてはArduinoで作られた静電容量タッチで動作する電子ピアノのような基板です。
部品はスルーホール品ばかりで扱いやすそうで、配線も単純で何かあった際の修復も難しくなさそうです。 一方静電容量タッチの部分はPCB基板ならではのアートワークとなっており、ユニバーサル基板では実現の難しい「発注向け」の基板です。
販売されていたものですが、オープンソース(Creative Commons BY-SA)で基板データが公開されているため、EasyEDAなどで再配布することも問題ないようです。
元となる基板データやファームウェアはこちらにありました
EasyEDAからJLCPCBへの発注
これは非常に簡単でした。
EasyEDAはブラウザで動作する基板CADということで、普通のアプリケーションと同じような操作感です。 WebアプリではあるもののUIはパソコン用のアプリケーションと同じようなつくりになっています。
メニューにOne Click Order PCB/SMT という項目があり、ここをクリックするとちょっとした確認画面を挟んだのちにJLCPCBの注文画面に遷移します。
自分が試したときは、ここでPCBAのオプションが有効になってしまっており、金額が異常に高くなっていましたが、手動でOFFにしました。
内部的にはEasyEDAがガーバーファイルを書き出し、それをJLCPCBに送っているようです。
ここでガーバーファイルを手元にダウンロードして確認することもできます。 (ここで念入りに確認しておけば・・・後述・・)
今回はOCS Expressで送ってもらうことにしました。その他の送料は以下のスクリーンショットを参考にしてみてください。
合わせて、今回利用することになる2MΩの抵抗をAliExpressに注文しました。 それ以外の部品は家の部品箱にありました。
届いた・・が・・
注文してから、10日くらいで基板が届きました。 (DHLを使うともう少し早い気がしますが、今回はAliExpressで注文した部品より早く届いても意味がないのでOCSで十分でした)
さて、基板が届きました。が・・・
よくよく基板を見てみると、どうも妙なところがあります・・
一部の部品のフットプリントが元データから消えているようなのです・・
改めてEasyEDAの画面と比べてみると、基板の上の方に位置する部品のいくつかが消えていることが確認できました。
これはJLCPCBが悪いのか・・? と思いこの段になってEasyEDAの生成するガーバーファイルを見てみると・・
なんと! EasyEDAの生成するガーバーファイルにもこの部品は存在しないことが判明しました。
つまり、この問題はEasyEDAに何か問題があって起きており、JLCPCBは、正しく納品したデータで基板を製造していることがわかりました。
この Gram_PianoのデータはもともとEagleというソフトの形式で作られていたようでこれをEasyEDAにインポートする際に何か不具合が起きたのではないかと予想しています。
タチが悪いことに、EasyEDAの画面上はすべての部品が正常に見えており、ガーバーを出力すると特定の部品が出力できないという問題のようで、ワンクリックの簡単さゆえにわからず発注してしまいました。
次回からは、ワンクリックで注文せずにガーバーファイルを一度ダウンロードして目で確認するのが良いと感じました。
ファームウェアの用意
とりあえず間違った基板は何とか直すとして、マイコンにファームウェアを焼きこみ用意する必要があります。
コアとなるマイコンはDIPパッケージのATmega328Pです。 この基板には水晶発振子がないため、fuseを設定し内部発振8MHzにします。
fuseはAVR® Fuse Calculator – The Engbedded Blogで計算しました。 内部発振8MHz、2.7VでBODで、ほかはデフォルト値としました。 (lfuse 0xe2, hfuse 0xd8, efuse 0xfd)
fuseの書き込みには手元にあったft232のbitbangモードを利用しました。
自分は昔から外付けAVRライタ無しでBootloaderを書き込むを参考にしていましたが、かなり情報が古いので、最新のやり方を使うのが良いと思います。
上のページではft232のbitbangモードをサポートした独自ビルドのavrdudeを利用していますが、現在配布されているavrdudeの公式(v7.0)ではこれがサポートされているので、公式のavrdudeを使うことが出来ます。
また上記ページでは独自のGUIツールを使って書き込みしていますが、avrdudeをコマンドラインから使うのであれば、このGUIツールは不要です。
ということで、参考になるのはft232とATmega328Pの接続の配線くらいです。
fuseやArduinoを書き込む方法としては、ほかにもArduinoを書き込み機にする方法や、純正のAVRライターを使う方法などもあります。 (手軽なのはArduinoを書き込み機にする方法だと思います)
一応メモ的にコマンドラインを書いておくと・・(これを間違えるとATmega328Pが普通に動かなくなり、元に戻せなくなることもあるので注意してください)
# COMポート番号などは必要に応じて書き換えてください # fuseの読み出し(はじめは低速じゃないと読めないかも・・) > avrdude -PCOM8 -c diecimila -p m328p -b19200 -U lfuse:r:con:h -U hfuse:r:con:h -U efuse:r:con:h # fuseの書き込み > avrdude -PCOM8 -c diecimila -p m328p -b19200 -U lfuse:w:0xE2:m -U hfuse:w:0xD8:m -U efuse:w:0xFD:m
ArduinoのファームウェアはArduinoCore-avr/ATmegaBOOT_168_atmega328_pro_8MHz.hex at master · arduino/ArduinoCore-avr · GitHubを利用しました。
これはArduino Pro Mini 328 3.3V 8MHz用のものです。
hexファイルの書き込み方はこんな感じ
> avrdude -PCOM8 -c diecimila -p m328p -b19200 -U flash:w:ATmegaBOOT_168_atmega328_pro_8MHz.hex:i
ここまで書き込みをすると、Arduinoとしてシリアル書き込みができるようになるので、ATmega328PのTX, RX, RESETを USBシリアル変換モジュールとつなげて、Arduino用のスケッチを書き込めるようになります。
ファームウェアのソースコードはGram_PianoのGitHubリポジトリにinoファイルがあるので、これをそのまま利用します。 Arduino IDEからコンパイル+書き込みを実行します。
ライブラリとしてCapacitiveSensorをインストールする必要がありました。Arduino IDEのライブラリマネージャから最新の0.5.1をインストールすれば、コンパイルできました。
内部発振の場合シリアル通信が不安定で、書き込みがうまくいかないことがありますが、まぁそういうものなので、何度か挑戦しました。(運が悪いと100%失敗する個体もあると思います)
このあたりの話は、以下の記事に詳しく書きました。意外とこの作業は過去の知識の集大成という感じがあります。
部費の実装と基板の修復
論理回路図や正しい回路図があるので、それを正として基板を修復します。
Gram_Pianoは部品数も少なく、ほとんどがATmega328PのICの足と部品がつながっているだけなので、フットプリントが消えてしまった部品は、ICの足と直接はんだ付けすることにしました。
初めは基板に追加でドリルで穴をあけて、とりあえず部品を固定していたのですが、スルーホール穴ではないのではんだ付けすることが出来ず、あまり意味がないと感じたので途中でやめました。
Gram Pianoの肝である回路として構成されているタッチセンサー部分は消失していなったのが幸いし、比較的簡単に基板を修復できました。
電池の固定用の部品は手元にあったのですが、部品消失の影響で利用できないため、外付けの電池ボックスを使うことにしました。もともと単三電池2本の3V駆動だったのですが、部品を見る限り電池4本の6Vでも動作しそうだったので、手元にちょうどあった単4電池4本用の電池ボックスを使うことにしました。
スピーカーはフットプリントが消失していることに加えて、同じ部品が手元になかったので、適当なスピーカーをICに直接繋げました。
試運転
部品を一通り実装して、電源を入れたら・・・ 何度か試行錯誤があったものの・・(静電容量センサーの1つだけが部品消失の影響を受けており、微妙な調整が必要でした・・)
期待通り動きました!
基板のタッチで操作できるというのは不思議な感覚です。
ケースの作成
ここまで来たら後は好きな改造をしていきます。
電池ボックスやスピーカーを外付けのパーツにしたこと、フットプリントが消失した部品を無理やり実装しているため、部品が外れやすくなっていることから、ケースが欲しくなりました。
ということで、OpenSCADでササっとケースを作ることにしました。
我が家には3Dプリンタがあるので、ちょちょいの・・・ちょい!
配線は雑な感じですが、、
出来ました。
演奏動画
My new gear?
— ina_ani@2歳児のパパ (@ina_ani) 2022年8月27日
何とか動いた!
AdafruitのGram Pianoというオープンソースの電子楽器です。
制作記事は来週公開予定!
Powered by #JLCPCB pic.twitter.com/cX1d6UnGYx
まとめ
ということで、思ったよりもてこずりましたが、オープンソースハードウェアのGram PianoをJLCPCBに発注し、手元で組み立て、動作させることが出来ました。
まぁ、こういうトラブルもあるので、最悪の場合、自分でも作れそうな基板に挑戦するのが無難だと感じました。
仕様がオープンでも、電子パーツの互換性に関する知識や、ファームウェアの書き込みの知識、トラブルシューティングの知識などがないと、基板だけあってもモノを作ることが出来ないと、身をもって体感しました。
逆に考えると、人の作った基板を組み立てることで、強制的に知らなかった知識をインプットする必要性が出てくるので、ちょっと背伸びして勉強したい人などにお勧めです。