Spil din egen tema melodi, når du indtaster Værelset med Raspberry Pi

Har du nogensinde ønsket at komme hjem til en personlig velkomst? I dette simple Raspberry Pi-projekt bruger vi en reed-switch til at udløse en melodi, når en dør åbnes.

Har du nogensinde ønsket at komme hjem til en personlig velkomst?  I dette simple Raspberry Pi-projekt bruger vi en reed-switch til at udløse en melodi, når en dør åbnes.
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 bruger vi en reed-switch til at udløse et tema, når en dør åbnes. Vi skal bruge en Raspberry Pi som controller her, selvom du kunne bruge næsten enhver anden mikrocontroller $ 5 Microcontrollers: Arduino, Raspberry Pi Zero eller NodeMCU? $ 5 Microcontrollers: Arduino, Raspberry Pi Zero, eller NodeMCU? Det plejede at være tilfældet, at hvis du ønskede at få en computer, skulle du have remortgage dit hus til at betale for det. Nu kan du få en til en Abraham Lincoln. Læs mere for dette projekt ved hjælp af samme kredsløb. Her er en demo.

Du får brug for

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

  • En Raspberry Pi (enhver model vil fungere for dette).
  • 1 x 220 ohm modstand.
  • 1 x 1K ohm modstand.
  • 3 x 10K ohm modstand.
  • 1 x magnetisk rørbryder.
  • 1 x LED.
  • 2 x push-knap switch.
  • Breadboard.
  • Hook-up kabler.
  • Computer højtaler eller lignende.

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

Dette projekt, mens det først og fremmest bliver gjort til sjov, dækker det grundlæggende for mange anvendelser i DIY Home Automation Home Automation Guide Med Hindbær Pi og Arduino Home Automation Guide Med Hindbær Pi og Arduino Hjemmautomatiseringsmarkedet oversvømmes med dyre forbrugersystemer, der er uforenelige med en en anden og dyr at installere. Hvis du har en Raspberry Pi og en Arduino, kan du stort set opnå det samme ved ... Læs mere og også DIY hjemme sikkerhed Leder du efter en DIY Home Security System Solution? Prøv en af ​​disse leder efter en DIY Home Security System Solution? Prøv en af ​​disse. I en alder af digital teknologi og altid tilsluttet hardware bør oprettelsen af ​​et hjemssikkerhedssystem overskride kunsten at lægge en alarmformet boks på væggen. Læs mere

Hindbær Pi 3 Model B Hovedkort Hindbær Pi 3 Model B Hovedkort Køb nu På Amazon $ 29.99

Kom i gang

Lad os begynde med at lave vores kredsløb. Sørg for, at din Pi er ustyret, og indstil dit kredsløb som dette:

Fritzing noteret HQ

LED'en er forbundet til pin 7 på vores pi. De to trykknapkontakter er fastgjort til tappene 11 og 13, og reed-kontakten forbinder til pin 15. Vores strøm går til pin 1 (3v3) og pin 6 (Gnd).

pin diagram

Sørg for at tjekke alt er i præcis det rigtige sted.

Mens du tester dette projekt, kan det medvirke til at holde din reed-switch foran dig, så du nemt kan skifte det til eller fra. I dette tilfælde var reed-omskifteren allerede installeret over døren. Når dit projekt er i gang kan du enten midlertidigt vedhæfte kontakten til din dør ved hjælp af tape, eller hvis du føler dig mere sikker, kan du vedhæfte det mere permanent til brug i fremtidige projekter!

reed switch installeret

Tilslut 3, 5 mm jack udgangen på din Pi til dit højttalersystem. Når alt er sat sammen, skal det se sådan ud:

hele setup korrekt

Bemærk, at brødbrættet, der bruges her, har strømmen, drejer den omvendt til Fritzing diagrammet ovenfor.

