Je kan op onze foto’s de PIR sensor zonder Fresnel lens zien, zo dat je goed kan zien dat er VCC, GND en Out staat. Dat is zeer belangrijk om te weten, want de VCC verbindt je met pin 2( 5volt Power)i, GND verbindt je met pin 20(GND) en OUT(GPIO 21) met pin 40. VCC en GND kan je zien als de positieve en negatieve polen van een schakeling met een batterij, waarbij VCC de positieve pool is en GND de negatieve pool(of de 0 volt pool) om de stroomkring te sluiten. Deze opstelling kun je koppelen aan het theoretisch beveiligingssysteem waar wij het eerder over hadden. Waarbij de PIR sensor nu als output dient en de Pi als input. De Fresnel lens is een lens die eigenlijk alle infrarode straling die de lens raakt, richt op de sensor van PIR sensor. De delay schroef hebben wij helemaal naar links gedraaid en de distance helemaal naar rechts. Delay is er om aan te geven hoelang de PIR sensor een output signaal afgeeft aan de Pi(0.3seconden-500 seconden) en de distance hoe gevoelig of hoe ver de sensor moet meten. De L en H modus die je zelf ook kunt aanpassen hebben we in de H modus gedaan, als die in de H modus is, zendt de sensor elke keer een signaal uit aan de Pi als er beweging, dat gebruiken wij. De sensor geeft dan 0.3 seconden lang een 3.3 volt signaal als er een verandering in de waargenomen infrarode straling optreedt. Verder kun je zien dat wij de kabels niet allemaal hebben geplaatst op GPIO poorten die dichtbij elkaar zijn, maar juist van elkaar af zodat er meer een overzicht is.
print “Start sensor…”
time.sleep(5)
print “Sensor geactiveerd…”
:Met print geef je aan dat er Start sensor op het scherm moet komen en time.sleep(5) betekent dat er dan 5 seconden niks gebeurt, daarna komt er op het scherm ‘Sensor geactiveerd’.
while True:
if GPIO.input(PIN):
print “Beweging gedetecteerd! ” + (time.strftime(“%H:%M:%S”))
Dat betekent dat als de Pi een 3.3 volt signaal van de PIR sensor ontvangt. komt er weer een print met”Beweging gedetecteerd!”. Daarna (time.strftime(“%H:%M:%S”)) dit geeft de huidige tijd aan op het scherm. Waardoor je dus beweging gedetecteerd met de tijdstip van de detectie op het scherm.
§4.11 Een e-mail versturen in Python
Na het starten van de Pi klik je links onderin, daarna op programma’s en als laatste op Python Idle 2.7(deze versie gebruikten wij). In Python drukten wij op maak een nieuw bestand en noemde het ‘Email test, daarna sla je die dus op als Emailtest.py’. Met wat hulp van het internet kwamen wij erachter dat de Pi standaard een manier had om een email te sturen. Je hoefde dus niks te downloaden. Hieronder zie je de code:
import smtplib
server = smtplib.SMTP(‘smtp.gmail.com’, 587)
server.starttls()
server.login(“Het e-mailadres van de Pi”, “Het wachtwoord van het e-mailadres van dePi”)
msg = “Er is beweging gedetecteerd!”
server.sendmail(“Het e-mailadres van de Pi”, “Het e-mailadres van de ontvanger”, msg)
server.quit()
—————————————————————————————————————————————
import smtplib: Hiermee importeer je de functie voor het versturen van een e-mail. Die functie zit ergens opgeslagen op de Pi. Als je deze regel niet hebt weet het Python bestand niet wat die moet doen.
server = smtplib.SMTP(‘smtp.gmail.com’, 587): De server die gebruikt wordt voor de gmail en 587 is het poortnummer voor het versturen van een email van de client naar de server(van google).
server.starttls(): starttls zorgt ervoor dat de email die je verstuurt geëncrypt is , dus beveiligd is. Zodat andere mensen niet zomaar het bericht kunnen onderscheppen.
server.login(“Je eigen email adres”, “Het wachtwoord van je eigen email adres”): Hier log je in op de server met je e mailadres en wachtwoord zoals je normaal ook doet. Je moet dus een nieuw e-mailaccount speciaal voor de Pi maken, die dan dienst als verstuurder
msg = “Jouw bericht dat je wilt versturen”: msg betekent message of bericht, hierin stel je het bericht op wat je wilt versturen.
server.sendmail(“Het e-mailadres van de Pi”, “Het e-mailadres van de ontvanger”, msg):Hier in staan dus de e-mailadressen van de verstuurder en ontvanger van de mail.
server.quit(): Hier stopt het e-mailscript.
Dit systeem maakt dus gebruik van een gmail adres, in plaats van een outlook of hotmail adres.
Voor het e-mail sturen moesten we dus een apart emailadres maken speciaal voor de Pi, om de e-mail naar één van onze adressen te sturen.
§4.12 Het afspelen van het alarm bestand via Python
Voor het afspelen van een mp3 alarm bestand bestand hebben we geen apart Python bestand gemaakt, omdat we de code daarvoor gewoon te klein vonden. Deze code hebben we gelijk achter het PIRTest.py bestand geplakt.
import os
os.system(“omxplayer Alarm.mp3”)
: Hier importeer je functies van het besturingssysteem van de Pi, want daarna zeg je os.system(“omxplayer Alarm.mp3”), omxplayer is een programma waarmee je audio bestanden kunt afspelen. Deze audio bestanden kun je afspelen door omxplayer 123.mp3 in te voeren als commando in de Pi terminal, de terminal in de Pi lijkt erg veel op command prompt van het besturingssysteem windows. Door os.system(“omxplayer Alarm.mp3”) in te voeren in het Python script zeg je eigenlijk precies hetzelfde zoals je ‘normaal’ in de terminal van de Pi zou invoeren om een audiobestand af te spelen.
§4.13 Alle Python bestanden in één
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
PIN = 40
GPIO.setup(PIN, GPIO.IN)
print “Start sensor…”
time.sleep(5)
print “Sensor geactiveerd…”
while True:
if GPIO.input(PIN):
print “Beweging gedetecteerd! ” + (time.strftime(“%H:%M:%S”))
import os
os.system(“omxplayer Alarm.mp3”)
import smtplib
server = smtplib.SMTP(‘smtp.gmail.com’, 587)
server.starttls()
server.login(“[email protected]”, “detectie2017”)
msg = “Er is beweging gedetecteerd!”
server.sendmail(“[email protected]”, “[email protected]”, msg)
server.quit()
Hier zie je dus dat wij alle vorige codes van de benodigde onderdelen van het beveiligingssysteem, in een Python bestand hebben gezet. Nadat de PIR sensor een signaal aan de Pi geeft, zal die dus eerst ‘Beweging gedetecteerd en de tijd van de detectie) op het scherm van de Pi zetten. Daarna zal die een mp3 alarm bestand afspelen via de speaker. Als laatste verstuurt de Pi een e-mail naar een van onze e-mailadressen. Waarom hebben wij deze bepaalde volgorde gebruikt? Wij gaan ervan uit dat het weergeven van detectie en de tijd ervan op het scherm 100% van de tijd zal gebeuren, het afspelen van een mp3 bestand ook. Maar het versturen van een e-mail waren wij niet altijd 100% zeker over. Om een e-mail te sturen heb je internet nodig, stel nou dat het internet het niet doet. Als wij dan de code voor de e-mail boven de code voor het alarm zetten zou het alarm nooit aangaan, omdat het versturen van een e-mail niet is uitgevoerd. Of als de servers van Google het druk hebben of uit zijn gevallen, dan wordt de e-mail niet verstuurd en kan de rest van de code niet uitgevoerd worden. Stap voor stap wordt dus elk onderdeel van de code na ‘while True:’ uitgevoerd. Er kan niet worden begonnen aan een ander onderdeel voordat het onderdeel daarvoor succesvol is afgerond.
§4.14 Remote desktop
Op school hadden wij de Pi via een HDMI kabel aan de monitor aangesloten, zodat wij beeld hadden van de Pi en konden kijken hoe de Pi. Maar thuis gekomen was dat een ander verhaal. Thuis had Irfaan wel een monitor maar daar was geen HDMI poort, dus konden we de PI niet daaraan verbinden. Wat we wel konden doen was om een hdmi naar vga adapter te kopen en zo de Pi aan de monitor aansluiten. Maar ja dat kost natuurlijk geld, en we wisten toen nog niet hoeveel geld we nog zouden mogen gebruiken voor ons budget.
Toevallig herinnerden wij ons dat je ook via een remote desktop een andere computer kan besturen op afstand met een andere computer en het beeld zien van die computer zonder de bestuurde computer überhaupt op een monitor aan te sluiten. Dus zochten wij online of je de Pi ook op afstand kan besturen met een windows computer via een remote desktop functie. Al snel zagen we talloze sites die uitlegden hoe het kon, daarna volgden wij een tutorial op youtube. Wij hadden al een netwerkkabel voor de Pi dus sloten wij deze via deze kabel aan de router. Op gebruik te maken van elke willekeurige remote desktop functie die er bestaat moet je het ip-adres van de computer die je wilt besturen weten.
Normaal kan je dan gewoon in de terminal ifconfig typen en dan op enter klikken dan zie je op de tweede regel staat inet addr:(je ip adres bijvoorbeeld inet addr:192.168.1.110). Maar wij konden dat niet doen omdat wij geen beeld hadden van de Pi. We zochten hiervoor naar een ip-adres scanprogramma en vonden Angry Ip Scanner , we downloadden de 32/64 bit versie. Als je op scan drukt doorzoekt die alle Ip-adressen die automatisch van ip-adres 169.254.0.0 to ip-adres 169.254.255.255. De meeste ip adressen van apparaten beginnen met 192.168…. dus als je in dit bereik gaat scannen zul je waarschijnlijk de Pi niet vinden. Om wel efficient te zoeken, dus niet dat je bereik te groot is en het scanproces te lang duurt zul je eerst even de gateway ip-adres van je router moeten weten, want alle apparaten die aan deze router zijn verbonden hebben een ip-adres wat groter is als de gateway ip adres. Om de gateway ip-adres van onze router te vinden hebben we command prompt gebruikt, dat is ongeveer hetzelfde als de terminal van de Pi maar dan voor windows. We openden het programma en typten in ipconfig en drukten op enter. Toen zochten we naar default gateway en vonden die. Het was 192.168.1.1, dus het ip-adres van de Pi moest bijvoorbeeld 192.168.1.20 of 192.168.1.11 zijn en niet 192.168.0.1 of zoiets.
We typten bij de ip range 192.168.1.1 tot 192.168.1.100. We vonden geen Pi staan of onze eigen computer,dus vergrootten we het bereik naar 192.168.1.200. Met veel blijdschap vonden we het IP: 192.168.1.143, met hostname:raspberrypi.local. We installeerden Putty , dat is een programma waarmee een remote desktop connection kan worden maken met de Pi. Daarna downloadden we Putty en installeerden we het. Hier moesten we nog het ip-adres van de Pi invoeren, daarna we typten we bij ‘saved sessions’ Raspberry in en drukten op save, om de volgende keer niet nog eens het ip-adres van de Pi in te voeren.
§4.15 Grafische gebruikersinterface
We kwamen terecht in de terminal van de Pi, hier konden we dus allerlei commando’s invoeren in de command-line interface en dan zou de Pi die uitvoeren. Maar wij wilden graag de grafische gebruikersinterface zien. Bij het vak informatica hadden wij al geleerd wat voor soorten gebruikersinterfaces er zijn, namelijk een interface waar je een commando uitvoert om een applicatie te openen of iets te veranderen(command-line interface). Of je hebt een interface die grafisch is(grafische gebruikers interface), waar je icoontjes een startmenu en bureaublad hebt. Een goed voorbeeld van een grafische gebruikersinterface is windows, daar heb je linksonder een startmenu waarin je van alles kunt doen en overal heb je icoontjes aan je taakbalk en op je bureaublad.
Om de grafische gebruikersinterface op onze computer te krijgen, moesten we nog een ander programma downloaden, Xming . Na het downloaden en installeren van het programma moesten we de locatie van het programma veranderen naar “C:Program Files (x86)XmingXming.exe” :0 -clipboard -rootless. Dat deden we door met de rechtermuisknop op het icoontje van Xming te drukken. En daar locatie te veranderen naar datgene wat hierboven staat. Verder moesten we nog wat aanpassen bij het programma Putty om die te laten communiceren met Xming. Bij Putty moet je links by category naar connection, dan SSH en als laatste X11. Bij X11 vink je ‘Enable X11 forwarding’.
Om dan de grafische gebruikersinterface van de Pi te krijgen op je computer, moet je voordat je Putty opent eerst Xming openen, als die geopend is moet je naar je saved sessions(dat was Raspberry) en klik je daarop. Daarna moesten we nadat de terminal opgestart was startlxde” intypen en enter drukken. Hierna komt er een apart venster met de grafische interface van de Pi. Xming zorgt er dus voor dat je de grafische gebruikersomgeving Nu zie je de Pi zoals je die normaal ook ziet als je die op een scherm aansluit. Xming zorgt er dus voor dat de grafische gebruikersomgeving van de Pi op je computer te zien is via het Putty programma. De terminal venster wat je eerst had(waar je startlxde intypte).
§4.16 Hoe gebruik je het beveiligingssysteem en werkt het?
Een aantal bladzijdes terug je dus dat wij alle code in een bestand hebben gedaan en hebben opgeslagen. Om het beveiligingssysteem aan te doen ga je simpelweg naar de terminal van de Pi en typ je in “Python bestand.py”. Ons uiteindelijke bestand noemden we BS.py, BS staat voor beveiligingssysteem. Nadat je op enter hebt gedrukt komt er start sensor en sensor geactiveerd in de terminal. Vanaf dan kan er alarm aangaan en een e-mail worden gestuurd bij detectie van beweging.
Voor de PWS presentatie hebben wij en snel filmpje gemaakt om te demonstreren dat het beveiligingssysteem ook daadwerkelijk werkt. Maar toen lieten we zien dat het systeem op korte afstand kon detecteren. Eigenlijk hadden we daarvoor al in lokaal 229 gekeken of de sensor wel een bereik heeft van 7 meter zoals bij de specificaties staat. Een precieze meting hadden we niet gedaan, maar we konden wel zien dat ie verder kon dan we dachten. De 7 meter is in theorie, in de praktijk zal dat waarschijnlijk anders zijn.
Het systeem detecteert in een ogenblik een mogelijke inbreker en laat dan gelijk het alarm bestand afspelen. Het alarm bestand duurt zo’n 9 seconden, daarna wordt er gelijk een e-mail verzonden. De e-mail komen altijd binnen een minuut aan. Bij onze smartphones duurde het iets langer (2-3 minuten) voordat de notificatie van van een nieuwe e-mail binnenkwam. De telefoon kijkt automatisch of er nieuwe e-mails zijn binnengekomen, maar om dat elke seconde van de dag te doen zou de batterij in een mum van tijd leeg maken. Dus kijkt het om een tijdsperiode naar nieuwe e-mails. Daarom duurt het iets langer voordat er een notificatie van een nieuwe e-mail bij onze telefoons binnenkwam. Bij de instellingen van je smartphone/tablet helpt het soms om de spaarstand uit te zetten, want soms kan dit ervoor zorgen dat notificaties van Gmail later komen.
Er bestaat een mogelijkheid om het beveiligingssysteem voor de gek te houden door een huisdier te hebben die het alarm af laat gaan, daarom denken wij dat het beter is om het systeem te plaatsen daar waar geen levende dieren in detectiebereik zijn. Of deze dieren te verplaatsen, of insecten zoals vliegen het alarm af kunnen laten gaan weten we niet. Wellicht is de sensor daar te gevoelig voor. Met het beveiligingssysteem dat wij gemaakt hebben en het budget daarvan is het moeilijk om dit soort dingen te omzeilen. Stel dat we nou voor een lasersysteem zouden gaan, dan zouden de inbrekers dat al gelijk weten. Wij dachten er zelf aan om het systeem ergens te plaatsen en te verbergen waar niemand het kan zien, en de sensor zo te richten dat hij het meeste kan zien, vooral naar de deuren en ramen gericht.
Conclusie/Discussie
Voor ons beveiligingssysteem hebben wij onze tijd zo goed mogelijk ingedeeld om ons doel te halen. Dit is uiteindelijk ook gelukt en daar zijn wij blij mee. Er waren echter nog een paar punten waarover wij niet zo tevreden waren en die in de toekomst bij verdere ontwikkeling van ons beveiligingssysteem zouden willen veranderen.
Het eerste punt is dat de notificatie die de bewoner laat weten dat er een inbreker is via e-mail werkt. Om e-mails te ontvangen en te versturen heb je een internetverbinding nodig. Deze verbinding heeft niet iedereen altijd beschikbaar, bijvoorbeeld wanneer je op vakantie gaat naar een camping zonder wifi. Dan krijg je pas de melding wanneer er internet beschikbaar is, maar dan is het al waarschijnlijk te laat. Dit zouden wij in de toekomst bij het verbeteren van ons beveiligingssysteem kunnen veranderen door de melding onafhankelijk van de internet connectie te maken. Wij dachten aan de alternatieve optie van een SMS’je sturen, want op veel meer plekken in de wereld heb je mobiel bereik dan dat je wifi-verbinding hebt.
Het tweede punt is dat je niet zeker weet of er ook echt een inbreker is ingebroken bij je huis, het kan ook zo zijn dat de temperatuur bijvoorbeeld opeens verandert door een huisdier. Of wellicht een insect. Hierdoor kan je gealarmeerd worden zonder dat er per se iets gebeurt is.
De hoofdvraag was natuurlijk:‘Hoe maak je met een laag budget een goed werkend beveiligingssysteem?’. Hiervoor moet je een theoretisch systeem maken met alle componenten die je nodig hebt. In ons geval waren dat een computer(Pi), sensor(PIR), een speaker een router en onze telefoons. Je moet daarna alles aan elkaar verbinden, zoiets doe je door gebruik te maken van een programmeertaal als python. Ook moet je letten op de volgorde van acties die het systeem moet uitvoeren om een systeem te maken met de minste kans op fouten.
Als wij al onze kosten optellen:
PIR sensor: $5,95
Female-female jumper wires: $2,95
Raspberry Pi B+ ~$32
Microsd kaart $8,95
Ethernetkabel/wifi adapter ~$10
Speaker $10
Krijgen we een totaal van $74, dat is precies $1 onder het budget dat wij in oog hadden, het uiteindelijke systeem bestaat zonder de webcam dus wordt het $60. De Pi, micro sd kaart, speaker en ethernetkabel hadden wel al dus hebben wij zelf nog minder uitgegeven. Waar het op neer komt is dat het niet makkelijk is om je eigen beveiligingssysteem te maken dat gegarandeerd 100% van de tijd alleen een alarm afgeeft als er daadwerkelijk een indringer is. Met een laag budget is dit lastig, met een hoger budget is dat misschien wel mogelijk. Ons beveiligingssysteem werkt wel, maar kan ook een alarm afgeven als er geen indringer is. Toch zijn we trots op wat wij samen gemaakt hebben met een lager budget als het gemiddelde beveiligingssysteem. In het begin hadden wij niet gedacht dat wij zoiets ingewikkelds konden maken met een lager budget, maar hoe verder je je erin verdiept hoe makkelijker het lijkt. Hoe moeilijk of onmogelijk iets ook maar kan lijken, probeer eerst te begrijpen wat het is en naderhand zal je het begrijpen en het niet meer moeilijk vinden.