自分で設計するRP2040基板

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

JLCPCBとは

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

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

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

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

これは何?

RP2040は、Raspberry Pi PicoのメインのICです。 Raspberry Pi Picoは安価で入手性も良い開発ボードですが、形状が固定されており、製品に組み込むことを考えると柔軟性に欠けます。

ということで、自分で基板を設計して、自由な形状のRaspberry Pi Pico的なものを作ってしまおうというのが今回の作例です。

もう一つの目的として、Raspberry Pi Picoへの理解を深めるというのもあります。

資料

RP2040は公式のリファレンスがとても親切で、なんと日本語のハードウェア設計のための資料が存在します。

https://datasheets.raspberrypi.com/rp2040/hardware-design-with-rp2040-JP.pdf

この資料の中でも「最小設計例」として、Raspberry Pi Picoとは違う独自の開発ボードを設計する例が紹介されています。

以前の挑戦

実は、これ以前にもRP2040を使った基板を作る前準備として、以下のボードを使ったことがありました。

github.com

これは https://x.com/nonnoise さんが設計された、RP2040搭載の開発ボードです。

RP2040を搭載した開発ボードを作るにあたり、心配だったのはRP2040をどうやってはんだ付けするかということです。 パッケージははQFN56ということで、小さなパッケージでかつ、ICの足が出ていないので、手ではんだ付けする難易度は高そうでした。

幸い我が家にはホットエアーガンがあるので、QFN56の足を1本ずつ手ではんだ付けするのではなく、はんだペーストを端子に塗布して、ホットエアーガンで基板とICを熱することで実装できるだろうという目論見はあったのですが、こういうのはやってみないと安心できません。

ということで、自分で基板を設計する前に、このボードで実装の難易度を確認しました。 必要な部品はAliExpessで購入したRaspberry Pi Pico風のボードから剥がすことで入手しました。(不要な基板から必要な部品を取り出して流用することを、界隈では【羅生門】などと言うみたいです)

結果としては、何とか実装できる!という感じでした。

設計

前述の2つの資料を参考にしつつ回路図を作成します。

この基板独自の特徴としては・・

  • I2C接続のOLED取付用の端子
  • USB Type-C
  • AMS1117による3.3V供給
  • Flash ICはW25Q16JVSSIQ
  • コンデンサ・抵抗のサイズは0603

設計と並行して、必要な部品を調達します。

家に無い部品に関しては https://www.lcsc.com/ で購入しました

Type-C端子のフットプリントに関しては UARTで書き込みできるCH32V003開発ボードを作った - inajob's blog で実験したものを活用しました。

RP2040のGND端子はICの真ん中にパッドがあるので、そこを裏からはんだ付けするためのスルーホール穴の開いたフットプリントを利用しました。(GitHub - 74th/rp2040-dev-boardを利用しました)

今回からKiCAD8を使うようにしたので白抜き文字のシルクや、日本語のシルクなども試しに入れてみました。

実装

今回はホットエアーガンを使った実装をしましたが、はんだペーストの塗布はメタルマスクを使用せずにシリンジ型のはんだペーストを手で乗せていきました。

まぁ、実装が難しいのはUSB Type-Cの端子と、QFN56のRP2040だけなので、まずはチャチャっとほかの部品を実装してしまいます。

全部実装して、少しテスターで確認したのちに、USBケーブルでパソコンにつなぐと・・・

パソコンにRP2040のストレージが現れました。成功か?!

と思って、適当なuf2ファイルを転送して書き込んでみたが・・ なぜかここからうまく動かず・・、リセットするとまたストレージが見えるのですが、uf2ファイルを書き込むと無反応に・・の繰り返しです。

果たして基板が悪いのか、周辺部品が悪いのか、RP2040が壊れたのか・・こうなると暗中模索です。

RP2040の不良を疑い(この疑いは間違いでした、後述)、手元にあった、動作しているRaspberry Pi Pico互換ボードから、RP2040を取り外しこのボードに取り付けてみたところ・・

動きました!!

RP2040不良だったのか・・と思いつつ、その怪しいRP2040を今度は逆にRaspberry Pi Pico互換ボードに実装してみたところ、こちらも問題なく動きました・・・

ということで、RP2040には問題がなく、再度はんだ付けしたら動いたということで、おそらくはんだ付け不良による動作不良だったようです。

ということで、基板、周辺部品、RP2040のすべてが問題ないことがわかりました。

動作確認

ここまでくればあとはRaspberry Pi Picoと同じように利用できます。 適当にCircuitPythonのuf2をダウンロードして、パソコンからRP2040のストレージに転送します。

その後Thonnyを使ってプログラミングを行いました。

I2C接続のOLEDを接続して動作確認してみます。

LibrariesからOLED制御用のライブラリをダウンロードします。 CircuitPythonのバージョンによってライブラリのバイナリが異なるので注意が必要です。

ダウンロードしたzipファイルのlibの中の以下のファイルをCircuitPythonのドライブのlib以下にコピーします。

  • dafruit_framebuf.mpy
  • adafruit_ssd1306.mpy

さらに、examples/framebuf/font5x8.bin をCircuitPythonのドライブのルートにコピーします。

そして、以下のプログラムをCircuitPythonのドライブのルートのcode.pyに書き込みます。

import board
import busio

import adafruit_ssd1306

i2c = busio.I2C(board.GP17, board.GP16)
display = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c)

print("start")
display.fill(0)
display.text('hello world', 0, 0, 1)
display.show()

普通に動きました。

(関係ないけど、MicroPythonやCircuitPythonでさっと画面に日本語を表示するデファクトスタンダードな方法が欲しいなと思いました)

まとめ

RP2040を使った基板を設計して、実装し、動作確認ができました。

この経験を活用することで、自分のオリジナルのガジェットにRaspberry Pi Picoの形状や仕様にとらわれない、オリジナルのRP2040制御回路を構成できるようになりました。

最近使っているマイコンは、ATMega328, CH32V003, ESP32, ESP8266, RP2040ということで、ずいぶんと多くのマイコンを扱えるようになりました。まぁどれもちょっと触った程度なので、いろいろと活用していく中で理解を深めていきたいと思います。

ThinkPad L15 Gen2を購入した

前回ノートパソコンを新しくしたのが2019年 inajob.hatenablog.jp

この記事以降にストレージを1TBのSSDに換装し、バッテリーも交換しました。

それから5年使いましたが、特に性能上の課題はなかったのですが、この時新調したLatitude 5580はTPMが搭載されておらず、Windows11にアップグレードできなという問題がありました。

ということで、来年10月のWindows10のEOLが来るまでに新しいマシンに新調しようと考えました。

今回の要件

性能上の課題はなかったので、同じような性能でWindows11がインストールできれば良いなということで以下の要件で探しました

  • ラップトップ
  • 15inch FHD(1920×1080)
  • メモリ16GB ~ 32GB(旧マシンのメモリを移植する予定)
  • ストレージ 1TB(旧マシンのストレージを移植する予定)
  • 以前のIntel第6世代i5と同等からそれより良い性能

ThinkPad L15 Gen2に決めた

以上の要件から、ThinkPad L15 Gen2にしました。

CPUはIntel第11世代のi5(Core i5 1135G7(2.4GHz) )、ストレージは500GBのHDDですが、これは換装するつもりなので性能が低いほうが安くで買えてお得です。

まぁ大体、中古で安いものを探すと、メーカーを気にしない場合前回のようにDELLとか、今回のようにThinkpadになりがちと感じています。

Latitude 5580からのストレージ移植

今回の作業の目玉である、ストレージの移植です。

まず、旧マシンのSSDの中身をクリアする前に、必要なデータのバックアップを取ります。 我が家のNASのコールドバックアップ用の4TBのHDDを使い、旧マシンの1TBのSSDの中から必要なデータをバックアップします。

まるっとすべてバックアップしてもよかったのですが、今回は自分が作成したデータのみをバックアップすることにしました。 もともとこういうこともあるだろうと思い、ディレクトリを分けて管理していたのが良かったです。

その後、旧マシンから、SSDを取り出して、新マシンに差し込む、、のですが、新マシンはSATAのHHDがマウントされており、旧マシンのSSDはM.2で、そのままでは利用できない問題が発生しました。

この問題を解決するためにSATAをM.2に変換するコンバータを購入しました。1000円しないようなものをテキトーに選びましたが、特に問題なく動いています。

その後Windowsの標準機能である「回復ドライブ」を使って、ストレージを入れ方の後にクリーンインストールします。

これが結構時間がかかる作業で非常にドキドキしました。 回復ドライブを作るのに数時間(メモし忘れた)、回復ドライブからのクリーンインストールに4時間ほどかかりました。

インストール作業中にTPMの削除をして良いかの確認がこんな画面で出てきて恐る恐る削除しました

古いマシンも一応動くようにしておく

古いマシンは利用していたSSDを抜いてしまうので、起動できなくなってしまいますが・・、家に以前このマシンで利用していた250GBのSSDが、データもそのままで残っていたので、これを差し込んで起動したところ・・、普通に起動し、ライセンスも問題なく認識されました。

メモリの移植

旧マシンはDDR4-2400の16GBのメモリを2枚差して 合計32GB搭載していました。 新マシンにこのメモリを移植しようと思ったのですが、新マシンに購入時に刺さっている8GBのメモリはDDR4-3200で、これは古いマシンに差しても認識しないようでした(これは勘違いかも・・)

ということで、とりあえず16GBのDDR4-2400のメモリ1枚を新しいマシンに差して、旧マシンは16GB、新マシンは8GB+16GB=24GBという構成にしました。

旧マシンの際もメモリ使用量を見ていると大体16GB程度に収まっていたので、24GBあれば実際の使用においてメモリ不足で悩むことはほとんど起きていません。

ソフトウェアのセットアップ

ここまでで、新しマシンが期待したスペックになりました。

あとは使っていくだけです。

今まで使っていたソフトウェアを、欲しくなったタイミングで入れていきます。 ついでに、同じことを実現できるもっと良いソフトウェアがないか、などを探したりしました。

ソフトウェアのインストールには、対応している限りWinGetを使用し、簡単にインストールしたソフトウェアを管理できるようにしています。

新しいノートパソコンを使い始めて2か月ほど経った今現在でインストールしているソフトは以下です。

Audacity 3.6.3
Windows ドライバ パッケージ - Silicon Labora…
Docker Desktop
FFmpeg 5.0.0 for Audacity - x86_64
Git
Krita (x64) 5.2.3 (git 68d178c)
Microsoft 365 - ja-jp
OpenSCAD (remove only)
Arduino IDE
Inkscape
freerouting
Go Programming Language amd64 go1.22.5
LibreOffice 24.2.5.2
Adobe Acrobat (64-bit)
Microsoft Update Health Tools
Node.js
Google Chrome
GnuWin32: Make-3.81
Microsoft Edge
Microsoft Edge Update
Microsoft Edge WebView2 Runtime
Lenovo Vantage Service
Python Launcher
Microsoft Visual C++ 2015-2022 Redistributab…
FreeCAD 0.21.2 (現ユーザー用に導入を行う)
KiCad 8.0 (current user)
kubectl
LINE
Microsoft OneDrive
Microsoft Visual Studio Code (User)
Python 3.13.0a5 (64-bit)
HYPER SBI 2
インテル® グラフィックス・コマンド・センター
ThunderboltTM コントロール・センター
Microsoft Clipchamp
テレキングリモート
テレキングプレイ
Dolby Audio Premium
Lenovo Commercial Vantage
Cortana
Microsoft Defender
AV1 Video Extension
ニュース
MSN 天気
Copilot
アプリ インストーラー
Xbox
問い合わせ
Microsoft ヒント
HEIF Image Extensions
デバイス製造元からの HEVC ビデオ拡張機能
日本語 ローカル エクスペリエンス パック
MPEG-2 ビデオ拡張機能
Microsoft Edge
Microsoft 365 (Office)
Solitaire & Casual Games
Microsoft 付箋
Mixed Reality ポータル
Microsoft .Net Native Framework Package 1.3
Microsoft .Net Native Framework Package 1.3
Microsoft .Net Native Framework Package 2.1
Microsoft .Net Native Framework Package 2.1
Microsoft .Net Native Framework Package 2.2
Microsoft .Net Native Framework Package 2.2
Microsoft .Net Native Runtime Package 1.4
Microsoft .Net Native Runtime Package 1.4
Microsoft .Net Native Runtime Package 2.1
Microsoft .Net Native Runtime Package 2.1
Microsoft .Net Native Runtime Package 2.2
Microsoft .Net Native Runtime Package 2.2
OneDrive
Outlook for Windows
ペイント
Microsoft People
Power Automate
Raw Image Extension
Snipping Tool
Windows セキュリティ
Microsoft Engagement Framework
Microsoft Engagement Framework
Skype
Microsoft Store エクスペリエンス ホスト
Microsoft To Do
Microsoft.UI.Xaml.2.7
Microsoft.UI.Xaml.2.7
Microsoft.UI.Xaml.2.8
Microsoft.UI.Xaml.2.8
Microsoft Visual C++ Runtime Package
Microsoft Visual C++ Runtime Package
Microsoft Visual C++ 2015 UWP Desktop Runtim…
Microsoft Visual C++ 2015 UWP Desktop Runtim…
Microsoft Visual C++ 2015 UWP Runtime Package
Microsoft Visual C++ 2015 UWP Runtime Package
VP9 Video Extensions
Web メディア拡張機能
Webp Image Extensions
Widgets Platform Runtime
Dev Home
Microsoft フォト
Windows クロック
WindowsAppRuntime.1.3
WindowsAppRuntime.1.3
WindowsAppRuntime.1.4
WindowsAppRuntime.1.4
WindowsAppRuntime.1.5
WindowsAppRuntime.1.5
WindowsAppRuntime.1.5
Windows 電卓
Windows カメラ
フィードバック Hub
Windows マップ
Windows メモ帳
Windows サウンド レコーダー
Microsoft Store
Windows ターミナル
Windows Package Manager Source (winget) V2
Xbox TCUI
Xbox Game Bar Plugin
Game Bar
Xbox Identity Provider
Xbox Game Speech Window
スマートフォン連携
Windows メディア プレーヤー
映画 & テレビ
クイック アシスト
Linux 用 Windows サブシステム
Windows Web Experience Pack
クロス デバイス エクスペリエンス ホスト
Realtek Audio Control
Synaptics Trackpoint Control Panel
Synaptics TouchPad Control Panel
PrebootManager
メール/カレンダー

移植作業で気づいたミス

設定ファイルのバックアップが一部とれておらず、設定しなおしとなっていました。 バックアップを取る際には、ソフトウェアごとの設定ファイルがどこに配置されているか、確認が必要です。

Windowsの場合はレジストリに設定を持つようなソフトウェアもあるので、さらに注意が必要です。

またSSH秘密鍵のバックアップも忘れており、旧マシンの鍵はクリーンインストールでなくなってしまい、かつ新マシンからVPSへのログインができなくなり、ヒヤッとしました。 今回はたまたま家のRaspberry Piの鍵ペアもサーバに登録してあったので、事なきを得ました。

OneDriveに保存していたデータは気にせず勝手に移行されており、意外と便利!という気持ちになりました(課金していないので、すべてのユーザーデータを保存するほどの容量はないですが・・)

ThinkPad L15 Gen2を使っていて気づいたこと(Latitude 5580との比較)

  • USB Type-Cが搭載されており、ケーブル一本で電源と外部ディスプレイ接続ができて便利
  • CPUは第6世代i5 → 第11世代のi5 だが、ほとんど性能向上を感じない、結構CPUの違いで値段が違ったのだが、この程度の違いならもっと古くて安いCPUでもよかったかも・・
  • キーボードはたまにAとLのキーが押せてないことがあるのが気になる、慣れれば何とかなるかな?(押し込めていない?)
  • 分解しづらくなった。Latitude5580はねじを外したらスッと裏ブタが取れたが、ThinkPad L15 Gen2はツメがしっかり引っかかっている
  • 指紋認証でログインできる
  • 日本語入力中にChromeVS Codeが落ちることがあったが、この問題が解消している(Windows11で良くなった?)
  • Windows Tarminalを使い始めたら便利だった(これは単に移行のタイミングで乗り換えただけ)

お値段

本体が45000円程度、SATA→M.2変換アダプタが1000円程度で、 合計46,000円ほどかかりました。

メインストレージや、メモリは旧マシンのものを移植することで、コストを抑えることができました。

まとめ

Windows11が動かないということで、マシンを新しくしました。 期待通りではあるものの、期待を超える何かを感じないまぁ普通の買い物となりました。

CPU性能の向上はもう少し体感できるかな、と思ったのですが、少し残念です。

まぁこれでWindows10がEOLになっても何とかなりそうです。 次こういう機会があれば、もうLinuxにしようかな、、なんて考えています。

おまけ

この話は私のポッドキャストでも話したものです。音声で聞きたい方、書きおこしを見たい方はこちらをどうぞ

listen.style

Spotifyはこちら open.spotify.com

静電容量タッチと基板を裏から光らせる手法の実験

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

JLCPCBとは

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

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

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

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

これは何?

静電容量タッチを使った実験として、以前ESP32の静電容量タッチでフリック入力を実現してみた - inajob's blogを作りました。

今回は、さらに実験を行おうと、新しい基板を作成しました。

仕様

  • 8×8 のパッド (静電容量タッチセンサーが16個必要)
  • それぞれのパッドに対応した8×8のLED
  • マイコンは実装せず、手元の適当なマイコンをつなげて制御する

設計

8×8のパッドはそれぞれのパッドを2つの静電容量タッチの端子を組み合わせることで16個のタッチセンサーで8×8=64個のキー入力を認識できるようにします。

(後で気づきましたが、この方式は複数キー同時押しに対応できません)

単にスイッチとLEDがあるだけの単純な回路図となりました

LEDは基板の裏面に実装し、その光を表面に透過させる方式としました。 基板の裏面にLEDのパッドを配置し、その部分の両面のソルダマスクをなしに指定することで、光を透過しやすくします。

裏面が発行するチップLED部品もあるようですが、我が家の部品庫には一般的なチップLEDしかないので、これを表裏逆向きにはんだ付けする作戦で行きます。

前回の実験では静電容量タッチ部分はソルダマスクを除外しましたが、今回はソルダマスク付きで設計しました。結果的にはこれでも問題なく静電容量タッチが検出できました。

JLCPCBに発注

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

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

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

実装

TTP229モジュールで制御してみる

手元にTTP229という16ポートの静電容量タッチを扱うICを使ったモジュールがあったので、これを流用できないか試してみました。

このモジュールは16個の静電容量タッチパッドがついていますが、すべての端子が引き出されているので、今回製作した基板とも接続することが出来ました。

しかし、Arduino UNOと接続してTTP229モジュールと通信することで、タッチ状態を認識できるかと試行錯誤してみましたが、どうもキャリブレーションが柔軟に行えないようで、うまく今回の基板のタッチを認識できないようでした。

モジュールにもともとついている16個のパッドの認識はうまくできているので、TTP229自体には問題はなく、今回のように利用することが想定外なのか、何か細かいキャリブレーションを行う手法があるのかわからないですが、とにかく今回のケースではうまく動かなかったです。

ここはもしかしたら深堀したら良いやり方が見つかるかもしれませんが、一旦別の方法を試すことにしました。

ESP32の静電容量タッチを利用する

以前の以前ESP32の静電容量タッチでフリック入力を実現してみた - inajob's blogと同じ方法で、ESP32の静電容量タッチの機能を使うことを試してみることにしました。

ただしESP32-WROOMには静電容量タッチで利用できるピンが9個(本当は10個なのですが、開発ボードでは1つ利用できないため)しかないので、8×8のパッドのうちの4×5の領域で動作を確認することにしました。

LEDも上記の4×5の領域にのみ実装し、9個のGPIOで制御することにしました。

TTP229モジュールではうまく認識できませんでしたが、ESP32ではすんなりとタッチを認識できました。

LEDで裏面から照らす部分の実装

通常表面に光る側を向けて実装しますが、今回は表裏をひっくり返して実装します。

うまく実装できるか心配でしたが、ちょっとはんだを多めに盛ることで実装できました。

ここで1つトラブルがありました。

LEDの光が基板を透過するようにソルダマスクに穴をあけたのですが、一部の配線がソルダマスクの穴の部分に存在しており、はんだ付けの際に気を付けないと、意図しない配線がショートしてしまうという実装しづらいものとなっていました。

ソフトウェア実装

さて、静電容量タッチ、LED部分ができれば、後はソフトウェアです。

とりあえず、パッドをタッチしたら、そのパッドに対応するLEDが消えるという簡単な動作確認プログラムを作成してみました。

静電容量タッチセンサーの読み取りを10回行い、タッチが検出し続けることができればタッチとして認識するというようなロジックを組むことで、それっぽく動くものが出来ました。

雑なコードですが、一応掲載しておきます。

ESP32の静電容量タッチの認識と、マトリクス方式でLEDを駆動しているだけです。

gist.github.com

動作の様子

パッドを触るとその部分のLEDが消える様子がわかるかと思います

まとめ

マトリクス方式で静電容量タッチを試すための基板を作成し、TTP229とESP32で制御できるか試してみました。

TTP229ではうまくタッチを認識できずESP32を使うこととなりました。このため8×8すべてのパッドを認識できず一部4×5の領域で動作確認することとなりました。

静電容量タッチをマトリクス方式で利用するこの手法は、キーの数を増やすことはできますが、複数同時押しが認識できないので、注意が必要です。

基板裏面からLEDを照らす方式は、通常のチップLEDを逆向きに実装するという荒業で、期待通り動作することがわかりました。 ソルダマスクの指定をうまくやらないと、配線が露出して、はんだ付けしづらくなるというトラブルについても学ぶことが出来ました。

ポッドキャスト「#inajob の試しに録音してみた」の作り方

これは?

私は毎週1回更新のポッドキャストである「#inajob の試しに録音してみた」をかれこれ、2023年5月から始めて1年以上続けています。

ポッドキャスト、というと面倒くさそうというイメージがあるかもしれませんが、個人的にはブログ記事を書くよりも簡単・気楽に自分の言葉を紡ぎだし、公開する手段だと考えています。

この記事では、このポッドキャストの技術的な側面について紹介します。

まずは宣伝

この記事では、「#inajob の試しに録音してみた」をどうやって作っているかという技術面での紹介にフォーカスして紹介しましたが一応「#inajob の試しに録音してみた」の紹介もさせてください。

「#inajob の試しに録音してみた」は、30台後半、ものづくりが好きで、4歳の娘を子育て中のinajobが、なんでもない日々の雑談を毎週30分程度録音しているポッドキャストです。

「30代後半」、「ものづくり」、「子育て」あたりのキーワードにピピっと来た人はぜひ試しに聞いてみてください!

Spotifyで聞きたい方はこちら open.spotify.com

LISTENで文字起こしを見たい、文字起こしを見ながら聞きたい方はこちら listen.style

機材

機材と言っても、パソコンとマイクだけです。 パソコンは一般的なものなので、マイクについて紹介します。

以前も紹介しましたが、マイクはWeb会議用のインカム型のマイクを利用しています。

ポッドキャストを録音する人は、かなり良いマイクを買っているようですが、自分はまだ踏み出せていません。でもどうでしょう、自分のポッドキャスト、そこまで音声がひどいってことはないように聞こえませんか? (良いマイクはこんなところがいいよ!というプレゼンをしてほしいと思い、あえてこういう書き方をしてみる)

このヘッドセット、普通に在宅勤務時にも便利に使っています。

選ぶポイントとしては、安いこと、USB接続ではなく3.5mmオーディオジャックであること(一般的にはUSB接続の方が音質が良いなどと言われている気がしますが、接続の相性などが無い3.5mmオーディオジャックの方がつぶしがききそうだなと思って、こちらを選択しました)くらいを考慮しました。

台本

台本と言っても、何を話すかのトピックを列挙しただけのテキストです。

私は、普段自作のWikiで日記をつけているので、そのWikiの中に台本を作っています。

自分のポッドキャストでは、主にその週に起きたことをトピックとして取り上げることが多いため、台本作りというか、「先週の振り返り」をやっていると自然と台本が出来ているというような感じです。

録音ソフト

Windows標準の「ボイスレコーダー」、Macの場合は「ボイスメモ」を使っています。

私のポッドキャストは1人で録音しているものなので、録音周りで凝った機能は不要です。

しかし、この後の編集作業で、話題の切り替わりポイントに効果音を入れる処理があるので、話題の切れ目で音声ファイルを分けたいという要件があります。

OS標準のこれらのソフトは、録音ボタンで録音ができて、1つの音声を録音したのちに、さらに録音ボタンから録音すると別の音声ファイルとして録音を開始してくれます。

まぁ当たり前と言えば当たり前なのですが、この機能がトピックごとに音声ファイルを分けて録音するうえでとても便利です。

音声編集ソフト

Audacityを利用しています。 Audacityは無料で利用できる音声編集ソフトです。

また、後述するようにプログラミングで動作を定義することができるので、定型的な編集作業を自動化できます。

今回はこのプログラミングでの音声編集についてもう少し詳しく説明します。

プログラミングでの音声編集

Audacityはプログラミングで動作を定義できるということで、ポッドキャストをある程度編集していく中で、お決まりの編集作業をスクリプトとして定義しました。