Nu tænd 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, er denne vejledning Opsætning af din Raspberry Pi til hovedløs brug med SSH Opsætning af din Raspberry Pi til hovedløs brug med SSH Raspberry 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 den. 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 starter, er det værd at kontrollere, om du er opdateret. Skriv sudo apt-get update til terminalen.

Nu kan vi fortsætte med at få vores Pi til at tale med vores kredsløb.

Test vores opsætning

Til at begynde med, lad os kontrollere vores kredsløb ved hjælp af et simpelt program. Hvis du er sikker på at du har kablet alt op lige så langt, kan du springe over dette trin, selvom jeg vil anbefale det, da det kan gemme hovedpine senere.

Hvis du aldrig har programmeret i Python før og har lidt afslappet, er der en lang række gode hjemmesider De 5 bedste hjemmesider til at lære pythonprogrammering De 5 bedste hjemmesider til at lære pythonprogrammering I løbet af det sidste årti har Python programmeringssproget eksploderet i popularitet blandt programmører på alle områder af kodning. Fra webudviklere til videospildesignere til in-house værktøjer skabere, mange mennesker er faldet i ... Læs mere, der kan hjælpe dig med at komme i gang.

I terminalen skal du oprette et nyt script:

 nano test.py 

Når du er åben, tilføj denne kode til filen, og tryk på Ctrl-C for at afslutte, efter at gemme 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 kode læser værdien af ​​knapperne og udskriver til skærmen, når de ændres. De to trykknapper har træk ned modstande, så de rapporterer HØJ, når de trykkes. Reed magnet switchen rapporterer HIGH, når den tilhørende magnet er tæt.

afbrydere

Kør programmet:

 python test.py 

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

Nu kan vi sammensætte et simpelt program til at indstille, udløse og nulstille vores dørføler. Vi vil gå over koden i dele og forklare kort hvad hver del gør, men hvis du vil se hele koden rulle ned for at se den præsenteret i sin helhed.

Vi skal begynde med at importere nogle moduler:

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

Vi bruger Pygame- modulet til at spille vores musik. Det kommer som standard med Raspbian Jessie og er et godt bibliotek til alt hvad du behøver for at lave Python-spil og mange andre fantastiske projekter. Sådan bygger du en Raspberry Pi Twitter Bot Hvordan man opbygger en Raspberry Pi Twitter Bot Twitter er verdens største depot af kort meddelelser fra folk med intet at sige - og nu kan du også bidrage til det episke projekt med en automatiseret kvidre bot, drevet af din Raspberry ... Læs mere.

Vi skal bruge en variabel, der hedder aktiv for at afgøre, om vores system er aktivt eller ej. Lad os definere et par funktioner, som vil gøre det for os:

 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 funktion her skaber en variabel, der hedder aktiv, og sætter den til 0. At give den aktive tilstand en numerisk værdi betyder, at hvis du planlægger at senere skalere dit program for at have forskellige aktive stater, kan du nummerere dem i overensstemmelse hermed. Selv om det måske ikke er den bedste Python programmering i verden, vil det mere end nok være til dette projekt.

Den anden funktion, når kaldet kontrollerer, om systemet er aktivt (eller aktivt == 1 ). Hvis det er, sætter det systemet til ikke aktivt ( aktivt == 0 ), slukker lysdioden og udskriver til konsollen. Hvis det ikke er tilfældet, giver det dig en 10 sekunders nedtælling for at forlade det rum, hvor LED'en blinker, før du forbliver på for at vise, at systemet er aktivt.

Nu kan vi definere en funktion, der vil se vores 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 opretter en anden variabel her kaldes afspilning - dette er der simpelthen for at stoppe programmet, der forsøger at begynde at spille gentagne gange, når kontakten udløses.

Inden for mellemløbet starter den første hvis udsagn musikken (som vi ikke har nogen af ​​endnu, men ikke bekymre dig, det kommer). Det lader kun musikken starte, hvis systemet er aktivt, reed-kontakten er åben, og den afspilles ikke allerede.

Den anden, hvis erklæring er for vores udgangsknap. Hvis denne knap trykkes, stopper musikken, og programmet afslutter.

Den tredje hvis erklæring er at skifte om, hvorvidt systemet er aktivt eller ej. Time.sleep funktionen her er at forhindre, at flere knapper læses, når den trykkes.

Nu er det på tide at oprette 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 lavet nogen eksperimenterende med Pi, før dette skulle være kendt for dig. Den oprindelige = GPIO.LOW- argument i Pin 7's opsætning sætter den til lav, så snart den initialiseres.

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

 activeSetup() 

Music Maestro!

På dette tidspunkt skal vi begynde at tænke på musikken til at spille. Du kan vælge enhver musikfil, du ønsker, men vi vælger noget, der er tilgængeligt for alle. Hvis du ser YouTube, er du sikkert allerede bekendt med Kevin MacLeods musik. Lad os downloade en fantastisk melodi af ham kaldet "One-eyed Maestro". Dette sammen med meget af musikken på hans websted er licenseret under Creative Commons, og der er mange gode grunde. Hvad er Creative Commons, og skal du bruge det? Hvad er Creative Commons, og skal du bruge det? Creative Commons er et sæt licenser, som automatisk giver dig tilladelse til at gøre forskellige ting, såsom genbrug og distribution af indholdet. Lad os finde ud af mere om det og hvordan man bruger det. Læs mere for at bruge indhold med disse licenser til dine projekter.

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

Den første linje i denne blok initierer Pygame mixeren. Det sidste argument i parenteserne er bufferen, der styrer latensen, hvor lyden afspilles. Hvis du oplever uhøflig afspilning senere, når din musik afspilles, skal du prøve at øge dette tal til 4096. Indstillingerne som de arbejder uden problem på en Pi 3.

Hvis du downloadede din musikfil i en anden mappe til dit door.py- program, skal du give den fulde sti inde i parenteserne, når du definerer navnevariablen .

Nu er alt, hvad der er tilbage at gøre, oprettet en loop, der venter på os, at enten sætte programmet aktivt eller afslutte 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øjfen venter på en indgang fra en af ​​knapperne, og afslutter eller ændrer tilstanden til aktiv i overensstemmelse hermed. Hvis tilstanden af ​​aktiv bliver 1, så bliver den valgte funktion, som vi definerede tidligere, kaldet, og næste gang døren åbnes, afspilles vores melodi. Vi kalder også GPIO.cleanup () for at nulstille vores pins ved udgang, hvilket generelt er en god praksis for alle programmering på Raspberry Pi.

Det er alt, hvad vi skal gøre for at få dette projekt til at køre, her er koden i sin helhed:

 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 rullede ned her for at få fat i hele koden med det samme, skal du huske, at du stadig skal downloade musikken på din Pi, for at den kan fungere!

Nu skal du have en fungerende velkomstside tematune! Fastgør din reed-switch til din dør, og prøv den ud. Fængslende dans er valgfrit men anbefales.

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

Nu hvor du er kommet så langt, hvorfor stoppe der? Du kan tilføje flere spor og få programmet til at vælge en tilfældigt fra en liste. Du kan tilføje et relæ Kom godt i gang med GPIO På en Raspberry Pi Kom i gang med GPIO På en Raspberry Pi Hvis du selvom Arduino var cool, bare vent indtil du hænder på en Raspberry Pi - disse ting er fantastiske. Udover at være en fuldt funktionel computer, har de også en ... Læs mere og få andre objekter udløst ved indrejse. Hvis du har et hjemmemusiksystem, hvorfor ikke have en temasang til hvert værelse?

Vil du designe din egen personlige velkomst hjemme besked? Har du været opfindsomme med reed switches i dit hjem på andre måder? Hvis det er tilfældet, skriv en kommentar om, hvad du planlægger eller allerede har gjort i kommentarfeltet nedenfor!

In this article