Налаштування скетча «Джміль» (версія 1.7)

Налаштування розташовані на початку скетча (файл main.cpp) у вигляді констант. Після зміни значення скетч потрібно заново залити в контролер. Перевіряйте кожну зміну в реальних випробуваннях: параметри зон реакції та фільтрації безпосередньо впливають на безпеку користувача.

1. Зони реакції на перешкоди

ПараметрЗа замовчуваннямОдиницяОпис і вплив
CENTER_ALERT_DISTANCE_MM1050ммВідстань, з якої центральний датчик починає попереджати. Більше — раніше попередження, але більше зайвих спрацювань у вузьких місцях. Менше — менше часу на реакцію. Тримайте більшою за VIBRO_VERY_FAR_BORDER_MM, інакше ритм «дуже далеко» не використовується.
SIDE_ALERT_DISTANCE_MM900ммТе саме для лівого й правого датчиків. Зменште, якщо стіни у вузьких коридорах викликають постійні сигнали.
DIRECTION_GROUP_MARGIN_MM300ммЯкщо кілька датчиків бачать перешкоди в межах цієї різниці від найближчої, їхні мотори вібрують одночасно. Більше — частіше вібрують кілька моторів (менш точний напрямок). Менше — вібрує лише бік найближчої перешкоди.
ALERT_HYSTERESIS_MM80ммЗапас при виході із зони: сигнал вимикається, лише коли перешкода відійшла за межу зони більше ніж на це значення. Більше — стабільніше біля межі, але сигнал зникає пізніше. Менше — можливе «смикання» моторів біля межі зони.

2. Ритм вібрації за відстанню

Головна підказка для користувача — довжина паузи: що ближче перешкода, то коротша пауза. Межі зон мають іти за спаданням: VERY_FAR > FAR > MEDIUM > CLOSE.

ПараметрЗа замовчуваннямОдиницяОпис і вплив
VIBRO_VERY_FAR_BORDER_MM850ммМежа між зонами «дуже далеко» (за цією межею) та «далеко».
VIBRO_FAR_BORDER_MM700ммМежа між зонами «далеко» та «середня відстань».
VIBRO_MEDIUM_BORDER_MM550ммМежа між зонами «середня відстань» та «близько».
VIBRO_CLOSE_BORDER_MM400ммМежа між зонами «близько» та «дуже близько».
PATTERN_VERY_FAR120 / 1200мс (імпульс / пауза)Зона «дуже далеко»: рідкий одиночний імпульс.
PATTERN_FAR120 / 800мс (імпульс / пауза)Зона «далеко»: помітно частіші імпульси.
PATTERN_MEDIUM140 / 450мс (імпульс / пауза)Зона «середня відстань».
PATTERN_CLOSE170 / 180мс (імпульс / пауза)Зона «близько».
PATTERN_VERY_CLOSE300 / 60мс (імпульс / пауза)Зона «дуже близько»: майже безперервна вібрація.

3. Датчики та фільтрація

ПараметрЗа замовчуваннямОдиницяОпис і вплив
SENSOR_TIMING_BUDGET_US50000мксЧас одного вимірювання датчика. Більше — менше шуму й краща робота на сонці та на великих відстанях, але повільніше оновлення. Не має перевищувати SENSOR_CONTINUOUS_PERIOD_MS (50000 мкс = 50 мс).
SENSOR_CONTINUOUS_PERIOD_MS70мсІнтервал між вимірюваннями. Менше — швидша реакція, але більше навантаження на шину I2C і більше споживання. Не менше за час вимірювання (SENSOR_TIMING_BUDGET_US).
SENSOR_MAX_VALID_DISTANCE_MM5000ммПоказання далі за це значення вважаються недійсними. Зазвичай не змінюється.
FILTER_WINDOW3шт.Кількість останніх вимірювань у медіанному фільтрі (непарне число: 3 або 5). Більше — стійкіше до завад, але повільніша реакція.
FILTER_MIN_SAMPLES2шт.Скільки вимірювань підтверджують перешкоду. 2 = два поспіль (затримка ≈ 140 мс). Значення 1 дає найшвидшу реакцію, але одиничний хибний вимір може викликати вібрацію (не рекомендується). Не більше за FILTER_WINDOW.
MAX_BAD_READS3шт.Скільки недійсних вимірювань поспіль потрібно, щоб датчик вважався «порожнім» (перешкоди немає). До цього зберігається попереднє значення.
SENSOR_STALL_MS500мсЯкщо датчик не дав нових даних довше за цей час, він вважається завислим, а його останнє значення більше не враховується.
SENSOR_READ_INTERVAL_MS10мсЯк часто перевіряється готовність нових даних датчиків. Зазвичай не змінюється.
I2C_CLOCK_HZ100000ГцШвидкість шини I2C. 100 кГц надійніше при довгих дротах; 400 кГц швидше, але чутливіше до проводки та завад.

4. Контроль батареї (1S2P)

