Annons

Har du någonsin velat komma hem för ett personligt välkomnande? Med en Raspberry Pi och några enkla komponenter kan du! I det här enkla projektet kommer vi att använda en vredströmbrytare för att utlösa en temaljud när en dörr öppnas. Vi ska använda en Raspberry Pi som styrenhet här, men du kan använda nästan vilken som helst annan mikrokontroller $ 5 Mikrokontroller: Arduino, Raspberry Pi Zero, eller NodeMCU?Det brukade vara så att om du ville få en dator, skulle du behöva remortgage ditt hus för att betala för det. Nu kan du få en för en Abraham Lincoln. Läs mer för detta projekt med samma krets. Här är en demo.

Du kommer behöva

Du kommer antagligen redan att äga alla de delar du behöver för att göra detta förutom reed-omkopplaren, som är cirka $ 2–3, eller så kan du få ett paket på 5 för drygt $ 8 här.

  • En hallonpi (vilken modell som helst fungerar för detta).
  • 1 x 220 Ohm-motstånd.
  • 1 x 1K Ohm-motstånd.
  • 3 x 10K Ohm-motstånd.
  • 1 x Magnetisk vredbrytare.
  • 1 x LED.
  • 2 x Tryckknappströmställare.
  • Bakbord.
  • Anslutningskablar.
  • Datorhögtalare eller liknande.
instagram viewer

Vi kommer att använda Raspberry Pi för att spela en låt när rummet kommer in, och utforma en krets med knappar på vår brödskiva för att aktivera den på en fördröjning och stoppa programmet.

Detta projekt, även om det främst är gjort för skojs skull, täcker grunderna för många applikationer i Hemmautomation Hemmautomationsguide med hallon Pi och ArduinoHemmautomationsmarknaden är översvämmad av dyra konsumentsystem, oförenliga med varandra och kostsamma att installera. Om du har en Raspberry Pi och en Arduino kan du i princip uppnå samma sak på ... Läs mer och även DIY-hemskydd Letar du efter en DIY-lösning för hemsäkerhetssystem? Prova en av dessaI en tid av digital teknik och alltid ansluten hårdvara bör installation av ett hemsäkerhetssystem överskrida konsten att sätta en larmformad låda på väggen. Läs mer

Komma igång

Låt oss börja med att göra vår krets. Se till att din Pi är ostyrd och ställ in din krets så här:

Fritzing Annotated HQ

Lysdioden är ansluten till stift 7 på vår pi. De två tryckknappsomkopplarna är fästa vid stift 11 och 13, och vredströmbrytaren ansluts till stift 15. Vår kraft går till stift 1 (3v3) och stift 6 (Gnd).

stiftdiagram

Var noga med att kontrollera att allt är på rätt plats.

När du testar det här projektet kan det hjälpa till att hålla vassbrytaren framför dig så att du enkelt kan slå på eller av det. I detta fall installerades reedbrytaren redan ovanför dörren. När ditt projekt är igång kan du antingen tillfälligt ansluta omkopplaren till din dörr med band, eller om du känner dig mer säker kan du fästa den mer permanent för användning i framtiden projekt!

reed switch installerad

Anslut 3,5 mm-uttaget från din Pi till ditt högtalarsystem. När allt är sammansatt ska det se ut så här:

hela installationen korrekt

Observera att brödskivan som används här har sin strömskenor tvärtom till Fritzing-diagrammet ovan.

Slå nu på din Pi och komma åt den med SSH så att vi kan komma åt terminalen. Om du inte är säker på hur du gör detta, den här guiden Ställa in din hallonpi för huvudlös användning med SSHRaspberry Pi kan acceptera SSH-kommandon när de är anslutna till ett lokalt nätverk (antingen via Ethernet eller Wi-Fi), vilket gör att du enkelt kan konfigurera det. Fördelarna med SSH går utöver upprörande av den dagliga screeningen ... Läs mer kan hjälpa dig. Om du använder din Raspberry Pi med en bildskärm, mus och tangentbord, hoppa över detta steg och öppna terminalen.

Innan du börjar är det värt att kontrollera om du är uppdaterad. Typ sudo apt-get-uppdatering in i terminalen.

Nu kan vi gå vidare till att få vår Pi att prata med vår krets.

Testa vår installation

Till att börja med, låt oss kontrollera vår krets med ett enkelt program. Om du är övertygad om att du har kopplat upp allting hittills kan du hoppa över detta steg, men jag skulle rekommendera det eftersom det kan spara huvudvärk senare.

Om du aldrig har programmerat i Python tidigare och känner dig lite skrämd, finns det en mängd bra webbplatser De 5 bästa webbplatserna för att lära sig Python-programmeringVill du lära dig Python-programmering? Här är de bästa sätten att lära sig Python online, av vilka många är helt gratis. Läs mer som kan hjälpa dig komma igång.

Skapa ett nytt skript i terminalen:

nano test.py

När du är öppen lägger du till den här koden i filen och trycker på Ctrl-C för att avsluta genom att spara dialogen:

