Indholdsfortegnelse:

Trafikmønsteranalysator ved hjælp af registrering af levende objekter: 11 trin (med billeder)
Trafikmønsteranalysator ved hjælp af registrering af levende objekter: 11 trin (med billeder)

Video: Trafikmønsteranalysator ved hjælp af registrering af levende objekter: 11 trin (med billeder)

Video: Trafikmønsteranalysator ved hjælp af registrering af levende objekter: 11 trin (med billeder)
Video: Netværkssikkerhedsangreb og -tjenester 2024, November
Anonim
Image
Image
Trafikmønsteranalysator ved hjælp af registrering af levende objekter
Trafikmønsteranalysator ved hjælp af registrering af levende objekter

I nutidens verden er trafiklys afgørende for en sikker vej. Men mange gange kan trafiklys være irriterende i situationer, hvor nogen nærmer sig lyset, ligesom det bliver rødt. Dette spilder tid, især hvis lyset forhindrer et enkelt køretøj i at komme igennem krydset, når der ikke er andre på vejen. Min innovation er et smart trafiklys, der bruger registrering af levende objekter fra et kamera til at tælle antallet af biler på hver vej. Den hardware, jeg vil bruge til dette projekt, er en Raspberry Pi 3, et kameramodul og forskellige elektroniske hardware til selve lyset. Ved hjælp af OpenCV på Raspberry Pi vil de indsamlede oplysninger blive kørt via kode, der styrer lysdioderne via GPIO. Afhængigt af disse tal vil trafiklyset ændre sig og lade biler komme igennem i den mest optimale rækkefølge. I dette tilfælde ville banen med de fleste biler blive ledt igennem, så banen med færre biler ville gå på tomgang og reducere luftforureningen. Dette ville fjerne situationer, hvor mange biler standses, mens der ikke er biler på den krydsende vej. Dette sparer ikke kun tid for alle, men det sparer også miljøet. Den tid, folk stoppes ved et stopskilt med deres motor i tomgang, øger mængden af luftforurening, så ved at oprette et smart lyskryds kan jeg optimere lysmønstrene, så biler bruger mindst mulig tid med deres køretøj standset. I sidste ende kunne dette lyskryds system implementeres i byer, forstæder eller endda landdistrikter for at være mere effektivt for mennesker ville reducere luftforurening.

Trin 1: Deleliste

Materialer:

Raspberry Pi 3 Model B v1.2

Raspberry Pi kamera v2.1

5V/1A mikro USB strømforsyning

HDMI -skærm, tastatur, mus -SD -kort med Raspbian Jessie

Raspberry Pi GPIO breakout -kabel

Røde, gule, grønne lysdioder (2 i hver farve)

Hunstik til Raspberry Pi (7 unikke farver)

Assorteret 24 gauge wire (forskellige farver) + varmekrympeslange

2'x2 'træpanel eller platform

Træskruer

Sort overflade (pap, skumbræt, plakatbræt osv.)

Hvidt (eller anden farve end sort) tape til vejmarkeringer

Sort spraymaling (til PVC)

½”PVC -rør med 90 graders albuesamlinger (2), T -fatning (1), hunadapter (2)

Værktøjer

Loddekolbe

3D printer

Bor med forskellige bor

Brødbræt

Varmepistol

Trin 2: Opsætning af Raspberry Pi

Læg SD -kortet i Raspberry Pi og start.

Følg denne vejledning for at installere de nødvendige OpenCV -biblioteker. Sørg for, at du har tid til at udføre dette trin, da installationen af OpenCV -biblioteket kan tage et par timer. Sørg også for at installere og konfigurere dit kamera her.

Du bør også installere pip:

picamera

gpiozero

RPi. GPIO

Her er den færdige kode:

fra picamera.array import PiRGBArray

fra picamera import PiCamera

import picamera.array

import numpy som np

importtid

import cv2

importer RPi. GPIO som GPIO

importtid

GPIO.setmode (GPIO. BCM)

for i in (23, 25, 16, 21):

GPIO.setup (i, GPIO. OUT)

cam = PiCamera ()

cam.resolution = (480, 480)

cam.framerate = 30

raw = PiRGBArray (cam, størrelse = (480, 480))

time.sleep (0,1)

colorLower = np.array ([0, 100, 100])

colorUpper = np.array ([179, 255, 255])

initvert = 0

inithoriz = 0

tæller = 0

til ramme i cam.capture_continuous (rå, format = "bgr", use_video_port = True):

frame = frame.array

hsv = cv2.cvtColor (ramme, cv2. COLOR_BGR2HSV)

mask = cv2.inRange (hsv, colorLower, colorUpper)

maske = cv2.blur (maske, (3, 3))

mask = cv2.dilate (maske, Ingen, iterationer = 5)

mask = cv2.erode (maske, Ingen, iterationer = 1)

mask = cv2.dilate (maske, Ingen, iterationer = 3)

mig, tærske = cv2.tærskel (maske, 127, 255, cv2. THRESH_BINARY)

cnts = cv2.findContours (tærske, cv2. RETR_TREE, cv2. CHAIN_APPROX_SIMPLE) [-2]

center = Ingen

vert = 0

horisont = 0

hvis len (cnts)> 0:

for c i cnts:

(x, y), radius = cv2.minEnclosingCircle (c)

center = (int (x), int (y))

radius = int (radius)

cv2.cirkel (ramme, center, radius, (0, 255, 0), 2)

x = int (x)

y = int (y)

hvis 180 <x <300:

hvis y> 300:

vert = vert +1

elif y <180:

vert = vert +1

andet:

vert = vert

hvis 180 <y <300:

hvis x> 300:

horizon = horizon +1

elif x <180:

horizon = horizon +1

andet:

horison = horisonter

hvis vert! = initvert:

print "Biler i lodret bane:" + str (vert)

initvert = vert

print "Biler i vandret bane:" + str (horizon)

inithoriz = horizon

Print '----------------------------'

hvis horizon! = inithoriz:

print "Biler i lodret bane:" + str (vert)

initvert = vert

print "Biler i vandret bane:" + str (horizon)

inithoriz = horizon

Print '----------------------------'

hvis vert <horizon:

GPIO.output (23, GPIO. HIGH)

GPIO.output (21, GPIO. HIGH)

GPIO.output (16, GPIO. LOW)

GPIO.output (25, GPIO. LOW)

hvis horizon <vert:

GPIO.output (16, GPIO. HIGH)

GPIO.output (25, GPIO. HIGH)

GPIO.output (23, GPIO. LOW)

GPIO.output (21, GPIO. LOW)

cv2.imshow ("Ramme", ramme)

cv2.imshow ("HSV", hsv)

cv2.imshow ("tærsk", tærskning)

rå. afkortet (0)

hvis cv2.waitKey (1) & 0xFF == ord ('q'):

pause

cv2.destroyAllWindows ()

GPIO.cleanup ()

Trin 3: Raspberry Pi og kameramontering

Hindbær Pi og kameraholder
Hindbær Pi og kameraholder
Hindbær Pi og kameraholder
Hindbær Pi og kameraholder
Hindbær Pi og kameraholder
Hindbær Pi og kameraholder
Hindbær Pi og kameraholder
Hindbær Pi og kameraholder

3D -print sagen og kameramontering og saml.

Trin 4: Samling af trafiklys

Trafiklys forsamling
Trafiklys forsamling
Trafiklys forsamling
Trafiklys forsamling
Trafiklys forsamling
Trafiklys forsamling

Test lyskryds med et brødbræt. Hvert modsat sæt LED'er deler en anode, og alle deler en fælles katode (jord). Der bør være i alt 7 indgangstråde: 1 for hvert par LED'er (6) + 1 jordledning. Lod og saml lyskryds.

Trin 5: Ledningsføring (del 1)

Ledninger (del 1)
Ledninger (del 1)
Ledninger (del 1)
Ledninger (del 1)
Ledninger (del 1)
Ledninger (del 1)
Ledninger (del 1)
Ledninger (del 1)

Lod den kvindelige header pins til omkring 5 fod tråd. Dette er siderne, som disse ledninger senere vil slange gennem PVC -rørene. Sørg for at kunne skelne de forskellige lyssæt (2 x 3 farver og 1 grund). I dette tilfælde markerede jeg enderne af et andet sæt røde, gule og blå ledninger med sharpie, så jeg ved, hvilken er hvilken.

Trin 6: Opbygning af miljøet

Opbygning af miljøet
Opbygning af miljøet
Opbygning af miljøet
Opbygning af miljøet
Opbygning af miljøet
Opbygning af miljøet
Opbygning af miljøet
Opbygning af miljøet

Opbygning af miljøet Lav en 2 fod firkantet træpalle som denne. Skrottræ er fint, da det vil blive tildækket. Bor et hul, der lige passer til din adapter. Bor skruer gennem siderne af pallen for at fastgøre PVC -røret på plads. Skær det sorte skumbræt, så det matcher træpallen nedenunder. Bor et hul, der passer rundt om PVC -røret. Gentag på det modsatte hjørne. Marker vejene med noget hvidt tape.

Trin 7: Afslutning af PVC -rammen

Afslutning af PVC -rammen
Afslutning af PVC -rammen
Afslutning af PVC -rammen
Afslutning af PVC -rammen
Afslutning af PVC -rammen
Afslutning af PVC -rammen

På det øverste rør bores et hul, der kan passe til et bundt ledninger. Et groft hul er fint, så længe du har adgang til rørets inderside. Slang ledningerne gennem PVC -rørene og albueleddene for en testpasning. Når alt er færdigt, skal du male PVC'en med lidt sort spraymaling for at rense hovedrammens udseende. Skær et lille hul i et af PVC-rørene, så det passer til en T-samling. Tilføj et PVC-rør til denne t-samling, så lyskryds kan hænge ned fra. Diameteren kan være den samme som hovedrammen (1/2 ), men hvis du bruger et tyndere rør, skal du sørge for, at de 7 ledninger kan slange igennem. Bor et hul gennem dette rør, så lyskryds kan hænge fra.

Trin 8: Ledningsføring (del 2)

Ledninger (del 2)
Ledninger (del 2)
Ledninger (del 2)
Ledninger (del 2)
Ledninger (del 2)
Ledninger (del 2)

Tilslut alt som tidligere testet. Dobbelt tjek lyskryds og ledninger med et brødbræt for at bekræfte, at alle forbindelser er foretaget. Loddet lyskryds til ledningerne, der kommer gennem T-ledarmen. Pak de blottede ledninger med elektrisk tape for at forhindre shorts og for et renere udseende.

Trin 9: Færdig

Færdig!
Færdig!
Færdig!
Færdig!
Færdig!
Færdig!
Færdig!
Færdig!

For at køre koden skal du sørge for at angive din kilde som ~/.profil og cd til din projekts placering.

Trin 10: Ekstra (fotos)

Anbefalede: