PR

Raspberry Pi × Python × GPIOの基本はこの3つだけ【XYテーブル実例付き】

スポンサーリンク
Python
スポンサーリンク

はじめに

「Raspberry Piで何か動かしたいけれど、GPIOの設定がいまいちピンとこない…」 そんな悩みはありませんか?

実は、本格的なXYテーブル(自作CNC)を動かすコードでも、GPIOの基本操作はたったの3ステップに集約されます。今回は、実際にモーターを制御している現場のコードを抜粋しながら、最短ルートでGPIOをマスターしましょう。

スポンサーリンク

GPIO操作の「3つの型」をマスターする

プログラムの中で、モーターを動かす心臓部となっているのは以下の3つの命令です。

# 1. モードを決める
GPIO.setmode(GPIO.BCM)

# 2. ピンの役割を決める(出口か入り口か)
GPIO.setup(X_STEP, GPIO.OUT)

# 3. 電気信号を送る(動かす!)
GPIO.output(X_STEP, GPIO.HIGH)

この3ステップが何を意味しているのか、XYテーブルの動きとリンクさせて解説します。

Python×Raspberry PiでXYテーブルを作る 完成構成と機構部品の資料(図面・BOM)の紹介【第11回】

①【Step 1】BCMとBOARD、どっちを使う?

GPIO.setmode(GPIO.BCM)

ラズパイには「ピンの番号」の数え方が2種類あります。

Raspberry Piのピンアサインをみると
GPIO番号とコネクタのピン番が異なっていることが分かります。

  • BOARD: 基板上の端子番号(1番、2番…)で指定
  • BCM: チップ上の名前(GPIO20、GPIO21…)で指定

現場の知恵:
自作CNCやXYテーブルの界隈では、拡張基板や回路図との整合性が取りやすい「BCM」が主流です。今回のコードでも、配線のメンテナンス性を考えてBCMを採用しています。

② 【Step 2】OUT / INの意味:電気の「方向」を決める

GPIO.setup(pin, GPIO.OUT)

ピンを「出力(OUT)」にするか「入力(IN)」にするかの設定です。

  • OUT(出力): ラズパイからモータードライバーへ「動け!」と命令を送る側。
  • IN(入力): リミットスイッチなどが「壁に当たったぞ!」という信号をラズパイへ伝える側。

XYテーブル製作シリーズでは以下のように使用しています。

# モーターを動かす信号は「OUT」
GPIO.setup(X_STEP, GPIO.OUT)

# 原点検知用のリミットスイッチは「IN」
GPIO.setup(X_LIMIT, GPIO.IN, pull_up_down=GPIO.PUD_UP)

このように、「命令を出すピン」と「状態を監視するピン」を明確に分けるのが制御の基本です。

💡 現場の豆知識:なぜ pull_up_down=GPIO.PUD_UP が必要なの?

リミットスイッチのコードに出てくるこの一見複雑な指定。実は、精密なマシンを動かす上で「誤動作を防ぐ命綱」のような役割を持っています。

1.「浮いている」状態は、ラズパイが迷う原因
スイッチが押されていないとき、そのピンはどこにもつながっていない「空中に浮いた」状態になります。
この時、周りの静電気やノイズの影響を受けて、ラズパイ内部では「今はHIGHかな?それともLOWかな?」と判断がフラフラと不安定になってしまいます。このフラフラと不安定な状態を『浮遊状態(フローティング)』と呼びます。

2.PUD_UP で「ふだんはHIGH」に固定する
ここで GPIO.PUD_UP(プルアップ)の出番です。 この設定をすると、ラズパイの内部でそのピンをこっそり3.3V(HIGH)に接続してくれます。

  • スイッチを押していない時: 内部で電気につながっているため、安定して HIGH と認識される。
  • スイッチを押した時: 電気がグランド(0V)に流れるため、一気に LOW に変わる。

3.なぜXYテーブルで重要なのか?
もしこの設定を忘れると、モーターが動いている最中のノイズを「あ、リミットスイッチが押された!」とラズパイが勘違いして、何も当たっていないのに急停止(誤作動)してしまう原因になります。

整理すると:

  • PUD_UP は「普段はHIGHで安定させておくよ」というおまじない。
  • 「スイッチが入った瞬間だけLOWになる」という明確な差を作るための設定。

③【Step 3】HIGH / LOW = 物理的な「電圧」の切り替え

GPIO.output(pin, GPIO.HIGH)

最後は実際に電気を流す(または止める)操作です。

  • HIGH: 電圧がかかっている状態(3.3V)
  • LOW: 電圧がかかっていない状態(0V)

「モーターが動く」の正体:
「モーターが回る」というのは、実はこのHIGHとLOWを猛烈なスピードで繰り返しているだけなんです。

# 1ステップ動かす仕組み(コードより抜粋)
GPIO.output(STEP, GPIO.HIGH) # 電気を通す
time.sleep(t) # 少し待つ
GPIO.output(STEP, GPIO.LOW) # 電気を切る
time.sleep(t) # 少し待つ

この「カチ・カチ」という電気のスイッチングが、XYテーブルの精密な1mmの移動を生み出しています。

スポンサーリンク

まとめ:GPIOは「道具」

難しく考えがちなGPIOですが、要するに「どのピンに」「いつ」「電気を流すか」を決めているだけです。

今回のXYテーブル制御コードも、分解してみればこの基本の積み重ねでできています。まずは1つのLEDを光らせることから始めて、その延長線上にある「精密な機械制御」の世界を楽しんでみてください!

Raspberry pi 4 modelB用電源

Micro HDMI to HDMI変換アダプタ Raspberry pi 4 ModelBで使用

コメント