本日のPython備忘録シリーズ。
USBリレーモジュールという
シリアル通信で回路のONとOFFを切り替えるという
シンプルなデバイスを見つけました。
具体的にはUSBに接続して、対象のシリアルポートに
「1」を送信すればONに、「0」を送信すればOFFになる仕組み。
ちなみに送信する1と0は単純にテキストデータでOKらしい。
※Unicodeのバイナリデータですが。
なにそれ、おもしろ。
今回の玩具。
今日はこれでパルスジェネレータが作れんかな?
という天啓が舞い降りたので作ってワクワク。(大馬鹿)
USBリレーモジュールという
シリアル通信で回路のONとOFFを切り替えるという
シンプルなデバイスを見つけました。
具体的にはUSBに接続して、対象のシリアルポートに
「1」を送信すればONに、「0」を送信すればOFFになる仕組み。
ちなみに送信する1と0は単純にテキストデータでOKらしい。
※Unicodeのバイナリデータですが。
なにそれ、おもしろ。
今回の玩具。
今日はこれでパルスジェネレータが作れんかな?
という天啓が舞い降りたので作ってワクワク。(大馬鹿)
ボーレートは9600bps。
1ビットあたり1ミリ秒くらいの速度ですね。
てことはまあ大体2ミリ秒間隔でスイッチすると
500Hzくらいのパルスが発生できるわけです。
なんで500Hzのパルス信号が必要なのかは追々、別記事にしたためます。
というわけで以下Python。
import time
で、まぁ結果できるには出来たのですが
思ったよりリレーモジュールがうるさい。
というか
そもそもそんなに高速でスイッチするように出来てない気がする。
ので。
良い子は真似しないでね!
1ビットあたり1ミリ秒くらいの速度ですね。
てことはまあ大体2ミリ秒間隔でスイッチすると
500Hzくらいのパルスが発生できるわけです。
なんで500Hzのパルス信号が必要なのかは追々、別記事にしたためます。
というわけで以下Python。
import time
import serial
# USBシリアルポートの設定
serial_port = 'COM_X' # 仮想シリアルポートのパス
baud_rate = 9600 # ボーレート
# パルス信号の間隔(秒)
pulse_interval = 0.002 # 約2ミリ秒
# パルスの生成と制御
start_time = time.time() # スクリプト開始時刻を取得
duration = 10 # パルス生成を行う時間(秒)
# USBシリアルポートとの接続
ser = serial.Serial(serial_port, baud_rate)
def send_pulse(state):
#with serial.Serial(serial_port, baud_rate) as ser:
if state == 1:
# パルスON時の処理
ser.write(b"1") # USBリレーモジュールに「1」を送信
else:
# パルスOFF時の処理
ser.write(b"0") # USBリレーモジュールに「0」を送信
# パルス生成
def gen_pulse():
while time.time() - start_time < duration:
send_pulse(1) # パルスON
time.sleep(pulse_interval)
send_pulse(0) # パルスOFF
time.sleep(pulse_interval)
# メインの処理
gen_pulse() # パルス送信を実行
ser.close() # シリアルポートを閉じる
で、まぁ結果できるには出来たのですが
思ったよりリレーモジュールがうるさい。
というか
そもそもそんなに高速でスイッチするように出来てない気がする。
ので。
良い子は真似しないでね!
コメント
コメント一覧
そしてスミマセン。いやほんと、仰るとおりです。
思いつきのお遊びが単純な用を成した、という話なだけでして……。(後にこの機構はArduinoに置き換えました)
なさらぬとは思いますが決してマネはされませぬようお願いします。