Annonse

Har du noen gang ønsket å komme hjem til en personlig velkomst? Med en Raspberry Pi og noen få enkle komponenter kan du det! I dette enkle prosjektet bruker vi en vassbryter for å utløse en temalåte når en dør åpnes. Vi skal bruke en Raspberry Pi som kontroller her, selv om du kan bruke nesten hvilken som helst annen mikrokontroller $ 5 Mikrokontrollere: Arduino, Raspberry Pi Zero, eller NodeMCU?Det pleide å være tilfelle at hvis du ville skaffe deg en datamaskin, måtte du remortgage huset ditt for å betale for det. Nå kan du skaffe en for en Abraham Lincoln. Les mer for dette prosjektet med samme krets. Her er en demonstrasjon.

Du vil trenge

Du vil sannsynligvis allerede eie alle delene du trenger for å lage dette bortsett fra vassbryteren, som er rundt $ 2–3, eller du kan få en pakke på 5 for litt over $ 8 her.

  • En Raspberry Pi (hvilken som helst modell vil fungere for dette).
  • 1 x 220 Ohm-motstand.
  • 1 x 1K Ohm-motstand.
  • 3 x 10K Ohm-motstand.
  • 1 x magnetisk vassbryter.
  • 1 x LED.
  • 2 x trykknappbryter.
  • Breadboard.
  • Koblingsledninger.
  • Datamaskinhøyttaler eller lignende.
instagram viewer

Vi bruker Raspberry Pi til å spille en sang når rommet kommer inn, og designe en krets med knapper på brødbrettet vårt for å aktivere den på en forsinkelse og stoppe programmet.

Dette prosjektet, selv om det er laget for mest mulig moro, dekker det grunnleggende for mange applikasjoner i Hjemmeautomatisering av DIY Hjemmeautomatiseringsguide med bringebær Pi og ArduinoHjemmeautomatiseringsmarkedet er oversvømmet av dyre forbrukssystemer, uforenlige med hverandre og kostbare å installere. Hvis du har en Raspberry Pi og en Arduino, kan du i utgangspunktet oppnå det samme ved ... Les mer og også DIY-sikkerhet Ser du etter en DIY-hjemmesikkerhetssystemløsning? Prøv en av disseI en alder av digital teknologi og alltid tilkoblet maskinvare, bør det å sette opp et sikkerhetssystem for hjemmet overskride kunsten å sette en alarmformet boks på veggen. Les mer

Starter

La oss begynne med å lage kretsen vår. Forsikre deg om at Pi-en din er uten strøm, og sett opp kretsen din slik:

Fritzing Annotated HQ

LED-en er koblet til pinne 7 på vår pi. De to trykknappbryterne er festet til pinner 11 og 13, og vippebryteren kobles til pinne 15. Kraften vår går til pinne 1 (3v3) og pinne 6 (Gnd).

pin diagram

Sørg for å sjekke at alt er på riktig sted.

Mens du tester dette prosjektet kan det hjelpe å holde vassbryteren foran deg slik at du enkelt kan slå den av eller på. I dette tilfellet var vassbryteren allerede installert over døren. Når prosjektet er i gang, kan du enten knytte bryteren midlertidig på døren din ved å bruke tape, eller hvis du føler deg mer trygg, kan du feste den mer permanent for bruk i fremtiden prosjekter!

vassbryter installert

Koble 3,5 mm jack-utgangen fra din Pi til høyttalersystemet. Når alt er satt sammen skal det se slik ut:

hele oppsettet riktig

Legg merke til at brødbrettet som brukes her har kraftskinner omvendt til Fritzing-diagrammet over.

Nå kan du slå Pi-en opp, 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, denne guiden Sette opp bringebærpien din for hodeløs bruk med SSHRaspberry Pi kan godta SSH-kommandoer når de er koblet til et lokalt nettverk (enten med Ethernet eller Wi-Fi), slik at du enkelt kan konfigurere den. Fordelene med SSH går ut over å 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 kommer i gang, er det verdt å sjekke om du er oppdatert. Type sudo apt-get oppdatering inn i terminalen.

Nå kan vi gå videre til å få Pi-en vår til å snakke med kretsen vår.

Testing av oppsettet vårt

For å begynne, kan vi sjekke kretsen vår ved hjelp av et enkelt program. Hvis du er sikker på at du har koblet opp alt så langt, kan du hoppe over dette trinnet, selv om jeg vil anbefale det, siden det kan spare hodepine senere.

Hvis du aldri har programmert i Python før og føler deg litt skremmende, er det en rekke gode nettsteder De 5 beste nettstedene for å lære Python-programmeringVil du lære Python-programmering? Her er de beste måtene å lære Python online, hvorav mange er helt gratis. Les mer som kan hjelpe deg i gang.

Opprett et nytt skript i terminalen:

nano test.py

Når du er åpen, legger du til denne koden i filen, og trykk Ctrl-C for å avslutte, etter lagringsdialogen:

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

Denne koden leser verdien av knappene og skrives ut på skjermen når de endres. De to trykknappene har nedtrekkbare motstander, så de rapporterer HØY når de trykkes. Reed-magnetbryteren rapporterer HØY når den medfølgende magneten er i nærheten.

brytere

Kjør programmet:

python test.py

Du bør se lysdioden lyse opp, og en rapport til skjermen når du trykker på de to knappene og trekker magneten bort fra vassbryteren. Hvis du ikke får tilbakemelding når du trykker på knapper, må du sjekke kretsløpene igjen og sørge for at alt er koblet slik det skal være. Når du er ferdig med å teste, trykk CTRL-C for å stoppe programmet.

test

Nå kan vi sette sammen et enkelt program for å sette, utløse og tilbakestille dørsensoren. Vi vil gå over koden i deler og kort forklare hva hver del gjør, selv om du vil se hele koden bla ned for å se den presentert i sin helhet.

Vi må starte med å importere noen moduler:

importer Rpi. GPIO som GPIO. import pygame.mixer. importtid. 

Vi bruker pygame modul for å spille musikken vår. Den leveres som standard med Raspbian Jessie, og er et flott bibliotek for alt du trenger for å lage Python-spill og mange andre fantastiske prosjekter Slik bygger du en Raspberry Pi Twitter BotTwitter er verdens største depot av korte meldinger fra mennesker med ingenting å si - og nå Du kan også bidra til det episke prosjektet med en automatisert Twitter-bot, drevet av din Bringebær... Les mer .

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

def activeSetup (): global active active = 0 print ("For tiden ikke aktiv") def activeState (): global active if active == 1: active = 0 GPIO.output (7, GPIO.LOW) -utskrift ("For tiden ikke aktiv") elif active == 0: print ("Aktivering på 10 sekunder") for x innen rekkevidde (0,10): GPIO.output (7, GPIO.HIGH) time.sleep (0.5) GPIO.output (7, GPIO.LOW) time.sleep (0.5) aktiv = 1 GPIO.output (7, GPIO.HIGH) print ("For tiden Aktiv ") annet: retur. 

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

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

Nå kan vi definere en funksjon som vil se reed magnet switch:

def watchDoor (): global spiller spiller = usant mens sant: hvis aktiv == 1 og GPIO.input (15) == 1 og spiller == usant: spiller = sant pygame.mixer.music.play () hvis GPIO.input (13) == 1: print ("Stoppknapp trykket: avslutter") pygame.mixer.music.stop () bryter hvis GPIO.input (11) == 1: activeState () time.sleep (0.5)

Vi lager en annen variabel her kalt spille - dette er bare for å stoppe programmet for å prøve å begynne å spille gjentatte ganger når bryteren utløses.

Inne i loopen er den første hvis uttalelsen starter musikken (som vi ikke har noe ennå, men ikke å bekymre deg, den kommer). Den lar musikken starte bare hvis systemet er aktivt, vassbryteren er åpen og den ikke allerede spiller.

Den andre hvis uttalelsen er for vår exit-knapp. Hvis du trykker på denne knappen, stopper musikken, og programmet går ut.

Den tredje hvis uttalelsen er for å 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 Pis pinner.

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 innledende = GPIO.LOW argumentet i pin 7s oppsett setter det til lavt så snart det er initialisert.

Nå kan vi kalle funksjonen vår som vil gjøre at systemet ikke skal være aktivt når programmet starter.

activeSetup ()

Music Maestro!

På dette tidspunktet bør vi begynne å tenke på musikken som skal spilles. Du kan velge hvilken som helst musikkfil du ønsker, men vi skal velge noe tilgjengelig for alle foreløpig. Hvis du ser på YouTube, er du sannsynligvis allerede kjent med Kevin MacLeods musikk. La oss laste ned en fantastisk melodi av ham som heter “Enøyet Maestro”. Dette, sammen med mye av musikken på nettstedet hans, er lisensiert under Creative Commons, og det finnes det mange gode grunner Hva er Creative Commons og ikke-kommersiell bruk?Hva er Creative Commons? Hva betyr "ikke-kommersiell bruk"? Lær om Creative Commons-lisenser og hvordan de fungerer. Les mer å bruke innhold med disse lisensene til prosjektene dine.

wget

Tilbake i koden vår, må vi starte Pygame-mikseren og laste inn melodien vår.

pygame.mixer.init (44100, -16,2,1024) pygame.mixer.music.set_volume (1.0) name = "Enøyet Maestro.mp3" pygame.mixer.music.load (navn) print ("Lastet spor -" + str (navn))

Den første linjen i denne blokkeringen initierer pygame mikser. Det siste argumentet i parentesene er bufferen som kontrollerer latensen som lyden spilles av i. Hvis du opplever hakkete avspilling senere når musikken din spiller, kan du prøve å øke dette tallet til 4096. Innstillingene som de fungerer fungerer uten problemer på en Pi 3.

Hvis du lastet ned musikkfilen din til en annen katalog enn din door.py program, må du oppgi hele banen inne i parentesene når du definerer navnevariabelen.

Nå er det bare å sette opp en løkke som venter på at vi enten skal sette programmet aktivt, eller avslutte det.

mens sant: hvis (GPIO.input (13) == 1): skriv ut ("Stoppknapp trykket: avslutter") pygame.mixer.music.stop () break if (GPIO.input (11) == 1): activeState () time.sleep (0.5) if (active == 1): watchDoor () break GPIO.cleanup ()

Dette mens sløyfe venter på en inngang fra en av knappene, og avslutter eller endrer tilstanden til aktiv deretter. Hvis tilstanden til aktiv blir 1, da watchDoor funksjon vi definerte tidligere blir oppringt, og neste gang døren åpnes, vil melodien spille. Vi ringer også GPIO.cleanup () å tilbakestille pinnene våre ved avkjørsel, noe som generelt er god praksis for all programmering på Raspberry Pi.

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

importer RPi. GPIO som GPIO. import pygame.mixer. importtid def activeSetup (): global active active = 0 print ("For tiden ikke aktiv") def activeState (): global active if active == 1: active = 0 GPIO.output (7, GPIO.LOW) print ("For tiden Ikke Aktiv ") elif active == 0: print (" Aktiverer i 10 sekunder ") for x innen rekkevidde (0,10): GPIO.output (7, GPIO.HIGH) time.sleep (0.5) GPIO.output (7, GPIO.LOW) time.sleep (0.5) aktiv = 1 GPIO.output (7, GPIO.HIGH) print ("For tiden aktiv") annet: return def watchDoor (): global playing playing = False while True: if active == 1 and GPIO.input (15) == 1 and playing == False: spiller = sant pygame.mixer.music.play () hvis GPIO.input (13) == 1: print ("Stoppknapp trykket: avslutter") pygame.mixer.music.stop () bryter hvis 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 = "Enøyet Maestro.mp3" pygame.mixer.music.load (navn) print ("Lastet spor -" + str (navn)) mens det er sant: if (GPIO.input (13) == 1): print ("Stop-knappen trykket: avslutter") 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 hit for å hente den komplette koden med en gang, husk at du fremdeles må laste ned musikken til Pi-en for at den skal fungere!

Nå skal du ha en fungerende velkomsttema! Fest reed-bryteren på døren, og prøv den ut. Embarrassing dans er valgfri, men anbefales.

Dette prosjektet dekket det grunnleggende for mange former for hjemmeovervåking, sikkerhet og automatisering, og forhåpentligvis var det gøy også!

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

stafettlys

Vil du designe din egen personlige velkomsthjemmelding? Har du vært oppfinnsom med vassbrytere i hjemmet ditt på andre måter? Hvis ja, legg igjen en kommentar om hva du planlegger eller allerede har gjort i kommentarfeltet nedenfor!

Ian Buckley er frilansjournalist, musiker, utøver og videoprodusent bosatt i Berlin, Tyskland. Når han ikke skriver eller på scenen, tisser han med DIY-elektronikk eller kode i håp om å bli en gal forsker.