画面の大きなArduboy FX互換機を3Dプリンタで作った

Arduboy(FX)とは?

Arduboyとは、名刺サイズの8bit携帯ゲーム機です。 モノクロで128×64のミニマルなディスプレイを搭載し、Atmega32u4という8bitマイコンをコアとして構成されています。

www.arduboy.com

Arduboyはクラウドファンディングで資金を集め開発が行われ、無事資金が集まり、ここ数年間の間世界各地で買うことができました。 また、途中で新しいバージョンのArdbuboy FXも開発され、最近はArduboy FXが主として販売されていました。 Arduboy FXというのは従来のArduboyに複数のゲームを保持し、切り替えて遊ぶためのFlashメモリを追加したものです。

(現在は関税の問題などもあり、在庫切れとなっており、入手が少し難しくなっているようです)

Arduboyは自作できる

Arduboyは製品として販売されていますが、その回路図やソースコードオープンソースとなっており、部品をそろえて回路を同じように組めば、誰でも作ることができます。

また、そのために必要なツールや資料もかなり充実しています。

ということで、今回は、Arduboy FXの互換機を作ってみることにします。

こだわりポイント

ただ単にArduboy FXを真似して作るのでは、芸がありません。今回は以下のポイントにこだわることにしました。

  • 2.42インチの大きなOLED(解像度は同じく128×64)
    • オリジナルのArduboyは1.3インチのOLEDです、また市場に広く流通しているよく似たOLEDは0.96インチです。
  • 3DPCBと呼ばれる3Dプリンタを活用した回路を採用する

回路の設計

3DPCBを作るためには、まず普通のプリント基板を作るときと同じように基板を作るプロセスを採用します。 これは、以前3Dプリンタで基板のようなもの(3DPCB)を作ってみた - inajob's blogで私が行ったのと同じ方法です。

主な部品は以下です(細かいパーツがほかにもあります)

設計と言っても、配線については以下のページに詳しく解説されているので、この通りに配線します

github.com

Pin wiring tableと書かれた表のProMicro 5V(standard wiring)に従って配線しました。

いくつか注意点があります

  • OLED CSはGND/(inverted CART_CS)と書かれています。 Arduboy FXを作る場合はGNDではなく inverted CART_CS にする必要があります。
  • CART_CSはorgとnewの2通りが書かれています。今回はnewを採用しました。これはArduboy FXと同じ配線です
  • 上に出てきたinverted CART_CSを実現するために、NOT回路を構成する必要があります。に従いトランジスタで回路を構成しました
  • スピーカーは適当に電解コンデンサでデカップリングしたのちに取り付けています。十分大きな音が鳴ります
  • リセットボタンを搭載しました

基板の設計

回路図が出来たら次は基板の設計です。

3DPCBということで、2mmの太い配線で、なるべく片面だけを使うように回路を設計します。クリアランスは0.2mmと、いつものプリント基板と同じ設定のままで設計してしまいましたが、これだとフィラメントが1本だけの壁になるようで、もう少し太くなるように設計してもよかったかなと思っています。

3DPCB化

3Dプリンタで基板のようなもの(3DPCB)を作ってみた - inajob's blogと同じようにOpenSCADを使い3DPCBを作っていきます。

今回作るのは3DPCBのメインの造形と、2つのカバーです。

まずメインの3DPCBです。

基板でいうところの導通する部分を溝にしてViaは少し大きめの穴にしました。またカバーと結合するための穴をあけています。データはKiCADから出力したDXFをそのまま使うので、モデリングは不要です。 Viaや穴はドリルデータに出力されるので、前回同様DXFファイルに変換して利用しています。

Viaの穴は貫通させずあえて底面1レイヤーだけは塗りつぶしています。こうすることで1層目の定着を安定させる目論見があります。

次がボタン部分のカバーです。

ボタン部分は6mmの良くあるタクトスイッチを使っています。ボタンの頭が長いものを使ったので、その頭が飛び出すようなカバーを作ります。 このカバーは無くても遊ぶことは出来るのですが、3DPCBはボタンを十分に基板に固定することができず、グラグラするため、このカバーで固定するようにしました。

ボタンの頭の穴をあける部分は、KiCADのUser定義レイヤーに○を描いたものをほかの配線と同様にDXF形式で書き出して利用しています。

最後が、メイン部分のカバーです。

3DPCBの配線面と反対側に設置する部品の部分だけ窓を開けたようなカバーです。 また、ProMicro、OLED、Flashモジュールは直接3DPCBに接続するのではなく、2.45mmピッチのソケットを介して繋ぐようにしており、そのソケット部分も窓になっています。

こちらも3Dプリンタの印刷を安定させるために底面1レイヤーは塗りつぶしています。またソケットの部分については、上からピンを差し込むための穴と、ソケットを取り付けるための窓の高さを変更して、ソケットとピンの間にこのカバーが挟まるような形状にしています。

