レゴマインドストームNXT超音波センサーをラズベリーパイに接続する方法
要約
レゴマインドストームNXT超音波センサーをラズベリーパイに直接接続します。 TCA9517I2CバスバッファとSCL用の追加のGPIOピンが必要です。測定された距離を読み取るための短いC ++プログラムが提供されています。はじめに
Raspberry Pi(Pi)は、いくつかの欠点はありますが、間違いなく私のお気に入りのSBCです。圧倒的に最大のコミュニティとすべての詳細が十分に文書化されています。一方、レゴマインドストームは、私のお気に入りのロボット構築キットです。他のロボットキットとは異なり、ロボットを構築するための無限の可能性を提供します。今日は自動車ボット、明日は追跡ボット、翌日は6軸ロボットアーム–すべてが可能です。キットのNXTバージョンには、強力なARMベースのマイクロコントローラーが搭載されています。これは、ほとんどの単純なロボットアプリケーションには十分ですが、コンピュータービジョンなどの高度なプロジェクトには十分ではありません。最近、レゴはEV3を公開しました。これは、Linuxによって駆動されるRaspberryPiのようなはるかに強力な頭脳を備えた新しいキットです。しかし、それでもこの脳は、妥当な速度で高解像度の画像を計算することはできません。したがって、私はまだラズベリーパイの力とレゴの無限の可能性を組み合わせたいと思っています。私の知る限り、これを達成するプロジェクトはBrickPiと呼ばれています。かなり成功していますが、いくつかの欠点があると思います。この記事と次の記事で取り上げたいと思います。まず、古いI2CベースのNXTセンサーとのみ互換性があり、新しいUARTベースのEV3センサーとは互換性がありません。さらに、センサーをpiに直接接続するのではなく、2つのAtmegaマイクロコントローラー(Arduino互換)を使用してセンサーと通信します。新しいセンサーの追加やその他の変更には、新しいファームウェアが必要です。さらに、BrickPiは約0.6 Aの電流しか供給できないL293Dモータードライバーを使用していますが、レゴNXTモーターはストール時に最大2 Aを消費します[NXTモーターの特性]。この記事では、レゴマインドストームを直接接続する方法を紹介します。追加のマイクロコントローラーを使用せずに、Piへの超音波センサー(USセンサー)。課題
USセンサーをPiに接続する最初の試みは簡単でした。 2つのn-fetを備えたシンプルなレベルシフターを使用して両方のI2C信号ラインを接続するだけです[AppNote]。 USセンサーは5Vロジックレベルを使用し、piは3.3 Vのみを使用するため、レベルシフターが必要です。次に、5Vと9Vをセンサーに接続し、簡単なテストプログラムを開始すると、何も得られません。ワイヤーとソフトウェアを2回チェックした後、ロジックアナライザーを接続したところ、米国のセンサーは自分のアドレスを確認することすらできず、要求に応答できないことに気付きました。最初の大きな課題は、Piとセンサー間のハードウェア接続です。ハードウェアとソフトウェアのプロトコルは、回路図[Lego HDK]を含め、Legoによって十分に説明されており、I2Cを使用していますが、センサーをpiに直接接続することはできません。スキーム1でわかるように、センサーには非常に弱いプルアップ抵抗があります(82 k)およびそのI2Cライン上の非常に強力な直列抵抗(4.7 k)。 2番目の抵抗器が私たちの主な問題です。ご存知かもしれませんが、PiはI2Cラインに強力な1.8kプルアップ抵抗を使用しています。直列抵抗が原因で、センサーはI2Cラインをプルダウンできないため、I2Cマスターの要求に応答できません。図1は、この状況の大まかなシミュレーションを示しています。青い線はセンサーが送信しようとするデータを示し、緑の線はPiが受信したデータを示します。ご覧のとおり、センサーはシミュレートされたデータラインをローに引き下げることができません。また、3.3 Vへの強力なプルアップ抵抗が高レベルでもラインを支配するため、この状態ではレベルシフト回路が不要であることに注意してください。私がこれまでに見つけたこの問題の唯一の解決策は、I2C用の2チャネルの双方向バッファであるTCA9517を使用することです。さらに、このチップはレベルシフトを処理します.2番目の課題は、米国のセンサーのファームウェアのバグに起因します。たとえば、mbedフォーラムで説明されています。ロジックアナライザー(ドイツ語)を使用してレゴマインドストームNXTとUSセンサー間の通信を分析する方法を説明する記事もあります。要約すると、センサーへのレジスタの書き込みとセンサーからのデータの実際の読み取りの間に、追加のクロックサイクル(SCLラインの切り替え)が必要です。これは、もちろん、標準のI2Cハードウェアまたはソフトウェアの実装とは互換性がありません。任意のペアのGPIOを使用して特別なソフトウェアI2C実装を作成できますが、PiからSCLラインに別のGPIOを接続し、センサーへのレジスタの書き込みとレジスタの内容の読み取りを切り替える方が簡単です。ハードウェア
単純なプロトタイプに必要なハードウェア:- レゴマインドストームNXT超音波センサー
- マインドストームケーブル+ソケット/マインドストームケーブルをカット
- TCA9517とDIP8ソケットまたはその他のSO8→DIP8アダプターといくつかの基本的なSMDはんだ付けスキル
- Raspberry Pi(私はRaspberry Pi Aを使用していました)と通常のアクセサリ
- ブレッドボードとケーブル
製造プロセス