Speel je eigen themafunctie wanneer je de kamer met Raspberry Pi betreedt

Heb je ooit thuis willen komen voor een persoonlijk welkom? In dit eenvoudige Raspberry Pi-project gebruiken we een reed-schakelaar om een ​​deuntje te activeren wanneer een deur wordt geopend.

Heb je ooit thuis willen komen voor een persoonlijk welkom?  In dit eenvoudige Raspberry Pi-project gebruiken we een reed-schakelaar om een ​​deuntje te activeren wanneer een deur wordt geopend.
Advertentie

Heb je ooit thuis willen komen voor een persoonlijk welkom? Met een Raspberry Pi en een paar eenvoudige componenten, kunt u! In dit eenvoudige project gebruiken we een reed-schakelaar om een ​​themafoon te activeren wanneer een deur wordt geopend. We zullen hier een Raspberry Pi als controller gebruiken, hoewel je bijna elke andere microcontroller $ 5 Microcontrollers zou kunnen gebruiken: Arduino, Raspberry Pi Zero of NodeMCU? $ 5 Microcontrollers: Arduino, Raspberry Pi Zero of NodeMCU? Vroeger moest je, als je een computer wilde hebben, je huis opnieuw betalen om het te betalen. Nu kunt u er een krijgen voor een Abraham Lincoln. Lees Meer voor dit project met hetzelfde circuit. Hier is een demo.

Je zal nodig hebben

Je hebt waarschijnlijk al alle onderdelen die je nodig hebt om dit te maken, behalve de reed-schakelaar, die rond de $ 2-3 ligt, of je kunt hier een pakket van 5 krijgen voor iets meer dan $ 8.

  • Een Raspberry Pi (elk model zal hiervoor werken).
  • 1 x 220 Ohm weerstand.
  • 1 x 1K Ohm weerstand.
  • 3 x 10K Ohm weerstand.
  • 1 x magnetische reed-schakelaar.
  • 1 x LED.
  • 2 x drukknopschakelaar.
  • Breadboard.
  • Aansluitkabels.
  • Computerluidspreker of vergelijkbaar.

We gebruiken de Raspberry Pi om een ​​nummer te spelen wanneer de kamer wordt ingevoerd en ontwerpen een circuit met knoppen op ons breadboard om het met een vertraging te activeren en het programma te stoppen.

Dit project, hoewel voornamelijk gemaakt voor de lol, behandelt de basis voor vele toepassingen in doe-het-zelf domotica Home Automation Guide met Raspberry Pi en Arduino Home Automation Guide met Raspberry Pi en Arduino De domotica markt wordt overspoeld met dure consumentensystemen, incompatibel met één een andere en kostbaar om te installeren. Als je een Raspberry Pi en een Arduino hebt, kun je in principe hetzelfde bereiken op ... Lees meer en ook doe-het-zelf-beveiliging op huis Bent u op zoek naar een DIY Home Security System-oplossing? Probeer een van deze op zoek naar een doe-het-huis beveiligingssysteem oplossing? Probeer een van deze In het tijdperk van digitale technologie en altijd verbonden hardware, zou het opzetten van een huisbeveiligingssysteem de kunst van het plaatsen van een alarmvormige doos aan de muur overstijgen. Lees verder

Raspberry Pi 3 Model B Moederbord Raspberry Pi 3 Model B Moederbord Nu kopen bij Amazon $ 29, 99

Ermee beginnen

Laten we beginnen met het maken van ons circuit. Zorg ervoor dat je Pi niet-aangedreven is en stel je circuit zo in:

Fritzing geannoteerd hoofdkwartier

De LED is verbonden met pin 7 op onze pi. De twee drukknopschakelaars zijn bevestigd aan pennen 11 en 13 en de reed-schakelaar is verbonden met pen 15. Onze kracht gaat naar pen 1 (3v3) en pen 6 (Gnd).

pin diagram

Zorg ervoor dat u controleert of alles op de juiste plaats staat.

Terwijl je dit project aan het testen bent, kan het helpen om je reed-schakelaar voor je te houden, zodat je hem gemakkelijk kunt in- of uitschakelen. In dit geval was de reed-schakelaar al boven de deur geïnstalleerd. Zodra je project in gebruik is, kun je de schakelaar tijdelijk op je deur bevestigen met behulp van tape, of als je meer zelfvertrouwen hebt, kun je het meer permanent bevestigen voor gebruik in toekomstige projecten!

reed-schakelaar geïnstalleerd

Verbind de 3, 5 mm jack-uitgang van je Pi met je luidsprekersysteem. Als alles eenmaal is samengesteld, ziet het er ongeveer zo uit:

hele installatie correct

Merk op dat het hier gebruikte breadboard zijn power rails heeft, andersom naar het Fritzing diagram hierboven.

