1
0
Fork 0

Compare commits

...
Sign in to create a new pull request.

8 commits

Author SHA1 Message Date
subDesTagesMitExtraKaese
ac2694fb41 add SMCI33 documentation 2025-06-18 20:48:48 +02:00
subDesTagesMitExtraKaese
fe9a254ce7 update readme 2025-06-15 05:58:11 +02:00
subDesTagesMitExtraKaese
341f4f767c fix relay config 2025-06-15 05:41:23 +02:00
subDesTagesMitExtraKaese
23b3e5e7b0 add number slider for RPM control 2025-06-15 05:30:18 +02:00
subDesTagesMitExtraKaese
6e18761d9f adept to sonoff TH device 2025-06-15 04:20:17 +02:00
subDesTagesMitExtraKaese
f623398284 update platform syntax 2025-03-03 11:41:13 +01:00
8c823c7c88 README.md aktualisiert
Fix typos
2024-07-29 22:19:44 +02:00
4464b618df Merge pull request 'feat/MultisyncX401S' () from timo/netz39-ir-blaster:feat/MultisyncX401S into main
Reviewed-on: 
2024-07-29 18:23:18 +02:00
4 changed files with 180 additions and 10 deletions

Binary file not shown.

View file

@ -1,6 +1,6 @@
# IR Blaster # Disco-Kugel und IR Blaster
http://ir-blaster.n39.eu http://lounge-ir-disco.n39.eu
## Installation und Flashen ## Installation und Flashen
@ -11,19 +11,80 @@ http://ir-blaster.n39.eu
``` ```
2. esphome installieren 2. esphome installieren
```bash ```bash
pip installv esphome pip install esphome
``` ```
3. `secrets.yaml` anlegen: 3. `secrets.yaml` anlegen:
```yaml ```yaml
WifiPassword: "changeme" WifiPassword: "changeme"
OtaPassword: "chamgeme" OtaPassword: "changeme"
``` ```
4. config hochladen 4. config hochladen
```bash ```bash
esphome run config.yaml esphome run config.yaml
``` ```
## Codes bearbeiten ## Disco-Kugel
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)
@ -39,7 +100,7 @@ http://ir-blaster.n39.eu
* 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,7 +1,9 @@
esphome: esphome:
name: ir-blaster name: lounge-ir-disco
platform: ESP8266
board: d1_mini # https://devices.esphome.io/devices/Sonoff-TH10
esp8266:
board: esp01_1m
wifi: wifi:
networks: networks:
@ -38,6 +40,43 @@ 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
@ -148,7 +187,6 @@ button:
wait_time: 16ms wait_time: 16ms
carrier_frequency: 38kHz carrier_frequency: 38kHz
remote_receiver: remote_receiver:
pin: pin:
number: GPIO2 number: GPIO2
@ -162,6 +200,77 @@ 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