# Den här koden har skrivits för en artikel på www. MakeUseOf.com av Ian Buckley. importera 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) medan True: GPIO.output (7, GPIO.HIGH) if (GPIO.input (11) == 1): print ("Knapp på GPIO 11") time.sleep (1) ) om (GPIO.input (13) == 1): print ("Knapp på GPIO 13") time.sleep (1) if (GPIO.input (15) == 1): print ("Button on GPIO 15") time .söm (1) GPIO.cleanup ()

Denna kod läser värdet på knapparna och skrivs ut på skärmen när de ändras. De två tryckknapparna har neddragningsmotstånd, så de rapporterar HÖG när de trycks ned. Vagnmagnetomkopplaren rapporterar HÖG när dess tillhörande magnet är nära.

switchar

Kör programmet:

python test.py

Du bör se lysdioden tända och en rapport till skärmen när du trycker på dina två knappar och drar magneten bort från vassbrytaren. Om du inte får feedback när du trycker på knappar, kontrollera dina kretsar igen och se till att allt är anslutet som det borde vara. När du är klar med testen trycker du på CTRL-C för att stoppa programmet.

testa

Nu kan vi sätta ihop ett enkelt program för att ställa in, trigga och återställa vår dörrsensor. Vi kommer att gå igenom koden i delar och kort förklara vad varje del gör, men om du vill se den fullständiga koden rullar du ned för att se den presenteras i sin helhet.

Vi måste börja med att importera några moduler:

importera Rpi. GPIO som GPIO. importera pygame.mixer. importtid. 

Vi kommer att använda pygame modul för att spela vår musik. Det levereras som standard med Raspbian Jessie, och är ett fantastiskt bibliotek för allt du behöver för att göra Python-spel och många andra fantastiska projekt Hur man bygger en Raspberry Pi Twitter BotTwitter är världens största arkiv med korta meddelanden från människor med ingenting att säga - och nu du kan också bidra till det episka projektet med en automatiserad Twitter-bot som drivs av din Hallon... Läs mer .

Vi kommer att använda en variabel som heter aktiva att avgöra om vårt system är aktivt eller inte. Låt oss definiera ett par funktioner som gör detta för oss:

def activeSetup (): global aktiv aktiv = 0 skriv ut ("För närvarande inte aktiv") def activeState (): global aktiv om aktiv == 1: aktiv = 0 GPIO.output (7, GPIO.LOW) utskrift ("För närvarande inte aktiv") elif active == 0: print ("Aktiverar på 10 sekunder") för x inom intervallet (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) tryck ("För närvarande Aktiv ") annat: tillbaka. 

Den första funktionen här skapar en variabel som heter aktiva, och sätter den till 0. Att ge det aktiva tillståndet ett numeriskt värde betyder att om du planerar att senare skala upp ditt program för att ha olika aktiva tillstånd kan du numera dem i enlighet därmed. Även om det kanske inte är den bästa Python-programmeringen i världen, räcker det mer än detta projekt.

Den andra funktionen när den anropas kontrollerar om systemet är aktivt (eller aktiv == 1). Om så är fallet sätter det systemet på att inte vara aktivt (aktiv == 0), stänger av lysdioden och skriver ut till konsolen. Om det inte är det, ger det dig en tio sekunders nedräkning för att lämna rummet där lysdioden blinkar, innan du fortsätter för att visa att systemet är aktivt.

Nu kan vi definiera en funktion som kommer att titta på vår reed magnet switch:

def watchDoor (): global spelning = Falsk medan sant: om aktiv == 1 och GPIO.input (15) == 1 och spelar == Falsk: spelar = sant pygame.mixer.music.play () om GPIO.input (13) == 1: print ("Stoppknappen trycks in: Exiting") pygame.mixer.music.stop () bryt om GPIO.input (11) == 1: activeState () time.sleep (0.5)

Vi skapar en annan variabel här kallad spelar - det här är helt enkelt för att stoppa programmet som försöker börja spela upprepade gånger när omkopplaren utlöses.

Inuti stundslingan startar den första om uttalandet musiken (som vi inte har något ännu, men inte att oroa dig, den kommer). Den låter bara musiken starta om systemet är aktivt, reed-omkopplaren är öppen och den inte redan spelas upp.

Det andra om uttalandet är för vår utgångsknapp. Om du trycker på den här knappen stannar musiken och programmet avslutas.

Den tredje ifrågasättningen är för att växla om systemet är aktivt eller inte. De time.sleep funktionen här är att förhindra läsning av flera knappar när den trycks ned.

Nu är det dags att ställa in Pi: s stift.

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)

Om du har gjort några experiment med Pi innan detta bör vara bekant för dig. De initiala = GPIO.LOW argumentet i pin 7: s inställning sätter det till lågt så snart det initialiseras.

Nu kan vi kalla vår funktion som gör att systemet inte ska vara aktivt när programmet startar.

activeSetup ()

Music Maestro!

Vid denna punkt bör vi börja tänka på musiken att spela. Du kan välja vilken musikfil du vill, men vi ska välja något tillgängligt för alla för tillfället. Om du tittar på YouTube är du förmodligen redan bekant med Kevin MacLeods musik. Låter ner en fantastisk melodi av honom som heter “Enögd Maestro”. Detta, tillsammans med mycket av musiken på hans webbplats, är licensierat under Creative Commons, och det finns det många goda skäl Vad är Creative Commons och icke-kommersiellt bruk?Vad är Creative Commons? Vad betyder "icke-kommersiell användning"? Läs mer om Creative Commons-licenser och hur de fungerar. Läs mer att använda innehåll med dessa licenser för dina projekt.

wget

Tillbaka i vår kod måste vi starta Pygame-blandaren och ladda vår melodi.

pygame.mixer.init (44100, -16,2,1024) pygame.mixer.music.set_volume (1.0) name = "Enögd Maestro.mp3" pygame.mixer.music.load (namn) print ("Loaded track -" + str (namn))

Den första raden i detta block initierar pygame mixer. Det sista argumentet inom parentes är bufferten som styr latensen där ljudet spelas upp. Om du upplever hackig uppspelning senare när din musik spelas, kan du försöka öka detta nummer till 4096. Inställningarna fungerar utan problem på en Pi 3.

Om du laddade ner din musikfil till en annan katalog än din door.py program, måste du ange hela sökvägen inom parentes när du definierar namnvariabeln.

Nu behöver vi bara ställa in en slinga som väntar på att vi antingen ställer in programmet aktivt eller avslutar det.

medan True: if (GPIO.input (13) == 1): print ("Stop-knappen tryckt: Exiting") pygame.mixer.music.stop () break if (GPIO.input (11) == 1): activeState () time.sleep (0.5) if (active == 1): watchDoor () break GPIO.cleanup ()

Detta medan slingan väntar på en ingång från endera knappen, och avslutar eller ändrar tillståndet till aktivt därefter. Om aktivt tillstånd blir 1, då watchDoor funktion som vi definierade tidigare kommer att ringas och nästa gång dörren öppnas kommer vår melodi att spelas. Vi ringer också GPIO.cleanup () att återställa våra stift vid utgången, vilket i allmänhet är en bra praxis för all programmering på Raspberry Pi.

Det är allt vi behöver göra för att få detta projekt igång, här är koden i sin helhet:

importera RPi. GPIO som GPIO. importera pygame.mixer. importtid def activeSetup (): global aktiv aktiv = 0 utskrift ("För närvarande inte aktiv") def aktivStat (): global aktiv om aktiv == 1: aktiv = 0 GPIO.output (7, GPIO.LOW) tryck ("För närvarande Inte Aktiv ") elif active == 0: print (" Aktiverar på 10 sekunder ") för x inom intervallet (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) tryck ("Aktuellt aktiv") annars: return def watchDoor (): global spelning = False medan True: om aktiv == 1 och GPIO.input (15) == 1 och spelar == False: spelar = sant pygame.mixer.music.play () om GPIO.input (13) == 1: print ("Stoppknappen trycks in: Exiting") pygame.mixer.music.stop () bryt om 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ögd Maestro.mp3" pygame.mixer.music.load (namn) print ("Loaded track -" + str (namn)) medan True: if (GPIO.input (13) == 1): print ("Stop-knappen tryckt: Exiting") pygame.mixer.music.stop () break if (GPIO.input (11) == 1): activeState () time.sleep (0.5) if (active == 1): watchDoor () break GPIO.cleanup ()

Om du rullade ned här för att ta tag i hela koden direkt, kom ihåg att du fortfarande måste ladda ner musiken till din Pi för att den ska fungera!

Nu bör du ha en fungerande välkomsthemsteman! Sätt fast vassbrytaren på dörren och prova den. Pinsamt dans är valfritt men rekommenderas.

Detta projekt omfattade grunderna för många former av hemövervakning, säkerhet och automatisering, och förhoppningsvis var det roligt också!

Nu när du har kommit så långt, varför stanna där? Du kan lägga till fler spår och låta programmet välja slumpmässigt från en lista. Du kunde lägg till ett relä Komma igång med GPIO på en hallonpiOm du trots att Arduino var cool, vänta bara tills du får tag på en Raspberry Pi - dessa saker är fantastiska. Förutom att de är en fullt fungerande dator, har de också en ... Läs mer och få andra objekt att triggas vid posten. Om du har ett hemmamusiksystem, varför inte ha en temalåt för varje rum?

reläbelysning

Kommer du att utforma ditt eget personliga välkomsthemskap? Har du varit uppfinningsrik med vassbrytare i ditt hem på andra sätt? Om så är fallet, lämna en kommentar om vad du planerar eller redan har gjort i kommentarerna nedan!

Ian Buckley är frilansjournalist, musiker, artist och videoproducent bosatt i Berlin, Tyskland. När han inte skriver eller på scenen tänker han på DIY-elektronik eller kod i hopp om att bli en gal forskare.