目前,健身手環在人們的日常生活中變得越來越流行,它不僅可以計算人行走的步數,而且還可以記錄您燃燒的卡路里、顯示心跳、顯示時間等等。通常這些物聯網設備已與云平臺連接同步,因此您可以在智能手機上輕松獲取所有身體活動量的歷史記錄。在前面的文章中,我們還制作了一個基于物聯網的患者監護系統,其重要數據發送到ThingSpeak云平臺,用戶可以從任何地方進行查看。
計步器(Pedometer)是一種用來計算人走路步數的設備。在本篇文章中,我們將使用Arduino開發板和加速度計ADXL335制作一個簡單又便宜的計步器。該計步器計算走路步數,然后將計算結果顯示在LCD1602顯示屏上。
所需的組件
● Arduino Nano開發板
● ADXL335加速度計
● LCD1602液晶顯示屏模塊
● 電池
ADXL335加速度計介紹
ADXL335是一款小尺寸、完整的三軸加速度計,基于電容式感應原理。它是一個小尺寸、薄型、低功耗的模塊,帶有一個經過多晶硅表面微機械加工的傳感器和信號調理電路。 ADXL335加速度計可以測量靜態和動態加速度。在本文中,ADXL335加速度計用作計步器傳感器。
加速度計是一種可以將任意方向上的加速度轉換為其相應的可變電壓的設備。該設備通過使用電容器來實現的,隨著加速度移動,位于其內部的電容器也將根據該運動而發生變化,由于電容是變化的,因此可以獲得可變電壓。
下面是加速度計模塊的正視圖和底視圖:
電路連接圖
Arduino和加速度計組成的計步器電路圖如下所示。
在此電路中,我們將ADXL335加速度計連接到Arduino Nano開發板。加速度計的X、Y和Z引腳與Arduino Nano的模擬引腳(A1、A2和A3)連接。我們使用了一個I2C模塊將LCD1602顯示屏連接到Arduino開發板。 I2C模塊的SCL和SDA引腳分別連接到Arduino Nano的A5和A4引腳。
我們按照上面所示的電路圖在面包板上連接計步器的各個組件:
計步器是如何工作的?
計步器使用向前、垂直和側面的三個運動分量來計算一個人行走的總步數。計步器使用加速度計來獲取這些值。每次取樣后,加速度計都會不斷更新3軸加速度的最大值和最小值。這些3軸(Max + Min)/ 2的平均值稱為動態閾值水平,該閾值用于確定是否應該記錄該步數。
計步器在運行時可以處于任何方向,因此計步器使用加速度變化最大的軸來計算步數。
現在,我們快速了解一下Arduino計步器的工作原理:
1. 首先,計步器上電后開始校準。
2. 然后在void loop函數中,連續獲取從X、Y和Z軸的數據。
3. 然后,從起點算出總加速度矢量。
4. 加速度矢量是X、Y和Z軸值的平方根(x ^ 2 + y ^ 2 + z ^ 2)。
5. 然后將平均加速度值與閾值進行比較,以計算步數。
6. 如果加速度矢量超過閾值,則增加步數;否則,認為是無效的振動,丟棄該數據。
編程Arduino計步器
在本文的末尾處提供了完整的Arduino計步器代碼。在這里,我們對一些重要代碼片段進行說明。
首先在代碼中包含所有必需的庫。 ADXL335加速度計輸出模擬輸出信號,因此不需要任何庫。
#include 《LiquidCrystal_I2C.h》
復制代碼
之后,定義加速度計連接的Arduino引腳。
const int xpin = A1;
const int ypin = A2;
const int zpin = A3;
復制代碼
定義加速度計的閾值。將該閾值與加速度矢量進行比較,以計算步數。
float threshold = 6;
復制代碼
在void setup()函數中,在開發板上電時調用以下函數對其進行校準。
calibrate();
復制代碼
在void loop()函數中,將讀取100個樣本的X、Y和Z軸值。
for (int a = 0; a 《 100; a++)
{
xaccl[a] = float(analogRead(xpin) - 345);
delay(1);
yaccl[a] = float(analogRead(ypin) - 346);
delay(1);
zaccl[a] = float(analogRead(zpin) - 416);
delay(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 ;
復制代碼
接下來將加速度矢量值的平均值與閾值進行比較。如果平均值大于閾值,則增加步數并置位標志位。
if (totave[a] 》 threshold && flag == 0)
{
steps = steps + 1;
flag = 1; }
復制代碼
如果平均值大于閾值,但標志位置位,則什么也不做。
else if (totave[a] 》 threshold && flag == 1)
{
// Don’t Count
}
復制代碼
如果平均值小于閾值且標志位置位,則將標志位清零。
if (totave[a] 《 threshold && flag == 1)
{
flag = 0;
}
復制代碼
在串口監視器和LCD顯示屏上打印輸出步數。
Serial.println(steps );
lcd.print(“Steps: ”);
lcd.print(steps);
復制代碼
測試Arduino計步器
準備好硬件和代碼后,將Arduino開發板連接到筆記本電腦并上傳代碼。現在,將計步器握在手中,然后一步步走路,它應該會在LCD上顯示步數。有時,計步器非??焖倩蚓徛卣駝訒r,步數也會增加。
編輯:hfy
-
計步器
+關注
關注
4文章
76瀏覽量
19904 -
Arduino
+關注
關注
187文章
6464瀏覽量
186671 -
ADXL335
+關注
關注
1文章
15瀏覽量
10505
發布評論請先 登錄
相關推薦
評論