цифровая электроника
вычислительная техника
встраиваемые системы

 



Шагомер своими руками на основе Arduino и акселерометра

Автор: Mike(admin) от 30-12-2019, 15:55

Фитнес-браслеты становятся очень популярными в наши дни, они не только подсчитывают шаги, но и отслеживают количество сожженных калорий, отображают частоту сердечных сокращений, показывают время и многое другое. И эти устройства Интернета вещей (IoT) синхронизируются с облаком, так что вы можете легко получить всю историю вашей физической активности на смартфоне.


Шагомер своими руками на основе Arduino и акселерометра

Шагомеры – это устройства, которые реализуют часть функционала фитнес-гаджетов и используются только для подсчета шагов. Итак, в этом уроке мы собираемся создать простой и дешевый шагомер, используя Arduino и акселерометр. Этот шагомер будет подсчитывать количество шагов и отображать их на ЖК-модуле 16x2.


В качестве акселерометра был взят ADXL335. ADXL335 – это трехосевой аналоговый акселерометр, работающий по принципу емкостного измерения. Это небольшой, тонкий, маломощный модуль с поликремниевым поверхностно-микрообработанным датчиком и схемой формирования сигналов. Акселерометр ADXL335 может измерять как статическое, так и динамическое ускорение. Здесь, в этом проекте шагомера на основе Arduino, акселерометр ADXL335 будет действовать как датчик шагомера.


Акселерометр – это устройство, которое может преобразовывать ускорение в любом направлении в соответствующее переменное напряжение. Это достигается за счет использования конденсаторов, так как при движении конденсатор, находящийся внутри акселерометра, также претерпит изменения емкости в зависимости от движения, и поскольку емкость изменяется, можно также получить переменное напряжение.


Акселерометр

Ниже приведены изображения модуля акселерометра с передней и задней стороны.


Акселерометр ADXL335

Его распиновка:


  • Vcc - 5 вольт должен подключаться к этому контакту.
  • X-OUT - этот вывод дает аналоговый выход в направлении х
  • Y-OUT - этот вывод дает аналоговый выход в направлении y
  • Z-OUT - этот вывод дает аналоговый выход в направлении z
  • GND - Земля
  • ST - Этот контакт используется для настройки чувствительности датчика

Принципиальная схема счетчика шагов на основе Arduino акселерометра и Arduino приведена далее.


Шагомер своими руками на основе Arduino и акселерометра

В этой схеме мы связываем Arduino Nano с акселерометром ADXL335. Контакты X, Y и Z акселерометра соединены с аналоговыми контактами (A1, A2 и A3) Arduino Nano. Для взаимодействия ЖК-модулей 16x2 с Arduino мы используем модуль I2C. Контакты SCL и SDA модуля I2C подключены к контактам A5 и A4 Arduino Nano соответственно.


Для быстрого прототипирования можно собрать схему на макетной плате.


Шагомер своими руками на основе Arduino и акселерометра

И после успешного тестирования можно запаять компоненты на печатную плату.


Шагомер своими руками на основе Arduino и акселерометра

Шагомер своими руками на основе Arduino и акселерометра

Но как же работает такой шагомер? Шагомер вычисляет общее количество шагов, предпринятых человеком, используя три составляющих движения: прямое, вертикальное и боковое. Система шагомера использует акселерометр для получения этих значений. Акселерометр постоянно обновляет максимальные и минимальные значения 3-осевого ускорения после каждого определенного набора выборок. Среднее значение этих 3-х осевых значений (макс. + мин.)/2 называется динамическим пороговым уровнем, и это пороговое значение используется для определения того, предпринят ли шаг или нет. Во время работы шагомер может быть в любой ориентации, поэтому шагомер рассчитывает шаги, используя ось, изменение ускорения которой является наибольшим.


Теперь рассмотрим более подробно принцип работы данного шагомера. Сначала шагомер начинает калибровку, как только он включается. Затем в функции void loop он непрерывно получает данные с осей X, Y и Z. После этого он рассчитывает суммарный вектор ускорения от начальной точки. Вектор ускорения - это квадратный корень значений осей X, Y и Z, т.е. (x ^ 2 + y ^ 2 + z ^ 2). Затем он сравнивает средние значения ускорения с пороговыми значениями для подсчета количества шагов. Если вектор ускорения пересекает пороговое значение, то он увеличивает количество шагов; в противном случае он отбрасывает недопустимые вибрации.


Шагомер своими руками на основе Arduino и акселерометра

Полный код шагомера на основе Arduino приведен далее.



#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int xpin = A1;
const int ypin = A2;
const int zpin = A3;
byte p[8] = {
  0x1F,
  0x1F,
  0x1F,
  0x1F,
  0x1F,
  0x1F,
  0x1F,
  0x1F
};
float threshold = 6;
float xval[100] = {0};
float yval[100] = {0};
float zval[100] = {0};
float xavg, yavg, zavg;
int steps, flag = 0;
void setup()
{
  Serial.begin(9600);
  lcd.begin();
  lcd.backlight();
  lcd.clear();
  calibrate();
}
void loop()
{
  for (int w = 0; w < 16; w++) {
    lcd.write(byte(0));
    delay(500);
  }
  int acc = 0;
  float totvect[100] = {0};
  float totave[100] = {0};
  float xaccl[100] = {0};
  float yaccl[100] = {0};
  float zaccl[100] = {0};
  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);
    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]);
    delay(100);
    if (totave[a] > threshold && flag == 0)
    {
      steps = steps + 1;
      flag = 1;
    }
    else if (totave[a] > threshold && flag == 1)
    {
    }
    if (totave[a] < threshold   && flag == 1)
    {
      flag = 0;
    }
    if (steps < 0) {
      steps = 0;
    }
    Serial.println('\n');
    Serial.print("steps: ");
    Serial.println(steps);
    lcd.print("Steps: ");
    lcd.print(steps);
    delay(1000);
    lcd.clear();
  }
  delay(1000);
}
void calibrate()
{
  float sum = 0;
  float sum1 = 0;
  float sum2 = 0;
  for (int i = 0; i < 100; i++) {
    xval[i] = float(analogRead(xpin) - 345);
    sum = xval[i] + sum;
  }
  delay(100);
  xavg = sum / 100.0;
  Serial.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);
  delay(100);
  for (int q = 0; q < 100; q++)
  {
    zval[q] = float(analogRead(zpin) - 416);
    sum2 = zval[q] + sum2;
  }
  zavg = sum2 / 100.0;
  delay(100);
  Serial.println(zavg);
}

Когда ваше оборудование и код будут готовы, подключите Arduino к ноутбуку и загрузите код. Теперь возьмите шагомер в свои руки и начните делать шаг за шагом, на ЖК-дисплее должно отображаться количество шагов. Иногда количество шагов увеличивается, когда шагомер вибрирует очень быстро или очень медленно.


Шагомер своими руками на основе Arduino и акселерометра



© digitrode.ru


Теги: Arduino, акселерометр, шагомер




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий