08.04.2015, 17:17
(Dieser Beitrag wurde zuletzt bearbeitet: 15.04.2015, 11:09 von PsychoMantis.)
Ja, fast. Am Anfang nicht ganz richtig. Die 12-Zündung schaltet nicht das Relais durch, sondern versorgt direkt den Spannungswandler (man braucht ja einen, der aus den 12V die 5V macht, die der RPi braucht). Und sobald der RPi an ist, sind auch seine USB-Ausgänge an (da kommen 5 Volt raus). Und diese 5V lassen das Relais geschlossen. Rest stimmt wie du geschrieben hast.
So weit aber die Theorie. Ich will heute diese Schaltung mal in der Praxis aufbauen.
Nachtrag: Habe das nun in der Praxis getestet: spätestens 5 Sekunden nach dem der RPi mit Strom versorgt wird kommen aus seinem USB die 5 Volt raus. Das ist ja ganz OK. Aber beim Ausschalten gibt es ein Problem: der RPi schaltet seine USB-Anschlüsse aus ca. 3 Sekunden vor dem Abschließen des shutdown. Das Problem müsste man zuerst noch lösen.
Bzw. wie kann ich feststellen, dass der shutdown fertig ist?
Nachtrag2: Habe mal geschaut wie die von mausberry das machen. Die arbeiten mit GPIO-24. Diesen Pin schalten die auf 3,3V und die Schaltung stellt dann wohl fest wann da wieder 0V anliegt. Aber auf 0V wird dieser Pin geschaltet noch bevor der shutdown abgeschlossen ist: gerade getestet - die grüne LED blinkt noch, aber aus den 3,3V werden schon während dessen 0V.
Nachtrag3: Also entweder baut man doch einen fetten Elko oder man baut fürs Relais eine Ausschaltverzögerung.
Nachtrag4: Habe noch etwas nachgedacht. Relais mag ich aufgrund beweglicher Teile nicht. MOSFET ist da schon besser.
Also nehme ich doch 1F Kondensator - er dient als Puffer, falls die Bordspannung nicht sauber ist und gleichzeitig ist es die Ausschaltverzögerung von einigen Sekunden (am Ende beim shutdown). Alles handelsübliche Teile, die man so in seiner Bastelkiste hat. Als Shutdown-Script kann man einfach das von Mausberry klauen. Geht aber bestimmt besser und kürzer.
Nachtrag5: Professionell wäre eigentlich den Baustein NE 555 als Ausschaltverzögerung einzusetzen.
So weit aber die Theorie. Ich will heute diese Schaltung mal in der Praxis aufbauen.
Nachtrag: Habe das nun in der Praxis getestet: spätestens 5 Sekunden nach dem der RPi mit Strom versorgt wird kommen aus seinem USB die 5 Volt raus. Das ist ja ganz OK. Aber beim Ausschalten gibt es ein Problem: der RPi schaltet seine USB-Anschlüsse aus ca. 3 Sekunden vor dem Abschließen des shutdown. Das Problem müsste man zuerst noch lösen.
Bzw. wie kann ich feststellen, dass der shutdown fertig ist?
Nachtrag2: Habe mal geschaut wie die von mausberry das machen. Die arbeiten mit GPIO-24. Diesen Pin schalten die auf 3,3V und die Schaltung stellt dann wohl fest wann da wieder 0V anliegt. Aber auf 0V wird dieser Pin geschaltet noch bevor der shutdown abgeschlossen ist: gerade getestet - die grüne LED blinkt noch, aber aus den 3,3V werden schon während dessen 0V.
Nachtrag3: Also entweder baut man doch einen fetten Elko oder man baut fürs Relais eine Ausschaltverzögerung.
Nachtrag4: Habe noch etwas nachgedacht. Relais mag ich aufgrund beweglicher Teile nicht. MOSFET ist da schon besser.
Also nehme ich doch 1F Kondensator - er dient als Puffer, falls die Bordspannung nicht sauber ist und gleichzeitig ist es die Ausschaltverzögerung von einigen Sekunden (am Ende beim shutdown). Alles handelsübliche Teile, die man so in seiner Bastelkiste hat. Als Shutdown-Script kann man einfach das von Mausberry klauen. Geht aber bestimmt besser und kürzer.
Nachtrag5: Professionell wäre eigentlich den Baustein NE 555 als Ausschaltverzögerung einzusetzen.
Code:
echo '#!/bin/bash
#Verzögerung in Minuten
delay=0
echo "23" > /sys/class/gpio/export
echo "in" > /sys/class/gpio/gpio23/direction
let minute=$delay*60
SD=0
SS=0
SS2=0
while [ 1 = 1 ]; do
power=$(cat /sys/class/gpio/gpio23/value)
uptime=$(</proc/uptime)
uptime=${uptime%%.*}
current=$uptime
if [ $power = 1 ] && [ $SD = 0 ]
then
SD=1
SS=${uptime%%.*}
fi
if [ $power = 1 ] && [ $SD = 1 ]
then
SS2=${uptime%%.*}
fi
if [ "$((uptime - SS))" -gt "$minute" ] && [ $SD = 1 ] && [ $power = 1 ]
then
poweroff
SD=3
fi
if [ "$((uptime - SS2))" -gt '20' ] && [ $SD = 1 ]
then
SD=0
fi
sleep 1
done' > /etc/switch.sh
sudo chmod 777 /etc/switch.sh
sudo sed -i '$ i /etc/switch.sh &' /etc/rc.local
# Diesen Text als setup.sh speichern und dann mit sudo bash setup.sh ausführen