add number slider for RPM control

This commit is contained in:
subDesTagesMitExtraKaese 2025-06-15 05:30:18 +02:00
commit 23b3e5e7b0

View file

@ -51,12 +51,6 @@ binary_sensor:
name: "Button"
on_press:
- light.toggle: th1x_relay
- platform: status
name: "Status"
switch:
- platform: restart
name: "Restart"
output:
- platform: esp8266_pwm
@ -64,10 +58,9 @@ output:
pin:
number: GPIO13
inverted: True
- platform: gpio
id: relay
pin: GPIO12
id: relay
light:
- platform: monochromatic
@ -75,9 +68,14 @@ light:
restore_mode: RESTORE_DEFAULT_OFF
output: blue_led
- platform: binary
name: "Relay"
name: "Kugel Power"
restore_mode: RESTORE_DEFAULT_OFF
id: th1x_relay
output: relay
on_turn_on:
then:
- delay: 3s # Wait for controller to boot
- script.execute: apply_kugel_rpm
# ===== IR config =====
button:
@ -205,10 +203,74 @@ remote_transmitter:
# === Disco config ====
globals:
- id: current_rpm
type: float
initial_value: '0.0'
number:
- platform: template
name: "Kugel Geschwindigkeit (RPM)"
id: kugel_rpm
min_value: -10
max_value: 10
step: 0.02
lambda: |-
return id(current_rpm);
set_action:
then:
- lambda: |-
id(current_rpm) = x;
id(kugel_rpm).publish_state(x);
- script.execute: apply_kugel_rpm
script:
- id: apply_kugel_rpm
mode: restart
then:
- lambda: |-
float rpm = id(current_rpm);
if (fabs(rpm) < 0.02) {
// Stop if near zero
id(uart_1).write_str("#*S1\r\n");
return;
}
// Calculate speed in steps/s (absolute value), determine direction
int steps_per_sec = (fabs(rpm) / 60.0) * 200 * 16;
int direction = rpm >= 0 ? 0 : 1; // 0 = forward, 1 = backward
char speed_cmd[16];
snprintf(speed_cmd, sizeof(speed_cmd), "#*o%d\r\n", steps_per_sec);
char dir_cmd[10];
snprintf(dir_cmd, sizeof(dir_cmd), "#*d%d\r\n", direction);
id(uart_1).write_str("#*:ramp_mode2\r\n"); // Rampenart ':ramp_mode' auf 2 - Jerk-free
id(uart_1).write_str("#*i25\r\n"); // Phasenstrom 'i' auf 25, ca. 0.5A
id(uart_1).write_str("#*r0\r\n"); // Phasenstrom im Stillstand 'r' auf 0 - 0A
id(uart_1).write_str("#*p5\r\n"); // Positionierart 'p' auf 5 - Drehzahlmodus
id(uart_1).write_str("#*u10\r\n"); // Minimalfrequenz 'u' auf 10
id(uart_1).write_str(speed_cmd); // Maximalfrequenz 'o' auf wie schnell die kugel drehen soll
id(uart_1).write_str("#*b1\r\n"); // Beschleunigungsrampe 'b' auf 1
id(uart_1).write_str("#*B1\r\n"); // Bremsrampe 'B' auf 1
id(uart_1).write_str(dir_cmd); // Drehrichtung 'd' auf 0 oder 1
id(uart_1).write_str("#*W0\r\n"); // Wiederholungen 'W' auf 0 - unendlich
id(uart_1).write_str("#*N0\r\n"); // Folgesatz 'N' auf 0, kein folgesatz
id(uart_1).write_str("#*A\r\n"); // 'A' motor starten
uart:
id: uart_1
tx_pin: GPIO1
rx_pin: GPIO3
baud_rate: 9600
debug:
direction: BOTH
dummy_receiver: false
after:
delimiter: "\n"
sensor:
# Extra sensor to keep track of plug uptime