Spela ditt eget tema när du går in i rummet med hallon Pi
Har du någonsin velat komma hem till ett personligt välkomnande? Med en Raspberry Pi och några enkla komponenter kan du! I det här enkla projektet använder vi en reed-omkopplare för att utlösa en temtonning när en dörr öppnas. Vi ska använda en Raspberry Pi som regulatorn här, men du kan använda nästan alla andra mikrokontroller $ 5 Microcontrollers: Arduino, Raspberry Pi Zero eller NodeMCU? $ 5 Microcontrollers: Arduino, Raspberry Pi Zero, eller NodeMCU? Det var vanligt att om du ville ha en dator skulle du behöva remortgage ditt hus för att betala för det. Nu kan du få en för en Abraham Lincoln. Läs mer för detta projekt med samma krets. Här är en demo.
Du kommer behöva
Du kommer sannolikt redan att ha alla de delar du behöver för att göra detta utom reed switchen, vilket är ungefär $ 2-3, eller du kan få ett paket med 5 för drygt $ 8 här.
- En Raspberry Pi (någon modell kommer att fungera för detta).
- 1 x 220 ohm motstånd.
- 1 x 1K ohm motstånd.
- 3 x 10K ohm motstånd.
- 1 x magnetomkopplare.
- 1 x LED.
- 2 x tryckknappsbrytare.
- Bakbord.
- Hook-up-kablar.
- Datorhögtalare eller liknande.
Vi använder Raspberry Pi för att spela en sång när rummet är inmatat, och utforma en krets med knappar på vår brödbräda för att aktivera det i en fördröjning och stoppa programmet.
Det här projektet, medan det görs mestadels för skojs skull, täcker grunderna för många applikationer i DIY-hemautomatisering. Hemautomatiseringsguide Med Raspberry Pi och Arduino Hemautomatiseringsguide med Raspberry Pi och Arduino Hemautomatiseringsmarknaden översvämmas med dyra konsumentsystem, inkompatibla med en en annan och dyr att installera. Om du har en Raspberry Pi och en Arduino, kan du i princip uppnå samma sak på ... Läs mer och också DIY hemförsörjning Letar du efter en DIY Home Security System Solution? Prova en av dessa som letar efter en DIY Home Security System Solution? Prova en av dessa I en ålder av digital teknik och alltid ansluten hårdvara bör det sättas upp en koncept för att skapa en alarmformad låda på väggen. Läs mer
Raspberry Pi 3 Modell B Moderkort Raspberry Pi 3 Modell B Moderkort Köp nu på Amazon $ 34.49
Komma igång
Låt oss börja med att göra vår krets. Se till att din Pi är unpowered, och sätt upp din krets så här:
Lysdioden är ansluten till stift 7 på vår pi. De två tryckknappsswitcharna är fästa på stiften 11 och 13 och reed-omkopplaren ansluts till stift 15. Vår kraft går till stift 1 (3v3) och stift 6 (Gnd).
Var noga med att kontrollera att allt är på rätt ställe.
Medan du testar detta projekt kan det bidra till att hålla din svängbrytare framför dig så att du enkelt kan växla på eller av. I detta fall installerades reed-omkopplaren ovanför dörren. När ditt projekt är igång kan du antingen tillfälligt koppla omkopplaren till din dörr med hjälp av tejp eller om du känner dig mer säker kan du fästa det mer permanent för användning i framtida projekt!
Anslut 3,5 mm jackutgången från Pi till ditt högtalarsystem. När allt är satt ihop ska det se ut så här:
Observera att brödbrädet som används här har strömmen rails motsatt till Fritzing-diagrammet ovan.
Nu starta din Pi, och få åtkomst till den med SSH så vi kan komma åt terminalen. Om du inte är säker på hur du gör det här, gör du den här guiden. Ställa in din Raspberry Pi för huvudlös användning med SSH Ställa in din Raspberry Pi för huvudlös användning med SSH Raspberry Pi kan acceptera SSH-kommandon när du är ansluten till ett lokalt nätverk (antingen via Ethernet eller Wi-Fi), så att du enkelt kan konfigurera den. Fördelarna med SSH går utöver att störa den dagliga skärningen ... Läs mer kan hjälpa dig. Om du använder din Raspberry Pi med en bildskärm, mus och tangentbord, hoppa över det här steget och öppna terminalen.
Innan du börjar, är det värt att kontrollera om du är uppdaterad. Typ sudo apt-get uppdatering
in i terminalen.
Nu kan vi fortsätta att få vår Pi att prata med vår krets.
Testa vår inställning
Till att börja med kan vi kolla vår krets med ett enkelt program. Om du är säker på att du har kopplat upp allt så långt kan du hoppa över det här steget, men jag rekommenderar det eftersom det kan spara huvudvärk senare.
Om du aldrig har programmerat i Python tidigare och känner dig lite avskräckt, finns det en mängd bra webbplatser De 5 bästa hemsidorna för att lära dig Python Programmering De 5 bästa webbplatserna för att lära dig Python Programmering Vill du lära dig Python programmering? Här är de bästa sätten att lära sig Python online, varav många är helt gratis. Läs mer som kan hjälpa dig att komma igång.
I terminalen skapar du ett nytt skript:
nano test.py
När du är öppen lägger du till den här koden i filen och trycker på Ctrl-C för att avsluta, efter dialogrutan Spara:
#Denna kod skrevs för en artikel på www.MakeUseOf.com av Ian Buckley. importera RPi.GPIO som GPIO importtid GPIO.setwarnings (False) GPIO.setmode (GPIO.BOARD) GPIO.setup (7, GPIO.OUT) GPIO.setup (11, GPIO.IN) GPIO.setup (13, GPIO. IN) GPIO.setup (15, GPIO.IN) medan True: GPIO.output (7, GPIO.HIGH) om (GPIO.input (11) == 1): print ("Knapp på GPIO 11") time.sleep (1) om (GPIO.input (13) == 1): print ("Knapp på GPIO 13") time.sleep (1) om (GPIO.input (15) == 1): print 15 ") time.sleep (1) GPIO.cleanup ()
Denna kod läser värdet på knapparna och skriver ut till skärmen när de ändras. De två tryckknapparna har dragmotstånd, så de rapporterar HÖG när de trycks in. Rörmagnetomkopplaren rapporterar HIGH när den medföljande magneten är nära.
Kör programmet:
python test.py
Du ska se LED-lampan och en rapport till skärmen när du trycker på dina två knappar och dra bort magneten från din reed-brytare. Om du inte får feedback när du trycker på knappar, kontrollera din krets igen och se till att allt är anslutet som det borde vara. När du är klar med testet trycker du på CTRL-C för att stoppa programmet.
Nu kan vi sätta ihop ett enkelt program för att ställa in, utlös och återställ vår dörrgivare. Vi kommer att gå över koden i delar och förklara kortfattat vad varje del gör, men om du vill se hela koden bläddra ner för att se den presenteras i sin helhet.
Vi måste börja med att importera några moduler:
importera Rpi.GPIO som GPIO import pygame.mixer importtid
Vi kommer att använda pygame modul för att spela vår musik. Det kommer som standard med Raspbian Jessie och är ett bra bibliotek för allt du behöver för att göra Python-spel och många andra fantastiska projekt. Hur man bygger en hallon Pi Twitter Bot Hur man bygger en hallon Pi Twitter Bot Twitter är världens största förråd av korta meddelanden från människor som inte har något att säga - och nu kan du också bidra till det episka projektet med en automatiserad Twitter-bot som drivs av din hallon ... Läs mer .
Vi ska använda en variabel som heter aktiva för att bestämma om vårt system är aktivt eller inte. Låt definiera ett par funktioner som kommer att göra detta för oss:
def activeSetup (): global aktiv aktiv = 0 print ("Currently not Active") def activeState (): global aktiv om aktiv == 1: aktiv = 0 GPIO.output (7, GPIO.LOW) ") elif active == 0: print (" Aktiverar om 10 sekunder ") för x inom intervallet (0,10): GPIO.output (7, GPIO.HIGH) time.sleep (0.5) GPIO.output (7, GPIO .LOW) time.sleep (0.5) active = 1 GPIO.output (7, GPIO.HIGH) print ("Currently Active") annat: returnera
Den första funktionen här skapar en variabel som heter aktiva, och ställer in det på 0. Om det aktiva tillståndet är ett numeriskt värde innebär det att om du planerar att senare skala upp ditt program för att ha olika aktiva tillstånd kan du räkna dem i enlighet med det. Även om det kanske inte är den bästa Python programmeringen i världen, kommer det mer än tillräckligt för projektet.
Den andra funktionen när den kallas kontrollerar om systemet är aktivt (eller aktiv == 1). Om det är så ställer det systemet in för att inte vara aktivt (aktiv == 0), stänger av lysdioden och skrivs ut till konsolen. Om det inte är det ger det dig en 10 sekunders nedräkning för att lämna rummet där lampan blinkar, innan du fortsätter att visa att systemet är aktivt.
Nu kan vi definiera en funktion som kommer att se vår reed magnet switch:
def watchDoor (): Global playing playing = False while True: om aktiv == 1 och GPIO.input (15) == 1 och spelar == False: playing = True pygame.mixer.music.play () om GPIO.input (13) == 1: Skriv ut ("Stoppknappen pressad: Avslutande") pygame.mixer.music.stop () bryt om GPIO.input (11) == 1: activeState () time.sleep (0.5)
Vi skapar en annan variabel här kallad spelar - det här är helt enkelt för att stoppa programmet som försöker börja spela upprepade gånger när strömbrytaren utlöses.
Inuti stundslingan startar den första if-uppgiften musiken (som vi inte har någon av ännu, men inte oroa dig, det kommer). Det låter bara musiken starta om systemet är aktivt, omkopplaren är öppen, och den spelar inte upp.
Den andra om uttalandet är för vår exitknapp. Om den här knappen trycks ner stoppar musiken och programmet avslutas.
Den tredje om uppgiften är att byta om systemet är aktivt eller inte. De time.sleep funktionen här är att förhindra att flera knappar läses när den trycks in.
Nu är det dags att ställa upp Pi-stiften.
GPIO.setmode (GPIO.BOARD) GPIO.setup (7, GPIO.OUT, initial = GPIO.LOW) GPIO.setup (11, GPIO.IN) GPIO.setup (13, GPIO.IN) GPIO.setup (15, GPIO.IN)
Om du har gjort några experiment med Pi innan det borde vara bekant för dig. De initial = GPIO.LOW argumentet i stift 7: s inställning sätter den till låg så snart den initialiseras.
Nu kan vi ringa vår funktion som gör att systemet inte är aktivt när programmet startar.
activeSetup ()
Music Maestro!
Vid denna tidpunkt bör vi börja tänka på musiken att spela. Du kan välja vilken musikfil du vill, men vi ska välja något tillgängligt för alla för tillfället. Om du tittar på YouTube är du förmodligen redan bekant med Kevin MacLeods musik. Låt ladda ner en fantastisk melodi av honom som heter “One-eyed Maestro”. Detta, tillsammans med mycket av musiken på hans webbplats, är licensierad under Creative Commons, och det finns många bra skäl. Vad är Creative Commons, och ska du använda den? Vad är Creative Commons, och ska du använda det? Creative Commons är en uppsättning licenser som automatiskt ger dig tillåtelse att göra olika saker, till exempel återanvända och distribuera innehållet. Låt oss ta reda på mer om det och hur du använder det. Läs mer för att använda innehåll med dessa licenser för dina projekt.
Tillbaka i vår kod måste vi starta Pygame mixern och ladda vår melodi.
pygame.mixer.init (44100, -16,2,1024) pygame.mixer.music.set_volume (1.0) name = "One-eyed Maestro.mp3" pygame.mixer.music.load (namn) print ("Loaded track - "+ str (namn))
Den första raden i detta block initierar pygame mixer. Det sista argumentet i parenteserna är bufferten som styr latensen i vilken ljudet spelas. Om du upplever illa uppspelning senare när musiken spelas, försök att öka detta nummer till 4096. Inställningarna eftersom de fungerar utan problem på Pi 3.
Om du hämtade din musikfil i en annan katalog till din door.py program måste du ge hela sökvägen inuti parenteserna när du definierar namnsvariabeln.
Nu är allt som finns kvar att sätta upp en slinga som väntar på oss att antingen ställa in programmet aktivt eller avsluta det.
medan True: om (GPIO.input (13) == 1): print ("Stoppknapp tryckt: Avslutande") pygame.mixer.music.stop () break if (GPIO.input (11) == 1): activeState () time.sleep (0.5) om (aktiv == 1): watchDoor () bryta GPIO.cleanup ()
Denna stundslinga väntar på en inmatning från endera knappen och avslutar eller ändrar tillståndet till att fungera i enlighet med detta. Om tillståndet för aktiv blir 1, då watchDoor Funktionen som vi definierade heter kallas och nästa gång dörren öppnar kommer vår melodi att spelas. Vi ringer också GPIO.cleanup () att återställa våra tappar vid utgången, vilket i allmänhet är en bra övning för all programmering på Raspberry Pi.
Det är allt vi behöver för att få detta projekt igång, här är koden i sin helhet:
importera RPi.GPIO som GPIO import pygame.mixer importtid def activeSetup (): global aktiv aktiv = 0 skriv ut ("Currently not Active") def activeState (): global aktiv om aktiv == 1: aktiv = 0 GPIO.output ( 7, GPIO.LOW) print ("Currently not Active") elif active == 0: print ("Aktiverar om 10 sekunder") för x inom intervallet (0,10): GPIO.output (7, GPIO.HIGH) tid .sleep (0.5) GPIO.output (7, GPIO.LOW) time.sleep (0.5) active = 1 GPIO.output (7, GPIO.HIGH) print ("Currently Active") annat: return def watchDoor (): global spelar spelar = False while True: om aktiv == 1 och GPIO.input (15) == 1 och spelar == False: playing = True pygame.mixer.music.play () om GPIO.input (13) == 1 : print ("Stoppknapp tryckt: Avslutande") pygame.mixer.music.stop () paus om GPIO.input (11) == 1: activeState () time.sleep (0.5) GPIO.setmode (GPIO.BOARD) GPIO .setup (7, GPIO.OUT, initial = GPIO.LOW) GPIO.setup (11, GPIO.IN) GPIO.setup (13, GPIO.IN) GPIO.setup (15, GPIO.IN) activeSetup () pygame. mixer.init (44100, -16,2,1024) pygame.mixer.music.set_volume (1.0) name = "One-eye d Maestro.mp3 "pygame.mixer.music.load (namn) print (" Loaded track - "+ str (namn)) medan True: om (GPIO.input (13) == 1): print : Avsluta ") pygame.mixer.music.stop () break if (GPIO.input (11) == 1): activeState () time.sleep (0.5) om (aktiv == 1): watchDoor () break GPIO. städa()
Om du rullade ner här för att ta tag i hela koden direkt, kom ihåg att du fortfarande behöver ladda ner musiken på din Pi för att den ska fungera!
Nu borde du ha ett fungerande välkommen hemtema! Fäst din svängbrytare till din dörr och prova den. Pinsamt dans är valfritt men rekommenderat.
Detta projekt täckte grunderna för många former av hemövervakning, säkerhet och automation, och det var förhoppningsvis roligt också!
Nu när du har kommit så långt, varför stanna där? Du kan lägga till fler spår och få programmet att välja ett slumpmässigt ur en lista. Du kan lägga till ett relä Komma igång med GPIO På en Raspberry Pi Komma igång med GPIO På en Raspberry Pi Om du, trots att Arduino var cool, vänta bara tills du tar händerna på en Raspberry Pi - dessa saker är fantastiska. Förutom att vara en fullt fungerande dator, har de också en ... Läs mer och få andra objekt att utlösas vid inmatning. Om du har ett hemmabiosystem, varför inte ha en temansång för varje rum?
Kommer du att utforma ditt eget personliga välkomna hem meddelande? Har du varit uppfinningsrik med reedbrytare i ditt hem på andra sätt? Om så är fallet, lämna en kommentar om vad du planerar eller redan har gjort i kommentarfältet nedan!
Utforska mer om: Hemautomatisering, Raspberry Pi.