Vi har en Scoreboard på m.nu som visar aktuellt orderläge. Här kan du läsa om hur vi gjort för att automatiskt starta webbläsare i helskärmsläge när vår Raspberry Pi startar.
Vi vill inte att skärmen ska stå på och dra el när vi inte är där, så vi har satt en Rörelsesensor direkt på GPIO-porten. Rörelsesensor drivs med 5V, men lämnar praktiskt nog 3,3V som utsignal, så utsignalen kan kopplas direkt till GPIO-pinne på vår Raspberry Pi.
Så här kopplade vi:
- 5V på GPIO-porten (pinne 2) kopplas till 5V på rörelsesensorn
- GND (pin 6) kopplas till GND
- Rörelsesensorns utsignal till GPIO1 (pin 12).
När rörelse detekteras är utsignalen hög i några sekunder.
Läsa från GPIO-porten
Vi använder mjukvaran WiringPi för att läsa från GPIO-porten. Wiring pi är installerat på din pi om du kör en ny version av Raspbian Jessie
När WiringPi är installerat kan man använda mjukvaran gpio för att interagera med GPIO-porten.
Exempel:
gpio read 1
Som returnerar 1 om GPIO1 är hög och 0 om GPIO1 är låg. På WiringPi finns en bra översikt över vilka pinnar som är vilka, det är minst sagt rörigt
Slå på och av skärmen
Eftersom skärmen är ansluten via HDMI går det att skicka signaler via HDMI-kabeln för att stänga av och slå på skärmen.
Vi skapade ett litet script som löser detta på en mycket enkelt sätt:
nano /home/pi/screen.sh
Lägg sedan in följande i filen:
#!/bin/bash if [ "$1" == 'on' ]; then tvservice -p #Slå på skärmen fbset -depth 8 #Trick för att se till att skärmen uppdateras fbset -depth 16 #Trick för att se till att skärmen uppdateras sudo chvt 6 #Trick för att se till att skärmen uppdateras (Växla till terminalfönster) sudo chvt 2 #Trick för att se till att skärmen uppdateras (Växla till grafiskt fönster) echo 'Switched Screen ON!' fi if [ "$1" == 'off' ]; then tvservice -o #Stäng av skärmen echo 'Switched Screen OFF!' fi
Gör filen körbar:
chmod 700 /home/pi/screen.sh
Nu går det enkelt via scriptet att slå på och av skärmen genom att köra screen.sh med on respektive off som parametrar
Helheten
Nu skapar vi ett script till som läser av GPIO-porten och tänder släcker skärmen med rörelsesensorn som insignal:
nano /home/pi/movement.sh
Innehåll:
#!/bin/bash /home/pi/screen.sh off #Vi börjar med att stänga av skärmen vid uppstart, annars kommer den stå på i onödan counter="0" # Sätter en variabel vi använder i scriptet while true; do #Loopa för evigt if [ `gpio read 1` = "1" ]; then #Om rörelsesensor detekterat rörelse echo "Rörelse detekterad" if [ $counter = 0 ]; then # Om counter-värdet är 0 är skärmen släckt och vi aktiverar den /home/pi/screen.sh on fi counter=1200 # Sätt counter till 1200, vilket kommer innebära att skärmen är på ca 20 minuter. Detta görs varje gång rörelse dekterats så om rörelse detkteras gång på gång kommer skärmen inte att släckas. else # om ingen rörelse detekterats... echo "ingen rörelse" if [ $counter -gt "0" ]; then # om räknarvärdet är större än 0 counter=`expr $counter - 1` #räkna ner med 1 fi if [ $counter = 0 ]; then # om räknarvärdet är 0 har ingen rörelse detekterats på 20 minuter och vi stänger av skärmen /home/pi/screen.sh off fi fi sleep 1 #Vänta en sekund innan vi börjar om. echo "$counter\n" done
Kul att du gillar vår blogg!
Skriv upp dig på vår maillista för att få allt det senaste från m.nu - Nya produkter, kampanjer och mycket mer!
Wohoo! Du är nu med på maillistan!