ロードセル・ロードセルアンプのライブラリ作成

質量を計測する代表的な方法として圧力センサーを使う方法と、ロードセルを使用した金属のひずみによる計測方法があります。
圧力センサーの方法では荒い計測の代わりに高速な計測が可能で、ロードセルの場合は最低でも0.1秒以上の遅延を考慮しなければならない代わりに高精度というメリットがあります。
そこでロードセルを使用した計測のライブラリをまとめました。

ライブラリはマイコンソフトと動作テストするためのアタッチメント、その3Dデータを作りましたので紹介します。

ライブラリファイル一式

3Dデータもプログラムソースもファイルを一式まとめましたのでご自由にどうぞ。

マイコンソフト

ライブラリは2つに分かれていてスタートアップに入れるhx711_reset()と計測リクエストと値の取得を行うhx711_read()となります。
ライブラリのテストでは0.1秒サイクルで値を取得していますが、まれに唐突に大きな値を取得してしまう事があり、その値をどう処理するかは用途によって検討する必要があります。
一応ソフト内では唐突に大きな値が入った場合にその値を反映しないようにしていますが、計測終わり時の動作による荷重の抜けに関しては大きく値が変わるのが普通の流れと考えられ、3回取得したらその大きな差も有効とするなどの細かい調整が必要と思われます。

//	解説
//スタートアップにhx711_reset()を入れる
//loadcell_oneを0.1secサイクルで更新し、一定時間ごとにhx711_read()を実行
//
int loadcell_one = 0;//一定時間ごとに計測値を取得するタイミングフラグ。タイマー内に設置して使用。
int32 loadcell_value = 0;//ロードセルからの値
float loadcell_weit = 0;//ロードセル値からの質量
float loadcell_offset_value = 0;//ロードセル値の初期値
float loadcell_adjust_weit = 0;//ロードセルの質量からの調整値

//起動時に謎のパルスが出てくるので回避
void hx711_reset(){
	output_bit(PIN_A6,1);
	delay_ms(11);
	output_bit(PIN_A6,0);
	delay_ms(12);
}

//ロードセル値を取得
void hx711_read(){
	int tmp1 = 0;
	int tmp2 = 0;
	int32 tmp_data = 0;
	float tmp_volt = 0;
	float tmp_weit = 0;
	float tmp_difference = 0;
	float tmp_value = 0;

    //値を取得
	for(tmp1=0;tmp1<24;tmp1++){//48us
		output_bit(PIN_A6,1);	delay_us(1);
		output_bit(PIN_A6,0);	delay_us(1);
		tmp_data = (tmp_data<<1)|(input(PIN_A7));
	}
	output_bit(PIN_A6,1);	delay_us(1);
	output_bit(PIN_A6,0);	delay_us(1);
	tmp_data = tmp_data^0x00800000;

    //取得した値から質量に変換
	tmp_volt = tmp_data*(4.2987/16777216/128);
	tmp_value = tmp_volt/(0.001*4.2987/20000);
	tmp_weit = tmp_value - loadcell_offset_value;

    //フィルタリング
	if(tmp_weit <= 20000 && tmp_data!=0x007fffff){
		if(loadcell_adjust_weit==0){
			loadcell_adjust_weit = tmp_weit;
		}else if(loadcell_adjust_weit!=0){
			tmp_difference = fabs(loadcell_adjust_weit-tmp_weit);
			if(tmp_difference>10000){
				//差が大きすぎるときは反映させない
			}else if(tmp_difference>100){
				loadcell_adjust_weit = (loadcell_adjust_weit+tmp_weit)/2;
			}else{
				loadcell_adjust_weit = tmp_weit;
			}
		}

        //値がOKなら外部変数に反映
		loadcell_value = tmp_value;
		loadcell_weit = tmp_weit;		
	}

    //オフセット値が無ければ保管
	if(loadcell_offset_value==0 && tmp_data!=0x007fffff){//
		loadcell_offset_value = tmp_value;
	}

}

信号は右のオシロの絵のように25回のクロックに対してHX711が応答してきますのでそれを読み取っています。

ハードウェア

ロードセル及びロードセルアンプは秋月電子で購入したもので、接続はDOUTとPD_SCKの2本だけです。入手に関しても接続に関しても特に深い説明はいらないと思います。

アタッチメント

このライブラリをテストして運用上熟考するには簡易的に使用してみる必要がある。そのためには物理的に安定よく設置できる何かが必要です。
そこで3次元CADを使ってアタッチメントを作ってみました。

下のスペースにはロードセルアンプを入れ、信号線と電源をマイコンと接続できる形状としました。
安定よく設置できるため、使用用途を想定した計測値の監視及び組み込む機器への元図としても利用できます。
Youtubeにもアップしましたので合わせてご確認ください。