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

 

Шагомер своими руками на основе 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, акселерометр, шагомер



   Благодарим Вас за интерес к информационному проекту digitrode.ru.
   Если Вы хотите, чтобы интересные и полезные материалы выходили чаще, и было меньше рекламы,
   Вы можее поддержать наш проект, пожертвовав любую сумму на его развитие.


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

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

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