Мазмұны:

Құпия бөлімі бар бетті тану айнасы: 15 қадам (суреттермен)
Құпия бөлімі бар бетті тану айнасы: 15 қадам (суреттермен)

Бейне: Құпия бөлімі бар бетті тану айнасы: 15 қадам (суреттермен)

Бейне: Құпия бөлімі бар бетті тану айнасы: 15 қадам (суреттермен)
Бейне: Еркекті төсекте қалай қызықтырамыз?Күйеуім өзгеге кетіп қалама деп қорқамын 2024, Қараша
Anonim
Құпия бөлімі бар бетті тану айнасы
Құпия бөлімі бар бетті тану айнасы
Құпия бөлімі бар бетті тану айнасы
Құпия бөлімі бар бетті тану айнасы
Құпия бөлімі бар бетті тану айнасы
Құпия бөлімі бар бетті тану айнасы

Мені әрқашан әңгімелерде, киноларда және т. Сонымен, мен «Құпия купе» байқауын көргенде, мен бұл идеяны өз бетімше сынап көруді шештім және оған дұрыс адам қараған кезде жасырын бүйірлік тартпаны ашатын қарапайым көрінетін айна жасауды шештім.

Raspberry Pi, python бағдарламалауы мен 8-ші сынып дүкені туралы кейбір білімдерді қолдана отырып, біз тек дұрыс пайдаланушы ғана қол жеткізе алатын объектілерді көзге көрінбейтін жерде жасыру үшін осы керемет құрылғыны жасай аламыз.

Мен ақпарат пен ресурстарды алған адамдарға/платформаларға ерекше алғыс айтқым келеді:

TeCoEd - Youtube арнасы

PiMyLifeUp -тен Эммет

Hackster.io сайтындағы MJRoBot (профиль)

Гэвен Макдональд - Youtube арнасы

Такер Шеннон Thingiverse туралы (профиль)

Жабдықтар

Рамалық материалдар:

  • Ағаш тақтай (Бұл тақтаның өлшемдері 42 «7,5» 5/16 «)
  • Қарындашпен сурет жақтауы (әйнекпен)
  • Бояу бояуы
  • Бір жақты шағылысатын жабысқақ
  • Шыны тазалағыш және шүберек
  • MDF ағашы

Бетті тануға арналған құралдар:

  • Raspberry Pi (мен Pi 3 B+ қолдандым, бірақ басқа нұсқалар бар)
  • Камера модулі
  • Қадамдық мотор

Құралдар:

  • Үстелді аралау
  • Jig Saw
  • Қағаз ағашы
  • Желім таспасы
  • Өлшеу
  • Қайшы
  • Спрей бөтелкесі
  • 3D принтері
  • Супер желім

1 -қадам: қораптың жақтауын кесу

Қорап жақтауларына арналған қысқартулар
Қорап жақтауларына арналған қысқартулар
Қорап жақтауларына арналған қысқартулар
Қорап жақтауларына арналған қысқартулар
Қорап жақтауларына арналған қысқартулар
Қорап жақтауларына арналған қысқартулар
Қорап жақтауларына арналған қысқартулар
Қорап жақтауларына арналған қысқартулар

