最新情報

ナウいマイコン PSoC4200 でHX711を試してみた

秋月電子さんの「AE-HX711」をPSoC4200につなげてみました。

 

タニタさんのキッチンスケール「KF-100」の制御部を全部捨てちゃって

ケースとロードセルだけ残し、「AE-HX711」とつなげてテストしてみます。

 

 

こんな感じに、ロードセルからの4本線だけ引き出しています。

 

「AE-HX711」      PSoC4200M

1番ピン VDD(5V)

2番ピン DAT       ———- PSoC4200 [P20]

3番ピン CLK       ———- PSoC4200 [P21]

4番ピン 未接続

5番ピン 未接続

6番ピン GND

につなげています。

 

 

 

ピン配置、設定、コンポーネントはこんな感じです。

基準の重さが欲しいので、他のキッチンスケールで、プラズマ乳酸菌飲料を計測してみました。

550g のようです。

 

PSoC4200 + HX711 で計測してみました、ピッタリです。

ソフトは、秋月電子さんのHPにサンプルがあったので、それを移植しました、移植といっても「ほぼ」そのままです。

#include 	"project.h"
#include	<stdio.h>
#include	<stdlib.h>
#include	"I2CLCDDRV.h"

char	lcd_str[32];


#define OUT_VOL   0.000592f		//定格出力 [V] (最後には現物合わせ)
#define LOAD      1000.0f		//定格容量 [g]
float	offset;					// 


//--------------------------------------------------------------------
void AE_HX711_Init(void);
void AE_HX711_Reset(void);
long AE_HX711_Read(void);
long AE_HX711_Averaging(char num);
float AE_HX711_getGram(char num);


//--------------------------------------------------------------------

int main(void)
{
	
    CyGlobalIntEnable; /* Enable global interrupts. */

    /* Place your initialization/startup code here (e.g. MyInst_Start()) */
    I2CM_Start();		// I2C 開始
	I2C_LCD_Init();		// I2C LCD 初期化
	AE_HX711_Init();	// HX711 リセット
	
	offset = AE_HX711_getGram(10); 
	
 
	I2C_LCD_position(1,2);
	I2C_LCD_Char_PrintString("Weight = ");			// LCDで確認

	
    for(;;)
    {
        /* Place your application code here. */
		float data;
		
		data = AE_HX711_getGram(8);		// ()回平均
		
		int16_t	w_data;
		w_data = (int16_t)((data - offset));

		I2C_LCD_position(10,2);
		sprintf(lcd_str,"%5d",w_data);
		I2C_LCD_Char_PrintString(lcd_str);
		I2C_LCD_Char_PrintString(" g");
	}
}

//--------------------------------------------------------------------

//------------------------------------//
// HX711 初期化
//------------------------------------//
void AE_HX711_Init(void)
{
	AE_HX711_Reset();
}


//------------------------------------//
// HX711 Reset
//------------------------------------//
void AE_HX711_Reset(void)
{
	pin_slk_Write(1u);
	CyDelayUs(100);	
	pin_slk_Write(0u);
	CyDelayUs(100);	
}

//------------------------------------//
// HX711 読込み
//------------------------------------//
long AE_HX711_Read(void)
{
	long data=0;
	while(pin_dout_Read()!=0);
	CyDelayUs(10);	
	
	for(int i=0;i<24;i++)
	{
		pin_slk_Write(1);
		CyDelayUs(5);
		pin_slk_Write(0);
		CyDelayUs(5);
		
		data = (data<<1)|(pin_dout_Read());
	}
	pin_slk_Write(1);
	CyDelayUs(5);
	pin_slk_Write(0);
	CyDelayUs(5);
		
	return data^0x800000;	// データ 2の補数なので変換
}

//------------------------------------//
// HX711 平均化 (num数の平均)
//------------------------------------//
long AE_HX711_Averaging(char num)
{
	long sum = 0;
	for (int i = 0; i < num; i++) {
		sum += AE_HX711_Read();
	}
	return sum / num;
}
//------------------------------------//
// HX711 グラム換算
//------------------------------------//
float AE_HX711_getGram(char num)
{
	#define HX711_R1		20000.0f		// R1抵抗 2K
	#define HX711_R2		8200.0f			// R2抵抗 8.2K
	#define HX711_VBG		1.25f
	#define HX711_AVDD		4.2987f					//(HX711_VBG*((HX711_R1+HX711_R2)/HX711_R2))
	#define HX711_ADC1bit	HX711_AVDD/16777216 	//16777216=(2^24)
	#define HX711_PGA		128
	#define HX711_SCALE		(OUT_VOL * HX711_AVDD / LOAD *HX711_PGA)
	 
	float data;
 
	data = AE_HX711_Averaging(num)*HX711_ADC1bit; 
	data = data / HX711_SCALE;
 
	return data;
}

 

ナウいマイコン PSoC4 に 秋月さんの AE-HX711をつなげてみた – YouTube

 

キッチンスケールレベルの計測でよいなら、HX711、結構よいかも!というのが正直な感想です。

 

加納 大裕 (かのう だいゆう)

 

 

 

 

最新の投稿記事

加納製作所の商品開発

  • 薪ストーブ
  • メッキアノード
  • 粉体塗料
  • ミニトマト選別機

開発でお悩みの方、

まずは新たな発想を生む
私達の開発環境へお越しください。
知識・経験・ノウハウがそのお悩みを解決します。

開発のご相談