Advertentie

Altijd al eens persoonlijk thuis willen komen? Met een Raspberry Pi en een paar eenvoudige componenten kan dat! In dit eenvoudige project gebruiken we een reed-schakelaar om een ​​themaliedje te activeren wanneer een deur wordt geopend. We zullen hier een Raspberry Pi gebruiken als controller, hoewel je bijna elke controller zou kunnen gebruiken andere microcontroller $ 5 microcontrollers: Arduino, Raspberry Pi Zero of NodeMCU?Vroeger moest je, als je een computer wilde hebben, je huis opnieuw inleveren om ervoor te betalen. Nu kunt u er een krijgen voor een Abraham Lincoln. Lees verder 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 ongeveer $ 2-3 is, of je kunt een pakket van 5 krijgen voor iets meer dan $ 8 hier.

  • Een Raspberry Pi (elk model werkt hiervoor).
  • 1 x 220 Ohm weerstand.
  • 1 x 1K Ohm-weerstand.
  • 3 x 10K Ohm weerstand.
  • 1 x magnetische reed-schakelaar.
  • instagram viewer
  • 1 x LED.
  • 2 x drukknopschakelaar.
  • Broodplank.
  • Aansluitkabels.
  • Luidspreker voor computer of iets dergelijks.

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

Dit project, hoewel voornamelijk gemaakt voor de lol, behandelt de basis voor veel toepassingen in DIY domotica Home Automation Guide Met Raspberry Pi en ArduinoDe markt voor domotica wordt overspoeld met dure consumentensystemen, onderling onverenigbaar en kostbaar om te installeren. Als je een Raspberry Pi en een Arduino hebt, kun je in principe hetzelfde bereiken met ... Lees verder en ook DIY-huisbeveiliging Op zoek naar een doe-het-zelf beveiligingssysteemoplossing? Probeer een van dezeIn het tijdperk van digitale technologie en altijd aangesloten hardware, zou het opzetten van een huisbeveiligingssysteem de kunst moeten overstijgen om een ​​alarmvormige doos aan de muur te hangen. Lees verder

Ermee beginnen

Laten we beginnen met het maken van ons circuit. Zorg ervoor dat je Pi geen stroom krijgt en stel je circuit als volgt in:

Fritzing geannoteerd hoofdkantoor

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

pin diagram

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

Terwijl u dit project test, kan het helpen om uw reed-schakelaar voor u te houden, zodat u deze gemakkelijk kunt in- of uitschakelen. In dit geval was de reedschakelaar al boven de deur gemonteerd. Zodra uw project is gestart, kunt u de schakelaar tijdelijk met uw deur bevestigen tape, of als u meer zelfvertrouwen heeft, kunt u deze permanent bevestigen voor toekomstig gebruik projecten!

reed-schakelaar geïnstalleerd

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

hele setup correct

Merk op dat het breadboard dat hier wordt gebruikt, de stroomrails heeft, andersom naar het Fritzing-diagram hierboven.

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

Voordat u begint, is het de moeite waard om te controleren of u up-to-date bent. Type sudo apt-get update in de terminal.

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

Onze opstelling testen

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

Als je nog nooit in Python hebt geprogrammeerd en je een beetje ontmoedigd voelt, zijn er een groot aantal geweldige websites De 5 beste websites om Python-programmeren te lerenWilt u Python-programmeren leren? Hier zijn de beste manieren om Python online te leren, waarvan er vele volledig gratis zijn. Lees verder waarmee u aan de slag kunt.

Maak in de terminal een nieuw script:

nano test.py

Eenmaal geopend, voegt u deze code toe aan het bestand en drukt u op Ctrl-C om af te sluiten, volgens het dialoogvenster voor opslaan:

#Deze code is geschreven voor een artikel op www. MakeUseOf.com door Ian Buckley. importeer RPi. GPIO als GPIO. importeer tijd. 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) terwijl True: GPIO.output (7, GPIO.HIGH) if (GPIO.input (11) == 1): print ("Button on GPIO 11") time.sleep (1 ) als (GPIO.input (13) == 1): print ("Button on GPIO 13") time.sleep (1) if (GPIO.input (15) == 1): print ("Button on GPIO 15") tijd .slaap (1) GPIO.cleanup ()

Deze code leest de waarde van de knoppen en wordt op het scherm afgedrukt wanneer ze veranderen. De twee drukknoppen hebben neertrekweerstanden, dus ze rapporteren HOOG wanneer ze worden ingedrukt. De reed-magneetschakelaar meldt HOOG wanneer de bijbehorende magneet dichtbij is.

schakelaars

Voer het programma uit:

python test.py

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

test

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

