ラズパイ5をミニPC化するキット!PIRONMAN5【レビュー】

【PR】この記事には広告が含まれています。

ラズパイ5をミニPC化するキット!PIRONMAN5【レビュー】

Raspberry Pi 5を使って、自作ミニPCを実現できるPIRONMAN5というキットをレビューします。このキットはRaspberry Pi 5をベースに、コンパクトでパワフルなデスクトップPCを構築するためのものです。

もはやラズパイ本体がどこに取り付けてあるのかわからないほど、手の込んだ作りになっています。

クールでインパクトのある外観に加え、PIRONMAN5ならではの機能や使い勝手を徹底解説します。SSDや電源問題など、実際に使用してみて感じたポイントも紹介しますので、購入を検討している方は必見です。

メリット
デメリット
  • 斬新でスタイリッシュな見た目
  • インフォメーションディスプレイでIPアドレスやCPUの状態がわかる
  • 3つのファンによる高い冷却効果
  • GPIOピンが使える
  • ケース内にSSDを取り付けできる
  • RTC用ボタン電池付
  • ケースとしては高額
  • ファンの音が大きい

2024年6月時点では、PIRONMAN5はAmazonで購入できません。僕はメーカーのサイトから購入しました。中国からの配送のため、商品到着までに1週間かかりました。5月24日に購入し、$79.99(購入時のレートで12,852円)でした。

Raspberry Pi 4用のミニPCケースについては、以下の記事で紹介しています。
≫【ゲーミングPC風】Raspberry Pi 4用ミニPCケースPIRONMANをレビュー

用意するもの

PIRONMAN5を使用するうえで必要なものを紹介します。

Raspberry Pi 5

Raspberry Pi 5はPIRONMAN5のキットには含まれていません。4GBモデルまたは8GBモデルが利用できます。

ACアダプター

ACアダプターは5V/5Aが推奨されています。

5.1V 3.8Aのアダプターを使用すると、上記の警告メッセージが出たままとなります。SSD未使用の場合でも警告が出ます。

そこで以下のアダプターに交換しました。少し値段は高めですが、問題なく使用できています。ケーブルが太くて耐久性がありそうです。

Raspberry Pi公式の電源は日本国内で使用するためのPSEマークが付いておらず、執筆時点では国内で販売されていません

NVMe SSD(使用する場合のみ)

PIRONMAN5はNVMe M.2 SSDを接続できます。NVMeは高速で効率的な通信方式を指し、M.2はコンピュータ内部に取り付けるための小型で薄型の拡張カードの規格です。2230、2242、2260、2280の4種類のサイズに対応しています。

そぞら
そぞら

PIRONMAN5はSSDがなくても、microSDカードがあれば利用できます。

NVMe SSDを使用することで、microSDカードと比べて以下のようなメリットがあります。

  • 高速なデータ転送速度
  • 大容量のストレージ
  • 耐久性と信頼性

NVMe SSDは高速なデータ転送速度を提供します。これにより、OSのブート時間が短縮されるだけでなく、ファイルの読み書きやアプリケーションの起動も高速になります​。

僕は以下のSSDを使用しました。

PIRONMAN5に対応するSSDはメーカーの公式サイトから確認できます。僕が最初に買ったSSDは、ラズパイが認識しなかったので上記の製品に買い換えました。

マウス、キーボード、ディスプレイ、HDMIケーブル

マウス、キーボード、ディスプレイ、HDMIケーブルは初期設定作業において必要です。すでに初期設定済みのストレージがあり、VNCのようなリモートデスクトップ環境が使える場合は不要です。

OSをインストールする

まずはmicroSDカードにOSをインストールして、初期設定までを済ましておくと、PIRONMAN5の設定が楽になります。

通常と同じようにmicroSDにRaspberry Pi OSをインストールします。

OSをインストールする方法は以下の記事で詳しく解説しています。
≫【2024年最新版】OSインストールから初期設定まで|セットアップ手順のすべて

NVMe SSDを使う場合

NVMe SSDをパソコンに接続できるアダプターを持っている場合は、microSD不要でそのままSSDにOSをインストールできます。パソコンに接続できるアダプターが無い場合は、先にmicroSDを使って初期設定を行い、PIRONMAN5起動後にmicroSDのデータをSSDにコピーします。

