1
6

一歩先行くDIY!PythonとArduinoで作るカスタムLEDコントロールシステム

最終更新日 投稿日 2024年01月25日

はじめに

この記事では、Pythonを使用してArduinoのGPIOピンから出力を行う方法をわかりやすく説明します。

やりたいこと

目指すのは、PythonでGUIボタンをクリックすることでArduinoボードにトリ ガー信号を送り、特定のピンからHighレベル(5Vまたは3.3V)の信号を出力させることです。この信号はLEDを用いて視覚的に確認します。 PythonはPC上で実行し、ArduinoはUSBケーブルを通じてPCに接続されます。

必要なもの

  1. Arduinoボード (例:Arduino Uno)
  2. LED と抵抗
  3. USBケーブル (ArduinoをPCに接続)
  4. Arduino IDE (Arduinoプログラムを書くため)
  5. Python (Pythonスクリプトを実行するため)
  6. PySerialライブラリ (Pythonからシリアル通信を行うため)

Arduino スケッチの準備

Arduino IDEを開き、新しいスケッチを作成します。

  1. トリガーを受け取り、指定されたピンをHIGHに設定するコードを書きます。
  2. 例えば、ピン13にLEDを接続している場合は以下のようになります。
  3. スケッチをArduinoボードにアップロードします。
void setup() {
  pinMode(13, OUTPUT); // ピン13を出力モードに設定
  Serial.begin(9600);  // シリアル通信の開始
}

void loop() {
  if (Serial.available() > 0) { // シリアルポートでデータが利用可能かチェック
    char data = Serial.read(); // データを読み込む
    if (data == '1') {
      digitalWrite(13, HIGH); // ピン13をHIGHに設定
    } else if (data == '0') {
      digitalWrite(13, LOW); // ピン13をLOWに設定
    }
  }
}

Pythonスクリプトの作成

1. 基本コード

  1. Pythonスクリプトを作成し、PySerialを使ってArduinoと通信します。
  2. 以下はPythonスクリプトの基本的な例です。
import serial
import time

# シリアルポートの設定(ポート名は環境によって異なる)
ser = serial.Serial('COM3', 9600) # Windowsの場合
# ser = serial.Serial('/dev/ttyACM0', 9600) # Linuxの場合
# ser = serial.Serial('/dev/tty.usbmodem14201', 9600) # macOSの場合

time.sleep(2) # Arduinoとの接続が安定するまで待機

# LEDを点灯
ser.write(b'1')

time.sleep(10) # 10秒間点灯

# LEDを消灯
ser.write(b'0')

ser.close() # シリアルポートを閉じる


注意点

  1. シリアルポート: Arduino IDEのツールメニューで使用しているシリアルポートを確認し、Pythonスクリプトのserial.Serialで指定するポートを合わせてください。
  2. 通信速度: ArduinoスケッチとPythonスクリプトの両方で同じボーレート(この例では9600)を設定してください。
  3. 接続の安定化: PythonスクリプトでArduinoとの接続後、少し待機することで通信が安定します。
    これで、PythonからArduinoにトリガーを送り、LEDを制御するシステムが完成します。

2. GUIコード

Tkinterを使ってGUIボタンを作成し、そのボタンを押すとArduino経由でLEDが10秒間点灯するPythonスクリプトを作成します。以下はその基本的なコードです。

import tkinter as tk
import serial
import time

def toggle_led():
    ser.write(b'1')  # LEDを点灯
    window.after(10000, lambda: ser.write(b'0'))  # 10秒後にLEDを消灯

# シリアルポートの設定(環境に応じて適宜変更)
ser = serial.Serial('COM3', 9600)  # Windowsの場合
# ser = serial.Serial('/dev/ttyACM0', 9600) # Linuxの場合
# ser = serial.Serial('/dev/tty.usbmodem14201', 9600) # macOSの場合

time.sleep(2)  # Arduinoとの接続が安定するまで待機

# Tkinterウィンドウの作成
window = tk.Tk()
window.title("LED Control")

# ボタンの作成
button = tk.Button(window, text="LEDを点灯", command=toggle_led)
button.pack(pady=20)

# ウィンドウのメインループ
window.mainloop()

# ウィンドウを閉じたらシリアルポートを閉じる
ser.close()

実行結果

以下の画像とGIFは、上記のスクリプトを実行した際の結果を示しています。Pythonを用いたGUIからArduinoボードへのトリガー送信により、LEDの点灯と消灯が正常に行われることが確認できます。

image.png

ezgif-7-bd0025f62f.gif

1
6
0

新規登録して、もっと便利にQiitaを使ってみよう

  1. あなたにマッチした記事をお届けします
  2. 便利な情報をあとで効率的に読み返せます
  3. ダークテーマを利用できます
ログインすると使える機能について

コメント

この記事にコメントはありません。

いいね以上の気持ちはコメントで

1
6