Reklame

Har du nogensinde ønsket at komme hjem til en personlig velkomst? Med en Raspberry Pi og et par enkle komponenter kan du! I dette enkle projekt vil vi bruge en reed-switch til at udløse en tematune, når en dør åbnes. Vi bruger en Raspberry Pi som controller her, selvom du kunne bruge næsten enhver anden mikrocontroller $ 5 Mikrocontrollere: Arduino, Raspberry Pi Zero eller NodeMCU?Det plejede at være tilfældet, at hvis du ønskede at få en computer, skulle du omgive dit hus for at betale for det. Nu kan du få en til en Abraham Lincoln. Læs mere til dette projekt ved hjælp af det samme kredsløb. Her er en demo.

Du får brug for

Du vil sandsynligvis allerede eje alle de dele, du har brug for for at gøre dette undtagen reed-kontakten, som er omkring $ 2–3, eller du kan få en pakke på 5 til lidt over $ 8 her.

  • En Raspberry Pi (enhver model fungerer til dette).
  • 1 x 220 Ohm modstand.
  • 1 x 1K Ohm-modstand.
  • 3 x 10K Ohm-modstand.
  • 1 x Magnetisk afbryder.
  • 1 x LED.
  • 2 x Tryk på knappen.
  • Breadboard.
  • Tilslutningskabler.
  • Computerhøjttaler eller lignende.
instagram viewer

Vi bruger Raspberry Pi til at afspille en sang, når rummet indtastes, og designe et kredsløb med knapper på vores brødbræt for at aktivere den med en forsinkelse og stoppe programmet.

Dette projekt dækker det grundlæggende for mange anvendelser i DIY-hjemmeautomation Hjemmeautomatiseringsvejledning med Raspberry Pi og ArduinoHjemmeautomatiseringsmarkedet er oversvømmet af dyre forbrugersystemer, uforenelige med hinanden og dyre at installere. Hvis du har en Raspberry Pi og en Arduino, kan du dybest set opnå det samme ved ... Læs mere og også DIY-sikkerhed i hjemmet Leder du efter en løsning til DIY-hjemmesikkerhedssystem? Prøv en af ​​disseI en alder af digital teknologi og altid tilsluttet hardware, bør opsætning af et sikkerhedssystem til hjemmet overskride kunsten at sætte en alarmformet kasse på væggen. Læs mere

Kom godt i gang

Lad os begynde med at lave vores kredsløb. Sørg for, at din Pi ikke er i kraft, og indstil dit kredsløb sådan:

Fritzing Annotated HQ

LED'en er tilsluttet pin 7 på vores pi. De to trykknapkontakter er fastgjort til stifterne 11 og 13, og vippekontakten forbindes til stiften 15. Vores magt går til pin 1 (3v3) og pin 6 (Gnd).

pin diagram

Sørg for at kontrollere, at alt er på det rigtige sted.

Mens du tester dette projekt, kan det hjælpe med at holde dit vippekontakt foran dig, så du nemt kan tænde eller slukke det. I dette tilfælde var vippekontakten allerede installeret over døren. Når dit projekt er i gang, kan du enten midlertidigt sætte kontakten på din dør vha bånd, eller hvis du føler dig mere selvsikker, kan du vedhæfte det mere permanent til brug i fremtiden projekter!

reed switch installeret

Tilslut 3,5 mm-jackudgangen fra din Pi til dit højttalersystem. Når alt er samlet, skal det se sådan ud:

hele opsætningen korrekt

Bemærk, at brødbrættet, der bruges her, har dets strømskinner omvendt til Fritzing-diagrammet ovenfor.

Tænd nu din Pi, og få adgang til den ved hjælp af SSH, så vi kan få adgang til terminalen. Hvis du ikke er sikker på, hvordan du gør dette, denne vejledning Opsætning af din hindbærpi til hovedløs brug sammen med SSHRaspberry Pi kan acceptere SSH-kommandoer, når de er tilsluttet et lokalt netværk (enten via Ethernet eller Wi-Fi), så du nemt kan konfigurere det. Fordelene ved SSH går ud over at forstyrre den daglige screening ... Læs mere kan hjælpe dig. Hvis du bruger din Raspberry Pi med en skærm, mus og tastatur, skal du springe over dette trin og åbne terminalen.

Før du kommer i gang, er det værd at kontrollere, om du er ajour. Type sudo apt-get-opdatering ind i terminalen.

Nu kan vi gå videre til at få vores Pi til at tale med vores kredsløb.

Test vores opsætning

For at starte med, lad os tjekke vores kredsløb ved hjælp af et simpelt program. Hvis du er overbevist om, at du har tilsluttet alt sammen indtil videre, kan du springe dette trin over, selvom jeg vil anbefale det, da det kan spare hovedpine senere.

Hvis du aldrig har programmeret i Python før og føler dig lidt afskrækket, er der en række gode websteder De 5 bedste websteder til at lære Python-programmeringVil du lære Python-programmering? Her er de bedste måder at lære Python online, hvoraf mange er helt gratis. Læs mere der kan hjælpe dig med at komme i gang.

Opret et nyt script i terminalen:

nano test.py

Når den er åben, tilføj denne kode til filen, og tryk på Ctrl-C for at afslutte, efter gem dialog:

# Denne kode blev skrevet til en artikel på www. MakeUseOf.com af 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 sandt: GPIO.output (7, GPIO.HIGH) hvis (GPIO.input (11) == 1): udskriv ("Knap på GPIO 11") time.sleep (1) ) hvis (GPIO.input (13) == 1): print ("Knap på GPIO 13") time.sleep (1) hvis (GPIO.input (15) == 1): print ("Button on GPIO 15") tid .søvn (1) GPIO.cleanup ()

Denne kode læser værdien af ​​knapperne og udskriver på skærmen, når de ændres. De to trykknapper har trækkende modstande, så de rapporterer HØJT, når de trykkes på. Reedmagnetkontakten rapporterer HØJ, når dens ledsagende magnet er tæt.

afbrydere

Kør programmet:

python test.py

Du skal se lysdioden oplyse, og en rapport til skærmen, når du trykker på dine to knapper og trækker magneten væk fra din røromskifter. Hvis du ikke får feedback, når du trykker på knapper, skal du kontrollere dit kredsløb igen og sørge for, at alt er tilsluttet, som det skal være. Når du er færdig med at teste, skal du trykke på CTRL-C for at stoppe programmet.

prøve

Nu kan vi sammensætte et simpelt program til at indstille, udløse og nulstille vores dørsensor. Vi vil gennemgå koden i dele og kort forklare, hvad hver del gør, selvom du vil se den fulde kode rulle ned for at se den præsenteret i sin helhed.

Vi er nødt til at starte med at importere nogle moduler:

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

Vi bruger PyGame modul til at afspille vores musik. Det leveres som standard med Raspbian Jessie, og er et fantastisk bibliotek til alt hvad du har brug for til at lave Python-spil og mange andre fantastiske projekter Sådan bygger du en Raspberry Pi Twitter BotTwitter er verdens største opbevaring af korte beskeder fra mennesker med intet at sige - og nu du kan også bidrage til det episke projekt med en automatiseret Twitter-bot, drevet af dit Hindbær... Læs mere .

Vi vil bruge en variabel, der hedder aktiv at beslutte, om vores system er aktivt eller ej. Lad os definere et par funktioner, der gør dette for os:

def activeSetup (): global aktiv aktiv = 0 print ("Aktuelt ikke aktiv") def activeState (): global aktiv hvis aktiv == 1: aktiv = 0 GPIO.output (7, GPIO.LOW) udskrivning ("Aktuelt ikke aktiv") elif active == 0: print ("Aktivering i 10 sekunder") for x inden for området (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 ("Aktuelt Aktiv ") andet: vende tilbage. 

Den første funktion opretter her en navngivet variabel aktiv, og indstiller det til 0. At give den aktive tilstand en numerisk værdi betyder, at hvis du senere planlægger at opskalere dit program til at have forskellige aktive tilstande, kan du nummerere dem i overensstemmelse hermed. Selvom det måske ikke er den bedste Python-programmering i verden, vil det mere end være tilstrækkeligt til dette projekt.

Den anden funktion, når den kaldes, kontrollerer, om systemet er aktivt (eller aktiv == 1). Hvis det er tilfældet, indstiller det systemet til ikke at være aktivt (aktiv == 0), slukker LED'en og udskriver til konsollen. Hvis det ikke er tilfældet, giver det dig en nedtælling på 10 sekunder for at forlade det rum, hvor LED-en blinker, inden du bliver tilbage for at vise, at systemet er aktivt.

Nu kan vi definere en funktion, der vil se vores rørmagnetafbryder:

def watchDoor (): global afspilning = Falsk mens sand: hvis aktiv == 1 og GPIO.input (15) == 1 og spiller == Falsk: spiller = sand pygame.mixer.music.play () hvis GPIO.input (13) == 1: print ("Stop-tasten er trykket: afslutter") pygame.mixer.music.stop () bruges hvis GPIO.input (11) == 1: activeState () time.sleep (0.5)

Vi opretter en anden variabel her kaldet spille - dette er der bare for at stoppe programmet, der prøver at starte gentagne gange, når kontakten udløses.

Inden i loop-tiden er den første, hvis udsagn starter musikken (som vi endnu ikke har noget af, men ikke at bekymre dig, den kommer). Den lader kun musikken starte, hvis systemet er aktivt, reed-kontakten er åben, og den ikke allerede spiller.

Den anden hvis erklæring er til vores exit-knap. Hvis der trykkes på denne knap, stopper musikken, og programmet afslutter.

Den tredje hvis erklæring er til at skifte, om systemet er aktivt eller ej. Det time.sleep funktion her er at forhindre flere knaplæsninger, når der trykkes på den.

Nu er det tid til at opsætte Pi's 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 foretaget nogen eksperimenter med Pi, inden dette skulle være dig velkendt. Det indledende = GPIO.LOW argument i pin 7's opsætning sætter det til lavt, så snart det er initialiseret.

Nu kan vi kalde vores funktion, der indstiller systemet til ikke at være aktivt, når programmet starter.

Activesetup ()

Music Maestro!

På dette tidspunkt bør vi begynde at tænke på musikken, der skal afspilles. Du kan vælge en hvilken som helst musikfil du ønsker, men vi skal vælge noget tilgængeligt for alle lige nu. Hvis du ser YouTube, er du sandsynligvis allerede bekendt med Kevin MacLeods musik. Lad os downloade en fantastisk melodi af ham kaldet “Enøjet Maestro”. Dette sammen med meget af musikken på hans websted er licenseret under Creative Commons, og der er der mange gode grunde Hvad er Creative Commons og ikke-kommerciel brug?Hvad er Creative Commons? Hvad betyder "ikke-kommerciel brug"? Lær om Creative Commons-licenser og hvordan de fungerer. Læs mere at bruge indhold med disse licenser til dine projekter.

wget

Tilbage i vores kode skal vi starte Pygame-mixeren og indlæse vores 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 ("Indlæst spor -" + str (navn))

Den første linje i denne blok initierer PyGame mixer. Det sidste argument i parenteserne er den puffer, der styrer den latenstid, som lyden spilles i. Hvis du oplever hakket afspilning senere, når din musik afspilles, kan du prøve at øge dette antal til 4096. Indstillingerne, som de er, fungerer uden problemer på en Pi 3.

Hvis du downloadede din musikfil til et andet bibliotek end dit door.py program, skal du angive den fulde sti inden for parenteserne, når du definerer navnevariablen.

Nu er det eneste, der er tilbage at gøre, at opsætte en løkke, der venter på, at vi enten indstiller programmet aktivt eller afslutter det.

mens sandt: hvis (GPIO.input (13) == 1): udskriv ("Stop-tasten er trykket: afslutter") pygame.mixer.music.stop () break if (GPIO.input (11) == 1): activeState () time.sleep (0.5) if (active == 1): watchDoor () break GPIO.cleanup ()

Dette mens løkken venter på et input fra en af ​​knapperne og afslutter eller ændrer tilstanden til at være aktiv i overensstemmelse hermed. Hvis aktivtilstanden bliver 1, er watchDoor funktion, vi definerede tidligere, bliver kaldt op, og næste gang døren åbnes, vil vores melodi blive spillet. Vi ringer også GPIO.cleanup () at nulstille vores ben ved udgang, hvilket generelt er en god praksis for al programmering på Raspberry Pi.

Det er alt, hvad vi skal gøre for at få dette projekt i gang, her er koden fuldt ud:

importer RPi. GPIO som GPIO. import pygame.mixer. importtid def activeSetup (): global aktiv aktiv = 0 udskrivning ("Aktuelt ikke aktiv") def aktivStatus (): global aktiv hvis aktiv == 1: aktiv = 0 GPIO.output (7, GPIO.LOW) print ("Aktuelt Ikke Aktiv ") elif active == 0: print (" Aktivering i 10 sekunder ") for x inden for rækkevidde (0,10): GPIO.output (7, GPIO.HIGH) tid. Sove (0,5) GPIO.output (7, GPIO.LOW) time.sleep (0.5) aktiv = 1 GPIO.output (7, GPIO.HIGH) udskrivning ("Aktuelt aktiv") andet: return def watchDoor (): global afspilning = False mens sandt: hvis aktiv == 1 og GPIO.input (15) == 1 og spiller == False: spiller = sandt pygame.mixer.music.play () hvis GPIO.input (13) == 1: print ("Stop-tasten er trykket: afslutter") pygame.mixer.music.stop () bruges 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 = "One-eyed Maestro.mp3" pygame.mixer.music.load (navn) print ("Indlæst spor -" + str (navn)) mens sandt: hvis (GPIO.input (13) == 1): udskriv ("Stop-tasten er trykket: afslutter") pygame.mixer.music.stop () break if (GPIO.input (11) == 1): activeState () time.sleep (0.5) if (active == 1): watchDoor () break GPIO.cleanup ()

Hvis du rullede ned her for at få fat i den komplette kode med det samme, skal du huske, at du stadig bliver nødt til at downloade musikken til din Pi for at den kan fungere!

Nu skulle du have en fungerende velkomsttema-melodi! Sæt din vifteafbryder på din dør, og prøv den ud. Pinlig dans er valgfri, men anbefales.

Dette projekt dækkede det grundlæggende for mange former for overvågning af hjemmet, sikkerhed og automatisering, og forhåbentlig var det også sjovt!

Nu hvor du er kommet så langt, hvorfor stoppe der? Du kan tilføje flere numre og få programmet til at vælge et tilfældigt fra en liste. Du kunne tilføj et relæ Kom godt i gang med GPIO på en hindbærpiHvis du selvom Arduino var sej, skal du bare vente til du får hænderne på en Raspberry Pi - disse ting er fantastiske. Ud over at være en fuldt funktionel computer har de også en ... Læs mere og få andre objekter udløst ved posten. Hvis du har et hjemmemusiksystem, hvorfor ikke have en temasang til hvert værelse?

relælys

Vil du designe din egen personlige velkomsthjemmeddelelse? Har du været opfindsom med vippekontakter i dit hjem på andre måder? I så fald skal du efterlade en kommentar om, hvad du planlægger eller allerede har gjort i kommentarfeltet nedenfor!

Ian Buckley er freelance journalist, musiker, kunstner og videoproducent bosiddende i Berlin, Tyskland. Når han ikke skriver eller er på scenen, tænker han med DIY-elektronik eller kode i håbet om at blive en gal videnskabsmand.