- PC上のソフトだけではなく、物理的なものを作ってみたい
- いつもと違う物を作ってみたい
- 普段のプログラム業務に疲れた・・
という方は、楽しめる記事になってます。
子供心に戻って夢中で楽しめる、Pythonで操作する簡単なおもちゃの作り方を紹介します。
制作物の動画はこちら
PC(ラズベリーパイもOK)からエアーガン発射装置を制御するガジェットです。簡単なプログラムで実装可能です。
準備するもの
「USB」スナイパー
(2013年製なので現在販売していませんが、ヤフオクとかメルカリで結構出回っています。)
本ガジェットは、電動ガンの機能の他に、目標物の認識用カメラも内臓しています。
当時のAKIBAさんの記事
用意するPC(ラズベリーパイでもOK)
本検証では、Linux(Ubuntu)を使用しました。ラズベリーパイでも動作確認済です。
MACでは、ドライバを製作する必要があります。(2021年4月時点で、筆者のPC(2018年製 MacBook Pro OSは最新)では認識しませんでした。)
Windowsは、7/Vista/XPが対応してます。(ごめんなさい。Windows10での確認ができていません。)
PCとの接続
物理的な接続は、USBを接続するだけです。
Linux上で「/dev」内のディレクトリに以下のファイルがあれば、USBとして認識しています。
筆者の環境では、「ttyUSB1」でした。ファイル名の最後の番号は変わります。
USBの接続すると、「ttyUSB◯←番号」ファイルが追加されるので、判断できると思います。
Pythonのコード
シリアル通信のライブラリ
「pyserial」を使用します。
インストールされていない方は、pipで簡単にインストール可能です。
pip install pyserial
シリアル通信のためのコード
import serial
import time
ser = serial.Serial('/dev/ttyUSB1', 9600)
time.sleep(1)
ser.write('@CPSM\n'.encode('utf-8'))
上記コードのserial.Serial(‘/dev/ttyUSB0’, 9600)の引数は、割り当てられたデバイス名とボーレートを入力します。
ボーレードの単位は、上記の場合9600ビット/secです。
BB弾、発射のためのコード
本記事の一番のメインディッシュですw
とても簡単で、以下のコードを記入するだけです。
ser.write('FIRE-2580\n'.encode('utf-8'))
引数の「FIRE-2580」の2580は、BB弾の発射時間になります。単位はmsecです。
本装置はBB弾発射の前に「ためる」時間が必要です。
筆者が確認した所、上記の設定(2580msec)で、一発発射しました。
時間を伸ばすと、連続してBB弾を発射できます。(BB弾、数個位なら、本ガジェットにセット可能です。)
砲身の移動
このガジェット、砲身を動かす事ができます(すごい!)。
砲身は、縦方向と横方向に動かす事ができます。そのコードは以下の通りです。
# 砲身を上に動かす場合
ser.write('UP-240\n'.encode('utf-8'))
time.sleep(2)
# 砲身を下に動かす場合
ser.write('DOWN-240\n'.encode('utf-8'))
time.sleep(2)
# 砲身を右に動かす場合
ser.write('RIGHT-240\n'.encode('utf-8'))
time.sleep(2)
# 砲身を左に動かす場合
ser.write('LEFT-240\n'.encode('utf-8'))
time.sleep(2)
引数に記述している240は、240msec秒間動かすという意味になっています。
シリアル通信が終わったら、最後に以下のコードを記入して、シリアル通信を終了させましょう。(忘れがちです。)
ser.close()
内臓カメラから撮像データを取得するコード
このコードは、普通にOpenCVを使ったコードです。(本ガジェット特有のコードではありません。)
参考までに記します。
import cv2
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if not ret:
break
cv2.imshow('img', frame)
if cv2.waitKey(30) == 27:
break
cv2.destroyAllWindows()
cap.release()
内臓カメラで撮像したデータを取得して、PCでリアルタイムで動画出力するコードです。「ESC」を押すと、終了します。
最後に
Pythonから操作する電動ガンのガジェットをご紹介しました。
本ガジェットは、簡単なコードで遊べるため、プログラミング初心者の学習にとっても、最適な題材だと思います。
また、内臓カメラもあるので、人工知能(ディープラーニング)と組み合わせると、何かを認識して自動で発射するとか、アイデア次第で楽しい装置になるかと思います。
楽しいひとときを。