PythonでArduinoにシリアル通信で命令を送りラピロを動かす方法
この記事はこんな人にオススメです
  • Pythonでラピロを動かしたいと思っている人
  • シリアル通信のプログラムを探している人
  • Arduinoやマイコン系が好きな人

こんにちは.けんゆー(@kenyu0501_)です.
以前,脳波信号を使って,二足歩行ロボットのラピロを動かす時に必要になったシリアル通信について記事を書いていきます.


Pythonで色々と処理ができたら楽ですよね!ってことでシリアル通信についてプログラムを書き留めておきます.

シリアル通信とは!?

逐次的に1bitずつデータを送っていく通信のことです.
以前,Arduinoに液晶パネルを接続した方法もシリアル通信の一種(I2C)なので,この辺を見ると概念が理解できるかもしれません.

ラピロのArduino側のプログラムについて

ラピロという二足歩行のロボットがあるのですが,今回は,このロボットを動かすためのシリアル通信プログラムになっています.
基本的にラピロを動かす際には,Arduino IDEを起動してシリアルモニタから通信をすると思いますが,Pythonでもできるんですよね.
ラピロ側に,動作のプログラムが組み込まれていることが条件です.
(サーボモータやLEDの制御です)
この組み込みプログラムについては,ラピロ専用の参考書(二足歩行ロボット 工作&プログラミング)などで配布されています.

ちょっと高いですが,ロボットで遊ぶ分にはかなり面白いです.

シリアル通信のプログラム

シリアル通信のプログラムは以下になります.
ラピロ専用の前進コマンド(#M1)と停止コマンド(#M0)を3度繰り返すプログラムです.

import serialを使うために

シリアル通信を行うためのモジュール(serial)を扱うために,以下のライブラリをインストールしておいてください.

$ pip install pyserial

これで使えるようになります.

シリアルポートとビットレートの設定

シリアルポートは,Arduino IDE のツールから各自調べてください.
またビットレートは,57600です.

for分の中身

おいら達の環境だと,ラピロを最初に動かす際,まずtime.sleep(2)で2秒ほど待たないと,ラピロが動きませんでした笑
何かタイムラグみたいなものがあるんでしょうね.
この一文を入れないと,動かなかったので,最初は苦労しました笑

また,シリアル通信で命令を送る場合は,

ser.write(“#M1”)

で良いと思いますが,おいらの環境では,文字コードが未サポートだったので,以下に修正しました.

ser.write(str.encode(“#M1”))

そうすることで,ラピロ側に通信ができました.