WalaBeerタンク
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 3 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
必要なツールとマシン
> |
| |||
| ||||
| ||||
| ||||
|
アプリとオンラインサービス
> |
| |||
| ||||
| ||||
| ||||
| ||||
|
このプロジェクトについて
要約
すべての人の奥深くに欲しいものがあります。ビールとタンクを組み合わせるのもそのひとつです!このプロジェクトは、自律的な「フォローミー」機能またはRCコントロールを備えたビールをあなたに届ける音声制御タンクです。夢のビールタンクを作ろう!
<図>
シャーシ
戦車の良い基地が必要です。このシャーシはbanggoodで見つかりました。かなり安かったし、かっこよく見えたので購入する必要がありました。
<図>製品を受け取った直後に最初の問題が発生しました。不適切な梱包のため、輸送中に重傷を負いました。
<図> <図> <図> <図> <図>たくさんの時間とたくさんの接着剤がかかりましたが、幸いなことにほとんど私はそれを修理することができました。
クレーン
タンクのシャーシにはモーターとギアボックスの両方が含まれているため、次のステップはビールの提供方法を理解することでした。たくさんのアイデアを経て、私はそれを行うための最良かつ最もクールな方法は、ビールを隠してからクレーンを使用して持ち上げることであると考えました。これが私が思いついた基本的なデザインです:
丈夫で変更しやすいスケルトンが必要だったので、古いメタルビルダーキットを使用しました。クレーンは釣り糸でステッピングモーターに接続されています28byj-48ステッピングモーターはこの目的に最適でした。速くはありませんが、クレーンとビールを簡単に持ち上げることができます。実はモーターがとても強いので、間に合わないと釣り糸が壊れてしまいました。
<図> <図>それは素晴らしく機能しましたが、スケルトンは十分に強くなく、非常に早く曲がり始めました。この問題を解決するには、構造の完全性を高める必要がありました。私はそれをより強くするために2つの30cmの長さの堅い木の定規といくつかの余分な部品を使いました。いくつかの穴あけ、鋸引き、およびラッピングの後、次のバージョンがあります:
ご覧のとおり、変更により曲げの問題が解決され、非常に安定しています。
ケース
Walabot(開発者バージョン)が戦車の「目」になります。 Walabotの詳細については、Walabotセクションをご覧ください。フロントプレイスには、ワラボット用のホルダーパーツがあります。ワラボットのマグネットホルダーを使うのにぴったりのサイズの金属パーツがありました。また、ワラボットが丸い部分で回転するのを防ぐために、ホットグルーでワラボットのロゴの形を作りました:
<図> <図> <図>磁気マウントは、1つのWalabotを複数のプロジェクトで深刻な分解なしに簡単に使用でき、十分な強度があるため、優れています。
パーツを隠すためにフレームの周りにカバーを作り始めました。カバーには黒のダンボール紙とプラスチックシートを使用しました。
<図> <図> <図>この時点で、前部と中央部は覆われていませんでした。また、ビールを完全に隠すために上部にハッチが必要でした。ハッチを動かすために、私は2つのサーボ、いくつかのホットブルーといくつかの絶縁テープを使用しました。このトップドアはデザインのためだけに使用されており、ビールを実際に保護するものではありません。しかし、それが開いてビールを持ち上げるときはとてもクールです。
<図> <図>ドアは2枚のプラスチックシート、木の棒、そしていくつかの接着剤と巻き上げられた紙でできており、ホットグルーで接着されています。それは最も美しいものではありませんが、実際にはそれほど悪くはありません。私はすべてを黒く塗りました。実生活では、黒い部分の違いを確認するのははるかに困難です。
<図>
クレーン-Vol。 2
もう一度クレーンに戻りましょう。確実に使用するには、もう1つ必要なものがあります。フィードバックです。
もともと私はこれに単純なバイナリフィードバックを使用したかったのです。クレーンが下降状態になると、回路が閉じます。持ち上げると開きます。赤い円のネジとバネがそのスイッチでした。タイマーを使用してトップの位置を決定していました。
<図>それほど洗練されていませんでしたが、アイデアはうまくいきました。残念ながら、それはまったく信頼できなかったので、クレーンの損傷につながる可能性がありました。
私は別の、はるかに優れた解決策を思いつきました。それは青い長方形の解決策です。クレーンのシャフトとに10Kのポテンショメータを接着したので、クレーンの現在の角度について信頼できるフィードバックが得られます。この方法で上部と下部の位置を決定するのは非常に簡単です。参考:この時点まで、プロトシールドが非常に便利なため、古き良きArduinoUnoをテストに使用していました。
<図> <図>実際、私はこのフィードバック部分が本当に好きです。計画されていませんでしたが、タンクの外観にさらに涼しさを加えています。
回路
さて、タンクの本体は完成しましたが、動かすにはいくつかの電子機器が必要です!
<図>この画像もSchematicsセクションに配置しましたが、ここではダウンロードせずに拡大できます。回路は最初は少し複雑に見えるかもしれませんが、実際にはかなり簡単です。添付のメモは、説明が必要なものすべてに役立つはずです。
このプロジェクトは現在、Arduino MKR1000のWiFi機能を使用していませんが、私が知っているように、RC送信機を使用してタンクを制御したい場合は、ArduinoUnoに置き換えることはできません。私のプロジェクトでは、速度、回転、クレーンの制御に3つのチャネルを使用しています。外部割り込み機能付きの3つのピンが必要です。 Arduino Unoには、この目的のために2つのピンしかありません。 RC受信機の対応するチャネルのPWM値を読み取るためにこれらのピンが必要です。
<図> <図>私はプロトPCB上に回路を構築しました。かなりコンパクトになりました。左側の青いLEDは、デバッグ用の単純な「組み込み」LEDでしたが、実際に使用したことはありません。緑のコネクタは、LiPoバッテリーの接続に使用されます。
このボードに接続しているワイヤーのほとんどは、タンクの上部にあります。 「ワイヤー地獄」を避けるために、そこにボードを接着することは明らかでした。
<図>画像からわかるように、元々はRaspberry Pi Zero Wから始めましたが、電力が不足しているため、Raspberry Pi 3Bを使用するようになりました。
この時点では完全に機能していましたが、隠しヘッドランプというクールな機能を追加しました。右側の黒いプラスチック部分は簡単に移動できます。サーボを取り付けて上下に動かし、12VLEDストリップの1つのセグメントも使用しました。 7.4VLiPoバッテリーから12VLEDストリップに電力を供給することは良い考えではありません。ライトは非常に弱くなります。真ん中のLEDをワイヤーに交換して、残りのLEDを明るくしました。完璧に機能しました。
<図> <図>前面のLEDは、青色のインジケータLEDと同じピンで制御されます。ボードにヘッダーとトランジスタを追加して、ボードを少し変更する必要がありました。結果は素晴らしいです:
<図>
Arduino-ハードウェア
ArduinoMKR1000を使用してタンクを制御しました。これは、私のコレクションで最小のArduinoまたはArduino IDE互換デバイスであり、3つの外部割り込みを処理でき、このプロジェクトに十分なピンがあります。 WiFi機能もありますが、今は使用しません。
<図>タンクには5つのPWM対応ピンが必要です。サーボ用に3つ、モーター用に2つ。機能を確認すると、12個のPWM対応ピンがあることがわかります。それで十分ですよね?はい、いいえ。
ピン2〜5には〜マークが付いています。これは、この4つのピンだけがハードウェアPWM信号を作成できることを意味すると思います。他のピンはソフトウェアPWM信号しか作成できないと思います。技術仕様にはこれについては書かれていませんが、最初のプロトタイプMKR1000を入手したとき、ドキュメントには4つのPWM対応ピンしか記載されていませんでした。その4つ。もともと私はこれらのソフトウェアPWMピンのうちの2つを介してハッチサーボを制御していました。ソフトウェアPWM生成とハードウェア割り込みベースのPWM信号読み取りの組み合わせにより、この問題が発生します。
サーボにハードウェアPWMピンを使用することでこの問題を解決しました。残念ながら、他の2つのハードウェアピンはモーターを制御するために必要だったため、LEDドアのサーボにこれらのピンの1つを使用する必要がありました。 TB6612FNGモータードライバーのおかげで、モーターを制御するために必要なPWMピンは2つ(および他の4つのデジタルピン)だけでした。 「LEDドア」サーボは他のサーボよりもはるかに遅いので、時々静かなブーンという音がします。 2つではなく1つのソフトウェアPWMピンのみを使用することも役立ちました。将来的には、その部分を再構築して、LEDのドアを開くための他の手段を使用する可能性があります。ソレノイドがうまくいくかもしれません。
<図>Arduinoはバッテリーの電圧を測定し、シリアルで送信できます。さらに、タンクの後ろに簡単な電圧計を統合しました。バッテリーの状態に関するユーザーへのフィードバックとして使用されます。これは独立した回路であり、Arduinoによって制御されません。
Arduino-ラジコン
MKR1000は、外部割り込みを使用して3つの個別のPWM信号を処理しています。信号のパルス時間は約1000〜2000usの範囲です。最初のチャネルは、motorSpeedBaseと呼ばれる変数を計算するために使用されます。これはモーターの基本速度であり、次のように計算されます。
motorSpeedBase =(vertical_pulse_time-1500)/ 2;
モーターを制御するために、8ビットのPWM信号を使用したので、値をこの-255から255の範囲にスケーリングしました。 MKR1000は8ビットよりも優れていますが、これらのモーターには十分すぎるほどです。
motorSpeedChange変数は攪拌に使用され、2番目のチャネルから計算されます。これは、motorSpeedBaseと同様に計算されます。違いは、2ではなく3で除算することです。この違いは、戦車の制御に役立ちます。
motorSpeedChange =(horizontal_pulse_time-1500)/ 3;
3番目のチャネルは1つのスイッチで使用されます。クレーンとハッチドアの動きを制御します。次のように計算されます:
elevated =state_switch_pulse_time <1500;
その値は、スイッチをオフにすると1000 us、オンにすると2000usです。結果はブール値です。
最終的なモーター速度は次のように計算されます:
int rightMotorSpeed =motorSpeedBase + motorSpeedChange; int leftMotorSpeed =motorSpeedBase --motorSpeedChange;
結果が最大値/最小値よりも高い/低い場合、値は最大/最小値(255または-255)に設定されます。関連するピンは、motorSpeed値に基づいて更新されます。速度値が最小値に達しない場合、そのモーターは無効になります。
クレーンとハッチはこの機能によって処理されます:
void handleCrane(){int cloneValue =analogRead(CRANE_FEEDBACK_PIN); if(elevated){if(craneValue
クレーンの現在の状態を確認することから始まります。上昇させる必要があるが上昇していない場合は、ハッチドアのサーボを更新してクレーンを上に移動します。下げる必要があるがそうでない場合は、クレーンを下げてからハッチを閉じます。ステッピングモーターのコイルは、バッテリーをオンのままにすると深刻な温度になり、バッテリーを消耗する可能性があるため、プロセスの最後に無効にする必要があります。
Arduino-ラズベリーパイ通信
Arduinoは、USB-マイクロUSBケーブルを使用してRaspberry Piから接続および給電され、シリアルを介して通信します。ラズベリーは次のコマンドでArduinoを制御します:
- s->無線制御をオフにし、シリアルコマンドのみを受け入れます。 Arduinoはこれに「OK」と答え、無線制御を無効にします。このOKは、RpiがArduinoを認識する方法の一部です。
- r->ラジコンをオンに戻します
- e->クレーンを持ち上げる(したがってハッチを開く)
- d->クレーンを下げる
- m XY->モーターの速度を設定します。 XはmotorSpeedBase、YはmotorSpeedChangeです。 XとYは両方とも整数である必要があります
- b-> arduinoは整数で答えます:バッテリー電圧* 100
- l->照明をオンにする
- o->照明をオフにする
シリアル制御の場合、ArduinoはRCチャネル1と2の割り込みを無効にしますが、3は無効にしないことに注意してください。チャネル3(スイッチ)は、WalaBeerタンクが狂った場合に無効にするための安全スイッチとして使用されます自律モードのもの。
ワラボット
これがWalabotの出番です。Walabotは、イメージングにマイクロ波を使用する3Dセンサーです。壁越しに見たり、遠くから呼吸を検出したり、暗闇で見たりするなど、すばらしいことができます。他の人がそれをするのに素晴らしい仕事をしたので、私は他の機能についてのページを書きたくありません。しかし、私はそれらについて読むことを本当にお勧めします。
<図>タンクの唯一のナビゲーションセンサーとしてWalabotを使用します。 WalabotをRaspberryPiで使用するには、最初にWalabotSDKをインストールする必要があります。ここからSDKをダウンロードでき、WalabotAPIサイトがSDKのインストールに役立ちます。 Walabotの使い方については、役立つ情報や例がたくさんあります。サイトを確認することをお勧めします。
Walabotの消費電力は0.4〜0.9Aです。これは、デフォルトでは、RaspberryPiがWalabotに電力を供給するのに十分なエネルギーを提供できないことを意味します。幸い、次の行を追加することで、rpiのUSBポートの電力出力を増やす方法があります: `max_usb_current =1`を/boot/config.txtに追加します。私が知っているように、それは出力を600mAから1200mAに増やします。
それは素晴らしいことですが、ここで問題が発生します。私はArduinoとRaspberryのサーボにも電力を供給しています。タンクのモーターとステッピングモーターはバッテリーで動くので、大丈夫だと思いました。しかし、そうです。この状態でWalabotを起動すると、WALABOT_ERR_PROTOCOLメッセージで停止します。開始しようとすると、電圧低下が発生する可能性があります。
バッテリーエリミネーター回路は最大3Aを供給できるので、ここではそれで十分です。 Walabotには2つのマイクロUSBポートがあります。真ん中のポートは、他のポートと通信しながらそこから電力を供給できるため、この状況で役立ちます。これを行うには、このジャンパーを移動するために、変更を加えてWalabotのカバーを取り外す必要がありました
<図> <図>その後、Walabotは完全に機能し、WALABOT_ERR_PROTOCOLはなくなりました。
背面のロゴ(滑らかな部分は前面)には、4つの非常に強力な磁石が組み込まれています。これらは、追加のハードウェアなしで、ワラボットをタンクの金属フロントに簡単に取り付けるために使用されました。
フォローしてください
戦車の「セールスポイント」の1つは、フォローミーモードです。あなたがビールタンクにあなたに従うように頼むならば、それは最善を尽くしてあなたに従うでしょう。目的地に着いたら、中のビールを頼むだけです。それは素晴らしいパーティートリックです!
Walabot SDKは、Walabotと対話するためのあらゆる種類の方法を提供します。私のプロジェクトは getTargets を使用しています 移動ターゲットID で機能 (MTI)モード。 Walabotの前で動く物体を検出するために使用されます。私の構成では、getTargetsは最大4つのターゲットを返し、最大距離1.5メートルのオブジェクトを表示します。
ターゲットには、XYZ座標と振幅パラメータがあります。ここでは高さ(X)は重要ではないため、Y座標とZ座標のみを使用します。問題は、どのターゲットが何であるかを判断する方法がないことです。
初期のバージョンでは、ターゲットリストで人間を見つけるために、ルールを作成しました。フォローするように注文する前に、80cmの距離でワラボットの前に立つ必要があります。その後、私のコードは、十分に高い振幅を持つ最も近いオブジェクトが人間であると想定しています。人間が検出された場合、戦車がしなければならないのは、移動して人間を目的の位置に保つことだけです。
残念ながら、それは完璧ではありませんでした。幸いなことに、私は別のアプローチの提案を受けました。それは同じように始まります:あなたは80cmの距離でワラボットの前に立つ必要があります。戦車に最も近いターゲットは人間と見なされます。その後、各反復で、人間の位置が前の位置に最も近いターゲットになります。新しい位置と古い位置の間の距離が長すぎる場合、タンクは人間の位置を更新せず、停止します。戦車は古い位置の周りにいる人間を見つけようとするので、その人物を見つけた場合は、追跡を続けます。それはかなり簡単な考えです。
アリーナビューでいくつかのケースを調べてみましょう。戦車の目的は、人間をターゲットエリア(赤い長方形)に留めておくことです。青が最も近く、これらの場合は人間です:
<図> <図> <図> <図> <図>- ケース1:人間はターゲットエリアにいるため、移動は必要ありません
- ケース2:人間が右側にいて、タンクに近すぎます。最初に戦車は右に曲がり、次に後方に移動して人間から遠ざかります。
- ケース3:戦車は回転する必要はありませんが、人間が遠すぎます。前進します。この写真を撮ったとき、ワラボットは3つのターゲットを見ました
- ケース4:この写真と左側にはターゲットが1つだけあります。タンクは左に移動してから前方に移動します。
- ケース5:人間が赤い長方形になるまで、戦車は後方に移動します。
これらの画像は、Walabot-SensorTargetsデモのわずかに変更されたバージョンからのアリーナビューの印刷画面です。私のプロジェクトはGUIを必要としないため、GUIはありませんが、同じプリンシパルを使用しています。 githubページから他のデモプロジェクトをチェックすることをお勧めします。
現在の設定での動きはあまり流動的ではありません。前進すると同時に自律モードになることはできません。その主な理由は、ワラボットのフレームレートです。現在の設定では約6FPSです。これは、ラズベリーが0.16秒ごとに1つの更新を取得することを意味します。これは問題だ。 0.16秒で多くのことが起こる可能性があります。この問題を克服するために、私はタンクの速度を落としました。私は可能な限り最小の速度を使用して前進し、方向転換しました。また、追跡されたセットアップではこれらの動きが信頼できないため、回転と移動の組み合わせを削除しました。高速では多くのオーバーシュートを起こし、低速では現在のバージョンよりも信頼性が低くなりました。
音声制御
自律モードでは、タンクを制御するためのクールな方法が必要でした。これを行うために、AmazonのAlexaスキルキットを使用しました。初期のバージョンでは、ラズベリーを直接制御するためにngrokで使用していました。通常、人々はこれを行うためにAmazon Echoのバージョンを使用しますが、残念ながら私はそのようなデバイスを持っていません。これを行うには、echosimとGooglePlayのAmazonAlexaアプリを使用する必要がありました。 WalaBeerはAlexaが認識できないものであるため、スキルの名前はBeerTankです。ビール、ラブビールなどを購入しますが、WalaBeerは購入しません。これらのコマンドを使用して、Alexaとやり取りできます:
- ビールタンクを開始
- ライトを{オン/オフ}にします
- {開閉}貨物倉
- {開始/停止}私をフォロー
- [停止/キャンセル]
最初の2つの機能に関するビデオは次のとおりです。
ビデオ内の一部の音声コマンドは、公開プロセス中のいくつかの要件により、現在のコマンドと異なる場合があります(例:「stop」が「stopfollowingme」に変更されました)。 Alexaを使用してRaspberryPiを制御するのは非常に簡単ですが、それを行うための知識を得るのは簡単ではありません。初めてngrokを使用しました。これを行うのは非常に簡単でしたが、ngrokはテスト目的にのみ適しています。 ngrokが提供するURLは、再起動するたびに変更され、他にも問題があります。簡単に言えば、より良いソリューションが必要でした。
AWSLambdaとAWSIoTの使用に移りました。それらは私の目的には完璧ですが、それらの使用方法に関する有用な情報を見つけるのは非常に困難でした。部分的なチュートリアルやドキュメントをたくさん見つけましたが、通常、いくつかの重要な情報が欠落しているか、機能しませんでした。最後に、KurtBraunのYouTubeチャンネルを見つけました。彼は私を大いに助けてくれた素晴らしいチュートリアルを作りました。 AWSLambdaとAWSIoTを使用したい場合は、彼のビデオを本当にお勧めします:
この他のビデオは、私が実験の部分を行ったときにも役に立ちました。 LambdaとAWSIoTの構成については詳しく説明しません。これらのビデオには、このトピックに関する必要な情報がすべて含まれています。
彼は自分のビデオでNode-REDを使用しました。これは非常に便利なツールですが、JavaScriptの代わりにPythonを使用する必要がありました。 AmazonはPython用のSDKを提供していますが、私はPaho MQTT Clientを使用して、RaspberryPiに「wbt」トピックのメッセージをサブスクライブさせました。使いやすかったです。
最後に、プロトタイプの現在のステータスに関するビデオを次に示します。
ご覧のとおり、「フォローミー」モードは非常にうまく機能していますが、このモードではタンクが非常に遅くなります。おそらくそれはわずかに高速化が可能ですが、私はそれがクレイジーなことをしないことを確認したかったのです。タンクの速度を落とす必要がありました。高速になると、ほとんどの場合、回転しているときに簡単に失くしてしまう可能性があるためです。 「フォローミー」モードで速度を大幅に上げる方法についていくつかのアイデアがありますが、そのソリューションを実装するには、時間がかかり、場合によっては追加のハードウェアが必要になります。
ここから私のスキルにアクセスできます。これがそのIDです:
amzn1.ask.skill.a7453502-b1aa-47fa-a552-ed8e2c792b2e
スキルを公開したい場合は、認証してデバイスを区別することをお勧めします。そのためには、この素晴らしいチュートリアルに従ってください。
キャンセル
「ほとんどの電子機器は上部に統合されている」という画像にある別の部分について、いくつかの言葉を書きたいと思います。私はこれらについて話している:
<図> <図> <図> <図>これらはタコメーターです。最終バージョンでは使用しませんでしたが、まだ使用されています。
このようなタコメーターは、メインホイールの白黒の紙とその前の反射型IRセンサーの2つの部分で構成されています。反射光は対象物の色によって異なります。差が非常に大きいため、状態の区別が非常に簡単で、回転速度を簡単に計算できます。この設定の唯一の問題は、動きが遅い場合のサンプルレートが低いことですが、高速では非常にうまく機能します。
タコメーターはうまく機能しましたが、プロジェクトではタコメーターは必要ないことに気付きました。また、他の目的でArduinoのGPIOピンも必要でした。これが彼らの話です。
結論
最終結果は素晴らしく、便利で楽しいです!また、他の将来のプロジェクトのための優れたプラットフォームでもあります。懸命に努力して音声制御を機能させることができ、Walabotもこの目的のための優れたセンサーであることが証明されました。私はこの戦車を改善するための多くの方法を見ているので、あなたは将来それについてもっと見るでしょう!
これは私のこれまでで最高で最も成功したプロジェクトです。そしてまた最長。それがさらに長くなるのを防ぐために、私が得たすべての助けに感謝したいと思います。また、読んでくれてありがとう!賞品として、奇妙な犬についての写真があります:
<図>
コード
ArduinoとRaspberryPiのコード
このリポジトリには、MKR1000およびRaspberry Pi 3 Bhttps://github.com/abysmalsb/Beer-Tank 回路図
パーツが見つからない場合は、同様のものに交換しました。詳細については、注記を参照してください。 WalabotはUSBケーブルでRaspberryPiに接続されています。 パーツが見つからない場合は、同様のものに交換しました。詳細については、注記を参照してください。 WalabotはUSBケーブルでRaspberryPiに接続されています。製造プロセス