熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2020-8-7 09:32
正文摘要:最近在做一個(gè)基于ADXL345的自動(dòng)提示剎車山地車尾燈的產(chǎn)品,硬件是做好了大概的原理就是通過檢測(cè)一個(gè)軸加速度來判斷有沒有在剎車 現(xiàn)在有問題是:要通過怎么樣的算法來判斷這個(gè)剎車與否?想是幾個(gè)算法,有做過相關(guān)的能否 ... |
Y_G_G 發(fā)表于 2020-8-7 21:48 嗯,我昨天看了一下這個(gè)芯片的資料。 談一下更遠(yuǎn)的想法, 你的器件做好了以后,電路板需要是在器件內(nèi)平放的,如果不能相對(duì)水平放置,Z軸的G值就不會(huì)是1個(gè)G。可能會(huì)小于1個(gè)G。 單車的款式不同,導(dǎo)致外形會(huì)各有不同。 器件安裝好后,如果需要調(diào)水平狀態(tài),因?yàn)橹挥性谒綘顟B(tài),器件才能最精準(zhǔn),那么這就是個(gè)缺陷了。 所以我想, 你可能需要重建一個(gè)相對(duì)坐標(biāo)系。開機(jī)第一步,就是檢測(cè)哪個(gè)虛擬坐標(biāo)的Z軸是1個(gè)G。 然后確定傾角,算法應(yīng)該有現(xiàn)成的,不過計(jì)算量會(huì)有點(diǎn)大,可能得用純16位以上芯片來做了。 另外,芯片平放時(shí),你做的水平運(yùn)動(dòng),不要測(cè)Z軸數(shù)據(jù), 測(cè)一個(gè)X軸,或者Y軸數(shù)據(jù)試試,數(shù)據(jù)變動(dòng)幅度會(huì)更明顯。 |
robinsonlin 發(fā)表于 2020-8-7 17:48 上坡和下坡暫時(shí)歸入滑行這一項(xiàng)來算,暫時(shí)只取一個(gè)軸的數(shù)據(jù),如果可行的話就省得去讀取XYZ三個(gè)軸的數(shù)據(jù)了 多謝提醒,我倒是沒有考慮到加速度過程的減速,回頭再改改 現(xiàn)在只能是在辦公室里用手左右擺擺試一下,小跑一小段停下也都能亮燈提示了 明天還考慮一下加速過程中減速的問題 |
Y_G_G 發(fā)表于 2020-8-7 15:06 剎車的狀態(tài),確實(shí)是對(duì)應(yīng)G值的改變,你前面的理解是對(duì)的,后面的確實(shí)不完全正確。 只要有加速度,速度就會(huì)改變,無(wú)論正負(fù)。如果為正值時(shí)是在加速,那么為負(fù)值時(shí),就是在減速。 當(dāng)加速度為0時(shí),速度才是恒定的。 這個(gè)時(shí)候,理想狀態(tài)是不受任何作用力的。 實(shí)際上,總會(huì)受到摩擦力和空氣阻力,這才導(dǎo)致你滑行的單車會(huì)停下來。 Z軸對(duì)應(yīng)的狀態(tài)應(yīng)該是加速、勻速(G值為0)、減速三個(gè)狀態(tài)。 靜止?fàn)顟B(tài),實(shí)際上也是一種勻速狀態(tài)。 所以,剎車的發(fā)生一定是有個(gè)大于摩擦力和空氣阻力的 力產(chǎn)生了,才會(huì)導(dǎo)致剎車。 所以,按照你的思路,如果滑行中的單車,會(huì)在Z軸上輸出一個(gè)信號(hào),只要是在平路上滑行,這個(gè)信號(hào)肯定是平滑遞減信號(hào)。在滑行過程中,這個(gè)遞減信號(hào)突然增大,才可以判斷為有剎車。 遞減恢復(fù)原來的速率,就是剎車消失了。 信號(hào)為0,就是單車停下來了。 以上只是詳細(xì)說了滑行過程中的剎車情況,還有加速過程剎車,勻速過程剎車,上坡剎車,和下坡剎車,以及坡路靜止剎車,應(yīng)該都可以通過程序讀取出狀態(tài)的。不信你可以測(cè)試,等待你的測(cè)試結(jié)果。 持續(xù)關(guān)注你的進(jìn)展。 |
robinsonlin 發(fā)表于 2020-8-7 12:00 其實(shí)沒有那么復(fù)雜的 我只取一個(gè)軸的數(shù)據(jù),比如Z軸,尾燈是夾在單車后面的,既然是尾燈它就一定是身后的,那么,Z軸的方向也是固定的 那么,對(duì)于Z軸,就只有加速度,靜止和減速度三種狀態(tài)了 如果一直上坡,比如它一直是輸出0.5G的數(shù)據(jù),那就說明它一直是這個(gè)狀態(tài),并沒有加速度 如果上一時(shí)間是輸出0.5G,下一個(gè)時(shí)間輸出0.9G,那么,就認(rèn)為它是加速度了 現(xiàn)在的問題主要是這個(gè)取樣的時(shí)間和算法,在這一塊沒有經(jīng)驗(yàn),想向別人取點(diǎn)經(jīng) 最終結(jié)果還是要在單車上測(cè)試才行的了 |
本帖最后由 robinsonlin 于 2020-8-7 14:44 編輯 在平地上,F(xiàn)1是一個(gè)持續(xù)存在的摩擦阻力,只有當(dāng)F1方向的力突然大于這個(gè)摩擦阻力時(shí),才可能是有擦車的行為發(fā)生。 所以可能需要一個(gè)函數(shù)去計(jì)算這個(gè)F1方向力的變化是不是平滑的。 持續(xù)判斷,持續(xù)比較吧,可能需要實(shí)際去測(cè)量,取一個(gè)最大的阻力值作為觸發(fā)點(diǎn)。 在坡地上,其實(shí)也可以判斷,這個(gè)判斷應(yīng)該放在第一級(jí)。在坡地上時(shí),重力G分解為G1 和G2, G1比G小,因?yàn)槟愕能囶^水平度已經(jīng)發(fā)生了變化, 芯片實(shí)際檢測(cè)到重力軸向的力應(yīng)該是G1,這時(shí)就可以判斷是在坡地上了,至于是上坡還是下坡,就得通過 平地到坡地的受力突變來判斷了, 這還得寫一個(gè)重力突變判斷函數(shù),判斷依據(jù)就是重力軸向的上的信號(hào)變小了多少。如果是持續(xù)變小,(下坡的時(shí)候會(huì)有一個(gè)微小的失重過程)可以判斷為下坡, 如果是變小后,基本維持不變,那就是上坡。 這個(gè)也得實(shí)地測(cè)量后才有依據(jù)。上坡過程中,G2是阻力,運(yùn)動(dòng)軸向上的力突然大于F1+G2,便是判斷為剎車了。下坡過程中,G2變成了動(dòng)力,所以這個(gè)時(shí)候,F(xiàn)1-G2這個(gè)應(yīng)該為負(fù)數(shù),這個(gè)負(fù)數(shù)的絕對(duì)值突然變小,可判斷為剎車了。 關(guān)于靜止時(shí),是否剎車的判斷, 應(yīng)該可以通過運(yùn)動(dòng)軸向上是否有輕微的信號(hào)變化來判斷。因?yàn)椋退闶莿蛩伲膊豢赡苁墙^對(duì)的勻速,運(yùn)動(dòng)過程中,軸向上肯定會(huì)有信號(hào)波動(dòng)。 只有靜止的時(shí)候,各個(gè)軸向才不會(huì)有信號(hào)變化。 當(dāng)G1<G ,但是運(yùn)動(dòng)軸向信號(hào)為0,則認(rèn)為是坡道剎車,可以一直觸發(fā)剎車。 當(dāng)G恒定為一個(gè)常量,切G1=G,軸向上信號(hào)為0時(shí),可以判斷為平地剎車,做個(gè)延遲關(guān)閉吧,這種情況也很少出現(xiàn),功能也不實(shí)用。 大致思路是這樣,細(xì)節(jié)可以還需要有實(shí)際數(shù)據(jù)再推敲。 |
30.jpg (47.12 KB, 下載次數(shù): 66)
Powered by 單片機(jī)教程網(wǎng)