Inhoudsopgave:
- Stap 1: Belangrijkste vereiste items:
- Stap 2: Het systeem
- Stap 3: Codeertijd
- Stap 4: Samenvoegen
- Stap 5: Resultaten
- Stap 6: Valse positieven
Video: Cat-a-way - Computer Vision Cat Sprinkler - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:17
Probleem - Katten gebruiken je tuin als toilet
Oplossing - Besteed te veel tijd aan het ontwerpen van een kattensproeier met automatische YouTube-uploadfunctie
Dit is geen stap voor stap, maar een overzicht van de constructie en wat code
#BeforeYouCallPETA - Met de katten gaat het goed, het is een lagedruksproeier, net als regen, die ze kunnen ontlopen voordat hij zelfs maar naar hen toe draait. Het project is niet om een kat te laten weken, maar om ze weg te wijzen voordat ze mijn tuin bevuilen met de kattenversie van Barkers Eggs.
Stap 1: Belangrijkste vereiste items:
Raspberry Pi nul & SD-kaart
Raspberry Pi-camera
Relais
555-timer…. (of een Arduino en een ander relais als je 555-timers niet aankomen)
solenoïde
sproeier
Een soort behuizing voor de elektronica
De bereidheid om een metaforische spijker te slaan met een voorhamer van 6 ton
Een camera met zo weinig resolutie dat je nauwelijks het water kunt zien, maar de katten nog steeds kunt zien rennen voor dekking
Stap 2: Het systeem
1, Pi-camera detecteert een object ter grootte van een kat dat een paar cameraframes beweegt (uitgelegd in de volgende stap)
2, Pi zet sprinkler in werking
3, Kat zoekt dekking
4, Video automatisch geüpload naar YouTube voor kijkplezier!
Stap 3: Codeertijd
Door openCV te gebruiken met frame-subtractie, kun je delen van het frame vinden die in de loop van de tijd veranderen, met behulp van een aantal handige functies kun je erachter komen hoe groot deze veranderingen zijn en of ze in de loop van de tijd aanhouden, en vooral om erachter te komen of ze de grootte van een kat hebben.
Er zijn nogal wat tutorials over frame-subtractie die tot in detail gaan als je een snelle Google-zoekopdracht uitvoert.
Overzicht van hoe de code werkt
1, De camera blijft frames maken en ze vergelijken met de vorige
2, als een vorm ter grootte van een kat wordt gedetecteerd, wordt dit opgemerkt:
3, als de verandering in de grootte van de kat aanhoudt over ongeveer 4 frames, gebruikt de pi zijn GPIO om het relais van stroom te voorzien om arduino te starten
4, de Arduino stuurt een signaal om het tweede relais gedurende 5 seconden van stroom te voorzien, waardoor de solenoïde wordt geactiveerd
5, de solenoïde wanneer deze wordt ingeschakeld, laat water naar de sprinkler toe;
6, terwijl sprinkler actief is, stopt de camera met detecteren en neemt video op;
7, video is geüpload naar YouTube
8, Stills geüpload naar dropbox voor fijnafstemmingssysteem
Opmerking - Waarom ik uiteindelijk 2 relais en een arduino heb gebruikt om een solenoïde gedurende 5 seconden in te schakelen …
1, de pi kan de solenoïde niet starten en stoppen tijdens het opnemen van de video, aangezien de python-scripts pauzeren totdat de video is voltooid, vandaar de noodzaak voor de arduino (of 555-timer) om de solenoïde onafhankelijk van het script te openen en te sluiten terwijl de video wordt nog steeds opgenomen.
2, Het eerste relais en arduino kunnen worden vervangen door een 555-timer, maar die kwam niet op tijd in de post voor dit project, 555 zou veel tijd, geld en stappen besparen.
3, de pi kan de solenoïde niet rechtstreeks activeren, omdat de Pi GPIO werkt op 3.3v en 51mA max, en de solenoïde wil dat 5V en veel meer dan 51mA worden geactiveerd.
4, Elk frame kan worden bijgesneden om bewegingsdetectie in ongewenste gebieden, zoals een burentuin, te verwijderen. Als u dit niet doet, zal die buurman verwarde blikken in uw tuin geven omdat de sproeier elke keer afgaat als hij zijn schuurtje in wil.
5, heb ik waarschijnlijk iets voor de hand liggends gemist en heb ik mijn tijd verspild om het zo op te zetten.
Code hieronder:
import cv2import numpy als np import argparse #cat import tijd import RPi. GPIO als GPIO import os import dropbox van picamera.array import PiRGBArray vanuit picamera import PiCamera #------------------ ------------------------------ Uploaden naar youtube----------------- --------------------- def HDtoYoutube(): ctime = time.strftime("_%H-%M-%S") cdate = time.strftime ("_%d-%m-%Y") vidname = ctime + cdate #Trigger relay GPIO.output(11, True) time.sleep(.5) GPIO.output(11, False) print("Video nemen") probeer: #Take Video os.system('raspivid -w 1640 -h 922 -o vid{0}.h264 -t 15000'.format(vidname)) #Upload to youtube print("Uploading to YouTube") os. system('sudo youtube-upload --title="Cat Got Wet {0}" --client-secrets=client_secret.json vid{0}.h264'.format(vidname)) #Verwijder videobestand wanneer klaar os.remove ('vid{0}.h264'.format(vidname)) print("Video geüpload en verwijderd van Pi") behalve: pass #-------------------- ----------------------------Nog steeds naar dropbox------------------- -------------------- def St illsToDropbox(): print("Uploading Still To Dropbox Function") access_token = 'Ah ah ah, je zei het toverwoord niet…Ah ah ah, je zei het toverwoord niet' ctime = time.strftime(" %H:%M:%S") cdate = time.strftime("%d-%m-%Y") probeer: bestandsnaam = "/Motion/{0}/DetectedAt_{1}.jpg".format(cdate, ctime) print(bestandsnaam) client = dropbox.client. DropboxClient(access_token) image = open("ToDropbox.jpg", 'rb') client.put_file(bestandsnaam, afbeelding) image.close() os.remove("ToDropbox.jpg") behalve: pass #------------------------------------------ ------ Beweging detecteren----------------------------------------- def DetectMotion(): #Define vars min_area = 400 tolarance = 25 #change in pixel bluramount = 21 timetoforget = 0,5 kernel = np.ones((5, 5), np.uint8) #used for dialate MotionCounter = 0 MinTargetArea = 600 # kleinste formaat om te detecteren MaxTargetArea = 5000 #Grootste formaat om nu te detecteren = time.time() then = time.time() #initialize camera camera = PiCamera() camera.resolution = (640, 480) camera.framerate = 10 raw Capture = PiRGBArray(camera, size=(640, 480)) #warmup camera time.sleep(1) #Pak het eerste frame en bereid het voor om naar cv2.acumulate weight camera.capture(rawCapture, format="bgr") avg te gaan = rawCapture.array #Ongewenst gebied uitsnijden PolyCrop = np.array(
#HowToTriggerRealProgrammersWithBadCode
Stap 4: Samenvoegen
Stop de elektra in een waterdichte behuizing, schroef dingen in muren en gebruik veel ducttape en hete lijm
Stap 5: Resultaten
Als het werkt, werkt het
Stap 6: Valse positieven
Als dat niet het geval is, sproeit het kattenschaduw, je vrouw en je dochter.
Pro-tip - Zet een schakelaar bij de deur die het bewegingsdetectieprogramma pauzeert… vergeet hem dan te gebruiken en word doorweekt als je de vuilnisbakken buiten zet.
Ik hoop dat ik alle experts op het gebied van programmeren, elektronica en doe-het-zelf heb doen ineenkrimpen met alle fouten die ik waarschijnlijk heb gemaakt, en ik hoop vooral dat je genoten hebt van al mijn spelfouten.
Aanbevolen:
The Making Of: Een Mini Sprinkler Meting (groep 12): 8 Stappen
The Making Of: Een Mini Sprinkler Meting (groep 12): Groep 12Noortje Romeijn 4651464Milton Fox 4652622 Deze Instructable is geschreven door Milton Fox (student Maritieme Techniek, TU Delft) en Noortje Romeijn (student Civiele Techniek, TU Delft). Allebei volgen we de civiele minor 'De delta denker, wa
Unboxing van Jetson Nano & een snelle start voor Two Vision Demo: 4 stappen
Unboxing van Jetson Nano en een snelle start voor Two Vision-demo: samenvatten Zoals je weet, is Jetson Nano nu een sterproduct. En het kan neurale netwerktechnologie uitgebreid inzetten op embedded systemen. Hier is een unboxing-artikel met details van het product, het opstartproces en twee visuele demo's…Woordentelling:800
AIY VISION KIT (Raspberry Pi): 3 stappen
AIY VISION KIT (Raspberry Pi): een uitgebreid overzicht van de AIY Vision Kit van Google
Google Vision API met Raspberry Pi en Node: 11 stappen
Google Vision API met Raspberry Pi en Node: dit is een startgids voor het gebruik van de Google Vision API. Het gebruikt de volgende Raspberry Pi Zero W Arch Linux NodeJS internetverbindingKen je Arch Linux niet? Of hoe je een Raspberry Pi instelt? Geen zorgen, ik heb een reeks artikelen geschreven die
Een Night-Vision-webcam maken: 6 stappen
Een Night-Vision-webcam maken: hoe u uw webcam kunt veranderen zodat hij in het donker kan zien. De CCD's van alle digitale camera's reageren zowel op infrarood licht (IR) als op zichtbaar licht. De meeste webcams worden echter geleverd met een filter dat is geïnstalleerd om IR-licht te blokkeren. Hierdoor wordt het beeld minder