Cuprins:

Oglindă de recunoaștere facială cu compartiment secret: 15 pași (cu imagini)
Oglindă de recunoaștere facială cu compartiment secret: 15 pași (cu imagini)

Video: Oglindă de recunoaștere facială cu compartiment secret: 15 pași (cu imagini)

Video: Oglindă de recunoaștere facială cu compartiment secret: 15 pași (cu imagini)
Video: NOUL SsangYong REXTON! Un SUV Elegant, Spațios & Ieftin? 2024, Iunie
Anonim
Oglindă de recunoaștere facială cu compartiment secret
Oglindă de recunoaștere facială cu compartiment secret
Oglindă de recunoaștere facială cu compartiment secret
Oglindă de recunoaștere facială cu compartiment secret
Oglindă de recunoaștere facială cu compartiment secret
Oglindă de recunoaștere facială cu compartiment secret

Întotdeauna am fost intrigat de compartimentele secrete mereu creative folosite în povești, filme și altele asemenea. Așadar, când am văzut Concursul de compartimente secrete, am decis să experimentez eu însumi ideea și să fac o oglindă cu aspect obișnuit care deschide un sertar lateral secret atunci când persoana potrivită se uită în el.

Folosind un Raspberry Pi, unele cunoștințe despre programarea python și clasa magazinului de clasa a VIII-a, putem crea acest dispozitiv spiffy pentru a ascunde obiecte la vedere la care doar utilizatorul corect va avea acces.

Aș dori să mulțumesc în mod special acestor persoane / platforme de unde am obținut informațiile și resursele mele:

TeCoEd - Canal Youtube

Emmet de la PiMyLifeUp

MJRoBot pe Hackster.io (profil)

Gaven MacDonald - Canal Youtube

Tucker Shannon pe Thingiverse (profil)

Provizii

Consumabile cadru:

  • Scândură de lemn (dimensiunile acestei plăci erau de 42 "pe 7,5" cu 5/16 ")
  • Rama cu creion (cu sticlă)
  • Spray cu vopsea
  • Adeziv reflectorizant unidirecțional
  • Curățător de sticlă și cârpă
  • Lemn MDF

Materiale de recunoaștere facială:

  • Raspberry Pi (am folosit Pi 3 B +, dar există și alte opțiuni)
  • Modulul camerei foto
  • Motor pas cu pas

Instrumente:

  • Ferăstrău de masă
  • Jig Saw
  • Șmirghel din lemn
  • GlueTape
  • Măsura
  • Foarfece
  • Sticla cu pulverizator
  • imprimantă 3d
  • Super-lipici

Pasul 1: tăieturi pentru cadrul cadru

Tăieturi pentru cadru cutie
Tăieturi pentru cadru cutie
Tăieturi pentru cadru cutie
Tăieturi pentru cadru cutie
Tăieturi pentru cadru cutie
Tăieturi pentru cadru cutie
Tăieturi pentru cadru cutie
Tăieturi pentru cadru cutie

Am cumpărat o ramă foto de la magazinul de mâna a doua. Doar un avertisment, asigurați-vă că scândurile care alcătuiesc cadrul au o lățime de cel puțin 1 1/2 . Aceasta este astfel încât să puteți lipi alte plăci de lemn pe el cu suficient spațiu pentru a lucra. De asemenea, asigurați-vă că sticla din rama este complet clară. Am cumpărat una mată accidental și apoi a trebuit să cumpăr un alt cadru doar pentru sticla transparentă. Deoarece rama mea este utilizată, măsurătorile pentru rama cutiei pot varia.

  • Așezați cadrul în orientare portret. Măsurați laturile lungi (LS) ale găurii de sticlă de pe cadru cu un ½”suplimentar atât pe partea superioară, cât și pe cea inferioară. (adică adăugați un centimetru pe partea lungă a măsurării găurii de sticlă. Înregistrați acest lucru și etichetați LSM (Long Side Measurement).
  • În mod similar, măsurați partea superioară a găurii și adăugați încă 1”. Înregistrați acest lucru și etichetați SSM (Short Side Measurement).
  • Obțineți placa și, cu un ferăstrău de masă, tăiați două LSM x 2”și două SSM x 2”.
  • Luați una dintre tăieturile LSM și măsurați un dreptunghi de 2 "x1", care este la 1 "de jos și ½" din partea stângă și dreapta (așa cum se arată în imaginea 3).
  • Folosiți un ferăstrău pentru a tăia gaura. Apoi folosiți șmirghelul pentru a șlefui marginile.

Pasul 2: tăieturi pentru sertar

Tăieturi pentru sertar
Tăieturi pentru sertar
Tăieturi pentru sertar
Tăieturi pentru sertar
Tăieturi pentru sertar
Tăieturi pentru sertar
Tăieturi pentru sertar
Tăieturi pentru sertar

Acum vom începe să construim sertarul (adică un compartiment secret).

  • Decupați două laturi de 4”x 1”, un 3 ⅜”x 1” (marginea din spate), un 4 ¼”x 1 ¼” (marginea frontală) și un 4”x 3 ⅜” (platformă).
  • Lipiți prima latură de 4”x 1” de-a lungul laturii de 4”a platformei. Am pus câteva perii de hârtii sub partea platformei, astfel încât să fie ușor ridicată, astfel nu se va trage de gaura pe care am tăiat-o în scândura LS. Setați să se usuce timp de 30 de minute.
  • În mod similar, lipiți 3 ⅜”x 1” de-a lungul marginii de 3 ⅜”a platformei. Setați să se usuce timp de 30 de minute. Apoi lipiți a doua parte de 4”x 1” pe partea opusă a primei. Setați să se usuce timp de 30 de minute.
  • Puneți deoparte marginea frontală pentru moment. Va fi ultimul lucru lipit pe sertar.
  • Când ați terminat, verificați dacă se potrivește în gaura pe care ați introdus-o în scândura LSM. Dacă nu, șlefuiți gaura până când sertarul alunecă cu ușurință în interior și în afară și nu există nici o rezistență.

Pasul 3: Asamblarea cadrului împreună

Unirea cadrului împreună
Unirea cadrului împreună
Unirea cadrului împreună
Unirea cadrului împreună
Unirea cadrului împreună
Unirea cadrului împreună

Cu toate piesele complete, putem începe să asamblăm întregul cadru.

  • Lipiți scândura LSM centrată cu orificiul de sticlă cu un ½”de fiecare parte. Asigurați-vă că este lipit cu ½”distanță de gaură (așa cum se arată în imaginea 1). Setați să se usuce timp de 30 de minute.
  • Lipiți prima scândură SSM cu marginea care atinge interiorul scândurii LSM care tocmai a fost lipită. (Folosiți o riglă pentru a vă asigura că este lipită drept). Setați să se usuce timp de 30 de minute.
  • Luați cealaltă parte LSM și lipiți similar cu prima. Asigurați-vă că este la ½”distanță de gaură și că SSM-ul care tocmai a fost atașat este lipit pe interiorul scândurii. Setați să se usuce timp de 30 de minute.
  • Lipiți ultimul SSM pe marginea superioară. Deoarece aveți două LSM pe ambele părți, în funcție de cât de drept le-ați atașat, poate fi necesar să șlefuiți părțile laterale ale SSM pentru a vă asigura că se potrivește (tăierea mea este uneori dezactivată). Setați să se usuce timp de 30 de minute.
  • Măsurați spațiul mic dintre fundul sertarului și cadrul. Tăiați o bucată de lemn MDF cu această măsurare, cu 4 ". Doriți să faceți această piesă aproape de sertar, dar nu o atingeți. Este menită să susțină sertarul cu o frecare minimă.
  • După ce am terminat, am vopsit cu rama spray, astfel încât toate piesele să se potrivească.

Pasul 4: Pentru oglindă

Pentru Oglindă
Pentru Oglindă
Pentru Oglindă
Pentru Oglindă
Pentru Oglindă
Pentru Oglindă
Pentru Oglindă
Pentru Oglindă

Adezivul de film unic pe care l-am cumpărat de pe Amazon a fost de aproximativ 10 USD. Există altele de calitate mai bună, care sunt puțin mai scumpe dacă vă interesează. Cel pe care îl folosesc îl reflectă, dar îți dai seama că nu este o oglindă obișnuită pe care ai vedea-o într-o casă. Cele mai scumpe îți vor oferi acel aspect.

  • Curățați sticla cu un produs de curățare a sticlei pe ambele părți.
  • Derulați adezivul unic și așezați paharul deasupra. Tăiați adezivul astfel încât să existe un exces de cel puțin ½”pe fiecare parte a paharului.
  • Puneți paharul deoparte și udați o parte a acestuia cu apă. Apoi, îndepărtați stratul de plastic de pe adezivul unic și pulverizați partea expusă cu apă.
  • Așezați partea umedă a sticlei pe partea umedă a adezivului. Lăsați să stea 30 de minute.
  • Răsturnați și folosiți degetul mare pentru a aplatiza orice bule dintre adeziv și sticlă. Apoi tăiați excesul de adeziv din jurul marginilor.

Pasul 5: Instalați Raspbian Stretch

Aceasta fiind prima dată când am pătruns în mediul Raspberry Pi, am început să caut instrucțiuni despre cum să instalez sistemul de operare. Am găsit în cele din urmă un tutorial simplu pe Youtube de TeCoEd care a trecut prin procesul de instalare a Stretch pe cardul SD (cu o introducere destul de minunată, de asemenea). Iată linkul către acest tutorial:

În esență, tot ce trebuie să faceți este:

  • Formatați cardul SD selectând Drive >> Instrumente Drive >> Format. Descărcați fișierul ZIP pentru Raspian Stretch (găsit aici:
  • Introduceți imaginea sistemului de operare pe cardul SD. TeCoEd a folosit Win32 Disk Imager pentru a finaliza acest lucru. Am ajuns să instalez balenaEtcher care mi s-a părut puțin mai simplu. (Aici este linkul de descărcare pentru balenaEtcher:
  • Odată ajuns în balenaEtcher, selectați „Flash From File” și alegeți fișierul ZIP descărcat anterior. Apoi, selectați cardul SD dorit (dacă nu este selectat automat). Apoi apăsați butonul suculent pentru bliț și așteptați ca magia să se întâmple.

Odată instalat pe cardul SD, îl puteți introduce în Raspberry Pi și puteți trece prin procesul de configurare generic Pi.

Pasul 6: Instalați OpenCV

Acum trecem la părțile mai orientate spre recunoaștere facială. Pentru a recunoaște fețele, trebuie să descărcăm biblioteca OpenCV care conține un număr mare de instrumente pentru a lucra cu viziunea computerizată.

Instalarea OpenCV a fost cea mai grea parte a aspectului software pentru mine. Dar, după ce am urmat numeroase instrucțiuni, am găsit în sfârșit un tutorial de Emmet de la PiMyLifeUp care a făcut trucul găsit aici:

Nu voi parcurge acești pași, deoarece vă veți potrivi mai bine urmându-i din link (cu explicațiile date și posibilitatea de a copia și lipi direct de pe site cu mai multă ușurință).

Pasul 7: Activați / testați camera

Activați / testați camera
Activați / testați camera
Activați / testați camera
Activați / testați camera

După ce am instalat OpenCV, restul călătoriei mele a fost finalizat folosind un tutorial de MJRoBot pe Hackster.io găsit aici:

Înainte de a începe, aș vrea să vă reamintesc că nu sunt creatorul original al acestor scripturi, dar am ajuns să modific părți din ele.

Pentru început, ar trebui să testăm camera pentru a ne asigura că putem captura videoclipuri pe ecran. Am petrecut aproximativ o oră încercând să rulez scriptul furnizat la Pasul 3 din MJRoBot. După cum ar vrea viața, trebuie să activăm camera de pe Raspberry Pi (se pare că ar putea fi o idee bună să citiți instrucțiunile furnizate … mmm nah). Deci, după conectarea camerei la portul corect, urmați acești pași:

  • Deschideți un terminal de comandă și tastați sudo raspi-config
  • Selectați „Activați camera” (aceasta poate fi găsită sub opțiunea dispozitivelor)
  • Apăsați „Enter”
  • Mergeți la „Finalizare” și vi se va solicita repornirea

Apoi urmați acești pași:

  • Accesați meniul principal al zmeurii (stânga sus)
  • Preferințe
  • Configurare Raspberry Pi
  • Interfețe
  • Apoi, în cameră, selectați „Activat”
  • Atunci bine"

Acum ar trebui să puteți rula cu succes acest script din tutorialul MJRoBot pentru a testa camera foto (amintiți-vă că tot acest cod plus o descriere mai detaliată se află în linkul furnizat mai sus la tutorialul MJRobot):

import numpy ca np

import cv2 cap = cv2. VideoCapture (0) cap.set (3, 640) # set Lățime cap.set (4, 480) # set Height while (True): ret, frame = cap.read () frame = cv2. flip (cadru, -1) # Flip camera vertical gri = cv2.cvtColor (cadru, cv2. COLOR_BGR2GRAY) cv2.imshow („cadru”, cadru) cv2.imshow („gri”, gri) k = cv2.waitKey (30) & 0xff dacă k == 27: # apăsați „ESC” pentru a părăsi pauza cap.release () cv2.destroyAllWindows ()

Codul anterior ar trebui să afișeze două ferestre, una în culoare și cealaltă în tonuri de gri. Dacă ai ajuns până aici, cred că meriți un sandwich frumos.

Pasul 8: Colectarea datelor și datele de instruire

Colectarea datelor și datele de instruire
Colectarea datelor și datele de instruire
Colectarea datelor și datele de instruire
Colectarea datelor și datele de instruire
Colectarea datelor și datele de instruire
Colectarea datelor și datele de instruire

În tutorialul furnizat, autorul aprofundează mult mai mult despre procesele codului care urmează să fie furnizat în curând, dar, din moment ce acestea sunt instrucțiuni despre modul în care a fost realizată această oglindă, nu voi aprofunda istoria și nici mecanica complicată. Cu toate acestea, vă recomand să luați o lună din viață citind despre aceste două lucruri, deoarece acestea vă pot servi bine minții.

Mai sunt doar aproximativ trei scripturi pentru a rula înainte de a putea pune totul în funcțiune. Primul este pentru colectarea datelor, al doilea este pentru instruirea lor și ultimul este de fapt pentru recunoaștere. Colectarea datelor necesită fotografii reale ale feței care trebuie făcute și stocate într-un loc specific pentru antrenament. Creatorul acestui cod a făcut foarte simplu realizarea tuturor acestor lucruri, așa că vă recomand să urmați aceste instrucțiuni pentru a evita durerea de cap.

Deschideți o linie de comandă și creați un nou director numindu-l ceva distractiv (l-am numit pe al meu FaceRec)

mkdir FaceRec

Acum, schimbați directorul în FaceRec și creați un subdirector, asigurându-vă că îl denumiți set de date

cd FaceRec

mkdir set de date

În timp ce ne ocupăm, putem crea și celălalt subdirector numit trainer

antrenor mkdir

Acum puteți rula și urma instrucțiunile primului script care va captura fotografiile unui utilizator. (Doar un cap în sus, asigurați-vă că introduceți ID-ul utilizatorului fie ca 1, 2, 3 etc.)

import cv2import os cam = cv2. VideoCapture (0) cam.set (3, 640) # set video width cam.set (4, 480) # set video height face_detector = cv2. CascadeClassifier ('haarcascade_frontalface_default.xml') # Pentru fiecare persoană, introduceți un ID numeric de față face_id = input ('\ n introduceți ID utilizator final apăsați ==>') print ("\ n [INFO] Inițializarea captării feței. Uitați-vă la cameră și așteptați …") # Inițializați numărul de fețe de eșantionare individuală count = 0 while (True): ret, img = cam.read () img = cv2.flip (img, -1) # flip video image vertical gray = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) faces = face_detector.detectMultiScale (gri, 1,3, 5) pentru (x, y, w, h) în fețe: cv2.rectangle (img, (x, y), (x + w, y + h), (255, 0, 0), 2) count + = 1 # Salvați imaginea capturată în folderul seturilor de date cv2.imwrite ("dataset / User." + Str (face_id) + '.' + Str (count) + ".jpg", gri [y: y + h, x: x + w]) cv2.imshow („imagine”, img) k = cv2.waitKey (100) & 0xff # Apăsați „ESC” pentru a ieși din videoclip dacă k == 27: rupe numărul de elif> = 30: # Luați 30 de mostre de față și opriți respirația video k print ("\ n [INFO] Ieșirea programului și lucrurile de curățare") cam.release () cv2.destroyAllWindows ()

În acest moment, asigurați-vă că ați instalat perna pe Pi. Dacă nu, rulați comanda:

pip instala perna

După ce ați terminat, puteți rula scriptul de antrenament (al doilea script) care vă va oferi fără probleme un fișier.yaml care va fi utilizat în scriptul final

import cv2import numpy as np from PIL import Image import os # Path for face image database path = 'dataset' recognizer = cv2.face. LBPHFaceRecognizer_create () detector = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml"); # funcție pentru a obține imaginile și eticheta datele def getImagesAndLabels (cale): imagePaths = [os.path.join (cale, f) pentru f în os.listdir (cale)] faceSamples = ids = pentru imagePath în imagePaths: PIL_img = Image.open (imagePath).convert ('L') # convertește-o în tonuri de gri img_numpy = np.array (PIL_img, 'uint8') id = int (os.path.split (imagePath) [- 1]. split (".") [1]) faces = detector.detectMultiScale (img_numpy) for (x, y, w, h) in faces: faceSamples.append (img_numpy [y: y + h, x: x + w]) ids.append (id) return faceSamples, ids print ("\ n [INFO] Fețe de antrenament. Va dura câteva secunde. Așteptați …") fețe, ids = getImagesAndLabels (cale) recognizer.train (fețe, np.array (ids)) # Salvați modelul în trainer / trainer.yml recognizer.write ('trainer / trainer.yml') # recognizer.save () a funcționat pe Mac, dar nu pe Pi # Imprimați numărul de fețe antrenate și terminați programul de imprimare ("\ n [INFO] {0} fețe antrenate. Programul de ieșire".format (len (np.unique (ids))))

Ce este interesant la acest set de scripturi este că pot fi introduse mai multe fețe în sistem, ceea ce înseamnă că mai multe persoane pot accesa interiorul oglinzii, dacă se dorește.

Mai jos, am scriptul Captură date și scriptul de instruire disponibile pentru descărcare.

Pasul 9: Timp de recunoaștere facială

Timp de recunoaștere facială
Timp de recunoaștere facială
Timp de recunoaștere facială
Timp de recunoaștere facială

În cele din urmă, putem rula scriptul de recunoaștere. Mai mult cod a fost adăugat la acest script pentru a face procesul motorului funcțional, așa că voi explica acele părți puțin mai amănunțit. Îl voi împărți în secțiuni, dar voi pune întregul script la sfârșitul pasului, dacă asta urmăriți.

Vom începe prin importarea tuturor modulelor de care vom avea nevoie și apoi setarea modului GPIO la GPIO. BCM

import numpy ca np

import os import timp import RPi. GPIO ca GPIO GPIO.setwarnings (Fals) GPIO.setmode (GPIO. BCM)

Următoarea listă numită ControlPin este o serie de numere care reprezintă pini de ieșire care vor fi folosiți pentru motorul nostru pas cu pas.

ControlPin = [14, 15, 18, 23]

Bucla for setează acești pini ca ieșiri și apoi se asigură că sunt opriți. Am încă un cod aici pentru a lăsa sertarul să se închidă prin apăsarea unui buton, dar am decis să folosesc în schimb un cronometru.

GPIO.setup (ControlPin , GPIO. OUT)

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

Următoarele două variabile sunt secvențe pe care le vom folosi pentru a conduce motorul. Am aflat aceste informații dintr-un minunat videoclip de Gaven MacDonald, pe care îl recomand să îl vizionez pe măsură ce aprofundează nu doar codul, ci și motorul propriu-zis (găsit aici: https://www.youtube.com/embed/Dc16mKFA7Fo). În esență, fiecare secvență va fi iterată prin utilizarea buclelor imbricate în viitoarele funcții openComp și closeComp. Dacă priviți cu atenție seq2 este exact opusul seq1. Da, ai ghicit. Una este pentru deplasarea motorului înainte și cealaltă este pentru mers înapoi.

seq1 =

seq2 =

Începând cu funcția noastră openComp creăm o buclă for care va itera de 1024 de ori. Conform videoclipului MacDonald, 512 iterații ar oferi o rotație completă a motorului și am constatat că aproximativ două rotații au avut o lungime bună, dar acest lucru poate fi ajustat în funcție de dimensiunea individului. Următoarea buclă for este alcătuită din 8 iterații pentru a ține cont de cele 8 matrice găsite în seq1 și seq2. Și, în cele din urmă, ultima buclă iterată de patru ori pentru cele patru elemente care se găsesc în fiecare dintre aceste tablouri, precum și pentru cei 4 pini GPIO la care avem motorul conectat. Linia de aici selectează pinul GPIO și apoi îl activează sau îl dezactivează în funcție de iterația activată. Linia de după oferă un timp tampon pentru ca motorul nostru să nu se rotească deloc. După ce motorul se rotește pentru a muta sertarul în afară, acesta doarme timp de 5 secunde înainte de a porni. Acest timp poate fi ajustat aici sau puteți activa codul comentat care permite utilizarea unui buton pentru a redirecționa cu scriptul mai degrabă decât cu un temporizator.

pentru i în intervalul (1024):

pentru halfstep in range (8): pentru pin in range (4): GPIO.output (ControlPin [pin], seq1 [halfstep] [pin]) time.sleep (.001) '' 'while True: if GPIO.input (2) == GPIO. LOW: pauză; "" time.sleep (5)

Funcția closeComp funcționează în mod similar. După ce motorul se mișcă înapoi, continuu să pun ultimii noștri pini GPIO la un nivel scăzut pentru a mă asigura că nu pierdem energie și apoi adaug încă trei secunde de timp înainte de a continua.

pentru i în intervalul (1024):

pentru halfstep in range (8): pentru pin in range (4): GPIO.output (ControlPin [pin], seq2 [halfstep] [pin]) time.sleep (.001) print ("Compartment Closed") GPIO.output (ControlPin [0], 0) GPIO.output (ControlPin [3], 0) time.sleep (3)

Majoritatea părții următoare este utilizată pentru a configura camera și pentru a începe recunoașterea facială. Din nou, instrucțiunile MKRoBot intră mai mult în piese, dar, deocamdată, arăt doar piesele utilizate pentru oglindă.

Mai întâi am schimbat numele listelor astfel încât numele meu să fie în indexul pe care l-am atribuit în timp ce colectam datele (în cazul meu 1). Și apoi am setat restul valorilor la None, deoarece nu mai aveam fețe în setul de date.

names = ['None', 'Daniel', 'None', 'None', 'None', 'None']

Ultimele noastre linii de cod sunt implementate în thicc for-loop. Am creat o variabilă pentru a stoca încrederea ca un număr întreg (intConfidence) înainte ca variabila încredere să se transforme într-un șir. Apoi folosesc o declarație if pentru a verifica dacă încrederea este mai mare de 30 și dacă id-ul (ce persoană detectează computerul, în acest caz, „Daniel”) este egal cu numele meu. După ce acest lucru este confirmat, se numește funcția openComp care (așa cum s-a explicat mai sus) mută motorul, dă afară după 5 secunde, apoi trece la închidereComp care mută motorul în direcția opusă și face o curățare înainte de a continua cu bucla thicc.

dacă intConfidence> 30 și id == 'Daniel':

openComp () closeComp ()

O eroare pe care am găsit-o aici este că, uneori, după revenirea closeComp, codul continuă, dar instrucțiunea if condițională se dovedește a fi adevărată din nou ca și cum ar citi fluxul video care este încă în buffer. Deși nu se întâmplă de fiecare dată, încă nu am găsit o modalitate de a mă asigura că nu se întâmplă niciodată, așa că, dacă cineva are idei, doar anunțați-l în comentarii.

Iată întregul script într-un singur loc (și chiar mai jos este descărcabil):

import cv2

import numpy as np import os import time import RPi. GPIO as GPIO GPIO.setwarnings (False) GPIO.setmode (GPIO. BCM) ControlPin = [14, 15, 18, 23] pentru i în intervalul (4): GPIO.setup (ControlPin , GPIO. OUT) GPIO.output (ControlPin , 0) GPIO.setup (2, GPIO. IN, pull_up_down = GPIO. PUD_DOWN) seq1 =

Pasul 10: Montarea dispozitivului Pi și conectarea motorului

Montarea Pi și conectarea motorului
Montarea Pi și conectarea motorului
Montarea Pi și conectarea motorului
Montarea Pi și conectarea motorului
Montarea Pi și conectarea motorului
Montarea Pi și conectarea motorului

Montarea Raspberry Pi pe cadru a fost destul de simplă. Am proiectat un cot mic de 90 de grade cu o față având o gaură și cealaltă parte fiind complet plană. După tipărirea 3D, două dintre acestea pot fi atașate cu șuruburi la Raspberry Pi pe găurile de montare (am folosit cele două găuri de pe fiecare parte a pinilor GPIO).

Am continuat apoi să folosesc super lipici pe fețele opuse ale coatelor imprimate 3D pentru a lipi Pi chiar deasupra sertarului de pe cadru. După ce am lăsat adezivul să se usuce, am putut scoate sau înlocui Pi în poziție simplu și convenabil doar cu cele două șuruburi. Am.stl pentru cot legat mai jos.

Acum pur și simplu conectați driverul motorului la PI cu IN1, IN2, IN3, IN4 conectându-vă la GPIO 14, 15, 18, 23 respectiv. În cele din urmă, conectați pinii de 5v și masă ai plăcii de control la pinii de ieșire și masă de 5v ai Pi.

Iată un link către Pin's Pinout pentru o referință:

Pasul 11: Montarea camerei

Montarea camerei
Montarea camerei
Montarea camerei
Montarea camerei
Montarea camerei
Montarea camerei

Montarea camerei a fost ușor mai puțin robustă decât Pi, dar metoda a făcut treaba. După proiectarea și tipărirea unui fascicul subțire cu 2 găuri pe fiecare capăt, am atașat fasciculul la Rasberry Pi prin orificiul său de montare. Apoi, atașați camera la capătul opus al fasciculului cu un alt șurub. Ta-da! Arată destul de bine.

Pasul 12: Crearea și montarea mecanismului de mișcare a sertarului

Crearea și montarea sertarului-mișcarea-mecanism
Crearea și montarea sertarului-mișcarea-mecanism
Crearea și montarea sertarului-mișcarea-mecanism
Crearea și montarea sertarului-mișcarea-mecanism
Crearea și montarea sertarului-mișcarea-mecanism
Crearea și montarea sertarului-mișcarea-mecanism

Acest pas a fost ușor datorită darurilor mereu binevoitoare ale comunității producătorilor. După o căutare rapidă pe Thingiverse am reușit să găsesc un actuator liniar creat de TucksProjects (găsit aici: https://www.thingiverse.com/thing:2987762). Tot ce a mai rămas de făcut a fost să-l plesnească pe un card SD și să lase imprimanta să facă treaba.

Am ajuns să intru în Fusion 360 și am editat pintenul, deoarece arborele motorului meu era prea mare pentru cel furnizat de TucksProjects. Am.stl pentru asta mai jos. După ce s-a făcut imprimarea, trebuie doar să o asamblăm plasând pintenul pe arborele motorului, apoi atașând laturile motorului și ale carcasei cu 2 șuruburi (asigurându-vă că ați pus rackul între ele înainte de a-l închide). Am ajuns să trebuiască să tai un centimetru din raft, astfel încât să se încadreze între sertar și cadru.

Acum nu mai rămâne decât atașarea mecanismului la cadru și sertar. „Cum să facem acest lucru?” întrebi … da, spune-o cu mine: Super Glue. Așa cum se arată în imaginile de mai sus, așezați mecanismul în partea de jos a cadrului și împingeți-l în sus împotriva bucății de lemn pe care alunecă sertarul. Aici este vital să încercați să obțineți rackul / mecanismul cât mai paralel cu cadrul, astfel încât atunci când mecanismul se mișcă să împingă sertarul drept și nu într-un unghi. După ce lipiciul s-a uscat, mai puneți lipici pe marginea raftului și mutați sertarul în poziție și lăsați-l să se usuce. Odată finalizat, avem un mecanism robust pentru a glisa sertarul nostru secret înăuntru și în afară.

Pasul 13: Adăugarea de carton în spatele oglinzii

Adăugarea de carton în spatele oglinzii
Adăugarea de carton în spatele oglinzii
Adăugarea de carton în spatele oglinzii
Adăugarea de carton în spatele oglinzii
Adăugarea de carton în spatele oglinzii
Adăugarea de carton în spatele oglinzii

Pentru a face acest film bidirecțional să arate mai mult ca o oglindă, am constatat că ne servește bine scopul de a plasa carton în spatele geamului. Cartonul utilizat este unul care a venit cu rama, dar orice piesă tăiată pentru a se potrivi va funcționa. Acest lucru asigură, de asemenea, lumină de la LED-ul camerei, de la controlerul motorului sau de afișarea Pi de pe cealaltă parte a oglinzii. Cu totul la locul său, folosiți un creion pentru a marca locul unde stă camera pe carton. Apoi, folosiți un aparat de ras pentru a tăia un dreptunghi, astfel încât camera să poată arunca o privire când este la locul său.

Pasul 14: Punerea piesei finale

Punerea piesei finale
Punerea piesei finale
Punerea piesei finale
Punerea piesei finale

Ultimul lucru de făcut este să puneți partea din față a sertarului care a fost pusă deoparte mai devreme. Mutați motorul astfel încât sertarul să iasă. Apoi lipiți partea din față, astfel încât piesa sertarului să fie centrată (ar trebui să existe un pic de agățare pe toate părțile. Apoi, puteți pur și simplu să o agățați de un perete.

Pasul 15: Finala

Final
Final
Final
Final

Iată-l! Există mai multe îmbunătățiri care ar putea fi făcute, cum ar fi adăugarea acelui buton, cumpărarea unui film bidirecțional mai bun și remedierea acelei erori în cod, dar una peste alta, se face treaba: arată ca o oglindă, recunoaște predeterminata fața utilizatorului și deschide acel sertar drăguț. Ca întotdeauna, mi-ar plăcea să vă aud gândurile, întrebările și memoriile în comentariile de mai jos.

Evaluare generală: 10/10

Comentarii: # WouldNotTryAgain … dacă nu aș putea urma acest instructable;)

Provocarea secretă a compartimentului
Provocarea secretă a compartimentului
Provocarea secretă a compartimentului
Provocarea secretă a compartimentului

Marele premiu în Provocarea secretă a compartimentului

Recomandat: