Inhoudsopgave:
- Stap 1: Onderdelenlijst
- Stap 2: De Raspberry Pi instellen
- Stap 3: Raspberry Pi en camerabevestiging
- Stap 4: Verkeerslichtmontage
- Stap 5: Bedrading (deel 1)
- Stap 6: Bouwen aan de omgeving
- Stap 7: Het PVC-frame afronden
- Stap 8: bedrading (deel 2)
- Stap 9: Klaar
- Stap 10: Extra's (foto's)
Video: Traffic Pattern Analyzer met behulp van live objectdetectie - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:18
In de wereld van vandaag zijn verkeerslichten essentieel voor een veilige weg. Vaak kunnen verkeerslichten echter vervelend zijn in situaties waarin iemand het licht nadert op het moment dat het op rood springt. Dit verspilt tijd, vooral als het licht verhindert dat een enkel voertuig het kruispunt oversteekt terwijl er niemand anders op de weg is. Mijn innovatie is een slim verkeerslicht dat gebruik maakt van live objectdetectie van een camera om het aantal auto's op elke weg te tellen. De hardware die ik voor dit project zal gebruiken, is een Raspberry Pi 3, een cameramodule en verschillende elektronische hardware voor het licht zelf. Met behulp van OpenCV op de Raspberry Pi wordt de verzamelde informatie door code geleid die de LED's via de GPIO bestuurt. Afhankelijk van deze aantallen verandert het stoplicht, waardoor auto's in de meest optimale volgorde kunnen worden doorgelaten. In dit geval zou de rijstrook met de meeste auto's worden doorgelaten, zodat de rijstrook met minder auto's stationair zou draaien, waardoor de luchtvervuiling zou afnemen. Dit zou situaties elimineren waarin veel auto's worden gestopt terwijl er geen auto's op de kruisende weg zijn. Dit bespaart niet alleen tijd voor iedereen, maar het spaart ook het milieu. De hoeveelheid tijd dat mensen worden gestopt bij een stopbord terwijl hun motor stationair draait, verhoogt de hoeveelheid luchtvervuiling, dus door een slim verkeerslicht te creëren, kan ik de lichtpatronen optimaliseren zodat auto's zo min mogelijk tijd doorbrengen met hun voertuig gestopt. Uiteindelijk zou dit verkeerslichtsysteem in steden, buitenwijken of zelfs landelijke gebieden kunnen worden geïmplementeerd om efficiënter te zijn voor mensen en de luchtvervuiling te verminderen.
Stap 1: Onderdelenlijst
Materialen:
Raspberry Pi 3 Model B v1.2
Raspberry Pi-camera v2.1
5V/1A micro-USB-voeding
HDMI-monitor, toetsenbord, muis SD-kaart met Raspbian Jessie
Raspberry Pi GPIO breakout-kabel
Rode, gele, groene LED's (2 van elke kleur)
Vrouwelijke connectoren voor Raspberry Pi (7 unieke kleuren)
Diverse 24 gauge draad (verschillende kleuren) + krimpkous
2'x2' houten paneel of platform
Houtschroeven
Zwart oppervlak (karton, foamboard, posterboard, etc.)
Witte (of een andere kleur dan zwarte) tape voor wegmarkeringen
Zwarte spuitverf (voor PVC)
½” PVC-buis met 90 graden elleboogverbindingen (2), T-mof (1), vrouwelijke adapter (2)
Gereedschap
Soldeerbout
3D-printer
Boor met verschillende boren
Breadboard
Hitte geweer
Stap 2: De Raspberry Pi instellen
Laad de SD-kaart in de Raspberry Pi en start op.
Volg deze handleiding om de vereiste OpenCV-bibliotheken te installeren. Zorg ervoor dat je tijd hebt om deze stap te doen, aangezien het installeren van de OpenCV-bibliotheek een paar uur kan duren. Zorg ervoor dat u hier ook uw camera installeert en instelt.
Je moet ook pip installeren:
picamera
gpiozero
RPi. GPIO
Hier is de definitieve code:
van picamera.array import PiRGBArray
van picamera import PiCamera
importeer picamera.array
importeer numpy als np
import tijd
import cv2
importeer RPi. GPIO als GPIO
import tijd
GPIO.setmode(GPIO. BCM)
voor i in (23, 25, 16, 21):
GPIO.setup(i, GPIO. OUT)
cam = PiCamera()
cameraresolutie=(480, 480)
cam.framerate=30
raw=PiRGBArray(cam, size=(480, 480))
tijd.slaap(0.1)
colorLower = np.array([0, 100, 100])
colorUpper = np.array([179, 255, 255])
initvert = 0
inithoriz = 0
teller = 0
voor frame in cam.capture_continuous(raw, format="bgr", use_video_port=True):
frame = frame.array
hsv = cv2.cvtColor(frame, cv2. COLOR_BGR2HSV)
mask = cv2.inRange(hsv, colorLower, colorUpper)
masker = cv2.blur(masker, (3, 3))
mask= cv2.dilate(masker, Geen, iteraties=5)
mask= cv2.erode(masker, Geen, iteraties=1)
mask= cv2.dilate(masker, Geen, iteraties=3)
ik, thresh = cv2.threshold (masker, 127, 255, cv2. THRESH_BINARY)
cnts = cv2.findContours(thresh, cv2. RETR_TREE, cv2. CHAIN_APPROX_SIMPLE)[-2]
centrum = Geen
vert = 0
horizon = 0
als len(cnts) > 0:
voor c in cnts:
(x, y), straal = cv2.minOmsluitende cirkel(c)
centrum = (int(x), int(y))
straal = int(straal)
cv2.cirkel(frame, middelpunt, straal, (0, 255, 0), 2)
x = int(x)
y = int(y)
indien 180 < x < 300:
indien y > 300:
vert = vert +1
elif y < 180:
vert = vert +1
anders:
vert = vert
indien 180 < y < 300:
als x > 300:
horiz = horiz +1
elif x < 180:
horiz = horiz +1
anders:
horiz = horiz
if vert != initvert:
print"Auto's in verticale rijstrook: " + str(vert)
initvert = vert
print"Auto's in horizontale baan: " + str(horiz)
inithoriz = horiz
afdrukken '----------------------------'
if horiz != inithoriz:
print"Auto's in verticale rijstrook: " + str(vert)
initvert = vert
print"Auto's in horizontale baan: " + str(horiz)
inithoriz = horiz
afdrukken '----------------------------'
als vert <horiz:
GPIO.uitgang(23, GPIO. HOOG)
GPIO.uitgang(21, GPIO. HOOG)
GPIO.output (16, GPIO. LOW)
GPIO.uitgang (25, GPIO. LAAG)
als horiz < vert:
GPIO.uitgang (16, GPIO. HOOG)
GPIO.uitgang(25, GPIO. HOOG)
GPIO.uitgang (23, GPIO. LAAG)
GPIO.uitgang(21, GPIO. LAAG)
cv2.imshow("Frame", frame)
cv2.imshow("HSV", hsv)
cv2.imshow("Dors", dorst)
onbewerkt.truncate(0)
if cv2.waitKey(1) & 0xFF == ord('q'):
pauze
cv2.destroyAllWindows()
GPIO.opschonen()
Stap 3: Raspberry Pi en camerabevestiging
3D print de behuizing en camera monteren en monteren.
Stap 4: Verkeerslichtmontage
Test het verkeerslicht uit met een breadboard. Elke tegenoverliggende set LED's deelt een anode en ze delen allemaal een gemeenschappelijke kathode (aarde). Er moeten in totaal 7 ingangsdraden zijn: 1 voor elk paar LEDS (6) + 1 aardingsdraad. Soldeer en monteer de verkeerslichten.
Stap 5: Bedrading (deel 1)
Soldeer de vrouwelijke header-pinnen tot ongeveer 5 voet draad. Dit zijn de zijkanten die deze draden later door de PVC-buizen zullen slingeren. Zorg ervoor dat u de verschillende sets lampen kunt onderscheiden (2 x 3 kleuren en 1 grond). In dit geval heb ik de uiteinden van een andere set rode, gele en blauwe draden gemarkeerd met een scherpe punt, zodat ik weet welke welke is.
Stap 6: Bouwen aan de omgeving
Bouwen aan de omgeving Maak op deze manier een vierkante houten pallet van 2 voet. Sloophout is prima, want het wordt afgedekt. Boor een gat dat precies in uw adapter past. Boor schroeven door de zijkanten van de pallet om de PVC-buis op zijn plaats te bevestigen. Snijd de zwarte schuimplaat zodat deze overeenkomt met de houten pallet eronder. Boor een gat dat rond de PVC-buis past. Herhaal op de tegenoverliggende hoek. Markeer de wegen met wat witte tape.
Stap 7: Het PVC-frame afronden
Boor in de bovenste pijp een gat waar een bundel draden in past. Een ruw gat is prima, zolang je maar toegang hebt tot de binnenkant van de pijpen. Slang de draden door de PVC-buizen en elleboogverbindingen voor een testpassing. Zodra alles is voltooid, schildert u het PVC met wat zwarte spuitverf om het uiterlijk van het hoofdframe op te ruimen. Snijd een kleine opening in een van de PVC-buizen om een T-verbinding te passen. Voeg een PVC-buis toe aan deze T-verbinding voor het stoplicht om aan te hangen. De diameter kan hetzelfde zijn als het hoofdframe (1/2 ), maar als je een dunnere pijp gebruikt, zorg er dan voor dat de 7 draden er doorheen kunnen kronkelen. Boor een gat door deze pijp om het verkeerslicht aan te hangen.
Stap 8: bedrading (deel 2)
Sluit alles opnieuw aan zoals eerder getest. Controleer het verkeerslicht en de bedrading nogmaals met een breadboard om te bevestigen dat alle verbindingen zijn gemaakt. Soldeer het verkeerslicht aan de draden die door de T-verbindingsarm komen. Wikkel de blootliggende draden in met isolatietape om kortsluiting te voorkomen en voor een schoner uiterlijk.
Stap 9: Klaar
Om de code uit te voeren, moet u uw bron instellen als ~/.profile en cd naar uw projectlocatie.
Stap 10: Extra's (foto's)
Aanbevolen:
Live gegevens van een temperatuursensor plotten (TMP006) met behulp van MSP432 LaunchPad en Python: 9 stappen
Live gegevens van een temperatuursensor plotten (TMP006) met behulp van MSP432 LaunchPad en Python: De TMP006 is een temperatuursensor die de temperatuur van een object meet zonder contact met het object te maken. In deze tutorial zullen we live temperatuurgegevens van het BoosterPack (TI BOOSTXL-EDUMKII) plotten met Python
Digitale klok met netwerktijd met behulp van de ESP8266: 4 stappen (met afbeeldingen)
Digitale netwerkklok met de ESP8266: we leren hoe we een schattige kleine digitale klok kunnen bouwen die communiceert met NTP-servers en de netwerk- of internettijd weergeeft. We gebruiken de WeMos D1 mini om verbinding te maken met een wifi-netwerk, de NTP-tijd te verkrijgen en deze weer te geven op een OLED-module. De video hierboven
Objectdetectie met Dragonboard 410c of 820c met OpenCV en Tensorflow: 4 stappen
Objectdetectie met Dragonboard 410c of 820c met behulp van OpenCV en Tensorflow.: Deze instructie beschrijft hoe OpenCV, Tensorflow en machine learning-frameworks voor Python 3.5 moeten worden geïnstalleerd om de toepassing Objectdetectie uit te voeren
Live bewaking van de waarde van uw sensor van overal ter wereld: 4 stappen
Live monitoring van de waarde van uw sensor van overal ter wereld: ik kreeg een bericht op het WhatsApp-nummer van techneuten met betrekking tot hulp bij het maken van één project. Het project was om de druk op de druksensor te meten en deze op een smartphone weer te geven. Dus ik hielp bij het maken van dat project en besloot een bijlesdocent te maken
Hoe u gebruikersniveaus van NUMA toevoegt aan uw exemplaar van N met behulp van NumADD Firefox AddOn: 4 stappen
Gebruikersniveaus van NUMA toevoegen aan uw exemplaar van N NumADD Firefox-add-on gebruiken: Elke gebruiker van Metanet's N-database op gebruikersniveau NUMA weet hoe onhandig de interface is voor het kopiëren van door gebruikers gemaakte niveaus naar uw exemplaar van het spel. NumADD, elimineert de noodzaak van kopiëren en plakken en maakt het overzetten van niveaus het werk van één muisklik