この記事ははJLCPCBの提供でお送りします。
JLCPCBとは
jlcpcb.com (↑こちらは日本語版のログインページで、お得なクーポンも配布されています。)
JLCPCBとは、プリント基板製造などで有名な香港の企業です。
日本からでもWebページでポチポチするだけでKiCADなどで作成した基板データの製造を依頼できます。
値段もかなりお手頃で、ホビー電子工作ユーザーの間では広く利用されています。
この記事の作例もJLCPCBに基板を発注して実現しました。
これは何?
CH32V003という最近流行りのRISC-Vの激安マイコンモジュールを使って楽器を作ってみました。
仕様
- 128*64 モノクロOLED
- CH32V003
- NS8002オーディオアンプモジュール
- 鍵盤を含む20個のタクトスイッチ
- スピーカ
- オーディオジャック
- ボリューム
パーツ紹介-CH32V003F4P6
最近流行りのWCH社製のRISC-Vマイコンです。 CH32VのシリーズはほかにもありますがCH32V003はその中でも最も廉価なシリーズです。
秋月電子でも販売しており、記事執筆時点では1つ50円です
プログラムメモリ16KB, RAM 2KB、GPIO18個というシンプルなスペックですが、ちょっとした電子工作のロジックを作るには十分です。
パーツ紹介-CH32V003モジュール
今回のピアノ基板はCH32V003F4P6を基板に直接取り付けることもできますが、よくあるCH32V003を搭載した開発ボードを使うこともできます。
今回はまずはこのCH32V003モジュールを利用する方法で組み立てました。
CH32V003はUSBデバイスの機能を持っていないので当然ですが、このモジュールのUSB端子は電源用で、書き込みを行うことは出来ません。
書き込みのためには専用の書き込み装置であるWCH-Linkが必要となります。(セット販売しているものを買いました)
基板の設計
今まで私は、この手のちょっとした音が鳴るガジェットを作ったことは結構あるので、ここまでのブログ記事などでも紹介しているような「鉄板」の構成で設計しました。
20個のタクトスイッチは 4*5のマトリクス配線とし、同時押しをサポートするためにダイオードを実装しています。
オーディオ周りはいつものスイッチ付きのオーディオジャックや、NS8002オーディオアンプ、ボリューム、表面実装スピーカなどを採用しました。
JLCPCBに発注
今回も発注はJLCPCBです。基板の色は白にしました。
この基板も10cm×10cmに収まるように設計したので5枚だと $2 + 送料です。
jlcpcb.com (↑こちらは日本語版のログインページで、お得なクーポンも配布されています。)
実装
今回はそこまで複雑な回路ではないので、サクッと実装できました。
ソフトウェアの実装
今回のチャレンジはソフトウェアです。CH32V003は比較的新しいマイコンなので、参考となるソースコードが少ないのが現状です。
CH32V003公式の開発環境としてはMounRiver Studio IDEというGUIのIDEと公式のSDKを使う手があるのですが、どうも大げさな開発環境で、肌になじまなかったので、シンプルなch32v003funを使うことにしました。
ch32v003funはシンプルな実装ですが、このくらいの規模のCH32V003の開発には必要十分で、サンプルも豊富です。 いくつかのサンプルを組み合わせることで目的のプログラムを作ることが出来ました。
- blink
- まずはLEDをチカチカします
- これで最低限の雰囲気をつかみました
- tim2_pwm
- 音を鳴らすために利用するPWMの機能
- LEDをフェードイン・フェードアウトするような使い方にも利用できます
- systick_irq
- 音源のオシレータを一定時間ごとに進めるためにタイマ割込みの機能
- i2c_oled
- I2C接続のOLEDの制御
- ホビー電子工作でよく利用するSSD1306向けの描画ロジックが便利です
ch32v003funを使うにあたっては以下のブログ記事が非常に参考になりました。
つぎはぎですがソースコードはこんな感じです (ch32v003funのi2c_oledのexampleを以下のように書き換えて、ビルドしました)
激安RISC-VマイコンのCH32V003で和音が鳴るピアノ的な実験
— ina_ani@3歳児のパパ (@ina_ani) 2023年12月27日
あとでブログ記事にします! pic.twitter.com/anxwkKBn2y
まとめ
安価なRISC-VマイコンであるCH32V003を使って、和音の鳴るピアノ的な楽器を作ることが出来ました。
ch32v003funという軽量なライブラリを利用して、比較的簡単に楽器的なロジックを作れることがわかりました。
自分が今までよく利用していたArduino UNOのメインマイコンであるATmega328は半導体不足で価格が高騰し、今ではだいぶ落ち着きましたが、それでもまだ価格が高止まっています。また、ATmega328は昔からあるマイコンであることもあってテキトーに買うと偽物が混ざっているようなこともあり困っていました。
CH32V003は非常に安く、新しいマイコンであるため今のところ偽物の情報も聞きません。
ちょっとここらで、メインで使うマイコンをCH32シリーズに移行してみても良いかも・・と感じました。