Polivia Bot Python Raspberry Pi Pico プログラム ロボット制御 電子工作 高専3年生

【Poliviabot】【Raspberry Pi Pico】ロボット制御入門③デジタル出力とPython入門【Python】

本サイトでは様々な環境で気軽に本格的なロボット教育を行ってもらうべく、独自のロボット教材を開発しました。

現在、一般販売へ向けて準備をしております。

本Webページではβ版の先行体験をしていただく方向けに公開している資料になっております。

一般の方は販売をお待ちください。

前回はこちらです

1 この章の目的

この章では、PoliviaBot UMEの LED1(GP11)・LED2(GP12) を使って、
Pythonの基本構文(while文・for文)とデジタル出力の仕組みを学びます。

学習の流れは次の通りです。

  1. LED回路の仕組みを理解する
  2. Pythonでピンを操作する
  3. while文で「ずっと繰り返す」
  4. for文で「回数を決めて繰り返す」

2 本章で使うピン

  • LED1:GP11
  • LED2:GP12

3 LED回路の基本

LEDは電気を流すと光る部品ですが、流しすぎると壊れます。
そのため、必ず電流制限抵抗を入れます。

GP11 / GP12 ──[ 抵抗 ]──▶|── GND
                       LED

各部品の役割

  • GPIOピン:電圧を出す(HIGH/LOW)
  • 抵抗:電流を制限する(例:330Ω~1kΩ)
  • LED:電気を光に変える
  • GND:電気の戻り道

動作の対応関係

ピン出力電圧LED
LOW約0V消灯
HIGH約3.3V点灯

4 Python言語とは

Pythonは、人が読みやすく、書きやすいことを重視したプログラミング言語です。

特徴は次の3つです。

① 英語に近い書き方

たとえば、

print("Hello")

は、「Helloと表示しなさい」という意味になります。
命令がそのまま文章のように読めるのがPythonの強みです。

② インデント(字下げ)がルールになる

Pythonでは、字下げ(スペース)で処理のまとまりを表現します。
これにより、プログラムの流れが目で見てわかりやすくなります。

③ すぐに試せる

Pico Wでは、コードを書いてすぐ実行し、すぐ結果が見られます。
この「試す → 直す → 試す」の繰り返しが、学習を速くします。

Raspberry Pi Pico Wでは、MicroPythonという特別なPythonが動いています。

MicroPythonは、Pythonの文法で、マイコンのピンやハードウェアを直接操作できる
という特徴を持っています。

つまり、

  • Pythonの1行
    → マイコンの内部処理
    → GPIOピンの電圧が変わる
    → LEDが光る

という流れが起きています。

5 はじめてのPythonコード

まずは、プログラムの基本構造を体験します。

Thonnyのシェルやエディタに、次の1行を書いて実行してください。

print("PoliviaBot LED Test")

画面に文字が表示されれば、
Pythonの命令が実行されたことになります。

ピンを「使える状態」にする

マイコンのピンは、最初は「ただの端子」です。
Pythonから使うには、「このピンは出力です」と教える必要があります。

from machine import Pin

この1行は、ピンを操作するための道具を使えるようにするという意味です。

次に、ピンを「出力として使う」と登録します。

LED1 = Pin(11, Pin.OUT)

この1行の意味

  • Pin(11, Pin.OUT)
    → GP11を「出力ピン」として設定
  • LED1 =
    → このピンに「LED1」という名前をつける

LEDを点ける・消す

LED1.value(1)  # HIGH:点灯
LED1.value(0)  # LOW:消灯

ここで重要なのは、

数字の1と0が、電圧のON/OFFに変わっているという点です。

最終的にLEDを点灯する場合は以下のようなプログラムになります。

from machine import Pin

LED1 = Pin(11, Pin.OUT)  # GP11を「出力」として使う

LED1.value(1)  # HIGH = 点灯

1行ずつ意味を確認

  • LED1 = Pin(11, Pin.OUT)
    → GP11を「LED1」という名前で、出力ピンとして登録
  • LED1.value(1)
    → 電圧をHIGH(約3.3V)にする

消してみる

最後の行を以下のように変更して下さい。

LEDが消灯します。

LED1.value(0)  # LOW = 消灯

6 繰り返し(while文)とインデントの意味

ここまでのプログラムは、上から下へ1回だけ実行されて終わります。
しかし、ロボットは「ずっと動き続ける」必要があります。

そのために使うのが、**while文(繰り返し命令)**です。

① while文の基本形

while 条件:
    繰り返したい処理
    繰り返したい処理

この意味は、

条件が「正しい間」、中の処理を何度も実行し続けるということです。

while True の意味

次のように書くと

while True:

True は「正しい」という意味なので、
この条件はずっと正しいままになります。

つまり、この中の処理は、止めるまでずっと繰り返される
という意味になります。

ロボットのプログラムでは、ほとんどの場合この形を使います。

③ インデント(字下げ)は「かたまり」を表す

Pythonでは、スペース(字下げ)そのものが意味を持ちます。

次の2つを見比べてください。

正しい例

while True:
    LED1.value(1)
    time.sleep(1)
    LED1.value(0)
    time.sleep(1)

間違った例

while True:
LED1.value(1)
time.sleep(1)
LED1.value(0)
time.sleep(1)

④ なぜ字下げが必要なのか

while True: の下に字下げされた行だけが、繰り返される処理になります。

つまり、

while True:
    A
    B
C

この場合、

  • AとB → 何度も繰り返される
  • C → 1回だけ実行される

という意味になります。

⑤ スペースはいくつ入れるのか

一般的には、スペース4つを使います。

Thonnyでは、Enterキーを押すと自動で4つ入るようになっています。

タブキーは使わず、スペースでそろえるのが安全です

⑥ 実際のLEDプログラムで確認

from machine import Pin
import time

LED1 = Pin(11, Pin.OUT)

while True:
    LED1.value(1)
    time.sleep(1)
    LED1.value(0)
    time.sleep(1)

行ごとの意味

  • while True:
    → ここから下を、ずっと繰り返す
  • 字下げされた4行
    → LEDをつける → 待つ → 消す → 待つ
    これを何度も実行する

もし、字下げがずれていると、次のようなエラーが出ます。

IndentationError: unexpected indent

これは、

スペースの数がそろっていません
という意味です。

7 for文 ― 回数を決めて繰り返す

for文は、決められた回数だけ繰り返す
ための命令です。

基本形

for 変数 in range(回数):
    繰り返す処理

for i in range(5):
    print(i)

これは、
0, 1, 2, 3, 4
と5回表示されます。

for文でLEDを5回だけ点滅させる

from machine import Pin
import time

LED1 = Pin(11, Pin.OUT)

for i in range(5):
    LED1.value(1)
    time.sleep(0.5)
    LED1.value(0)
    time.sleep(0.5)

意味

  • range(5) → 5回繰り返す
  • i → 今が何回目かを記録する変数

課題1:ゆっくり点滅

LED1(GP11)を
2秒ON → 2秒OFF
で繰り返すプログラムを作ってください。

ヒント

  • time.sleep(2) を使います
  • while True: の中に処理を書きます
解答例はこちら
from machine import Pin
import time

LED1 = Pin(11, Pin.OUT)

while True:
    LED1.value(1)
    time.sleep(2)
    LED1.value(0)
    time.sleep(2)

課題2:交互点灯

LED1とLED2を
1秒ごとに交互に点灯させてください。

解答例はこちら
from machine import Pin
import time

LED1 = Pin(11, Pin.OUT)
LED2 = Pin(12, Pin.OUT)

while True:
    LED1.value(1)
    LED2.value(0)
    time.sleep(1)

    LED1.value(0)
    LED2.value(1)
    time.sleep(1)

課題3:回数を数えて止める

LED1を
3回だけ点滅して、最後は消えたまま停止
させてください。

解答例はこちら
from machine import Pin
import time

LED1 = Pin(11, Pin.OUT)

for i in range(3):
    LED1.value(1)
    time.sleep(0.5)
    LED1.value(0)
    time.sleep(0.5)

# 念のため最後は消灯
LED1.value(0)

次回はこちら

Follow me!

-Polivia Bot, Python, Raspberry Pi Pico, プログラム, ロボット制御, 電子工作, 高専3年生
-, , , , ,

PAGE TOP