工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

ジャイロセンサーを備えたドリル深さ表示

コンポーネントと消耗品

>
Arduino Nano R3
× 1

必要なツールとマシン

>
3Dプリンター(汎用)

アプリとオンラインサービス

>
Arduino IDE

このプロジェクトについて

プロジェクトで特定の深さを掘削する必要がある場合は、深さ表示付きのベンチドリルが必要です。ほとんどのベンチドリルには、読み取り用の矢印が付いた定規があります。穴あけが成功するかどうかは、目的の位置をどれだけ正確に読み取ることができるかによって異なります。このArduinoプロジェクトでは、別の提案を提示します。ジャイロセンサーを備えた掘削深度ディスプレイとArduinoをサポートする7セグメントディスプレイです。

私がワークショップで最も頻繁に使用する機械は、のこぎりや研削盤ではありません。圧倒的にベンチドリルです。プロジェクトに関係なく、実際には常に使用されます。特定の穴あけ深さが必要な場合は、マシンに組み込まれている定規を使用できます。そして、私がドリルしなければならない深さを覚えておいてください。実際にはうまく機能します。

しかし、年齢が上がるにつれて(はい、はい、はい)、ミリメートルの精度で深さを読み取ることがますます難しくなります。そして、光が十分に明るくない場合、それを読むことはほとんど不可能です。しかし、これのために眼鏡をかけるだけですか?そして、穴をあけた後、どこに眼鏡を保管しますか?私はまだそれほど遠くありません。

「2セコンリーン」のポールエイカーズのモットーに忠実:

より良い解決策が必要です。考えてそれを成し遂げるだけです。

可能性の測定

もちろん、定規を読みやすくするために、目盛りの前に虫眼鏡を置くこともできます。それは読みを改善するでしょう、しかしそれは私がそれぞれの場合の測定値を覚えていなければならないのを助けません。そして、あなたが手工芸品をやっているなら、それも楽しいはずです。

そのため、電子ソリューションの方がはるかに優れています。すべてがドリルのオン/オフスイッチの隣に収まるように、できれば小さなスペースに置いてください。そのような場合、私はArduinoNanoを使用するのが好きです。ほとんどすべてを制御するのに十分なピンがあり、それに応じて小さいです。

しかし、どのように掘削深さを測定しますか?長さ測定にはいくつかの可能性があります。超音波測定をインストールしますか?動作する可能性がありますが、反射面としてドリルと一緒に移動するわずかなメカニズムでのみ機能します。または、ワイヤー作動エンコーダーを使用しますか?可能ですが、自分で作成する場合は非常に複雑です。ターンテーブル、フォークライトバリア、スプリングリターンを使用します。すぐにロータリーエンコーダーを取る方がいいですか?これは、コンポーネントがはるかに少ないことを意味します-はい、しかしそれは粗すぎるでしょう、あなたは翻訳のためにギアをインストールしなければならないでしょう。

では、もっと考えてみてください。

私のドリルは、ほとんどの場合と同様に、深さを調整するために側面にハンドホイールがあります。それは約回転することができます。 270°。ですから、完全なターンでさえありません。

これは、ジャイロセンサーを使用した角度測定に最適です。ケーブル接続はねじれず、1つの安価なコンポーネントのみが必要です。ジャイロセンサーは、ハンドホイールの回転軸に直接簡単に取り付けることもできます。

コンセプト

ドリルの深さを指定するときは、常に同じ方法で進めます。ドリルで表面を引っ掻き、座標をメモしてから、目的のドリルの深さを追加し、最後に深さに達するまでドリルします。

基本的なプロセスを維持したいと思います。深く穴をあけすぎないように、穴あけ深さに達したときの情報を受け取りたいのですが。

<図> <図>

ボタンがこの機能を引き継ぎます。それを押すと、Arduinoは現在の穴あけ位置を停止値として保存し、後で到達したときにいつでもそれを思い出させることができます。

残りのコンポーネントは、より多くのスペースを占有し、重量が大幅に増加します。幸いなことに、私のマシンのハウジングは金属でできています。だから私はネオジム磁石を使って固定しています。

問題は残っています。センサーをマシンにどのように取り付ける必要がありますか?

ドリルの軸にはSW17六角ナットが付いています。したがって、センサーを受け入れ、六角ナットに差し込むことができる3Dプリントコンポーネントのみが必要です。

<図>

必要なコンポーネント

  • Arduino Nano
  • ジャイロセンサーGY-521
  • 8桁の7セグメントモジュール(MAX7219 ICを搭載したSPIバージョン)
  • 押しボタン
  • オン/オフスイッチ
  • 電源:AAまたはAAAバッテリーまたはパワーバンク用のバッテリークリップ
  • 3Dプリントされたハウジング
  • ネオジム磁石

ジャイロセンサーの接続

ジャイロセンサーはI2Cを介して接続されています。したがって、NanoにはA5とA4を使用する必要があります。

  • VCC-> 5V
  • GND-> GND
  • SCL-> A5
  • SDA-> A4
  • XDA->接続されていません
  • XCL->接続されていません
  • ADO->接続されていません
  • INT->接続されていません

7セグメントモジュール

7セグメントモジュールを接続する場合は、任意のデジタルピンを使用できます。ピンはArduinoスケッチを使用して設定されます。

  • VCC-> 3.3V
  • GND-> GND
  • DIN-> D12
  • CS-> D10
  • CLK-> D11

ボタン

ボタンの入力ピンも自由に選択できます。ピンD9を使用しています。

電源

電源には単三電池6本を使用しています。オン/オフスイッチの後、システム全体に電力を供給します。

ケーシング

Autodesk Fusion360を使用してケーシングを設計しました。Anycubici3Megaを使用して3Dプリントを作成しました。

機械に取り付けるためのネオジム磁石が接着されています。穴あけ深さの表示全体が邪魔になると、すべてがすぐに取り外されます。

Arduinoスケッチ

LedControl.h を使用しました 7セグメントディスプレイを制御するライブラリ。これらをまだインストールしていない場合は、最初にライブラリマネージャーを使用してインストールする必要があります。

ジャイロセンサーはI2Cバスを介して接続されています。センサーの可能なライブラリを探すとき、私はそれから何も使用しないことに決めました。通信は Wire.h を介して行われます 。

記事の最後に、私が理解するのに役立つリンクがいくつかあります。

7セグメントディスプレイの制御は、 LedControl で非常にうまく機能します。 。

ピンで初期化した後、セットアップ手順は、ディスプレイをウェイクアップして強度を調整するためのいくつかの準備を必要とするだけです。

ループ部分では、ディスプレイには現在の穴あけ深さのみが表示され、設定されている場合は停止位置も数値として表示されます。

ディスプレイは、各桁を文字タイプとして想定しています。精度として小数点以下を使用したいと思います。関数dtostrfは、floatを文字配列に変換します。次に、文字列に変換して、ディスプレイに文字ごとに表示します。

  dtostrf(currentPos、4,1、txt); 
s ='' + String(txt);
lc。 setChar(0,4、charAtを参照(length()-1を参照)、false);
lc。 setChar(0.5、charAtを参照(length()-3を参照)、true);
lc。 setChar(0.6、charAtを参照(length()-4を参照)、false);
lc。 setChar(0.7、charAtを参照(length()-5を参照)、false);

停止位置に達すると、ディスプレイに「StOP」が表示されます。小さな「t」は、 setRow を使用して生成できます。 手順と適切なビットパターンB00001111。

ジャイロセンサーの読み取りは、ワイヤーライブラリの機能を介して機能します。 加速度計のみを使用しています 角位置を決定します。

Arduino IDEへのUSB接続を使用する場合、すべてが完全に機能しました。プラグを抜いて外部電源に接続した後、センサーはデータを提供しませんでした。 Arduinoをリセットした後にのみ再び機能しました。

それは私にプロジェクト全体の中で最も頭痛の種を与えました。ドリルの深さのインジケーターが私の目を救ったかもしれないと言うことができますが、それが私の髪のほとんどすべてを抜いた理由です!

長い検索の後、センサーを起動してから待機時間を設けることが解決策でした。これにより 遅延(1000) ソースコード全体で最も重要なコマンド。

  // GY-521センサーを準備する
//アクセラレータデータのみを使用する
Wire.begin();
Wire.beginTransmission(MPU);
Wire .write(0x6B);
Wire.write(0x00); // MPUをウェイクアップ
Wire.endTransmission(true);

//私の場合、この遅延は非常に必要でした!
delay(1000);

Wire.beginTransmission(MPU);
Wire.write(0x1C); // ACCEL_CONFIGを登録します
Wire.write(0x10); // +/- 8gのフルスケール範囲に対して00010000として設定
Wire.endTransmission(true);

オフセット値は、最初にセンサーに対して決定する必要があります。そうしないと、値が変動します。セットアップ部分では、100個の値が測定され、偏差が平均化されます。

センサーデータから角度を計算するのはそれほど簡単ではありません。しかし、計算を行う方法については多くの指示があります。

度単位のX角度は、次の式を使用して計算されます。

  AccAngleX =(atan((AccY)/ sqrt(pow((AccX)、2)+ pow((AccZ)、2)))* rad_to_deg);  

ただし、加速度センサーの値は大きく変動します。したがって、現在計算されている値は、それぞれ50%で以前の値と平均化されます。

  TotalAngleX =0.5 * TotalAngleX + 0.5 * AccAngleX;  

角度の値は、センサーによって-90°から+ 90°まで出力されます。しかし、掘削深度に変換するには、0°から360°の角度が必要です。

私はこれに対する簡単な解決策をまだ見つけていません。ただし、私のアプリケーションでは、センサーデータZとYが正か負かを確認するだけで十分です。それに応じて角度を変換します。

  delta =0; 
if((AccZ <0)){
delta =180.0-TotalAngleX * 2.0;
}
if((AccZ> 0 )&&(AccY <0)){
delta =360.0;
}
DrillingMachineAngle =TotalAngleX + delta;

// 360°に近い場合は、より適切に表示されます0 °
if(DrillingMachineAngle> 350){DrillingMachineAngle =0;}

まだ欠けているのは、ハンドホイールが可能にする最大回転角です。これを行う最も簡単な方法は、Serial.printを介して決定された角度を出力し、最大値を記録することです。

私にとっては316°です。最大穴あけ深さが50mmの場合、現在の位置は次のように計算されます。

  currentPos =50.0 / 316.0 * DrillingMachineAngle;  

ボタンが押されると、Arduinoは現在の穴あけ位置を保存します。 8888がディスプレイに表示され、1秒の短い待機があります。

停止位置が設定されている場合、停止までの残りの掘削深度が右側のディスプレイに表示されます。

組み立てとテスト

ジャイロセンサーは、ホットグルーで固定するのが最適です。接続ケーブルをカバーに通します。この部分は以上です。

最初のテストでは、ジャイロセンサーを最初に位置合わせする必要があります。横置きで設置しました。ホルダーは回転できるように設計されているため、ディスプレイに0.0が表示されるまで簡単に調整できます。

<図> <図> <図> <図> <図> <図>

その後、最初のテストを開始できます。

全体として、私はこのソリューションに非常に満足しています。センサーは非常に迅速に反応し、計算された値はドリルの深さと正確に一致します。

また、大型のLEDディスプレイのおかげで、正確なドリルの深さを読み取るために85歳までの眼鏡について心配する必要はありません。

ですから、ポールの言うことを常に覚えておいてください:あなたのバグを修正してください!

楽しんでください!

___________________________________________________________

役立つリンク:

https://medium.com/@kavindugimhanzoysa/lets-work-with-mpu6050-gy-521-part1-6db0d47a35e6

またはhttps://playground.arduino.cc/Main/MPU-6050/

またはhttps://circuitdigest.com/microcontroller-projects/mpu6050-gyro-sensor-interfaceing-with-arduino/

Rob TilaartによるGY-521のライブラリ:https://github.com/RobTillaart/GY521

そして、https://paulakers.net/books/2-second-lean

でPaulAkersの本をチェックしてください。

Das Projekt gibt es auch auf Deutsch unter:https://techpluscode.de/bohrtiefenanzeige-mit-gyro-sensor/

コード

  • Drilling-depth.ino
Drilling-depth.ino Arduino
 / *プログラム:drilling-depth.ino *作成者:Thomas Angielsky *バージョン:2021-03-20 * * https://techpluscode.de/ * https://techpluscode.de/bohrtiefenanzeige-mit-gyro-センサー/ * *このスケッチは、GY-521ジャイロセンサーのデータを使用してテーブルドリル*マシンの穴あけ深さを測定します*深さは7セグメントディスプレイで表示されます* * electronoobs.comからの計算エラー補正のアイデア-ありがとう! * * /#include  #include  #include "LedControl.h" #define MPU 0x68char txt [8]; String s; float currentPos、stopPos; float rad_to_deg; float AccX、AccY、AccZ; float AccAngleX、AccAngleY; float AccAngleErrorX、AccAngleErrorY; float TotalAngleX、TotalAngleY; float DrillingMachineAngle、delta; // init LED:ピンD12、ピンD11、ピンD10、1 moduleLedControl lc =LedControl(12,11,10,1); void setup(){//シリアル接続の準備/ /Serial.begin(9600); //開始値stopPos =0.0; currentPos =0.0; rad_to_deg =180 / PI; // GY-521センサーを準備します//アクセラレータデータのみを使用しますWire.begin(); Wire.beginTransmission(MPU); Wire.write(0x6B); Wire.write(0x00); // MPUをウェイクアップしますWire.endTransmission(true); //私の場合、この遅延は非常に必要でした! delay(1000); Wire.beginTransmission(MPU); Wire.write(0x1C); // ACCEL_CONFIGを登録しますWire.write(0x10); // +/- 8gフルスケール範囲の場合は00010000に設定Wire.endTransmission(true); //アクセラレータデータエラーを計算します// 100回の測定を行いますfor(int a =0; a <100; a ++){Wire.beginTransmission(MPU); Wire.write(0x3B); Wire.endTransmission(false); Wire.requestFrom(MPU、6、true); AccX =(Wire.read()<<8 | Wire.read())/ 4096.0; AccY =(Wire.read()<<8 | Wire.read())/ 4096.0; AccZ =(Wire.read()<<8 | Wire.read())/ 4096.0; AccAngleErrorX =AccAngleErrorX +((atan((AccY)/ sqrt(pow((AccX)、2)+ pow((AccZ)、2)))* rad_to_deg)); // AccAngleErrorY =AccAngleErrorY +((atan(-1 *(AccX)/ sqrt(pow((AccY)、2)+ pow((AccZ)、2)))* rad_to_deg)); } AccAngleErrorX =AccAngleErrorX / 100; // AccAngleErrorY =AccAngleErrorY / 100; //準備ボタン:ピンD9 pinMode(9、INPUT_PULLUP); // 7セグメントディスプレイを準備しますlc.shutdown(0、false); lc.setIntensity(0,8); lc.clearDisplay(0);} void loop(){Wire.beginTransmission(MPU); Wire.write(0x3B); Wire.endTransmission(false); Wire.requestFrom(MPU、6、true); AccX =(Wire.read()<<8 | Wire.read())/ 4096.0; AccY =(Wire.read()<<8 | Wire.read())/ 4096.0; AccZ =(Wire.read()<<8 | Wire.read())/ 4096.0; AccAngleX =(atan((AccY)/ sqrt(pow((AccX)、2)+ pow((AccZ)、2)))* rad_to_deg)-AccAngleErrorX; // AccAngleY =(atan(-1 *(AccX)/ sqrt(pow((AccY)、2)+ pow((AccZ)、2)))* rad_to_deg)-AccAngleErrorY; //スムーズな値TotalAngleX =0.5 *(TotalAngleX)+ 0.5 * AccAngleX; //TotalAngleY=0.5*(TotalAngleY)+0.5*AccAngleY; // X、Y、Zの+/-を使用してx角度を360に計算しますdelta =0; if((AccZ <0)){delta =180.0-TotalAngleX * 2.0; } if((AccZ> 0)&&(AccY <0)){delta =360.0; } DrillingMachineAngle =TotalAngleX + delta; // 360に近い場合は、より適切に表示します0 if(DrillingMachineAngle> 350){DrillingMachineAngle =0;} //ドリル深さを計算します//最大ドリル深さ:50 mm(機械で測定)//ハンドホイールの最大角度:316(測定Serial.printデータを使用)currentPos =50.0 / 316.0 * DrillingMachineAngle; / * Serial.print( "X / X / Y / Z / E:BOHRTIEFE"); Serial.print(TotalAngleX); Serial.print( ""); Serial.print(AccX); Serial.print( ""); Serial.print(AccY); Serial.print( ""); Serial.print(AccZ); Serial.print( ">>"); Serial.print(DrillingMachineAngle); Serial.print( ">>"); Serial.print(currentPos); Serial.println( ""); * / //ボタンが押されましたか? if(digitalRead(9)==LOW){//停止位置を保存stopPos =currentPos; lc.setChar(0,3、 '8'、false); lc.setChar(0,2、 '8'、false); lc.setChar(0,1、 '8'、false); lc.setChar(0,0、 '8'、false); //Serial.println( "ボタンが押されました"); delay(1000); } if(stopPos> 0){//停止位置に到達しましたか? if(currentPos> =stopPos){// yes:右側にSTOP(5t0P)を表示lc.setChar(0,3、 '5'、false); lc.setRow(0,2、B00001111); lc.setChar(0,1、 '0'、false); lc.setChar(0,0、 'P'、false); } else {// no:停止位置までの距離を表示dtostrf(stopPos-currentPos、4,1、txt); s ='' + String(txt); lc.setChar(0,0、s.charAt(s.length()-1)、false); lc.setChar(0,1、s.charAt(s.length()-3)、true); lc.setChar(0,2、s.charAt(s.length()-4)、false); lc.setChar(0,3、s.charAt(s.length()-5)、false); }} else {//何も表示しないlc.setChar(0,3、 ''、false); lc.setChar(0,2、 ''、false); lc.setChar(0,1、 ''、false); lc.setChar(0,0、 ''、false); } //現在のドリル深度を左側に表示// stringとしてフォーマットdtostrf(currentPos、4,1、txt); s ='' + String(txt); lc.setChar(0,4、s.charAt(s.length()-1)、false); lc.setChar(0,5、s.charAt(s.length()-3)、true); lc.setChar(0,6、s.charAt(s.length()-4)、false); lc.setChar(0,7、s.charAt(s.length()-5)、false); delay(200);} 

カスタムパーツとエンクロージャー

ドリル深度-3d-model_Yn2q0MSNa4.zip

回路図


製造プロセス

  1. センサーデータとRaspberryPiマイクロプロセッサーの統合
  2. RPiを備えたライントラッキングセンサー
  3. RPiを使用した環境センサーAPI
  4. ラズベリーパイと湿度センサーを備えたエアロポニックス
  5. PIRモーションセンサーを備えたRaspberryPi GPIO:最高のチュートリアル
  6. RaspberryPiでのA111パルスレーダーセンサーの使用
  7. HC-SR501PIRモーションセンサーとRaspberryPiのインターフェース
  8. Googleスプレッドシートを使用したPython / MicroPythonセンサーロガー
  9. Portentaおよび熱電対センサー(MAX6675を使用)
  10. アナログセンサーを備えた圧力気流測定装置
  11. K30センサーによるCO2モニタリング