Проект · Носимое · MPU6050
Носимый гаджет, который пищит, когда вы сутулитесь
Сутулятся все; сам за собой этого никто не замечает. MPU6050 за $2 на верхней части спины замечает за вас: меряет угол наклона вперёд по гравитации, даёт пять секунд форы, потом жужжит, пока не выпрямитесь — и ведёт честную статистику, сколько минут вы сегодня реально просидели скрючившись.
Угол — транспортиром служит гравитация
Для осанки не нужен 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 меньше и экономнее |
| MPU6050 | I²C, плоско на верх спины / воротник |
| Активный зуммер или вибромотор | вибрация деликатнее в офисе |
| 18650 или малый Li-Po + TP4056 | см. гайд по батареям |
Калибруйтесь раз на старте: усредните секунду показаний сидя прямо и вычтите этот сдвиг — тогда «вертикаль» будет вашей, а не углом крепления сенсора.
Посмотрите работу тренера на фейковом IMU до того, как что-то пришивать.