forked from teuserer/netz39-ir-blaster
Compare commits
8 commits
feat/Multi
...
main
Author | SHA1 | Date | |
---|---|---|---|
|
ac2694fb41 | ||
|
fe9a254ce7 | ||
|
341f4f767c | ||
|
23b3e5e7b0 | ||
|
6e18761d9f | ||
|
f623398284 | ||
8c823c7c88 | |||
4464b618df |
4 changed files with 180 additions and 10 deletions
BIN
Programmierhandbuch_V2.6.pdf
Normal file
BIN
Programmierhandbuch_V2.6.pdf
Normal file
Binary file not shown.
73
README.md
73
README.md
|
@ -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
|
||||||
|
|
BIN
SMCI33_Technisches_Handbuch_V2.1.pdf
Normal file
BIN
SMCI33_Technisches_Handbuch_V2.1.pdf
Normal file
Binary file not shown.
117
config.yaml
117
config.yaml
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue