Raspberry Piでシャットダウンを行う際、デフォルトではOS上からコマンドを打つか、GUI上で選択肢て電源を落とすのが基本です。
しかし、全ての作品がディスプレイやキーボードに繋いであるわけではありません。
電源を抜けば強制的にシャットダウンできますが、データが破損する可能性もあるのでそこは避けたいですよね。
なので、Raspberry Piに外付けの電源スイッチを追加してみたいと思います。
今回は、
・適切なスイッチの選び方
・スイッチの自作方法
・シャットダウン用プログラム作成方法
・電源のONとOFFを見分けやすくする方法
について解説していきます。
プログラムの作成はRaspberry piで行っていますが、紹介しているスイッチや配線はそのままArduinoでも使えます。
※本記事ではRaspbian OSを使った事例を解説しております。
適切なスイッチの選び方
電子工作におけるスイッチには本当にたくさんの種類があります。
その中でもRaspberry Piのシャットダウンに適しているスイッチについて解説していきます。
スイッチの種類
まずスイッチには大きく分けるだけでも10種類あります。
各スイッチについて解説していきます。
押しボタンスイッチ
電子工作ではもっとも一般的なスイッチの1つで、ボタンを押すことでオンとオフの切り替えを行います。
Raspberry Piの場合5Vか3V電圧の電源なので、その電圧で使用しても問題が出ないものを選びましょう。
押しボタンスイッチには、車のクラクションのように押して間だけONになっているスイッチ(別名モーメンタリースイッチ)と、一度押すとONになり、もう一度押すとOFFに切り替わる、例えば懐中電灯のようなものに使われているスイッチ(別名オルタネイトスイッチ)の2種類があります。(詳細後述)
トグルスイッチ(スナップスイッチ)
電子工作でもそれなりに使用頻度が高いスイッチの1つです。
ONとOFFの2ポジションがあるトグルスイッチとONが2つ、OFFが1つの3ポジションがあるトグルスイッチがあります。
3ポジションは例えば片方のONでは赤いLEDが光り、もう片方では緑のLEDが光るといった2通りの出力がしたい場合に使われることが多いです。
ロッカースイッチ
フラットな形状なので多くの電化製品に搭載されています。
トグルスイッチと同じように、2ポジションのモノと3ポジションのモノも存在しています。
部屋の照明などのスイッチもこのロッカースイッチの一種です。
大きな作品や家電製品と連動した作品が作りたいのであれば、電源ボタンとしてオススメです。
スライドスイッチ
上記で紹介したロッカースイッチよりもさらにサイズが小さく、コンパクトなため目立たない部分やスペースがない構造に使われるスイッチとなっています。
おもちゃや目覚まし時計のアラームのON・OFFの切り替えなど広い用途で使われるスイッチですね。
タクタイルスイッチ
タクタイルスイッチも電子工作で使用頻度が非常に高く、目にしたことがある方も多いかもしれません。
基本は4本足のモノが多く出回っています。普段使われているもので言うと、パソコンのキーボードもこのタクタイルスイッチの一種です。
キーロックスイッチ
動作をするのに鍵が必要なスイッチです。
工業機械や自動車などに広く使われているスイッチで、一般家庭の電子工作ではほぼ使われないスイッチになります。
自動車のエンジンをかけるもののようにキーロックスイッチで機械そのものを起動させるタイプもあれば、キーロックスイッチをONにし電源ボタンが別にあるタイプもあります。
ロータリースイッチ
見た目はキーロックスイッチのように円筒状ですが、つまみが何段階かに分かれているスイッチです。
それぞれが独立したスイッチになっています。
ですので、たとえばポジション1では赤いLEDを光らせ、ポジション2では緑のLEDを光らせ、ポジション3では黄色のLEDを光らせるなど、つまみのポジションによって複数の出力を決めることができます。
ディップスイッチ
用途としては、上記で紹介しているロータリスイッチと同じですが、ディップスイッチならではのメリットが2つあります。
1つは、ロータリースイッチよりも省スペースなことです。
そして、もう1つは先ほどのロータリースイッチと異なり
赤いLEDと緑のLEDを同時に点灯させる、など複数の同時出力に対応しています。
ディップスイッチはスイッチ自体がそれぞれ独立している為です。
フットスイッチ
足を使ってONとOFFを調節することができるので、両手が手放せない状況で使用するスイッチです。
こちらはあまり見かけることがなく、私も使ったことはありません。
使用例としては、ミシンやギターのエフェクターなどに広く使われています。
リモコンスイッチ
大きな会議室のように照明のスイッチが大量に必要な場合によく使われるスイッチです。
一般家庭で導入されている照明用のスイッチは100Vの電源線が必要なのに対して、リモコンスイッチの電源線は25Vで良いため配線を小規模で済ませられるというメリットがあります。
電子工作で使われることはほぼ無く、施設で使われるスイッチになりますので、電気工事士の資格が必要になります。
シャットダウンにはモーメンタリースイッチがオススメ
モーメンタリースイッチとは押しボタンスイッチの一種で、ボタン式で押している時のみONになるスイッチのことです。
同じようなスイッチでも、一度押したらONになりっぱなしで、OFFにするにはもう一度ボタンを押さなければいけないスイッチ(オルタネイトスイッチ)も存在しているので、必ずモーメンタリーと名の付いたスイッチを購入するようにしましょう。
モーメンタリースイッチにはアース(GND)を含めピンが2つ・3つ・4つ以上のモノなどたくさん種類がありますが、本記事の用途で使うのであれば基本的にどれを購入してもかまいません。
また、同じような用途ならタクタイルスイッチはどうなの、と思われるかもしれませんが初心者にはデメリットがあります。
確かにタクタイルスイッチは主にキーボードのキーの裏側で使用されているスイッチで、使用用途としてモーメンタリースイッチと大差はありません。
しかし、銅線を接続するという場合「はんだごて」が必要になりますし、はんだごてを使わない接続であれば、ブレッドボードという部品を購入しなければいけません。
ですので、大きさや値段、取り付けやすさを考えて2ピンまたは3ピンのモーメンタリースイッチを購入することをオススメします。
また、モーメンタリースイッチは
・プッシュスイッチ(モーメンタリー式)
・押しボタンスイッチ(モーメンタリー式)
といった別称で呼ばれることもあるので注意が必要です。
モーメンタリースイッチはどこで入手できる?
電子工作のコーナーがあるところであれば広く見かける一般的なスイッチです。
電子部品専門店・ホームセンター・東急ハンズなどでも購入でき、値段は1個100〜200円程度が相場です。
ネットですと複数個売りが基本ですが、探さなくても確実に手に入るので急ぎでない方や近くにお店がない方にはオススメです。
他に必要なパーツ
基本はスイッチとGPIOというRaspberry Piに内蔵されているピンをつなげれば良いだけなのですが、あった方が良いアイテムがいくつかあるのでご紹介します。
ジャンパーワイヤー
普通の銅線でも代用可能で、絶対に無ければいけないという訳ではないのですが、あった方が圧倒的に便利なのがジャンパーワイヤーです。
電子工作にはほぼ必須のアイテムでセンサーなどの機器を繋げたり、試作段階でのブレッドボードを使う場合に大活躍します。
形にもいくつか種類があり、オスとオス、メスとオス、メスとメスの3パターンあり、オスは先端がピンになってるものメスはピンと接続ができる受け口になっています。
どのタイプもまんべんなく使うので、購入する場合はセットのモノがオススメです。
こちらも、秋月電子商店のような小売店が近くにあれば良いですが「どこに売っているの?」という場合は、Amazonでまとめて買うとよいでしょう。店頭と同じかそれより少し安いくらいの価格で手に入ります。
グルーガン
これは、ジャンパーワイヤーとスイッチをホットボンドで固定するために使います。
接着剤でも代用可能ですが、やはりグルーガンの方が圧倒的に抜けにくいですし、耐久性も高いです。
最近は100均でも売られてるようですが、作りが甘いのでなるべく1,000円前後するものを選びましょう。
慣れてくると、グルーガンの替え芯(ロウの部分)のみを購入してライターで温めるなどの荒業をしている人もいますが、危険なので初心者の方は必ずグルーガンで作業を行いましょう。
スイッチの自作方法
今回は
・スイッチを2秒以上長押しした場合にシャットダウンする
・さらに、その状態でまた2秒以上スイッチを長押しすると起動する
というプログラムを作ってみます。
スイッチの加工
まずは外側からはじめていきましょう。
スイッチにメス・メスのジャンパーワイヤーを取り付けます。
わかりやすいように片方を赤、もう片方を黒にしておいた方が後々便利です。
業界の主流的には、電気が来る道(+側)が赤、帰る道(-側)が黒です。
3ピンのスイッチの場合アース(黒)が1つ、で入力が2つなので説明書を読みアースと入力それぞれに黒、赤の配線を行ってください。 (入力の赤線は1つで大丈夫です。)
2ピンの場合はどちらでも大丈夫です。
後は、ジャンパーワイヤーが簡単に抜けないように接着剤またはグルーガンで固定しましょう。
Raspberry Piへの配線
続いてRaspberry Piへの配線についてですが、上記の表のようにGPIOにはそれぞれ役割があります。
公式サイトによるとシャットダウンとパワーアップに使うGPIOはSCLという所にて設定されているのでGPIO3(5番ピン)を使うことにします。
なので、スイッチの配線は赤をGPIO3(5番ピン)黒を9番ピン(上記画像のGroundならどこでも可)に接続します。
ちなみにSCLとは、Raspberry Piがセンサー等のモジュールとデータのやりとりを行う際に使われるI2Cという規格信号の1つ。
クロック信号とも呼ばれ一定の周期で同じ波長の信号を繰り返し出しています。
今回のシャットダウン用スイッチを例にすると、SCLから出ている一定周波数の信号が2秒以上Raspberry Pi流れ込んだ(返ってきた)らシャットダウンするといった解釈です。
シャットダウン用プログラム
続いて内部の設定に移っていきます。
Raspberry Piの主な設定変更の方法は、Windowsと同じように「設定」を開いてラジオボタンやチェックをつけて行う場合と、設定用のプログラムを書き換える場合の2種類です。
シャットダウンに関する設定変更は後者のプログラムの書き換えによって行います。
まず、Raspberry Piを起動しターミナルを開きましょう。
自作のスイッチでシャットダウンを行うには、Raspberry Pi OSのデバイスツリーオーバーレイと呼ばれる部分の設定を変更します。
デバイスツリーオーバーレイとは簡単に言うとRaspberry Piの起動時にハードウェアの情報を読み込む手法の一種です。
Linux系のこの手の内部構造は非常に複雑なので、難しく考えずこれを使うと「簡単にシャットダウンに関する設定ができる」というぐらいの認識で大丈夫です。
下記のプログラムを打ち込みcinfig.txt(OSの設定)にアクセスしてください。
sudo nano /boot/config.txt
すると上記のように水色の文字列が出てきますので、カーソルで一番下に移動し改行し新しいスペースに
dtoverlay=gpio-shutdown,debounce=2000
と入力します。
そしてCtrl+「O」でファイルを上書きし、Ctrl+「X」で閉じます。
その後、Raspberry Piを再起動し、スイッチを2秒間押すことで
起動時はシャットダウン、シャットダウン時は起動することを確かめてみてください。
電源のONとOFFを見分けやすくする方法
これで外付けスイッチでシャットダウンするという目的は達成できました。
しかし、デフォルトのRaspberry Piの設定では、ディスプレイがないと本当にシャットダウンしたかどうかが非常にわかりにくい仕様です。
というのも、起動時もシャットダウン時も電源用の赤LEDが常時点灯しています。
なので、緑のLEDがチカチカしていないかを確認するしか、シャットダウンしているかの判別方法がありません。
本記事では、そこもプログラムによって改善を試みます。
LEDの点灯にパラメータが設定されていないか調べてみたところ、なんと20種類以上ありました。
今回は起動中は赤LEDは点灯せず、シャットダウン時には赤LEDが点灯する「one-shot」というパラメータに変更していきます。
参考にしたのは上記の海外サイトです。
本記事でオススメする「one-shot」以外にも様々なパラメータが記載されています。
電源用プログラム
こちらもターミナルから実行していきます。
先ほどと同じようにターミナルでconfig.txtを開きます。
sudo nano /boot/config.txt
先ほど追記したプログラムの下に
dtparam=pwr_led_trigger=oneshot
とさらに追記しCtrl+「O」でファイルを上書きし、Ctrl+「X」で閉じます。
その後、Raspberry Piを再起動しましょう。
電源ON時には赤いLEDは消灯しており、OFFになっている時に赤いLEDが点灯していれば成功です。
まとめ
今回は、モーメンタリースイッチを使った安価にRaspberry Piの電源スイッチを自作する方法について解説しました。
Raspberry Piをモニターに繋がないで使用したい方には、ほぼ必須の作業なので安価に実装できるこの方法がとてもオススメです。
応用編として、モーメンタリースイッチ以外にも、例えばリモコンでのシャットダウンや、アレクサやSiriから電源起動させるなどもできますが、基本の原理は同じです。
ご要望があれば、応用編についても詳しく解説したいと考えています。
それでは、お読みいただきありがとうございました。