Cominciamo; leggo i livelli logici sui pin GPIO17 (PTT svxlink) e GPIO22 (PTT Audio raspberry) con un ciclo while. Se lo script rileva il livello logico 1 su uno dei due pin, il GPIO23 viene portato a livello logico 1 (oppure 0, dipende della logica del relè) per un tempo n.
Il pin GPIO23 andrà collegato direttamente all'ingresso di un modulo relè, già pronto, per comodità. È anche possibile usare un relè comandato da un semplice transistor, usando possibilmente un fotoaccoppiatore per preservare i pin gpio. Si tratta di moduli, ad uno o più relè, reperibili sul web. Basta cercare: relè arduino o raspberry.
Questi moduli prevedono semplicemente l'alimentazione e i pin di comando. Per il nostro scopo va bene il modello a cinque volt. Verificate le specifiche prima dell'acquisto. Stessa la tensione per il comando, 5 Volt (vanno bene anche i 3,3 volt GPIO).
Il pin di comando, come detto prima, può avere logica positiva o negativa, dipende dal modello. Imposteremo nello script il livello logico corretto.
Prima di avviare svxlink, e qualsiasi altro script, bisogna settare i pin GPIO nel file /etc/rc.local e renderli attivi all'accensione del raspberry. In questa pagina trovate le righe da inserire nel file /etc/rc.local.
Il GPIO22 viene usato per attivare il ptt degli annunci con l'audio della scheda integrata. Nel nostro caso considerato alla stregua del GPIO17, PTT svxlink.
Il GPIO23 viene usato per attivare la ventola, andrà collegato al pin di comando del relè. Nell'esempio, sotto, ho settato come attivo il livello logico 1 per relè con logica positiva.
Il GPIO23 viene usato per attivare la ventola, andrà collegato al pin di comando del relè. Nell'esempio, sotto, ho settato come attivo il livello logico 1 per relè con logica positiva.
Nella riga for (( C=0; C<=10; C++ )); do segnata in rosso, ho inserito il valore 10 per prova. Essendoci uno sleep 1, nel ciclo while, il timer resterà attivo per dieci secondi dall'ultima attivazione del PTT. Variatelo in base alle vostre necessità.
Questo il codice da inserire nel file fun.sh. Salvatelo nella cartella script, nella home.
- #!/bin/bash
- # Pin gpio impostati all'avvio in rc.local
- while true;
- do
- sleep 1
- ptt_echo=`cat /sys/class/gpio/gpio17/value`
- ptt_ann=`cat /sys/class/gpio/gpio22/value`
- if [ $ptt_echo -eq 1 -o $ptt_ann -eq 1 ]
- then
- for (( C=0; C<=10; C++ )); do
- ptt_echo=`cat /sys/class/gpio/gpio17/value`
- ptt_ann=`cat /sys/class/gpio/gpio22/value`
- sleep 1
- if [ $ptt_echo -eq 1 -o $ptt_ann -eq 1 ]
- then
- C=0
- fi
- echo "N: $C"
- echo 1 > /sys/class/gpio/gpio23/value
- done
- fi
- if [ $ptt_echo -eq 0 -a $ptt_echo -eq 0 ]
- then
- echo 0 > /sys/class/gpio/gpio23/value
- fi
- done
Rendete il file eseguibile con
- chmod +x fun.sh
Avviatelo per verificarne il corretto funzionamento:
Per verificare se è in esecuzione:
Per fermarlo:
- sudo ./fun.sh
Per verificare se è in esecuzione:
- pgrep fun.sh
Per fermarlo:
- kill XXXX dove le x identificano il numero di pid ottenuto con il comando precedente.
Per
avviare lo script, all'accensione del raspberry, inserite nel file
/etc/rc.local, sempre in fondo al file, dopo le righe di
inizializzazione GPIO e prima di exit 0, queste due righe:
- sleep 3
- /home/pi/script/fun.sh
È
possibile far girare la ventola un po più lentamente quando lo script
non attiva il relè, questo per far circolare sempre aria dentro il
contenitore. Basta inserire una resistenza, di adeguata
potenza e valore, in parallelo ai contatti del relè.
Nessun commento:
Posta un commento