Compare commits

..

No commits in common. "main" and "feat/MultisyncX401S" have entirely different histories.

4 changed files with 10 additions and 180 deletions

Binary file not shown.

View file

@ -1,6 +1,6 @@
# Disco-Kugel und IR Blaster # IR Blaster
http://lounge-ir-disco.n39.eu http://ir-blaster.n39.eu
## Installation und Flashen ## Installation und Flashen
@ -11,80 +11,19 @@ http://lounge-ir-disco.n39.eu
``` ```
2. esphome installieren 2. esphome installieren
```bash ```bash
pip install esphome pip installv esphome
``` ```
3. `secrets.yaml` anlegen: 3. `secrets.yaml` anlegen:
```yaml ```yaml
WifiPassword: "changeme" WifiPassword: "changeme"
OtaPassword: "changeme" OtaPassword: "chamgeme"
``` ```
4. config hochladen 4. config hochladen
```bash ```bash
esphome run config.yaml esphome run config.yaml
``` ```
## Disco-Kugel ## Codes bearbeiten
Jeder Befehl muss mit `#*` anfangen. Das spricht alle Steuerungen im Bus an.
Außerdem muss jeder Befehl mit `\r` enden. Eingestellte Boudrate sind 9600-8-N-1.
### Setup
Folgende Befehle konfigurieren halbwegs sicheres Verhalten der Steuerung.
Da dies ein Industrieprodukt ist kann sie so viel mehr, vorallem schneller, als wir das jemals bräuchten für die Discokugel. Es ist zu empfehlen diese Befehle vor jeder Drehzahländerung zu schicken, jedoch nicht zum stoppen. Zum Stoppen reicht es `#*S1` zu senden.
- Rampenart ':ramp_mode' auf 2 - Jerk-free
- Phasenstrom 'i' auf 25, ca. 0.5A
- Phasenstrom im Stillstand 'r' auf 0 - 0A
- Positionierart 'p' auf 5 - Drehzahlmodus
- Minimalfrequenz 'u' auf 10
- Maximalfrequenz 'o' auf wie schnell die kugel drehen soll
- Beschleunigungsrampe 'b' auf 1
- Bremsrampe 'B' auf 1
- Drehrichtung 'd' auf 0 oder 1
- Wiederholungen 'W' auf 0 - unendlich
- Folgesatz 'N' auf 0, kein folgesatz
- 'A' motor starten
- 'S1' motor mit bremsrampe entschleunigen
Weitere Infos können der Herstellerdoku entnommen werden. [Befehlsreferenz](./Programmierhandbuch_V2.6.pdf) | [Technische / Elektrische Referenz](./SMCI33_Technisches_Handbuch_V2.1.pdf)
### Befehle zum Verändern der Drehzahl
`{}` Platzhalter für `[Steps / s]`
Steuerung hat 16 Microsteps eingestellt, Motoren haben 200 Vollsteps pro Umdrehung.
Umrechnung Drehzahl zu Steps / s.
```
d = 1 / min
{} = (d / 60) * 200 * 16
```
{} Darf kein Komma enthalten beim Befehl absenden
```
#*:ramp_mode2
#*i25
#*r0
#*p5
#*u10
#*o{}
#*b1
#*B1
#*W0
#*N0
#*A
```
### Kugel anhalten
`#*S1` senden
## IR-Blaster
### Codes bearbeiten
1. Debug-Konsole öffnen (http://ir-blaster.n39.eu oder USB Serial) 1. Debug-Konsole öffnen (http://ir-blaster.n39.eu oder USB Serial)
@ -100,7 +39,7 @@ d = 1 / min
* Leiser (0x2FD7887) * Leiser (0x2FD7887)
* On/Off (0x2FD48B7) * On/Off (0x2FD48B7)
### Multisync X401S ## Multisync X401S
* Taste 0 * Taste 0
* Taste 1 * Taste 1
* Taste 2 * Taste 2

Binary file not shown.

View file

@ -1,9 +1,7 @@
esphome: esphome:
name: lounge-ir-disco name: ir-blaster
platform: ESP8266
# https://devices.esphome.io/devices/Sonoff-TH10 board: d1_mini
esp8266:
board: esp01_1m
wifi: wifi:
networks: networks:
@ -40,43 +38,6 @@ time:
- ptbtime2.ptb.de - ptbtime2.ptb.de
- ptbtime3.ptb.de - ptbtime3.ptb.de
# === Sonoff config ===
binary_sensor:
- platform: gpio
pin:
number: GPIO0
mode: INPUT_PULLUP
inverted: True
name: "Button"
on_press:
- switch.toggle: relay
output:
- platform: esp8266_pwm
id: blue_led
pin:
number: GPIO13
inverted: True
switch:
- platform: gpio
name: "Kugel Power"
restore_mode: RESTORE_DEFAULT_OFF
pin: GPIO12
id: relay
on_turn_on:
then:
- delay: 3s # Wait for controller to boot
- script.execute: apply_kugel_rpm
light:
- platform: monochromatic
name: "Blue LED"
restore_mode: RESTORE_DEFAULT_OFF
output: blue_led
# ===== IR config =====
button: button:
- platform: template - platform: template
name: Casio Power Button name: Casio Power Button
@ -187,6 +148,7 @@ button:
wait_time: 16ms wait_time: 16ms
carrier_frequency: 38kHz carrier_frequency: 38kHz
remote_receiver: remote_receiver:
pin: pin:
number: GPIO2 number: GPIO2
@ -200,77 +162,6 @@ remote_transmitter:
# Infrared remotes use a 50% carrier signal # Infrared remotes use a 50% carrier signal
carrier_duty_percent: 50% carrier_duty_percent: 50%
# === 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: sensor:
# Extra sensor to keep track of plug uptime # Extra sensor to keep track of plug uptime
- platform: uptime - platform: uptime