![](https://habrastorage.org/storage2/b65/a30/79f/b65a3079f9fa2a5b0dae61373e9c5ef9.jpg)
コンポーネントを選択
過去に、私の友人と私は 、AndroidコミュニケーターからのBluetoothを介したロボットのリモート制御をサポートするLego Mindstorms NXTロボット用の独自のファームウェアを作成しました。 実験のために、ボード上にARM7を搭載したOlimex SAM7デバッグボードを購入しました。このボードは今回は制御コントローラーとして使用できます。
シャシーとして、おもちゃの車のボディを使用します。
Bluetoothモジュールが必要です。 すぐに結果を取得したかったので、そのモジュールは比較的高価であることが判明しましたが、その時点でストアで利用可能な唯一のBTM-112から選択されました。
さらに、ボードからの制御はモーターに直接移動できないため、増幅コントローラーが必要であることが判明しました(これについては後で説明します)。
合計で、当社のコンポーネント:
- タイプライター
- Olimex SAM7管理コントローラー
- BluetoothモジュールBTM-112
- モーターコントローラーL298N
Bluetoothを制御ボードに接続します
最初に、コントロールユニットへのコマンドの配信を設定します。 Bluetoothモジュールとコントローラーの接続図は単純です。実際には、いくつかの制御レッグを持つUARTです。つまり、モジュールを統合されたUARTコントローラーに接続するだけです。
ソフトウェアコンポーネントはそれほど複雑ではありません。 接続されると、モジュールは
"CONNECT RE:MO:TE:BT:MA:CC xxx \r\n"
という形式の行を書き込み、切断されると
"DISCONNECT xxx \r\n"
行を書き込みます。 ドライバーのタスクは、文字のストリームを監視し、接続が現在アクティブな場合、ストリームを制御アプリケーションに転送することです。 その結果、ドライバーはステートマシンになり、状態を切り替えるとは、関数ハンドラーを切り替えることを意味します。
リモコン
約束どおり、リモートコントロールはAndroidコミュニケーターを使用して実行されます。
過去のAndroidアプリケーション(ブルートゥース経由でLego Mindstorms NXTを制御)は、加速度計を使用してコミュニケーターの傾きを追跡し、適切な制御コマンドをNXTに送信しました。 したがって、最も簡単な解決策は、タイプライター制御プロトコルを既存のアプリケーションに追加することでした。 プロトコル自体は非常に原始的です。つまり、固定コマンド長、固定ヘッダー、そしてX軸とY軸に沿った制御です。
そのため、この段階では、モーターはまだ接続されていませんが、ハンカチを「操縦」できます。そのため、動きは内蔵のLEDで示されます(残念ながら、ビデオはありません。現時点では写真を撮っただけです)そして、それは魂を温めます。
![](https://habrastorage.org/storage2/96b/daf/81f/96bdaf81f1d39c463f4d460dda52ab6c.jpg)
制御盤とモーターを接続します
当初は、古いボード(マシン自体に配線されている)のコントロールを使用できると考えていましたが、モーターのコントロールが無線部にしっかりと結合されていたため、純粋な形では使用できないことがわかりました。 チップの出力が低いため、ヘッドコントローラーの足から直接モーターを駆動することもできません。 残念ながら、私はこの分野での経験がありません(結局、私は回路エンジニアではなくプログラマーです)ので、友人の助けを借りなければなりませんでした。 アドバイスに基づいて、L298Nアンプチップ(必要に応じて冗長化されていますが、箱から出してすぐに使用できます)を取り出し、 リファレンス回路を組み立てました。
準備された機械は子供向けであり、その制御は少し不自由だということを思い出させてください。 モーターの取り扱いを始めたとき、その理由の1つを理解しました。 回転機構には、サーボドライブではなく、従来の電気モーターが使用され、3つの状態(オフ、正方向、逆方向)のいずれかになります。 したがって、スムーズなターンを夢見ることはできません。
一般に、機能図は単純で、1つのモーターがエンジンとして使用され、2番目のモーターがステアリングホイールとして使用されます(特定の回転角度でロックされています)。
各モーターを制御するには、対応する制御脚に電圧を印加する必要があります(正または負の電圧またはゼロ)。 電圧は2点(入力制御レッグ)間で測定されます。つまり、次のような制御レッグのペアに電圧を印加する必要があります。
進む | 逆に | オフ | ||
---|---|---|---|---|
PIN1 | 1 | 0 | 0 | 1 |
PIN2 | 0 | 1 | 0 | 1 |
コードは非常に単純であることが判明したため、ここでは説明しませんが、投稿の最後にプロジェクト全体のソースへのリンクがあります。
まとめ
作業機付きローラー:
明らかに、欠点があります。
- 個別制御は左/右、前方/後方にあります。 これでモーターはGPIOによって制御されますが、制御用に選択されたラインはPWMコントローラーに再割り当てできます。 したがって、旋回と加速がスムーズになります。
- 高価なアンプ。 簡単で、安価なチップまたはいくつかのトランジスタを備えた回路に置き換えます。
- ささやかな機会。 スマートフォンを使用して制御を実行すると、コントロールパネルだけに比べて何らかの形で機能を拡張できます。
見どころ
すべてのコードは公開されています。
Olimexボードのファームウェアはこちらです。
Androidアプリケーションコードは、 Androidマーケットでアセンブルされたバージョンです。