Merge branch 'master' of https://git.d5o.eu/dejvino/announcement-box
This commit is contained in:
commit
712c827f96
161
README.md
Normal file
161
README.md
Normal file
@ -0,0 +1,161 @@
|
||||
# Announcement Box
|
||||
|
||||
Linux box with a loudspeaker and an emergency light to be used for announcements and notifications.
|
||||
|
||||
## Hardware
|
||||
* SBC with GPIOs and sound output :: OrangePi Zero with an expansion board
|
||||
* PA system
|
||||
* speaker :: 30W, 4 Ohms horn loudspeaker
|
||||
* sound amplifier :: mono 18W sound amplifier
|
||||
* relay module :: 12V low trigger relay
|
||||
* Warning Light system
|
||||
* warning light :: 12V 10W rotary orange warning light
|
||||
* relay module :: 12V low trigger relay
|
||||
|
||||
## Software
|
||||
* Operating System - Linux :: Armbian Bullseye for the OrangePi Zero
|
||||
* PA System
|
||||
* Voice Synthesizer :: Festival / ESpeak
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
### Armbian + OrangePi Zero Installation
|
||||
|
||||
#### Enable analog soundcard
|
||||
```
|
||||
sudo armbian-config
|
||||
# System > Hardware > [*] analog-codec
|
||||
```
|
||||
|
||||
#### Software Dependencies
|
||||
##### OS Packages
|
||||
```bash
|
||||
apt install mplayer espeak-ng
|
||||
```
|
||||
|
||||
##### GPIO toolkit
|
||||
```bash
|
||||
# upstream:
|
||||
#git clone https://github.com/orangepi-xunlong/wiringOP
|
||||
# enhanced:
|
||||
git clone https://github.com/Dejvino/wiringOP
|
||||
cd wiringOP
|
||||
./build clean
|
||||
./build
|
||||
```
|
||||
|
||||
#### Initialize GPIOs
|
||||
```bash
|
||||
# System Activity Indicator
|
||||
PIN_SALIGHT=11
|
||||
gpio mode $PIN_SALIGHT output
|
||||
|
||||
# Emergency Light system
|
||||
PIN_ELIGHT=7
|
||||
gpio mode $PIN_ELIGHT output
|
||||
|
||||
# PA system
|
||||
PIN_PASOUND=5
|
||||
gpio mode $PIN_PASOUND output
|
||||
```
|
||||
|
||||
### PA System
|
||||
#### Text to Speech
|
||||
```bash
|
||||
## Festival
|
||||
# reading
|
||||
...
|
||||
# to file
|
||||
text2wave text.txt > wave.wav
|
||||
|
||||
## ESpeak
|
||||
# voices:
|
||||
ls /usr/lib/arm-linux-gnueabihf/espeak-data/voices/
|
||||
# reading
|
||||
espeak -f text.txt -p 40 -s 160 -v "en-us"
|
||||
# to file
|
||||
espeak -f text.txt -p 40 -s 160 -k15 -g 1 -w wave.wav
|
||||
# using SSML (e.g.: https://www.xml.com/pub/a/2004/10/20/ssml.html)
|
||||
espeak -f ssml.txt -m
|
||||
```
|
||||
|
||||
#### Converting into a low-quality broadcast audio
|
||||
```bash
|
||||
sox infile.wav outfile.wav downsample echo 0.5 1 1 1
|
||||
```
|
||||
|
||||
#### Playing a sound file
|
||||
```bash
|
||||
aplay file.wav
|
||||
mplayer file.mp3
|
||||
```
|
||||
|
||||
### Emergency Light
|
||||
#### Control Script
|
||||
```bash
|
||||
cat /usr/local/bin/emergency-light
|
||||
#!/bin/bash
|
||||
|
||||
PIN_ELIGHT=7
|
||||
|
||||
# init
|
||||
gpio mode $PIN_ELIGHT output
|
||||
|
||||
# command
|
||||
if [[ "$1" == "on" ]]; then
|
||||
gpio write $PIN_ELIGHT 1
|
||||
elif [[ "$1" == "off" ]]; then
|
||||
gpio write $PIN_ELIGHT 0
|
||||
elif [[ "$1" == "read" ]]; then
|
||||
gpio read $PIN_ELIGHT
|
||||
else
|
||||
gpio toggle $PIN_ELIGHT
|
||||
fi
|
||||
```
|
||||
|
||||
### System Activity Light
|
||||
#### System Usage
|
||||
```bash
|
||||
uptime | head -n 1 | cut -f3 -d, | cut -f2 -d:
|
||||
```
|
||||
|
||||
#### Daemon
|
||||
```bash
|
||||
cat /etc/systemd/system/system-activity-light.service
|
||||
[Unit]
|
||||
Description=System Activity Light Daemon
|
||||
|
||||
[Service]
|
||||
ExecStart=/usr/sbin/system-activity-light-daemon
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
```bash
|
||||
cat /usr/sbin/system-activity-light-daemon
|
||||
#!/bin/bash
|
||||
|
||||
DELAY=10000
|
||||
|
||||
while [[ true ]]; do
|
||||
ACTIVITY=2000
|
||||
TOP=`system-usage`
|
||||
if (( $(echo "$TOP > 1.0" | bc -l) )); then
|
||||
ACTIVITY=50
|
||||
elif (( $(echo "$TOP > 0.75" | bc -l) )); then
|
||||
ACTIVITY=100
|
||||
elif (( $(echo "$TOP > 0.5" | bc -l) )); then
|
||||
ACTIVITY=500
|
||||
elif (( $(echo "$TOP > 0.2" | bc -l) )); then
|
||||
ACTIVITY=1000
|
||||
fi
|
||||
echo $TOP
|
||||
system-activity-light blink $ACTIVITY $DELAY
|
||||
done
|
||||
```
|
||||
|
||||
```bash
|
||||
sudo systemctl enable --now system-activity-light.service
|
||||
```
|
||||
|
Loading…
Reference in New Issue
Block a user