Roomberry Surveillance Robot:Roomba + Pi Zero + Camera
Roomberry is Raspberry Pi Zero Wとカメラモジュールを使用したルンバをベースにした監視ロボット。数年前、RN-VXWiFlyモジュールを搭載したArduinoOneを使用してルンバをリモートで制御するためのテストを開始しました。
先月、アイデアを活性化することにしましたが、新しい目的は、ルンバを写真や動画を撮影できる監視ロボットに変えることです。最初のアイデアは、Arducamモジュールを使用して写真をキャプチャするマイクロコントローラーとしてArduinoを使い続けることでした。しかし、Arduinoの画像処理能力は私の興味にはあまりにも制限されていることにすぐに気付きました。 2番目のオプションは、プラットフォームを変更し、カメラモジュールでRaspberry Pi ZeroWを使用することでした。この代替案は、特に電力供給に関していくつかの課題を意味しましたが、より多くの可能性も提供しました。この投稿では、Raspberry Pi Zero Wとカメラモジュールを使用して、ルンバをベースにした監視ロボットであるRoomberryを構築する方法について説明します。
iRobot Roomba
iRobotのルンバはオープンインターフェースを提供します (OI)ミニDINコネクタを介してロボットと対話します。 OIは、ルンバクリエーター2(シリーズ600の適応)用に設計されたソフトウェアインターフェイスです。ただし、シリーズ500および700とも完全に互換性があります。それでも、プラットフォームと使用するファームウェアのバージョンによっては、いくつかのバグがあります。ソフトウェアインターフェースを使用すると、ルンバの動作を操作してセンサーを読み取ることができます。その機能の完全な説明は、このドキュメントにあります。
ミニDINコネクタ
ポートのスムーズで信頼性の高い接続/切断を確実にするために、メスコネクタ付きの5ピンケーブル(LEDストリップ用に設計)を、ピン1〜2を使用してミニDIN8ピンオスコネクタにはんだ付けしました。 (電源)、6-7(アース)、3(RxD)、4(TxD)、および5(BRC)。ただし、後でコメントするように、電源/アース接続は最終的には必要ありませんでした。得られたケーブルは次の写真で見ることができます。
ルンバシリアルポート
OIを使用するには、コマンド 双方向シリアル通信を介して送信する必要があります ミニDIN7ピン3(RxD)および4(TxD)で作成されます。このUARTポートは TTLレベルで動作します (0 – 5V)。この電圧は、ほとんどのArduinoボードのように、5Vロジックを使用するマイクロコントローラーにはまったく問題ありません。ただし、電圧ロジックレベルが低いもの(Raspberry Piなど)には適していません。
理論的には、ピン3(RxD)は3.3Vを高論理レベルとして使用します。ただし、ルンバはピン4(TxD)で5Vを出力するため、Raspberry PiZeroが損傷する可能性があります。ハードウェアを安全に保つために、ロジックレベルシフター 使用すべきです。これを行う最も簡単な方法は、以前のプロジェクトであるCalduinoですでに実装されているように、抵抗分割器を使用することですが、これは高速では機能しない可能性があります(Roombaのシリアルポートは115200ボーで機能します)。
その代わりに、アクティブなレベルシフターが望ましいです。独自の回路を構築する場合は、ここで説明するように電界効果トランジスタAN10441を使用してください。はるかに簡単なオプションは、Adafruitのこのような既存の双方向ロジックレベルコンバーターの1つを使用することです。このデバイスは、最大4つの信号を管理し、それらを5Vから3.3Vに安全に降圧できます。同時に、信号を3.3Vから5Vにステップアップします。
ルンバからラズベリーパイに電力を供給する
ミニDIN7からの電力供給
結論として、既存のサーモヒューズは、この接続を使用してRaspberry Pi Zero Wに電力を供給することを拒否しています。ボードからヒューズを取り外すことが可能で、安全かどうかを確認できませんでした。他のコンポーネントに損傷を与えることなく。
外部パワーバンクからの電力供給
バッテリーからの電力供給
これらのケーブルは、ヒューズによって制限されることなく、バッテリーへの直接接続を提供します。バッテリーの充電レベルに応じて、20.5〜10Vを供給します。ただし、Raspberry Pi ZeroWには安定化された5V電源が必要です。 電圧を下げるには、ステップダウン 使用されている。安価なリニアレギュレータの使用から、これを行うための多くのオプションがあります。 (7805 TO-220など)スイッチングレギュレータを取り付けるためのコンデンサがいくつかあります 。
接続は熱収縮で適切に保護され、D24V5F5モジュールは絶縁プラスチックで覆われていました(この写真は撮りませんでした)。モジュール出力をマイクロUSBケーブルにはんだ付けしました。これにより、モジュールをRaspberry Pi ZeroW電源入力に直接接続できます。
回転式ドリルツールとサンドペーパーを使用して、ルンバの上部カバーに小さな切り込みを入れて、マイクロUSBケーブルのきれいな出口を作成しました。次の写真。
ルンバOIモード
ルンバOIには、オフ、パッシブ、セーフ、フルの4つの動作モードがあります。
オフモード :バッテリー交換後、または最初に電源を入れたとき、OIはオフモードになっています。この状態では、ルンバはデフォルトのボーレート(115200)でポートをリッスンし、開始コマンドを待機します。コマンドのリセットと停止はいつでも送信でき、OIもオフモードになります。
パッシブモード: 開始コマンドが送信されると、ルンバはパッシブモードに入ります 。このステータスでは、任意のセンサーコマンドを使用してセンサーデータを要求および受信できます。ただし、アクチュエーター(モーター、スピーカー、ライト、ローサイドドライバー、デジタル出力)の現在のコマンドパラメーターを変更することはできません。ルンバはパッシブモードに入ります クリーニングモードコマンド(スポット、クリーン、シークドックなど)の1つが送信された場合も同様です。
パッシブモードでは、ルンバはオフモードになります 電力を節約し、バッテリーを節約するために5分間操作しない後。 iRobotのドキュメントによると、これらの5分が経過する前に、BRCピンを定期的にローにパルスするだけでスリープを無効にすることができます。各パルスは、この5分のカウンターをリセットする必要があります。私が(ルンバ780で)実行したテストでは、BRCを低くするとロボットはウェイクアップするだけですが、省電力モードへの移行を妨げることはありません。ロボットが目を覚ますとビープ音が鳴ります(ドックステーションで充電されていない場合)。
セーフモード :ルンバはセーフモードになります 安全なコマンドが送信された場合。セーフモードでは、ロボットを完全に制御でき、すべてのモーターとLEDがオフになります。ただし、安全関連の条件が満たされない場合、ロボットは自動的にパッシブモードに変わります。 。これらの安全条件は次のとおりです。前進中の崖の検出、ホイールの落下、充電器の接続。このモードでは、ルンバは充電されず(ドックにいる間)、5分間操作がないとオフモードに切り替えても電力を節約できません。この点は非常に重要です。パッシブモードまたはオフモードに切り替えないと、ロボットのバッテリーが消耗して損傷する可能性があります。
フルモード :フルコマンドをOIに送信すると、ルンバはフルモードになります 。ロボットはセーフモードとまったく同じように動作しますが、以前にコメントした安全関連の状態は考慮されないため、リスクに注意してください!
バッテリーに関する注意事項 :コメントしたように、パッシブモードでは、バッテリーの電力を維持するために、ルンバは5分間操作がないとスリープします。安全モードとフルモードでは、ルンバは決して眠ることはなく、この状態で長時間放置すると、充電器に接続していても、バッテリーを深く放電します。充電器はすべてのモードでルンバに電力を供給しますが、セーフモードまたはフルモードではバッテリーを充電しません。ルンバを保護するために、仕事が終わったら、および/または電池残量が少なくなったときに、ルンバをパッシブモードまたはオフモードに戻すことが重要です。
ラズベリーパイゼロW
カメラ
Raspberry Pi Zero WCSIカメラコネクタはPi3コネクタよりも小さいです。すでにカメラをお持ちの場合は、使用するアダプターを購入する必要があります。それ以外の場合は、このカメラモジュールを購入することをお勧めします。このモジュールには、5 MPセンサー(バージョン1の公式Piカメラと同じ)が組み込まれており、1080pで動画を録画できます。それは18€かかります。 IRカットの広角カメラを選びました。夜は何も見えないことはわかっていますが、IR LEDを使うとエネルギー消費量が増えるので、低く抑えたいと思いました。いつでもPhilipsHUEライトを使用して、ホームライトをリモートで制御できます。
ラズベリーパイゼロWに電力を供給
Pi Zeroの電源に関しては、いくつかの考慮事項があります。まず第一に、より大きなモデルとは異なり、Pi Zero には規制やヒューズがありません 過電圧または電流スパイクから保護します。これは、安定した電源を供給する必要があることを意味します 電源は右側のマイクロUSB(Pwr In)またはGPIOヘッダーの5Vピンに接続できます。どちらも同じ行です。誤った電圧が印加されたり、ラインに電流スパイクが発生したりすると、おそらく損傷が発生することを確認してください。 RaspberryPiを永続的に 。
すでにコメントされているように、ストレステストの実行中に、カメラを接続した状態で400mAの消費ピークが測定されました。 Raspberry Pi Foundationは、少なくとも1.2 Aの電源を推奨しています。ただし、降圧レギュレータによって提供される0.5Aで十分です。これまで、電源に関連する問題は見つかりませんでした。
消費電力の削減
ラズベリーはルンバのバッテリーで動作することを考えると、削減するのは興味深いことです。 消費電力 できるだけ。たとえば、Pi Zeroはヘッドレスで(モニターが接続されていない状態で)実行され、SSH経由でのみアクセスされることを知っているので、ディスプレイ回路に電力を供給する必要はありません。 HDMIポートを無効にすると、最大25mAを節約できます。これを行うには、/ usr / bin / tvservice -oを実行します(または-pを指定して再度有効にします)。 /etc/rc.localに短いスクリプトを配置しました。このスクリプトは、HDMIケーブルが接続されているかどうかを確認し、それに応じてHDMIポートを無効にします。
#現在のビデオ出力タイプを取得し、重要でないビットを取り除きます
video =“ $(tvservice -s | sed“ s /^.*\[\([^]*\).*$/\1/ ”)“
if [“ $ video“!=“ HDMI”];次に
printf「HDMIが検出されません。オフにします。\ n”
tvservice -off> / dev / null
else
printf“ HDMIが検出されました。\ n”
fi
#Pi Zero ACTLEDトリガーを「none」に設定します
echo none | sudo tee / sys / class / leds / led0 / trigger
#Pi Zero ACTLEDをオフにします
echo 1 | sudo tee / sys / class / leds / led0 / brightness
これは、/ etc /config.txtファイルを編集して行うこともできます。
#PiZeroのACTLEDを無効にする
dtparam =act_led_trigger =none
dtparam =act_led_activelow =on
これが実際の消費量の削減につながるかどうかはわかりませんが、使用されないため、/ etc / configに次の行を追加することで、PiZeroのBluetoothモジュールを無効にできます。 .txt:
#PiZeroでBluetoothを無効にする
dtoverlay =pi3-disable-bt
最後に、PiZeroにインストールされ実行されているソフトウェアを減らしてみてください。たとえば、 Raspbian lite を使用します デスクトップバージョンの代わりに、本当に必要な場合を除いて、追加のソフトウェアをインストールしないでください。マシンで実行されているプロセスが多いほど、消費量も多くなります。
その他の考慮事項
- PiZeroにリセットボタンを作成すると非常に便利です。これにより、システムを再起動するたびに電源装置を切断して接続する必要がなくなります。これを行うには、実行でマークされたラズベリーの穴を接続するだけです。 瞬間的なスイッチで。 Sparkfunのこのいずれかを使用しました。
- Raspbian Stretchlite以降を搭載した新しい新しいMicroSDカードが必要になります。この投稿で説明されているように、できるだけ大きなカードを使用することをお勧めします。ここで適用される構成はディスク書き込みを削減しようとしますが、十分な空き容量を残すことでSDカードの寿命を延ばすことができます。
- このチュートリアルでは、使用されているRaspberry PiZeroが RaspbianStretchヘッドレスを実行していることを考慮しています。 。以前の投稿で、Rasbianをインストールし、新しいユーザーを作成し、SSHを使用して接続する方法を読むことができます。
ルームベリーの構築
すべての要素が説明されたら、RoombaとのRaspberryインターフェースであるRoomberryを構築して実行する方法を見てみましょう。
私の目的は、すべてのポートとSDカードに簡単にアクセスできる安定したケースにコンポーネント(Raspberry Pi Zero、カメラモジュール、ロジックレベルコンバーター、スイッチボタン)をカプセル化することでした。自分の3Dデザインを印刷することを除いて、私が見つけた唯一のオプションはこれでした。このケースはすべての要件を満たし、必要ないくつかの電子部品を備えたアドオンボードであるHAT(Hardware Attached on Top)を取り付けることができます。次の画像は、PCBスキーマを示しています。実行ピンは、HATではなくPiZeroに配置されていることに注意してください。それを構築するには、12 x10ピンのPCBボードで十分です。 PCBを切断するために、回転工具を使用しました。
ロジックレベルコンバータ GPIOから取得できる高電圧と低電圧の両方が必要になります(Pi Zeroには、PAM2306AYPKEという名前の5〜3.3 Vの降圧コンバータが含まれています)。 切り替えボタンを配置しました HATの拡張であるため、PiZeroの真ん中にあります。そうすることで、ボタンのステムがケースを際立たせ、外部から押すことができるようになります。ケースにいくつかの穴を開ける必要があります。1つはボタンスチーム用で、もう1つはカメラ用の(そしてより大きな)穴です。さらに、ケーブルを180度回転させるためのスペースを確保するために、CSIコネクタ用に設計されたケースのスペースを慎重に研磨する必要がありました。次の写真は結果を示しています:
ラズビアンストレッチの構成
デフォルトでは、Piのシリアルポートはコンソールの入力/出力に使用されるように構成されています。 。このポートを介してルンバと通信するには、シリアルコンソールログインを無効にする必要があります。これは、raspi-configchoosingメニュー5 –インターフェースオプションおよびP6 –シリアルで実行できます。回答いいえ 「シリアル経由でアクセスできるようにシェルにログインしますか?」という質問に答えます。およびはい 「シリアルポートハードウェアを有効にしますか?」まだシステムを再起動しないでください。または、コンソール定義にコメントを付けて、ファイルの最後に/ boot / config次の行を追加することもできます。
#コンソール定義の検索とコメント
#console =serial0,115200
...
enable_uart =1
まだ行っていない場合は、カメラモジュールを有効にします 。繰り返しになりますが、raspi-configでメニュー5とP1オプションを選択することでそれを行うことができます。一方、ファイル/ boot / configを編集して、これらの変更を含めることもできます(カメラのLEDを無効にする必要はありませんが、電力を節約することをお勧めします):
start_x =1
gpu_mem =128
disable_camera_led =1
次に、すべてが正しく機能しているかどうかをテストします。 Piの電源を切り、シリアルポートをルンバに接続します。ルンバを充電ドックに置きます 。システムを起動し、すべてが期待どおりに機能していることを確認します(そして、ロボットが奇妙なことをしていないことを確認します)。
シリアルポートからの読み取りをテスト :ルンバから送信されたデータを読み取るためにミニコムを使用しました。インストールするには、次のように入力します:
sudo apt-get minicom
minicom –b 115200 -o -D / dev / serial0
ルンバが充電中の場合、ルンバの充電状態を毎秒報告する次の画像のようなテキストが表示されます。 Ctrlキーを押しながらAキーとXキーを押して、ミニコムを終了します。
Read More Detail :Roomberry Surveillance Robot:Roomba + Pi Zero + Camera
製造プロセス