はじめてRaspberry Pi Pico(ラズパイピコ)を手に入れたけれど、「何から始めればいいの?」と迷っていませんか?本記事では、電子工作やプログラミング初心者に向けて、Picoで体験できる5つの入門プロジェクトを紹介します。どれもMicroPython(マイクロパイソン)でプログラムできる手軽なものばかりです。LEDの点滅からセンサーの活用まで、一歩一歩順を追って挑戦してみましょう。
Raspberry Pi Picoは、小型で安価なマイコン(マイクロコントローラ)ボードです。同じシリーズには無線通信機能を備えたPico Wや新モデルのPico 2もありますが、本記事では初代Pico(無線非対応モデル)を使用します。MicroPythonに対応しており、Pythonに近い感覚でコードを書けるので初心者にも扱いやすいでしょう。
それでは、具体的にどんなことができるのか、5つのプロジェクトを見ていきましょう。
- LEDを点滅させる
- スイッチ入力でLEDを制御
- ブザーで音を鳴らす
- 近接センサーで距離を測る
- アナログ入力でLEDの明るさを変える
各プロジェクトでは必要な部品や配線方法、簡単なコード例も紹介します。ぜひ手元のPicoで一緒に試してみてください。
1. LEDを点滅させてみよう
まずは電子工作の定番「Lチカ」に挑戦しましょう。LチカとはLEDを点滅(チカチカ)させることで、ソフトウェア開発における「Hello World」に相当する入門実験です。
準備するもの: Raspberry Pi Pico本体、発光ダイオード(LED)1個、抵抗(220Ω程度)1本、ブレッドボード、ジャンパー線
配線: LEDの長い足(アノード)をPicoのGPIOピン15に、短い足(カソード)を抵抗を介してGNDに接続します。LEDには極性があり、正しく接続しないと光りません。また、抵抗を直列に入れることで電流を制限し、PicoやLEDが壊れるのを防ぎます。
準備ができたら、MicroPythonでLEDを点滅させるコードを書いてみます。PicoをUSBでパソコンに接続し、Thonnyなどの開発環境で以下のコードを入力して実行してみてください。
from machine import Pin
import time
led = Pin(15, Pin.OUT) # GPIO15を出力に設定
while True:
led.toggle() # LEDの状態を反転
time.sleep(0.5) # 0.5秒待つ
このプログラムでは、GPIO15ピンに接続したLEDを0.5秒ごとに点滅させています。Pin(15, Pin.OUT)
でピンを出力モードに設定し、led.toggle()
で現在の状態を反転させることでLEDがオン・オフを繰り返します。なお、Pico基板上のLED(GPIO25)も同様に点滅させることができます。

詳細解説へ
2. スイッチでLEDを操作しよう
次はスイッチ(ボタン)を使って、LEDをオン・オフするプロジェクトです。スイッチ入力というデジタル入力の基本を学びます。押しボタンスイッチをPicoに接続し、その状態に応じてLEDを制御してみましょう。
準備するもの: Pico本体、前のプロジェクトと同じLED回路、押しボタンスイッチ1個
配線: スイッチの一方の端子をPicoの3.3Vピンに、もう一方の端子をGPIO14に接続します。GPIO14では内部プルダウン抵抗(Pin.PULL_DOWN
)を有効にしましょう。こうすることで、ボタンが離されているときGPIO14は自動的にLow(0V)に、押されたときにはHigh(3.3V)になります。
それでは、ボタンの状態でLEDを制御するコードを書いてみましょう。ボタンが押されている間だけLEDが点灯し、離すと消灯するシンプルなプログラムです。
from machine import Pin
import time
led = Pin(15, Pin.OUT) # LEDはGPIO15
button = Pin(14, Pin.IN, Pin.PULL_DOWN) # ボタンはGPIO14(プルダウン有効)
while True:
if button.value() == 1: # ボタンが押されたら
led.value(1) # LEDをON
else:
led.value(0) # LEDをOFF
time.sleep(0.1)
コードを実行してボタンを押すと、その間だけLEDが点灯し、離すと消えるはずです。button.value()
でボタンの状態を読み取り、1
(押されている)ならLEDをvalue(1)
で点灯、そうでなければ消灯させています。内部プルダウン抵抗を指定したおかげで、ボタンを離した状態では入力が0
に安定し、ノイズによる誤作動を防げます。
このプログラムを応用して、一回押すごとにオン・オフを切り替えたり、長押しを検出したりもできます。

PULL_UP
やPULL_DOWN
を指定するだけで内部抵抗を有効にできるから便利だね。
3. ブザーで音を鳴らしてみよう
光だけでなく音で出力を確認できたら楽しいですよね。そこで次はブザーモジュールを使ってピーッと音を鳴らしてみましょう。ブザーもLEDと同じく基本はオン/オフのデジタル出力ですが、PWM(パルス幅変調)を利用することで音の高さ(周波数)を制御できます。
準備するもの: Pico本体、ブザー(圧電スピーカー)1個、ジャンパー線
配線: ブザーのプラス端子をGPIO15に、マイナス端子をGNDに接続します(極性表示がない場合はどちらでも構いません)。小型のブザーであればPicoの出力ピンに直接つないでも駆動できます。
それでは、ブザーを断続的に鳴らす簡単なコードを試してみます。ここではPWM機能を使い、1kHzの音を1秒間鳴らして1秒休止する動作を繰り返します。
from machine import Pin, PWM
from time import sleep
buzzer = PWM(Pin(15)) # GPIO15をPWM出力に設定
buzzer.freq(1000) # 周波数を1kHzに設定
while True:
buzzer.duty_u16(32768) # 音をON(デューティ50%)
sleep(1) # 1秒間鳴らす
buzzer.duty_u16(0) # 音をOFF
sleep(1) # 1秒間休止
このプログラムでは、1kHzの方形波をブザーに出力することで「ピー」という音を発生させています。PWM(Pin(15))
でGPIO15をPWMモードにし、freq(1000)
で周波数を設定、duty_u16(32768)
でデューティ比50%の信号を出力します。デューティ比を0
に戻すと無音になります。実行すると1秒おきにブザーが「ピッ、…ピッ、…」と鳴るのが確認できるでしょう。
ブザーから出る音の高さはbuzzer.freq()
の値で決まります。周波数を変えてみると、高い音や低い音に変化するのが体感できるはずです。

4. 近接センサーで距離を測ってみよう
続いて、身の回りの環境をマイコンで感じ取る例として距離(近さ)を測るセンサーを使ってみましょう。ここでは超音波を使った定番の超音波距離センサー(HC-SR04など)をPicoに繋いで、前方の物体までの距離を測定します。超音波を発信して反射を検知し、その往復時間から距離を計算する仕組みです。
準備するもの: Pico本体、超音波近接センサー(HC-SR04等)1個、ジャンパー線
配線: センサーには4本のピンがあります。以下のように接続しましょう。
- VCCピン → PicoのVU(5V出力)ピン
- GNDピン → GNDピン
- TRIGピン → GPIO18
- ECHOピン → GPIO19
※HC-SR04は5V駆動が基本で、ECHOピンの出力も5Vとなります。レベル変換回路を入れるか、3.3V駆動対応の距離センサーを使うなど、直接Picoに繋がないよう注意しましょう。
それでは距離を測定するコードの例です。超音波を発射してから反射が返ってくるまでの時間を測り、音速から距離を算出します。
from machine import Pin, time_pulse_us
import time
trigger = Pin(18, Pin.OUT)
echo = Pin(19, Pin.IN)
trigger.value(0)
time.sleep_us(2)
trigger.value(1)
time.sleep_us(10)
trigger.value(0)
duration = time_pulse_us(echo, 1, 1000000)
distance_cm = duration * 0.0343 / 2
print("Distance:", distance_cm, "cm")
このプログラムを実行すると、コンソール上に距離がセンチメートル単位で表示されます。プログラムではtime_pulse_us(echo,1,...)
でECHOピンがHighの時間を測り、その値に音速(0.0343 cm/μs)×1/2を掛けて距離(cm)を求めています。距離センサーを使うことで、ロボットの障害物検知や人が近づいたときに反応するガジェットなど、様々な面白い工作が可能になります。
5. アナログ入力でLEDの明るさを変えてみよう
最後はアナログ入力の活用例です。マイコンはデジタル(0か1)だけでなく、電圧のような連続値も読むことができます。Picoにはアナログ入力用のADC(アナログ-デジタル変換)ピンが備わっており、可変抵抗(ポテンショメータ)などの値を読み取ることが可能です。ここではポテンショメータを使ってつまみの角度に応じた値を取得し、その値に応じてLEDの明るさ(PWMデューティ比)を変化させてみましょう。
準備するもの: Pico本体、可変抵抗(ポテンショメータ)1個、LED+抵抗(前述と同じもの)
配線: ポテンショメータには端子が3つあります。端の一方を3.3V、もう一方の端をGND、中央の端子(可変出力)をADC機能対応のGPIO26に接続します。LEDはこれまで通りGPIO15と抵抗経由でGNDに接続しておきましょう。
配線ができたら、コードを書いてみます。ポテンショメータの値を読み取り、そのままLEDのPWMデューティ比に反映することで、つまみ位置に応じてLEDの明るさが変わるようにします。
from machine import ADC, Pin, PWM
import utime
pot = ADC(26) # GP26をADC入力に設定
led_pwm = PWM(Pin(15)) # GP15をPWM出力に設定
led_pwm.freq(1000) # PWM周波数を1kHzに設定
while True:
val = pot.read_u16() # 0〜65535の値を取得
led_pwm.duty_u16(val) # 読み取った値をデューティ比に設定
utime.sleep_ms(50)
プログラムを動かすと、ポテンショメータを回した角度に応じてLEDの明るさが滑らかに変化するはずです。PicoのADCは0〜65535の値を返し、duty_u16()
も同じ0〜65535で明るさを指定できるため、読み取った値をそのまま渡せばLEDの明るさが比例して変わります。
アナログ入力を使えば、例えば明るさセンサーで周囲の明るさに応じてLEDを点灯させたり、温度センサーでファンを制御したりと応用が広がります。Picoには内部温度センサーもあるのでぜひ試してみてください。
まとめ
今回はRaspberry Pi Picoを使った初心者向け電子工作5選として、LED点滅、スイッチ入力、ブザー出力、距離センサー、アナログ入力のプロジェクトを紹介しました。各プロジェクトを通じて、デジタル出力・入力、PWMによる制御、センサーの活用、アナログ値の読み取りなど、マイコン活用の基本となる要素を一通り体験できたのではないでしょうか。
これらの入門プロジェクトで身につけた知識を応用すれば、例えば「ボタンを押したらブザーで音が鳴るおもちゃ」や「距離センサーで人を検知して自動でLEDを点灯するライト」、「ポテンショメータでサーボモーターの角度を制御する」といった応用工作に発展させることも可能です。ぜひ今回学んだことをベースに、オリジナルのアイデアに挑戦してみてください。
Picoは壊れにくく安価なので、失敗を恐れず色々試してみましょう。うまく動かず悩むこともあるかもしれませんが、それも含めて楽しみながら進めていってください!
あなたのPicoによる電子工作の第一歩が、素敵なものになりますように。
コメント