最新情報
ナウいマイコン 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、結構よいかも!というのが正直な感想です。
加納 大裕 (かのう だいゆう)
-
- 2024.09.19
- 薪ストーブ、新城軽トラ市「49番ブース」、出店します。
-
- 2024.01.20
- 薪ストーブ出展 新城消防祭
-
- 2023.11.28
- SDGsへの貢献:薪ストーブ
-
- 2023.11.01
- 薪ストーブ今週末のイベント
-
- 2023.11.01
- 薪ストーブ納品 南信州うるぎ高原 風の森