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

Har du noen gang ønsket å komme hjem til en personlig velkomst? I dette enkle Raspberry Pi-prosjektet bruker vi en reed-bryter for å utløse en melodi når en dør åpnes.

Har du noen gang ønsket å komme hjem til en personlig velkomst?  I dette enkle Raspberry Pi-prosjektet bruker vi en reed-bryter for å utløse en melodi når en dør åpnes.
Annonse

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.
  • Breadboard.
  • Hook-up kabler.
  • Datahøyttaler eller lignende.

Vi bruker Raspberry Pi til å spille en sang når rommet er skrevet inn, og designe en krets med knapper på brødbrettet for å aktivere det i en forsinkelse, og stopp 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

Raspberry Pi 3 Modell B Hovedkort Raspberry Pi 3 Modell B Hovedkort Kjøp nå På Amazon $ 29.99

Starter

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

Fritzing notert HQ

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).

pin diagram

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 ditt er oppe, kan du enten midlertidig feste bryteren til døren din med tape, eller hvis du føler deg tryggere, kan du feste den permanent for bruk i fremtidige prosjekter!

reed switch installert

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

hele oppsettet riktig

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. Skriv sudo apt-get update til 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 spare hodepine senere.

Hvis du aldri har programmert i Python før, og føler deg litt kjempet, er det en rekke flotte nettsteder De 5 beste nettstedene for å lære Python-programmering De 5 beste nettstedene for å lære Python-programmering Det siste tiåret har Python programmeringsspråket eksplodert i popularitet blant programmerere på alle områder av koding. Fra webutviklere til videospilldesignere til in-house verktøyskapere, har mange mennesker falt i ... 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:

 #This code was written for an article on www.MakeUseOf.com by Ian Buckley. import RPi.GPIO as GPIO import time 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) while True: GPIO.output(7, GPIO.HIGH) if (GPIO.input(11)==1): print("Button on GPIO 11") time.sleep(1) if (GPIO.input(13)==1): print("Button on GPIO 13") time.sleep(1) if (GPIO.input(15)==1): print("Button on GPIO 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.

brytere

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, trykk CTRL-C for å 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 om du vil se hele koden, rull ned for å se den presenteres i sin helhet.

Vi må begynne med å importere noen moduler:

 import Rpi.GPIO as GPIO import pygame.mixer import time 

Vi bruker Pygame- modulen til å 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 med ingenting å si - og nå kan du også bidra til det episke prosjektet med en automatisert Twitter bot, drevet av Raspberry ... Les mer.

Vi skal bruke en variabel som kalles aktiv for å 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 active active=0 print("Currently Not Active") def activeState(): global active if active==1: active=0 GPIO.output(7, GPIO.LOW) print("Currently Not Active") elif active==0: print ("Activating in 10 seconds") for x in range(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") else: return 

Den første funksjonen oppretter her en variabel som heter aktiv, og setter den til 0. Å gi den aktive tilstanden en numerisk verdi betyr at hvis du planlegger å senere oppskalere programmet 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 aktivt == 1 ). Hvis det er, setter systemet systemet til ikke aktivt ( aktivt == 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: if active==1 and GPIO.input(15)==1 and playing == False: playing=True pygame.mixer.music.play() if GPIO.input(13)==1: print("Stop button pressed: Exiting") pygame.mixer.music.stop() break if GPIO.input(11)==1: activeState() time.sleep(0.5) 

Vi lager en annen variabel her som kalles å spille - 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. Tidsfunksjonen 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. Den opprinnelige = GPIO.LOW- argumentet i oppsettet av pin 7 setter den til lav så snart den er initialisert.

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 kalt "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(name) print("Loaded track - "+ str(name)) 

Den første linjen i denne blokken initierer Pygame- blanderen. Det siste argumentet i parentes er bufferen som styrer latensen der lyden spilles. Hvis du opplever uhøflig 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 inn i en annen katalog til dørpysprogrammet ditt, må du gi hele banen inne 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.

 while True: if(GPIO.input(13)==1): print("Stop button pressed: Exiting") pygame.mixer.music.stop() break if(GPIO.input(11)==1): activeState() time.sleep(0.5) if(active==1): watchDoor() break 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, blir watchDoor- funksjonen som vi definerte tidligere, kalt og neste gang døren åpnes, kommer melodien til å spille. Vi ringer også GPIO.cleanup () for å tilbakestille tappene våre ved utgang, noe 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:

 import RPi.GPIO as GPIO import pygame.mixer import time def activeSetup(): global active active=0 print("Currently Not Active") def activeState(): global active if active==1: active=0 GPIO.output(7, GPIO.LOW) print("Currently Not Active") elif active==0: print ("Activating in 10 seconds") for x in range(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") else: return def watchDoor(): global playing playing = False while True: if active==1 and GPIO.input(15)==1 and playing == False: playing=True pygame.mixer.music.play() if GPIO.input(13)==1: print("Stop button pressed: Exiting") pygame.mixer.music.stop() break if 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-eyed Maestro.mp3" pygame.mixer.music.load(name) print("Loaded track - "+ str(name)) while True: if(GPIO.input(13)==1): print("Stop button pressed: Exiting") pygame.mixer.music.stop() break if(GPIO.input(11)==1): activeState() time.sleep(0.5) if(active==1): watchDoor() break GPIO.cleanup() 

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 så, legg igjen en kommentar om hva du planlegger eller allerede har gjort i kommentarfeltet nedenfor!

In this article