Fusion PCB へ発注していた「和文ニュース bot」のメイン基板が届いたので、さっそく部品を取り付けました。
今回の基板には、Raspberry Pi との40ピン接続部、Twin-T 回路、音量調整回路、操作ボタンなど、これまで個別に配線していた回路を一枚にまとめています。
ジャンパ線だらけだった試作状態から、ようやく一つの装置らしい形になってきました。
メイン基板へ部品を実装

部品の取り付けは、背の低いものから順番に進めました。
一般的には、次のような順序で取り付けると作業しやすくなります。
- SMD の抵抗やコンデンサ
- ダイオードや小型半導体
- IC ソケットやピンヘッダ
- 端子台やコネクタ
- ポテンショメータなどの背が高い部品
最初に電源を入れる前には、テスターを使って5V、3.3V、GND 間が短絡していないことを確認します。
特に今回の基板は、40ピンコネクタを介して Raspberry Pi へ直接接続します。電源端子の配線を間違えると Raspberry Pi 本体まで壊してしまうため、いきなり本体を取り付けず、まず基板単体で導通と電圧を確認しました。
回路に2か所のミスを発見
実装を終えて動作を確認したところ、残念ながら最初から正常に動いてはくれませんでした。
調べてみると、回路に2か所のミスが見つかりました。
該当箇所を修正したところ、ようやく期待どおりに動作するようになりました。
それにしても、なかなか一度ではうまくいきません。
原因は、ブレッドボードで試行錯誤して回路を変更したあと、その変更内容を回路図へ正しく反映していなかったことです。KiCad の基板データは回路図をもとに作成しているため、回路図が古いままでは、ブレッドボードで動いていた最終回路と異なる基板ができ上がってしまいます。
試作中は抵抗を追加したり、GPIO の接続先を変えたり、部品定数を変更したりします。その場では覚えているつもりでも、時間がたつと、どこを変更したのか分からなくなります。
今回の失敗から、次の手順を徹底する必要があると改めて感じました。
- ブレッドボード上の変更は、その都度回路図へ反映する
- 回路図へ変更日や理由を記録する
- 基板設計前に実機と回路図を照合する
- 回路図を更新したら基板側のネット情報も更新する
- 発注前に回路図、基板、実配線をもう一度見比べる
- 動作確認済みの回路へ版番号を付ける
記憶を頼りに基板を設計すると、どうしても抜けが出ます。回路図は完成品のためだけでなく、試作途中の状態を記録するためにも重要です。
修正後は正常に動作

最初は少し手こずりましたが、2か所を修正したあとは、メイン基板が正常に動くようになりました。
そこで今度は、以前製作した Raspberry Pi 電源コントローラ基板の Ver.1.0 を取り付け、システム全体を起動してみました。
この電源コントローラでは、以前、Raspberry Pi の GPIO 電圧が完全な Low にならず、シャットダウン後に主電源を切断できないという問題に悩まされました。
そのときは、PIC 側が論理レベルを安定して判定できていないと考え、抵抗を追加して入力電圧を調整しました。
ところが、今回は以前のトラブルがうそのように、何の問題もなく動作します。
起動とシャットダウンを何度繰り返しても、動作は安定しています。
なぜ今回は正常に動くのか
正常に動いているのはよいことですが、以前発生した不具合が再現しないため、少々すっきりしません。
考えられる要因としては、次のようなものがあります。
- Raspberry Pi と基板間の配線が短くなった
- GND の接続状態が改善した
- GPIO へ接続された回路の負荷が変わった
- プルアップ/プルダウンの状態が変化した
- 電源の立ち上がりや切れるタイミングが変わった
- 使用した Raspberry Pi や OS の状態が異なっていた
- ジャンパ線やコネクタの接触抵抗がなくなった
- 以前の測定条件と今回の条件が一致していなかった
前回は「プルアップのしきい値が不安定」と考えましたが、正確には、GPIO の出力電圧と PIC 入力の論理しきい値との関係が不安定だった可能性があります。
論理入力は、ある電圧を境に単純に High と Low へ切り替わるわけではありません。データシートには Low として保証される最大入力電圧と、High として保証される最小入力電圧が規定され、その中間はどちらとも保証されない不定領域になります。
以前測定した約 1.5V がこの不定領域に入っていたとすれば、配線や電源、個体差、温度などのわずかな違いによって判定結果が変化しても不思議ではありません。
本来なら、GPIO と PIC の両側をオシロスコープで観測し、起動時とシャットダウン時の電圧変化を確認するところです。
今回は何度試しても問題なく動いているので、ひとまず先へ進めることにします。ただし、再び症状が出たときに調べられるよう、測定ポイントは記録しておいた方がよさそうです。
電源ボタンからニュースを送出

電源ボタンを押すと、電源コントローラのリレーが ON になり、Raspberry Pi へ 5V が供給されます。
Raspberry P iの起動後、ニュース取得用の Python プログラムが自動的に立ち上がり、インターネットから最新ニュースを取得します。
取得したニュースタイトルは、読みをカタカナへ変換したあと、和文モールス符号としてスピーカーから流れ始めます。
ここまでの基本動作は、次のようになりました。
- 電源ボタンを押す
- Raspberry P iへ電源が供給される
- OS が起動する
- ニュース送出プログラムが自動起動する
- インターネットからニュースを取得する
- ニュースタイトルを和文モールスへ変換する
- LCD へ文字を表示しながら音を送出する
- 終了操作で OS をシャットダウンする
- 終了後、電源コントローラが主電源を切る
当初思い描いていた装置の動作に、かなり近づいてきました。
操作ボタンの割り当て

操作ボタンの割り当てを忘れないよう、ここにメモとして残しておきます。
ボタンが増えてくると、どの GPIO へ何を接続したのか分からなくなりがちです。回路図だけでなく、実際の操作パネルに対応した一覧も作っておくと、ソフトウェアの修正やケース設計のときに役立ちます。
プログラム側でも、GPIO 番号を処理の中へ直接書き込むのではなく、冒頭で名前を付けてまとめて定義しておけば変更しやすくなります。
また、Raspberry Pi では物理ピン番号、BCM GPIO 番号、WiringPi 番号が混在しやすいため、メモにはどの番号体系を使用しているのかも明記しておく必要があります。
改良版電源コントローラの搭載位置

新たに製作した小型の Raspberry Pi 電源コントローラ基板は、このようにメイン基板の上へ重ねて取り付ける予定です。
メイン基板には、あらかじめ取り付け穴と接続位置を用意してあります。スペーサーを使って基板を固定すれば、ジャンパ線を短くでき、装置全体もコンパクトにまとめられます。
ただし、現時点では旧バージョンの Ver.1.0 基板で正常に動いています。まずはシステム全体の動作確認を優先し、新しい電源コントローラの組み立ては、しばらく後でもよさそうです。
新基板を取り付ける際には、次の点を確認する必要があります。
- 電源入力と出力の極性
- GPIO 信号の接続先
- 基板同士の GND 接続
- スペーサーの高さ
- 部品やハンダ面の接触
- 端子台へ工具を入れられるか
- リレーやFET周辺の発熱
- シャットダウン後に確実に5Vが切れるか
- USB などから電源が回り込んでいないか
正常に動作している旧基板と、各端子の電圧やタイミングを比較しながら交換すれば、問題が起きた場合も原因を切り分けやすくなります。
次はケースの製作
ハードウェアとソフトウェアがひと通り動くようになったので、次の課題は、これらの基板をどのようにケースへ収めるかです。
せっかく専用基板にまとめたので、最後は操作しやすく、見た目もすっきりしたケースに入れたいところです。
ケースへ組み込むには、少なくとも次の要素を配置する必要があります。
- 20文字×4行の LCD
- LED 内蔵電源スイッチ
- ニュース選択などの操作ボタン
- スピーカー
- 音量調整用ツマミ
- 電源入力端子
- Raspberry Pi の各種コネクタ
- 放熱用の開口部
- 基板固定用の支柱
市販ケースを CNC フライスで加工するか、3D プリンターで専用ケースを作るか、悩むところです。
LCD やスイッチの開口部をきれいに仕上げるなら、3D プリンターでパネルごと作る方法が便利そうです。一方、剛性や耐熱性を重視するなら、市販ケースを CNC で加工する方法にも魅力があります。
いずれにしても、久しぶりに 3D プリンターか CNC フライスの出番になりそうです。
その前に、Fusion 360 の使い方を思い出さなければなりません。
しばらく使っていなかったので、操作方法をすっかり忘れてしまいました。