開封~組み立て

PIRONMAN5はキットで販売されています。組み立てには1時間10分かかりました。

箱の中身です。工具が入っているので、自分で用意する必要はありません。ネジ類は予備が入っているので、万が一無くしても安心です。

取扱説明書はこのボリュームで両面印刷されています。図が分かりやすくて助かりました。

ラズパイは一般的なPCと違い、電源を切ると時刻が止まってしまいます。しかし、PIRONMAN5にはRTC(リアルタイムクロック)用のボタン電池が付属しています。これにより、ラズパイの電源が切れている間も時刻情報を保持します。特にネットワークが使えない場合に便利です。

ラズパイ本体をケースに固定します。

巨大なタワークーラーのファンのケーブルはラズパイ本体のファン用のコネクタに接続します。これにより、ファンはラズパイのCPU温度に応じて自動的に運転制御されます。

SSDを使用する場合は、PCIeアダプターボードにSSDを取り付けます。

徐々にパソコンらしくなってきました。

OLEDディスプレイを取り付けます。右側の黒い基板には4つのWS2812 RGB LEDや赤外線受信機、RGBファン用のピンが付いています。

2台のRGBファンを取り付けます。

最後にアクリルパネルを取り付ければ完成です。透明なパネル越しに内部の部品が見えるデザインに心が躍ります。

組み立ての様子は以下の動画で見ることができます。

PIRONMAN5起動

PIRONMAN5にmicroSDカードを挿入し、電源を接続すると、Raspberry Pi 5が起動します。RGBファンは動作しますが、RGB LEDやインフォメーションディスプレイはまだ動きません。

PIRONMAN5をセットアップする

PIRONMAN5のセットアップ方法はメーカーのサイトで詳しく解説されています。手順に従ってコマンドを実行していきます。

すべてのコマンドを実行後、Raspberry Piを再起動するとRGB LEDやインフォメーションディスプレイが点灯します。

インフォメーションディスプレイの表示内容は次の通りです。

アルミケースとアクリルパネル、そして内部のイルミネーションの組み合わせが絶妙です。

上部で青く点灯している4つのLEDは、点灯パターンや色をカスタマイズできます。

背面のデザインです。メッシュ越しに漏れるRGBファンの光が、リアビューをより魅力的に演出します。

PIRONMAN5の設定を変更する

PIRONMAN5はさまざまな設定をコマンドにより変更できます。変更できる主な項目は以下の通りです。

  • RGB LEDのオン/オフ
  • RGB LEDの色、点灯パターン、変化スピード
  • RGBファンの動作温度

好みの設定を探したり、気分によって設定を変えたりできるのが楽しいです。

タワークーラーファンの設定

タワークーラーのファンはPIRONMAN5のソフトウェア設定ではなく、Raspberry Pi OSによって制御されます。初期状態では以下のような設定が適用されています。

CPU温度ファンの回転速度
50℃30%
60℃50%
67.5℃70%
75℃100%

/boot/firmware/config.txtファイルの最下行に以下を追加して再起動することで、温度閾値やファン速度を調整できます。

sudo nano /boot/firmware/config.txt 
dtparam=fan_temp0=40000
dtparam=fan_temp0_hyst=10000
dtparam=fan_temp0_speed=125
dtparam=fan_temp0=40000

ファンが最初に回転を開始する温度を設定する項目です。40000は40°Cを意味します。

dtparam=fan_temp0_hyst=10000

ファンが動作を開始した後に停止するために必要な温度低下を設定します。10000は10°Cを意味し、温度が40°Cに達してファンが動作を開始した後、30°C(40°C – 10°C)まで下がるとファンが停止します。

dtparam=fan_temp0_speed=125

ファンの回転速度を設定する項目です。125はPWM(パルス幅変調)の値で、0から255の範囲で設定できます。125は約50%の速度に相当します。

ファンの冷却効果検証

ファンを3台運転しているときと、ファンを停止しているときのCPU温度を比較してみました。

結果はファン3台運転の平均温度が約40.7°C、ファン停止の平均温度が 約44.2°Cでした。ただしRGBファンは音がそれなりに大きいです。僕は70℃で運転する設定にしています。

