物理ボタンを付けてRaspberry Piを安全にシャットダウンする方法

はじめに この記事では、Raspberry PiのGPIOに物理ボタンを取り付けて、ワンプッシュで安全にシャットダウンする方法を紹介します。 ヘッドレス運用でモニターやキーボードを繋いでいないRaspberry Pi向けの内容です。 Raspberry Piの電源をオフする場合にUSB電源コードをそのまま引っこ抜くと、運が悪い場合はSDカード内のOSが壊れる可能性があります(私もその経験あります)。かと言って、SSHでログインして $ sudo shutdown -h now を毎回実行するのも非常に面倒です。物理ボタンを付ければ、コードを抜くだけの感覚で安全に電源を落とせます。 ここで紹介する手順は次のとおりです。 Raspberry PiのGPIOピンに物理ボタンを設置 ボタンを監視するPythonコードを作成 ②をシステムサービスへ登録 記事の後半ではさらにLEDも追加して、Raspberry Piの電源オンオフ状態を分かりやすく工夫しました!ぜひ最後までご覧ください。 動画を再生 Raspberry PiのGPIOピンに物理ボタンを設置 押している間だけ導通するモーメンタリー型のスイッチ を使用しました。 このスイッチをRaspberry PiのGPIO27(物理番号13)とGround(物理番号14)に繋ぎます。 ボタンを監視するPythonコード 次に、適当な場所に shutdown_by_button.py としてボタンを監視するPythonコードを作成します。 #!/usr/bin/env python import RPi.GPIO as GPIO import os, time GPIO.setmode(GPIO.BCM) GPIO.setup(27, GPIO.IN, pull_up_down = GPIO.PUD_UP) # GPIO27--Button--GND def shutdown(channel): os.system("sudo shutdown -h now") GPIO.add_event_detect(27, GPIO.FALLING, callback = shutdown, bouncetime = 3000) while 1: time.sleep(100) 上記プログラムの内容はGPIO.add_event_detect でGPIOのイベントを検知し、shutdown 関数を呼び出して sudo shutdown -h now を実行させています。 ...

公開: 2023年7月20日 · 更新: 2026年5月30日 · Toshihiko Arai

Raspberry PiのSDカードを丸ごとコピーしてバックアップする方法、やり方

はじめに Raspberry PiのSDカードを丸ごとコピーしてバックアップする方法をご紹介いたします。この操作はRaspberry PiのUSBに別のSDカードを挿して行います。Raspberry Pi 4だけでなく、3など他のバージョンでも使える方法です。 SDカードの内容をそのままコピーするには色々な方法が考えられるかと思います。Raspberry PiへはSSHでログインしるので、CUIで動かせるものを探してました。はじめにddコマンドでコピーできないだろうかと考えましたが、このコマンドではSDカードが小さい容量になった場合は書き込めないようです。そこで「rpi-clone」というツールを発見。 「rpi-clone」ではSDカードの容量が変わっても問題なく丸ごとOSをコピー可能です。 この記事では「rpi-clone」を使ってRaspberry Pi OSを複製バックアップしていきます。 ちなみにGUI操作でしたら「SD Card Copier」というソフトウェアが良さそうです。 rpi-cloneのインストール Raspberry PiへSSHでログインし、 rpi-clone をインストールします。 $ git clone https://github.com/billw2/rpi-clone.git $ cd rpi-clone $ sudo cp rpi-clone rpi-clone-setup /usr/local/sbin これで rpi-clone が使える状態になりました。 SDカードのデバイス名を調べる 次にRaspberry PiのUSBへバックアップ用のSDカードを挿します。 以下の lsblk コマンドを実行してSDカードのデバイス名を調べます。 $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 1 7.4G 0 disk |-sda1 8:1 1 256M 0 part /media/rpi-first-boot-wizard/boot `-sda2 8:2 1 7.1G 0 part /media/rpi-first-boot-wizard/rootfs mmcblk0 179:0 0 29G 0 disk |-mmcblk0p1 179:1 0 256M 0 part /boot `-mmcblk0p2 179:2 0 28.7G 0 part / ここでは sda がSDカードの名前であることがわかります。 他のデバイスと間違えないよう、サイズなどよく確認して十分に注意してください。 ...

公開: 2023年7月20日 · 更新: 2026年3月12日 · Toshihiko Arai
【Raspberry Pi】ステップ応答による抵抗値の測定

【Raspberry Pi】ステップ応答による抵抗値の測定

はじめに この記事では、Raspberry Pi(ラズパイ)でステップ応答による抵抗値を測定する方法を解説していく。 Raspberry PiはArduinoのようなアナログ入力ピンが備えられていないため、抵抗値を測りたい場合に通常ADコンバータが必要。しかし、ADコンバータを使わなくても抵抗値を測定する方法がある。それがステップ応答による測定である。 この記事では最初にステップ応答の原理を詳わしく説明し、後半ではステップ応答による抵抗値を測定するプログラムの紹介をする。 ステップ応答による抵抗値の測定 ステップ応答による抵抗値の測定を説明していく。 まず、ステップ応答による抵抗値の測定ではコンデンサを使う。電荷が空の状態のコンデンサへ3.3Vの電圧をかける。そしてコンデンサが約1.65Vの電位(デジタルピンがHIGH)になるまでに掛かった時間を測ることで抵抗値の計算できる。 次からは回路図を使って説明していく。 抵抗値を測定する回路図 今回使用する回路は図のとおり。可変抵抗R_POTの抵抗値を測定する。 R1とR2は、Raspberry PiのGPIOへ過大な電流が流れ込まないようにするための保護抵抗である。話をわかりやすくするため、ここではいったん省略して説明する。また、R_POTも固定抵抗Rとして説明する。すると、次のようなシンプルな回路図になる。 {{#step-response-flow}} ステップ応答で測定する手順 これから簡略した回路図を使って、ステップ応答で測定する手順を説明していく。 手順は次の通り。 コンデンサを放電する コンデンサの電荷を空にする コンデンサへ充電するを開始する コンデンサの電位を1.65V以上にする ❶コンデンサを放電する はじめに、コンデンサの電荷をすべて放電しておく。そのため図のようにA点のGPIOを入力モードにし、B点のGPIOを出力モードに設定する。また、B点はLOWに設定しGNDと同じ電位にする。 A点は入力モードのためハイインピーダンスとなり、ほとんど電流は流れない。だから、コンデンサに溜まった電荷はB点を通して放電される。 ❷コンデンサの電荷を空にする コンデンサの電荷が空の状態、つまりコンデンサの電圧が0Vの状態にしておく。これで充電を開始する準備が整った。 ❸コンデンサへ充電を開始する コンデンサへ充電を開始すると同時に、この瞬間から時間の測定を行う。 コンデンサへ充電をするためには、A点のGPIOを出力モードにしHIGHの状態に設定する。また、B点のGPIOは入力モードに設定する。 A点はHIGHのため3.3Vの信号を出力する。B点はハイインピーダンスなので電流がほとんど流れない。よって、A点から電流が抵抗Rを通してコンデンサCへ充電されていく。Rの抵抗値が大きいほど充電に時間がかかり、抵抗値が小さいほど充電時間は短くなる。 ❹コンデンサの電位を1.65V以上にする コンデンサへ電荷が溜まっていくと、B点の電圧は上がっていく。そして約1.65Vを超えた瞬間、B点のデジタル入力はHIGHとなる。この時までに掛かった時間、つまりコンデンサの電圧が0Vから約1.65Vまで上がるのに掛かった時間をt秒とする。 RC直列回路における抵抗値Rを算出する計算式 RC直列回路における抵抗値Rを算出する計算式の説明をする。 ここでは、抵抗R[Ω]・コンデンサC[F]・直流電源E[V]とした。 コンデンサの電圧を時間関数Vc(t)[V]として経過時間t[s]を図で表すと次のようになる。 この時、コンデンサの電圧Vc(t)は次式で表される。つまり図の青い曲線のことである。 $$ v_c(t) = E(1 - e^{-\frac{1}{CR}{t}}) \tag1$$ この式をtで微分すると、青い曲線の傾きがわかる。微分した結果は次の通り。 $$ \frac{dVc(t)}{dt} = Et + \frac{E}{CR}e^{-\frac{1}{CR}t} \tag2$$ この式にt=0を代入すると次の式が導き出される。これが図の赤い直線の傾きである。 $$ V=\frac{E}{CR}t \tag3 $$ さて、0Vから1.65Vまではほぼ時間と比例してコンデンサの電圧は上昇していく。 つまり赤い線と青い線は1.65Vまでは同じ傾きだとみなせる。 だから式3を展開してRを求める事ができる。 $$ R = \frac{E}{CV}t \tag4$$ ...

公開: 2020年12月28日 · 更新: 2026年3月25日 · Toshihiko Arai

【Raspberry Pi】ECMで音センサつくってみた

はじめに こんなこと、やります。 エレクレットマイク(ECM)を使って音センサの制作 交流信号を直流信号へ変換する ADコンバータを使ってRaspberry Piで音を認識させる 音量に合わせてLEDを点灯させる Raspberry Piで音が感知できるように実験してみました。この記事では音センサの作り方をメインにご紹介します。音センサは交流回路の勉強にもなって楽しいので、ぜひ挑戦してみてください。 こちらの動画のように、Raspberry Piと自作のECMマイクを使って、 音量に合わせてLEDを点灯させるサウンドレベルインジケーター のようなことやっていきます! 音センサの概要 音センサを実現するための概要を説明します。 音センサの仕組み 今回製作した音センサの仕組みは次のようになります。 マイクロフォン(ECM)で音声を集音 アンプ回路で音声を増幅 音声の交流信号を直流信号に変換 直流信号をADコンバータでデジタル変換 SPI通信でデジタル信号をRaspberry Piで読み取る エレクレットマイク(ECM) 音を感知するためのECMマイクは、以前に自作したものを使用します。 作るのが面倒な方は、ECMとアンプがモジュール化されたものを使うと便利です。 また、Raspberry Piはお好きなものをお使いください。 マイクアンプの製作 ECMで集音した信号は、電圧が数十mV程度と小さすぎます。よって、そのままでは使えないのでアンプを通して十分大きな信号に変換してあます。 非反転増幅回路 オペアンプを使って、非反転増幅回路でマイク信号を増幅させます。この回路では、1kΩと470kΩの抵抗によって470倍の信号増幅が可能です。 今回は音質に拘らないので、NJM4558やTL072などの安価なオペアンプで十分です。 増幅回路の波形を観察 ファンクションジェネレータでサイン波を鳴らし、マイクで集音して増幅回路に通してみました。その時の入力側と出力側の波形のようすです。 写真のように10mVp-p程度だったECM出力の電圧が、アンプを通したことで4Vp-p程度まで増幅されました。ただし、過増幅のために波形は歪んでいます。人間の耳で聞けば割れた音になってますが、センサの用途ですのでこれで問題ありません。あくまで音を感知できればいいので、音質は気にしなくて良いです。 発振器のすすめ ところで、こういった低周波の実験には「発振器」があると便利です。発振器は「ファンクションジェネレータ」や「オシレーター」とも呼ばれます。 ファンクションジェネレータは自作することも可能です。 交流信号を直流信号に変換する(AC-DC) マイクアンプで増幅された信号は、GNDの0Vを中心にプラスマイナスへ振れる交流信号です。よって、このままではADコンバータに入力できません。そこで、交流信号を直流信号に変換するAC-DCコンバータを作っていきます。 作ると言っても、とても簡単です。つぎのように半波整流回路を利用します。 AC-DCコンバータの回路 このAC-DCコンバータの回路の仕組みはつぎのとおりです。 0Vを中心に上下する交流信号の「プラス側の信号のみ」をダイオードで取り出す ダイオードを通過した信号は、1uのコンデンサに蓄電され、そして100kΩの抵抗へ流れていく 出力が3.3V以上の電圧にならないよう、ツェナーダイオードでリミッターをかける AC-DC変換後の波形はこんな感じのものになります。 ダイオードとツェナーダイオードは、小信号用のものをお使いいただけます。 なお、ダイオードを通過した信号はOUTへも流れますが、OUT先の入力抵抗(入力インピーダンス)は非常に高いと想定しているため、1uに蓄えられた電荷のほとんどが100kΩの抵抗へ流れることになります。このことは、インピーダンスについて学ぶと理解できますので、詳しく学びたい方はこちらの書籍をおすすめします。(私のバイブルです) AC-DCコンバータの実際 こちらの写真はマイクアンプから出力された信号と、「ダイオードのみ」を通した時の信号をオシロスコープで観察したものです。 ダイオードを通すと、プラス側の信号のみを取り出すことができます。またダイオードの向きを反対にすれば、マイナス側の信号のみを取り出せます。 ダイオードでは順方向電圧があり、ダイオードを通った信号は0.6Vほど電圧が低くなります。上の写真からもそのようすが観察できます。 つまり、0.6V以上の入力信号でないとこの回路は動作しません。ですから、アンプ回路でECMの微弱信号を大きな電圧に増幅する必要があったのですね。 もしも0Vから動作させたい場合は、理想ダイオード回路を使って実現できます。 ...

公開: 2020年11月29日 · 更新: 2026年3月13日 · Toshihiko Arai

【Raspberry Pi】AirPlayで無線オーディオを実現する

はじめに こんなこと、やります。 Raspberry PiでAirPlayサーバー環境構築 iOSやmacOSの音楽を、AirPlay経由で、ラズパイからオーディオ再生 Raspberry PiでUSB DACを使う Raspberry PiでI2C対応のDACを使う(ハイレゾ対応) Raspberry PiでAirPlayサーバー環境構築 Raspberry PiでAirPlayをつかえるように、AirPlayサーバーの環境構築を行なっていきます。 AirPlayサーバーのライブラリshairport-syncをインストールします。ただし、shairport-syncは音声のみの対応で映像の再生はできません。 apt-getを最新にしておく shairport-syncをインストールする前に、いろいろなライブラリをインストールする必要があります。インストールエラーを防ぐためにも、apt-getを最新のものにします。 $ sudo apt-get update && sudo apt-get upgrade 依存ライブラリのインストール shairport-syncに必要なライブラリを、まとめてインストールします。 $ sudo apt-get install git autoconf libdaemon-dev libpopt-dev libconfig-dev libasound2-dev libpulse-dev libavahi-client-dev libssl-dev libsoxr-dev これらの依存ライブラリの役割をざっくりと調べてみました。 ライブラリ名 役割 git gitコマンドを使えるようにする autoconf configureを自動で生成してくれる libdaemon-dev 軽量な C ライブラリで、UNIX デーモンを書きやすくしてくれる libpopt-dev コマンドラインのパラメータによって変数を設定できるようにする libconfig-dev configファイルの構造をパースして扱いやすくしてくれる libasound2-dev ALSAアプリケーション開発に必要な共有ライブラリ libpulse-dev PulseAudio開発に必要なライブラリ libavahi-client-dev ローカルネットワーク上のサービスやホストを検索可能にする libssl-dev OpenSSLを使えるようにする libsoxr-dev リサンプリングして音質を良くしてくれる Tip ALSAとは、Advanced Linux Sound Architectureの略で、Linuxでサウンドカードのデバイスドライバを提供するコンポーネントです。 ...

公開: 2019年9月14日 · 更新: 2026年3月19日 · Toshihiko Arai