0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用Arduino和加速度計構建一個簡單且便宜的計步器

科技觀察員 ? 來源:circuitdigest ? 作者:Ashish Choudhary ? 2022-08-19 15:15 ? 次閱讀

如今,健身手環(huán)越來越流行,它不僅可以計算腳步聲,還可以跟蹤您燃燒的卡路里、顯示心跳率、放映時間等等。這些物聯(lián)網設備與云同步,因此您可以在智能手機上輕松獲取所有身體活動的歷史記錄。

計步器是僅用于計算腳步的設備。因此,在本教程中,我們將使用 Arduino 和加速度計構建一個簡單且便宜的 DIY 計步器。該計步器將計算腳步的數(shù)量并將其顯示在16x2 LCD 模塊上。這款計步器可以與這款Arduino 智能手表集成。

所需組件

Arduino納米

ADXL 335 加速度計

16*2液晶

液晶 I2C 模塊

電池

ADXL335 加速度計

ADXL335 是一款完整的 3 軸模擬加速度計,它基于電容感應原理工作。它是一種小型、薄型、低功耗模塊,帶有多晶硅表面微加工傳感器信號調理電路。ADXL335 加速度計可以測量靜態(tài)和動態(tài)加速度。在這個 Arduino 計步器項目中,ADXL335 加速度計將充當計步器傳感器。

加速度計是一種可以將任何方向的加速度轉換為其各自的可變電壓的設備。這是通過使用電容器來實現(xiàn)的(參見圖片),當 Accel 移動時,其內部的電容器也會根據運動發(fā)生變化(參見圖片),因為電容是變化的,因此也可以獲得可變電壓。

poYBAGL_ODKAef6aAAEZnm_R1Js761.png

下面是加速度計的正面和背面圖像以及引腳說明-

poYBAGL_OC-AUz_RAAMsqzQqz7E254.png

加速度計引腳說明:

Vcc- 5 伏電源應連接到此引腳。

X-OUT- 該引腳在 x 方向提供模擬輸出

Y-OUT- 該引腳在 y 方向提供模擬輸出

Z-OUT- 此引腳在 z 方向提供模擬輸出

GND-地

ST- 此引腳用于設置傳感器的靈敏度

電路原理

下面給出了Arduino 加速度計步數(shù)計數(shù)器的電路圖。

poYBAGL_OCmAKieSAAKR5dPzFak736.png

在這個電路中,我們使用 ADXL335 Accelerometer 與 Arduino Nano 連接。加速度計的 X、Y 和 Z 引腳與 Arduino Nano 的模擬引腳(A1、A2 和 A3)連接。要將 16x2 LCD 模塊與 Arduino 連接,我們使用的是 I2C 模塊。I2C 模塊的 SCL 和 SDA 引腳分別連接到 Arduino Nano 的 A5 和 A4 引腳。下表給出了完整的連接:

poYBAGL_OCWAG6fFAAAVYTjF43k466.png

我們首先在面包板上使用 Arduino設置構建了這個計步器

poYBAGL_OCKAJZrcAASClP5hRwo231.png

在成功測試后,我們通過將所有組件焊接到 Perfboard 上來在 Perfboard 上復制它,如下所示:

pYYBAGL_OB6AFODnAAWvZULN8Vs084.png

poYBAGL_OBuALreUAAbvBYsFtms518.png

計步器如何工作?

計步器使用向前、垂直和側面的三個運動分量來計算一個人所采取的總步數(shù)。計步器系統(tǒng)使用加速度計來獲取這些值。加速度計在每個定義的編號后不斷更新 3 軸加速度的最大值和最小值。的樣品。這3個軸的平均值(Max + Min)/2,稱為動態(tài)閾值水平,該閾值用于決定是否邁步。

跑步時,計步器可以在任何方向,因此計步器使用加速度變化最大的軸計算步數(shù)。

現(xiàn)在讓我快速了解一下這個 Arduino 計步器的工作原理

首先,計步器一通電就開始校準。

然后在void循環(huán)函數(shù)中,不斷的從X、Y、Z軸獲取數(shù)據。

之后,它計算從起點開始的總加速度矢量。

加速度矢量是 X、Y 和 Z 軸值的平方根 (x^2+y^2+z^2)。

然后將平均加速度值與閾值進行比較以計算步數(shù)。

如果加速度矢量超過閾值,則增加步數(shù);否則,它會丟棄無效的振動。

poYBAGL_OBaAEguHAAMeB-XU8r8937.png

對 Arduino 計步器進行編程

本文檔末尾提供了完整的Arduino 計步器代碼。在這里,我們將解釋此代碼的一些重要片段。

像往常一樣,通過包含所有必需的庫來啟動代碼。ADXL335 加速度計不需要任何庫,因為它提供模擬輸出。

#include 

之后,定義連接加速度計的 Arduino 引腳。

常量 int xpin = A1;
常量 int ypin = A2;
常量 int zpin = A3;

定義加速度計的閾值。該閾值將與加速度矢量進行比較以計算步數(shù)。

浮動閾值 = 6;

在void setup內部,函數(shù)會在系統(tǒng)通電時校準系統(tǒng)。

校準();

在void 循環(huán)函數(shù)內部,它將讀取 100 個樣本的 X、Y 和 Z 軸值。

for (int a = 0; a < 100; a++)
  {
    xaccl[a] = float(analogRead(xpin) - 345);
    延遲(1);
    yaccl[a] = float(analogRead(ypin) - 346);
    延遲(1);
    zaccl[a] = float(analogRead(zpin) - 416);
    延遲(1);

獲得 3 軸值后,通過取 X、Y 和 Z 軸值的平方根來計算總加速度矢量。

totvect[a] = sqrt(((xaccl[a] - xavg) * (xaccl[a] - xavg)) + ((yaccl[a] - yavg) * (yaccl[a] - yavg)) + ((zval [a] - zavg) * (zval[a] - zavg)));

然后計算最大和最小加速度矢量值的平均值。

totave[a] = (totvect[a] + totvect[a - 1]) / 2 ;

現(xiàn)在將平均加速度與閾值進行比較。如果平均值大于閾值,則增加步數(shù)并提高標志。

if (totave[a] > 閾值 && flag == 0)
    {
      步數(shù) = 步數(shù) + 1;
      標志 = 1; }

如果平均值大于閾值但標志已升起,則什么也不做。

else if (totave[a] > threshold && flag == 1)
    {
      // 不計算
    }

如果總平均值小于閾值并且標志被升起,則將標志放下。

if (totave[a] < 閾值 && flag == 1)
    {
      標志 = 0;
    }

在串行監(jiān)視器和 LCD 上打印步數(shù)。

Serial.println(步驟);
lcd.print("步驟:");
lcd.print(步驟);

測試 Arduino 計步器

準備好硬件和代碼后,將 Arduino 連接到筆記本電腦并上傳代碼?,F(xiàn)在拿起你手中的計步器,開始一步一步地走,它應該會在 LCD 上顯示步數(shù)。有時,當計步器振動非??旎蚍浅B龝r,它會增加步數(shù)。

pYYBAGL_OA6ASWrmAAaJ1VUrGmA468.png

#include

LiquidCrystal_I2C lcd(0x27, 16, 2);

常量 int xpin = A1;

常量 int ypin = A2;

常量 int zpin = A3;

字節(jié) p[8] = {

0x1F,

0x1F,

0x1F,

0x1F,

0x1F,

0x1F,

0x1F,

0x1F

};

浮動xavg,yavg,zavg;

整數(shù)步,標志 = 0;

無效設置()

{

序列.開始(9600);

液晶顯示器開始();

液晶背光();

lcd.clear();

校準();
無效循環(huán)(




{

for (int w = 0; w < 16; w++) {

lcd.write(byte(0));

延遲(500);

}

int acc = 0;

浮動 totvect1ec0aa5fadd49ed5ebbb8ae6bb8416b05d81a068a1f8cd4024e19920a3975fceQzpcVXNlcnNcQWRtaW5pc3RyYXRvclxBcHBEYXRhXFJvYW1pbmdcRGluZ1RhbGtcZGVmRW1vdGlvblxlbW90aW9uXzEwOC5wbmc=?= {0};

浮點數(shù)1ec0aa5fadd49ed5ebbb8ae6bb8416b05d81a068a1f8cd4024e19920a3975fceQzpcVXNlcnNcQWRtaW5pc3RyYXRvclxBcHBEYXRhXFJvYW1pbmdcRGluZ1RhbGtcZGVmRW1vdGlvblxlbW90aW9uXzEwOC5wbmc=?= {0};

浮動 xaccl1ec0aa5fadd49ed5ebbb8ae6bb8416b05d81a068a1f8cd4024e19920a3975fceQzpcVXNlcnNcQWRtaW5pc3RyYXRvclxBcHBEYXRhXFJvYW1pbmdcRGluZ1RhbGtcZGVmRW1vdGlvblxlbW90aW9uXzEwOC5wbmc=?= {0};

浮動 yaccl1ec0aa5fadd49ed5ebbb8ae6bb8416b05d81a068a1f8cd4024e19920a3975fceQzpcVXNlcnNcQWRtaW5pc3RyYXRvclxBcHBEYXRhXFJvYW1pbmdcRGluZ1RhbGtcZGVmRW1vdGlvblxlbW90aW9uXzEwOC5wbmc=?= {0};

浮動 zaccl1ec0aa5fadd49ed5ebbb8ae6bb8416b05d81a068a1f8cd4024e19920a3975fceQzpcVXNlcnNcQWRtaW5pc3RyYXRvclxBcHBEYXRhXFJvYW1pbmdcRGluZ1RhbGtcZGVmRW1vdGlvblxlbW90aW9uXzEwOC5wbmc=?= {0};

for (int a = 0; a < 100; a++)

{

xaccl[a] = float(analogRead(xpin) - 345);

延遲(1);

yaccl[a] = float(analogRead(ypin) - 346);

延遲(1);

zaccl[a] = float(analogRead(zpin) - 416);

延遲(1);

totvect[a] = sqrt(((xaccl[a] - xavg) * (xaccl[a] - xavg)) + ((yaccl[a] - yavg) * (yaccl[a] - yavg)) + ((zval [a] - zavg) * (zval[a] - zavg)));

totave[a] = (totvect[a] + totvect[a - 1]) / 2 ;

Serial.println("totave[a]");

Serial.println(totave[a]);

延遲(100);

if (totave[a] > threshold && flag == 0)

{

步數(shù) = 步數(shù) + 1;

標志 = 1;

}

else if (totave[a] > threshold && flag == 1)

{

// 不要計算

}

if (totave[a] < threshold && flag == 1)

{

flag = 0;

}

如果(步數(shù) < 0){

步數(shù) = 0;

}

Serial.println('\n');

Serial.print("步驟:");

Serial.println(步驟);


lcd.print(步驟);

延遲(1000);

lcd.clear();

}

延遲(1000);

}

void calibrate()

{

float sum = 0;

浮動總和1 = 0;

浮動總和2 = 0;

for (int i = 0; i < 100; i++) {

xval[i] = float(analogRead(xpin) - 345);

總和 = xval[i] + 總和;

}

延遲(100);

xavg =總和/ 100.0;

序列號.println(xavg);

for (int j = 0; j < 100; j++)

{

yval[j] = float(analogRead(ypin) - 346);

sum1 = yval[j] + sum1;

}

yavg = sum1 / 100.0;

Serial.println(yavg);

延遲(100);

for (int q = 0; q < 100; q++)

{

zval[q] = float(analogRead(zpin) - 416);

sum2 = zval[q] + sum2;

}

zavg = sum2 / 100.0;

延遲(100);

Serial.println(zavg);

}

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 加速度計
    +關注

    關注

    6

    文章

    695

    瀏覽量

    45807
  • 計步器
    +關注

    關注

    4

    文章

    76

    瀏覽量

    19881
  • Arduino
    +關注

    關注

    187

    文章

    6455

    瀏覽量

    186376
收藏 人收藏

    評論

    相關推薦

    arduino和加速度計一個重力感應屏幕

    傳感器加速度計加速度Arduino
    jf_57944602
    發(fā)布于 :2022年05月23日 10:30:52

    加速度計的幻想與現(xiàn)實

    測量滑雪者所感受到的實際沖擊力,就能精確判定是否應當松開固定 器。智能系統(tǒng)可以考慮每個人的能力和生理狀況。這是項實用的加速度計應用,但目前的電池技術不敷所需。等到將來開發(fā)出小而輕在低溫下保持良好
    發(fā)表于 10-11 10:33

    2476-100加速度計

    2220-100加速度計2220-200加速度計2220-400加速度計深圳市立年電子科技有限公司 --射頻微波站式采購產臺聯(lián)系人:王先生 ***QQ330538935`
    發(fā)表于 05-27 19:18

    2460-010加速度計

    的噪聲和長期穩(wěn)定性是絕對要求。2460包含3英尺長的集成電纜,并且在操作上與2466相同,它具有連接器,可輕松定制電纜的長度和位置。每個SDI三軸加速度計均具有三正交安裝的低噪聲
    發(fā)表于 05-28 14:41

    2227-050加速度計模塊

    獲得專利的電容式硅感測元件和密封LCC封裝的高精度,定制CMOS集成電路。差分輸出MEMS加速度計的電壓在PCB上轉換為與施加的電流成比例的電流加速。可以為2227模塊提供熱校準參
    發(fā)表于 05-28 14:56

    1527J-010加速度計

    `1527型是款小型,輕巧的集成MEMS加速度計,用于用于要求高重復性,低重復性的戰(zhàn)術級慣性應用噪聲,以及在-55至+ 125°C的環(huán)境中的長期穩(wěn)定性。 1527型加速度計是由美國SDI完全
    發(fā)表于 05-28 15:04

    設計具有成本效益的加速度計

    等低成本 MEMS 加速度計稍貴(約 40 美元)。也許對于某些應用我們可以避免使用 ADXL355 并節(jié)省更多的錢;知道是否可行的唯方法是比較兩傳感器。為了比較這兩
    發(fā)表于 08-23 06:20

    通過單個加速度計增強計步器的性能

    通過單個加速度計增強計步器的性能
    發(fā)表于 12-13 17:08 ?39次下載
    通過單個<b class='flag-5'>加速度計</b>增強<b class='flag-5'>計步器</b>的性能

    通過單個加速度計增強計步器的性能

    通過單個加速度計增強計步器的性能 pdf.
    發(fā)表于 01-04 17:41 ?0次下載

    文帶你了解加速度計

    加速度計到底是什么?本文將對加速度計進行簡單介紹。
    發(fā)表于 07-07 10:52 ?1.4w次閱讀

    選擇加速度計的技巧

    加速度計,是測量運載體線加速度的儀表。加速度計由檢測質量(也稱敏感質量)、支承、電位器、彈簧、阻尼器和殼體組成。
    發(fā)表于 09-17 11:46 ?10次下載
    選擇<b class='flag-5'>一</b><b class='flag-5'>個</b><b class='flag-5'>加速度計</b>的技巧

    使用單個加速度計設計準確度高的計步器

    應用說明AN-602檢查了使用ADI公司的加速度計制作簡單但相對準確的計步器。從那時起,引入了更新的設備,允許在更加成本敏感的應用中使用加速度計。因此,諸如
    的頭像 發(fā)表于 04-03 08:08 ?4592次閱讀
    使用單個<b class='flag-5'>加速度計</b>設計準確度高的<b class='flag-5'>計步器</b>

    MEMS加速度計的概念,MEMS加速度計的原理

    MEMS加速度計的概念 加速度計種慣性傳感器,能夠測量物體的加速力。加速力就是當物體在加速
    發(fā)表于 06-01 11:28 ?4363次閱讀

    加速度計的安裝方法分享

    在本文中,了解安裝加速度計的不同方法、它們對加速度計頻率響應的影響以及安裝MEMS加速度計的解決方案。
    的頭像 發(fā)表于 04-16 16:35 ?5145次閱讀
    <b class='flag-5'>加速度計</b>的安裝方法分享

    如何使用加速度計構建基于Arduino的地震探測器

    采取預防措施。在這里,我們使用加速度計ADXL335來檢測地震前的振動。加速度計ADXL335對所有三軸的振動和振動都非常敏感。在這里,我們正在 使用加速度計
    的頭像 發(fā)表于 01-25 15:57 ?1577次閱讀
    如何使用<b class='flag-5'>加速度計</b><b class='flag-5'>構建</b><b class='flag-5'>一</b><b class='flag-5'>個</b>基于<b class='flag-5'>Arduino</b>的地震探測器