自動フロアクリーナーは目新しいものではありませんが、すべて共通の問題があります。それらはすべて、彼らが行うことに対して高すぎる。今日、私たちは市場に出回っているもののほんの一部しかかからない自動家庭用掃除ロボットを作ります。このロボットは、前方の障害物や物体を検出し、部屋全体が掃除されるまで、障害物を避けて動き続けることができます。床を掃除するための小さなブラシが付いています。
Arduinoを使用したスマート掃除機ロボットもチェックしてください
必要なコンポーネント:
- Arduino UNOR3。
- 超音波センサー。
- Arduinoモータードライバーシールド。
- ホイールドライブロボットシャーシ。
- Arduinoをプログラムするコンピューター。
- モーター用バッテリー。
- Arduinoに電力を供給するパワーバンク
- 靴のブラシ。
- スコッチブライトスクラブパッド。
注: バッテリーを使用する代わりに、以前のように長い4本のより線を使用することもできます。これはあまりエレガントで実用的な解決策ではありませんが、現実の世界で毎日使用する予定がない場合は実行できます。ケーブルの長さが十分であることを確認してください。
詳細に入る前に、まず超音波について説明しましょう。
HC-SR04超音波センサー:
超音波センサーは、高精度で安定した測定値で距離を測定するために使用されます。それは2cmから400cmまたは1インチから13フィートまでの距離を測定することができます。空気中に40KHzの周波数で超音波を放射し、物体が邪魔になるとセンサーに跳ね返ります。物体に当たって戻ってくるまでの時間を利用して、距離を計算することができます。
超音波センサーは「ECHO」と呼ばれる技術を使用しています。「ECHO」は単に反射された音波です。行き止まりに達した後、音が反射して戻ると、ECHOが発生します。
HCSR04モジュールは、「トリガー」ピンを約10us高くすると、超音波範囲で音の振動を生成します。これにより、音速で8サイクルの音波バーストが送信され、オブジェクトに当たった後、エコーピンで受信されます。音の振動が戻るまでの時間に応じて、適切なパルス出力を提供します。物体が遠くにあると、ECHOが聞こえるまでに時間がかかり、出力パルス幅が大きくなります。また、障害物が近くにある場合、ECHOの音が速く聞こえ、出力パルス幅が狭くなります。
超音波がセンサーに戻るまでにかかる時間に基づいて、物体の距離を計算できます。音の時間と速度がわかっているので、次の式で距離を計算できます。
距離=(時間x空気中の音速(343 m / s))/ 2。
波は同じ距離を前後に移動するため、値は2で除算されます。したがって、障害物に到達する時間は、かかる合計時間の半分にすぎません。
したがって、センチメートル単位の距離= 17150 * T
私たちは以前、この超音波センサーとArduinoを使用して多くの有用なプロジェクトを作成しました。以下でそれらを確認してください。
- 超音波センサーを使用したArduinoベースの距離測定
- Arduinoと超音波センサーを使用したドアアラーム
- Arduinoを使用したIOTベースのごみ箱の監視
フロアクリーナーロボットの組み立て:
Arduinoをシャーシに取り付けます。シャーシが金属製の場合は、何も短絡させないようにしてください。 Arduinoとモーターコントローラーシールド用のボックスを入手することをお勧めします。ネジを使用して、ホイールとシャーシでモーターを固定します。シャーシには工場からこれを行うオプションがあるはずですが、そうでない場合は、別のソリューションを即興で作成できます。エポキシは悪い考えではありません。シューブラシをシャーシの前面に取り付けます。これには、M-Sealエポキシとドリルねじの組み合わせを使用しましたが、他のより簡単なソリューションを使用することもできます。スコッチブライトスクラブパッドをブラシの後ろに取り付けます。シャーシを横切ってそれを保持するシャフトを使用しましたが、これも不可能です。バネ仕掛けのシャフトを使用して取り付けることができます。バッテリー(またはシャーシの背面にあるケーブル)を取り付けます。エポキシまたはバッテリーホルダーはこれを行うための良い方法です。ホットグルーも悪くありません。
配線と接続:
この自動掃除ロボットの回路は非常に簡単です。下記のように超音波センサーをArduinoに接続し、他のシールドと同様にモータードライバーシールドをArduinoに配置します。
超音波のTrigピンはArduinoの12番目のピンに接続され、Echoピンは13番目のピンに接続され、電圧ピンは5Vピンに接続され、Groundピンはグラウンドピンに接続されます。EchoピンとTrigピンにより、Arduinoはセンサーと通信できます。電力は電圧ピンとアースピンを介してセンサーに供給され、トリガーピンとエコーピンにより、センサーはArduinoとデータを送受信できます。超音波センサーとArduinoのインターフェースについて詳しくは、こちらをご覧ください。
モーターシールドには少なくとも2つの出力が必要であり、それらは2つのモーターに接続されている必要があります。通常、これらの出力には「M1」と「M2」または「モーター1」と「モーター2」のラベルが付いています。バッテリーとパワーバンクをそれぞれモーターシールドとArduinoに配線します。それらを相互接続しないでください。モーターシールドには入力チャネルが必要です。ワイヤーを使用している場合は、ACアダプターに接続してください。
プログラミングの説明:
ArduinoIDEを開きます。このチュートリアルの最後に記載されている完全なArduinoコードをIDEに貼り付けます。Arduinoをコンピューターに接続します。ツール/ポートでポートを選択します。アップロードボタンをクリックします。
ロボットをテストします。回転が少なすぎたり多すぎたりする場合は、完全になるまで遅延を試してください。
コードに入る前に、DCモーターを駆動するためにAdafruit Motor ShieldLibraryをインストールする必要があります。L293Dモータードライバーシールドを使用しているため、ここからAFmotorライブラリをダウンロードする必要があります。次に、それをArduinoIDEライブラリフォルダーに追加します。名前を AFMotorに 変更して ください 。このライブラリのインストールの詳細をご覧ください。
コードは簡単で理解しやすいですが、ここではそのいくつかの部分について説明しました。
以下のコードはロボットをセットアップします。まず、モータードライバーシールドでモーターを駆動するためのAdafruitライブラリを含めました。その後、TrigピンとEchoピンを定義しました。また、モーターをセットアップします。Trigピンを出力に設定し、Echoピンを入力に設定します。
#include #define trigPin 12 #define echoPin 13 AF_DCMotor motor1(1、MOTOR12_64KHZ); AF_DCMotor motor2(2、MOTOR12_8KHZ); void setup(){pinMode(trigPin、OUTPUT); pinMode(echoPin、INPUT); }
以下のコードは、Arduinoに次のコマンドをループするように指示しています。その後、センサーを使用して超音波を送受信します。超音波が跳ね返ったときに物体からの距離を計算し、物体が設定された距離内にあることに気付いた後、それに応じてモーターを回転させるようにArduinoに指示します。
void loop(){長い期間、距離; digitalWrite(trigPin、LOW); delayMicroseconds(2); digitalWrite(trigPin、HIGH); delayMicroseconds(10); digitalWrite(trigPin、LOW); 期間= pulseIn(echoPin、HIGH); 距離=(期間/ 2)/ 29.1; if(distance <20){motor1.setSpeed(255); motor2.setSpeed(0); motor1.run(BACKWARD); motor2.run(BACKWARD); delay(2000); //ロボットの回転方法に応じてこれを変更します。
これにより、一方のモーターを回転させ、もう一方のモーターを停滞させて、ロボットを回転させます。
以下のコードは、ロボットが前述の境界で物体を検出するまで前進させるために、ロボットに両方のモーターを同じ方向に回転させます。
else {motor1.setSpeed(160); //ロボットの速度に応じてこれを変更します。motor2.setSpeed(160); //これを上に入力したのと同じ値に変更します。motor1.run(FORWARD); motor2.run(FORWARD); }