後から音声の一部を切り取りたい、と言った作業をする必要が無い場合は、プログラムを実行し、少し手で作業するだけで、トピックごとのぶつ切り音声にBGMやサウンドを合成して、ポッドキャストっぽい音声を半自動的に作成できるようになっています。

ということで、この仕組みを使うと、ポッドキャスト収録にかかる時間は録音している時間と、少しスクリプトを実行する時間のみ、ということで、かなり手軽にポッドキャスト的な音声を作ることができます。

ぶつ切り音声をポッドキャスト化する手順

  • 録音した音声をすべて読み込む
  • (ここは手動)ノイズ低減
    • Audacityのノイズ低減エフェクトは、音声データの無音部分を指定することで、バックグラウンドノイズを認識して、ノイズを低減する機能です
    • 無音部分の指定がプログラムから実行できないので、この処理の手前でスクリプトが一時停止するように作っています
  • 無音の切りつめ
    • 録音データで沈黙部分が長い場合に切り詰めます
  • ラウドネスノーマライズ
    • -14LUFSに音声レベルを合わせます
  • 録音した音声を並べる
    • 最初と最後の音声は、BGMのイントロ部分と被らないように少しずらして配置します
  • 音声の切り替わり部分に効果音を入れる
  • 最初と最後の音声部分にBGMを入れる
    • BGMは最初数秒再生したのちにフェードアウトするようにエンベロープを設定します
  • 最後の音声の終了に合わせてBGMを切り詰める
  • (ここは手動) 名前を付けてプロジェクトを保存
  • (ここは手動) mp3形式でオーディオをエクスポート

自動化スクリプト

上に書いた処理を実行するスクリプトを公開しています。 もし似たようなポッドキャストを作ってみたい方は、どうぞご自由に使ってください。

github.com

配信

Spotify for Podcastersを使って配信しています。無料です。 さらに、Spotify for Podcastersの機能で、YouTubeApple Podcasts、Amazon Music、などさまざまなポッドキャストプラットフォームに配信しています。

podcasters.spotify.com

文字起こし

LISTENを使って文字起こしを作成しています。無料です。

listen.style

無料ユーザーの場合、サマリーとチャプターのの生成は10日間に1エピソードのみなので、毎週配信のポッドキャストだとたまにサマリーとチャプターが生成されない回があります。

もう一つ文字起こしサービスとしては Podexも利用しています。こちらも無料です。

podex.in

さらに最近、Podwiseというサービスでも文字起こしが作成できます。こちらは有料のサービスですが、だれか1人の課金ユーザが文字起こしを依頼すると、他の人は無料で見られるよいというような仕組みで、最近どなたかが、文字起こしを依頼してくれているようで、私は無料で(月4エピソードまでですが)文字起こしなどを見ることができています。(誰か知らないけど感謝です!)

podwise.ai

BGM

何かそれっぽい音楽が鳴ればいいや、と思いインターネットからPublic DomainのBGMを探してきて、エピソード毎にコロコロ変えています。

最近は以下のゲーム用の素材サイトからBGMでかつ、ライセンスの緩いものを検索して、良さそうなものを選んでいます。

opengameart.org

フィードバック・コミュニティ

フィードバック募集ツールとして、Google Formsを使っています。無料です。(あまり使われませんが・・)

またCosenseプロジェクト「井戸端」で、エピソードに対応したページを作り、好きに雑談できるようにしています。無料です。

ポッドキャストを始めるにあたり、何らかのコミュニティを活用することで、初期に聞いてくれる人を少しでも確保するのが、継続の秘訣かなと思いました。自分の場合は前述の「井戸端」や、Xのフォロワーさんが初期リスナーとなってくださいました。

scrapbox.io

さらに今年から、Dicordサーバ「inajob川」を作り、ポッドキャストにかかわらず私を中心としたコミュニティづくりも始めてみました。無料です。

discord.gg

まとめ

さて、ここまで紹介してきましたが、私がポッドキャストを始めるために払ったお金は、、マイク代の2000円弱だけです。

ポッドキャストって案外お金をかけずに継続できるんですね。

もちろん、マイクや編集は「沼」で、凝り始めるとかなり時間もお金もかかるとは思いますが、最小構成としてはこのくらいで始められるということがわかりました。

個人的に、在宅勤務や育児ということで、同僚や友人と顔を合わせて雑談する機会がかなり少なくなり、雑談に飢えていた中でたどり着いたのがポッドキャストです。

しばらく聞いていたのですが、そのうち自分でもやってみたくなり始めてみたところ、なんだかんだで1年以上続けることができています。

ポッドキャストを始めたことで、ほかのポッドキャストを配信する方との交流が増え、新たな刺激にもなっています。

この記事をお読みの皆さんも、私のポッドキャストに限らず、まずは聞くところから始めて、もし興味があればポッドキャスト配信を始めてみるのはいかがですか?

音の鳴る名刺基板

この記事はは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を使った基板も何枚か作って、知見がたまってきてスムーズに設計ができるようになってきていると感じました。

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

自作電子楽器RakuChordをRasoberry Pi Picoで作ってみた

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

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

JLCPCBとは

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

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

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

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

これは何?

