Indholdsfortegnelse:

Lav afstandsmåler ved hjælp af en laser og et kamera: 6 trin
Lav afstandsmåler ved hjælp af en laser og et kamera: 6 trin

Video: Lav afstandsmåler ved hjælp af en laser og et kamera: 6 trin

Video: Lav afstandsmåler ved hjælp af en laser og et kamera: 6 trin
Video: Lesson 77: Using VL53L0X 200cm Laser Distance Sensor | Arduino Step By Step Course 2024, November
Anonim
Lav afstandsmåler ved hjælp af en laser og et kamera
Lav afstandsmåler ved hjælp af en laser og et kamera

Jeg planlægger i øjeblikket noget indvendigt arbejde til næste forår, men da jeg lige har erhvervet et gammelt hus, har jeg ingen husplan. Jeg begyndte at måle væg til væg -afstande ved hjælp af en lineal, men det er langsomt og fejlbehæftet. Jeg tænkte på at købe en afstandsmåler for at lette processen, men så fandt jeg en gammel artikel om at bygge sin egen afstandsmåler ved hjælp af en laser og et kamera. Som det viser sig, har jeg disse komponenter i mit værksted.

Projektet er baseret på denne artikel:

Den eneste forskel er, at jeg vil bygge afstandsmåleren ved hjælp af en Raspberry Pi Zero W, en LCD og Raspberry Pi Camera -modulet. Jeg vil også bruge OpenCV til at spore laseren.

Jeg formoder, at du er teknisk kyndig, og at du er tryg ved at bruge Python og kommandolinjen. I dette projekt bruger jeg Pi i hovedløs tilstand.

Lad os begynde!

Trin 1: Liste over materialer

Til dette projekt skal du bruge:

  • en billig 6mm 5mW laser
  • en 220 Ω modstand
  • en 2N2222A transistor eller noget tilsvarende
  • en Raspberry Pi Zero W
  • et Raspberry Pi kamera v2
  • en Nokia 5110 LCD -skærm eller tilsvarende
  • nogle springtråde og et lille brødbræt

Jeg brugte min 3d -printer til at udskrive en jig, der hjalp mig under eksperimenterne. Jeg har også tænkt mig at bruge 3d -printeren til at bygge et komplet kabinet til afstandsmåler. Du kan helt undvære.

Trin 2: Opbygning af en laser- og kamerajig

Bygger en laser- og kamerajig
Bygger en laser- og kamerajig
Bygger en laser- og kamerajig
Bygger en laser- og kamerajig
Bygger en laser- og kamerajig
Bygger en laser- og kamerajig

Systemet antager en fast afstand mellem kameralinsen og laserudgangen. For at lette testene printede jeg en jig, hvor jeg kan montere kameraet, laseren og et lille drivkredsløb til laseren.

Jeg brugte kameramodulets dimensioner til at bygge holderen til kameraet. Jeg brugte hovedsageligt en digital tykkelse og en præcisionslineal til at tage målingerne. Til laseren lavede jeg et 6 mm hul med en lille smule forstærkning for at sikre, at laseren ikke bevæger sig. Jeg forsøgte at holde plads nok til at få et lille brødbræt fastgjort bag på jiggen.

Jeg brugte Tinkercad til bygningen, du kan finde modellen her:

Der er en afstand på 3,75 cm mellem midten af laserlinsen og midten af kameralinsen.

Trin 3: Kørsel af laseren og LCD'en

Kørsel af laser og LCD
Kørsel af laser og LCD
Kørsel af laser og LCD
Kørsel af laser og LCD

Jeg fulgte denne vejledning https://www.algissalys.com/how-to/nokia-5110-lcd-on-raspberry-pi for at køre LCD-skærmen med Raspberry Pi Zero. I stedet for at redigere /boot/config.txt-filen kan du aktivere SPI-grænsefladen ved hjælp af sudo raspi-config via kommandolinjen.

Jeg bruger Raspberry Pi Zero i hovedløs tilstand ved hjælp af den nyeste, til dato, Raspbian Stretch. Jeg dækker ikke installationen i denne instruks, men du kan følge denne vejledning: https://medium.com/@danidudas/install-raspbian-jessie-lite-and-setup-wi-fi-without-access-to- kommandolinje-eller-ved hjælp af-netværket-97f065af722e

For at få en lys laserprik bruger jeg Pi'ens 5V -skinne. Til det vil jeg bruge en transistor (2N2222a eller tilsvarende) til at drive laseren ved hjælp af GPIO. En 220 Ω modstand i bunden af transistoren tillader nok strøm gennem laseren. Jeg bruger RPi. GPIO til at manipulere Pi GPIO. Jeg tilsluttede transistorens bund til GPIO22 -stiften (den 15. pin), emitteren til jorden og kollektoren til laserdioden.

Glem ikke at aktivere kameragrænsefladen ved hjælp af sudo raspi-config via kommandolinjen.

Du kan bruge denne kode til at teste din opsætning:

Hvis alt gik godt, skulle du have en dot-j.webp

I koden opsætter vi kameraet og GPIO, derefter aktiverer vi laseren, vi fanger billedet, og vi deaktiverer laseren. Da jeg kører Pi i hovedløs tilstand, skal jeg kopiere billederne fra min Pi til min computer, før jeg viser dem.

På dette tidspunkt skal din hardware konfigureres.

Trin 4: Registrering af laseren ved hjælp af OpenCV

Først skal vi installere OpenCV på Pi. Du har dybest set tre måder at gøre det på. Du kan enten installere den gamle pakkede version med apt. Du kan kompilere den version, du ønsker, men i dette tilfælde kan installationstiden gå op til 15 timer og det meste af det for den egentlige kompilering. Eller, min foretrukne tilgang, kan du bruge en forhåndskompileret version til Pi Zero, der leveres af en tredjepart.

Fordi det er enklere og hurtigere, brugte jeg en tredjepartspakke. Du kan finde installationstrinnene i denne artikel: https://yoursunny.com/t/2018/install-OpenCV3-PiZero/ Jeg prøvede mange andre kilder, men deres pakker var ikke opdaterede.

For at spore en laserpointer opdaterede jeg koden fra https://github.com/bradmontgomery/python-laser-tracker for at bruge Pi-kameramodulet i stedet for en USB-enhed. Du kan bruge koden direkte, hvis du ikke har et Pi -kameramodul og vil bruge et USB -kamera.

Du kan finde den komplette kode her:

For at køre denne kode skal du installere Python -pakkerne: pude og picamera (sudo pip3 install pude picamera).

Trin 5: Kalibrering af Range Finder

Kalibrering af Range Finder
Kalibrering af Range Finder
Kalibrering af Range Finder
Kalibrering af Range Finder
Kalibrering af Range Finder
Kalibrering af Range Finder

I den originale artikel designede forfatteren en kalibreringsprocedure for at få de nødvendige parametre til at transformere y -koordinaterne til en faktisk afstand. Jeg brugte mit stuebord til kalibreringerne og et gammelt stykke kraft. Hver 10 cm eller deromkring noterede jeg x- og y -koordinaterne i et regneark: https://docs.google.com/spreadsheets/d/1OTGu09GLAt… For at sikre, at alt fungerede korrekt, kontrollerede jeg ved hvert trin de taget billeder for at se, om laseren blev sporet korrekt. Hvis du bruger en grøn laser, eller hvis din laser ikke spores korrekt, skal du justere programmets nuance, mætning og værditærskel i overensstemmelse hermed.

Når målefasen er udført, er det tid til faktisk at beregne parametrene. Som forfatteren brugte jeg en lineær regression; faktisk gjorde Google Regneark jobbet for mig. Jeg genbrugte derefter disse parametre til at beregne en estimeret afstand og kontrollere den mod den faktiske afstand.

Det er nu tid til at injicere parametrene i afstandsmålerprogrammet for at måle afstande.

Trin 6: Måling af afstande

Måling af afstande
Måling af afstande

I koden: https://gist.github.com/kevinlebrun/e767a46855e5fd501d820e1c5fcc527c opdaterede jeg variablerne HEIGHT, GAIN og OFFSET i henhold til kalibreringsmålingerne. Jeg brugte afstandsformlen i den originale artikel til at estimere afstanden, og jeg udskriver afstanden ved hjælp af LCD -displayet.

Koden opsætter først kameraet og GPIO, derefter vil vi tænde LCD -baggrundsbelysningen for bedre at se målingerne. LCD -indgangen er tilsluttet GPIO14. Hvert 5. sekund eller deromkring vil vi:

  1. aktivere laserdioden
  2. fange billedet i hukommelsen
  3. deaktiver laserdioden
  4. spore laseren ved hjælp af HSV -områdefiltre
  5. skriv det resulterende billede til disken med henblik på fejlfinding
  6. beregne afstanden baseret på y -koordinaten
  7. skriv afstanden på LCD -displayet.

Selvom foranstaltningerne er meget præcise og præcise nok til min brugstilfælde, er der masser af plads til forbedringer. For eksempel er laserprikken af meget dårlig kvalitet, og laserlinjen er ikke rigtig centreret. Med en laser af bedre kvalitet bliver kalibreringstrinnene mere præcise. Selv kameraet er ikke rigtig godt placeret i min jig, det vipper til bunden.

Jeg kan også øge opløsningen på afstandsmåleren ved at dreje kameraet med 90º ved hjælp af fuld med og øge opløsningen til det maksimum, der understøttes af kameraet. Med den nuværende implementering er vi begrænset til et område på 0 til 384 pixels, vi kan øge den øvre grænse til 1640, 4 gange den aktuelle opløsning. Afstanden bliver endnu mere præcis.

Som opfølgning bliver jeg nødt til at arbejde med de præcisionsforbedringer, jeg nævnte ovenfor, og bygge et kabinet til afstandsmåleren. Skabet skal have en præcis dybde for at lette væg -til -væg -målinger.

Alt i alt er det nuværende system nok for mig og vil spare mig nogle penge for at lave min husplan!

Anbefalede: