サーボまたは「釘打ち機」からのフィードバック



すべてのhabraconstructorsに、こんにちは!



どういうわけか馬鹿げたアイデアが私の頭に浮かんだ:ハンマーで釘を打つ装置を組み立てる。 サーボの仕組みを示すためだけです。 アルゴリズムは簡単です。ハンマーを上げるコマンドを与え、ハンマーが上がるまで待機し、ハンマーを放します。 釘が打たれるまで続きます。 しかし、ハンマーが上昇し、追加のセンサーを使用せずに爪が詰まっていることをどのように知っていますか? 「愚かな」サーボに聞いてください! これを正確に行う方法-これについては記事で説明します。





サーボドライブとは何ですか? おそらく誰もが知っていますが、念のため:これは、DCモーターとは異なり、電圧が印加されている間だけ回転するのではなく、特定の角度に回転してその位置に留まる傾向があるドライブです。 角度は、 PWM(PWM)信号を使用して設定されます。 サーボは特定の位置に向かう傾向があるため、サーボ自体を知る必要があります。 アセンブリを開始する前に、現在の角度を要求することはできる限り簡単であり、これは「箱から出してすぐに」可能だと確信していました。 そこにはありませんでした。 しかし、まず最初に。



したがって、提案されたデバイスは、バランスをとるために小さな台座にハンマーが取り付けられたサーボです。 サーボはIOシールドを介してArduinoに接続され、マイクロコントローラーがアルゴリズムを実行します。



元の部品を取ります:







のこぎりとねじれ:







Arduinoのファームウェアの作成を開始します...サーボに特定の角度を設定しても問題ないことがすぐに明らかになります。 特に、これにより、度で指定された角度から対応するPWM信号を形成する標準のサーボライブラリを作成できます。 しかし、読書は問題です。これには機能がありません。



問題をすばやく探して、フォーラムでたくさんの投稿を見つけました。彼らはこの質問に正式に答えました。「これは不可能です! サーボは書き込み専用デバイスです。」 これは私を混乱させ、私は直感的にこのデータを取得するのがなんとか簡単だと感じました。



マテリエル


ネットワーク上で簡単に検索した後、サーバーの配置方法を理解できます。 これは通常のDCモーターで、複数のギアを介してスピンドルに接続され、下部ギアを形成します。 同じスピンドルが内側からポテンショメータ(チューニング抵抗)に物理的に取り付けられています。 モーターが回転すると、スピンドルが回転し、ポテンショメータースライダーが回転し、ポテンショメーターの出力電圧が変化し、サーボの脳がそれを読み取り、電圧が所定のレベルに達すると、モーターは電源から切断されます。



つまり、現在の角度を決定できる信号からポテンショメータがあります。 サーボを分解して適切な場所に接続するためだけに残ります。 解析:







私はすぐに、分解プロセス中に写真からサーボドライブを取り消せないように破損したと言わなければなりません。 電子部品でボードを分解する必要はまったくなく、4本のネジで支えられている背面カバーを取り外すだけです。 しかし、これはすぐにはわかりませんでした。ポテンショメータがボード上のどこにハンダ付けされているかを理解するために、1つのドライブを犠牲にしなければなりませんでした。



DFRobotのサーボにポテンショメーターをはんだ付けする方法は次のとおりです。







スライダーからの信号が必要です。これは、最小電圧から最大電圧までの回転角度に応じて変化します。 マルチメーターを取り、スピンドルを回転させて、どの角度にどの信号が対応するかを確認します。 私のサーボでは、0°の角度は0.43Vの電圧に対応し、180°の最大回転角度は2.56Vの電圧に対応します。



新しい信号線を静かにはんだ付けします。







Arduinoのアナログ入力A5に接続します。 ふたを閉じます。 プログラムを作成します。



#include <Servo.h> //    #define A_MAX 1024 //       #define A_VREF 5 //      #define A_VMIN 0.43 #define A_VMAX 2.56 Servo servo; int lastHitAngle = 0; int hitAngleMatches = 0; bool jobDone = false; /* *       *      */ int realAngle() { return map( analogRead(A5), A_MAX * A_VMIN / A_VREF, A_MAX * A_VMAX / A_VREF, 0, 180); } void setup() { } void loop() { if (jobDone) return; //        70° servo.attach(6); servo.write(70); //  . 5°     while (realAngle() < 65) ; //         servo.detach(); delay(1500); //         //  int hitAngle = realAngle(); if (hitAngle == lastHitAngle) ++hitAngleMatches; else { lastHitAngle = hitAngle; hitAngleMatches = 0; } //     5  —   if (hitAngleMatches >= 5) jobDone = true; }
      
      







有効にしてみてください、動作します!







得られた経験をどうするか-多くのオプションがあります:推力を設定するために船で使用されているようなコントローラーを作成できます(フルフォワード/フルバック)。 フィードバックサーボは、一部の機械の自律操縦の要素として使用できます。 多くのことができます。 幻想が私たち全員と共に来るかもしれません!



All Articles