Inhoudsopgave:

Afstandsmeter maken met een laser en een camera: 6 stappen
Afstandsmeter maken met een laser en een camera: 6 stappen

Video: Afstandsmeter maken met een laser en een camera: 6 stappen

Video: Afstandsmeter maken met een laser en een camera: 6 stappen
Video: De Bosch MeasureOn-app: alle informatie bij de hand 2024, Juni-
Anonim
Afstandsmeter maken met een laser en een camera
Afstandsmeter maken met een laser en een camera

Ik ben momenteel wat interieurwerkzaamheden aan het plannen voor volgend voorjaar, maar aangezien ik net een oud huis heb gekocht, heb ik geen huisplan. Ik begon afstanden van muur tot muur te meten met behulp van een liniaal, maar het is traag en foutgevoelig. Ik dacht erover om een afstandsmeter te kopen om het proces te vergemakkelijken, maar toen vond ik een oud artikel over het bouwen van een eigen afstandsmeter met een laser en een camera. Het blijkt dat ik die componenten in mijn werkplaats heb.

Het project is gebaseerd op dit artikel:

Het enige verschil is dat ik de afstandsmeter ga bouwen met een Raspberry Pi Zero W, een LCD en de Raspberry Pi Camera-module. Ik zal ook OpenCV gebruiken om de laser te volgen.

Ik ga ervan uit dat je technisch onderlegd bent en dat je vertrouwd bent met het gebruik van Python en de opdrachtregel. In dit project gebruik ik de Pi in headless-modus.

Laten we beginnen!

Stap 1: Lijst met materialen

Voor dit project heb je nodig:

  • een goedkope 6mm 5mW laser
  • een weerstand van 220
  • een 2N2222A-transistor of iets vergelijkbaars
  • een Raspberry Pi Zero W
  • een Raspberry Pi-camera v2
  • een Nokia 5110 LCD-scherm of gelijkwaardig
  • wat jumperdraden en een klein breadboard

Ik gebruikte mijn 3D-printer om een mal te printen die me hielp tijdens de experimenten. Ik ben ook van plan om de 3D-printer te gebruiken om een complete behuizing voor de afstandsmeter te bouwen. Je kunt helemaal zonder.

Stap 2: Een laser- en cameramal bouwen

Een laser- en cameramal bouwen
Een laser- en cameramal bouwen
Een laser- en cameramal bouwen
Een laser- en cameramal bouwen
Een laser- en cameramal bouwen
Een laser- en cameramal bouwen

Het systeem gaat uit van een vaste afstand tussen de cameralens en de laseroutput. Om de tests te vergemakkelijken heb ik een mal geprint waarin ik de camera, de laser en een klein stuurcircuit voor de laser kan monteren.

Ik heb de afmetingen van de cameramodule gebruikt om de houder voor de camera te bouwen. Ik gebruikte voornamelijk een digitale schuifmaat en een precisieliniaal om de metingen te doen. Voor de laser heb ik een gat van 6 mm gemaakt met een klein beetje versteviging om ervoor te zorgen dat de laser niet beweegt. Ik heb geprobeerd genoeg ruimte over te houden om een klein breadboard aan de achterkant van de mal te bevestigen.

Ik heb Tinkercad gebruikt voor de build, je kunt het model hier vinden:

Er is een afstand van 3,75 cm tussen het midden van de laserlens en het midden van de cameralens.

Stap 3: Rijden met de laser en het LCD-scherm

Aansturen van de laser en het LCD-scherm
Aansturen van de laser en het LCD-scherm
Aansturen van de laser en het LCD-scherm
Aansturen van de laser en het LCD-scherm

Ik volgde deze tutorial https://www.algissalys.com/how-to/nokia-5110-lcd-on-raspberry-pi om het LCD-scherm aan te sturen met de Raspberry Pi Zero. In plaats van het /boot/config.txt-bestand te bewerken, kunt u de SPI-interface inschakelen met sudo raspi-config via de opdrachtregel.

Ik gebruik de Raspberry Pi Zero in headless-modus met de nieuwste, op dat moment, Raspbian Stretch. Ik zal de installatie in deze Instructable niet behandelen, maar je kunt deze handleiding volgen: https://medium.com/@danidudas/install-raspbian-jessie-lite-and-setup-wi-fi-without-access-to- opdrachtregel-of-het-netwerk-97f065af722e gebruiken

Om een heldere laserpunt te hebben, gebruik ik de 5V-rail van de Pi. Daarvoor zal ik een transistor (2N2222a of gelijkwaardig) gebruiken om de laser aan te sturen met behulp van de GPIO. Een weerstand van 220 aan de basis van de transistor laat voldoende stroom door de laser. Ik gebruik RPi. GPIO om de Pi GPIO te manipuleren. Ik verbond de basis van de transistor met de GPIO22-pin (de 15e pin), de emitter met de grond en de collector met de laserdiode.

Vergeet niet om de camera-interface in te schakelen met sudo raspi-config via de opdrachtregel.

U kunt deze code gebruiken om uw installatie te testen:

Als alles goed is gegaan, zou je een dot.jpg-bestand moeten hebben waarin je de achtergrond en een laserpunt ziet.

In de code stellen we de camera en de GPIO in, dan schakelen we de laser in, we leggen het beeld vast en we schakelen de laser uit. Omdat ik de Pi in de headless-modus gebruik, moet ik de afbeeldingen van mijn Pi naar mijn computer kopiëren voordat ik ze laat zien.

