RisalDash RisalDash

Проект · Носимое · MPU6050

Носимый гаджет, который пищит, когда вы сутулитесь

Сутулятся все; сам за собой этого никто не замечает. MPU6050 за $2 на верхней части спины замечает за вас: меряет угол наклона вперёд по гравитации, даёт пять секунд форы, потом жужжит, пока не выпрямитесь — и ведёт честную статистику, сколько минут вы сегодня реально просидели скрючившись.

ПроектНосимоеMPU6050ESP32
Проект монитора осанки на ESP32: носимый MPU6050 с углом наклона, зуммером и статистикой

Угол — транспортиром служит гравитация

Для осанки не нужен gyro-fusion: при наклоне вперёд проекция гравитации на оси акселерометра смещается, и один atan2 превращает это в градусы от вертикали. Интересное — в логике тренера: порог, grace-таймер (потянуться за кофе — не повод пищать), напоминание и счётчик сутулости:

// Forward lean from the accelerometer alone — gravity is the reference:
lean = atan2f(ax, sqrtf(ay * ay + az * az)) * 57.3f;   // degrees from upright

// The coaching loop: threshold + grace timer + nag + stats
bool over = lean > limit;
if (over && !overSince) overSince = millis();
if (!over) { overSince = 0; buzz = false; }

if (over && millis() - overSince > 5000) {   // 5 s grace — reaching for coffee is fine
  if (!buzz) { warns += 1; evlog->print("Slouching - sit up!"); }
  buzz = true;                               // real: tone(BUZZER_PIN, 2000, 100);
  badMin += tickMinutes;                     // today's slouch clock
}

Дашборд — статистика закрепляет привычку

Зуммер исправляет момент; статистика меняет привычку. Живая шкала угла, бейдж Good/Slouching, минуты сутулости за день, счётчик предупреждений и график тренда — плюс порог как number-виджет: ужесточайте правило по мере прогресса:

dash.layout("Posture", RICON_MOTION);
dash.gauge("Forward lean", &lean, 0, 60, "deg");
dash.badge("Verdict", &state).labels("Good", "Slouching", "-");
dash.stat("Slouch today", &badMin, "min");
dash.stat("Warnings", &warns, "");
dash.chart("Lean trend", &lean, "deg");

dash.layout("Settings", RICON_GAUGE);
dash.number("Threshold", &limit, 5, 40, 1);  // tune the slouch angle live
dash.beginAP("RisalDash-Posture", "12345678");

Пример из библиотеки (examples/04_Templates/PostureMonitor) работает на RisalFakeIMU — его pitch гуляет между хорошей и плохой зоной, так что grace-таймер, писк и счётчик видно до того, как что-то надевать. Общая IMU-песочница (3D-куб, компас, шаги) — готовый шаблон MotionIMU.

Делаем носимым

ДетальЗаметка
ESP32 (или C3 mini)C3 меньше и экономнее
MPU6050I²C, плоско на верх спины / воротник
Активный зуммер или вибромоторвибрация деликатнее в офисе
18650 или малый Li-Po + TP4056см. гайд по батареям

Калибруйтесь раз на старте: усредните секунду показаний сидя прямо и вычтите этот сдвиг — тогда «вертикаль» будет вашей, а не углом крепления сенсора.

Посмотрите работу тренера на фейковом IMU до того, как что-то пришивать.