フューチャー技術ブログ

RaspberryPiと赤外線反射センサーを用いて遊んでみよう(入門編)

春の入門祭り2025の21本目の記事です。

はじめに

はじめまして。最近視力が 2.0 から 1.8 くらいに下がった気がする 24 卒 10 月入社の生駒開です。ブルーライトカットレンズは効果ありますか?そろそろ眼鏡市場に行ってみようと思います。

2025 年 2 月より現所属プロジェクトに参画し、Java とにらめっこの毎日を過ごしています。コーディングの機会に恵まれることは大変嬉しく、充実感を感じる日々ですが、一方で、画面の中で完結してしまう作業に少し寂しさを感じていました。

そんな背景から、「自分の手で作ったコードが、現実世界のモノを動かす」という体験をしてみたくなりました。そこで目をつけたのが Raspberry Pi です。この小さなデバイスは、センサーやLEDなどの電子機器をプログラミングで制御できるうえ、電子工作の基礎を学ぶのにも最適です。

このブログでは、初心者向けに私が Raspberry Pi を使って行った障害物検知センサーの制作プロセスをご紹介します。同じように「画面の中だけでないコーディングの楽しさ」を共有できれば嬉しいです。ラズパイを通じて、電子回路やハードウェアの世界へ一歩踏み出すきっかけになれば幸いです!

1.Raspberry Pi って何?

Raspberry Piとは

イギリスの Raspberry Pi 財団が開発した超小型のシングルボードコンピュータです。クレジットカードほどの大きさながら、Linux が動作し、通常のパソコンのように使うことができます。また Raspberry Pi には Model A や Zero、Pico など、サイズや性能によってモデル分けされており、用途に合わせて選定することができます。

  • 主な特徴:小型で電力効率が良い
  • 用途:IoT デバイス開発、教育、ホームオートメーションなど

使用方法

Raspberry Pi を活用するまでには、いくつかステップを踏む必要があります。

  1. OSのセットアップ
    • Raspberry Pi Pico W は MicroPython を使用することが多いです。この OS を作業用 PC から書き込み準備します
    • Thonny などを使うと便利です
  2. 電子回路の設計と構築
    • Raspberry Pi の GPIO ピンを使い、外部デバイスを接続します。初めての方は、シンプルな回路設計(例: LED の点滅)から始めるのがおすすめです
    • 注意:GPIO ピンの電流制御が必要なので、抵抗を適切に導入します
  3. 実行環境の整備
    • コードは MicroPython や C を利用して開発。シンプルな LED 制御から徐々に複雑なセンサー動作へ応用します

GPIO ピンの役割や基本的な回路の接続方法について、第3項で詳しく触れます。

2.今回のチャレンジ内容

今回のプロジェクトでは、Raspberry Pi Pico W と赤外線反射センサーを使用して、障害物検知センサーを作成します。最終的には、障害物を検知した際に LED で信号を出力する仕組みを実現することを目指します。

  • Raspberry Pi と外部センサー(赤外線反射センサー)を連携させる
  • Raspberry Pi のGPIOを活用して入出力の基本を覚える
  • チュートリアルを通じて初歩的な電子工作を学ぶ

3.障害物検知センサーの開発

本番開発を行う前に、まずは必要なものを揃えてチュートリアル開発をクリアしましょう!

3.1 必要なもの

今回使用するものは以下の通りです。

  • Raspberry Pi Pico W: 主人公。コンパクトかつ省電力でとにかく安い。¥1,300 くらい
  • ブレッドボード: 回路構築用。¥400 くらい
  • 抵抗器: LEDへの過電流を防ぐため。今回は安全な電流量を計算し 220Ω を使用。¥40 くらい
  • LED: 障害物検知時の信号出力用。¥10 くらい
  • ジャンパーワイヤー: 配線用。10 本で ¥700 くらい
  • 作業用PC: コードの作成・転送用。(セキュリティ事故が怖いので私用 PC )
  • マイクロUSBアダプタ: 電源供給兼データ通信用。(忘れがち)(充電用だけでは×)
  • 赤外線反射センサー: 障害物検知用。一個 ¥600 くらい
  • 電池ボックス: Pi の外部電源として使用

3.2 環境構築

Raspberry Pi Pico W を使うためには、まず開発環境を整える必要があります。以下の手順で環境構築を行います。

1. MicroPython のインストール