Мен екінші жақтағы дүкеннен сурет жақтауын сатып алдым. Ескерту, жақтауды құрайтын тақталардың ені кемінде 1 1/2 дюйм екеніне көз жеткізіңіз. Осылайша сіз басқа ағаш тақтайшалармен жұмыс жасауға жеткілікті орын жабыстыра аласыз. Сонымен қатар, әйнектің Мен мұзды кездейсоқ сатып алдым, содан кейін мөлдір шыны үшін басқа жақтауды сатып алуға тура келді, себебі менің жақтауым қораптың өлшеміне байланысты өзгеруі мүмкін.

  • Фреймді портреттік бағытта орналастырыңыз. Жоғарғы және астыңғы жағындағы ½ »қосымша жақтаумен шыны тесік жағының ұзын жақтарын (LS) өлшеңіз. (яғни, шыны тесік өлшемінің ұзын жағына дюйм қосыңыз. Мұны жазыңыз және LSM (Long Side Measurement) белгісін қойыңыз.
  • Сол сияқты, тесіктің жоғарғы жағын өлшеп, қосымша 1 »қосыңыз. Мұны жазыңыз және SSM (Short Side Measurement) белгісін қойыңыз.
  • Тақтаны алыңыз және үстелге арналған арамен екі LSM x 2 «және екі SSM x 2» кесіңіз.
  • LSM кесулерінің біреуін алыңыз және 2 «x1» тіктөртбұрышты өлшеңіз, ол төменнен 1 «және ½» сол және оң жақтан (3 суретте көрсетілгендей).
  • Шұңқырды кесу үшін джигсо пайдаланыңыз. Содан кейін шеттерін тегістеу үшін тегістеу қағазын қолданыңыз.

2 -қадам: Тартпаны қысқарту

Тартпаға арналған қысқартулар
Тартпаға арналған қысқартулар
Тартпаға арналған қысқартулар
Тартпаға арналған қысқартулар
Тартпаға арналған қысқартулар
Тартпаға арналған қысқартулар
Тартпаға арналған қысқартулар
Тартпаға арналған қысқартулар

Енді біз жәшікті салуды бастаймыз (құпия бөлім).

  • 4 «x 1» екі жағын, 3 ⅜ »x 1» (артқы жағы), 4 ¼ »x 1 ¼» (алдыңғы шеті) және 4 «x 3 ⅜» (платформа) кесіңіз.
  • Алғашқы 4 «x 1» жағын платформаның 4 »жағына жабыстырыңыз. Мен бірнеше бүктелген қағазды платформаның астына қойдым, сондықтан ол сәл көтерілді, осылайша ол LS тақтасында кесілген тесікке сүйремейді. 30 минут кептіруге қойыңыз.
  • Сол сияқты, платформаның 3 дюймдік жиегіне 3 дюйм х 1 дюймді жабыстырыңыз. 30 минут кептіруге қойыңыз. Содан кейін екінші 4 «x 1» жағын біріншісінің қарама -қарсы жағына жабыстырыңыз. 30 минут кептіруге қойыңыз.
  • Алдыңғы жиекті әзірге шетке қойыңыз. Бұл жәшікке жабыстырылған соңғы нәрсе болады.
  • Аяқтағаннан кейін, оның LSM тақтасына салынған тесікке сәйкес келетінін тексеріңіз. Олай болмаған жағдайда, тартпа оңай кіріп -шығып кетпейінше, тесікті құммен сүртіңіз, сонда ешқандай тартылыс болмайды.

3 -қадам: жақтауды біріктіру

Жақтауды біріктіру
Жақтауды біріктіру
Жақтауды біріктіру
Жақтауды біріктіру
Жақтауды біріктіру
Жақтауды біріктіру

Барлық бөлшектер аяқталғаннан кейін біз жақтауды жинауға кірісе аламыз.

  • LSM тақтасын әр жағынан ½ »шыны тесікпен ортаға жабыстырыңыз. Оның тесіктен away”қашықтықта жабыстырылғанын тексеріңіз (1 суретте көрсетілгендей). 30 минут кептіруге қойыңыз.
  • Бірінші SSM тақтасын шеті LSM тақтасының ішкі жағына тиіп жабыстырыңыз. (Тікелей желімделгеніне көз жеткізу үшін сызғышты қолданыңыз). 30 минут кептіруге қойыңыз.
  • Екінші LSM жағын алыңыз да, біріншісіне ұқсас желім салыңыз. Ол тесіктен ½ »қашықтықта екеніне және жаңадан бекітілген SSM тақтаның ішкі жағына жабыстырылғанына көз жеткізіңіз. 30 минут кептіруге қойыңыз.
  • Жоғарғы жиекке соңғы SSM жабыстырыңыз. Сізде екі жақта екі LSM бар болғандықтан, оларды қаншалықты түзеткеніңізге байланысты, SSM -дің сәйкес келетініне көз жеткізу үшін оны тегістеу қажет болуы мүмкін (менің кесу кейде өшіп қалады). 30 минут кептіруге қойыңыз.
  • Тартпаның төменгі жағы мен жақтаудың арасындағы кішкене орынды өлшеңіз. МДФ ағашының бір бөлігін осы өлшеммен 4 дюймге кесіңіз. Бұл бөлікті тартпаның қасына жақын етіп жасағыңыз келеді, бірақ оған тигізбеңіз. Бұл тартпаны ең аз үйкеліспен ұстауға арналған.
  • Барлығы аяқталғаннан кейін мен жақтауды барлық бөлшектер сәйкес келетін етіп боядым.

4 -қадам: Айна үшін

Айна үшін
Айна үшін
Айна үшін
Айна үшін
Айна үшін
Айна үшін
Айна үшін
Айна үшін

Мен Amazon-дан сатып алған бір жақты пленка желімі шамамен 10 доллар болды. Егер сізді қызықтыратын болса, бағасы әлдеқайда жоғары сапалы. Мен қолданатын нәрсе шағылысады, бірақ сіз оны үйде көретін қарапайым айна емес деп айта аласыз. Қымбаттар сізге осындай көрініс береді.

  • Әйнекті екі жағынан шыны тазалағышпен тазалаңыз.
  • Бір жақты желімді орап, әйнекті үстіне қойыңыз. Желімді кесіңіз, әйнектің әр жағында кемінде ½”артық болуы керек.
  • Стаканды шетке қойып, оның бір жағын сумен сулаңыз. Содан кейін пластикалық пальтоды бір жақты жабысқақтан тазалаңыз және жаңадан ашылған жағын сумен бүркіңіз.
  • Стаканның дымқыл жағын желімнің ылғалды жағына қойыңыз. 30 минутқа отыруға рұқсат етіңіз.
  • Желім мен әйнек арасындағы көпіршіктерді тегістеу үшін төңкеріп, бас бармағыңызды қолданыңыз. Содан кейін артық желімді шеттерден кесіңіз.

5 -қадам: Raspbian Stretch орнатыңыз

Бұл менің Raspberry Pi ортасына бірінші рет кіруім, мен ОЖ -ны орнату туралы нұсқауларды іздей бастадым. Ақырында мен Youtube -те TeCoEd -тің қарапайым оқулығын таптым, ол SD картасына Stretch -ті орнату процесін өтті (өте жақсы кіріспемен). Бұл оқулыққа сілтеме:

Негізінде, сізге қажет:

  • SD картасын пішімдеу үшін Drive >> Drive Tools >> Format таңдаңыз. Raspian Stretch үшін ZIP файлын жүктеңіз (мына жерден табыңыз:
  • ОЖ суретін SD картасына жыпылықтаңыз. TeCoEd мұны аяқтау үшін Win32 Disk Imager қолданды. Мен balenaEtcher -ді орнатуды аяқтадым, ол біршама қарапайым болып көрінді. (Міне balenaEtcher жүктеу сілтемесі:
  • BalenaEtcher -ге кіргеннен кейін «Файлдан Flash» таңдаңыз және бұрын жүктелген ZIP файлын таңдаңыз. Содан кейін қалаған SD картасын таңдаңыз (егер автоматты түрде таңдалмаса). Содан кейін шырынды жарқыл түймесін басып, сиқырдың болғанын күтіңіз.

SD картасына орнатылғаннан кейін сіз оны Raspberry Pi -ге енгізіп, жалпы Pi орнату процесі арқылы өтуге болады.

6 -қадам: OpenCV орнатыңыз

Енді бет-танымға бағдарланған бөліктерге өтіңіз. Беттерді тану үшін біз компьютердің көру қабілетімен жұмыс істеудің көптеген құралдары бар OpenCV кітапханасын жүктеуіміз керек.

OpenCV орнату мен үшін бағдарламалық қамтамасыз етудің ең қиын бөлігі болды. Бірақ көптеген нұсқауларды орындағаннан кейін мен ақыры PiMyLifeUp-тен Эмметтің оқулығын таптым, ол осында табылды:

Мен бұл қадамдарды орындамаймын, өйткені оларды сілтеме бойынша орындаған дұрыс болады (берілген түсініктемелермен және сайттан оңай көшіру және қою мүмкіндігімен).

7 -қадам: Камераны қосыңыз/тексеріңіз

Камераны қосу/тексеру
Камераны қосу/тексеру
Камераны қосу/тексеру
Камераны қосу/тексеру

OpenCV орнатылғаннан кейін менің қалған сапарымды Hackster.io сайтындағы MJRoBot оқулығының көмегімен аяқтадым:

Жұмысқа кіріспес бұрын, мен бұл сценарийлердің түпнұсқасы емес екенімді, бірақ олардың кейбір бөліктерін өзгертуді аяқтағанымды еске салғым келеді.

Бастау үшін біз экранда бейне түсіруге болатындығына көз жеткізу үшін камераны тексеруіміз керек. Мен MJRoBot 3 -қадамында берілген сценарийді іске қосуға бір сағаттай уақыт жұмсадым. Өмірге сәйкес, біз Raspberry Pi камерасын қосуымыз керек (берілген нұсқауларды оқу жақсы болар еді … ммм). Камераны дұрыс портқа қосқаннан кейін келесі әрекеттерді орындаңыз:

  • Командалық терминалды ашып, sudo raspi-config теріңіз
  • «Камераны қосу» тармағын таңдаңыз (бұл құрылғы опциясында болуы мүмкін)
  • «Енгізу» түймесін басыңыз
  • «Аяқтау» бөліміне өтіңіз, содан кейін сізге қайта жүктеу ұсынылады

Содан кейін мына қадамдарды орындаңыз:

  • Таңқурайдың негізгі мәзіріне өтіңіз (жоғарғы сол жақта)
  • Параметрлер
  • Raspberry Pi конфигурациясы
  • Интерфейстер
  • Содан кейін камерада «Қосылған» таңдаңыз.
  • Содан кейін «Жарайды»

Енді сіз бұл сценарийді камераны тексеру үшін MJRoBot оқулығынан сәтті іске қосуға тиіссіз (есте сақтаңыз, бұл код пен толығырақ сипаттама MJRobot оқулығының жоғарыдағы сілтемесінде берілген):

numpy санын np ретінде импорттаңыз

cv2 cap = cv2. VideoCapture (0) cap.set (3, 640) # set Width cap.set (4, 480) # set Height while (True): ret, frame = cap.read () frame = cv2. аудару (кадр, -1) # Камераны тігінен сұр түске айналдыру = cv2.cvtColor (кадр, cv2. COLOR_BGR2GRAY) cv2.imshow ('кадр', жақтау) cv2.imshow ('сұр', сұр) k = cv2.waitKey (30) & 0xff if k == 27: # cap қалпынан шығу үшін 'ESC' түймесін басыңыз.release () cv2.destroyAllWindows ()

Алдыңғы кодта екі терезе болуы керек: біреуі түсті, екіншісі сұр шкалада. Егер сіз осы уақытқа дейін жетсеңіз, менің ойымша, сіз жақсы сэндвичке лайықсыз.

8 -қадам: Деректер мен жаттығулар туралы мәліметтерді жинау

Деректер мен дайындық мәліметтерін жинау
Деректер мен дайындық мәліметтерін жинау
Деректер мен дайындық мәліметтерін жинау
Деректер мен дайындық мәліметтерін жинау
Деректер мен дайындық мәліметтерін жинау
Деректер мен дайындық мәліметтерін жинау

Ұсынылған оқулықта автор жақында берілетін код процестері туралы тереңірек айтады, бірақ бұл айна қалай жасалғандығы туралы нұсқаулар болғандықтан, мен тарихқа да, күрделі механикаға да терең үңілмеймін. Мен сіздің өміріңіздің бір айын осы екі нәрсе туралы оқуға кеңес беремін, себебі олар сіздің ойыңызға жақсы қызмет етеді.

Мұның бәрі жұмыс істемей тұрып, тағы үш сценарийді іске қосу керек. Біріншісі - мәліметтерді жинауға, екіншісі - оны үйретуге, соңғысы - шын мәнінде тануға арналған. Деректерді жинау үшін беттің нақты суреттерін алу және жаттығу үшін белгілі бір жерде сақтау қажет. Бұл кодты жасаушы мұның бәрін жасауды өте қарапайым етті, сондықтан мен бас ауруын болдырмау үшін осы нұсқауларды орындауды ұсынамын.

Пәрмен жолын ашыңыз және оны қызықты деп атайтын жаңа каталог жасаңыз (мен FaceRec деп атадым)

mkdir FaceRec

Енді каталогты FaceRec етіп өзгертіңіз және оның каталогын міндетті түрде атаңыз

CD FaceRec

mkdir деректер жиынтығы

Біз бұл жерде болған кезде, біз басқа жаттықтырушыны жаттықтырушы ретінде жасай аламыз

mkdir жаттықтырушысы

Енді сіз жүгіруге және пайдаланушының суретін түсіретін бірінші сценарийдің нұсқауларын орындауға болады. (Тек ескерту, пайдаланушы идентификаторын 1, 2, 3 және т.б. ретінде енгізуді ұмытпаңыз)

cv2import os cam = cv2. VideoCapture (0) cam.set (3, 640) # бейненің енін орнату cam.set (4, 480) # бейне биіктігін орнату face_detector = cv2. CascadeClassifier ('haarcascade_frontalface_default.xml') # Әрқайсысы үшін адам, бір сандық тұлға идентификаторын енгізіңіз face_id = енгізу ('\ n енгізу пайдаланушы идентификаторының соңын басыңыз ==>') басып шығару («\ n [INFO] Бетті түсіруді инициализациялау. Камераға қарап, күте тұрыңыз …») # Жеке іріктеу бетінің санын санауды инициализациялау count = 0 while (True): ret, img = cam.read () img = cv2.flip (img, -1) # бейне кескінді тігінен сұрға айналдыру = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) беттер = face_detector.detectMultiScale (сұр, 1,3, 5) (x, y, w, h) беттерінде: cv2.tectangle (img, (x, y), (x+w, y+h), (255, 0, 0), 2) санау + = 1 # Түсірілген суретті cv2.imwrite («деректер жиынтығы/Пайдаланушы.» + Str (face_id) + '.' + Str (санау) + «.jpg», сұр [y: y деректер жиынтығының қалтасына сақтаңыз. +h, x: x+w]) cv2.imshow ('image', img) k = cv2.waitKey (100) & 0xff # Егер k == 27 болса, бейнеден шығу үшін 'ESC' түймесін басыңыз: elif count> = 30: # 30 бет үлгісін алыңыз және бейнебаянды тоқтатыңыз k print («\ n [INFO] Бағдарламадан шығу және тазалау материалдары») cam.release () cv2.destroyAllWindows ()

Бұл кезде Pi -ге жастық орнатқаныңызға сенімді болыңыз. Олай болмаса, пәрменді іске қосыңыз:

жастықшаны орнатыңыз

Осыдан кейін сіз соңғы сценарийде қолданылатын.yaml файлын үздіксіз қамтамасыз ететін оқу сценарийін (екінші сценарий) іске қоса аласыз

cv2import numpy дегенді PIL импорттауынан np ретінде импорттау Кескінді импорттау os # Path кескін дерекқорының жолы = 'жиынтық' танушы = cv2.face. LBPHFaceRecognizer_create () детектор = cv2. CascadeClassifier («haarcascade_frontalface_default.xml»); getImagesAndLabels (жол) суреттер мен белгілерді алу үшін # функция: imagePaths = [os.path.join (жол, f) f үшін os.listdir (жол)] faceSamples = idP = imagePath үшін imagePath үшін: PIL_img = Image.open (imagePath).convert ('L') # оны сұр шкалаға түрлендіру img_numpy = np.array (PIL_img, 'uint8') id = int (os.path.split (imagePath) [-1]. бөлу («.») [1]) жүздері = detector.detectMultiScale (img_numpy) (x, y, w, h) үшін: faceSamples.append (img_numpy [y: y+h, x: x+w]) ids.append (id) return face Үлгілер, идентификаторлар басып шығарылады («\ n [INFO] Жаттығу беттері. Бұл бірнеше секундты алады. Күте тұрыңыз …») беттер, ids = getImagesAndLabels (жол) танушы.тр (жүздер, np.array (ids)) # Үлгіні жаттықтырушы/жаттықтырушыға сақтаңыз.yml танушы.жазу ('жаттықтырушы/жаттықтырушы.yml') # танушы.save () Mac жүйесінде жұмыс істеді, бірақ Pi -де емес # Үйретілген беттердің санын басып шығарыңыз және бағдарламаны басып шығаруды аяқтаңыз («\ n [INFO] {0} дайындалған тұлғалар. Бағдарламадан шығуда».формат (len (np.unique (ids)))))

Бұл сценарийлер жиынтығының ерекшелігі - жүйеге бірнеше беттерді енгізуге болады, егер қажет болса, көптеген адамдар айнаға кіре алады.

Төменде менде Data Capture сценарийі мен оқу сценарийі бар.

9 -қадам: Бетті тану уақыты

Бетті тану уақыты
Бетті тану уақыты
Бетті тану уақыты
Бетті тану уақыты

Ақырында, біз тану сценарийін іске қоса аламыз. Бұл сценарийге моторлық процесті функционалды ету үшін қосымша код қосылды, сондықтан мен бұл бөліктерді егжей -тегжейлі түсіндіремін. Мен оны бөлімдерге бөлемін, бірақ егер сіз соны қаласаңыз, бүкіл сценарийді қадамның соңына қоямын.

Біз қажет барлық модульдерді импорттаудан бастаймыз, содан кейін GPIO режимін GPIO. BCM -ге орнатамыз

numpy санын np ретінде импорттаңыз

импорттау импорттау уақыты импорттау RPi. GPIO ретінде GPIO GPIO.setwarnings (жалған) GPIO.setmode (GPIO. BCM)

ControlPin деп аталатын келесі тізім - бұл қадамдық қозғалтқыш үшін қолданылатын шығыс түйреуіштерді білдіретін сандар жиыны.

ControlPin = [14, 15, 18, 23]

For-loop бұл түйреуіштерді шығыс ретінде орнатады, содан кейін олардың өшірілгеніне көз жеткізеді. Менде тартпаны түймені басу арқылы жабу үшін әлі де код бар, бірақ мен оның орнына таймерді қолдануға шешім қабылдадым.

GPIO.setup (ControlPin , GPIO. OUT)

GPIO.output (ControlPin , 0) GPIO.setup (2, GPIO. IN, pull_up_down = GPIO. PUD_DOWN)

Келесі екі айнымалы - бұл қозғалтқышты басқару үшін қолданылатын тізбектер. Мен бұл ақпаратты Гэвен Макдональдтың керемет бейнебаянынан білдім, оны көруге кеңес беремін, себебі ол тек кодты ғана емес, нақты қозғалтқышты да тереңдетеді (мына жерден табуға болады: https://www.youtube.com/embed/Dc16mKFA7Fo). Негізінде, әрбір реттілік алдағы openComp және closeComp функцияларында кірістірілген ілмектерді қолдану арқылы қайталанады. Егер сіз мұқият қарасаңыз, seq2 - seq1 -ге тура қарама -қарсы. Ия, сіз ойлап таптыңыз. Біреуі қозғалтқышты алға жылжытуға арналған, екіншісі - кері.

seq1 =

seq2 =

OpenComp функциясынан бастап біз 1024 рет қайталанатын цикл құрамыз. MacDonald's 512 видеосына сәйкес, мотордың толық айналуы қамтамасыз етіледі, мен шамамен екі айналу жақсы ұзындық екенін анықтадым, бірақ оны жеке адамның өлшеміне байланысты реттеуге болады. Келесі цикл seq1 және seq2 табылған 8 массивтерді есепке алу үшін 8 қайталаудан тұрады. Ақырында, соңғы цикл осы массивтердің әрқайсысында орналасқан төрт элемент үшін төрт рет қайталанады, сонымен қатар бізде қозғалтқыш қосылған 4 GPIO түйреуіші. Бұл жердегі сызық GPIO түйреуішін таңдайды, содан кейін оны қайталауға байланысты оны қосады немесе өшіреді. Кейінгі қозғалтқыш мүлдем айналмауы үшін буферлік уақытты қамтамасыз етеді. Қозғалтқышты жылжыту үшін айналдырғаннан кейін, қозғалыс алдында 5 секунд ұйықтайды. Бұл уақытты осында реттеуге болады немесе таймерден гөрі сценариймен алға жылжу үшін батырманы қолдануға мүмкіндік беретін түсіндірілген кодты қосуға болады.

i ауқымында (1024):

(8) диапазонындағы жарты қадам үшін: (4) ауқымындағы түйреуіш үшін: GPIO.output (ControlPin [pin], seq1 [halfstep] [pin]) time.sleep (.001) '' 'while True: егер GPIO.кіріс (2) == GPIO. LOW: үзіліс; '' 'уақыт.ұйқы (5)

CloseComp функциясы дәл осылай жұмыс істейді. Қозғалтқыш артқа жылжытқаннан кейін мен энергияны ысырап етпеуіміз үшін соңғы GPIO түйреуіштерін төмен деңгейге қоюды жалғастырамын, содан кейін мен қозғалыс алдында тағы үш секунд уақыт қосамын.

i ауқымында (1024):

диапазондағы жартылай қадам үшін (8): ауқымдағы түйреуіш үшін (4): GPIO. шығыс (ControlPin [түйреуіш], сегмент 2 [жарты қадам] [түйреуіш]) уақыт.ұйқы (.001) басып шығару («Бөлім жабық») GPIO. шығыс (ControlPin [0], 0) GPIO.output (ControlPin [3], 0) time.sleep (3)

Келесі бөліктің негізгі бөлігі камераны орнатуға және бетті тануды бастауға жұмсалады. Тағы да, MKRoBot нұсқаулары бөліктерге көбірек қатысты, бірақ мен қазір айнаға қолданылатын бөлшектерді ғана көрсетемін.

Алдымен мен тізім атауларын өзгерттім, осылайша менің атым деректерді жинау кезінде мен тағайындаған индексте болды (менің жағдайда 1). Содан кейін мен қалған мәндерді Ешқайсысына қойдым, себебі менде деректер жиынтығында бет жоқ.

атаулар = ['Ешқайсысы', 'Даниэль', 'Ешкім', 'Ешқайсысы', 'Ешкім', 'Ешқайсысы]

Біздің соңғы бірнеше код жолдары thicc for-loop-да енгізілген. Мен сенімділікті бүтін сан ретінде сақтау үшін айнымалы жасадым (intConfidence) айнымалы сенімділік жолға айналғанға дейін. Содан кейін мен сенімділіктің 30-дан жоғары екенін және идентификаторды (компьютер қандай адамды анықтайтынын, бұл жағдайда «Даниэль») менің атыммен тең екенін тексеру үшін if-операторын қолданамын. Бұл расталғаннан кейін openComp функциясы шақырылады, ол (бұрын түсіндірілгендей) қозғалтқышты жылжытады, 5 секундтан кейін іске қосылады, содан кейін қозғалтқышты қарама -қарсы бағытта жылжытатын және thicc ілмегімен жұмыс жасамас бұрын біраз тазалауды жасайтын ComComp жабуға жалғасады.

егер intConfidence> 30 және id == 'Daniel' болса:

openComp () closeComp ()

Мен бұл жерден тапқан қате, кейде closeComp қайтып келгеннен кейін де код жалғасады, бірақ шартты if-операторы әлі де буферде тұрған бейне арнаны оқып жатқандай шындық болып шығады. Бұл әрдайым болмайтынына қарамастан, мен ешқашан болмайтындығына сенімдімін.

Міне, бұл барлық сценарий бір жерде (және төменде жүктеуге болады):

cv2 импорттау

np ретінде импорттау импорттау немесе импорттау уақыты импорттау RPi. GPIO ретінде GPIO GPIO.setwarnings (жалған) GPIO.setmode (GPIO. BCM) ControlPin = [14, 15, 18, 23] i ауқымындағы (4): GPIO.setup (ControlPin , GPIO. OUT) GPIO.output (ControlPin , 0) GPIO.setup (2, GPIO. IN, pull_up_down = GPIO. PUD_DOWN) seq1 =

10 -қадам: Пиді орнату және қозғалтқышты қосу

Пиді орнату және қозғалтқышты қосу
Пиді орнату және қозғалтқышты қосу
Пиді орнату және қозғалтқышты қосу
Пиді орнату және қозғалтқышты қосу
Пиді орнату және қозғалтқышты қосу
Пиді орнату және қозғалтқышты қосу

Raspberry Pi -ді жақтауға орнату өте қарапайым болды. Мен кішкене 90 градус локтің дизайнын жасадым, оның бір беті тесік, ал екінші жағы толығымен тегіс. 3D басып шығарудан кейін олардың екеуін бұрандалармен Raspberry Pi -ге бекіту тесіктеріне бекітуге болады (мен GPIO түйреуіштерінің әр жағындағы екі тесікті қолдандым).

Содан кейін мен 3D басып шығарылған шынтақтардың қарама -қарсы беттеріне супер желімді қолдана бастадым. Желімді құрғатқаннан кейін мен Pi -ді екі бұрандамен оңай және ыңғайлы түрде алмастыра алдым. Төменде байланыстырылған шынтақ үшін.stl бар.

Енді мотор драйверін сәйкесінше GPIO 14, 15, 18, 23 қосатын IN1, IN2, IN3, IN4 көмегімен PI -ге қосыңыз. Ақырында, контроллер тақтасының 5в және жерге тұйықталуын 5в шығысына және жерге тұйықталу түйреуіштеріне қосыңыз.

Міне, кейбір сілтеме үшін Pi's Pinout сілтемесі:

11 -қадам: камераны орнату

Камераны орнату
Камераны орнату
Камераны орнату
Камераны орнату
Камераны орнату
Камераны орнату

Камераны орнату Pi -ге қарағанда әлдеқайда берік болды, бірақ әдіс жұмысты аяқтады. Әр ұшында 2 саңылауы бар жіңішке бөренені жобалағаннан және басып шығарғаннан кейін мен сәулені Rasberry Pi -ге бекіту саңылауы арқылы тіркедім. Содан кейін камераны басқа бұрандамен сәуленің қарама -қарсы жағына бекітіңіз. Та-да! Әдемі шыбын көрінеді.

12-қадам: Тартпаның қозғалу механизмін құру және орнату

Тартпалы-жылжымалы механизмді құру және орнату
Тартпалы-жылжымалы механизмді құру және орнату
Тартпалы-жылжымалы механизмді құру және орнату
Тартпалы-жылжымалы механизмді құру және орнату
Тартпалы-жылжымалы механизмді құру және орнату
Тартпалы-жылжымалы механизмді құру және орнату

Бұл қадам өндірушілер қауымдастығының қайырымдылық сыйлықтарының арқасында оңай болды. Thingiverse -ті жылдам іздегеннен кейін мен TucksProjects жасаған сызықты жетекті таба алдым (мұнда табылған: https://www.thingiverse.com/thing:2987762). Тек оны SD картасына ұрып, принтерге жұмысты орындауға рұқсат беру ғана қалды.

Мен Fusion 360 -қа кірдім және штурмды өңдедім, себебі моторымның білігі TucksProjects ұсынғанға қарағанда тым үлкен болды. Менде төменде.stl бар. Басып шығаруды аяқтағаннан кейін, біз оны қозғалтқыштың білігіне, содан кейін қозғалтқыш пен корпустың бүйіріне 2 бұрандамен бекіту арқылы жинауымыз керек (тіректі жаппас бұрын арасына қойғаныңызға көз жеткізіңіз). Мен тартпа мен жақтаудың арасына кіретін етіп тіректің бір дюймін кесуге тура келді.

Енді механизмді жақтау мен жәшікке бекіту ғана қалды. «ТІЛ ҚАЛАЙ ҚАЛАЙ БЕРЕМІЗ?» Сіз сұрайсыз … иә, менімен бірге айтыңыз: Super Glue. Жоғарыдағы суреттерде көрсетілгендей, механизмді жақтаудың төменгі жағына қойыңыз да, оны тартпа сырғанайтын ағаштың үстіне қарай итеріңіз. Бұл жерде тіректі/механизмді жақтауға мүмкіндігінше параллель алуға тырысу өте маңызды, себебі механизм қозғалғанда тартпаны бұрышқа емес, тіке итереді. Желімді кептіргеннен кейін, тіректің шетіне тағы да желім салыңыз да, тартпаны орнына қойыңыз да, құрғатыңыз. Аяқтағаннан кейін бізде жасырын тартпаны ішке және сыртқа шығаратын берік механизм бар.

13 -қадам: Айна артына картон қосу

Айна артына картон қосу
Айна артына картон қосу
Айна артына картон қосу
Айна артына картон қосу
Айна артына картон қосу
Айна артына картон қосу

Бұл екі жақты фильмді айна тәрізді етіп көрсету үшін мен әйнектің артына картон қою біздің мақсатымызға сай келетінін байқадым. Қолданылған картон - бұл каркаспен бірге келген, бірақ кез келген кесілген бөлік жұмыс істейді. Бұл сонымен қатар камераның жарық диодынан, мотор контроллерінен немесе айнаның екінші жағында Pi көрсетілімдерінен жарық түспеуін қамтамасыз етеді. Барлығы өз орнына түскенде, картонмен камераның қай жерде орналасқанын белгілеңіз. Содан кейін тіктөртбұрышты кесу үшін ұстараны қолданыңыз, осылайша камера орнында тұрса.

14 -қадам: Соңғы бөлікті киіңіз

Соңғы бөлікті кию
Соңғы бөлікті кию
Соңғы бөлікті кию
Соңғы бөлікті кию

Соңғы нәрсе - бұрын тартылған тартпаның алдыңғы бөлігін кию. Қозғалтқышты тартпаның сыртқа шығуы үшін жылжытыңыз. Содан кейін тартпаның ортасы болатындай етіп алдыңғы бөлігін жабыстырыңыз (барлық жағынан сәл іліну керек. Содан кейін оны қабырғаға іліп қоюға болады.

15 -қадам: Финал

Финал
Финал
Финал
Финал

Міне, сізде! Бірнеше жақсартуларды енгізуге болады, мысалы, батырманы қосу, жақсы екі жақты фильм сатып алу және кодтағы қатені түзету, бірақ бәрі де бұл жұмысты аяқтайды: ол айнаға ұқсайды, ол алдын ала анықталғанды таниды пайдаланушының бет -әлпеті және бұл кішкентай сүйкімді тартпаны ашады. Әдеттегідей мен сіздің пікірлеріңізді, сұрақтарыңызды және естеліктеріңізді төмендегі түсініктемелерде тыңдағым келеді.

Жалпы баға: 10.10

Пікірлер: #Тағы да тырыспаймын ба … егер мен осы нұсқаулықты орындамасам;)

Құпия бөлімге шақыру
Құпия бөлімге шақыру
Құпия бөлімге шақыру
Құпия бөлімге шақыру

«Құпия бөлім» байқауының бас жүлдесі

Ұсынылған: