Съдържание:
- Стъпка 1: Списък на материалите
- Стъпка 2: Изграждане на лазер и камера
- Стъпка 3: Управление на лазера и LCD дисплея
- Стъпка 4: Откриване на лазера с помощта на OpenCV
- Стъпка 5: Калибриране на далекомера
- Стъпка 6: Измерване на разстояния
Видео: Създаване на далекомер с помощта на лазер и камера: 6 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:53
В момента планирам вътрешни работи за следващата пролет, но тъй като току -що придобих стара къща, нямам никакъв план за къща. Започнах да измервам разстоянията от стена до стена с помощта на линийка, но тя е бавна и склонна към грешки. Мислех да си купя далекомер, за да улесня процеса, но след това намерих стара статия за изграждането на собствен далекомер с помощта на лазер и камера. Оказа се, че имам тези компоненти в работилницата си.
Проектът се основава на тази статия:
Единствената разлика е, че ще изграждам далекомера, използвайки Raspberry Pi Zero W, LCD дисплей и модула Raspberry Pi Camera. Ще използвам и OpenCV за проследяване на лазера.
Предполагам, че сте технически разбиращи и че се чувствате удобно да използвате Python и командния ред. В този проект използвам Pi в режим без глава.
Да започваме!
Стъпка 1: Списък на материалите
За този проект ще ви трябва:
- евтин 6 мм 5mW лазер
- 220 Ω резистор
- транзистор 2N2222A или нещо подобно
- a Raspberry Pi Zero W
- Raspberry Pi Camera v2
- LCD дисплей Nokia 5110 или еквивалент
- няколко джъмперни проводници и малка дъска
Използвах моя 3D принтер, за да отпечатам джиг, който ми помогна по време на експериментите. Планирам също да използвам 3D принтера за изграждане на цялостно заграждение за далекомера. Можете напълно без.
Стъпка 2: Изграждане на лазер и камера
Системата приема фиксирано разстояние между обектива на камерата и лазерния изход. За да улесня тестовете, отпечатах джиг, в който мога да монтирам камерата, лазера и малка верига за задвижване на лазера.
Използвах размерите на модула на камерата за изграждане на стойката за камерата. Използвах главно цифров шублер и прецизен владетел, за да направя измерванията. За лазера създадох 6 мм отвор с малко подсилване, за да гарантирам, че лазерът няма да се движи. Опитах се да запазя достатъчно място, за да има фиксирана малка дъска в задната част на джига.
Използвах Tinkercad за изграждането, можете да намерите модела тук:
Между центъра на лазерния обектив и центъра на обектива на камерата има 3,75 см разстояние.
Стъпка 3: Управление на лазера и LCD дисплея
Следвах този урок https://www.algissalys.com/how-to/nokia-5110-lcd-on-raspberry-pi, за да управлявам LCD дисплея с Raspberry Pi Zero. Вместо да редактирате файла /boot/config.txt, можете да активирате SPI интерфейса, като използвате sudo raspi-config чрез командния ред.
Използвам Raspberry Pi Zero в режим без глава, използвайки най -новия, към момента, Raspbian Stretch. Няма да обхващам инсталацията в тази инструкция, но можете да следвате това ръководство: https://medium.com/@danidudas/install-raspbian-jessie-lite-and-setup-wi-fi-without-access-to- command-line-or-using-the-network-97f065af722e
За да имам ярка лазерна точка, използвам 5V релсата на Pi. За това ще използвам транзистор (2N2222a или еквивалентен) за задвижване на лазера с помощта на GPIO. Резистор от 220 Ω в основата на транзистора позволява достатъчно ток през лазера. Използвам RPi. GPIO за манипулиране на Pi GPIO. Свързах основата на транзистора към щифта GPIO22 (15 -ия пин), излъчвателя към земята и колектора към лазерния диод.
Не забравяйте да активирате интерфейса на камерата, като използвате sudo raspi-config чрез командния ред.
Можете да използвате този код, за да тествате настройката си:
Ако всичко върви добре, трябва да имате файл dot.jpg, в който ще видите фона и лазерна точка.
В кода ние настройваме камерата и GPIO, след това активираме лазера, улавяме изображението и деактивираме лазера. Тъй като изпълнявам Pi в режим без глава, трябва да копирам изображенията от моя Pi на компютъра си, преди да ги покажа.
В този момент вашият хардуер трябва да бъде конфигуриран.
Стъпка 4: Откриване на лазера с помощта на OpenCV
Първо, трябва да инсталираме OpenCV на Pi. По принцип имате три начина да го направите. Можете или да инсталирате старата пакетирана версия с apt. Можете да компилирате желаната от вас версия, но в този случай времето за инсталиране може да достигне до 15 часа и по -голямата част от него за действителната компилация. Или, моят предпочитан подход, можете да използвате предварително компилирана версия за Pi Zero, която се предоставя от трета страна.
Тъй като е по -просто и по -бързо, използвах пакет на трета страна. Стъпките за инсталиране можете да намерите в тази статия: https://yoursunny.com/t/2018/install-OpenCV3-PiZero/ Опитах много други източници, но техните пакети не бяха актуални.
За да проследя лазерна показалка, актуализирах кода от https://github.com/bradmontgomery/python-laser-tracker, за да използвам модула Pi камера вместо USB устройство. Можете директно да използвате кода, ако нямате модул Pi камера и искате да използвате USB камера.
Пълният код можете да намерите тук:
За да стартирате този код, ще трябва да инсталирате пакетите на Python: възглавница и пикамера (sudo pip3 install pillow picamera).
Стъпка 5: Калибриране на далекомера
В оригиналната статия авторът е проектирал процедура за калибриране, за да получи необходимите параметри за трансформиране на y координатите на действително разстояние. Използвах масата в хола си за калибриране и старо парче крафт. На всеки 10 см или повече отбелязвах координатите x и y в електронна таблица: https://docs.google.com/spreadsheets/d/1OTGu09GLAt… За да се уверя, че всичко работи правилно, на всяка стъпка проверявах заснетите изображения, за да видя дали лазерът е бил правилно проследен. Ако използвате зелен лазер или ако вашият лазер не е проследен правилно, ще трябва да коригирате съответно нюанса, наситеността и прага на стойността на програмата.
След като фазата на измерване приключи, е време действително да се изчислят параметрите. Подобно на автора използвах линейна регресия; всъщност Google Spreadsheet ми свърши работата. След това използвах отново тези параметри, за да изчисля приблизително разстояние и да го проверя спрямо действителното разстояние.
Време е да инжектирате параметрите в програмата за далекомер, за да измервате разстоянията.
Стъпка 6: Измерване на разстояния
В кода: https://gist.github.com/kevinlebrun/e767a46855e5fd501d820e1c5fcc527c актуализирах променливите HEIGHT, GAIN и OFFSET според измерванията за калибриране. Използвах формулата за разстояние в оригиналната статия, за да преценя разстоянието и отпечатах разстоянието с помощта на LCD дисплея.
Кодът първо ще настрои камерата и GPIO, след това искаме да светнем LCD подсветката, за да видим по -добре измерванията. LCD входът е включен към GPIO14. На всеки 5 секунди или повече ще:
- активирайте лазерния диод
- заснемете изображението в паметта
- деактивирайте лазерния диод
- проследявайте лазера с помощта на филтрите за обхват на HSV
- запишете полученото изображение на диска за отстраняване на грешки
- изчислете разстоянието въз основа на координатата y
- запишете разстоянието на LCD дисплея.
Въпреки това, мерките са много прецизни и достатъчно точни за моя случай на използване, има много място за подобрения. Например, лазерната точка е с много лошо качество и лазерната линия всъщност не е центрирана. С лазер с по -добро качество стъпките на калибриране ще бъдат по -прецизни. Дори камерата не е много добре позиционирана в джига ми, тя се накланя към дъното.
Мога също така да увелича разделителната способност на далекомера чрез завъртане на камерата с 90º с помощта на пълната с и да увелича разделителната способност до максималната поддържана от камерата. С настоящата реализация сме ограничени до 0 до 384 пиксела, можем да увеличим горната граница до 1640, 4 пъти над текущата разделителна способност. Разстоянието ще бъде още по -точно.
Като последващи действия ще трябва да работя върху подобренията на прецизността, които споменах по-горе, и да изградя заграждение за далекомера. Корпусът ще трябва да бъде с прецизна дълбочина, за да улесни измерванията от стена до стена.
Като цяло сегашната система ми е достатъчна и ще ми спести някои пари, за да направя моя дом план!
Препоръчано:
Създаване на онлайн уеб камера за риболов!: 8 стъпки (със снимки)
Създаване на онлайн уеб камера за рибен резервоар!: Стъпка по стъпка ръководство за модифициране на корпуса на IP камера, така че да може да бъде прикрепена директно към аквариум. Причината за това е необходимо, защото уеб камерите обикновено са проектирани да бъдат поставени пред обекта или се нуждаят от стойка. Обаче с рибен та
(2) Започване на създаване на игра - Създаване на начален екран в Unity3D: 9 стъпки
(2) Започване на създаване на игра - Създаване на пръскащ екран в Unity3D: В тази инструкция ще научите как да направите прост начален екран в Unity3D. Първо, ще отворим Unity
Създаване на Bluetooth адаптер Pt.2 (Създаване на съвместим високоговорител): 16 стъпки
Изработка на Bluetooth адаптер Pt.2 (Създаване на съвместим високоговорител): В тази инструкция ще ви покажа как да използвам моя Bluetooth адаптер, за да направя стария високоговорител съвместим с Bluetooth.*Ако не сте прочели първата ми инструкция за „Изработване Bluetooth адаптер " Предлагам ви да го направите, преди да продължите
UNICORN CAMERA - Raspberry Pi Zero W NoIR 8MP камера Създаване: 7 стъпки (със снимки)
UNICORN CAMERA - Raspberry Pi Zero W NoIR 8MP Камера Изграждане: Pi Zero W NoIR 8MP Камера Създаване Тази инструкция е създадена, за да помогне на всеки, който иска инфрачервена камера или наистина готина преносима камера или преносима Raspberry Pi камера или просто иска да се забавлява, хехе . Това е най -достъпната и конфигурирана
Превръщане на вашата камера във „военна нощна визия“, добавяне на ефект на нощно виждане или създаване на режим NightVision „на всяка камера !!!: 3 стъпки
Превръщане на камерата ви във „военна нощна визия“, добавяне на ефект на нощна видимост или създаване на режим „NightVision“на всяка камера !!!: *** *Ако имате нужда от помощ, моля, изпратете имейл: [email protected] Говоря английски, френски, японски, испански и знам & други езици, ако