Roman blinds automation - cordless Select Blinds
Description
if you happen to get the Select Blinds cordless Roman blinds you should have the mechnisim featured in the photos. You can automate it by printing this gearbox that will snap into the mechnisim. I have been successful at driving it with plastic 9g servos after modifying it to be 360. I highly recommand using metal gears which I plan on doing as I already had lost two servos as part of the design proccess as their gears are too fregile. The EC11B Horizontal Rotary Encoder screws in place and aigns with the big-gear's notch. For the electronics I am using wemos d1 mini D6 &D7 for rotary encoder input. D1 for servo input. I tested it with esphome. rotary encoder allows it to calibrate top position by moving to the top until rotary encoder reports no movement. detecting bottom position is solly by distance. However, I am thinking of adding something to measure the tension of the strings to detect when it is handing without any tension. this is what I was testing with ``` sensor: - platform: rotary_encoder id: position_encoder name: "Rotary Encoder" publish_initial_value: true resolution: 4 pin_a: number: D6 inverted: false mode: input: true pullup: true pin_b: number: D7 inverted: false mode: input: true pullup: true - platform: "copy" source_id: position_encoder id: position_encoder_dt name: position encoder dt filters: - heartbeat: 700ms - lambda: |- static float last_value = 0; float change = 0; change = x - last_value; last_value = x; return change; script: - id: calibrate_top then: - servo.write: id: my_servo level: -1 - wait_until: condition: lambda: 'return abs(id(position_encoder_dt).state) > 7;' timeout: 3s - wait_until: condition: lambda: 'return abs(id(position_encoder_dt).state) < 4;' timeout: 60s - sensor.rotary_encoder.set_value: id: position_encoder value: 0 - servo.write: id: my_servo level: 0 number: - platform: template id: low_position name: Low Position optimistic: true step: 1 min_value: -5000 max_value: -300 initial_value: -1300 restore_value: true servo: - id: my_servo auto_detach_time: 85s output: pwm_output transition_length: 0s idle_level: 7.5% min_level: 1.8% max_level: 12% output: - platform: esp8266_pwm id: pwm_output pin: D1 frequency: 50 Hz button: - platform: template name: Calibrate Top id: calibrate_top_button on_press: then: script.execute: calibrate_top - platform: template name: Stop id: stop on_press: then: - servo.write: id: my_servo level: 0 - platform: template name: Open Blind id: open_blind on_press: then: - servo.write: id: my_servo level: -1 - delay: 150ms - wait_until: condition: sensor.in_range: id: position_encoder above: -50 timeout: 65s - wait_until: condition: sensor.in_range: id: position_encoder above: 15 timeout: 1s - servo.write: id: my_servo level: 0 - platform: template name: Close Blind id: close_blind on_press: then: - servo.write: id: my_servo level: 1 - delay: 150ms - wait_until: condition: lambda: 'return id(position_encoder).state < id(low_position).state + 50;' timeout: 55s - wait_until: condition: lambda: 'return id(position_encoder).state < id(low_position).state + 15;' timeout: 500ms - servo.write: id: my_servo level: 0 - platform: template name: one_sec_up id: one_sec_up on_press: then: - servo.write: id: my_servo level: -1 - delay: 1s - servo.write: id: my_servo level: 0 - platform: template name: one_sec_down id: one_sec_down on_press: then: - servo.write: id: my_servo level: 1 - delay: 1s - servo.write: id: my_servo level: 0 - platform: template name: four_sec_up_q id: four_sec_up_q on_press: then: - servo.write: id: my_servo level: -0.1 - delay: 4s - servo.detach: id: my_servo #level: 0 - platform: template name: four_sec_down_q id: four_sec_down_q on_press: then: - servo.write: id: my_servo level: 0.02 - delay: 4s - servo.detach: id: my_servo #level: 0 ```
Statistics
Likes
0
Downloads
0