Raspberry Pi Pico W に MicroPython をインストールします。これはPicoをプログラムするために必要な標準的な OS です。MicroPython公式サイトからUF2形式のファイルをダウンロードし、Pico を PC に接続した後、ドライブへドラッグ&ドロップするだけでインストールが完了します。

2. 開発ツールの準備

作業用 PC に Python IDE(統合開発環境)であるThonnyをインストールします。Thonny は Raspberry Pi Pico W に標準対応しており、コードを書いて直接転送するための便利なツールです。以下のステップを行います。

  1. Thonny公式サイトからインストールする
  2. 適切なボードを選択(例: Raspberry Pi Pico W)
  3. MicroPython を選択して開発開始テスト

3. 接続確認

Thonny を起動し、接続ができたことを確認します。

準備が整ったら次のステージへ進みます!

3.3 チュートリアル開発

3.3.1 Raspberry Pi Pico W の GPIO

117947.jpg

図1 Raspberry Pi Pico WH 本体

GPIO(General Purpose Input/Output)は、「汎用入力/出力ピン」を指します。このピンを使用することで、さまざまな外部デバイス(センサー、LED、モータなど)と通信したり制御したりすることができます。Raspberry Pi Pico W には40ピンのヘッダがあり、それぞれ異なる役割を持っています。以下は、全体のピン配置と役割の概要です。

  1. GPIO(汎用入出力ピン)
    • ピン番号: GPIO 0〜25
    • 外部デバイスとの通信や信号の受け渡しに使用します
    • GPIO ピンは「デジタル入出力(HIGH/LOW)」の動作を設定できます
    • 特定のピンは通信プロトコルのための特殊機能を持つ(SPI/I2C/UARTなど)
  2. 電源系ピン
    • GND(グランド)
      • 複数箇所に配置されています。(例: ピン3, ピン8, ピン13など)
      • 電子回路を完成させるために必要な基準電位を提供します
    • 3V3(3.3Vピン)
      • ピン番号: 36, 37
      • Raspberry Pi Pico W 自身や外部デバイスへの供給電圧として使用します
      • Pico は 3.3V で動くデバイス用に設計されています
    • VBUS(USBバス電源)
      • ピン番号: 40
      • USB から提供される電源(5V)を使用したい場合に利用
  3. ADC(アナログ入力ピン)
    • ピン番号: GPIO 26〜28
    • アナログ信号(電圧値)をデジタル値に変換するためのピン
    • 電圧範囲: 0〜3.3Vのアナログ入力を取得できます
    • 例: センサーの出力を読み取りたいときに使用
  4. 通信プロトコル専用ピン
    • SPI(Serial Peripheral Interface)
      • GPIO 10(MOSI)、GPIO 11(SCK)、GPIO 8(CS)
      • 高速通信が可能で、センサーやディスプレイとの接続に適しています
    • I2C(Inter-Integrated Circuit)
      • GPIO 4(SDA)、GPIO 5(SCL)
      • 複数のデバイスを並列で接続する場合に便利
    • UART(Universal Asynchronous Receiver/Transmitter)
      • GPIO 0(TX)、GPIO 1(RX)
      • シリアル通信に使用

ピン配置マップ(概要)

117947_(1).jpg

図2 Raspberry Pi Pico WH 本体の裏側

以下は、Raspberry Pi Pico W の40ピンの役割を簡単にまとめたものです。

ピン番号 ピン名 説明
1 3V3 OUT 3.3V電源供給
2 GPIO 0 (UART TX) UART通信の送信ピン / 汎用デジタル入出力ピン
3 GND グラウンド(回路の基準電位)
4 GPIO 1 (UART RX) UART通信の受信ピン
5 GPIO 2 汎用デジタル入出力ピン
36 3V3 OUT 3.3V電源供給
37 3V3 OUT 追加の3.3Vピン
38 ADC3 / GPIO28 アナログ入力ピン
39 GND グラウンド
40 VBUS USBバス電源(5V)

重要な電源系ピンの使い分け

  1. 3V3 ピン
    • Pico 自身やセンサー、LED など、3.3V が動作電圧のデバイスに接続します
    • 注意: 3.3V のデバイス以外は必ず電圧変換器を使用!
  2. VBUS ピン
    • USB 経由で供給される 5V を取り出したい場合に使います
    • Pico が外部機器の供給源として機能する際に便利
  3. GND ピン
    • どの回路にも必ず接続します。電子回路の基礎となるため、忘れずに取り扱います

3.3.2 ブレッドボード電子回路

image.png

図3 ブレッドボードの電気的関係

ブレッドボードは、電子部品をハンダ付けせずに接続・テストできる基板です。電源レールと端子列を使って部品を配置し、ジャンパーワイヤで接続します。

  1. 電源レール
    • 長い列(赤と青のライン)で、電源(例: 3.3V、GND など)を供給するために使います。
    • 赤: プラス(+)
    • 青: マイナス(-)
  2. 端子列(作業スペース)
    • 中央の多数の穴が5つずつ連結されており、部品や配線を接続できます。
    • 部品を差し込むと、5つの穴が電気的に結ばれる。
  3. 溝(中央のノッチ)
    • 真ん中の溝は「左側」と「右側」を分け、電気的に互い独立したエリアです。

使用方法

ブレッドボードを使う際の基本的な手順は以下の通りです。

1. 電源を供給

電源レールに適切な電圧(例: 3.3V、GND)を供給します。Raspberry Pi Pico W の場合、以下のピンを利用します:

  • 3V3 ピン:赤い電源レールへ接続。
  • GND ピン:青い電源レールへ接続。
2. 部品を配置

電子部品(LED、抵抗、センサーなど)を端子列の適切な穴に差し込みます。配線が正確になるよう配置を確認しましょう。

3. ジャンパーワイヤで接続

ジャンパーワイヤを使い、部品同士をつなぎます。

  • GPIO ピンや電源レールを正しく接続。
  • 必要に応じて抵抗器やコンデンサを挿入。
4. 動作確認

回路が完成したら Raspberry Pi Pico W の電源をオンにして動作をチェックします。

注意点:

  1. 部品がショートしないようにする
    • 誤って電源レールを直結するとショートする危険があります。確認を怠らないように注意!
  2. 適切な抵抗を使用
    • LEDを使う場合、過電流防止のために 200Ω〜220Ω の抵抗を入れる必要があります。
  3. 電圧や電流を確認
    • ブレッドボード回路で使用する部品の動作電圧を確認してください。例えばRaspberry Pi Pico W は 3.3V に対応しています。

3.3.3 「Lチカ」をやってみよう

ここでは Raspberry Pi Pico W の基本機能を試します。「Lチカ」とはプログラミング言語学習における「Hello World !」です。「LEDを点滅(チカチカ)させる」作業を行い、GPIO ピンが正しく動作していることを確認します。電子回路は以下のように設計し、構築していきます。

img_7902_720.jpg

図4 Lチカ時の配線概要図

以下はMicroPythonで記述したコードです。

例1
from machine import Pin
import time

led = Pin(25, Pin.OUT) # Raspberry Pi Pico W内蔵LEDのピン番号

while True:
led.high() # LEDを点灯
time.sleep(1) # 1秒待機
led.low() # LEDを消灯
time.sleep(1) # 1秒待機

LED が1秒間隔で点滅すれば成功です!これは GPIO ピンの基本動作の確認にも役立ちます。

3.3.4 赤外線反射センサーの動作確認

次は、赤外線反射センサーの動作を検証します。センサーが反応すると LED が発光するよう、以下の通りに電子回路を設計し、構築していきます。

img_7903_720.jpg

図5 赤外線反射センサーの動作確認時の配線概要図

以下は本動作確認におけるコードです。

例2
from machine import Pin
import time

sensor = Pin(15, Pin.IN) # 接続したセンサーのGPIOピン番号
led = Pin(21, Pin.OUT)

while True:
var = sensor.value()
print("センサー値:", val)

if val == 0: #反射が無い
led.on()
else: #反射有り
led.off()

time.sleep(0.2) #0.2秒のインターバル

動作確認ができたら、いよいよ障害物検知センサーの開発です!

3.4 本番開発

3.4.1 目的と目標

本番開発では、チュートリアルで学習した内容を応用して、以下のシステムを完成させることを目指します。

  1. 障害物の検知:赤外線反射センサーを2つ使用して障害物の有無を正確に確認する
  2. 信号の処理:検知した信号に応じて、LED を利用して視覚的なフィードバックを提供する
  3. 動作タイミングの調整:プログラムとハードウェアが一体となってシームレスに動作するシステムを設計する

3.4.2 回路設計