Schakel nu je Pi in en open hem via SSH, zodat we toegang hebben tot de terminal. Als u niet zeker weet hoe u dit moet doen, deze handleiding Uw Raspberry Pi instellen voor gebruik zonder hoofd met SSH Uw Raspberry Pi instellen voor gebruik zonder hoofd met SSH De Raspberry Pi kan SSH-opdrachten accepteren wanneer deze is aangesloten op een lokaal netwerk (via Ethernet of Wi-Fi), zodat u het gemakkelijk kunt instellen. De voordelen van SSH gaan verder dan het verstoren van de dagelijkse screening ... Read More kan u helpen. Als u uw Raspberry Pi gebruikt met een monitor, muis en toetsenbord, slaat u deze stap over en opent u de terminal.

Voordat u begint, is het de moeite waard om te controleren of u op de hoogte bent. Typ sudo apt-get update in de terminal.

Nu kunnen we doorgaan om onze Pi te laten praten met ons circuit.

Onze installatie testen

Om te beginnen, laat ons circuit controleren met behulp van een eenvoudig programma. Als je er zeker van bent dat je tot nu toe alles goed hebt aangesloten, kun je deze stap overslaan, hoewel ik het zou aanraden omdat het je later hoofdpijn kan besparen.

Als je nog nooit eerder in Python hebt geprogrammeerd en je een beetje ontmoedigd voelt, zijn er een groot aantal geweldige websites. De 5 beste websites om Python te leren programmeren De 5 beste websites om Python-programmering te leren In het afgelopen decennium is de programmeertaal van Python ontploft in populariteit onder programmeurs op alle gebieden van codering. Van webontwikkelaars tot videogamecollectors tot interne toolmakers, er zijn veel mensen gevallen ... Lees meer die u kunnen helpen van start te gaan.

Maak in de terminal een nieuw script:

 nano test.py 

Voeg na het openen deze code toe aan het bestand en druk op Ctrl-C om te stoppen, na het opslaan dialoogvenster:

 #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() 

Deze code leest de waarde van de knoppen en drukt naar het scherm wanneer ze veranderen. De twee drukknoppen hebben pull-down weerstanden, dus ze geven HOOG aan als ze worden ingedrukt. De reed-magneetschakelaar meldt HOOG wanneer de bijbehorende magneet dichtbij is.

switches

Start het programma:

 python test.py 

U zou de LED moeten zien oplichten en een melding op het scherm moeten krijgen wanneer u op uw twee knoppen drukt en de magneet wegtrekt van uw reed-schakelaar. Als je geen feedback krijgt wanneer je op de knoppen drukt, controleer je je circuits opnieuw en zorg je ervoor dat alles is aangesloten zoals het hoort. Als u klaar bent met testen, drukt u op CTRL-C om het programma te stoppen.

Nu kunnen we een eenvoudig programma samenstellen om onze deursensor in te stellen, te activeren en opnieuw in te stellen. We zullen de code in delen bespreken en in het kort uitleggen wat elk onderdeel doet, maar als je de volledige code wilt zien, scroll dan naar beneden om het volledig gepresenteerd te zien.

We moeten beginnen met het importeren van enkele modules:

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

We zullen de Pygame- module gebruiken om onze muziek te spelen. Het komt standaard met Raspbian Jessie en is een geweldige bibliotheek voor alles wat je nodig hebt voor het maken van Python-games en vele andere fantastische projecten. Hoe een Raspberry Pi te bouwen Twitter Bot Hoe een Raspberry Pi te bouwen Twitter Bot Twitter is 's werelds grootste opslagplaats voor korte berichten van mensen met niets te zeggen - en nu kun jij ook een bijdrage leveren aan dat epische project met een geautomatiseerde Twitter-bot, mogelijk gemaakt door je Raspberry ... Lees meer.

We gaan een variabele gebruiken die actief wordt genoemd om te bepalen of ons systeem actief is of niet. Laat een paar functies definiëren die dit voor ons zullen doen:

 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 

De eerste functie maakt hier een variabele met de naam active en stelt deze in op 0. Als u de actieve status een numerieke waarde geeft, betekent dit dat als u van plan bent om uw programma later op te schalen om verschillende actieve toestanden te hebben, u ze dienovereenkomstig kunt nummeren. Hoewel het misschien niet de beste Python-programmering ter wereld is, is het meer dan voldoende voor dit project.

De tweede functie bij het oproepen controleert of het systeem actief is (of actief == 1 ). Als dit het geval is, wordt het systeem ingesteld op niet actief ( actief == 0 ), wordt de LED uitgeschakeld en afgedrukt naar de console. Als dit niet het geval is, krijgt u een aftelling van 10 seconden om de ruimte te verlaten waarin de LED knippert, voordat deze blijft branden om aan te geven dat het systeem actief is.

Nu kunnen we een functie definiëren die onze reed-magneetschakelaar bekijkt:

 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) 

We maken hier een andere variabele genaamd spelen - dit is er gewoon om het programma te stoppen proberen herhaaldelijk te spelen wanneer de schakelaar wordt geactiveerd.

In de while-loop start de eerste if-opdracht de muziek (die we nog niet hebben, maar geen zorgen maken, die komt eraan). Het laat alleen de muziek starten als het systeem actief is, de reed-schakelaar open is en het nog niet speelt.

De tweede if-instructie is voor onze exit-knop. Als u op deze knop drukt, stopt de muziek en wordt het programma afgesloten.

De derde if-instructie is om te schakelen tussen het feit of het systeem actief is of niet. De time.sleep- functie is hier om te voorkomen dat meerdere knoppen worden gelezen als erop wordt gedrukt.

Nu is het tijd om de pinnen van Pi op te zetten.

 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) 

Als je al eerder met de Pi hebt geëxperimenteerd, zou dit je bekend moeten voorkomen. Het argument initial = GPIO.LOW in de setup van pin 7 stelt het in op low zodra het wordt geïnitialiseerd.

Nu kunnen we onze functie bellen die ervoor zorgt dat het systeem niet actief wordt wanneer het programma start.

 activeSetup() 

Muziek Maestro!

Op dit punt moeten we gaan nadenken over de muziek die we moeten spelen. Je kunt elk gewenst muziekbestand kiezen, maar we zullen voorlopig voor iedereen iets kiezen dat voor iedereen beschikbaar is. Als je naar YouTube kijkt, ben je waarschijnlijk al bekend met de muziek van Kevin MacLeod. Laat een fantastisch deuntje van hem downloaden met de naam "One-eyed Maestro". Dit, samen met een groot deel van de muziek op zijn site, is gelicenseerd onder Creative Commons, en er zijn veel goede redenen Wat is Creative Commons en moet je het gebruiken? Wat is Creative Commons en moet je het gebruiken? Creative Commons is een verzameling licenties die u automatisch toestemming geeft om verschillende dingen te doen, zoals hergebruik en distributie van de inhoud. Laten we er meer over te weten komen en hoe het te gebruiken. Lees meer om inhoud met deze licenties te gebruiken voor uw projecten.

Terug in onze code moeten we de Pygame-mixer starten en ons deuntje laden.

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

De eerste regel van dit blok initieert de Pygame- mixer. Het laatste argument tussen haakjes is de buffer die de latentie regelt waarin het geluid wordt afgespeeld. Als je later tijdens het afspelen van de muziek een schokkerige weergave ervaart, probeer dan dit nummer te verhogen naar 4096. De instellingen werken zonder problemen op een Pi 3.

Als u uw muziekbestand hebt gedownload naar een andere map naar uw deur.py- programma, moet u het volledige pad tussen de haakjes opgeven wanneer u de naamvariabele definieert.

Nu hoeft u alleen nog een lus in te stellen die wacht op ons om het programma actief te maken of het programma te verlaten.

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

Deze while-lus wacht op een invoer van een van beide knoppen en verlaat of wijzigt de status dienovereenkomstig. Als de status van actief 1 wordt, wordt de functie watchDoor die we eerder hebben gedefinieerd gebeld en de volgende keer dat de deur opent, wordt onze melodie afgespeeld. We noemen ook GPIO.cleanup () om onze pinnen bij afsluiten te resetten, wat over het algemeen een goede oefening is voor alle programmering op de Raspberry Pi.

Dat is alles wat we moeten doen om dit project operationeel te krijgen, hier is de code volledig:

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

Als je hierheen bent gescrold om de volledige code meteen te pakken, moet je er rekening mee houden dat je de muziek nog steeds op je Pi moet downloaden voordat deze werkt!

Nu zou je een goed functionerend welkomthema moeten hebben! Bevestig uw reed-schakelaar aan uw deur en probeer het uit. Gênant dansen is optioneel, maar wordt aanbevolen.

Dit project behandelde de basis voor vele vormen van thuismonitoring, beveiliging en automatisering, en hopelijk was het ook leuk!

Nu dat je zover bent gekomen, waarom zou je daar stoppen? Je zou meer nummers kunnen toevoegen en het programma willekeurig uit een lijst kunnen kiezen. Je zou een relais kunnen toevoegen. Aan de slag met GPIO Op een Raspberry Pi Aan de slag met GPIO Op een Raspberry Pi Als je de Arduino cool vond, wacht dan even tot je een Raspberry Pi hebt gevonden - deze dingen zijn geweldig. Behalve dat het een volledig functionele computer is, hebben ze ook een ... Lees Meer en worden andere objecten geactiveerd bij binnenkomst. Hebt u een muzieksysteem voor thuis, waarom heeft u dan geen themalied voor elke kamer?

Ga je je eigen persoonlijke welkomstboodschap ontwerpen? Ben je op andere manieren inventief geweest met reed-schakelaars in je huis? Zo ja, laat een reactie achter over wat je van plan bent of hebt gedaan in de comments hieronder!

In this article