37款傳感器與執行器的提法,在網絡上廣泛流傳,其實Arduino能夠兼容的傳感器模塊肯定是不止這37種的。鑒於本人手頭積累了一些傳感器和執行器模塊,依照實踐出真知(一定要動手做)的理念,以學習和交流為目的,這里准備逐一動手嘗試系列實驗,不管成功(程序走通)與否,都會記錄下來---小小的進步或是搞不掂的問題,希望能夠拋磚引玉。
【Arduino】168種傳感器模塊系列實驗(資料代碼+圖形編程+仿真編程)
實驗七十二:人體秤50kg稱重傳感器模塊(電阻應變半橋式)


應變片
是由敏感柵等構成用於測量應變的元件。電阻應變片的工作原理是基於應變效應制作的,即導體或半導體材料在外界力的作用下產生機械變形時,其電阻值相應的發生變化,這種現象稱為“應變效應”。

為了系列實驗和了解應變片,我特意去網上買了一片,就是其體積挺驚人,在包裝盒里面好不容易才找到

應變效應
金屬導體的電阻值,隨着它受力所產生機械變形(拉伸或壓縮)的大小而發生變化的現象,稱之為金屬的電阻應變效應。電阻值將發生變化這種現象稱為“應變效應”。根據應變效應將應變片粘貼於被測材料上被測材料受到外界作用產生的應變就會傳送到應變片上使應變片的電阻值發生變化通過測量應變片電阻值的變化就可得知被測機械量的大小。
應變效應應用范圍十分廣泛,可測量應變、應力、力矩、位移、加速度、扭矩等物理參量。電阻式應變片應用模式有兩種,一是將應變片粘貼於彈性剛體上組成平衡電橋,然后接到轉換電路,構成專用應變傳感器;二是將應變片粘貼於被測物體上,然后接到專用應變儀直接讀取應變量。

電阻應變片
電阻應變片的工作原理是基於應變效應制作的,即導體或半導體材料在外界力的作用下產生機械變形時,其電阻值相應的發生變化,這種現象稱為“應變效應”。半導體應變片是用半導體材料制成的,其工作原理是基於半導體材料的壓阻效應。壓阻效應是指當半導體材料某一軸向受外力作用時,其電阻率發生變化的現象。應變片是由敏感柵等構成用於測量應變的元件,使用時將其牢固地粘貼在構件的測點上,構件受力后由於測點發生應變,敏感柵也隨之變形而使其電阻發生變化,再由專用儀器測得其電阻變化大小,並轉換為測點的應變值。金屬電阻應變片品種繁多,形式多樣,常見的有絲式電阻應變片和箔式電阻 應變片。箔式電阻應變片是一種基於應變——電阻效應制成的,用金屬箔作為敏感柵的,能把被測試件的應變量轉換成電阻變化量的敏感元件。

稱重傳感器工作原理
稱重傳感器是用來將重量信號或壓力信號轉換成電量信號的轉換裝置。稱重傳感器采用金屬電阻應變片組成測量橋路,利用金屬電阻絲在張力作用下伸長變細,電阻增加的原理,即金屬電阻隨所受應變而變化的效應而制成的。金屬電阻具有阻礙電流流動的性質,同一種金屬絲,一般來講,越是細長,其電阻值就越大。當金屬電阻絲受外力作用而伸縮時,其電阻值就會在某一范圍內增減。因此,將金屬絲(或膜)緊貼在被測物體上,當被測物體受外力而伸縮時,金屬電阻絲(膜)也會按比例伸縮,其阻值也會相應變化。稱重傳感器就是將金屬電阻應變片粘貼在金屬稱重梁上進行測量重量信號的。

橋式測量電路
電阻應變式稱重傳感器包括兩個主要部分,一個是彈性敏感元件:利用它將被測的重量轉換為彈性體的應變值;另一個是電阻應變計:它作為傳感元件將彈性體電阻應變式稱重傳感器。 當傳感器不受載荷時,彈性敏感元件不產生應變,粘貼在其上的應變片不發生變形,阻值不變,電橋平衡,輸出電壓為零;當傳感器受力時,即彈性敏感元件受載荷P時,應變片就會發生形變,阻值發生變化,電橋失去平衡,有輸出電壓。



內部為1000歐半橋應變片,量程為50kg稱重傳感器,半橋結構。
測量時,外側邊正確施加外力,E字形傳感器的應變梁部分(即中間貼應變片的,有白色覆膠的梁臂)和外側邊要形成一個方向相反的剪切力,即中間的應變梁在受力下必需可以發生彎曲變化,應變梁受力面另一側不可有阻擋物。

傳感器內部是一組半橋應變片,使用方法可以有以下三種:
1、使用一只傳感器配合外接電阻組成全橋測量,量程為一個傳感器的量程:50kg。對外接電阻要求較高。
2、使用二只傳感器組成全橋測量,量程為兩只傳感器的量程之和:50kgx2=100kg。
3、使用四只傳感器組成全橋測量,量程為四只傳感器的量程之和:50kgx4=200k。




HX711 24位精度AD稱重模塊

HX711
是一款專為高精度電子秤而設計的24位A/D轉換器芯片。與同類型其它芯片相比,該芯片集成了包括穩壓電源、片內時鍾振盪器等其它同類型芯片所需要的外圍電路,具有集成度高、響應速度快、抗干擾性強等優點。降低了電子秤的整機成本,提高了整機的性能和可靠性。該芯片與后端MCU 芯片的接口和編程非常簡單,所有控制信號由管腳驅動,無需對芯片內部的寄存器編程。輸入選擇開關可任意選取通道A 或通道B,與其內部的低噪聲可編程放大器相連。通道A 的可編程增益為128 或64,對應的滿額度差分輸入信號幅值分別為±20mV或±40mV。通道B 則為固定的32 增益,用於系統參數檢測。芯片內提供的穩壓電源可以直接向外部傳感器和芯片內的A/D 轉換器提供電源,系統板上無需另外的模擬電源。芯片內的時鍾振盪器不需要任何外接器件。上電自動復位功能簡化了開機的初始化過程。



主要參數
滿額度差分輸入范圍 V(inp)-V(inn) ±0.5(AVDD/GAIN) V
輸入共模電壓范圍 AGND+0.6 AVDD-0.6 V
使用片內振盪器,RATE = 0 10
使用片內振盪器,RATE = DVDD 80
外部時鍾或晶振,RATE = 0 fclk/1,105,920
輸出數據速率
外部時鍾或晶振,RATE = DVDD fclk/138,240 Hz
輸出數據編碼 二進制補碼 800000 7FFFFF(HEX) RATE = 0 400
輸出參考電壓(VBG) 1.25 V
外部時鍾或晶振頻率 1 11.0592 30 MHz
模擬電源電流(含穩壓電路) 1600μA 斷電 0.3 μA



模塊采用24位高精度的A/D轉換器芯片hx711,是一款專為高精度電子稱而設計的, 具有兩路模擬通道輸入, 內部集成128倍增益可編程放大器。輸入電路可配置為 提供橋壓的電橋式(如壓力、稱重)傳感器模式 是一款理想的高精度低成本采樣前端模塊。采樣hx711 24位ad芯片,雙通道 差分輸入。全貼片 機器焊接,帶金屬屏蔽,配送直、彎兩種插針,滿足各種安裝焊接方式,板上使用了2個47uF的膽電容,用料很足,內置上拉電阻,且預留CPU焊接位置,很適合自己二次開發各種各樣的傳感器相關應用。

模塊電原理圖

模塊主要特點
● 帶金屬屏蔽,強抗干擾,預留cpu(STC15F104)位置,可自行升級二次開發。
● 兩路可選擇差分輸入
● 片內低噪聲可編程放大器,可選增益為32、64 和128
● 片內穩壓電路可直接向外部傳感器和芯片內A/D 轉換器提供電源
● 片內時鍾振盪器無需任何外接器件,必要時也可使用外接晶振或時鍾
● 上電自動復位電路
● 簡單的數字控制和串口通訊:所有控制由管腳輸入,芯片內寄存器無需編程
● 可選擇10Hz 或80Hz 的輸出數據速率
● 同步抑制50Hz 和60Hz 的電源干擾
● 耗電量(含穩壓電源電路):
典型工作電流:< 1.7mA, 斷電電流:< 1μA
● 工作電壓范圍:2.6 ~ 5.5V
● 工作溫度范圍:-20 ~ +85℃

模塊檢測方法
1,初步快速判斷:斷開模塊所有連線,僅僅給模塊供電5v(就是vcc接+5v,gnd接地),然后把模塊的ck端口對地短接,然后再去測 out+對地電壓,應該4.5v左右,接着測DO/RX端口對地電壓,應該0v左右,如果電壓都符合,說明模塊99%正常。
2,完整測試判斷:使用測試電路圖搭個電路,給單片機燒入測試程序,然后用串口線連接電腦,在電腦上運行串口助手,就可以接收到測試電路發出來的讀數報告,讀數正常,表明模塊正常。




實驗准備接線時,才發現收來的四個稱重傳感器中,有一個只有二根線(其它3個都是3根接線),看來要搞不定了



HX711.h頭文件
#ifndef HX711_h
#define HX711_h
#include "Arduino.h"
class Hx711
{
private:
int DOUT;//定義數據引腳
int SCK;//定義時鍾引腳
float scale;//定義比例系數
long offset;//定義補償值
public:
Hx711(int IO_DOUT,int IO_SCK);//構造函數
void setScale(float IO_scale);//設置比例系數
void setOffset(long IO_offset);//設置補償值
long getValue();//采集一次ADC值
long getAverageValue(char IO_times);//采集ADC平均值
float getWeight(char IO_times);//得出重量值
};
#endif
HX711.cpp 文件
#include "HX711.h"
#include "Arduino.h"
//int DOUT;//定義數據引腳
//int SCK;//定義時鍾引腳
//float scale;//定義比例系數
//long offset;//定義補償值
//int times;//定義采集次數
Hx711::Hx711(int IO_DOUT,int IO_SCK)//構造函數
{
DOUT = IO_DOUT;
SCK = IO_SCK;
pinMode(SCK, OUTPUT);//設置IO口工作方式
pinMode(DOUT, INPUT);
}
void Hx711::setScale(float IO_scale)//設置比例系數
{
scale = IO_scale;
}
void Hx711::setOffset(long IO_offset)//設置補償值
{
offset = IO_offset;
}
long Hx711::getValue()//采集一次ADC值
{
unsigned long Count;
unsigned char i;
digitalWrite(SCK,LOW);
Count = 0;
while(digitalRead(DOUT) == 1);//低電平時數據可以輸出
for(i=0;i<24;i++)//循環讀取數據
{
digitalWrite(SCK,HIGH);
Count = Count<<1;
digitalWrite(SCK,LOW);
if(digitalRead(DOUT) == 1) Count++;//最低位置1
}
digitalWrite(SCK,HIGH);
Count = Count^0x800000;//最高位置0
digitalWrite(SCK,LOW);//128增益
return Count;
}
long Hx711::getAverageValue(char IO_times)//采集ADC平均值
{
long sum=0;
char i;
for(i=0;i<IO_times;i++)
{
sum += getValue();
}
return sum/IO_times;
}
float Hx711::getWeight(char IO_times)//得出重量值
{
long temp;
temp = getAverageValue(IO_times) - offset;
return (float)temp/scale;
}
實驗沒有通過,一直卡在HX711庫上,編譯無法通過.......


/*
【Arduino】66種傳感器模塊系列實驗(73)
實驗七十三:人體秤50kg稱重傳感器模塊(電阻應變半橋式)
*/
#include <HX711.h>
HX711 hx(9, 10);
void setup() {
Serial.begin(9600);
}
void loop()
{
double sum = 0;
for (int i = 0; i < 10; i++)
sum += hx.read();
Serial.println(sum/10);
delay(3000);
}

實驗開源圖形編程(Mind+、編玩邊學)

實驗開源仿真編程(linkboy V4.1)


