diff --git a/pages/gpio.md b/pages/gpio.md index 23be7f1..7273e0f 100644 --- a/pages/gpio.md +++ b/pages/gpio.md @@ -263,3 +263,70 @@ kvmd: - ["#Server 2", "wol_server2|Send Wake-on-LAN"] ``` + +### PWM +
+ :exclamation:Click to view:exclamation: + +The `pwm` driver allows you to use [some GPIO pins](https://pinout.xyz/pinout/pwm) on the Raspberry Pi for PWM. + +Here the small example with servo control: + +1. Add to `/boot/config.txt`: + ``` + dtoverlay=pwm + ``` + +2. Create `/etc/udev/rules.d/99-kvmd-pwm.rules`: + ``` + SUBSYSTEM=="pwm*", ACTION=="add", RUN+="/bin/chgrp -R kvmd /sys%p", RUN+="/bin/chmod -R g=u /sys%p" + SUBSYSTEM=="pwm*", ACTION=="change", ENV{TRIGGER}!="none", RUN+="/bin/chgrp -R kvmd /sys%p", RUN+="/bin/chmod -R g=u /sys%p" + ``` + +3. Connect Servo motor like SG90 PWM connection to RPi GPIO18, +5V and GND to a 5V and GND pin on header: + +4. Add to /etc/kvmd/override.yaml + ``` + kvmd: + gpio: + drivers: + servo1: + type: pwm + pwm_chip: 0 # PWM Chip Number + pwm_period: 20000000 # Servo Motor SG90 Period in nano-seconds + duty_cycle_push: 1500000 # Servo Motor SG90 duty_cycle for pushing button + duty_cycle_release: 1000000 # Servo Motor SG90 duty_cycle for releasing button + scheme: + short_press: + driver: servo1 + pin: 0 # Pin number is the PWM channel number on the PWM Chip + mode: output + switch: false + pulse: + delay: 0.5 + max_delay: 2 + long_press: + driver: servo1 + pin: 0 # Pin number is the PWM channel number on the PWM Chip + mode: output + switch: false + pulse: + delay: 2 + max_delay: 2 + extra_long_press: + driver: servo1 + pin: 0 # Pin number is the PWM channel number on the PWM Chip + mode: output + switch: false + pulse: + delay: 10 + max_delay: 20 + view: + header: + title: Controls + table: + - ["#Servo - Short Press", "short_press|Press"] + - ["#Servo - Long Press", "long_press|Press"] + - ["#Servo - Extra Long Press", "extra_long_press|Press"] + ``` +