HX711测试【一个非常廉价且实用的模块】

几个概念:

桥式应变电阻:

上下分别接正负极,由于发生力学应变,左右两边电压不一样,形成差模信号。

 

用万用表电压档测量了一下,1、3之间的电压是4.2V,对应1、2引脚E+、E-;是由VCC转化而来的电压,不是额外电源提供的;VCC、GND接的是Arduino上面的5V电源。

 

代码如下:

/以下为函数声明  
extern unsigned long HX711_Read(void);
extern long Get_Weight();
///变量定义
float Weight = 0;
int HX711_SCK =2;   ///     作为输出口
int HX711_DT= 3;    ///     作为输入口
long HX711_Buffer = 0;
long Weight_Maopi = 0, Weight_Shiwu = 0;
 #define GapValue 405       ///该值需校准 每个传感器都有所不同

void setup()
{  
  //初始化HX711的两个io口       
  pinMode(HX711_SCK, OUTPUT);  ///SCK 为输出口 ---输出脉冲
  pinMode(HX711_DT, INPUT); ///  DT为输入口  ---读取数据

  Serial.begin(9600);
  Serial.print("Welcome to use!\n");
  delay(3000);    ///延时3秒  
  //获取毛皮重量
  Weight_Maopi = HX711_Read(); 
}
 void loop()    ///  一直循环{}内容  ----- 同while(1){xxx}
{
  Weight = Get_Weight();  //计算放在传感器上的重物重量
  Serial.print(1024); Serial.print(' ');
  Serial.print(-1024); Serial.print(' ');
  Serial.println(float(Weight),3);  //串口显示重量,3意为保留三位小数
  //Serial.print(" g\n"); //显示单位
  //Serial.print("\n");  //显示单位
  delay(20);  //延时2s 两秒读取一次传感器所受压力
}
 //称重函数
long Get_Weight()
{
  HX711_Buffer = HX711_Read();    ///读取此时的传感器输出值
  Weight_Shiwu = HX711_Buffer;     ///将传感器的输出值储存
  Weight_Shiwu = Weight_Shiwu - Weight_Maopi; //获取实物的AD采样数值。
  Weight_Shiwu = (long)((float)Weight_Shiwu/GapValue);    //AD值转换为重量(g)
  return Weight_Shiwu; 
}
unsigned long HX711_Read(void) //选择芯片工作方式并进行数据读取
{
 unsigned long count;   ///储存输出值  
 unsigned char i;     
   high--高电平 1  low--低电平 0  
 digitalWrite(HX711_DT, HIGH);     digitalWrite作用: DT=1;
 delayMicroseconds(1); 延时 1微秒  
 digitalWrite(HX711_SCK, LOW);    digitalWrite作用: SCK=0;
 delayMicroseconds(1);   延时 1微秒  
 count=0; 
  while(digitalRead(HX711_DT));    //当DT的值为1时,开始ad转换
  for(i=0;i<24;i++)   ///24个脉冲,对应读取24位数值
 { 
   digitalWrite(HX711_SCK, HIGH);    digitalWrite作用: SCK=0;
                                /// 利用 SCK从0--1 ,发送一次脉冲,读取数值
  delayMicroseconds(1);  延时 1微秒  
  count=count<<1;    ///用于移位存储24位二进制数值
  digitalWrite(HX711_SCK, LOW);    digitalWrite作用: SCK=0;为下次脉冲做准备
 delayMicroseconds(1);
   if(digitalRead(HX711_DT))    ///若DT值为1,对应count输出值也为1
   count++; 
 } 
  digitalWrite(HX711_SCK, HIGH);    ///再来一次上升沿 选择工作方式  128增益
 count ^= 0x800000;   //按位异或  不同则为1   0^0=0; 1^0=1;
///对应二进制  1000 0000 0000 0000 0000 0000  作用为将最高位取反,其他位保留原值
 delayMicroseconds(1);
 digitalWrite(HX711_SCK, LOW);      /// SCK=0;     
 delayMicroseconds(1);  延时 1微秒  
 return(count);     ///返回传感器读取值
}

接线图:

DT接到arduino D3;SCK 接到arduino D2;VCC 接到arduino 5V;GND 接到arduino GND。

这里把A+连上一个硬币,手指触摸硬币就可以完成对手指电信号的采集。

其中:

  • A+、A-对应增益可调整,最大是128倍数增益,有128、64、32三种选项;
  • B+、B-之间增益是固定的32倍,不可调整。

官方建议128倍增益下, A+、A- 之间电压差绝对值在20mv以内。64倍增益下, A+、A- 之间电压差绝对值在40mv以内。

HX711 采用了 24 位 AD转化。2^24 = 16M = 1.6 * 10^7 ; 分辨率是 5V / 16M = 0.3125 uV;在分辨率的角度完全可以满足采集生物电的需要。如脑电、心电、肌肉电等等,只要是电压信号都可以采集。而且据官方说法,此模块还内置了50Hz工频去噪算法,更是锦上添花。

改装:去掉10Hz电阻,把15号引脚与16号引脚接到一起。

有一说一,把15号引脚与16号引脚接到一起后,10Hz改为80Hz,采样率确实快得多。

 

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值