Op dit punt moet uw hardware worden geconfigureerd.

Stap 4: De laser detecteren met OpenCV

Eerst moeten we OpenCV op de Pi installeren. Je hebt in principe drie manieren om het te doen. U kunt ofwel de oude verpakte versie installeren met apt. U kunt de gewenste versie compileren, maar in dit geval kan de installatietijd oplopen tot 15 uur en het grootste deel voor de eigenlijke compilatie. Of, mijn voorkeursbenadering, u kunt een vooraf gecompileerde versie voor de Pi Zero gebruiken die door een derde partij wordt geleverd.

Omdat het eenvoudiger en sneller is, heb ik een pakket van derden gebruikt. Je vindt de installatiestappen in dit artikel: https://yoursunny.com/t/2018/install-OpenCV3-PiZero/ Ik heb veel andere bronnen geprobeerd, maar hun pakketten waren niet up-to-date.

Om een laserpointer te volgen, heb ik de code van https://github.com/bradmontgomery/python-laser-tracker bijgewerkt om de Pi-cameramodule te gebruiken in plaats van een USB-apparaat. U kunt de code direct gebruiken als u geen Pi-cameramodule heeft en een USB-camera wilt gebruiken.

De volledige code vind je hier:

Om deze code uit te voeren, moet je de Python-pakketten installeren: pillow en picamera (sudo pip3 install pillow picamera).

Stap 5: Kalibratie van de afstandsmeter

Kalibratie van de afstandsmeter
Kalibratie van de afstandsmeter
Kalibratie van de afstandsmeter
Kalibratie van de afstandsmeter
Kalibratie van de afstandsmeter
Kalibratie van de afstandsmeter

In het oorspronkelijke artikel ontwierp de auteur een kalibratieprocedure om de vereiste parameters te krijgen om de y-coördinaten om te zetten in een werkelijke afstand. Ik gebruikte mijn woonkamertafel voor de kalibraties en een oud stuk kraftpapier. Om de 10 cm noteerde ik de x- en y-coördinaten in een spreadsheet: https://docs.google.com/spreadsheets/d/1OTGu09GLAt… Om er zeker van te zijn dat alles correct werkte, controleerde ik bij elke stap de vastgelegde afbeeldingen om te zien of de laser werd correct gevolgd. Als u een groene laser gebruikt of als uw laser niet correct wordt gevolgd, moet u de tint, verzadiging en waardedrempel van het programma dienovereenkomstig aanpassen.

Zodra de meetfase is voltooid, is het tijd om de parameters daadwerkelijk te berekenen. Net als de auteur gebruikte ik een lineaire regressie; eigenlijk deed Google Spreadsheet het werk voor mij. Ik heb die parameters vervolgens opnieuw gebruikt om een geschatte afstand te berekenen en deze te vergelijken met de werkelijke afstand.

Het is nu tijd om de parameters in het meetzoekerprogramma te injecteren om afstanden te meten.

Stap 6: Afstanden meten

Afstanden meten
Afstanden meten

In de code: https://gist.github.com/kevinlebrun/e767a46855e5fd501d820e1c5fcc527c Ik heb de variabelen HEIGHT, GAIN en OFFSET bijgewerkt volgens de kalibratiemetingen. Ik gebruikte de afstandsformule in het originele artikel om de afstand te schatten en ik drukte de afstand af met behulp van het LCD-scherm.

De code stelt eerst de camera en de GPIO in, daarna willen we de LCD-achtergrondverlichting oplichten om de metingen beter te kunnen zien. De LCD-ingang is aangesloten op de GPIO14. Elke 5 seconden of zo, zullen we:

  1. schakel de laserdiode in
  2. de afbeelding in het geheugen vastleggen
  3. de laserdiode uitschakelen
  4. volg de laser met behulp van de HSV-bereikfilters
  5. schrijf de resulterende afbeelding naar de schijf voor foutopsporingsdoeleinden
  6. bereken de afstand op basis van de y-coördinaat
  7. schrijf de afstand op het LCD-scherm.

Echter, de maatregelen zijn zeer nauwkeurig en nauwkeurig genoeg voor mijn gebruik, er is veel ruimte voor verbeteringen. Zo is de laserpunt van zeer slechte kwaliteit en is de laserlijn niet echt gecentreerd. Met een laser van betere kwaliteit zullen de kalibratiestappen nauwkeuriger zijn. Zelfs de camera is niet echt goed gepositioneerd in mijn mal, hij kantelt naar de bodem.

Ik kan ook de resolutie van de afstandsmeter verhogen door de camera 90º te draaien met behulp van de volledige met en de resolutie te verhogen tot het maximum dat door de camera wordt ondersteund. Met de huidige implementatie zijn we beperkt tot een bereik van 0 tot 384 pixels, we zouden de bovengrens kunnen verhogen tot 1640, 4 keer de huidige resolutie. De afstand zal nog nauwkeuriger zijn.

Als vervolg zal ik moeten werken aan de precisieverbeteringen die ik hierboven heb genoemd en een behuizing voor de afstandsmeter moeten bouwen. De behuizing moet een precieze diepte hebben om metingen van muur tot muur te vergemakkelijken.

Al met al is het huidige systeem genoeg voor mij en zal het me wat geld besparen bij het maken van mijn huisplan!

Aanbevolen: