1
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?