Spill din egen tema melodi når du går inn i rommet med Raspberry Pi

Spill din egen tema melodi når du går inn i rommet med Raspberry Pi / DIY

Har du noen gang ønsket å komme hjem til en personlig velkomst? Med en Raspberry Pi og noen få enkle komponenter, kan du! I dette enkle prosjektet bruker vi en reed-bryter for å utløse en melodi når en dør åpnes. Vi skal bruke en Raspberry Pi som kontrolleren her, selv om du kan bruke nesten alle andre mikrokontroller $ 5 Microcontrollers: Arduino, Raspberry Pi Zero, eller NodeMCU? $ 5 Microcontrollers: Arduino, Raspberry Pi Zero, eller NodeMCU? Det pleide å være tilfelle at hvis du ønsket å få en datamaskin, ville du måtte remortgage huset ditt for å betale for det. Nå kan du få en til en Abraham Lincoln. Les mer for dette prosjektet ved hjelp av samme krets. Her er en demonstrasjon.

Du vil trenge

Du vil sannsynligvis allerede eie alle delene du trenger for å gjøre dette unntatt reed-bryteren, som er rundt $ 2-3, eller du kan få en pakke på 5 for litt over $ 8 her.

  • En Raspberry Pi (noen modell vil fungere for dette).
  • 1 x 220 ohm motstand.
  • 1 x 1K ohm motstand.
  • 3 x 10K ohm motstand.
  • 1 x magnetisk svingbryter.
  • 1 x LED.
  • 2 x trykknappbryter.
  • bread~~POS=TRUNC.
  • Hook-up kabler.
  • Datahøyttaler eller lignende.

Vi bruker Raspberry Pi til å spille en sang når rommet er inntatt, og designe en krets med knapper på brødbrettet for å aktivere det i en forsinkelse, og stoppe programmet.

Dette prosjektet, mens det blir gjort for det meste for moro, dekker det grunnleggende for mange bruksområder i DIY hjemmeautomatisering. Hjemmautomatiseringsguide Med Raspberry Pi og Arduino Hjemmautomatiseringsguide Med Raspberry Pi og Arduino Hjemmautomatiseringsmarkedet oversvømmes med dyre forbrukersystemer, som er uforenlig med en en annen og kostbar å installere. Hvis du har en Raspberry Pi og en Arduino, kan du i utgangspunktet oppnå det samme ved ... Les mer og også DIY hjemme sikkerhet Leter du etter en DIY Home Security System Solution? Prøv en av disse som ser etter en DIY Home Security System Solution? Prøv en av disse I en alder av digital teknologi og alltid tilkoblet maskinvare, bør du sette opp en alarmformet boks på veggen for å sette opp et hjem sikkerhetssystem. Les mer

Hindbær Pi 3 Modell B Hovedkort Hindbær Pi 3 Modell B Hovedkort Kjøp nå på Amazon $ 34.49

Starter

La oss begynne med å lage vår krets. Sørg for at Pi er unpowered, og sett opp krets slik:

Lysdioden er koblet til pin 7 på vår pi. De to trykknappbryterne er festet til pinnene 11 og 13, og reedbryteren kobles til pin 15. Strømmen går til pin 1 (3v3) og pin 6 (Gnd).

Husk å sjekke alt er på akkurat det rette stedet.

Mens du tester dette prosjektet, kan det bidra til å holde reed-bryteren foran deg, slik at du enkelt kan slå den på eller av. I dette tilfellet var reed-bryteren allerede installert over døren. Når prosjektet er oppe, kan du enten midlertidig feste bryteren til døren din med tape, eller hvis du føler deg tryggere, kan du legge den til permanent ved bruk i fremtidige prosjekter!

Koble 3,5 mm jackutgangen på Pi til høyttalersystemet. Når alt er satt sammen, bør det se slik ut:

Legg merke til at brødbrettet som brukes her, har strømmen til den andre veien til Fritzing-diagrammet ovenfor.

Nå koble opp Pi, og få tilgang til den ved hjelp av SSH, slik at vi får tilgang til terminalen. Hvis du ikke er sikker på hvordan du gjør dette, er denne veiledningen Sette opp Raspberry Pi For Headless Bruk Med SSH Sette opp Raspberry Pi For Headless Bruk Med SSH Raspberry Pi kan godta SSH-kommandoer når de er koblet til et lokalt nettverk (enten via Ethernet eller Wi-Fi), slik at du enkelt kan konfigurere den. Fordelene med SSH går utover å forstyrre den daglige screeningen ... Les mer kan hjelpe deg. Hvis du bruker Raspberry Pi med en skjerm, mus og tastatur, hopper du over dette trinnet og åpner terminalen.

Før du begynner, er det verdt å sjekke om du er oppdatert. Type sudo apt-get oppdatering inn i terminalen.

Nå kan vi fortsette å få vår Pi å snakke med vår krets.

Testing vår oppsett

For å begynne, la oss sjekke vår krets ved hjelp av et enkelt program. Hvis du er sikker på at du har koblet alt opp til høyre så langt, kan du hoppe over dette trinnet, selv om jeg vil anbefale det som det kan redde hodepine senere.

Hvis du aldri har programmert i Python før, og føler deg litt skremt, er det en rekke flotte nettsteder De 5 beste nettstedene å lære Python programmering De 5 beste nettstedene å lære Python programmering Ønsker du å lære Python programmering? Her er de beste måtene å lære Python på nettet, hvorav mange er helt gratis. Les mer som kan hjelpe deg med å komme i gang.

I terminalen lager du et nytt skript:

nano test.py

Når du er åpen, legg til denne koden til filen, og trykk Ctrl-C for å avslutte, etter å lagre dialogen:

# Denne koden ble skrevet for en artikkel på www.MakeUseOf.com av Ian Buckley. importere 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) mens True: GPIO.output (7, GPIO.HIGH) hvis (GPIO.input (11) == 1): print ("Knapp på GPIO 11") time.sleep (1) hvis (GPIO.input (13) == 1): skriv ut ("Knapp på GPIO 13") time.sleep (1) hvis (GPIO.input (15) == 1): print 15 ") time.sleep (1) GPIO.cleanup () 

Denne koden leser verdien av knappene og skriver ut til skjermen når de endres. De to trykknappene har trekkmotstand, slik at de rapporterer høyt når de trykkes. Reed magnetbryteren rapporterer HØY når den tilhørende magneten er nær.

Kjør programmet:

python test.py

Du bør se LED-lampen og en rapport til skjermen når du trykker på de to knappene og trekker magneten vekk fra reed-bryteren. Hvis du ikke får tilbakemelding når du trykker på knapper, kontroller du kretsen igjen og sørg for at alt er koblet som det skal være. Når du er ferdig med testing, trykker du på CTRL-C å stoppe programmet.

Nå kan vi sette sammen et enkelt program for å sette, utløse og tilbakestille vår dørføler. Vi vil gå over koden i deler og forklare kort hva hver del gjør, men hvis du vil se hele koden, rull ned for å se den presenteres i sin helhet.

Vi må begynne med å importere noen moduler:

importer Rpi.GPIO som GPIO import pygame.mixer importtid 

Vi skal bruke pygame modul for å spille av vår musikk. Det kommer som standard med Raspbian Jessie, og er et flott bibliotek for alt du trenger for å lage Python-spill og mange andre fantastiske prosjekter. Hvordan bygge en Raspberry Pi Twitter Bot. Hvordan bygge en Raspberry Pi Twitter Bot Twitter er verdens største lager av kort meldinger fra folk som ikke har noe å si - og nå kan du også bidra til det episke prosjektet med en automatisert Twitter-bot, drevet av din Raspberry ... Les mer .

Vi skal bruke en variabel som heter aktiv å avgjøre om systemet vårt er aktivt eller ikke. La definere et par funksjoner som vil gjøre dette for oss:

def activeSetup (): global aktiv aktiv = 0 utskrift ("For øyeblikket ikke aktiv") def activeState (): global aktiv hvis aktiv == 1: aktiv = 0 GPIO.output (7, GPIO.LOW) ") elif active == 0: print (" Aktivering i 10 sekunder ") for x i rekkevidde (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 ("For øyeblikket aktiv") ellers: tilbake 

Den første funksjonen oppretter en variabel som heter aktiv, og setter den til 0. Å gi den aktive tilstanden en numerisk verdi betyr at hvis du planlegger å senere skala opp programmet ditt for å ha forskjellige aktive stater, kan du nummerere dem tilsvarende. Selv om det kanskje ikke er den beste Python programmeringen i verden, vil det mer enn nok for dette prosjektet.

Den andre funksjonen når kalt sjekker om systemet er aktivt (eller aktiv == 1). Hvis det er, setter det systemet til ikke aktivt (aktiv == 0), slår av lysdioden og skriver ut til konsollen. Hvis det ikke er det, gir det deg en 10 sekunders nedtelling for å forlate rommet der LED-lampen blinker, før du fortsetter å vise at systemet er aktivt.

Nå kan vi definere en funksjon som vil se vår Reed Magnet Switch:

def watchDoor (): global playing playing = False while True: hvis aktiv == 1 og GPIO.input (15) == 1 og spiller == False: playing = True pygame.mixer.music.play () hvis GPIO.input (13) == 1: utskrift ("Stopp knappen trykket: Avslutter") pygame.mixer.music.stop () pause hvis GPIO.input (11) == 1: activeState () time.sleep (0.5) 

Vi oppretter en annen variabel her kalt spiller - dette er bare for å stoppe programmet som prøver å begynne å spille flere ganger når bryteren utløses.

Inne i mensløkken starter den første hvis setningen musikken (som vi ikke har noe av ennå, men ikke bekymre deg, det kommer). Det lar kun musikken starte hvis systemet er aktivt, reed-bryteren er åpen, og den spiller ikke allerede.

Den andre hvis setningen er for utgangsknappen vår. Hvis denne knappen trykkes, stopper musikken og programmet avsluttes.

Den tredje om setningen er å bytte om systemet er aktivt eller ikke. De time.sleep funksjonen her er å forhindre at flere knapper leses når den trykkes.

Nå er det på tide å sette opp Pi pins.

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) 

Hvis du har gjort noen eksperimenter med Pi før dette burde være kjent for deg. De initial = GPIO.LOW argumentet i pin 7s oppsett setter det til lav så snart det initialiseres.

Nå kan vi ringe vår funksjon som vil sette systemet til å ikke være aktivt når programmet starter.

activeSetup () 

Music Maestro!

På dette tidspunktet bør vi begynne å tenke på musikken til å spille. Du kan velge hvilken musikkfil du ønsker, men vi skal velge noe som er tilgjengelig for alle for nå. Hvis du ser på YouTube, er du sannsynligvis allerede kjent med Kevin MacLeods musikk. Lar laste ned en fantastisk melodi av ham som heter “One-eyed Maestro”. Dette, sammen med mye av musikken på nettstedet hans, er lisensiert under Creative Commons, og det er mange gode grunner. Hva er Creative Commons, og bør du bruke det? Hva er Creative Commons, og bør du bruke det? Creative Commons er et sett med lisenser som automatisk gir deg tillatelse til å gjøre forskjellige ting, for eksempel gjenbruk og distribusjon av innholdet. La oss finne ut mer om det og hvordan du bruker det. Les mer for å bruke innholdet med disse lisensene for prosjektene dine.

Tilbake i vår kode må vi starte Pygame-mikseren og laste inn 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 (navn) print ("Lastet spor - "+ str (navn)) 

Den første linjen i denne blokken initierer pygame mikser. Det siste argumentet i parentes er bufferen som styrer latensen der lyden spilles. Hvis du opplever urolig avspilling senere når musikken din spiller, kan du prøve å øke dette nummeret til 4096. Innstillingene som de jobber uten problem på Pi 3.

