ついに Part 1 の 最終単元(17 / 17) に到達しました。#01 で 「Pico をはじめよう」 から始まったこのシリーズで、皆さんは LED・ボタン・PWM・ADC・I2C LCD・ブザー・7セグ・超音波・温湿度・明るさ・サーボ・DC モーター・ステッピング・WiFi・IoT(HTTP POST/JSON/Ambient) ── 計 16 種類の電子工作要素を学んできました。本単元はその集大成です。
個別の部品の使い方をひと通り学んだあと、現場で求められるのは 「複数の部品をうまく組み合わせて、1 つの装置に仕立てる力」 です。本単元では 3 つの作例 を紹介し、それぞれを 「Pico(無印)で完結する基本版」 と 「Pico W でクラウド送信を加えた IoT 化版」 の 2 段構えで提示します。3 作例 × 2 版 = 計 6 通りのパターンから 「自分が作りたいオリジナル装置」 の発想を広げてください。
- 作例 A:温度連動サーボ扇風機(DHT11 + サーボ + LCD)
- 作例 B:距離連動 DC モーター速度制御(HC-SR04 + DC モーター + LCD)
- 作例 C:環境モニタリング + アラーム(DHT11 + CdS + LCD + ブザー)
- 各作例の Pico W IoT 化版(Ambient にデータ送信して可視化)
- 電源管理(5V 系と 3.3V 系の分離・共通グランド・大電流負荷の別電源化)
- 配線整理のコツ(ワイヤー色分け・ピンヘッダーラベル・ユニバーサル基板への展開)
- オリジナル課題ヒント集(センサー × 表示 × アクチュエータ × クラウド の組み合わせ早見表)
本単元のブロックはすべて PycoBlocks(MicroPythonモード) の既存ブロックで構成できます。新しいブロックの追加はゼロ。「これまで学んだブロックを正しく組み合わせる」のが、エンジニアリングの本質です。

電源管理:複数部品を 1 つの回路に同居させる
1 つのセンサー、1 つの LED だけを扱う段階を超え、「センサー + 表示器 + アクチュエータ」 を同居させる段になると、「電源が足りない」「動作が不安定」「Pico がリセットする」 など、電源にまつわるトラブルが急に増えてきます。本単元の 3 作例を安定動作させるためには、「電源系統を意識して分けて配線する」 視点が不可欠です。