ПараметрЗа замовчуваннямОдиницяОпис і вплив
BATTERY_DIVIDER_R_TOP_KOHM47кОмВерхній резистор дільника (від «плюса» акумулятора до GPIO34). Має відповідати реально встановленому резистору.
BATTERY_DIVIDER_R_BOTTOM_KOHM100кОмНижній резистор дільника (від GPIO34 до GND).
BATTERY_CALIBRATION_FACTOR1.00—Коефіцієнт калібрування: напруга за мультиметром ÷ напруга в Serial.
BATTERY_LOW_VOLTAGE3.50ВПоріг «низький заряд» (1 пара імпульсів). Напруга одного Li-ion елемента під легким навантаженням. Має бути більшим за BATTERY_CRITICAL_VOLTAGE.
BATTERY_CRITICAL_VOLTAGE3.30ВПоріг «критичний заряд» (2 пари імпульсів). Має бути більшим за BATTERY_CUTOFF_WARNING.
BATTERY_CUTOFF_WARNING3.15ВПоріг «дуже критичний заряд» (3 пари імпульсів): заряджайте негайно. Захист модуля TP4056 відключає акумулятор лише біля 2,4–2,5 В, тому попередження подається значно раніше.
BATTERY_HYSTERESIS_V0.10ВЩоб повернутися на кращий рівень, напруга має піднятися над порогом на це значення. Запобігає «блиманню» попереджень біля порогу.
BATTERY_FILTER_ALPHA0.300–1Згладжування напруги: частка нового вимірювання. Менше — плавніше, але повільніша реакція. При вимірюваннях кожні 5 с значення 0,30 дає усереднення приблизно за 15–20 с.
BATTERY_READ_INTERVAL_MS5000мсЯк часто вимірюється напруга. Вимірювання виконується лише тоді, коли мотори не вібрують.
BATTERY_FIRST_WARNING_DELAY_MS5000мсЧас після старту (або після погіршення рівня заряду) до першого попередження.
LOW_BATTERY_WARNING_INTERVAL_MS60000мсПеріод повторення попередження «низький заряд».
CRITICAL_BATTERY_WARNING_INTERVAL_MS15000мсПеріод повторення попередження «критичний заряд».
VERY_CRITICAL_WARNING_INTERVAL_MS5000мсПеріод повторення попередження «дуже критичний заряд».
LOW_BATTERY_WARNING_PAIRS
CRITICAL_BATTERY_WARNING_PAIRS
VERY_CRITICAL_BATTERY_WARNING_PAIRS
1 / 2 / 3парКількість пар імпульсів для кожного рівня: низький / критичний / дуже критичний.
BATTERY_PAIR_PULSE_ON_MS130мсТривалість одного імпульсу в парі.
BATTERY_PAIR_INNER_OFF_MS110мсПауза між двома імпульсами всередині пари.
BATTERY_PAIR_GAP_MS450мсПауза між парами.
BATTERY_ADC_SAMPLES16шт.Скільки показань АЦП усереднюється за одне вимірювання (між ними пауза BATTERY_ADC_SAMPLE_DELAY_MS = 2 мс). Більше — менше шуму, але довше блокується програма під час вимірювання (≈ 32 мс).

5. Службові сигнали та діагностика

ПараметрЗа замовчуваннямОдиницяОпис і вплив
MOTOR_SELF_TEST_ON_MS180мсТривалість вібрації кожного мотора під час самотесту при старті (порядок: лівий → центральний → правий).
MOTOR_SELF_TEST_OFF_MS150мсПауза між моторами під час самотесту.
SENSOR_ERROR_PULSES9шт.Кількість коротких імпульсів усіма моторами, якщо при старті не запустився хоча б один датчик.
SENSOR_ERROR_ON_MS
SENSOR_ERROR_OFF_MS
120 / 120мсТривалість імпульсу / пауза в сигналі помилки датчиків.
LOG_ALERT_EVENTStruetrue / falseДрукувати в Serial моменти вмикання й вимикання сигналу по кожному датчику (корисно для пошуку хибних спрацювань).
LOG_BATTERYtruetrue / falseДрукувати стан батареї в Serial при кожному вимірюванні.
DISTANCE_PRINT_INTERVAL_MS300мсЯк часто друкувати відстані в Serial Monitor.

6. Апаратна частина (піни та адреси)

Змінюйте ці значення лише тоді, коли змінилась схема підключення.

ПараметрЗа замовчуваннямОдиницяОпис і вплив
I2C_SDA21GPIOЛінія даних I2C (SDA) датчиків.
I2C_SCL22GPIOЛінія тактування I2C (SCL) датчиків.
XSHUT_LEFT
XSHUT_CENTER
XSHUT_RIGHT
25 / 26 / 27GPIOПіни вимкнення (XSHUT) лівого, центрального й правого датчиків; потрібні для призначення унікальних адрес I2C при старті.
MOTOR_LEFT
MOTOR_CENTER
MOTOR_RIGHT
16 / 17 / 18GPIOКеруючі виходи лівого, центрального й правого вібромоторів (на входи PWMA/PWMB драйверів TB6612FNG). При старті самотест іде в порядку лівий → центральний → правий; перевірте, що фізичні мотори вібрують у цьому порядку.
BATTERY_ADC_PIN34GPIOВхід АЦП для напруги акумулятора (середня точка дільника). Використовуйте пін ADC1 (GPIO32–39).
ADDR_LEFT
ADDR_CENTER
ADDR_RIGHT
0x30 / 0x31 / 0x32адреса I2CАдреси I2C, які призначаються датчикам при старті. Змінюйте лише у разі конфлікту з іншими пристроями I2C.
MOTOR_ON
MOTOR_OFF
HIGH / LOWрівеньЛогічні рівні, що вмикають і вимикають мотор. Поміняйте місцями, якщо драйвер працює навпаки.