- Arduino計量機の動作
- Arduinoベースの計量機に必要なコンポーネント
- Arduinoベースの計量機-回路図
- 点線のパフォーマンスボードで回路を作る
- Arduinoベースの計量機用のエンクロージャーの構築
- Arduino計量機-コード
デジタル負荷計は、現代のエンジニアリングと設計のもう1つの奇跡です。はい、私たちはほとんどの食料品店や他の場所でよく見られる体重計について話していますが、体重計がどのように機能するのか疑問に思ったことはありますか?その質問に答えるために、このプロジェクトでは、ロードセルとその動作を見ていきます。最後に、最大10kgの重量を測定できるHX711重量センサーを備えたポータブルArduinoベースの負荷スケールを構築します。
この計量機は、商品を大量に梱包する地元の店舗に最適です。市販の製品と同様に、私たちの体重計には、体重計をゼロにするゼロボタンがあります。また、測定用の重量を設定するオプションがあり、測定重量が設定重量に達すると、ブザーが速く鳴り、設定重量が測定重量と等しくなると停止します。このように、ユーザーは音を聞くだけでそれを詰めることができ、ディスプレイを見る必要はありません。これは非常に単純なプロジェクトであるため、Arduinoやひずみゲージロードセルなどのコンポーネントを使用して非常に簡単に構築します。それで、さらに遅れることなく、それに取り掛かりましょう。
前回の記事では、人気のあるHX711ロードセルアンプモジュールを使用して、RaspberryPiベースの重量センサーや電子メールアラートとWebモニタリングを備えたIoTスマートコンテナなどのプロジェクトを作成しました。だから、それがあなたの要件であるかどうかをチェックしてください。
Arduino計量機の動作
このプロジェクトの主要コンポーネントは、ロードセルとHX711ロードセルアンプモジュールです。ご覧のとおり、片側には10キログラムのマークが付いています。また、ロードセルの上にある種の白い保護接着剤があり、4つの異なる色のワイヤーが出てきていることに気付くでしょう。この記事の後半で、白い保護接着剤の下の秘密とこれらの4色ワイヤーの機能を明らかにします。
ロードセルは、力または圧力を電気出力に変換するトランスデューサーです。右側と左側の2つの側面があり、アルミニウムブロックで作られています。ご覧のとおり、素材の真ん中に大きな穴を開けて薄くしています。そのため、マウント側に荷重をかけると変形します。ここで、右側のセルがベースに取り付けられ、左側が荷重がかかる場所であると想像してください。この構成では、中央に巨大な穴があるため、ひずみゲージのロードセルが変形します。
ロードセルの荷重側に荷重がかかると、上部に張力がかかり、下部に圧縮がかかります。そのため、アルミバーは左側で下向きに曲がっています。この変形を測定すれば、アルミブロックに加えられた力を測定することができ、まさにそれが私たちが行うことです。
さて、白い保護接着剤の中に何が入っているのかという疑問が残ります。この保護接着剤の中には、ひずみゲージと呼ばれる非常に薄い弾性コンポーネントがあります。。ひずみゲージは、ひずみを測定するために使用されるコンポーネントです。このコンポーネントを詳しく見ると、2つの接続パッドがあり、たわみが繰り返される導電性のワイヤパターンがあります。この導線には定義された抵抗があります。曲げると抵抗値が変わりますか?そのため、ひずみゲージの片側を所定の位置に取り付けて固定します。アルミ棒の反対側に重りを置くと、ひずみゲージが曲がり、抵抗が変化します。これは実際にどのように起こりますか?ひずみゲージの導電性パターンは銅でできており、このワイヤーは特定の面積と長さを持つため、これら2つのユニットがワイヤーの抵抗を与えます。ワイヤーの抵抗は電流の流れに対抗します。これで、このワイヤーの面積が小さくなると、より少ない電子が通過する可能性があり、より低い電流を意味します。ここで面積を増やすと、導体の抵抗が増えます。このワイヤーに力を加えると、その領域が伸びると同時に小さくなり、抵抗が増加します。しかし、この抵抗変動は非常に小さいです。ひずみゲージを伸ばすと抵抗が大きくなり、圧縮すると抵抗が小さくなります。力を測定するには、抵抗を測定する必要があります。変化が非常に小さいため、抵抗を直接測定することは必ずしも実用的ではありません。したがって、抵抗を測定する代わりに、電圧を簡単に測定できます。したがって、この場合、ゲージ出力を抵抗値から電圧値に変換する必要があります。このワイヤーに力を加えると、その領域が伸びると同時に小さくなり、抵抗が増加します。しかし、この抵抗変動は非常に小さいです。ひずみゲージを伸ばすと抵抗が大きくなり、圧縮すると抵抗が小さくなります。力を測定するには、抵抗を測定する必要があります。変化が非常に小さいため、抵抗を直接測定することは必ずしも実用的ではありません。したがって、抵抗を測定する代わりに、電圧を簡単に測定できます。したがって、この場合、ゲージ出力を抵抗値から電圧値に変換する必要があります。このワイヤーに力を加えると、その領域が伸びると同時に小さくなり、抵抗が増加します。しかし、この抵抗変動は非常に小さいです。ひずみゲージを伸ばすと抵抗が大きくなり、圧縮すると抵抗が小さくなります。力を測定するには、抵抗を測定する必要があります。変化が非常に小さいため、抵抗を直接測定することは必ずしも実用的ではありません。したがって、抵抗を測定する代わりに、電圧を簡単に測定できます。したがって、この場合、ゲージ出力を抵抗値から電圧値に変換する必要があります。抵抗が低くなります。力を測定するには、抵抗を測定する必要があります。変化が非常に小さいため、抵抗を直接測定することは必ずしも実用的ではありません。したがって、抵抗を測定する代わりに、電圧を簡単に測定できます。したがって、この場合、ゲージ出力を抵抗値から電圧値に変換する必要があります。抵抗が低くなります。力を測定するには、抵抗を測定する必要があります。変化が非常に小さいため、抵抗を直接測定することは必ずしも実用的ではありません。したがって、抵抗を測定する代わりに、電圧を簡単に測定できます。したがって、この場合、ゲージ出力を抵抗値から電圧値に変換する必要があります。
ホイートストンブリッジの助けを借りてこれを行うことができます。ブリッジのバランスが取れている場合は、ひずみゲージをホイートストンブリッジに配置し、中間点の電圧はゼロにする必要があります(以前、ホイートストンブリッジの動作を説明したプロジェクトを構築しましたが、必要に応じて確認できます。トピックについてもっと知っている)。ひずみゲージが抵抗を変えると、ブリッジのバランスが崩れ、電圧も変化します。つまり、これがホイートストンブリッジが抵抗変動を電圧値に変換する方法です。
しかし、この電圧変化はまだ非常に小さいので、それを増やすには、HX711モジュールを使用する必要があります。HX711は24ビットの差動ADCであるため、非常に小さな電圧変化を測定できます。0から2の指数24の値が得られます。
Arduinoベースの計量機に必要なコンポーネント
このプロジェクトをできるだけシンプルにするために、地元のホビーショップで見つけることができる非常に一般的なコンポーネントを使用しました。以下の画像は、コンポーネントについてのアイデアを提供します。さらに、以下にリストされている部品表(BOM)があります。
- ロードセル(10kgのロードセルを使用しています)
- HX711アンプモジュール
- Arduino Nano
- I2C LCD 16X2 –I2C互換
- 1k抵抗-2個
- LED-2Nos
- ブザー
- 一般的なPCB
- 7.4Vバッテリー(ポータブルにしたい場合)
- LM7805電圧レギュレータ
Arduinoベースの計量機-回路図
ロードセルには、赤、黒、緑、白の4本のワイヤーがあります。この色はメーカーによって異なる場合がありますので、データシートを参照することをお勧めします。赤をHX711ボードのE +に接続し、黒をE-に接続し、白をA +に接続し、緑をA-、Doutに接続し、ボードのクロックをそれぞれD4とD5に接続します。押しボタンの一方の端をD3、D8、D9に接続し、もう一方の端を地面に接続します。I2C LCDがあるので、SDAをA4に、SCLをA5に接続します。LCD、HX711、およびArduinoのアースをアースに接続し、VCCもArduinoの5Vピンに接続します。すべてのモジュールは5Vで動作するため、LM7805電圧レギュレータを追加しました。ポータブルにしたくない場合は、USBケーブルを使用してArduinoに直接電力を供給することができます。
点線のパフォーマンスボードで回路を作る
すべてのコンポーネントを共通の点線のパフォーマンスボードにはんだ付けしました。ArduinoとADCを回路基板にはんだ付けするためにメスヘッダーを使用しました。また、すべてのプッシュボタンとLEDを接続するためにワイヤーを使用しました。すべてのはんだ付けプロセスが終了した後、適切な5VがLM7805から出ていることを確認しました。最後に、回路の電源をオン/オフするスイッチを配置しました。すべて終了すると、下の画像のようになります。
Arduinoベースの計量機用のエンクロージャーの構築
ご覧のとおり、ロードセルにはネジ山がいくつかあるので、ベースプレートに取り付けることができます。スケールのベースにはPVCボードを使用します。そのために、最初にPVCボードから20 * 20cmの正方形と4つの20 * 5の長方形を切り取ります。次に、ハードグルーを使用して、すべてのピースを接着し、小さなエンクロージャーを作成しました。
プッシュボタン、LED、およびLCDを配置する必要があるため、片側を修正しなかったことを忘れないでください。次に、スケールの上部にプラスチックボードを使用しました。このセットアップを永続的にする前に、地面からロードセルまで十分なスペースがあり、曲がることができることを確認する必要があるため、ロードセルとベースの間にネジとナットを配置しました。ロードセルと上部の間にいくつかのプラスチックスペーサー。バランスのとれたトップスマートとして丸いプラスチックシートを使用しました。
次に、LCD、LED、および押しボタンをフロントパネルに配置し、すべてを長い絶縁ワイヤで接続しました。配線が終わったら、フロントパネルをメインベースに少し傾けて接着したので、LCDから値を簡単に読み取ることができます。最後に、メインスイッチを天びんの側面に取り付けました。これで完了です。これが私たちが体重計用のボディを作った方法です。
あなたはあなたのアイデアでデザインすることができますが、画像のようにロードセルを配置することを忘れないでください。
Arduino計量機-コード
デジタルスケールのビルドプロセスが終了したので、プログラミングの部分に進むことができます。プログラミングを簡単にするために、HX711ライブラリ、EEPROMライブラリ、およびLiquidCrystalライブラリを使用します。 HX711ライブラリは公式のGitHubリポジトリからダウンロードするか、 [ ツール] > [ライブラリを含める] > [ライブラリの管理]に 移動し、キーワードHX711を使用してライブラリを検索し、ライブラリをダウンロードした後、Arduinoideにインストールします。
まず、ロードセルを調整し、その値をEEPROMに保存する必要があります。そのためには、 ファイル>例> HX 711_ADCに移動 し、調整コードを選択します。コードをアップロードする前に、天びんを安定した平面に置きます。次に、コードをArduinoにアップロードし、シリアルモニターを開きます。次に、ボーレートを572600に変更します。ここで、モニターが重量を取得するように要求します。そのため、tを押してEnterキーを押す必要があります。
さて、天びんに既知の重り、私の場合は194gmを置く必要があります。既知の重量を配置した後、シリアルモニターに重量を入力し、Enterキーを押します。
ここで、シリアルモニターは値をEEPROMに保存するかどうかを尋ねるので、「はい」を選択するにはYと入力します。これで、シリアルモニターで重量を確認できます。
このプロジェクトのメインコードは、HX711ライブラリのスケッチ例から開発したものです。このプロジェクトのコードは以下からダウンロードできます。
コーディングセクションでは、最初に3つのライブラリすべてを追加しました。HX711ライブラリは、ロードセルの値を取得するためのものです。EEPROMはArduinoideの組み込みライブラリであり、EEPROMに値を格納するために使用され、LiquidCrystalライブラリはl2CLCDモジュール用です。
#include
次に、さまざまなピンの整数と割り当てられた値を定義しました。 HX711_ADCロードセル 機能はDoutとクロックピンを設定するためのものです。
const int HX711_dout = 4; const int HX711_sck = 5; int tpin = 3; HX711_ADCロードセル(HX711_dout、HX711_sck); const int calVal_eepromAdress = 0; 長いt; const int Up_buttonPin = 9; const int Down_buttonPin = 8; float buttonPushCounter = 0; float up_buttonState = 0; float up_lastButtonState = 0; float down_buttonState = 0; float down_lastButtonState = 0;
セットアップセクションでは、最初にシリアルモニターを起動しました。これはデバッグ専用です。次に、ピンモードを定義しました。すべてのプッシュボタンは入力として定義されています。Arduino PULL UP機能を使用して、ピンを通常の論理ハイに設定します。したがって、そのために外部抵抗を使用する必要はありません。
pinMode(tpin、INPUT_PULLUP); pinMode(6、OUTPUT); pinMode(12、OUTPUT); pinMode(Up_buttonPin、INPUT_PULLUP); pinMode(Down_buttonPin、INPUT_PULLUP);
次のコード行は、I2CLCDを設定するためのものです。まず、 LCD.print() 関数を使用してウェルカムテキストを表示し、2秒後、 lcd.clear () を使用して表示をクリアしました。つまり、最初はウェルカムテキストとしてARDUINO BALANCEが表示され、2秒後に測定重量がクリアされて表示されます。
lcd.init(); lcd.backlight(); lcd.setCursor(0、0); lcd.print( "ARDUINO BALANCE"); lcd.setCursor(0、1); lcd.print( "測定しましょう"); delay(2000); lcd.clear();
次に、 loadCell.begin() 関数を使用して ロードセル から値の読み取りを開始し、その後、キャリブレーションされた値のEEPROMを読み取り、 EEPROM.get() 関数を使用して 読み取り ます。つまり、キャリブレーションスケッチを使用して値をEEPROMアドレスにすでに保存しており、その値を 再取得するだけです。
LoadCell.begin(); EEPROM.get(calVal_eepromAdress、calibrationValue);
ループセクションでは、最初に、ロードセルからのデータが LoadCell.update( )を使用して利用可能かどうかを確認します。利用可能な場合は、そのデータを読み取って保存します。そのために、 LoadCell.getData() を使用します。次に、保存した値をLCDに表示する必要があります。そのために、 LCD.print() 関数を使用し ました 。また、設定重量を印刷します。設定重量は、押しボタンカウンターを使用して設定されています。それは前のセクションで説明しました。
if(LoadCell.update())newDataReady = true; if(newDataReady) { if(millis()> t + serialPrintInterval){ float i = LoadCell.getData(); lcd.setCursor(0、0); lcd.print( "set wei:"); lcd.setCursor(9、0); lcd.print(buttonPushCounter); lcd.setCursor(14、0); lcd.print( "GM"); lcd.setCursor(0、1); lcd.print( "weight:"); lcd.setCursor(9、1); lcd.print(i); lcd.setCursor(14、1); lcd.print( "GM");
次に、風袋値を設定します。そのために、まず、 digitalRead() 関数を使用して風袋押しボタンの状態を読み取り ます。状態が低い場合は、その重量をゼロに風袋引きします。この体重計の風袋機能は、読み取り値をゼロにすることです。たとえば、物が積まれているボウルがある場合、正味重量はボウルの重量+物の重量になります。荷物を載せる前にロードセルのボウルで風袋ボタンを押すと、バスケットの重量が打ち消され、荷物の重量だけを測定できます。
if(digitalRead(tpin)== LOW){ LoadCell.tareNoDelay();
ここで、ブザーの遅延やLEDステータスの設定など、さまざまな表示の条件を設定する必要があります。 if 条件を使用してこれを行いました。合計3つの条件があります。まず、設定重量と測定重量の差を計算し、その値を変数kに格納します。
float k = buttonPushCounter-i;
1.設定重量と測定重量の差が50gms以上の場合、ブザーは200ミリ秒の遅延で(ゆっくりと)ビープ音を鳴らします。
if(k> = 50) { digitalWrite(6、HIGH); delay(200); digitalWrite(6、LOW); delay(200); }
2.設定重量と測定重量の差が50未満で1グラムを超える場合、ブザーは50ミリ秒の遅延(より速い)でビープ音を鳴らします。
if(k <50 && k> 1) { digitalWrite(6、HIGH); delay(50); digitalWrite(6、LOW); delay(50); }
3.測定重量が設定値以上になると、緑色のLEDが点灯し、ブザーと赤色のLEDが消灯します。
if(i> = buttonPushCounter) { digitalWrite(6、LOW); digitalWrite(12、HIGH); }
設定重量を設定するための(ボタンの押下をカウントするための)さらに2つのvoid関数()があります。
押すごとに設定値を10gずつ上げる機能。これは、ピンが低い場合、つまりボタンが押された場合にArduinoの digitalRead 機能を使用して実行され、値が10gmsずつ増加します。
up_buttonState = digitalRead(Up_buttonPin); if(up_buttonState!= up_lastButtonState){ if(up_buttonState == LOW){ bPress = true; buttonPushCounter = buttonPushCounter + 10; }
同様に、
チェックダウンは、押すたびに設定値を10gずつ下げるためのものです。
down_buttonState = digitalRead(Down_buttonPin); if(down_buttonState!= down_lastButtonState){ if(down_buttonState == LOW){ bPress = true; buttonPushCounter = buttonPushCounter-10; }
これはプログラミング部分の終わりを示します。
このArduinoベースの電子はかりは、最大10kgの重量を測定するのに最適です(より高い定格のロードセルを使用することで、この制限を増やすことができます)。これは、元の測定値に対して99%正確です。
このArduinoベースのLCDウェイトバランスマシン回路について質問がある場合は、コメントセクションに投稿してください。ありがとうございます。