Pico の電源ピン:3 種類の使い分け
| ピン名 | 方向 | 電圧 | 用途 |
|---|---|---|---|
| VBUS(40 番ピン) | 入出力 | 5V | USB から入ってきた 5V がそのまま出ている。5V 動作のセンサーやサーボを直接駆動するときに使う(ただし合計 500 mA まで)。 |
| VSYS(39 番ピン) | 入力 | 1.8〜5.5V | Pico 自身の電源入力。USB 以外(乾電池・USB モバイルバッテリー・LiPo)から給電するときに使う。ダイオード経由で内部 3.3V レギュレータに繋がっている。 |
| 3V3(OUT)(36 番ピン) | 出力 | 3.3V | Pico 内部の 3.3V レギュレータ出力。センサー・LCD・ロジック ICに供給する(合計 300 mA まで)。 |
💡 電源系統を分ける原則
消費電流レイヤー:何 mA 必要かで判断する
| レイヤー | 例 | 典型消費電流 | 給電方法 |
|---|---|---|---|
| 大電流(1A〜) | DC モーター起動時・ステッピング駆動時・サーボ過負荷時 | 500 mA〜2 A | 外部 5V 別電源を必ず用意(乾電池 4 本 or USB 充電器 + DC ジャック)。Pico の VBUS から取ってはいけない(USB ヒューズ 500 mA 制限)。 |
| 中電流(100〜500 mA) | サーボ通常時・LCD バックライト・複数 LED | 100〜500 mA | USB 給電なら VBUS から取得可。ただし複数同居なら合計を計算して 500 mA を超えないこと。 |
| 小電流(〜100 mA) | 温湿度・CdS・超音波・LED 単体・ボタン | 1〜30 mA | 3V3(OUT) から取得。合計 300 mA まで余裕がある。 |
⚠️ 共通グランド(GND)の原則
📝 USB だけで足りるか?の判断目安
- センサーだけの構成(作例 C の Pico 無印版など)→ USB 給電 OK
- サーボ 1 個 + センサー数個(作例 A)→ USB 給電 OK だがやや限界
- DC モーター含む(作例 B)→ 5V 外部電源推奨。USB だけでも動くが、起動時に Pico がリセットすることがある
- ステッピング含む(本単元の発展課題)→ 外部電源必須
配線整理:ぐちゃぐちゃブレッドボードからの卒業
3 つも 4 つも部品が乗ったブレッドボードは、すぐに 「色とりどりのスパゲッティ」 状態になり、「動かないけどどこが間違っているか分からない」 という地獄に陥ります。プロのエンジニアは 配線そのものをきれいに整理する習慣 を持っています。本単元の 3 作例を実際に組むときは、以下のルールを意識してみてください。
- ジャンパーワイヤーは色分け:赤 = 電源(VCC・5V・3.3V)、黒(または青)= GND、黄 = データ / 信号、白 = クロック(I2C SCL など)、緑 = PWM 出力 のように 機能ごとに色を決める。デバッグ時に「黄色を辿れば信号線」と一目で分かる。
- ブレッドボードの電源帯(赤・青のレール)を活用:赤レールに 3.3V や 5V を 1 本だけ供給し、各部品はそのレールから短いジャンパで取る。全部品が直接 Pico に伸びると蜘蛛の巣になる。
- 長すぎるワイヤーは短く切る:ワイヤーストリッパー で被覆を剥いてピッタリ長さのワイヤーを自作するだけで、ブレッドボードが見違える美しさに。長すぎるジャンパは抜けやすく、見た目もぐちゃっとなる。
- 結束バンド or マスキングテープ:センサーユニット・モーター配線・電源配線 を機能ごとに束ねる。後から「センサーを別の場所に置く」改造もやりやすい。
- ピンヘッダーにラベル:マスキングテープ + マジックで「GP16=DHT」「GP15=Servo」「GP26=CdS」を書いておく。翌週見直したときに「これ何のピンだっけ?」を 0 にできる。
- 仕上げはユニバーサル基板:ブレッドボードで動くことを確認したら、はんだ付けで永続化 する。秋月電子のユニバーサル基板(C 基板 72 × 47 mm が定番) に Pico を直接挿せるピンソケットを立てる。3D プリントケース に入れれば 「作品」 として完成。
「動くまで配線」 と 「動き続けるための配線」 は別物です。授業や試作段階では前者で十分ですが、「文化祭で展示する」「贈り物にする」「自分の部屋に置いておく」 なら 後者の 「整理された配線」 が必須。本単元の作例を実装する際は、ぜひ 「美しく」 仕上げる練習にしてください。
作例 A:温度連動サーボ扇風機(DHT11 + サーボ + LCD)
「部屋の温度が 28℃ を超えたら自動で扇風機が回り、LCD に状態を表示する」 装置です。#10(DHT11 温湿度)+ #12(サーボ)+ #08(LCD1602) の 3 単元の組み合わせ。サーボに 小さなプロペラ(厚紙でも OK) を取り付ければ簡易扇風機になります。「温度を測って閾値で動作する」 のは IoT 制御の最も基本的なパターンです。
配線(作例 A)
DHT11 = GP16(3.3V 駆動)、サーボ = GP15(信号線。VCC は 5V = VBUS、GND は共通)、LCD1602 I2C = SDA GP0 / SCL GP1(5V or 3.3V どちらでも可・モジュール仕様による)。全部品のグランドは Pico の GND と共通に。サーボは VBUS 給電なら USB だけで動くが、過負荷時に Pico がリセット することがあるので、本格運用では 5V 外部電源(電池 4 本など)+ 共通グランド がおすすめ。

基本版(Pico 無印):温度で扇風機 ON/OFF + LCD 表示
「ずっと繰り返す」 中で温湿度を読み、「もし 28℃ 以上なら」 サーボを 90°(扇風機 ON)にして LCD に 「Fan: ON」、そうでなければ サーボを 0°(OFF)にして 「Fan: OFF」。2 秒待ってから次の読み取りに進みます。