もともとArduino UNOなどで用いられているATmega328をメインCPUとしたものでした。 しかし昨今半導体の高騰や新しい組み込み向けのCPUの登場により、ATmega328以外の選択肢も模索したいという気持ちが高まってきました。

以前、基板を乗っ取る形でRaspberry Pi Picoを接続して、動作確認をして、ある程度動きそうなことが確認できたので、今回はこれもとに専用の基板を作ってみました。

inajob.hatenablog.jp

基板の設計

前回記事では、RP2040-Zeroという開発ボードを利用しましたが、今回はRaspberry Pi Picoを使ういました。

RakuChordの28個あるスイッチの配線などは、従来のものと同じなのでかなりの部分で設計を流用できました。

オーディオアンプは従来はLM386だったのですが、NS8002を採用しました。

NS8002はグリッド楽器igetaを作った - inajob's blogでも紹介しましたが、この時は必要な周辺部品が実装されているモジュールを利用しましたが、今回は直接RakuChordの基板にNS8002とその周辺部品を実装する方式としました。

この方が、今後PCBAなどを考えたときにコストが下がると思います。

実はこのNS8002を直接実装する方式は、グリッド楽器igetaを作った - inajob's blogで作成した基板でテストしていました。igetaの基板はモジュール式のNS8002でも、直接NS8002を実装する方式でも、どちらでも動作するようになっているということです。

こういう細かい実験を基板の隙間で行うことで、小さな検証をしています。(実はigeta-picoのNS8002回路には誤りがあり、直接NS8002を実装すると期待通り動かなかったのですが、まさにこういうことが検証できる、ということです)

ボリュームや、オーディオジャック、電源スイッチ、OLED、タクトスイッチ、などは今までのRakuChordを作ってくる中で実績のあるものを採用しています。

このあたり、同じようなものを作り続けていると過去の経験が生かせて良いですね。

電源は単4電池を3本、基板に直接電池ケースをマウントできるようにしました。

基板は10cm * 10cmに収まるように設計しました。

基板上の部品の配置は、乾電池やRaspberry Pi Picoがかさばるので、自由度が低く、まぁこんなもんでしょ、という感じで、並べていきました。 配線はFreeroutingにお任せなので、あまりきれいではありません(動くからヨシ!)

また、RakuChordの基板は様々なリビジョンを作ってきているので、わかりやすいように、シルクに大きく「RakuChord-RP2040」と入れてみました。

JLCPCBに発注

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

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

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

実装

さて、今回もトラブルがいくつか・・

キースイッチの配線ミス!

またやってしまいました、配線ミス。 KiCADで配線を交差させるときに、意図せず飛び越したつもりの配線とくっついてしまうという、よくある凡ミスにより、今回もキースイッチ周りの配線がおかしいです。

かなり大規模におかしくなってしまったので、いっそ基板を発注しなおそうかとも思いましたが、何とかパターンカットと配線のやり直しにより、修復しました。(大変だった・・)

Raspberry Pi Picoを直接実装していたため、追加での配線がやりやすかったのは救いでした。

Raspberry Pi Picoをピンヘッダで実装すると電池ボックスに干渉する

Raspberry Pi Picoは端面スルーホールで、ペタッと表面実装的に実装することもできますし、普通にピンヘッダで実装することもできる開発ボードです。

今回はどちらの方式でも実装できるようなフットプリントを選んだのですが、スルーホールで実装する場合に、裏面にピンの足が飛び出してしまうため、電池ボックスと干渉してしまう問題がある事がわかりました。

まぁ、電池ボックスを多少浮かせて取り付けることで、回避できますが、ちょっと不格好ですし、ぐらぐらすることで、接触不良が起きそうで心配です。

基板をこのままでいくなら、電池ボックスと基板の間に3Dプリンタなどでスペーサーを作って挟み込むなどをするとよいかなと考えています。

スピーカーが小さすぎる

これは、事前の検証でもある程度分かっていたのですが、表面実装の小さなスピーカーでは、単音ならまだしも、和音を鳴らそうとすると、音が小さすぎるか、割れてしまうか、という感じで期待した音が鳴りませんでした。

今回は3.5mmのオーディオジャックや、スピーカーを接続するためのピンヘッダを付けているので、そちらを使ってもう少し大きなスピーカーやイヤホンに接続するなどして、回避することが出来ました。

基板完成

さて、色々問題もありましたが、何とか解決して、動作するようになりました。

まぁ事前に従来のRakuChord基板+RP2040-Zeroで検証していたので、ソフトウェア面では、困ることはほとんどなかったです。

3Dプリンタによるケースの作戦

RakuChordは楽器なので、演奏しやすい形である必要があるのですが、基板むき出しでは、どうにも演奏しづらい、というか裏面のとげとげした配線が危険すぎて、演奏どころではありません。

ということで、裏面を雑に覆うような簡単なつくりのケースを3Dプリンタで作ることにしました。

今回のケース作成手法は表面実装部品版RakuChordの改良版を作った - inajob's blogと同じく、KiCADのユーザーレイヤーでケースの凸凹をデザインし、プログラムで3Dデータを作る方式です。

以前の記事ではOpenSCADを利用していましたが、今回はCadQueryを使うことにします。

