このチュートリアルでは、いくつかの段ボールとサーボモーターからArduinoUnoベースのロボットアーム を設計します。建設の全プロセスは、以下で詳細に説明されています。このプロジェクトでは、 Arduino Unoは、ロボットアームのジョイントとして機能するサーボモーターを制御するようにプログラムされています。このセットアップもロボットクレーンのように見えますが、簡単な調整を行うことでクレーンに変換できます。このプロジェクトは、シンプルなロボットを低コストで開発する方法を学びたい、またはArduinoとサーボモーターの操作方法を学びたい初心者に役立ちます。
このArduinoロボットアームは、それに取り付けられた4つのポテンショメータによって制御でき、各ポテンショメータは各サーボを制御するために使用されます。ポットを回転させてオブジェクトを選択することで、これらのサーボを移動できます。練習すれば、オブジェクトを簡単に選択して、ある場所から別の場所に移動できます。ここでは低トルクのサーボを使用しましたが、より強力なサーボを使用して重い物体を拾うことができます。全体のプロセスは、最後のビデオでよく示されています。他のロボティクスプロジェクトもここで確認してください。
必要なコンポーネント
- Arduino Uno
- 1000uFコンデンサ(4個)
- 100nFコンデンサ(4個)
- サーボモーター(SG 90-4個)
- 10Kポット-可変抵抗器(4個)
- 電源(5v-できれば2つ)
サーボモーター
まず、サーボモーターについて少しお話します。サーボモーターは、主にシャフトの正確な動きや位置が必要な場合に使用されます。これらは高速アプリケーションには提案されていません。サーボモーターは、低速、中トルク、正確な位置のアプリケーション向けに提案されています。したがって、これらのモーターはロボットアームの設計に最適です。
サーボモーターは、さまざまな形状とサイズで入手できます。小型のサーボモーターを使用します。ここでは、4つのSG90サーボを使用します。サーボモーターは主にワイヤーがあり、1つは正電圧用、もう1つはアース用、最後の1つは位置設定用です。赤の線は電源に接続され、黒の線はアースに接続され、黄色の線は信号に接続されています。Arduinoを使用してサーボモーターを制御するこのチュートリアルを実行して、詳細を確認してください。Arduinoには、サーボを制御するための事前定義されたライブラリがあるため、サーボを制御するのは非常に簡単です。これについては、このチュートリアルで学習します。
ロボットアームの構築
テーブルや厚紙のように、平らで安定した表面を取ります。次に、サーボモーターを中央に配置し、所定の位置に接着します。回転の程度が図に示されている領域にあることを確認してください。このサーボはアームのベースとして機能します。
最初のサーボの上に小さなボール紙を置き、次にこのボードに2番目のサーボを置き、所定の位置に接着します。サーボの回転は図と一致する必要があります。
段ボールをいくつか取り、3cm x11cmの小片に切ります。ピースが柔らかくなっていないことを確認してください。別のサーボを取り付けるのに十分なだけ一端に長方形の穴を切り(底から0.8cm離します)、別の端にネジまたは接着剤でサーボギアをしっかりと取り付けます。次に、3番目のサーボを最初の穴に取り付けます。
次に、下の図に示す長さの別の段ボール片を切り取り、この片の下部に別の歯車を接着します。
次に、図に示すように、2番目のピースの端に4番目で最後のサーボを接着します。
これで、2つのピースが一緒になっているように見えます。
このセットアップをベースに取り付けると、次のようになります。
ほぼ完了です。ロボットハンドのようにオブジェクトをつかんで拾うためのフックを作成する必要があります 。フックの場合は、長さ1cmx7cmと4cmx5cmの厚紙をさらに2枚切ります。図に示すようにそれらを接着し、最後のギアを端に貼り付けます。
この部品を上に取り付け、これでロボットアームの構築を完了しました。
これで、基本的なロボットアームの設計が完了し、低コストのロボットアームを構築しました。次に、回路図に従ってブレッドボードに回路を接続します。
回路図と動作説明:
ArduinoUnoロボットアームの回路接続を以下に示します。
可変抵抗器の両端の電圧は完全に線形ではありません。うるさいものになります。したがって、このノイズを除去するために、図に示すように、コンデンサが各抵抗の両端に配置されます。
次に、これらの可変抵抗器によって提供される電圧(位置制御を表す電圧)をArduinoのADCチャネルに供給します。これには、A0からA3までのUNOの4つのADCチャネルを使用します。ADCの初期化後、ユーザーが必要とする位置を表すポットのデジタル値が得られます。この値を取り、サーボ位置と一致させます。
Arduinoには6つのADCチャネルがあります。ロボットアームには4つ使用しました。UNO ADCの分解能は10ビットであるため、整数値は0〜1023(2 ^ 10 = 1024値)の範囲です。これは、0〜5ボルトの入力電圧を0〜1023の整数値にマッピングすることを意味します。したがって、ユニットごとに(5/1024 = 4.9mV)ごとに。ArduinoでADCチャネルを使用して電圧レベルをマッピングする方法について詳しくは、こちらをご覧ください。
ここで、UNOがアナログ信号をデジタル信号に変換するには、以下の機能を使用して、ArduinoUnoのADCチャネルを使用する必要があります。
1. AnalogRead(pin); 2. AnalogReference(); 3. AnalogReadResolution(bits);
ArduinoADCチャネルの デフォルトのリファレンス値は5Vです。これは、任意の入力チャネルでのADC変換に5Vの最大入力電圧を与えることができることを意味します。一部のセンサーは0〜2.5Vの電圧を提供するため、5Vのリファレンスでは精度が低下するため、このリファレンス値を変更できるようにする命令があります。したがって、参照値を変更するために、 「analogReference();」があります。
デフォルトでは、10ビットの最大ボードADC解像度が得られます。この解像度は、命令(「analogReadResolution(bits);」)を使用して変更できます。
ロボットハンド回路では、この基準電圧をデフォルトのままにしているため、関数 「analogRead(pin);」を 直接呼び出すことでADCチャネルから値を読み取ることができます 。 ここで、「pin」はアナログ信号を接続したピンを表します。 「A0」を読みたい。ADCからの値は、 int SENSORVALUE0 = analogRead(A0);のように 整数に格納できます 。 。
それではサーボについてお話しましょう。ArduinoUnoには、度の値を与えるだけでサーボの位置を制御できる機能があります。サーボを30にしたい場合は、プログラムで値を直接表すことができます。 SERVO ヘッダー( Servo.h )ファイルは、すべてのデューティ比の計算を内部で処理します。
#include
ここで、最初のステートメントは、サーボモーターを制御するためのヘッダーファイルを表します。2番目のステートメントはサーボに名前を付けることです。4つ使用するので、 servo0の ままにします。3番目のステートメントは、サーボ信号ピンが接続されている場所を示しています。これはPWMピンでなければなりません。ここでは、最初のサーボにPIN3を使用しています。4番目のステートメントは、サーボモーターを度単位で配置するためのコマンドを示します。30を与えると、サーボモーターは30度回転します。
これで、SG90サーボ位置は0から180になり、ADC値は0から1023になります。両方の値を自動的に一致させる特別な関数を使用します。
sensorvalue0 = map(sensorvalue0、0、1023、0、180);
このステートメントは、両方の値を自動的にマップし、結果を整数 'servovalue0'に 格納します。
これが、Arduinoを使用してロボットアームプロジェクトでサーボを制御する方法です。以下の完全なコードを確認してください。
ロボットアームの操作方法:
ユーザーに提供される4つのポットがあります。そして、これらの4つのポットを回転させることにより、UNOのADCチャネルに可変電圧を提供します。したがって、Arduinoのデジタル値はユーザーの管理下にあります。これらのデジタル値は、サーボモーターの位置を調整するためにマッピングされます。したがって、サーボの位置はユーザーが制御し、これらのポットを回転させることで、ユーザーはロボットアームの関節を動かし、任意のオブジェクトを選択またはつかむことができます。