Raspberry Pi 同士で Bluetooth通信(2)


2019年 03月 29日

さて、車側ができたので、つぎはリモコン側の製作である。

車を制御するのに、どういう方法にするかは色々ある。
本格的な制御をするなら、本格的なゲームコントローラのようにしないといけないが、以下のような簡単な方法にした。

ボタンを5つならべ、

左回転、後退、停止、前進、右回転

とすることにした。
実は、『ラズパイマガジン1018年12月号』の「リモコン自走カー」の記事のリモコン制御ボタンの並びと同じである。

DSCN4105-600.JPG

並んでいるのは安いトグルスイッチ(袋に10個まとめて入って売られていた)で、押し下げている間だけ導通する。

これをブレッドボード上に並べ、各ボタンとそれに対応させるGPIOポートを導線でつないでいる。
黒はアース(GND)である。

Raspberry Pi 側の対応ポートを全部入力に指定することで、ボタンの押し下げ状態かどうかを読み取っている。
押し下げると、GNDに繋がることでLOWになり、そうでないときHIGHになる。

プログラムはこんな感じ。

    if GPIO.input(18) == GPIO.LOW:
# 押し下げられたボタンに対する処理

実際には、この前に、使用するポートが入力のポートになることを指定しておく必要がある。

5つのボタンの状態を読み終えたら、0.1秒sleepすることにしている。
そんなに反応の早い車ではないので、この程度で十分人間には瞬時に反応していると思えるハズ。

次に、Bluetoothの設定を行わないといけない。

とりあえず、普通にペアリングを手作業でやっておく。本当は、全部自動で行うようにするのが良いのだが、とりあえず実験なので省略。

このとき、自走側のRaspberry Pi のMACアドレスが必要になる。

あ、それ以前に、Bluetoothを使うときには、PythonのBluetooth関連のモジュールを両方のRaspberry Pi にインストールしないといけない。
このあたりは、どんどん変更され、統合され、インストールしないといけないモジュール数は減少しているようなので、詳細を書くのは省略する。

Bluetoothのやり方も、『ラズパイマガジン1018年12月号』の「リモコン自走カー」の記事とほぼ同じなので省略する。

各ボタンに対して、次のように、英大文字1文字を対応させた。

左回転:L、後退:B、停止:S、前進:F、右回転:R

そして、押し下げられているボタンがあると、対応する1文字をBluetoothで車に送信した。

すると、車側のRaspberryPi のBluetoothで、常時受信待ち状態にしておき、1文字届く度に、モータの制御を行っている。

L:左後進、右前進
B:左後進、右後進
S:左停止、右停止
F:左前進、右前進
R:左前進、右後進

に従って、モータの回転方向を決めている。
細かく速度調整することも可能なのだが、とりあえずのテストということで、細かいことは一切サボった。

ということで、実際に動かしてみた。

ボタンが横一列に並んでいるのは、やはり不便である。本当は十字形に並べるべきだったのだが、手っ取り早くブレッドボードで済ませようとしたので、配置に著しい制約があって、横一列で我慢することにした。

それよりも問題なのは、右、左の回転を行うと、ベルトが外れやすいということだ。
それも、床の状態によってかなり異なり、絨毯の場合がよろしくない。
ベルトがそもそも組み立て式なので、張りが強いとベルトが壊れないかという心配もあり、この点も頑張らないことにした。
頑張る場合には、もっとちゃんとしたマニア用のベルトを買った方が良いようだ。

ということで、リモコン車の実験は、とりあえず終了。