CadQueryはPythonを使って3Dデータを作ることが出来るライブラリで、OpenSCADと比べるとフィレットや面取りを定義しやすいことが好きで、最近よく使っています。

個人的には、記述のシンプルさや直観性ではOpenSCAD、自由度の高さはCadQueryかなと感じています。

とはいっても、今回は凝ったことはせず、KiCADからexportしたDXFファイルを基に、押し出しや削り取りを行い、非常にシンプルなケースを作成しました。

演奏デモ

www.youtube.com

まとめ

Raspberry Pi Picoを用いて、自作電子楽器RakuChordを実装してみました。

過去の様々な取り組みのおかげで、比較的スムーズに設計することが出来ましたが、それでも細かいミスが多数あり、いきなり完璧なものを作るのは難しいなと感じています。

3Dプリンタによる簡易的なケースづくりのノウハウも安定してきて、この程度であれば、さっと作ることが出来るようになりました。

RakuChordについては、今後も試行錯誤を続けていくつもりです。今回発見した課題を解決し、持ちやすさや演奏しやすさをさらに改良していきたいと考えています。

乾電池一本で動く画面付き電流計を自作した

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

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

JLCPCBとは

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

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

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

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

この記事の作例もJLCPCBに基板を発注して実現しました。

どういうもの?

以前JLCPCBに発注して作った「Arduino Nanoを単4電池で動かすボード」を活用して、便利な電流計を作ってみました。

inajob.hatenablog.jp

自分が持っているテスターにも電流を測定する機能はあるのですが、その瞬間に流れている電流を数値として表示するだけのシンプルなものでした。

今回作成したのは、グラフィカルな画面を持つ電流計で、ここしばらくの電流の変動を時系列のグラフで表示するというものです。

Arduino Nanoを単4電池で動かすボード」は名前の通り乾電池1本で動かすことが出来るので、USBケーブルの接続などなしで、普通のテスターと同じような使い勝手で利用できる便利な電流計を実現しています。

パーツ紹介

Arduino Nanoを単4電池で動かすボード」を本体として、それにINA219という電流計のICを搭載したモジュールを搭載しました。

制御はI2Cとなっており、Arduinoから簡単に利用できるライブラリも公開されているのでソフトウェアの開発も簡単でした。

ソースコード

すごく素朴に電流の時系列グラフを表示するプログラムです。 これを基に様々な機能を持った電流計を作ることが出来そうです。

#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>
#include <Adafruit_INA219.h>
Adafruit_INA219 ina219;

U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
int index = 0;

void setup() {
  Serial.begin(9600);
  u8g2.begin();
  if (! ina219.begin()) {
    Serial.println("Failed to find INA219 chip");
    while (1) { delay(10); }
  }
  u8g2.clearBuffer();
}

void loop() {
  float shuntvoltage = 0;
  float busvoltage = 0;
  float current_mA = 0;
  float loadvoltage = 0;
  float power_mW = 0;

  shuntvoltage = ina219.getShuntVoltage_mV();
  busvoltage = ina219.getBusVoltage_V();
  current_mA = ina219.getCurrent_mA();
  power_mW = ina219.getPower_mW();
  loadvoltage = busvoltage + (shuntvoltage / 1000);

  index = (index + 1)%128;
  char bbuf[8];
  dtostrf(current_mA, 5,2, bbuf);
  char currentbuf[16];
  sprintf(currentbuf, "%smA", bbuf);

  dtostrf(loadvoltage, 5,2, bbuf);
  char loadbuf[16];
  sprintf(loadbuf, "%sV", bbuf);
  
  u8g2.setFont(u8g2_font_ncenB08_tr);   // choose a suitable font

  u8g2.setDrawColor(0);
  u8g2.drawBox(0,0,128,10);
  u8g2.drawBox(index,0,1,64);
  u8g2.setDrawColor(1);
  u8g2.drawBox((index + 128 + 1)%128,10,1,63-10);
  u8g2.drawPixel(index, 63 - (int)(current_mA * 64/10)); // max 10mA
  Serial.println(63 - (int)(current_mA * 64/10));
  u8g2.drawStr(0,10,currentbuf);
  u8g2.drawStr(64,10,loadbuf);
  u8g2.sendBuffer();
  delay(10);
}

OLEDの制御には同じみu8g2を利用しました github.com INA219モジュールの制御には以下のライブラリを利用しました github.com

感想

以前作った、「Arduino Nanoを単4電池で動かすボード」の活用例として画面付きの電流計を自作しました。

電流計のプログラムを自分で作ることが出来るというのは、自分の使う道具の痒い所に手が届く感じでなかなか便利なことだと感じました。普段使っている既製品を、自分でプログラミングできるものとしてとらえなおすというのはとてもワクワクします。

電流計の機能的にはArduino NanoそのものやArduino UNOを使っても同じことが出来ますが、乾電池1本で画面付きで・・となってくるとこの「Arduino Nanoを単4電池で動かすボード」が非常に便利であることが実感できました。

安価で、バッテリー駆動ができ、画面もついている開発ボード、これが1つあるとちょっとしたガジェットのプロトタイピングが簡単にできると感じており、この方向でもう少しブラッシュアップした開発ボードを作っていきたいなと感じました。