NVMe SSDを使えるようにする

別売りのNVMe SSDを使用しない場合、この操作は不要です。

まず、「/boot/firmware/config.txt」の最下行に「dtparam=pciex1」を追加して、PCIeコネクタを有効にします。

sudo nano /boot/firmware/config.txt

sudo rpi-updateを実行して、Raspberry Piのファームウェアを最新にします。

sudo rpi-update

EEPROM設定を開きます。

sudo rpi-eeprom-config --edit

BOOT_ORDER=0xf146になっていることを確認します。

BOOT_ORDERパラメータは、ブートモードの順序を指定するための設定です。0xf146の場合は、最初にNVMe SSD、次にUSB、その後SDカードの順にブートを試みます。

そぞら
そぞら

ブートとは、コンピュータを起動する際に、電源が入ってからOSが立ち上がるまでの一連のプロセスを指します。

再起動後、microSDをからSSDへシステムのコピーをします。

コピー元とコピー先のデバイスを選択して、Startをクリックします。

コピーが完了したら、再起動します。すると、SSDからRaspberry Piが起動します。

起動時間の比較

電源を入れてから起動完了するまでの時間を比較しました。NVMe SSDの方が2秒早く起動しました。

ブートシステム起動時間
NVMe SSD19秒
microSD21秒

【応用編】赤外線受信機で遊ぶ

PIRONMAN5には赤外線受信機が搭載されています。せっかくなので、手持ちのリモコンの信号を読み取って遊んでみることにしました。

ソフトウェアの準備

まず、以下のコマンドによりlircモジュールをインストールします。lircは赤外線リモコンの送信および受信を制御するためのソフトウェアです。

sudo apt install lirc -y

lircの設定を変更して、mode2コマンドでdefaultドライバを使用するように設定します。まず、lircの設定ファイルを開きます。

sudo nano /etc/lirc/lirc_options.conf

driverの項目を「default」に変更します。

[lircd]
nodaemon        = False
driver          = default

リモコン信号の読み取り

以下は受信した赤外線信号のパルスとスペースの長さを読み取って表示するコマンドです。

mode2 -d /dev/lirc0

コマンドを実行後、赤外線受信機に向かってリモコンのボタンを押すと、信号を読み取ることができます。リモコンは自宅の照明用のリモコンを使いました。

ターミナルには以下のように表示されます。実際にはかなりの行数が表示されます。

同じボタンでも、押すたびに信号が若干異なります。これは赤外線信号の特性上、ボタンを押すたびに発生する微妙なタイミングの違いが原因です。このような場合、信号パターンの厳密な一致を求める代わりに、信号の類似性をチェックする方法を採用することが有効です。

Pythonでリモコン信号を識別

次はPythonでリモコンの信号を読み取ります。先ほど読み取った信号と類似しているか確認するために、ChatGPTにPythonコードを書いてもらいました。

以下のコードは、読み取った信号を参照して、信号のパターンが多少異なっても一致と見なす工夫がされています。

import subprocess

def is_similar(signal, target, tolerance=100):
    """
    Check if the signal is similar to the target pattern within a given tolerance.
    """
    if len(signal) != len(target):
        return False
    for sig, tgt in zip(signal, target):
        if not (tgt - tolerance <= sig <= tgt + tolerance):
            return False
    return True

def listen_for_ir_signal():
    process = subprocess.Popen(['mode2', '-d', '/dev/lirc0'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    
    # Define the specific signal pattern
    target_pattern = [
        9029, 4479, 600, 532, 605, 1665, 594, 529, 601, 524,
        608, 530, 602, 528, 603, 528, 604, 1657, 604, 1658,
        607, 528, 602, 1656, 605, 1657, 606, 532, 603, 1653,
        605, 1653, 606, 527, 605, 1656, 606, 1656, 605, 526,
        606, 1659, 602, 526, 605, 1655, 606, 526, 607, 1656,
        605, 525, 606, 527, 605, 1656, 604, 527, 605, 1656,
        604, 527, 604, 1658, 603, 528, 611
    ]

    signal_pattern = []

    try:
        while True:
            output = process.stdout.readline()
            if output:
                line = output.strip().decode('utf-8')
                if "pulse" in line or "space" in line:
                    value = int(line.split()[1])
                    signal_pattern.append(value)

                    # Limit the size of the signal pattern buffer
                    if len(signal_pattern) > len(target_pattern):
                        signal_pattern.pop(0)
                    
                    # Check if the buffer matches the specific pattern within tolerance
                    if len(signal_pattern) == len(target_pattern) and is_similar(signal_pattern, target_pattern):
                        print("get")
                        signal_pattern = []  # Clear the buffer if the pattern matches
            else:
                break
    except KeyboardInterrupt:
        process.terminate()
        process.wait()

if __name__ == "__main__":
    listen_for_ir_signal()

コードを実行後、リモコンのボタンを押すと、コンソールに「get」が表示されます。

リモコンでPIRONMAN5を操作

上記のコードを応用して、リモコンの信号を受信したときにPIRONMAN5のRGBファンを運転停止させてみます。

import subprocess

def is_similar(signal, target, tolerance=100):
    """
    Check if the signal is similar to the target pattern within a given tolerance.
    """
    if len(signal) != len(target):
        return False
    for sig, tgt in zip(signal, target):
        if not (tgt - tolerance <= sig <= tgt + tolerance):
            return False
    return True

def execute_command():
    # Define the list of commands
    commands = ["pironman5 -gm 0", "pironman5 -gm 4"]
    # Maintain an index to alternate commands
    if not hasattr(execute_command, "index"):
        execute_command.index = 0  # Initial index setup

    # Execute the current command
    command = commands[execute_command.index]
    subprocess.run(command, shell=True)
    
    # Execute the restart command
    restart_command = "sudo systemctl restart pironman5.service"
    subprocess.run(restart_command, shell=True)
    
    # Update the index to alternate the command
    execute_command.index = (execute_command.index + 1) % len(commands)

def listen_for_ir_signal():
    process = subprocess.Popen(['mode2', '-d', '/dev/lirc0'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    
    # Define the specific signal pattern
    target_pattern = [
        9029, 4479, 600, 532, 605, 1665, 594, 529, 601, 524,
        608, 530, 602, 528, 603, 528, 604, 1657, 604, 1658,
        607, 528, 602, 1656, 605, 1657, 606, 532, 603, 1653,
        605, 1653, 606, 527, 605, 1656, 606, 1656, 605, 526,
        606, 1659, 602, 526, 605, 1655, 606, 526, 607, 1656,
        605, 525, 606, 527, 605, 1656, 604, 527, 605, 1656,
        604, 527, 604, 1658, 603, 528, 611
    ]

    signal_pattern = []

    try:
        while True:
            output = process.stdout.readline()
            if output:
                line = output.strip().decode('utf-8')
                if "pulse" in line or "space" in line:
                    value = int(line.split()[1])
                    signal_pattern.append(value)

                    # Limit the size of the signal pattern buffer
                    if len(signal_pattern) > len(target_pattern):
                        signal_pattern.pop(0)
                    
                    # Check if the buffer matches the specific pattern within tolerance
                    if len(signal_pattern) == len(target_pattern) and is_similar(signal_pattern, target_pattern):
                        print("get")
                        execute_command()  # Execute the specific command and restart the service
                        signal_pattern = []  # Clear the buffer if the pattern matches
            else:
                break
    except KeyboardInterrupt:
        process.terminate()
        process.wait()

if __name__ == "__main__":
    listen_for_ir_signal()

実際に操作している様子は、以下のポストから確認できます。

このように、リモコンを使いRaspberry Piにさまざまな動作をさせることができます。

まとめ

PIRONMAN5はラズパイをPCやサーバーとして使いたい方におすすめです。Raspberry Pi 5は従来のモデルと比べて性能が大幅にアップしており、PC的な使い方にも十分対応できます。

ただし、ラズパイにカメラやHATを取り付けて使用したい方にとっては、取り回しが悪く感じることがあるかもしれません。一度組み立てたPIRONMAN5を分解してラズパイ本体を取り出すのには、かなり手間がかかります。自身がラズパイをどのように使いたいのかをよく考えて購入を判断すると良いでしょう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です