本番開発の回路は電子工作初心者にもわかりやすい設計です。以下に手順を示します。

img_7904_720.png

図6 障害物検知センサーの配線概要図

  1. 障害物検知センサーの接続
    • センサーの出力ピンを Raspberry Pi Pico W の GPIO に接続
    • 入力ピンを 3.3V ピンに接続し、センサーの動作電圧を供給
    • GND ピンを Pico の GND ピンへ接続
  2. LED の接続
    • LED の長い足を抵抗(220Ω)を介して GPIO ピンに接続する
    • LED の短い足を GND に接続し、過電流を防ぐ
  3. 電源供給
    • 電池ボックスを使用して安定した電源を提供する

回路完成後は再確認を行い、誤接続がないことを確認してください。

3.4.3 プログラム設計

以下は、本番環境向けのコードです。障害物検知時、LED が光る動作を実装します。

例3
from machine import Pin
import time

left_sensor = Pin(10, Pin.IN) # 左センサー DOUT
right_sensor = Pin(11, Pin.IN) # 右センサー DOUT
led = Pin(21, Pin.OUT) # LED

while True:
left_val = left_sensor.value()
right_val = right_sensor.value()

print("", left_val, "", right_val)

if left_val == 0 or right_val == 0:
led.on() # センサーどちらかが反射無し
else:
led.off() # センサーどちらとも反射有り

time.sleep(0.1)

このコードでは、各センサからの信号値を確認し、それに基づいて LED をオン・オフ切り替えます。

3.4.4 動作検証

  1. センサーの応答性チェック
    • 受信したセンサーの値を確認できました
    • 左右のセンサーが独立して障害物を検知できていました
  2. LED 動作のタイミング
    • LED が障害物検知してから 0.1 秒以内に発光しました
  3. 電源の安定性確認
    • 電池ボックスの電源供給は安定していました
kai_4763_720.jpg

図7 障害物がない状態

kai_4765_720.jpg

図8 片側のセンサーのみ障害物を検知している状態

kai_4758_720.jpg

図9 両センサーが障害物を検知した状態

3.4.5 のびしろ

  1. センサーの信号をアナログに変更
    • 信号強度によって今後組み込むモーターの制御を可能にできます
  2. Raspberry Pi Pico W の Wi-Fi 機能の活用
    • 障害物を検知した際に LINE で通知する機能を実装しようと思います

4.今後の展望

今回のプロジェクトでは、障害物検知センサーシステムを作成しましたが、これをさらに発展させて、火星探査ローバーのような機能を持つ移動式ロボットの開発にチャレンジしたいと思います。また以下のような要素を追加することで、より高度で有意義なプロジェクトになることを望んでいます。

  1. モータ制御で移動機能を追加
    • Raspberry Pi Pico W を使ってモータを制御し、センサーが検知した障害物を回避できるロボットを作成
    • ロボットが自律的に動く仕組みを実現することで、探査ローバーのようなプロジェクトに挑戦
  2. 無線通信の導入
    • Pico W の Wi-Fi 機能を活用し、リアルタイムで障害物データを遠隔地に送信するシステムを構築
    • 火星探査ローバーのように、データ収集とその送信を組み合わせたプロジェクトを展開
  3. AI 技術の応用
    • カメラモジュールや画像認識技術を追加し、物体の種類を判別可能なロボットを試作
    • 機械学習を組み合わせることで、よりインテリジェントなシステムを作り上げる

またローバーにフォーカスするだけでなく、他の分野へ応用できる可能性も見つけられると思います。まだまだ始まったばかりのプロジェクト(笑)ですが、より面白いものが作れるよう取り組んでまいります。

5.まとめ

障害物検知センサーの開発を通じて、Raspberry Pi Pico W の GPIO 操作や電子工作の基礎を学ぶことができました。特に、コードを使ったプログラムだけでなく、実際にハードウェアを動かす楽しさを味わえたのではないでしょうか。電子工作の魅力は、コーディングが画面の中だけに留まらず、実世界で形になり、動作するものを生み出せることにあります。その瞬間、センサーやモータなどが動く様子は、まるで魔法をかけたかのようにワクワクさせてくれるものです。

みなさまも、ぜひ自分らしいプロジェクトに挑戦してみてください。小さな成功が自信につながり、次のステップへの扉を開きます。そして、楽しい人生を彩る最高の体験になるはずです!