ラズパイその他工作

Rasberry Pi 4で始める電子工作入門! 第4回: ラズパイ4で基本的な電子工作に挑戦!

こんにちは、ヨシケンです!
Raspberry Pi 4 Model B(ラズパイ4)を使って、ラズパイのセットアップから電子工作の基本までをおさらいしてきた本連載も今回が最終回。

第3回までで、ラズパイOS(Raspbian Buster)のインストール、環境設定、基本的な使い方をおさえましたので、今回はGPIO(データ入出力端子)を使って、センサなどを接続し、実際に電子工作をおこなっていきたいと思います。

1

今回の記事で必要な物一覧

Raspberry Pi 4 Model B
(スタータセットなどを使うと始めるのに必要な部品が揃っています。)
raspberrypi04_1

BME280温湿度センサ
3

NeoPixel 16連リング
4

ミニブレッドボード
5

 

今回の記事の流れ

1.ラズパイとハードウェアの接続(GPIO)
2.ラズパイにセンサをつないで計測
3.LED(NeoPixel)を光らせる
4.センサに応じてLEDを連動させて動かす
5.まとめ

1.ラズパイとハードウェアの接続(GPIO)

ラズパイには数多くのハードウェアと接続するインタフェースがあります。デジタル入出力のGPIOやカメラ、オーディオ接続などですが、それらとハードウェアをつなぐことによりさまざまな電子工作が可能です。
GPIO接続
ラズパイとハードウェアとのメインの接続はGPIO(General Purpose Input Output)と呼ばれる40本の端子です。ラズパイ上の左下の1ピンから右上の40ピンまでがあり、以下図のようなGPIOxxという番号により、プログラム中で指定することができます。

6

[GPIOピン配置] https://www.raspberrypi.org/documentation/usage/gpio/

GPIOの各ピンにはあらかじめ決まった役割が割り当てられています。大きく分けると以下のような違いがあります。

電源とGND: ラズパイにはあらかじめ3.5Vと5Vの電源供給が2本づつあります。それ以外にGND(電圧0V)が8本用意されています。

デジタル入出力: 上記以外の端子はデジタル入出力に使用できます。GPIO2〜27までがあり、必要に応じてLEDやスイッチをつないで電子工作をすることが可能です。方式としては、デジタルの入出力とPWM(アナログ出力)などがあります。

PWM: ラズパイは基本的にデジタル信号(0か1)しか扱えませんが、擬似的にアナログ出力(電圧の段階的出力)をおこなうことができます。これにより、LEDの明るさを変えたり、サーボモータの角度を指定することが可能になります。これはPWM(Pulse Width Modulation)と呼ばれ、ソフトウェアPWMとしてGPIOの26ピンすべてで使用できます。

上記以外にI2C(Inter-Integrated Circuit)と呼ばれるLCDディスプレイなどをつなぐ規格や、UART(Universal Asynchronous Receiver Transmitter)SPI(Serial Pheripheral Interface)といったシリアル通信もあります。これらは使われるピンはあらかじめ指定されており、もしそれらシリアル通信を有効にすると、それと重複したピンはGPIOとしては使えなくなります。

2.ラズパイ4にセンサをつないで計測する

それでは、ラズパイ4にセンサをつないで計測をおこないます。まずは温湿度センサとしてよく使用されるBME280を使ってみます。

7

このセンサは先ほどのGPIOの中でも、I2Cという通信方式を使っています。その為にラズパイの設定raspi-configからI2Cを使用可能にしておきます。その中で“Interfacing Options”を選び、”Enable I2C”を選択します。

$ sudo raspi-config

8

実際の接続は、写真と表を参照してBME280とラズパイのGPIOをつないでみて下さい。

9

BME280端子 (左から) ラズパイGPIO
Vio 3.3V
Vcore NA(接続なし)
GND GND
CSB 3.3V
SDI GPIO2
SCK GPIO3
SDO GND

センサとラズパイをつないだら、このセンサを操るためのいくつかのI2Cライブラリをインストールします。その後、コマンドから接続したセンサが使用可能になっているか見てみましょう。

$ sudo apt install i2c-tools python-smbus
$ sudo i2cdetect -y 1

この I2C Detectコマンドを流すと、以下のようにBME280のデフォルトアドレス0x76での通信が確認できます。

10

接続が確認できたら、BME280のサンプルプログラムがあるので使ってみましょう。

$ sudo git clone https://github.com/SWITCHSCIENCE/BME280.git
$ sudo pip install smbus2
$ python BME280/Python27/bme280_sample.py

このプログラムを実行すると、簡単に温度、湿度、気圧それぞれの数値を取得できました!
11

3.LED(NeoPixel)を光らせる

GPIOのデジタル入出力でセンサの数値を計測できたら、それとは別のハードウェアも使ってみます。ここではLEDの中でも、マルチカラーに光らせることができるNeoPixelというものを使います。これは3本のケーブルをつなぐだけで、連続したLEDを光らせたり、ライブラリが出ていて手軽に目立つ電飾として使えます。

12

このNeoPixelは16連のリング状になっています。裏に3つの接続端子があって、ここにラズパイにつなぐためのケーブルをハンダ付けします。ラズパイとの接続は、電源のプラス・マイナスと、入力端子の3本だけです。表を見てつないでみてください。

13

NeoPixel
(右回りに)
ラズパイGPIO
Input GPIO18 (黄色)
5V DC 5V (オレンジ)
Ground GND (黒)

それでは、こちらのAdafruitサイトを参照して、ライブラリをインストールします。

$ sudo pip3 install adafruit-circuitpython-neopixel

このページにneopixel_simpletest.pyというサンプルプログラムがあるので、これをダウンロードします。このプログラムを開いて、ラズパイ用に以下部分を修正します。

# pixel_pin = board.NEOPIXEL #コメントアウト
pixel_pin = board.D18 #コメントを外し(D18を有効化)
num_pixels = 16 #今回は16連リングを使っているのでそれを指定

修正したプログラムをpython3で実行します。また実行権限として、sudoで流す必要があるので、気をつけてくださいね。

$ sudo python3 neopixel_simpletest.py

このサンプルプログラムでは、R(赤)、G(緑)、B(ブルー)と色が変わった後に、レインボー色に回転してなかなか派手でいい感じです。

15

4.センサとLEDを連動させて動かす

それでは最後にセンサの値に応じて、LED(NeoPixel)の光り方を変えてみましょう。部屋の温度と湿度に合わせて、NeoPixelの色を変化させます。まず、BME280とNeoPixelを両方ラズパイにセットして、ケースなどに入れます。

16

プログラムとしては、室温が15℃以下なら「寒い!」と表示して青色に、15〜25℃なら「快適!」として緑色、また湿度が70%以上なら「蒸し蒸ししてます!」として赤色に光らせるなどします。

先ほどのBME280サンプルプログラムをコピーして、temp_led.pyプログラムを作ります。

$ sudo cp ~/BME280/Python27/bme280_sample.py ~/Programs/temp_led.py

元々のbme280_sampleプログラムの中身のうち、以下黄色の部分を追記します。

それでは、sudo python3からこのプログラムを流してみましょう。

python3

これで室温が低ければ、青く光ります。

寒い状態

寒い状態

またセンサに息を吹きかけるなどして、室温や湿度が上がるとそれに応じた色に光ります。

快適状態(15C - 25C、湿度70%以下)

快適状態(15C – 25C、湿度70%以下)


気温、湿度が高い

気温、湿度が高い

5.まとめ

ラズパイ4を使った記事の第4回では、センサなどを使った電子工作をおこないました。センサの接続、LED(NeoPixel)の使用といった基本的なことを学べたのではないかと思います。

ラズパイ4はメモリ容量の増加などにより、ハイパフォーマンスな処理などに適しているのですが、この回は基本的な電子工作にとどめました。

今回の連載を読んでいただき、ラズパイや電子工作に興味を持たれたら、ぜひラズパイ4を使って、より面白い電子工作に挑戦してもらえればと思います。

それでは、ラズパイ電子工作生活を楽しんでください!

razero_580-230
ヨシケン(吉田 顕一)

普通の会社に勤めるサラリーマンですが、モノ作りが好きな週末メイカーで、電子書籍MESHBOOKを出したり、ブログを書いたりしています!

http://blog.ktrips.net