用HT1632 LED 矩陣和HX711 讀取重量感測器 - 人體自動化 ...

文章推薦指數: 80 %
投票人數:10人

用HT1632 LED 矩陣和HX711 讀取重量感測器 ... HX711, 這是顆24-bit ADC, 具有內建128 倍放大器它和上面的HT1632 類似, 都是使用奇怪bit 數的序列傳輸 ... 2016年3月3日星期四 用HT1632LED矩陣和HX711讀取重量感測器 這次要玩的是重量感測器 從露天拍賣取得,應該是由浙江三科所販賣的半橋式重量感測器 詳細資料從掏寶網擷取:電阻應變半橋傳感器 沒技術支持,不懂不要買!霸氣!XD 使用方法就是照上圖右那樣擺,從中間半圓球突起處施加壓力 上圖左是背面圖,施壓後紅框處會產生應變,上面固定的特製電阻就會改變阻值 一共有兩顆電阻,當往固定方向施壓時,例如上圖右那樣放然後往下壓 其中一顆電阻阻抗會增加,而另一顆電阻則是阻抗會減少 所以掏寶網的說明中兩顆電阻分別寫正應變和負應變 由於量測點是在上圖左紅框處,施加壓力時要固定外框 紅框下方的鐵片不可接觸到物體,應保持懸空,這樣才能產生應變 如果施加過大壓力把懸空處拗到彎了,那這東西就壞了 這是從感測器側面拍的 可以看到受力點刻意突起,並沒有直接壓在電線上 由此可知感測器量測的不是壓力,而是鐵片的應變 這裡有一些關於應變重量感測器的介紹:GettingStartedwithLoadCells 裡面其中一段: 這裡介紹了如何量測這種感測器,電路是惠斯登電橋 不過玩法有點不同,惠斯登電橋是用已知阻值電阻去計算未知電阻阻值 我們這感測器的阻值會隨著應變而改變,沒有一個阻值是已知的 因此應用上我們只是借用惠斯登電橋的算法來評估量測結果 簡單的說,就只是電阻分壓而已 如上圖,R1和R2就代表一個重量感測器,R3和R4則代表另一個重量感測器 接法在上圖下半部,假設R1,R2組成的重量感測器為正應變和負應變電阻 那麼R3,R4組成的重量感測器則為負應變和正應變電阻 注意應變正負要相反,理由是電阻分壓依據惠斯登電橋的公式 上圖那公式有點錯誤,可參考惠斯登電橋中的公式,套到上圖應該是: Vout=[(R4/(R3+R4))-(R2/(R1+R2))]*Vin 如果R1,R3都是正應變,R2,R4都是負應變 假設兩個感測器受力平均,那麼受到壓力時 R1,R2的中點電壓會和R3,R4的中點電壓相同,同時上升或下降 量測它們倆中點電壓的電壓差將永遠是0 就算不是0,這樣的設計意思是兩個變化量相減,這值沒有意義 因此要將另一顆感測器的電阻反接,這樣才會拉大電壓差 讓兩側的變化量相加,這樣的量測結果才有意義,總變化量才是我們要的 在我們開始玩弄這玩具之前,我找來了另一個玩具: LED矩陣顯示器,用它來顯示量測結果 背面的樣子 上面安裝了一顆Atmega8的MCU,以及一個HT1632矩陣LED控制器 這控制器可以調整輸出亮度: 上圖為最暗和最亮的差別 這板子原本是當電子時鐘賣的,由於我有玩過幾顆AVR的MCU,就把它轉做其他用途 像這樣: 接上USBASP的ISP即可寫入 電路板上就有寫接腳定義,稍微用電錶導通測試測一下就知道怎麼接 然後再用電錶導通測試測兩IC的接腳,可以找到接線方式: PB3接到CS,PB4接到WR,PB5接到DATA PB5是AVRSPI的SCK接腳,應該接到WR當CLK才對 但線路卻沒這樣接,後來研究HT1632發現這貨用奇怪的bit數來控制 前3bit是ID,然後跟9bit命令,資料模式則是3bitID,7bit位址,然後8bit資料 並不像那些專門給有DMA功能的SPI裝置總是以byte為單位 既然沒法用硬體SPI,那就GPIO慢慢拉唄 另外,這張板子規劃的圖像排列是8-bit由下往上,然後再由左往右 和LCD常用的直立8-bit由左往右到底不同 由於多數LCD都是這樣,所以我不想為了這貨改變我的字庫,不划算 所以在我源碼ht1632.c的ht1632c_update_all()中用了麻煩的轉換輸出 也因為這種怪排法,部份更新不太好做,所以更新時就索性整個畫面重畫 這顆IC初始化流程在ht1632.c中: SWSPI_CS_0; swspi_xfer(3,0x4);//cmdmode100 swspi_xfer(9,0x2);//systemoscon swspi_xfer(9,0x6);//LEDon swspi_xfer(9,0x140);//1/16duty swspi_xfer(9,0x15E);//16/16duty SWSPI_CS_1; 把CS拉低,然後送3個bit表示指令模式 swspi_xfer(3,0x4); ←3就是bit數,0x4就是3-bit內容 接著連續四個9-bit,其中最後兩個命令1/16是最暗,16/16是最亮 註解最後一個命令就會變最暗,送完後CS拉高即可 接著回來看我們的重力感測器 一開始我本來想用OP放大器放大電壓差然後直接塞給AVR的ADC 但是實際量測發現......這感測器的電阻值變化太小了,導致電壓差變化都是mV為單位 這樣放大也不容易,倍數要非常高,所以只好找現成的專用模組來用: HX711,這是顆24-bitADC,具有內建128倍放大器 它和上面的HT1632類似,都是使用奇怪bit數的序列傳輸,所以只能用GPIO做 可以注意到上圖黑白兩線接法,表示兩個感測器接電源時相反 讀取HX711只要兩條線,一條DATA和一條CLK 讀取流程: 檢查DATA是否在高電位,若是,表示ADC轉換中,此時要等待 等到DATA拉低時,CLK低→高→低可以得到1bit資料 拉24個CLK就讀完一筆轉換結果,此時DATA電位高 這時流程還沒結束 如果下一筆資料想要從ChannelA讀取128倍放大,就要多拉一個CLK 如果下一筆資料想要從ChannelB讀取32倍放大,就要多拉兩個CLK 如果下一筆資料想要從ChannelB讀取64倍放大,就要多拉三個CLK 也就是說,讀取這IC至少要送25個CLK,最多送27個CLK 最後三個CLK決定下一筆資料從哪讀 由於每個感測器阻抗不同,電壓差也會不同,所以要校正 我是讀出0的時候的ADC結果,顯示到LED上,然後把值寫死到韌體 如果要當體重計使用,就必須做校正功能,把0時讀到的值存起來 然後每次都減去這定值 至於讀到的值每個bit代表幾公克,這我沒法從規格書判斷,看不太懂... 也有可能規格裡沒有寫,我就拿已知重量的物體去算,然後除一個定值,看起來好像還行... 這裡放出源碼:led-weight-meter.zip 板上的Atmega8預設用內建RC運行於1MHz,挺慢的,建議改FUSE提高速度 makefile中這個: #AVRDUDE_WRITE_FLASH+=-Ulfuse:w:0xe4:m-Uhfuse:w:0xd9:m 解除註解刷上後再把註解加回去,只要寫一次即可 讓AVR用內部RC以8MHz運行 整張板子連線: 拿一個鉛蓄電池用電子秤量得1549公克 丟到我的感測器上: 1.5公斤,大致吻合 後來有量測20公斤物體,重量也正確,應該還能用 它就只能用來量測粗略值,到0.1公斤還行,再下去到0.01時漂移的蠻嚴重的 應該是和高倍數ADC放大有關,而且這感測器會有疲勞的現象 如果壓著太久,它會沒法回到0,而會在0.1~0.3公斤左右,所以量測單位應該就0.1公斤了 張貼者: WuKC 於 凌晨3:27 以電子郵件傳送這篇文章BlogThis!分享至Twitter分享至Facebook分享到Pinterest 標籤: AVR, LEDMatrix 19則留言: Unknown2016年4月7日晚上8:24可以請教你你的訊號經過hx711後怎麼換算成重量嗎...謝謝你回覆刪除回覆WuKC2016年4月8日凌晨4:47hx711的讀出值減去校正值後再除一個定值,就這樣而已每個感測器會有誤差都不一樣,因此須自行量測校正值而除的定值也和感測器與hx711設定的放大率有關如果把我程式裡的數字直接套上保證是不會動的,這都需要自行量測!刪除回覆回覆Unknown2016年4月8日清晨7:05可以教一下怎麼測校正值嗎...謝謝你刪除回覆回覆WuKC2016年4月8日上午8:41感測器空載不要放東西,然後把HX711讀到的值丟出來即可如果板上有UART就從UART丟,它會不斷的跳動,等個幾秒取最大值即可刪除回覆回覆Unknown2016年4月8日晚上11:30放知道重量上去測他的值再去算嗎?刪除回覆回覆Unknown2016年4月8日晚上11:31作者已經移除這則留言。

刪除回覆回覆WuKC2016年4月9日凌晨3:29是的,一樣是一直把值丟出來,減去校正值再除已知重量即可刪除回覆回覆Unknown2016年4月9日凌晨3:474個七段顯示器顯示的出來校正值嗎刪除回覆回覆WuKC2016年4月9日凌晨4:57這要看你選的放大率以及需要的精確度我的是取五位數,取最高五位,後面低位數的都丟掉不過以這顆抖動的情況取高四位數應該是夠的,就都試看看吧刪除回覆回覆Unknown2016年4月9日清晨5:40能跟你要個FB或line比較好能請教你嗎@@刪除回覆回覆Unknown2016年4月9日清晨5:41作者已經移除這則留言。

刪除回覆回覆WuKC2016年4月9日清晨6:08我沒有line也沒FB,平常上班沒閒用上面那篇留ID的建議刪掉以防廣告如果是缺基礎技術建議去找arduino,到處都有教學可以從UART丟資料會比較簡單,不用考慮刪除幾位的問題刪除回覆回覆Unknown2016年4月9日清晨7:38好謝謝你^^刪除回覆回覆回覆Unknown2016年4月9日凌晨3:46作者已經移除這則留言。

回覆刪除回覆回覆匿名2016年8月4日清晨6:11想請問這個模組能用來量微小的電壓嗎?大概mV左右回覆刪除回覆WuKC2016年8月4日清晨7:33它是設計來量測mV的微小電壓沒錯,但是須注意參考點HX711量的是兩組電阻的中點電壓差,它有點像聲音訊號當我們在處理聲音訊號時和一般從接地量起的訊號作法是不同的這部份我沒有學的很多,只能提醒有這點不同至於怎麼處理比較好我不清楚刪除回覆回覆回覆Unknown2017年3月29日上午9:17請問可以問一下重量感測那邊的程式怎麼寫嗎原碼那個我不知道怎麼用下載了以後要怎麼做?回覆刪除回覆WuKC2017年3月30日下午6:09這是ubuntu上用的,安裝avr-gcc就可以用make編譯如果是windows系統就只能提供做參考,windows要如何安裝我不清楚...印象中avr-gcc和make都有windows版刪除回覆回覆WuKC2017年3月30日下午6:21我看了一下makefile裡的註解才想起來,以前是用WinAVR做的只是換到ubuntu以後又有修改過,之後都是以ubuntu開發為主可以Google搜尋winavr教學試試,應該是能編過但沒測過不保證刪除回覆回覆回覆新增留言載入更多… 較新的文章 較舊的文章 首頁 訂閱: 張貼留言(Atom) 我的網頁 我的相簿集中連結20211123 Blog首頁(預設) 總網頁瀏覽量 關於我自己 WuKC 別人問我, 肥宅到底是什麼? 為什麼讓我如此的引以為傲? 我想了一下.... 肥宅到底是什麼? 肥宅,絕不向現實妥協! 肥宅,絕不向命運低頭! 肥宅是一種態度,一種精神, 一種生活的方式, 一種對文化的信仰與堅持, 他更是一種高雅,一種品味, 因此他高貴,尊爵,不凡, 這就是肥宅! 檢視我的完整簡介 標籤 AVR (23) Camera (21) 模型製作 (12) LCD (11) nuvoton (10) 8051 (9) 3DPrint (8) CNC (8) SecureDigital (8) Android (7) SONYNEX (7) 步進馬達 (7) 環氧樹脂 (7) 火箭科學 (6) 石膏 (6) FileAllocationTable (5) STM32 (5) 開箱 (5) AudioDSP (4) CanonEFLens (4) DirectFB (4) GTK+ (4) OMAP3 (4) PCB (4) WS2812 (4) WiiRemote (4) 車床 (4) CanonE-TTLFlash (3) CanonEOS (3) LEDMatrix (3) LVDS (3) M42Lens (3) Bluetooth (2) CanonFDLens (2) ConsumerIR (2) HP (2) MediaTek (2) Notebook (2) OLEDPanel (2) PIC (2) PXA270 (2) TAKUMAR (2) TB88 (2) 直流馬達 (2) 音響 (2) CapacitiveSensing (1) DCtoDC (1) NFC (1) PCcase (1) ZEISS (1) nRF24L01 (1) 抱枕 (1) 鬼作 (1) 網誌存檔 ►  2021 (4) ►  七月 (2) ►  六月 (1) ►  二月 (1) ►  2020 (6) ►  十二月 (1) ►  十一月 (1) ►  八月 (1) ►  七月 (1) ►  四月 (1) ►  二月 (1) ►  2019 (6) ►  十二月 (1) ►  九月 (1) ►  七月 (1) ►  六月 (2) ►  三月 (1) ►  2018 (5) ►  十二月 (2) ►  五月 (1) ►  四月 (1) ►  三月 (1) ►  2017 (8) ►  九月 (2) ►  八月 (1) ►  五月 (2) ►  三月 (1) ►  二月 (2) ▼  2016 (16) ►  十二月 (1) ►  十一月 (1) ►  九月 (1) ►  八月 (1) ►  七月 (1) ►  四月 (6) ▼  三月 (4) 在STM32F469上用FreeType讀取TrueType字型繪製文字 用LED燈泡作為攝影光源 在ubuntu上開發STM32F469Discovery實驗板 用HT1632LED矩陣和HX711讀取重量感測器 ►  二月 (1) ►  2015 (7) ►  十二月 (1) ►  九月 (2) ►  六月 (1) ►  五月 (1) ►  四月 (1) ►  三月 (1) ►  2014 (13) ►  十二月 (5) ►  十一月 (1) ►  十月 (1) ►  八月 (1) ►  七月 (1) ►  六月 (2) ►  四月 (1) ►  三月 (1) ►  2013 (12) ►  十二月 (2) ►  十一月 (1) ►  十月 (1) ►  八月 (1) ►  七月 (2) ►  五月 (3) ►  三月 (2) ►  2012 (8) ►  十二月 (1) ►  十月 (1) ►  八月 (1) ►  七月 (1) ►  六月 (2) ►  三月 (1) ►  二月 (1) ►  2011 (6) ►  十二月 (2) ►  十一月 (1) ►  五月 (1) ►  四月 (1) ►  三月 (1) ►  2010 (5) ►  十一月 (3) ►  十月 (2) ►  2009 (10) ►  十月 (3) ►  九月 (1) ►  七月 (1) ►  四月 (3) ►  一月 (2) ►  2008 (7) ►  十一月 (1) ►  七月 (2) ►  六月 (1) ►  四月 (1) ►  二月 (1) ►  一月 (1) ►  2007 (3) ►  九月 (2) ►  六月 (1) 最新回覆 載入中…



請為這篇文章評分?