こうすることで、ソケットからマイコンボードを抜く際に余計な力が3DPCBにかからないようにしました(実際組み立ててみると、3DPCBとソケットは結構強い力でくっついているので、この配慮は不要だったように思います。

そんなこんなで、3DPCBが完成したので、これらを数時間かけて印刷しました。

前述したように、配線と配線の間のクリアランスを0.2mmとしたため、一部の溝は間の壁が非常に薄くなって、触ると折れてしまうような感じに仕上がりましたが、まぁそのくらい壊れても配線は問題なくできるので、このまま実装に移ることにしました。

配線・部品実装

溝に沿わせて配線します。

配線が交差することはないので、被覆なしの導線で配線することもできるのですが、手持ちがなかったので被覆付きの導線を使って配線しました。

折角被覆付きなので、役割に応じて違う色で配線してみました。

このような導線アソートを使うと好きな色を好きなだけ使えて楽でした。太さは28 AWGを使いましたが、もっと細くてもよいと思いました。より線よりも単線のほうが扱いやすかったかもしれないとも感じました。

3DPCBでの配線は、どこからどこに配線を接続すべきかが一目瞭然なので、「無心」で配線作業できるのが面白いと感じました。一種のセラピーを受けているような時間でした。

3DPCBの欠点としては、はんだ付けが難しいことです。配線と部品をはんだづけするわけですが、すぐ近くにプラスチック(PLA)でできた3DPCBがあるため、簡単にプラスチックを溶かしてしまいます。 慣れれば適切な箇所に熱を加えたり、サッと作業するなどで、対応できますが、それでもいくつかの箇所で3DPCB自体を溶かしてしまいました。(たぶんこの溶かしたときの煙も健康に良いものではなさそうです・・)

配線が終わったらカバーを装着します。部品のある場所は窓が開いているので、スッと入ります。

カバーを付けるとこんな感じです。この上からOLED、Flashモジュール、Pro Microを突き刺すことになります。

Pro Microの準備

Arduboy FXを作るにあたり、Pro Microに適切なブートローダーを書き込む必要があります。

ここでも、以下のリポジトリを使います。

github.com

READMEの指示に従い、Arduino IDEのBoardとしてHomemade Arduboyを追加します。

さて、ここからPro MicroにArduboy FXのブートローダーを書き込むのですが、これを実現するためにはAVRのライターが必要となります。

今回はArduino UNO(の互換機)をライターとして使うことにしました。Arduinoをちょっと深く触った人なら体験したことがあるかもしれませんが、Arduino UNO自体をAVRライターとして使うという技があるのです。

配線やArduino IDE上での操作は以下のページが詳しいので参考にしてみてください。

ht-deko.com

↑の記事の中で「目的のArduino」と書かれて図ではArduino Microが選択されている個所で、「Homemade Arduboy」を選択することで、Arduboy FXのブートローダーを書き込むことができます。

Homemade Arduboyを選ぶと、さらにいくつかの項目を選択することができますが、今回は以下の図のように設定しました。

  • Port
    • PC上で認識されたポートに合わせてください
  • Based on "Pro Micro 5V - Standard wiring"
    • Standard wiringで配線したのでこれを選択
  • Bootloader "Cathy3K (starts with menu)"
  • Display contrast: "Normal"
    • 変更していませんが、コントラストが設定できるようです
  • Core: "Arduboy optimized core"
    • 変更していません
  • Display: "SSD1309"
    • ここは要変更。利用するOLEDに合わせてコントローラを選択します
    • 純正のArduinoはSSD1306です
  • Flash select: "Pin2/D1/SDA (official)"
    • 配線をこのようにしたのでこれを選択
  • Programmer: "Arduino as ISP"
    • Arduino UNOを書き込み機として利用するのでこれを選択
    • 事前にArduino UNOにはArduinoISPというスケッチを書き込んでおきます

で、ここまで出来たら、ArduinoISPを書き込んだ、Arduino UNOをPCに繋ぎ、さらにそのArduino UNOからPro Mircoに適切に配線して、Burn Bootloaderを選択すると書き込みが開始されます。

自分の場合ですが、この書き込みがうまく行かないことが何度かありました。配線を見直したり、何度か挑戦していると書き込むことができたのですが、原因は不明です。

動作確認とFlash Cartの書き込み

上記でブートローダーを書き込んだPro Micro、OLED、Flashモジュールをカバーの上から3DPCBに突き刺して準備完了です。

ここからは以下のツールを使います。 READMEに従いFX Activatorを起動します(WindowsMac/Linuxかで操作が違います)

github.com

このツールは本来、純正のArduboyに後からFX mod chipを付けた際にそれを有効化するためのものです。(以前この作業を紹介しました Arduboy FX Mod-ChipによるArduboyのFX化 - inajob's blog

今回はこのツールの機能を一部利用してFlashモジュールの接続確認と、Flash Cartの書き込みを行います。

まず、今回作成したArduboy FX互換機をPCに繋いでFX Activatorの画面のUpload Hex fileをクリック

画面がやや乱れるのですが、ここでMOD CHIPがNGを示す×、FLASH CHIPがOKを示すチェックマークになっていることを確認します。(MOD CHIPが×なのが不気味かもしれませんが、これであっています)

FLASH CHIPがOKであれば問題ないので、この画面では何も操作せずに 続けてFX ActivatorのOptionsのメニューから「Apply SSD1309 display patch」をクリックしてチェックマークを入れます。

この機能は素晴らしいもので、純正Arduboy FX向けのゲームのバイナリの一部をSSD1309用に自動的に書き換えてくれるというものです。この機能のおかげで、大量のゲームをこの互換機用に再コンパイルするという手間が省けます。 (これはSSD1309のみに提供されている機能で、ほかのOLEDはこのような便利な方法はありません)

チェックマークがついたら、画面上の「Upload Flash image」をクリックします。プログレスバーが伸びるのがゆっくりなので、しばし待ってください。

最後まで書き込めたら、互換機の真ん中のRESTボタンを押すことで、Arduboy FXとして起動します。

最新のFlash Cartの入手

今回書き込んだのはFX Activatorに同梱されているFlash Cartですが、これは少し古いものです。

最新が欲しい場合はPress Play on TapeページのArduboy FX - The whole encildaのリンクをクリックして遷移するCartBuilderのページからDownload BINをクリックして最新のBINファイルをダウンロードできます。

このbinファイルを先ほどのFX Activatorから選択して「Upload Flash image」をクリックすることで、このbinファイルをArduboy FX互換機に書き込むことができます。

まとめ・感想

Arduboy FXの互換機が比較的簡単に作れることは知っていたのですが、実際にやってみたのは初めてでした。 Arduboyは資料やコミュニティが充実しており、この記事に書いたような情報はちょっと調べればすぐに見つけることが出来、非常に進めやすかったです。

3DPCBは以前も少し試したのですが、ここまで実践的な回路ではなかったので、今回やっとまともに使ってみたという気持ちです。 プリント基板を作るほどでもないが、ユニバーサル基板にもじゃもじゃ配線するのもちょっと・・というニッチな需要にこたえる面白い手法だと感じました。

Arduboyの入手性が悪くなっている、今だからこそぜひ皆さん自分でArduboyを作ってみてはいかがですか?

20ドルで情報収集の未来を体験!自作「全録音生活」システムを試してみた

※この記事は私のポッドキャストの音声を基に作成しています。音声で聞きたい方はこちら listen.style

ローカル文字起こしAIとウェアラブルレコーダーで構築する「パーソナル全録音システム」の衝撃

最近、AIの進化が目覚ましいですね。特に大規模言語モデル(LLM)や生成AIは、私たちの情報収集や整理のあり方を大きく変えつつあります。文字ベースのAI活用はすでに身近なものになりましたが、音声の文字起こしAIの進化は、さらに新たな可能性を秘めていると感じています。

今回は、私が個人的に試している「全録音生活」というプロジェクトをご紹介します。これは、安価なウェアラブルレコーダーとAI技術を組み合わせることで、日常の会話や出来事を自動でテキスト化し、情報として活用する試みです。


音声データのテキスト化:ローカル文字起こしAIの活用

音声データをテキストに変換する「文字起こし」は、AIの中でも特に身近な技術になりつつあります。以前は専用のサービスや高性能なPCが必要というイメージでしたが、今は手元の環境でも十分に実用レベルの文字起こしが可能です。 (今回利用したのは、ThinkPad L15 Gen2を購入した - inajob's blog で紹介しているノートパソコンです。特にGPUが強いとかでもないので、CPUのみで処理を実行しています。)

私はまず、オープンソースの文字起こしツール「Whisper」を試しました。これは無料で利用でき、PCのCPUだけでも動作するのが魅力です。しかし、実際に試してみると、私のノートPC(GPUオンボード)では、10分の音声データに20分近い処理時間がかかり、日常の雑音や無音区間が多いデータでは精度も今ひとつでした。同じ言葉を繰り返したり、意味不明な文字が羅列されたりすることも。

そこで見つけたのが「Faster Whisper」です。名前の通りWhisperを高速化した実装らしく、これを試したところ、驚くほど処理速度が向上しました。10分の音声データがなんと5分もかからずに文字起こしできるようになったんです。特に無音区間が多いデータでは、その部分をうまくスキップしてくれるようで、効率が格段に上がりました。

プログラムはたったこれだけです

from faster_whisper import WhisperModel
import subprocess
AUDIO_FILE_NAME = "XXXX.mp3"

model = WhisperModel("large-v3", device="cpu", compute_type="int8")

segments, info = model.transcribe(
        AUDIO_FILE_NAME,
        beam_size=5,
        vad_filter=True,
        without_timestamps=True,condition_on_previous_text=False)
print("Detected language '%s' with probability %f" % (info.language, info.language_probability))
for segment in segments:
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))

実際には全録音生活の録音データの大半は会話ではなく雑音なので、10時間とかのデータであっても書きおこし自体は1時間以内で終わることがほとんどでした(多く会話がある日は書きおこしにも時間がかかります)。

同じ文字が繰り返し出力されてしまう問題に関してはcondition_on_previous_textFalseに設定することで回避できました

加えて音声データを少し加工することで、音声認識の精度が上がることにも気づきました。具体的には、ノイズの低減、低周波数の音声のカット、ラウドネスノーマライズを実施しました(この手法は私のポッドキャストの音声編集時にも行っています。こんなところで知見が役に立つとは!)

もちろん、Faster Whisperで出力されるテキストは完璧ではありません。単語レベルでは合っていても、文脈が不自然だったり、固有名詞が間違っていたりすることはよくあります。


生成AIとの連携によるデータ分析

Faster Whisperで文字起こしされたデータは、そのままでは活用しにくい部分があります。そこで、私は次のステップとして、クラウドベースの生成AIを組み合わせることにしました。具体的には、普段使い慣れているGoogleの「Gemini」や「ChatGPT」といったサービスです。

文字起こしされたテキストをこれらの生成AIに投入し、「このテキストは音声から文字起こしされたもので、多少の誤字脱字や繰り返し、意味不明な箇所がある。これをきれいな日本語に直してほしい」「箇条書きで要約してほしい」といった指示を与えます。すると、比較的自然な日本語で、かつ要点がまとまったテキストが返ってくるんです。

ここでもローカルLLMを使う選択肢もあるのですが、ローカルLLMでは速度・性能面でクラウドベースの生成AIに劣るということに加え、Geminiの無料使用の範囲で十分に分析できるという理由から、クラウドベースの生成AIを利用することとしました。

この「音声データ → ローカル文字起こしAIでテキスト化 → 生成AIで分析」というワークフローを確立することで、不完全な文字起こしデータでも、実用的な情報へと生まれ変わらせることができるようになりました。日常の何気ない会話も、トピックレベルであれば十分に把握できるレベルになります。


全録音生活を支えるデバイス(このデバイスは買い換えました、追記を確認してください)

この全録音生活を実践する上で、手軽に長時間録音できるデバイスは欠かせません。私が目をつけたのは、中国通販サイトのAliExpressで見つけたウェアラブルレコーダーです。

私が購入したのは、わずか15ドル(約2,000円強)ほどのキーホルダー型の小型レコーダーです。バッテリーは8時間程度持続し、16GBのデータ容量で約160時間分の録音が可能。8時間なので丸一日には少し足りませんが、どこかで1時間ほど充電時間を取るか、明らかにしゃべらない時間帯に録音を停止することで、1日のほとんどすべての会話を録音することができます。(現在もっとバッテリー容量の大きなものを注文中です)

盗聴器として販売されているケースも多いようですが、私自身のプライベートな記録として、倫理と法律の範囲内で利用する分には非常に魅力的なデバイスだと感じました。もし試してみたい方がいれば、AliExpressやAmazonなどで「ウェアラブルレコーダー」と検索してみてください。様々な形状やバッテリー容量のものが、10ドル〜30ドル程度の価格帯で手に入ります。

以下はAmazonで探した近い製品です。私の手元にあるものは16GBモデルなので厳密には違います。

もう少し電池が長持ちするとしたらこれかなと思っていますが、上と比較するとちょっと値段が高いかなとも思います(電池も長持ち、容量も大きいので妥当な値付けだとは思いますが・・)。

追記: 全録音生活を支えるデバイス

上で紹介したデバイスは、1日中の録音に堪えなかったため、新しく以下のモデルを購入しました (AliExpressで$20程度でした)

ポッドキャストにて音声で紹介もしています。 listen.style

  • 1日中録音できるバッテリー(カタログによると35時間、実際に16時間程度録音しているが問題なし)
  • USB Type-C端子がそのまま刺さる(前機種は特殊ケーブルだった)
  • mp3で録音できるのでストレージにたくさん音声が入る
  • 大きさは前機種よりむしろ小さい
  • 録音中かどうかをLEDで確認する方法がない(前機種は長押しでLEDが点灯した)
  • 2時間単位でファイルが別になる
  • 充電しながらの録音ができない(前機種は出来た、これは人によってはつらいかも)

日常への適用:家族との会話の記録

この「全録音生活」は、特にご家族、とりわけお子さんがいる環境と非常に相性が良いと感じています。普段の生活では、家族間の会話は常に発生し、大人も自然と発話する機会が非常に多いですよね。例えば、子供と遊んでいる時、食事中に話している時、ちょっとした出来事を話している時など、意識せずとも多くの会話が生まれます。

そうした自然な会話を継続的に録音することで、例えば先日科学館に行った際の会話や、昼食の感想、娘との何気ないやり取りなども、後からテキストデータとして手元に残せるようになりました。これは、後から振り返るための貴重な「日記」や「記憶のトリガー」になりうると感じています。

実践における課題と今後の展望

実際にこのウェアラブルレコーダーとAI連携システムを導入し、3〜4日ほど「全録音生活」を試してみた結果、期待通りに機能していることを確認できました。1日の行動内容や、どのような会話をしたかといったトピックレベルであれば、問題なく抽出できています。先日科学館に行った際の会話や、昼食の感想などもテキストデータとして手元に残るようになりました。

このシステムの最大の魅力は、そのコストパフォーマンスです。

  • バイス: ウェアラブルレコーダーは15ドル程度の初期費用のみ。
  • 文字起こし: ローカル文字起こしAI(Faster Whisper)を使用するため、PCのCPUパワーと電気代のみ。
  • 整形・要約: 生成AI(Geminiなど)は、無料の範囲で十分に利用可能。

つまり、実質的にかかる費用は15ドルのデバイス代と、PCの電気代くらいで、誰でもこの「全録音生活」を試すことができるんです。Pythonでの簡単なプログラミングは必要ですが、それ以外は購入してボタンを押すだけなので、エンジニアでなくとも十分チャレンジ可能です。

しかし、現時点での最大の課題は、「集まった大量のデータをどう活用するか」という点です。日々の記録がテキストとして手元に集まるのは素晴らしいのですが、それをどう整理し、ナレッジとして活用していくかについては、まだ明確な答えが見つかっていません。これは、世の中のAI活用全体にも言えることかもしれませんが、データを集めることはできるようになっても、その次のステップが見えていないのが現状です。

もちろん、過去の会話を聞き直して「あの時何話してたっけ?」と確認するような使い方はできますが、日常でそこまで頻繁に振り返ることもありません。今後は、これらのデータを知識ベースとして構築したり、パーソナルアシスタント機能と連携させたりといった、さらなる活用方法を探っていきたいと思っています。

既存サービスには、録音とAIによる文字起こし・要約を組み合わせた「PLAUD AI」のような製品もすでに存在します。しかし、これらは28,000円前後と高価な上に、クラウドサービス利用料がサブスクリプション形式になっている場合が多いです。今回ご紹介した自作システムは、それらのサービスに比べて圧倒的に低コストで、同様の体験ができるのが大きなメリットです。

もちろん「PLAUD AI」が法外に高いというわけではなく、このような製品はまさに、前述した「集まった大量のデータをどう活用するか」についての答えを考えて実装されているものとなっています。このような点に価値を見出すのであれば妥当な金額とは思いますが、今回私はこの部分を自分で作りたいという気持ちと、PLAUD AIが(おそらく)フォーカスしているビジネスでの活用という面には興味がないということから、自作することを選択しました。


手元で現在行っている分析

「集まった大量のデータをどう活用するか」ということで、今試しているのが、音声データからナレッジを抽出する試みです。ここではナレッジというのはタイトル+短い本文という形のデータです。全生活録音の書きおこしデータをもとにこのナレッジを生成させるのです。

今の仕組みでは1日の録音に対して大体50~100個のナレッジが生成されています。まぁこれがあっても「それで?」という話なのですが、何となくこの形式のほうが活用しやすいと考えています。

たとえばある日の会話データの書きおこしから、以下のようなナレッジが抽出できます

  • 缶詰の蓋の危険性
    • ある容器の蓋が非常に危険であると警告されている。開けた後の蓋の縁が鋭利で、指を切る可能性があるとのこと。包丁ほどではないが、滑らせるように触ると切れるほどの切れ味があるため、取り扱いには注意が必要である。
  • 幼稚園への適応と遊び方の変化
    • 以前は幼稚園に行きたがらなかったが、現在は適応している様子が語られている。休みの日には幼稚園に行けないことを残念がるほどになった。また、幼稚園のおもちゃに飽きても、新しい遊び方(絵本を読むなど)を自分で見つけるようになったという成長が報告されている。
  • 青ワザのケアと出発前の身体確認
    • 青ワザの治療として軟膏を塗布し、ズボンをずり下げて患部を確認。青ワザはかなり治ってきている様子。その後、背中を「もちもち」とケアし、出発前の最終的な身体の状態を確認した。着替えを促し、準備が順調に進んでいることを確認した。
    • (注:これは「青アザ」の間違いですね)

さらにここから、LLMに雑談や蘊蓄(うんちく)のようなものを生成してもらいました

  • 缶詰の蓋の危険性
    • 缶詰の蓋の鋭利さ、本当に危険ですよね。古代エジプトでは、メスという道具が使われていました。これは、現代の外科手術で使われるメスと同じように、物を切るための道具です。石器時代から続く、鋭利な刃物への人間の探求心は、缶詰の蓋にも受け継がれているのかもしれません。缶詰の蓋は、その構造上、開けた時に縁が鋭利になってしまうことがあります。これは、缶詰の密封性を保つための工夫でもありますが、同時に危険もはらんでいるという、まさに諸刃の剣ですね。
  • 青ワザのケアと出発前の身体確認
    • 青ワザは、内出血によって赤血球が破壊され、そこに含まれるヘモグロビンが分解される過程で様々な色に変化します。最初は赤紫色ですが、時間が経つにつれて緑色、黄色へと変化していくのが特徴です。

とりあえず今はこんな感じで、翌日以降、妻や5歳の娘に隙あらばこの手のうんちくを伝えて反応を見たりしています。

これ以外にも、ナレッジの類似度の高いものを検索する仕組みや、1日の活動のサマリを生成する仕組み、明日に残したタスクを列挙するなど、いろいろと試していますが、なかなか「これぞ!」というものが見つかっていないのが実情です。

ぜひあなたも試してみてほしい

「全録音生活」は、現代のAI技術が個人の情報環境にどのような変化をもたらすのかを、身をもって体験できる面白い試みです。低コストで手軽に始められるので、もし興味を持たれたら、ぜひご自身でウェアラブルレコーダーを手に入れ、無料のツールと組み合わせて試してみてください。

もちろん、録音デバイスの利用には、法律やマナーを遵守し、周囲に配慮することが重要です。プライバシーに関する問題がない範囲で、ご自身の生活に新しい風を吹き込んでみてはいかがでしょうか。

この「全録音生活」から得られたデータに、もし何か良い活用アイデアがあれば、ぜひ教えてください!

参考

zenn.dev

2024まとめ

毎年恒例の1年のまとめです!

ピックアップニュース

体調が悪かった

体調不良な1年でした。今年から体調不良が発生した場合に、個人の日記に体調不良コーナーを設けて、どのような症状か、どのように対応したかを記録するようにしたのですが、皮肉なことに非常に充実した体調不良日記となりました。 (と言っても仕事を休むほどの体調不良ではなく、地味に咳が出る、鼻水が出るというようなものがほとんどでした。)

来年は日常的な運動を増やすなどして、体力をつけて、もう少し健康に過ごしたいです。

ポッドキャストで「ゆるやかな親孝行」を始めた

昨年から始めたポッドキャスト「#inajob の試しに録音してみた」ですが、この音声をSDカードに入れて実家の親に送るという活動をしています。 親にも好評のようで、ある程度まとまって聞いたところで、便箋にまとめて「おたより」として感想を送り返してくれており、新しいスタイルのコミュニケーションができています。

普段発信しているポッドキャストを流用する形で親孝行もできるということで、非常にコスパが良いと感じています。来年も続けていきます。

ポッドキャストでも話しました: talk32: ポッドキャストで近況報告という形の親孝行 - #inajob の試しに録音してみた | Podcast on Spotify

子連れでMaker Faire Tokyoに参加できた

娘も4歳となり、2人で一緒にお出かけする機会の多い1年でした。なかでもMaker Faire Tokyoに一緒に行けたのはとても嬉しかったです。 自分自身が久しぶりの参加、ということに加え、知り合いの皆さんに娘を紹介しつつ展示を見て回るという体験が良かったです。

ポッドキャストでも話しました: talk69: 4歳の娘とMaker Faire Tokyo 2024に行ってきた - #inajob の試しに録音してみた | Podcast on Spotify

過去の日記のサルベージ

地味ですが、20年前の自分の日記を発掘したので、日記システムに取り込みました。これにより毎日の日記を書く際に、過去20年分の(と言っても歯抜けですが)日記を見ながら、今日のことを考えることができるようになりました。

日々のやることに注視しがちですが、20年間前の大学生になって間もない自分の日記などを見ると、自然と視野も広くなる気がします。

ポッドキャストでも話しました: talk66: 20年前の自分を振り返りながら生活する - #inajob の試しに録音してみた | Podcast on Spotify

ステータス

  • 今の家に引っ越してから8年目
  • 会社に入ってから15年目
  • 結婚して8年ちょっと
  • 娘が生まれて4年目
  • 娘は幼稚園入園
  • ポッドキャスト2年目
  • Discordサーバー 「inajob川」 1年目

今年学んだスキル

  • CH32V003搭載基板の作り方
  • RP2040搭載機版の作り方
  • ESP32搭載機版の作り方
  • Audacity Scriptによるポッドキャスト編集の自動化
  • Vite + TypeScriptで自分用のWikiを作り直す
  • Discordコミュニティ inajob川 の運営
  • マンション理事長
  • 子連れイベント参加

今年買ったもの

オタマトーン。たまに演奏してます。

スマートフォンを新調しました

motorora g64 5G

感想

体調が悪かった1年でした。運動とかも意識してやっているのだが・・来年は強度を上げていこうかなと思います。

ポッドキャスト2年目、当初意識していなかった親孝行との繋がりも見つかり、Discordサーバも始めることができ、自分中心のコミュニティがじわじわと構成できつつあります。この辺りは在宅勤務、子育てによる課題の解決策として、模索していたので進展があって良かったです。

電子工作も予定通りほぼ1ヶ月に1Project取り組むことができ、ブログも継続できています。

ワークライフバランスを意識しながら、来年も色々挑戦していきたいです。

4歳の娘とのものづくりに関しては、別の記事を書いていますので、こちらもご覧ください inajob.hatenablog.jp

ESP32で64個のフルカラーLEDを制御する基板を作った

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

JLCPCBとは

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

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

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

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

これは何?

8×8=64個のフルカラーLEDを制御するための基板です。 コアとなるマイコンはESP32で、USB接続で簡単に開発できるというものです。

設計

以下のような要件で基板を設計しました。

  • USB Type-Cでパソコンと接続できる
  • USB シリアル変換IC CH340G
  • 自動リセット回路
  • 2mm角のシリアル制御できるフルカラーLED (8×8=64個)
  • ESP32の足をそのまま引き出した拡張ポート
  • フルカラーLEDの制御を3.3V、5Vのどちらか選択できるジャンパ

個々の要素はこれまで作ってきた基板で検証済みのものが多いので、比較的スムーズに設計できました。

例えば、USB Type-CコネクタについてはUARTで書き込みできるCH32V003開発ボードを作った - inajob's blogで検証しましたし、自動リセット回路についてはESPboyというオープンソースの携帯ゲーム機を日本用に再設計してみた - inajob's blogで学んだものです。

部品も上記の製作の時に買ったものがまだ残っていたので、新たに買い足す部品は少なくて済みました。

2mm角、シリアル制御フルカラーLED

今回使用したのはYF923-2020というフルカラーLEDです。

このサイズでメジャーなものとしてはWS2812B-2020やWS2812C-2020なのですが、仕様書を見るとこれらのLEDは3.7~5.3Vということで3.3Vで動かないようなのです(しかし実際のところはそれでも動く、という情報が多数見られますが・・)

今回はどうせ買うなら、ということでプロトコルはWS2812互換ですが、3.3Vでも動作可能とうたっているYF923-2020を選びました。

この情報は3.3V電源で動くNeoPixel LED YF923-2020 をXIAO RP2040に乗っけてPRK Firmware使ってLチカ - kuriharaのブログで学びました。有益な記事に感謝します。

まぁ、3.3Vで動くということですが、何かあったときのために5Vで動かすための仕組みも用意しておき、ジャンパで切り替えできるようにしておきました。(5V接続は結局試してないですが・・)

LEDを配置する面はこんな感じ。GNDを白抜き文字にしてみました。

ICを配置する面はこんな感じ。 ESP-WROOM-32のアンテナ部分は基板から飛び出すように配置しています。 また、各フルカラーLEDに対応したコンデンサも実装できるようにしましたが、これは実装しなくても問題なく動作しました。

発注

サイズは63mm角なので、$4 + 送料という安価で基板製造できました。

実装

さて、この基板、結構表面実装部品が多いので、実装は大変です。

まずは、USB Type-CポートとCH340G、レギュレータ周りの部品を実装して、USBシリアルデバイスとして認識できるかを確認しました。

はんだ付けにははんだペーストとホットエアーガンを使いました。さすがに何度も実装しているので、ここはすんなりと認識されました。

その後、ESP-WROOM-32の実装です。このモジュールは1.27mmピッチの端面スルーホールになっており表面実装部品として実装することにしたのですが、意外とはんだ付けにてこずりました。

この程度のピッチであればそんなに苦労したことはないのですが、特にGNDの端子について、熱が伝わりづらくうまくはんだが乗らないような感じがしました。

まぁ四苦八苦しながらESP-WROOM-32をはんだ付けしたところで、Arduinoとしての書き込みができない問題に気付きました。

色々調べてみると、IO0をHIGHにした状態でRSTをLOWにしてHIGHに戻すとシリアルコンソールに文字が出ていることに気づきました。これはうまくESP32は起動しており、シリアル接続もうまくできているが、自動リセット周りが何かおかしいぞ・・・ということであたりをつけて調べていると、自動リセット回路にプルアップが足りていないことを発見しました。

これは凡ミス・・(こういう回路のピンに求める条件みたいなのをテストするような仕組みはないのかな?、ソフトウェアの単体テストで書くアサーションのような・・)

ということで、とりあえず手元にあった10KΩの抵抗でプルアップを付け足したところ、無事、Arduinoとしての書き込みができました。

自動リセット回路だけでなく、IO0やRSTに対応するスイッチをつけておいてもよかったかなと感じました。

さて、最後は大量のフルカラーLEDです。

その前に、LED制御信号線に問題があることに気づきました。まず3.3Vレベルの信号線と5Vレベルの信号線につけているラベルが逆になっており、シルクの記載と実際に流れる信号レベルが異なっていました。

まぁこれはシルクの記載を無視してジャンパすれば問題なさそう。

そしてもう一つは、3.3Vレベルの信号線が実際のフルカラーLEDの制御ポートと接続されていない問題がありました。

これは大問題で、接続されていないので、当然信号をいくら出力してもフルカラーLEDには到達しません。

原因となっているのがこのラベルのようで、これDIN5とIO27というラベルがくっついており、横切っている配線と2つのラベルはくっついていない状態だったのです。

設計図がこうなっていると、DRCでも配線ミスとして検出されないため、結果として必要な結線を見落としてしまっていました・・

まぁここも必要な配線をジャンパすることで、問題を解決できました。

気を取り直してフルカラーLEDの実装です。

まず1つ実装してみて、ESP32から制御できるかを確かめました。

簡単にESP32から制御するために、ここからはMicroPythonを用いることにしました。

ThonnyというMicroPython用のIDEを使って、MicroPythonのファームウェアをまず焼きこんで、その後以下のようなプログラムを転送して動作を確認しました。 ESP32向けのMicroPythonにはNeoPixel互換のフルカラーLEDを制御するためのモジュールが標準搭載されているので本当に簡単に制御できました。

import neopixel
import machine
import time
np = neopixel.NeoPixel(machine.Pin(27), 64)

count = 0
while True:
    for i in range(64):
        np[i] = (0,((i + count)%8)*2,((int(i/8) + count)%8)*2)
    np.write()
    time.sleep(0.1)
    count = count + 1

Arduinoだと、(特にWindowsだと)コンパイルが非常に遅く、転送も含めると開発のイテレーションが非常に遅くなってしまい、イライラするのですが、MicroPythonだと、さっと書いたコードを実行できるのでストレスなく動作テストができました。

さて、ここからはフルカラーLEDをどんどん実装していって、キリの良いところで動作テストをすることを繰り返しました。

このフルカラーLEDはデイジーチェーンで数珠繋ぎに接続されているので、あるLEDのはんだ付けがうまくできてない場合は、そのLEDより先は全部制御できなくなるため、これを頼りにはんだ付けを進めました。

そしてついに64個すべてのLEDの実装が完了しました。(肩凝った・・)

まぁここまでできれば、あとは好きな模様を表示したり、WiFi経由で表示内容を制御するなど、応用先は様々ありそうです。

まぁ今回は基板の機能が一通り動くことを確認できたということで、ひとまず記事にしました。

まとめ

ESP32をコアとした8×8=64個のフルカラーLEDを制御する開発ボードを作りました。 表面実装部品が結構ありましたが、実装面で苦労することはあまりなく、はんだ付けが少しは上達したかなと感じました。

ESP32の開発はコンパイルが遅いという印象でしたが、MicroPythonを使うことで迅速に開発サイクルを回すことができました。

回路のミスもいくつかありましたが、切り分けがうまくでき、そこまで悩まずに対処できたのもよかったです。

今までESP-WROOM-32を使うときには開発ボードを使っていましたが、今回初めて自作の基板に直接実装することを試すことができました。今後は自作のガジェットにも積極的にESP32を採用できそうです。

エンジニアパパと4歳の娘で2024年に作ったもの

娘も4歳となり、何かを親が作る、というより「親と一緒に作る」ことが増えてきました。 今年も細かいモノづくりをたくさんおこなったので。年末ということで一気にまとめて紹介してみようと思います。

この記事は子育てエンジニア Advent Calendar 2024の12/07の記事です。 昨日は今年も3人育児しながらエンジニアやってる - ビットの海でした。(3人の子育て大変そうです・・) 我が家は妻と私、4歳の娘の3人家族です。

サランラップの箱と輪ゴムで弦楽器

輪ゴムを使うとなんでも楽器にできます。 一応コマの部分を左右にスライドさせることで音階を演奏できるようにしてみました。

ペットボトルと輪ゴムで楽器

ほら、なんでも楽器になりますね。ペットボトルは切り口が鋭利になるので、養生テープでガードしました

魔法のスティックの補修

ショッピングモールの携帯ショップのアンケートとひきかえにもらった光る魔法のスティックですが、早々に先っぽが折れてしまいました。ということで先っぽだけ3Dプリンタで作ることにしました。

折角なので様々な形にして光と影で遊べるようにしてみました。

3歳の娘と作るスイッチ付きの電子工作

まぁ自分が電子工作好きなので、なんとか娘と一緒にできないかと考えた末のアイデアです。 はんだづけなどは危なくてできないし、実際の回路の組み立てなどは親がやることになるので、じゃあどこを娘にやってもらうか、などを考えながら取り組みました。

www.youtube.com

牛乳パック工作

自分が幼い頃に牛乳パックで色々作ったな・・と思いながら娘と遊べるおもちゃを作りました。 娘には色塗りをお願いしました

セルフ方式バレンタイン

妻提案で、チョコフォンデュのようなバレンタインデザートを実施しました。 チョコレートを湯煎で溶かすところから娘と一緒に作業するスタイルです。 娘も楽しんでおり、しばらくは「またチョコフォンデュしようよ!」と言ってきました(特別な日のイベント、ということでそんな頻繁にはしませんが・・)

雪だるま

珍しく雪が積もったので、公園で雪だるまを作りました。

コアラのマーチの箱でぼんぼり

3月ごろにコアラのマーチの空き箱ができたのでなんとかぼんぼりみたいにできないかなと試行錯誤しました。

貝殻をおもちゃにする

夕食のハマグリの殻で遊んだのがきっかけで集め始めました。 ハマグリ、アサリ、シジミ、ホタテ、アワビが集まりました(後半は集めたくて夕食を決めたりもしました)

並べてみたり、擦ってみたり、ぶつけてみたりと、「おはじき」的に楽しみました。 鋭利な部分がある貝もあるので注意です。

謎のくじ引きの工作

ティッシュ箱の中に、さまざまな文字や絵の描いた紙を入れてつくった「くじ引き」です。 引き当てた紙をグルーピングしてポーカーのようにして「役」を作る、みたいな遊びをしました。(役は自由に想像して作って良い)

新聞紙で儀式めいた家

図書館から借りてきた新聞紙の工作の本を参考に作りました。 もっとたくさん新聞紙があればもっと大きな家が作れそうだったのですが、枚数が足りず・・あいにくここまででした。

お化けの形のクッキー型

以前作った3Dプリンタ製のクッキー型にまた挑戦しました。今回はお化けの形をしたものです。 パソコンでデザインする様子を娘に見せつつ3Dプリントするところまでやってみせました。娘はデザインレビュー役です。

万華鏡づくり

レストランのおもちゃで万華鏡があったのですが、他にも欲しいものがありもらいそびれてしまったので、自分で作ることにしました。 たまたま家に転がっていたアクリル板を切ってサランラップの芯の中に入れました。

おもちゃ箱からビーズなどを取り出してきて、万華鏡のマテリアルを色々交換して遊びました。

録音再生モジュール

私が趣味で使おうと思っていた、無骨な録音再生モジュールに、雑に3Dプリンタで枠をつけたものをおもちゃとして与えてみました。 少し説明すると仕組みを理解して色々遊んでいました。(流石に無骨すぎて危なさもあるので、後で回収しました)

Viscuit, ScratchJr

STEM教育入門ということで、iPadで少し遊ばせてみました。 Viscuitは少し高度なデジタルお絵描きツールとして、ScratchJrもシールを貼る感じであまりロジックの使い方は理解していないようですが遊んでくれました。

たまに遊びたいと言われることがあります。

ATOM Printerで遊ぶ

以前買っていたATOM Printerを使ってポケモンなどのキャラクターを印刷して、「塗り絵」として渡してみました。 まぁレシート用紙は小さいし、色も塗りづらいので塗り絵としては微妙ですが、しばらく「ピカチュウを印刷して〜」みたいなやりとりがありました。

リビング夏モード

リビングの壁に幼稚園の壁のように季節に合わせた装飾を施す活動を初めてみました。 第一弾としては打ち上げ花火。雑に丸く画用紙を切ったものを並べるだけなので、娘にハサミで画用紙を切ってもらったりして一緒に作ることができました。

リビング七夕モード

リビングの壁飾りのネクストバージョン。娘が率先して色紙をテープで貼り付けた飾りを作ったので、親も折り紙を使った切り紙を披露したりして一緒に作りました。

リビング海モード

七夕も終わったので海の生き物を作って貼ってみました。

3Dプリンタでお絵描き定規を作る

3Dプリンタでお絵描き定規を作りました。単純な図形から、写真から生成した娘の顔まで、様々な定規を作ってみました。

こどもちゃれんじのお絵描き定規

上と同じ要領でこどもちゃれんじのダイレクトメールで紹介されていた定規とそっくりなおもちゃも作ってみました。

ポッドキャスト風音声を録音する遊び

公開はしていませんが、娘とインタビュー形式のポッドキャスト風の音声を録音する遊びをしました。 非常にかわいかったので(親バカ)、祖父母にも送って喜ばれました。

DFPlayer Miniで子供用おもちゃ再び

以前に作ったおもちゃですが、音楽を差し替えてたまに遊んでいます。もう少しボタンを増やしたいな。 inajob.hatenablog.jp

リエーターパソコン

ひらがなを勉強するにあたり、「あいうえお表」があると良いということで、壁に貼るものを使っていたのですが、もっと携帯性に優れたもの、ということでラップトップ型のあいうえお表を作ってみました。

看護休暇を取るからには全力

カスピ海ヨーグルトのパッケージを活用してペンギン?を作ってみました

空き箱工作

お菓子の空き箱を使って、ちょっとしたジオラマのようなものを作ってみました。娘はこれでごっこ遊びなどをして楽しんでくれました。

TERADAMOKEI感がありますね

4歳の娘とパソコンの絵

想像通り、私は結構リビングでパソコンを触っていることが多いのですが、娘にもそれはバレており、そのような絵をよく描いてくれます。

ワープロソフトで簡易ひらがなクイズ

作った、というと大げさですが、画面に適当な文字入力ができるソフトを表示して、そこにひらがなを入力するだけで、ひらがなクイズが完成です。

リビング雪モード

娘が率先して、リビングの壁を雪モードにしてくれました。親から始めたリビングの壁の装飾ですが、早くも娘がクリエイティビティを発揮してくれてうれしいです。

段ボールでバス

わんぱくだんの絵本で出てきたということで、自分も作りたい、と娘が言い出したので一緒に作りました。 この段ボールは2年前にクリスマスツリーとして使ったものですが、その後、窓をつけて「家」となりそしてバスとなりました。

パターン切り紙

折り紙を折り曲げてテキトーに切ることで、きれいなパターンの切り紙が作れるので、一緒に作りました。 自分が小さい頃、これ好きだったんだよなー

プチッとビーズジョイント

ダイソーのプチっとビーズを分岐、合流させるためのアタッチメントを3Dプリンタで作りました。

3Dプリンタでビー玉迷路

よく見かけるおもちゃを作ってみました。が、まだ娘には早かったようで迷路をクリアできずに(文字通り)投げ出してしまいました・・残念。 データはこちらのものを使わせてもらいました: https://www.printables.com/model/272870-05-marble-maze

ビー玉でコリントゲーム的なおもちゃの試作

同じくこちらもまだ難しかったみたいです。木の板も釘も鋭利で危ないので早々に片付けました。

3歳の娘と小麦粘土

粘土遊びは、娘が集中しているので、親も負けじと隣で作品を作って張り合っています。

クリスマスリース

近所で材料を集めて、クリスマスリースを作りました。去年はツルと松ぼっくりが見つからなかったのですが、今年こそはと調べていたので材料をそろえることができました。

まとめと宣伝

もともとものづくりをするのが趣味なのですが、子育てを始めるにあたり、そういう活動は出来なくなるな・・・と思っていました。

しかし、娘の成長に合わせて一緒にものづくりするのは、このくらいの年齢になれば全然できることがわかり、今年はその範囲で様々なモノづくりができました。 おもちゃ作りはまさに「顧客がそこにる」ということで、一人での自己満足的なものづくりとはまた違う楽しさや挑戦があります。 また、おもちゃを一緒に作ること自体が一種の「遊び」となり、娘との楽しい時間を過ごすことができており、このような体験が何か娘の成長の足しになったら良いなと思っています。

このあたりのアウトプットは育児Scrapboxなどにも書き溜めてありますので、ぜひ参加してください! (そして、あなたの育児Tipsも書き込んで下さい!)

scrapbox.io

また、私のポッドキャストでもこういった、「ものづくり子育て」について紹介しています。この記事を見て興味を持った方はぜひ聞いてみてください。

open.spotify.com

自分で設計する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