Einstellungen des Sketches „Dschmil“ (Version 1.7)

Die Einstellungen sind Konstanten am Anfang des Sketches (main.cpp). Nach einer Änderung muss der Sketch erneut auf den Controller geladen werden. Prüfen Sie jede Änderung in realen Tests: Die Parameter der Reaktionszonen und der Filterung beeinflussen direkt die Sicherheit des Nutzers.

1. Reaktionszonen für Hindernisse

ParameterStandardwertEinheitBeschreibung und Wirkung
CENTER_ALERT_DISTANCE_MM1050mmEntfernung, ab der der mittlere Sensor warnt. Höher: frühere Warnung, aber mehr unnötige Alarme in engen Räumen. Niedriger: weniger Reaktionszeit. Wert über VIBRO_VERY_FAR_BORDER_MM halten, sonst wird der Rhythmus „sehr weit“ nie verwendet.
SIDE_ALERT_DISTANCE_MM900mmDasselbe für den linken und rechten Sensor. Verringern, wenn Wände in schmalen Gängen ständig Alarme auslösen.
DIRECTION_GROUP_MARGIN_MM300mmSehen mehrere Sensoren Hindernisse innerhalb dieses Abstands zum nächsten, vibrieren ihre Motoren gemeinsam. Höher: öfter mehrere Motoren gleichzeitig (ungenauere Richtung). Niedriger: nur die Seite des nächsten Hindernisses vibriert.
ALERT_HYSTERESIS_MM80mmSpielraum beim Verlassen einer Zone: Das Signal endet erst, wenn sich das Hindernis um mehr als diesen Wert über die Zonengrenze hinaus entfernt hat. Höher: ruhiger an der Grenze, aber das Signal endet später. Niedriger: Die Motoren können an der Zonengrenze „zucken“.

2. Vibrationsrhythmus nach Entfernung

Der wichtigste Hinweis für den Nutzer ist die Pausenlänge: Je näher das Hindernis, desto kürzer die Pause. Die Zonengrenzen müssen absteigend sein: VERY_FAR > FAR > MEDIUM > CLOSE.

ParameterStandardwertEinheitBeschreibung und Wirkung
VIBRO_VERY_FAR_BORDER_MM850mmGrenze zwischen den Zonen „sehr weit“ (jenseits dieser Grenze) und „weit“.
VIBRO_FAR_BORDER_MM700mmGrenze zwischen den Zonen „weit“ und „mittlere Entfernung“.
VIBRO_MEDIUM_BORDER_MM550mmGrenze zwischen den Zonen „mittlere Entfernung“ und „nah“.
VIBRO_CLOSE_BORDER_MM400mmGrenze zwischen den Zonen „nah“ und „sehr nah“.
PATTERN_VERY_FAR120 / 1200ms (Impuls / Pause)Zone „sehr weit“: seltener Einzelimpuls.
PATTERN_FAR120 / 800ms (Impuls / Pause)Zone „weit“: deutlich häufigere Impulse.
PATTERN_MEDIUM140 / 450ms (Impuls / Pause)Zone „mittlere Entfernung“.
PATTERN_CLOSE170 / 180ms (Impuls / Pause)Zone „nah“.
PATTERN_VERY_CLOSE300 / 60ms (Impuls / Pause)Zone „sehr nah“: fast dauerhafte Vibration.

3. Sensoren und Filterung

ParameterStandardwertEinheitBeschreibung und Wirkung
SENSOR_TIMING_BUDGET_US50000µsDauer einer Sensormessung. Höher: weniger Rauschen und bessere Leistung bei Sonnenlicht und größerer Entfernung, aber langsamere Aktualisierung. Darf SENSOR_CONTINUOUS_PERIOD_MS nicht überschreiten (50000 µs = 50 ms).
SENSOR_CONTINUOUS_PERIOD_MS70msIntervall zwischen den Messungen. Niedriger: schnellere Reaktion, aber mehr Last auf dem I2C-Bus und höherer Stromverbrauch. Darf nicht kürzer sein als die Messzeit (SENSOR_TIMING_BUDGET_US).
SENSOR_MAX_VALID_DISTANCE_MM5000mmMesswerte über diesem Wert gelten als ungültig. Wird normalerweise nicht geändert.
FILTER_WINDOW3Stk.Anzahl der letzten Messungen im Median-Filter (ungerade Zahl: 3 oder 5). Höher: robuster gegen Störungen, aber langsamere Reaktion.
FILTER_MIN_SAMPLES2Stk.Wie viele Messungen ein Hindernis bestätigen. 2 = zwei hintereinander (Verzögerung ≈ 140 ms). 1 reagiert am schnellsten, aber eine einzelne Fehlmessung kann Vibration auslösen (nicht empfohlen). Darf FILTER_WINDOW nicht überschreiten.
MAX_BAD_READS3Stk.Wie viele ungültige Messungen in Folge nötig sind, bis der Sensor als „leer“ gilt (kein Hindernis). Bis dahin bleibt der vorherige Wert erhalten.
SENSOR_STALL_MS500msLiefert ein Sensor länger als diese Zeit keine neuen Daten, gilt er als hängend und sein letzter Wert wird nicht mehr verwendet.
SENSOR_READ_INTERVAL_MS10msWie oft die Sensoren auf neue Daten geprüft werden. Wird normalerweise nicht geändert.
I2C_CLOCK_HZ100000HzGeschwindigkeit des I2C-Busses. 100 kHz ist bei langen Leitungen zuverlässiger; 400 kHz ist schneller, aber empfindlicher gegenüber Verkabelung und Störungen.

4. Akkuüberwachung (1S2P)

ParameterStandardwertEinheitBeschreibung und Wirkung
BATTERY_DIVIDER_R_TOP_KOHM47kΩOberer Widerstand des Spannungsteilers (vom Akku-Pluspol zu GPIO34). Muss dem tatsächlich verbauten Widerstand entsprechen.
BATTERY_DIVIDER_R_BOTTOM_KOHM100kΩUnterer Widerstand des Spannungsteilers (von GPIO34 nach GND).
BATTERY_CALIBRATION_FACTOR1.00—Kalibrierfaktor: Multimeter-Spannung ÷ Spannung im Serial-Monitor.
BATTERY_LOW_VOLTAGE3.50VSchwelle „niedriger Ladestand“ (1 Impulspaar). Spannung einer einzelnen Li-Ion-Zelle unter leichter Last. Muss höher sein als BATTERY_CRITICAL_VOLTAGE.
BATTERY_CRITICAL_VOLTAGE3.30VSchwelle „kritischer Ladestand“ (2 Impulspaare). Muss höher sein als BATTERY_CUTOFF_WARNING.
BATTERY_CUTOFF_WARNING3.15VSchwelle „sehr kritischer Ladestand“ (3 Impulspaare): sofort laden. Der Schutz des TP4056-Moduls trennt den Akku erst bei etwa 2,4–2,5 V, daher wird deutlich früher gewarnt.
BATTERY_HYSTERESIS_V0.10VUm auf eine bessere Stufe zurückzukehren, muss die Spannung um diesen Wert über die Schwelle steigen. Verhindert ein „Flackern“ der Warnungen nahe einer Schwelle.
BATTERY_FILTER_ALPHA0.300–1Glättung der Spannung: Anteil der neuen Messung. Niedriger: ruhiger, aber langsamere Reaktion. Bei Messungen alle 5 s mittelt 0,30 über etwa 15–20 s.
BATTERY_READ_INTERVAL_MS5000msWie oft die Spannung gemessen wird. Gemessen wird nur, solange die Motoren nicht vibrieren.
BATTERY_FIRST_WARNING_DELAY_MS5000msZeit nach dem Start (oder nach einer Verschlechterung des Ladestands) bis zur ersten Warnung.
LOW_BATTERY_WARNING_INTERVAL_MS60000msWiederholungsintervall der Warnung „niedriger Ladestand“.
CRITICAL_BATTERY_WARNING_INTERVAL_MS15000msWiederholungsintervall der Warnung „kritischer Ladestand“.
VERY_CRITICAL_WARNING_INTERVAL_MS5000msWiederholungsintervall der Warnung „sehr kritischer Ladestand“.
LOW_BATTERY_WARNING_PAIRS
CRITICAL_BATTERY_WARNING_PAIRS
VERY_CRITICAL_BATTERY_WARNING_PAIRS
1 / 2 / 3PaareAnzahl der Impulspaare je Stufe: niedrig / kritisch / sehr kritisch.
BATTERY_PAIR_PULSE_ON_MS130msDauer eines Impulses innerhalb eines Paares.
BATTERY_PAIR_INNER_OFF_MS110msPause zwischen den beiden Impulsen innerhalb eines Paares.
BATTERY_PAIR_GAP_MS450msPause zwischen den Paaren.
BATTERY_ADC_SAMPLES16Stk.Anzahl der ADC-Messwerte, die pro Messung gemittelt werden (mit einer Pause von BATTERY_ADC_SAMPLE_DELAY_MS = 2 ms dazwischen). Höher: weniger Rauschen, aber das Programm ist während der Messung länger blockiert (≈ 32 ms).

5. Servicesignale und Diagnose

ParameterStandardwertEinheitBeschreibung und Wirkung
MOTOR_SELF_TEST_ON_MS180msVibrationsdauer jedes Motors beim Selbsttest nach dem Start (Reihenfolge: links → Mitte → rechts).
MOTOR_SELF_TEST_OFF_MS150msPause zwischen den Motoren beim Selbsttest.
SENSOR_ERROR_PULSES9Stk.Anzahl kurzer Impulse auf allen Motoren, wenn beim Einschalten mindestens ein Sensor nicht gestartet ist.
SENSOR_ERROR_ON_MS
SENSOR_ERROR_OFF_MS
120 / 120msImpulsdauer / Pause im Fehlersignal der Sensoren.
LOG_ALERT_EVENTStruetrue / falseGibt im Serial-Monitor aus, wann das Signal für den jeweiligen Sensor ein- und ausgeschaltet wird (hilfreich bei der Suche nach Fehlalarmen).
LOG_BATTERYtruetrue / falseGibt den Akkustatus bei jeder Messung im Serial-Monitor aus.
DISTANCE_PRINT_INTERVAL_MS300msWie oft die Entfernungen im Serial-Monitor ausgegeben werden.

6. Hardware (Pins und Adressen)

Diese Werte nur ändern, wenn sich die Verdrahtung geändert hat.

ParameterStandardwertEinheitBeschreibung und Wirkung
I2C_SDA21GPIOI2C-Datenleitung (SDA) der Sensoren.
I2C_SCL22GPIOI2C-Taktleitung (SCL) der Sensoren.
XSHUT_LEFT
XSHUT_CENTER
XSHUT_RIGHT
25 / 26 / 27GPIOShutdown-Pins des linken, mittleren und rechten Sensors; dienen beim Start zur Vergabe eindeutiger I2C-Adressen.
MOTOR_LEFT
MOTOR_CENTER
MOTOR_RIGHT
16 / 17 / 18GPIOSteuerausgänge der linken, mittleren und rechten Vibrationsmotoren (an die Eingänge PWMA/PWMB der TB6612FNG-Treiber). Beim Start läuft der Selbsttest links → Mitte → rechts; prüfen Sie, dass die tatsächlichen Motoren in dieser Reihenfolge vibrieren.
BATTERY_ADC_PIN34GPIOADC-Eingang für die Akkuspannung (Mittelpunkt des Spannungsteilers). Einen ADC1-Pin verwenden (GPIO32–39).
ADDR_LEFT
ADDR_CENTER
ADDR_RIGHT
0x30 / 0x31 / 0x32I2C-AdresseI2C-Adressen, die den Sensoren beim Start zugewiesen werden. Nur ändern, wenn sie mit anderen I2C-Geräten kollidieren.
MOTOR_ON
MOTOR_OFF
HIGH / LOWPegelLogikpegel, die einen Motor ein- bzw. ausschalten. Vertauschen, wenn der Treiber invertiert arbeitet.