HX711壓力感測器+樹莓派python驅動程式

MKT-porter發表於2024-04-12
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import time
#VCC接1號針腳,GND接6號針腳,SCK接11號針腳,DT接13號針腳
class Hx711():
    def setup(self):
        self.SCK = 11    # 物理引腳第11號,時鐘
        self.DT = 13     #物理引腳第13號,資料
        self.flag=1      #用於首次讀數校準
        self.initweight=0	#毛皮
        self.weight=0		#測重
        self.delay=0.09		#延遲時間
        GPIO.setwarnings(False)
        GPIO.setmode(GPIO.BOARD)       # Numbers GPIOs by physical location
        GPIO.setup(self.SCK, GPIO.OUT)      # Set pin's mode is output
        GPIO.setup(self.DT, GPIO.IN)
        GPIO.setup(self.DT, GPIO.IN, pull_up_down=GPIO.PUD_UP)
            
    def start(self):
        GPIO.output(self.SCK,0)
        if GPIO.input(self.SCK):
            time.sleep(self.delay)
        value=0
        while GPIO.input(self.DT):
            time.sleep(self.delay)
        #迴圈24次讀取資料
        for i in range(24):
            GPIO.output(self.SCK,1)
            if(0==GPIO.input(self.SCK)):
                time.sleep(self.delay)
            value=value<<1		#左移一位,相當於乘2,二進位制轉十進位制
            GPIO.output(self.SCK,0)
            if GPIO.input(self.SCK):
                time.sleep(self.delay)
            if GPIO.input(self.DT)==1:
                value+=1
        GPIO.output(self.SCK,1)
        GPIO.output(self.SCK,0)
        value=int(value/1905)		#1905為我感測器的特性值,不同感測器值不同。可先註釋此步驟,再去測一物體A得到一個值X,而後用X除以A的真實值即可確定特性值
        if self.flag==1:			#第一次讀數為毛皮
            self.flag=0
            self.initweight=value        #初始值
        else:
            self.weight=abs(value-self.initweight)	#當前值減毛皮得測量到的重量
            print(self.weight)


if __name__=='__main__':
    send=Hx711()
    send.setup()
    while True:
        send.start()

  

# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import time

#程序測試
from multiprocessing import Process,Manager


#VCC接1號針腳,GND接6號針腳,SCK接11號針腳,DT接13號針腳
class Hx711():
    def setup(self):
        self.SCK = 11    # 物理引腳第11號,時鐘
        self.DT = 13     #物理引腳第13號,資料
        self.flag=1      #用於首次讀數校準
        self.initweight=0	#毛皮
        self.weight=0		#測重
        self.delay=0.09		#延遲時間
        GPIO.setwarnings(False)
        GPIO.setmode(GPIO.BOARD)       # Numbers GPIOs by physical location
        GPIO.setup(self.SCK, GPIO.OUT)      # Set pin's mode is output
        GPIO.setup(self.DT, GPIO.IN)
        GPIO.setup(self.DT, GPIO.IN, pull_up_down=GPIO.PUD_UP)
        
            
    def GetData(self,share_data):
        while 1:
            
            if share_data[9]==1:
                print("weight break!")
                break
        
            GPIO.output(self.SCK,0)
            if GPIO.input(self.SCK):
                time.sleep(self.delay)
            value=0
            while GPIO.input(self.DT):
                time.sleep(self.delay)
            #迴圈24次讀取資料
            for i in range(24):
                GPIO.output(self.SCK,1)
                if(0==GPIO.input(self.SCK)):
                    time.sleep(self.delay)
                value=value<<1		#左移一位,相當於乘2,二進位制轉十進位制
                GPIO.output(self.SCK,0)
                if GPIO.input(self.SCK):
                    time.sleep(self.delay)
                if GPIO.input(self.DT)==1:
                    value+=1
            GPIO.output(self.SCK,1)
            GPIO.output(self.SCK,0)
            value=int(value/1905)		#1905為我感測器的特性值,不同感測器值不同。可先註釋此步驟,再去測一物體A得到一個值X,而後用X除以A的真實值即可確定特性值
            if self.flag==1:			#第一次讀數為毛皮
                self.flag=0
                self.initweight=value        #初始值
            else:
                self.weight=abs(value-self.initweight)	#當前值減毛皮得測量到的重量
                #print(self.weight)
                time.sleep(0.2)
                share_data[1]=self.weight


if __name__=='__main__':
    
    managerdata=Manager().dict()
    sharelock=Manager().Lock()
    managerdata[0]=0# flag
    managerdata[1]=0# weight data
    
    managerdata[9]=0# 結果影像
    
        
    send=Hx711()
    send.setup()
    
    #1採集影像程序    
    t1=Process(target=send.GetData,args=(managerdata,))
    t1.deamon=True  #伴隨主程序關閉而關閉
    t1.start()
   

    while True:
        print('wegth',managerdata[1])
        time.sleep(1)

  

相關文章