We moeten beginnen met het importeren van enkele modules:

importeer Rpi. GPIO als GPIO. importeer pygame.mixer. importeer tijd. 

We zullen de gebruiken Pygame module om onze muziek af te spelen. Het wordt standaard geleverd met Raspbian Jessie en is een geweldige bibliotheek voor alles wat je nodig hebt voor het maken van Python-spellen en vele andere geweldige projecten Hoe een Raspberry Pi Twitter Bot te bouwenTwitter is 's werelds grootste opslagplaats van korte berichten van mensen die niets te zeggen hebben - en nu ook jij kunt bijdragen aan dat epische project met een geautomatiseerde Twitter-bot, mogelijk gemaakt door jouw Framboos... Lees verder .

We gaan een variabele gebruiken actief om te beslissen of ons systeem actief is of niet. Laten we een paar functies definiëren die dit voor ons zullen doen:

def activeSetup (): globaal actief actief = 0 print ("Momenteel niet actief") def activeState (): globaal actief indien actief == 1: actief = 0 GPIO.output (7, GPIO.LOW) print ("Momenteel niet actief") elif active == 0: print ("Activering in 10 seconden") voor x binnen bereik (0,10): GPIO.output (7, GPIO.HIGH) time.sleep (0.5) GPIO.output (7, GPIO.LOW) time.sleep (0.5) actief = 1 GPIO.output (7, GPIO.HIGH) print ("Momenteel Actief ") anders: terug. 

De eerste functie hier creëert een variabele met de naam actief, en zet het op 0. Als u de actieve status een numerieke waarde geeft, betekent dit dat als u van plan bent uw programma later op te schalen naar verschillende actieve staten, u deze dienovereenkomstig kunt nummeren. Hoewel het misschien niet de beste Python-programmering ter wereld is, zal het meer dan voldoende zijn voor dit project.

De tweede functie die wordt aangeroepen, controleert of het systeem actief is (of actief == 1). Als dit het geval is, wordt het systeem ingesteld op niet actief (actief == 0), schakelt de LED uit en drukt af naar de console. Als dit niet het geval is, krijgt u 10 seconden de tijd om de kamer waarin de LED knippert te verlaten, voordat u blijft branden om aan te geven dat het systeem actief is.

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

def watchDoor (): global playing playing = False while True: if active == 1 en GPIO.input (15) == 1 en playing == False: playing = True pygame.mixer.music.play () als GPIO.input (13) == 1: print ("Stop-knop ingedrukt: afsluiten") pygame.mixer.music.stop () breken als GPIO.input (11) == 1: activeState () time.sleep (0.5)

We creëren hier een andere variabele genaamd spelen - dit is er gewoon om te voorkomen dat het programma herhaaldelijk begint te spelen wanneer de schakelaar wordt geactiveerd.

Binnen de while-lus start de eerste if-instructie de muziek (die we nog niet hebben, maar maak je geen zorgen, deze komt eraan). Het laat de muziek alleen starten als het systeem actief is, de reed-schakelaar open is en niet al speelt.

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

De derde if-instructie is om te schakelen of het systeem actief is of niet. De tijd. slaap functie hier is om te voorkomen dat meerdere knoppen worden gelezen wanneer deze wordt ingedrukt.

Nu is het tijd om de pinnen van Pi in te stellen.

GPIO.setmode (GPIO.BOARD) GPIO.setup (7, GPIO.OUT, initiaal = 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. De initial = GPIO.LOW argument in de setup van pin 7 zet het op laag zodra het wordt geïnitialiseerd.

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

activeSetup ()

Muziek Maestro!

Op dit punt moeten we beginnen na te denken over de muziek die moet worden afgespeeld. U kunt elk gewenst muziekbestand kiezen, maar we zullen voorlopig iets kiezen dat voor iedereen beschikbaar is. Als je YouTube kijkt, ben je waarschijnlijk al bekend met de muziek van Kevin MacLeod. Laten we een fantastisch deuntje van hem downloaden, genaamd "Eenogige Maestro". Dit, samen met veel van de muziek op zijn site, is in licentie gegeven onder Creative Commons, en die zijn er veel goede redenen Wat is Creative Commons en niet-commercieel gebruik?Wat is Creative Commons? Wat betekent "niet-commercieel gebruik"? Lees meer over Creative Commons-licenties en hoe ze werken. Lees verder om inhoud met deze licenties te gebruiken voor uw projecten.

wget

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 = "Eenogige Maestro.mp3" pygame.mixer.music.load (naam) print ("Loaded track -" + str (naam))

De eerste regel van dit blok initieert de Pygame mixer. Het laatste argument tussen haakjes is de buffer die de latentie bepaalt waarin het geluid wordt afgespeeld. Als u later een schokkerige weergave ervaart wanneer uw muziek wordt afgespeeld, kunt u proberen dit aantal te verhogen tot 4096. De instellingen zoals ze zijn werken zonder problemen op een Pi 3.

Als je je muziekbestand hebt gedownload in een andere map dan je door.py programma, moet u het volledige pad tussen de haakjes opgeven wanneer u de naamvariabele definieert.

Nu hoeft u alleen nog maar een lus op te zetten die wacht tot we het programma actief hebben of het afsluiten.

while True: if (GPIO.input (13) == 1): print ("Stop-knop ingedrukt: afsluiten") pygame.mixer.music.stop () breken als (GPIO.input (11) == 1): activeState () time.sleep (0,5) als (actief == 1): watchDoor () breken GPIO.cleanup ()

Deze while-lus wacht op invoer van een van beide knoppen en sluit af of wijzigt de status dienovereenkomstig. Als de actieve status 1 wordt, dan is de watchDoor functie die we eerder hebben gedefinieerd, wordt gebeld en de volgende keer dat de deur opengaat, zal ons deuntje spelen. We bellen ook GPIO.cleanup () om onze pinnen bij het afsluiten te resetten, wat over het algemeen een goede gewoonte is voor alle programmering op de Raspberry Pi.

Dat is alles wat we moeten doen om dit project aan de gang te krijgen, hier is de volledige code:

importeer RPi. GPIO als GPIO. importeer pygame.mixer. importtijd def activeSetup (): globaal actief actief = 0 print ("Momenteel niet actief") def activeState (): globaal actief indien actief == 1: actief = 0 GPIO.output (7, GPIO.LOW) print ("Momenteel Niet Actief ") elif active == 0: print (" Activering in 10 seconden ") voor x binnen bereik (0,10): GPIO.output (7, GPIO.HIGH) time.sleep (0.5) GPIO.output (7, GPIO.LOW) time.sleep (0.5) actief = 1 GPIO.output (7, GPIO.HIGH) print ("Momenteel actief") anders: return def watchDoor (): global playing playing = False while True: if active == 1 en GPIO.input (15) == 1 en playing == False: spelen = waar pygame.mixer.music.play () als GPIO.input (13) == 1: print ("Stop-knop ingedrukt: afsluiten") pygame.mixer.music.stop () breken als GPIO.input (11) == 1: activeState () time.sleep (0.5) GPIO.setmode (GPIO.BOARD) GPIO.setup (7, GPIO.OUT, initiaal = 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 = "Eenogige Maestro.mp3" pygame.mixer.music.load (naam) print ("Loaded track -" + str (name)) terwijl True: if (GPIO.input (13) == 1): print ("Stop-knop ingedrukt: afsluiten") pygame.mixer.music.stop () break if (GPIO.input (11) == 1): activeState () time.sleep (0.5) if (active == 1): watchDoor () break GPIO.cleanup ()

Als je hier naar beneden hebt gescrold om de volledige code meteen te pakken, houd er dan rekening mee dat je de muziek nog steeds naar je Pi moet downloaden om te kunnen werken!

Nu zou u een functionerend welkomstthema moeten hebben! Bevestig uw reedschakelaar aan uw deur en probeer het uit. Gênant dansen is optioneel, maar wordt aanbevolen.

Dit project omvatte de basis voor vele vormen van bewaking, beveiliging en automatisering van huizen en was hopelijk ook leuk!

Nu u zover bent gekomen, waarom zou u daar dan stoppen? U kunt meer nummers toevoegen en het programma er willekeurig een uit een lijst laten kiezen. Jij kunt voeg een relais toe Aan de slag met GPIO op een Raspberry PiAls je dacht dat de Arduino cool was, wacht dan maar tot je een Raspberry Pi in handen hebt - deze dingen zijn geweldig. Ze zijn niet alleen een volledig functionele computer, maar hebben ook een ... Lees verder en andere objecten laten activeren bij binnenkomst. Als je een thuismuzieksysteem hebt, waarom zou je dan niet voor elke kamer een themalied hebben?

relaisverlichting

Ontwerpt u uw eigen persoonlijke welkomstbericht voor thuis? Ben je op andere manieren inventief geweest met reed-schakelaars in je huis? Zo ja, laat dan een opmerking achter over wat u van plan bent of al heeft gedaan in de opmerkingen hieronder!

Ian Buckley is freelance journalist, muzikant, artiest en videoproducent en woont in Berlijn, Duitsland. Als hij niet schrijft of op het podium staat, sleutelt hij aan doe-het-elektronica of code in de hoop een gekke wetenschapper te worden.