from machine import Pin, I2C
from dht import DHT11
from machine import PWM
import utime
from pyco_lcd import I2cLcd # 1602 I2C
_i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000)
lcd = I2cLcd(_i2c, 0x27, 2, 16)
_servo = PWM(Pin(15)); _servo.freq(50)
while True:
_dht = DHT11(Pin(16))
_dht.measure()
temp = _dht.temperature()
humi = _dht.humidity()
lcd.move_to(0, 0); lcd.putstr(f'Temp: {temp} C')
if temp >= 28:
_servo.duty_u16(int(65535 * (1.0 + 90/180) / 20)) # 90 度
lcd.move_to(0, 1); lcd.putstr('Fan: ON ')
else:
_servo.duty_u16(int(65535 * (1.0 + 0/180) / 20)) # 0 度
lcd.move_to(0, 1); lcd.putstr('Fan: OFF ')
utime.sleep(2)
動作確認のコツ:
- 息を吹きかける と DHT11 が一瞬で湿度上昇 → 温度センサーは温まるのに数十秒。ドライヤーの温風 を当てれば即座に 28℃ を超えてサーボが回り始めます。
- 閾値の 28 をプログラム冒頭で
THRESHOLD = 28と変数化して切り替えやすくする習慣を。 - サーボが 「カチカチ」と振動 し続ける場合は閾値付近で頻繁に on/off が切り替わっている 「チャタリング」 状態。ヒステリシス(ON は 28℃ 以上、OFF は 26℃ 以下、のように 2 つの閾値を使う)で対策できます。
IoT 化版(Pico W):扇風機の動作履歴をクラウドに送信
Pico W に置き換えて #15 で学んだ WiFi 接続 + #16 で学んだ Ambient 送信 を追加します。扇風機の動作と並行して、「温度値」を Ambient に 30 秒ごとに送信し、「いつ部屋が暑くなって扇風機が回ったか」 をクラウドのグラフで振り返れるようにします。「ローカル動作(扇風機制御)+ リモート観測(クラウド可視化)」 が IoT の本質的価値。
▶ 模範解答と解説を見る
ブロックの組み合わせ例:

from machine import Pin, I2C, PWM
from dht import DHT11
import utime
import network, urequests
from pyco_lcd import I2cLcd
_wlan = network.WLAN(network.STA_IF)
_wlan.active(True)
_wlan.connect('your-ssid', 'your-password')
while not _wlan.isconnected():
utime.sleep(0.5)
_i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000)
lcd = I2cLcd(_i2c, 0x27, 2, 16)
_servo = PWM(Pin(15)); _servo.freq(50)
while True:
_dht = DHT11(Pin(16))
_dht.measure()
temp = _dht.temperature()
humi = _dht.humidity()
lcd.move_to(0, 0); lcd.putstr(f'Temp: {temp} C')
if temp >= 28:
_servo.duty_u16(int(65535 * (1.0 + 90/180) / 20))
lcd.move_to(0, 1); lcd.putstr('Fan: ON ')
else:
_servo.duty_u16(int(65535 * (1.0 + 0/180) / 20))
lcd.move_to(0, 1); lcd.putstr('Fan: OFF ')
_r = urequests.post('https://ambidata.io/api/v2/channels/YOUR_CH_ID/data', data=f'{{"writeKey":"YOUR_WRITE_KEY","d1":{temp}}}')
resp = _r.text
_r.close()
utime.sleep(30)
解説: 発展アイデア:
- 温度 + 扇風機状態の 2 系列送信:
{"d1":{temp},"d2":{fan_state}}(ON=1 / OFF=0)で 「温度推移と扇風機 ON 区間の相関」 をグラフで観察 - スマホからの遠隔操作:Ambient ではなく IFTTT Webhook や Slack Incoming Webhook に POST して、「扇風機 ON になったら家族の Slack に通知」
- 温度ヒストグラム:1 週間分のデータを Ambient ダッシュボードで「日別最高温度」として可視化
作例 B:距離連動 DC モーター速度制御(HC-SR04 + DC モーター + LCD)
「目の前に物体が近いほど DC モーターが高速で回る」 装置です。#09(HC-SR04 超音波)+ #13(DC モーター)+ #08(LCD) の 3 単元の組み合わせ。「距離 → アクチュエータ速度」 の連動は 「障害物に応じてロボットの速度を変える」 「人が近づくと展示装置が反応する」 など、ロボティクス・インタラクティブアートで頻繁に使われるパターンです。
配線(作例 B)
HC-SR04 = TRIG GP2 / ECHO GP3(5V VCC 推奨・ECHO 信号は 3.3V トレラントなので Pico 直結可)、DC モーター = IN1 GP4 / IN2 GP5 / EN GP6(モータードライバ TA7291P or DRV8833 経由・モーター用 5V は外部電源必須)、LCD = SDA GP0 / SCL GP1。モーター電源を外部にした場合も、Pico の GND と外部電源の GND は必ず共通に。起動時の突入電流で Pico がリセットしないよう、モーター電源には 100 μF 程度の電解コンデンサ を入れておくと安定します。

基本版(Pico 無印):距離 15 cm 未満で HIGH / それ以外で LOW
距離が 15 cm 未満 なら DC モーターを 90 % 出力(HIGH)で回し、LCD に 「Speed: HIGH」。15 cm 以上 なら 30 % 出力(LOW)で 「Speed: LOW」。0.3 秒 ごとに距離を再測定して反応します。「人が手をかざすと速くなる」 体験ができるはずです。

from machine import Pin, I2C, PWM
import utime
from pyco_lcd import I2cLcd
_i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000)
lcd = I2cLcd(_i2c, 0x27, 2, 16)
_in1 = Pin(4, Pin.OUT); _in2 = Pin(5, Pin.OUT)
_en = PWM(Pin(6)); _en.freq(1000)
def measure_cm(trig, echo):
t = Pin(trig, Pin.OUT); e = Pin(echo, Pin.IN)
t.value(0); utime.sleep_us(2); t.value(1); utime.sleep_us(10); t.value(0)
while e.value() == 0: pass
start = utime.ticks_us()
while e.value() == 1: pass
return (utime.ticks_diff(utime.ticks_us(), start) / 58)
while True:
dist = measure_cm(2, 3)
lcd.move_to(0, 0); lcd.putstr(f'Dist: {dist:.1f} cm ')
if dist < 15:
_in1.value(1); _in2.value(0); _en.duty_u16(int(65535 * 90 / 100))
lcd.move_to(0, 1); lcd.putstr('Speed: HIGH ')
else:
_in1.value(1); _in2.value(0); _en.duty_u16(int(65535 * 30 / 100))
lcd.move_to(0, 1); lcd.putstr('Speed: LOW ')
utime.sleep(0.3)
動作確認のコツ:
- HC-SR04 の 測定範囲は 2 cm〜400 cm。2 cm 未満や測定不能のときは distance が異常値 を返すので、実用では 「2 cm 未満や 400 cm 超は無視する」 ガード条件を追加すると安定。
- モーターの SPEED は 0〜100 のパーセント(PWM duty 比)。速度を 3 段階・5 段階に細かく したい場合は
elifを増やすか、「距離を SPEED に比例マッピング」(speed = max(20, min(100, int(120 - dist * 4)))のような式)に変えると滑らかに変化します。 - 突入電流対策:DC モーター電源には 100 μF 電解コンデンサ を入れる。ない場合、起動の瞬間に Pico がリセットして LCD が真っ白になることがあります。
IoT 化版(Pico W):距離履歴をクラウドに送信
Pico W で距離をクラウドに送信し、「いつ・どれくらいの頻度で物体が近づいたか」 のグラフを Ambient で見られるようにします。「店舗の来客カウンタ」「ロボット周辺の物体センサーログ」「侵入検知ログ」のような 「物理空間の出来事をクラウドに記録する」 用途の基本形です。
▶ 模範解答と解説を見る
ブロックの組み合わせ例:

from machine import Pin, I2C, PWM
import utime
import network, urequests
from pyco_lcd import I2cLcd
_wlan = network.WLAN(network.STA_IF)
_wlan.active(True)
_wlan.connect('your-ssid', 'your-password')
while not _wlan.isconnected():
utime.sleep(0.5)
_i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000)
lcd = I2cLcd(_i2c, 0x27, 2, 16)
_in1 = Pin(4, Pin.OUT); _in2 = Pin(5, Pin.OUT)
_en = PWM(Pin(6)); _en.freq(1000)
def measure_cm(trig, echo):
t = Pin(trig, Pin.OUT); e = Pin(echo, Pin.IN)
t.value(0); utime.sleep_us(2); t.value(1); utime.sleep_us(10); t.value(0)
while e.value() == 0: pass
start = utime.ticks_us()
while e.value() == 1: pass
return (utime.ticks_diff(utime.ticks_us(), start) / 58)
while True:
dist = measure_cm(2, 3)
lcd.move_to(0, 0); lcd.putstr(f'Dist: {dist:.1f} cm ')
if dist < 15:
_in1.value(1); _in2.value(0); _en.duty_u16(int(65535 * 90 / 100))
lcd.move_to(0, 1); lcd.putstr('Speed: HIGH ')
else:
_in1.value(1); _in2.value(0); _en.duty_u16(int(65535 * 30 / 100))
lcd.move_to(0, 1); lcd.putstr('Speed: LOW ')
_r = urequests.post('https://ambidata.io/api/v2/channels/YOUR_CH_ID/data', data=f'{{"writeKey":"YOUR_WRITE_KEY","d1":{dist}}}')
resp = _r.text
_r.close()
utime.sleep(30)
解説: 発展アイデア:
- 来客カウンタ:dist < 50 になった瞬間だけカウントアップして
{"d1":{count}}を 1 時間ごとに送信 - 2 ライン検出:もう 1 台 HC-SR04 を反対側に置いて 「入った人 / 出た人」 を区別 → 在室人数をリアルタイム可視化
- BLE と組み合わせ:スマートフォン(Pico W は BT 5.2 対応)から 「閾値や速度設定」 をリモート変更できる装置に進化
作例 C:環境モニタリング + アラーム(DHT11 + CdS + LCD + ブザー)
「温度が 28℃ 以上で、かつ部屋が暗くなったらブザーで警告」 する装置です。#10(DHT11)+ #11(CdS)+ #08(LCD)+ #06(ブザー) の 4 単元を組み合わせた 4 部品同居版 の挑戦課題。「複数センサーの AND 条件で動作」 は 「暑くて寝苦しい夜に気づく」「電気を消し忘れて室温が上がる」 など、現実の家庭課題に応用できるパターンです。
配線(作例 C)
DHT11 = GP16、CdS = GP26(ADC0)+ 10 kΩ 分圧、LCD = SDA GP0 / SCL GP1、ブザー = GP15。4 部品とも 3.3V or 5V の小電流(合計 100 mA 未満) なので USB 給電のみで OK。ただし ブレッドボード上の配線量が増える ので、前述の 「赤レール = 電源・青レール = GND」 ルールが特に効果的になります。

基本版(Pico 無印):温度+明るさの AND 条件でアラーム
LCD 1 行目に 「T:{温度}C H:{湿度}%」、2 行目に 「Light: {明るさ}」 を表示。「温度 ≥ 28℃ かつ 明るさ < 20000(暗い)」 の条件が成立したらブザーを 880 Hz で 0.3 秒鳴らす。「夜に部屋が暑くなったら通知」のシンプルな実装です。

from machine import Pin, I2C, ADC, PWM
from dht import DHT11
import utime
from pyco_lcd import I2cLcd
_i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000)
lcd = I2cLcd(_i2c, 0x27, 2, 16)
while True:
_dht = DHT11(Pin(16))
_dht.measure()
temp = _dht.temperature()
humi = _dht.humidity()
light = ADC(26).read_u16()
lcd.move_to(0, 0); lcd.putstr(f'T:{temp}C H:{humi}%')
lcd.move_to(0, 1); lcd.putstr(f'Light: {light} ')
if temp >= 28 and light < 20000:
_bz = PWM(Pin(15)); _bz.freq(880); _bz.duty_u16(32768)
utime.sleep(0.3); _bz.duty_u16(0); _bz.deinit()
utime.sleep(2)
動作確認のコツ:
- CdS の値域:明るい部屋で 40000〜60000、薄暗い部屋で 10000〜20000、真っ暗で 5000 以下、が一般的な目安。実環境で実測してから閾値を決めましょう。
- 条件が「温度 AND 暗さ」なので、「温度を上げる + 部屋を暗くする」 の両方を同時に再現するのが少し面倒。ドライヤー + 手で CdS を覆う の組み合わせで簡単に検証できます。
- ブザーがうるさい ときは 「duty_u16(8000)」 程度に下げると音量が下がります。圧電ブザー(受動型)の音量 は周波数 × duty で決まります。
IoT 化版(Pico W):3 系列まとめ送信 + アラーム
#16 の演習 2 で学んだ 「3 変数 f 文字列で 3 系列まとめ送信」 をそのまま適用。d1 = 温度、d2 = 湿度、d3 = 明るさ の 3 系列を 30 秒ごとに Ambient へ送信しつつ、アラーム条件が成立したらローカルでブザーも鳴らします。「自宅環境ロガー + 即時通知ガジェット」 の完成形です。
▶ 模範解答と解説を見る
ブロックの組み合わせ例:

from machine import Pin, I2C, ADC, PWM
from dht import DHT11
import utime
import network, urequests
from pyco_lcd import I2cLcd
_wlan = network.WLAN(network.STA_IF)
_wlan.active(True)
_wlan.connect('your-ssid', 'your-password')
while not _wlan.isconnected():
utime.sleep(0.5)
_i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000)
lcd = I2cLcd(_i2c, 0x27, 2, 16)
while True:
_dht = DHT11(Pin(16))
_dht.measure()
temp = _dht.temperature()
humi = _dht.humidity()
light = ADC(26).read_u16()
lcd.move_to(0, 0); lcd.putstr(f'T:{temp}C H:{humi}%')
lcd.move_to(0, 1); lcd.putstr(f'Light: {light} ')
if temp >= 28 and light < 20000:
_bz = PWM(Pin(15)); _bz.freq(880); _bz.duty_u16(32768)
utime.sleep(0.3); _bz.duty_u16(0); _bz.deinit()
_r = urequests.post('https://ambidata.io/api/v2/channels/YOUR_CH_ID/data', data=f'{{"writeKey":"YOUR_WRITE_KEY","d1":{temp},"d2":{humi},"d3":{light}}}')
resp = _r.text
_r.close()
utime.sleep(30)
解説: 発展アイデア:
- 4 系列目に「アラーム状態」を追加:
d4 = 1 if (temp >= 28 and light < 20000) else 0を送れば 「アラームが何時に何回鳴ったか」 がグラフで見える - LINE Notify 連携:アラーム成立時に LINE Notify API へ POST して 「家族のスマホに通知」
- 機械学習との接続:1 ヶ月分のデータを Ambient からダウンロードして Python で 「温度推移パターンの異常検知モデル」 を学習 → 次世代の 「賢い IoT ガジェット」 への入り口
オリジナル課題ヒント集:あなただけの IoT 装置を企画しよう
3 作例を参考に、「自分が本当に欲しい IoT 装置」 を企画してみてください。「センサー(入力)× 表示(フィードバック)× アクチュエータ(出力)× クラウド(記録)」 の 4 軸で考えると発想が広がります。
| 軸 | 選択肢(学んだ単元) |
|---|---|
| センサー(入力) | ボタン(#03)/ 可変抵抗(#05)/ HC-SR04 距離(#09)/ DHT11/22 温湿度(#10)/ CdS 明るさ(#11)/ 他に追加可能: 加速度(MPU6050)・気圧(BMP280)・人感(PIR)・水分(容量センサー) |
| 表示(フィードバック) | LED 単体(#02)/ PWM 段階表示(#04)/ ブザー(#06)/ 7セグ 1 桁(#07)/ LCD1602(#08)/ 他に追加可能: OLED(SSD1306)・NeoPixel 8〜32 LED・電子ペーパー |
| アクチュエータ(出力) | サーボ(#12)/ DC モーター(#13)/ ステッピング(#14)/ 他に追加可能: ソレノイド・リレー(家電制御)・ペルチェ素子(冷却) |
| クラウド(記録) | Ambient(#16)/ 他に追加可能: ThingSpeak(海外定番)・IFTTT Webhook・LINE Notify・Discord Webhook・Google Spreadsheet(GAS 経由) |
企画のヒント(過去の学生作品から):
- 植物の自動水やり装置:CdS(昼夜判定)+ 容量センサー(土壌湿度)+ サーボ(給水バルブ)+ Ambient(湿度ログ)
- 勉強時間記録ガジェット:ボタン(着席・離席)+ LCD(経過時間表示)+ ブザー(25 分でポモドーロ通知)+ Ambient(日別勉強時間グラフ)
- ペットの遊び相手ロボ:HC-SR04(ペット接近検知)+ サーボ(おもちゃを振る)+ Ambient(ペットが遊んだ時間ログ)+ LINE Notify(飼い主に通知)
- ドア開閉センサー:HC-SR04(ドア前の人検知)or 磁気センサー + ブザー + Ambient(ドア開閉ログ)+ LINE Notify(不在中の侵入通知)
- 天気予報自動表示器:#16 演習 3 の HTTP GET で気象庁 API を叩き、LCD に 「明日の東京の天気」 を表示 + 雨予報なら LED 点滅で外出時に気付かせる
企画書テンプレート(自分用にまとめておきましょう):
- 装置名 / コンセプト:何のための装置か、誰が使うか
- 使う部品リスト + ピン割り当て表:ピン番号の競合をチェック
- 動作シナリオ:入力 → 判定 → 出力 + 送信 の流れを 3 行で
- 電源系統図:5V 系 / 3.3V 系の分離、共通グランド
- ブロックプログラム + コード:PycoBlocks で組んで 「Pythonコードを表示」 で確認
- 仕上げ:ユニバーサル基板 + 3D プリントケース or アクリル板で「作品」として完成
まとめ:Part 1 全 17 単元を終えて
- 電源管理は IoT 回路設計の基礎中の基礎。「VBUS(5V)/ VSYS(電源入力)/ 3V3(OUT)(3.3V 出力)」 の 3 ピンを正しく使い分け、「大電流負荷は外部電源 + 共通グランド」 を徹底する。
- 配線整理は「動くまで」と「動き続けるため」で別物。色分け・電源帯活用・ラベル付け・ユニバーサル基板化 で「作品」として完成させる。
- 3 作例(温度 → サーボ / 距離 → DC / 環境 → ブザー)はいずれも 「センサー入力 → 判定 → アクチュエータ出力」 の 「フィードバック制御」 パターン。閾値・条件式を変えるだけで無数のバリエーションが生まれる。
- Pico W IoT 化はいつでも「WiFi 接続 + HTTP POST」を末尾に追加するだけ。「ローカル動作 + クラウド可視化」 の二刀流で IoT の本質的価値が出る。
- オリジナル企画では 「センサー × 表示 × アクチュエータ × クラウド」 の 4 軸組み合わせ表からアイデアを膨らませる。教材として習った部品が、自分の作品の中で命を持つ瞬間を体験してほしい。
Part 1 全 17 単元のおさらい:
- #01〜#02:基礎セットアップ・LED 制御
- #03〜#04:入力(ボタン)と PWM
- #05〜#08:アナログ入力・ブザー・7 セグ・LCD(フィードバック表現)
- #09〜#11:超音波・温湿度・明るさ(環境センシング 3 種)
- #12〜#14:サーボ・DC・ステッピング(モーター駆動 3 種)
- #15〜#16:Pico W で WiFi・IoT(クラウド連携)
- #17:総合課題(本単元)
次のステップ(Part 2 以降):Part 1 で身につけた マイコン側のスキル は、Part 2「Python × PoliviaBot」でそのまま使えます。モーター・超音波センサー・ラインセンサーを 1 台に載せたロボットを、ブロックで走らせます。さらに Part 5 では 「ブロックでゲームを作ろう」(PycoBlocks の Python モード + Pygame 風)に進みます。「センサーで動く物理ロボット」 と 「画面上で動くゲーム」 の両輪が揃えば、もう自分のアイデアを 形にする力 は十分。ぜひ、本単元の総合課題で 1 つの作品 を作りきって、Part 1 を 「自信を持って完走した」 状態で締めくくってください。