Hvis du lastet ned musikkfilen din til en annen katalog til din door.py program, må du gi hele banen i parentes når du definerer navnetvariabelen.

Nå er alt som er igjen å gjøre, satt opp en loop som venter på oss enten å sette programmet aktivt eller avslutte det.

mens sant: hvis (GPIO.input (13) == 1): skriv ut ("Stopp knappen trykket: Avslutt") pygame.mixer.music.stop () pause hvis (GPIO.input (11) == 1): activeState () time.sleep (0.5) hvis (aktiv == 1): watchDoor () pause GPIO.cleanup () 

Denne mens sløyfen venter på et innspill fra en av knappene, og avslutter eller endrer tilstanden til aktiv tilsvarende. Hvis tilstanden for aktiv blir 1, så er den watchDoor funksjonen vi definerte tidligere blir kalt og neste gang døren åpner vår melodi vil spille. Vi ringer også GPIO.cleanup () å tilbakestille tappene våre på utgang, som generelt er en god praksis for all programmering på Raspberry Pi.

Det er alt vi trenger for å få dette prosjektet i gang, her er koden i sin helhet:

importere RPi.GPIO som GPIO import pygame.mixer importtid def activeSetup (): global aktiv aktiv = 0 utskrift ("For tiden ikke aktiv") def activeState (): global aktiv hvis aktiv == 1: aktiv = 0 GPIO.output ( 7, GPIO.LOW) utskrift ("For øyeblikket ikke aktiv") elif aktiv == 0: utskrift ("Aktivering i 10 sekunder") for x i rekkevidde (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 ("For øyeblikket aktiv") ellers: return def watchDoor (): global spiller spill = False mens True: hvis aktiv == 1 og GPIO.input (15) == 1 og spiller == False: playing = True pygame.mixer.music.play () hvis GPIO.input (13) == 1 : print ("Stopp knappen trykket: Avslutt") pygame.mixer.music.stop () pause hvis GPIO.input (11) == 1: activeState () time.sleep (0.5) GPIO.setmode (GPIO.BOARD) GPIO .settup (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 (name) print (" Lastet spor - "+ str (navn)) mens True: hvis (GPIO.input (13) == 1): print : Exiting ") pygame.mixer.music.stop () pause hvis (GPIO.input (11) == 1): activeState () time.sleep (0.5) hvis (aktiv == 1): watchDoor () pause GPIO. rydde opp() 

Hvis du rullet ned her for å ta tak i den komplette koden med en gang, husk at du fortsatt trenger å laste ned musikken til Pi for at den skal fungere!

Nå bør du ha en fungerende velkomst hjemme tema! Fest reed-bryteren til døren, og prøv den ut. Flauende dans er valgfritt, men anbefalt.

Dette prosjektet dekket grunnleggende for mange former for hjemmeovervåkning, sikkerhet og automatisering, og forhåpentligvis var det moro også!

Nå som du har kommet så langt, hvorfor stoppe der? Du kan legge til flere spor og få programmet til å velge en tilfeldig fra en liste. Du kan legge til et relé Komme i gang med GPIO På en Raspberry Pi Komme i gang med GPIO På en Raspberry Pi Hvis du, selv om Arduino var kult, bare vent til du får hendene på en Raspberry Pi - disse tingene er fantastiske. I tillegg til å være en fullt funksjonell datamaskin, har de også en ... Les mer og få andre gjenstander utløst ved oppføring. Hvis du har et hjemmemusikk, hvorfor ikke ha en temasang for hvert rom?

Vil du være å designe din egen personlige velkomst hjemme melding? Har du vært oppfinnsom med reed-brytere i ditt hjem på andre måter? Hvis det er tilfelle, legg igjen en kommentar om hva du planlegger eller allerede har gjort i kommentarfeltet nedenfor!

Utforsk mer om: Hjemmeautomatisering, Raspberry Pi.