ラズベリーパイを買ったけどLチカしたあと何ができるのかイメージがわかない、これからラズベリーパイを買って電子工作で何かを作ってみたいけど何ができるの?
という方の参考になればと思い、当ブログでこれまでラズベリーパイを使って作成したアプリケーションをまとめてみましたので紹介していきたいと思います。
- Raspberry Piのスペック
- Raspberry PiのGPIO(ハードウェア仕様)
- Raspberry Piのセットアップ方法
- Raspberry Piの活用事例
ラズベリーパイ(Raspberry Pi)とは
出典:ラズベリーパイ財団
ラズベリーパイ(Raspberry Pi)はイギリスのラズベリーパイ財団が教育用に開発したボードコンピュータです。
最新(2022/04/現在)のRaspberry Pi 4では、ARMアーキテクチャを採用したBroadcom製の高性能SoC BCM2711を搭載しており、1.5GHzで動作するARM Cortex-A72が4コアとマイコンボードの中では非常に高速な処理能力を持っています。
また、ユーザーがアクセス可能な40ピンのGPIOも搭載しており、外部ハードウェアを制御することが可能です。
ラズベリーパイのスペック
詳細なスペックは以下の通りです。
CPU | Broadcom BCM2711 プロセッサクワッドコア A72 ( ARM v8 )1.5GHz 64 ビット SoC |
メモリ | 2/4/8GB LPDDR4 SDRAM |
Wifi | 2.4 GHz / 5.0 GHz IEEE 802.11ac |
USB | USB 2.0 ポート x 2 、 USB 3.0 ポート x 2 |
Bluetooth | Bluetooth 5.0 |
GPIO | 40 ピン GPIO ヘッダ |
ビデオ | micro HDMI ポート x 2(最大 4Kp60 をサポート)、 2 レーン MIPI CSI カメラポート |
オーディオ | 4 極ステレオ出力およびコンポジットビデオポート |
マルチメディア | H.265 ( 4Kp60 デコード)、 H.264 ( 1080p60 デコード、 1080p30 エンコード)、OpenGL ES 3.0グラフィックス |
外部機器と接続できるGPIO(ハードウェア仕様)
GPIO(General Purpose Input Output)とはRaspberry Piを外部のハードウェアと接続するために用意されたインタフェースです。上記写真の基板上の40ピンのピンヘッダがGPIOです。
このGPIOを介して外部と通信を行ったり、アクチュエータ(駆動装置)を制御することが可能になります。
Raspberry Pi 4BのGPIOには以下の表のようなピン番号と機能が割り振られています。これらのピンから入出力される信号をRaspberry Pi上のプログラムからコントロールすることができます。
上のRaspberry Pi 4の基板画像の左上からPin No 1となり、右下がPin No 40の並びとなります。これらのPin Noが下記表に対応しています。
今回はRaspberry Pi 4BのGPIOを紹介しましたが、Raspberry Pi のバージョンによりピンNoや機能が異なりますのでご注意ください。
Raspberry Pi 4のパッケージ内容については、詳細を以下の記事でまとめています。
ラズベリーパイでは外部機器と接続することができる各種インタフェースを備えていますので、電子工作を始めるのにも最適な製品です。
ラズパイで電子工作を始める際に用意しておくと便利なアイテムを以下の記事でまとめています。
またラズベリーパイのおすすめ周辺機器も以下の記事でまとめています。
ラズベリーパイを使う準備をしよう
ラズベリーパイは電源を入れるだけでは動作させることはできません。入手したらまず何をすればよいのでしょうか?
実際にアプリ開発に入る前にやっておきたい準備内容をまとめてみました。
Raspberry Pi OSをインストールする
まずはラズベリーパイ用のOSが入ったブートSDを用意する必要がります。SDカードの作成方法は以下のサイトで解説しています。
リモートデスクトップでラズベリーパイに接続する
ラズベリーパイをデスク上などモニターの近くで使用できる場合は、HDMIケーブルで画面出力できるのですが、離れた場所に設置したりロボットに組み込んだりすると常時モニターに接続して使用するのが難しいことがあります。
コンソールのみの使用であればSSHでリモート接続すればよいのですが、ラズベリーパイのデスクトップ画面を使いたい場合や、GUIを作成したい場合はリモートデスクトップを使用すると便利です。
リモートデスクトップの接続方法は以下の記事で解説しています。
以上で事前の準備は完了です。
Raspberry PiのIPアドレスを調べる
SSHやリモートデスクトップで接続する場合、Raspberry PiのIPアドレスをあらかじめ調べておく必要があります。
プログラムからIPアドレスを自動取得し、自動的にLINEに通知してやることで確認の手間を省くことが可能です。
Windows PCとファイル共有する
WinSCPというツールを使ってWindows PCとファイル共有するする方法について、以下の記事で解説しています。
ラズベリーパイの活用事例
さて、ここからは実際にアプリケーションの作成について書いていきたいと思います。
当ブログで過去に扱ったラズベリーパイの活用事例をまとめてみました。
カメラで動画撮影
ラズベリーパイといえば画像処理!というイメージがある方も多いと思います。
ラズベリーパイで動画撮影を行う場合は、ラズベリーパイ用のカメラモジュールを使う方法と、市販のWebカメラを使う方法があります。
それぞれの使い方について解説していきます。
カメラモジュールを使う
1つ目に紹介するのはカメラモジュールを使用する方法です。
ラズベリーパイ向けにリボンケーブルで接続可能なカメラモジュールが販売されています。
カメラモジュールを使うメリットとしては、フレームレートが30fpsと高いため、低遅延の画像処理システムに使用したり、滑らかな動画撮影を行いたい時に役立ちます。
ラズベリーパイの基板上にはカメラを接続するためのコネクタが搭載されています。(リボンケーブルが刺さっている部分のコネクタです)
このコネクタにラズベリーパイに対応したカメラモジュールを接続することで、カメラで撮影した画像を取り込み、ラズベリーパイのプログラムで画像処理することができます。
以下の記事では、このカメラモジュールを使用する方法をサンプルコード付きで解説しています。例としてロボットに取り付けたカメラを紹介していますが、ラズパイとカメラ単体で同じことができます。
また、ラズベリーパイのカメラモジュールのフレームレートは30fpsですが、実際にラズベリーパイのデスクトップ上で映像を確認するとカクカクしてスムーズに表示されない場合があります。
そのような時にはGPUに割り当てられているメモリを増やしてやることで、動画がスムーズに表示されるようになる場合があります。GPUメモリを拡張する手順は以下の記事で紹介しています。
Webカメラを使う
2つ目の方法は市販のWebカメラを使う方法です。
Webカメラを使うメリットは、非常に安価で手に入ることと、USBコネクタに差すだけなので取り外しも簡単に行えます。
また、Webカメラ自体が独立したモジュールでケース等に入っているため、基板の破損などの心配もありません。
高フレームレートが必要ない監視カメラや、生き物の観察などにおすすめです。
私は2000円弱で購入できるロジクールのWebカメラを愛用しています。
Webカメラを使って動画を撮影する方法は以下の記事で解説しています。
Webカメラを使って撮影した映像をmpeg4形式で動画ファイルとして出力する方法を以下の記事で解説しています。
後ほど説明する動体検知などの処理と組み合わせて使用することで監視カメラなどのログファイルとしても活用できます。
ロジクールのC270nをとOpenCVを使って動体検知する機能を実装する方法について、以下の記事で解説しています。カメラに写っているものの中で動くものだけを検出し、動くオブジェクトの位置をカメラ画像内に描画することが可能です。
Webカメラと組み合わせて監視カメラシステムを構築、運用する方法を以下の記事で解説しています。
システムを自分で作成せずに、オールインワンのパッケージを使って監視カメラを運用したい方向けに「Motion」という動体検出が可能なアプリケーションを使用しています。
Mosion自体がWebサーバーとして動作しますので、遠隔地からブラウザを通じてカメラ周辺の状況を確認することができます。
ロジクールのC270nをとOpenCVを使ってカメラに映った人物の骨格検出を行う方法を以下の記事で解説しています。
骨格検出にはディープニューラルネットワークを使用した学習モデルOpenPoseを使用しています。
デスクトップアプリケーション
ラズベリーパイはLinuxを搭載しておりデスクトップ環境が使用できます。
そしてこのデスクトップ上で動作するアプリケーションを開発するためのライブラリもたくさん公開されています。
ユーザーがデスクトップアプリケーションを作成することで単に画面を表示するだけでなく、ハードウェアを操作したり、入力信号をモニタすることも可能です。
当ブログでも、以下のようにカメラの映像をモニタしたり、サーボモーターを制御してロボットをコントロールするユーザーインタフェースを公開しました。
以下の記事ではPySimpleGUIというライブラリを使用し、デスクトップアプリケーションを作成する方法を解説しています。
マルチコア 並列処理
ラズベリーパイのマルチコアSoCを使って同時に複数の処理を実行させる方法です。Pythonの標準ライブラリmultiprocessingを使用して実装しています。
カメラでモニタしながら通信や制御をしたりと、色々な使い方に応用できるかと思います。
各プロセス間のデータの受け渡しに便利な共有メモリを使ったプロセス間通信の紹介です。
実際にmultiprocessingを使った並列処理でロボットを制御した例です。
マルチスレッド
ラズベリーパイで動作するアプリケーションを開発する際に、制御、GUI、サーバーとの通信など、複数の作業を同時に行いたい場合があります。
そのような場合は、マルチスレッドで実装するのが有効です。
複数の処理に優先度をつけて、1つのコアでスレッドを切り替えて実行することが可能です。
機械学習 ディープラーニング
ラズベリーパイはカメラを接続できたり、GPUを搭載していたりと画像処理に有効なハードウェアで構成されています。
さらにRaspberry Pi OS上では簡単にPythonのプログラムを簡単に実行できますので、機械学習のアプリケーションを動かすにも最適です。
以下の記事では、ラズベリーパイのカメラとSoCのGPUを活かしてTensorFlow Liteを使ったディープラーニングでの物体認識をやってみました。
ディープラーニングそのものよりも、学習済みライブラリを使用していかにアプリケーションに応用するかという所を書いています。
学習済みライブラリはPINTOさんの「TensorFlow Lite-bin」を使用させて頂いてます。
ディープラーニングで検出したオブジェクトの位置情報を取得するプログラムをPythonで作成しました。ロボットのオブジェクト追跡機能を実現するために作成してみました。
GPIOを使ったハードウェア制御
ラズベリーパイの基板上にはGPIOと呼ばれる40ピンのピンヘッダが搭載されています。
PythonやCで書いたプログラムをラズベリーパイ上で動作させることで、GPIOを経由して外部のハードウェアをコントロールすることができます。
ここからは実際にGPIOを外部ハードウェアと接続して動作させた事例をご紹介します。
デジタル信号を扱う
以下の記事ではGPIOをコントロールするライブラリ、pigpioを使ってハードウェアPWMを出力するPythonプログラムを作成しました。
ラズベリーパイのハードウェアPWMを使ってDCモーターを制御する方法について解説しています。DCモーターとは電圧を加えることで一定方向に回転させることができるモーターです。どれだけの電圧を印加するかをPWM信号によって制御している事例です。
同じくラズベリーパイのハードウェアPWMを使ってサーボモーターを制御する方法について解説しています。
サーボモーターとは印加する電圧により停止する位置をコントロールできるモーターです。
ロボットの関節などにも用いられるもので、以下の記事ではPWMのデューティー比を変化させることで停止位置を変えるデモを行っています。
ラズベリーパイで大きな電流を扱うアプリケーションなどを制御する際に有効なリレー回路を使用する方法を以下の記事でまとめています。
この記事では水をくみ上げるポンプを想定していますが、モーターなどのアクチュエータを制御する場合などでも有効です。
アナログ信号を扱う
ラズベリーパイのGPIOではデジタル信号しか扱うことができません。
アナログ信号を扱いたい場合は、アナログ⇔デジタル信号を変換するためのICを使用する必要があります。
以下の記事ではTI社のADコンバータADS1015を使用して、ラズベリーパイでアナログ信号を読み取る方法を解説しています。
LCDに文字列を表示する
ラズベリーパイのGPIOとI2Cで接続したLCDに、Pythonプログラムで作成した文字列データを表示する方法を以下の記事で解説しています。
ハードウェアを扱う際に押さえておきたい基礎知識
ラズベリーパイに周辺回路を接続して、CやPythonプログラムからアクセスする場合には、組込みシステムの基礎知識が必要になります。
マイコンのプログラミングで頻繁に登場する用語を以下のページで解説していますので、あわせてご覧ください。
ロボット製作
ラズベリーパイをコントローラにして動作するロボットのキットが色々なメーカーから発売されています。
当ブログではSunFounderが販売しているラズベリーパイベースの多脚ロボット、PiCrawlerの組み立てから制御プログラム作成までの過程を記事にしています。
ラズベリーパイとサーボコントローラを使って12個のサーボモーターを駆動してロボットのフレームを動かしています。
現在はコントロールアプリからのマニュアル制御のみですが、近々ディープラーニングを使った自律制御を実装する予定です。
超音波センサーを使って障害物までの距離計測をしています。
自分で作成したGUIアプリケーションからロボットをコントロールするためのプログラムを公開しています。
ラズベリーパイのカメラモジュールでディープラーニングを使って人間を判別し、人間のいる方向に追従して向きを変えるプログラムを作成しました。
また、当ブログで扱っているスパイダーロボット、SunFounder PiCrawlerの記事は以下でまとめていますので、併せてご覧ください。
植物の自動栽培
ラズベリーパイには外部ハードウェアと接続するためのGPIOが搭載されており、LEDやポンプなどのアクチュエータをソフトウェアから制御することができます。
これを活かして、植物の光量や水分量をセンサーでモニタし、ラズベリーパイから水やりや日当たりを調整してやることで、植物を栽培する作業を自動化するシステムを構築することができます。
自動水やり器
ラズベリーパイとポンプを使って自動水やり器を構築した例を紹介します。
以下の記事で自動水やり器を構築するのに必要なアイテムをまとめています。
以下の記事で自動水やり器のハードウェア構築方法についてまとめています。
ポンプを駆動するための回路の製作方法を写真付きで解説しています。
以下の記事では自動水やり器のポンプをPythonのプログラムから制御するためのソースコードと、検証時の動画を公開しています。
植物用LEDの制御
植物の育成に適した周波数の光を発する植物用LEDを使用することで、室内でも植物を育てることが可能です。
以下の記事では植物用LEDをラズベリーパイから制御する方法について解説しています。
プラントの水位計測
水耕栽培プラントの中にどれくらい水が入っているかを計測するシステムの構築方法を以下の記事で解説しています。水位計測を行うことで、自動水やり器を稼働させるタイミングを判断することができます。
冗長性の確保
サーバー運用や、IoTでのセンシングなど、長期間連続稼働を強いられるアプリケーションで重要となるのが冗長性です。
停電などの予期しない急なシャットダウンからRaspberry Piを保護するのに有効なのが、UPSを併用する方法です。
SunFounder社のPiPowerを使用すると、停電時の電力供給だけでなく、電源の供給状況をモニターし、非常電源に切り替わった場合は自動的にシャットダウンシーケンスを実行することができます。
UPSの使用例を以下の記事で解説しています。
まとめ
ラズベリーパイを使って作成してきたアプリケーションをまとめてみました。これからラズベリーパイのプログラミングに挑戦したいと思っている方の参考になれば幸いです。
また、以下の記事で効率的にPythonのプログラミングスキルを学べるプログラミングスクールの選び方について解説しています。最近ではほとんどのスクールがオンラインで授業を受けられるようになり、仕事をしながらでも自宅で自分のペースで学習できるようになりました。
スキルアップや副業にぜひ活用してみてください。
スクールではなく、自分でPythonを習得したい方には、いつでもどこでも学べる動画学習プラットフォームのUdemyがおすすめです。
講座単位で購入できるため、スクールに比べ非常に安価(セール時1200円程度~)に学ぶことができます。私も受講しているおすすめの講座を以下の記事でまとめていますので、ぜひ参考にしてみてください。
それでは、また次の記事でお会いしましょう。
コメント