Kazalo:

Ogledalo za prepoznavanje obraza s skrivnim oddelkom: 15 korakov (s slikami)
Ogledalo za prepoznavanje obraza s skrivnim oddelkom: 15 korakov (s slikami)

Video: Ogledalo za prepoznavanje obraza s skrivnim oddelkom: 15 korakov (s slikami)

Video: Ogledalo za prepoznavanje obraza s skrivnim oddelkom: 15 korakov (s slikami)
Video: Часть 4. Аудиокнига «Анна из Зеленых Мезонинов», Люси Мод Монтгомери (главы 29–38) 2024, Julij
Anonim
Ogledalo za prepoznavanje obraza s skrivnim predalčkom
Ogledalo za prepoznavanje obraza s skrivnim predalčkom
Ogledalo za prepoznavanje obraza s skrivnim predalčkom
Ogledalo za prepoznavanje obraza s skrivnim predalčkom
Ogledalo za prepoznavanje obraza s skrivnim predalčkom
Ogledalo za prepoznavanje obraza s skrivnim predalčkom

Vedno so me zanimali vedno ustvarjalni skrivni predeli, ki se uporabljajo v zgodbah, filmih in podobno. Torej, ko sem videl natečaj za skrivne oddelke, sem se odločil, da bom tudi sam eksperimentiral z idejo in naredil običajno ogledalo, ki odpre skrivni stranski predal, ko vanj pogleda prava oseba.

Z uporabo Raspberry Pi, nekaj znanja o programiranju na pythonu in razredom trgovine 8. razreda lahko ustvarimo to pikantno napravo, da skrije predmete na vidnem mestu, do katerih bo imel dostop le pravi uporabnik.

Še posebej bi se rad zahvalil tem ljudem/platformam, od katerih sem dobil tudi svoje podatke in vire:

TeCoEd - Youtube kanal

Emmet iz PiMyLifeUp

MJRoBot na Hackster.io (profil)

Gaven MacDonald - Youtube kanal

Tucker Shannon na Thingiverse (profil)

Zaloge

Okvirji:

  • Lesena deska (dimenzije te plošče so bile 42 x 7,5 x 5 x 16 cm)
  • Okvir za slike s svinčnikom (s steklom)
  • Barva v spreju
  • Enosmerno odsevno lepilo
  • Čistilo za steklo in krpa
  • MDF les

Pripomočki za prepoznavanje obraza:

  • Raspberry Pi (uporabil sem Pi 3 B+, vendar obstajajo druge možnosti)
  • Modul kamere
  • Koračni motor

Orodja:

  • Namizna žaga
  • Žaga za žago
  • Brusni papir Wood
  • Lepilni trak
  • Izmerite
  • Škarje
  • Razpršilna steklenica
  • 3D tiskalnik
  • Super lepilo

1. korak: Rezi za okvir okvirja

Rezi za okvir okvirja
Rezi za okvir okvirja
Rezi za okvir okvirja
Rezi za okvir okvirja
Rezi za okvir okvirja
Rezi za okvir okvirja
Rezi za okvir okvirja
Rezi za okvir okvirja

Okvir za slike sem kupil v trgovini z rabljenimi izdelki. Samo opozorilo: poskrbite, da bodo deske široke vsaj 1 1/2 . Tako lahko nanj lepite druge lesene plošče z dovolj prostora za delo. Prepričajte se tudi, da steklo v okvir je popolnoma čist. Po naključju sem kupil zamrznjenega, potem pa sem moral kupiti samo okvir samo za prozorno steklo. Ker se uporablja moj okvir, se lahko mere okvirja okvirja razlikujejo.

  • Okvir postavite v pokončno orientacijo. Izmerite dolge stranice (LS) strani steklene luknje na okvirju z dodatnimi ½”na vrhu in na dnu. (to pomeni, da dolgi strani merjenja steklene luknje dodajte palec. Zapišite to in označite LSM (Long Side Measurement).
  • Podobno izmerite zgornjo stran luknje in dodajte še 1”. Zapišite to in označite SSM (Short Side Measurement).
  • Vzemite svojo desko in z namizno žago izrežite dva LSM x 2”in dva SSM x 2”.
  • Vzemite enega od izrezov LSM in izmerite pravokotnik velikosti 2”x1”, ki je 1”od spodaj in ½” od leve in desne strani (kot je prikazano na sliki 3).
  • Izrežite luknjo z vbodno žago. Nato z brusnim papirjem obrusite robove.

2. korak: Rezi za predal

Rezi za predal
Rezi za predal
Rezi za predal
Rezi za predal
Rezi za predal
Rezi za predal
Rezi za predal
Rezi za predal

Zdaj bomo začeli graditi predal (znan tudi kot skrivni predal).

  • Izrežite dve strani 4”x 1”, 3 ⅜”x 1” (zadnji rob), 4 ¼”x 1 ¼” (sprednji rob) in 4”x 3 ⅜” (ploščad).
  • Lepite prvo stran 4”x 1” vzdolž 4”strani ploščadi. Nekaj zloženih papirjev sem dal pod stran ploščadi, tako da je bila rahlo dvignjena, tako da ne bi vlekla luknje, ki sem jo izrezala v deski LS. Sušimo 30 minut.
  • Podobno zlepite 3 ⅜”x 1” vzdolž 3 ⅜”roba ploščadi. Sušimo 30 minut. Nato drugo stran 4”x 1” zlepite na nasprotno stran prve. Sušimo 30 minut.
  • Sprednji rob zaenkrat odstavite. To bo zadnja stvar, prilepljena na predal.
  • Ko končate, preverite, ali se prilega luknji, ki ste jo vbodli v desko LSM. V nasprotnem primeru luknjo pobrusite, da se predal zlahka pomakne navzven in ven in ne pride do vlečenja.

3. korak: Sestavljanje okvirja

Sestavljanje okvirja
Sestavljanje okvirja
Sestavljanje okvirja
Sestavljanje okvirja
Sestavljanje okvirja
Sestavljanje okvirja

Ko so vsi deli končani, lahko začnemo sestavljati celoten okvir.

  • Lepimo desko LSM na sredino s stekleno luknjo s ½”na vsaki strani. Prepričajte se, da je zlepljen s ½”stran od luknje (kot je prikazano na sliki 1). Sušimo 30 minut.
  • Zlepite prvo desko SSM z robom, ki se dotika notranje strani lesene deske LSM. (Uporabite ravnilo, da se prepričate, da je zlepljeno naravnost). Sušimo 30 minut.
  • Vzemite drugo stran LSM in lepite podobno kot prvo. Prepričajte se, da je ½”stran od luknje in da je ravno pritrjen SSM lepljen na notranjo stran deske. Sušimo 30 minut.
  • Zadnji SSM prilepite na zgornji rob. Ker imate na obeh straneh dva LSM -ja, boste morda morali stranice SSM -ja pobrusiti, da se prepričate, da se prilegajo (včasih je moje rezanje izklopljeno). Sušimo 30 minut.
  • Izmerite majhen prostor med dnom predala in okvirjem. S to meritvijo odrežite kos lesa iz MDF za 4 ". Ta kos želite približati predalu, vendar se ga ne dotikajte. Namenjen je podpiranju predala z minimalnim trenjem.
  • Ko vse končam, okvir pošpricam, tako da se vsi kosi ujemajo.

4. korak: Za ogledalo

Za ogledalo
Za ogledalo
Za ogledalo
Za ogledalo
Za ogledalo
Za ogledalo
Za ogledalo
Za ogledalo

Enosmerno lepilo za film, ki sem ga kupil pri Amazonu, je bilo okoli 10 USD. Obstajajo kakovostnejše, ki so malo dražje, če vas zanima. Ta, ki ga uporabljam, odraža, vendar lahko rečete, da ni običajno ogledalo, ki bi ga videli v domu. Dražji vam bodo dali takšen videz.

  • Steklo očistite z čistilom za steklo na obeh straneh.
  • Odvijte enosmerno lepilo in nanj položite steklo. Lepilo izrežite tako, da bo na vsaki strani stekla najmanj ½”presežka.
  • Kozarec postavite na stran in namočite eno stran z vodo. Nato odstranite plastični premaz z enosmernega lepila in na novo izpostavljeno stran poškropite z vodo.
  • Mokro stran stekla položite na mokro stran lepila. Pustimo sedeti 30 minut.
  • Obrnite se in s palcem poravnajte vse mehurčke med lepilom in steklom. Nato odrežite odvečno lepilo okoli robov.

5. korak: Namestite Raspbian Stretch

Ko sem se prvič poglobil v okolje Raspberry Pi, sem začel iskati navodila, kako namestiti OS. Sčasoma sem na Youtubeu našel enostaven vodič TeCoEd, ki je šel skozi postopek namestitve strežnika na kartico SD (tudi z lepim predstavitvijo). Tukaj je povezava do te vadnice:

V bistvu morate le:

  • Kartico SD formatirajte tako, da izberete Drive >> Drive Tools >> Format. Prenesite datoteko ZIP za Raspian Stretch (najdete tukaj:
  • Utripajte sliko OS na kartico SD. TeCoEd je za to uporabil Win32 Disk Imager. Na koncu sem namestil balenaEtcher, ki se mi je zdela nekoliko bolj preprosta. (Tukaj je povezava za prenos za balenaEtcher:
  • Ko ste v balenaEtcher, izberite »Flash From File« in izberite predhodno preneseno datoteko ZIP. Nato izberite želeno kartico SD (če ni izbrana samodejno). Nato pritisnite gumb sočne bliskavice in počakajte, da se zgodi čarovnija.

Ko ga namestite na kartico SD, jo lahko vstavite v Raspberry Pi in opravite splošni postopek nastavitve Pi.

6. korak: Namestite OpenCV

Zdaj pa k delom, ki so bolj usmerjeni v prepoznavanje obrazov. Za prepoznavanje obrazov moramo prenesti knjižnico OpenCV, ki vsebuje ogromno orodij za delo z računalniškim vidom.

Namestitev OpenCV je bila zame najbolj naporen del programskega vidika. Toda po številnih navodilih sem končno našel vadnico Emmeta iz PiMyLifeUpa, ki je naredila trik, ki ga najdete tukaj:

Ne bom šel skozi te korake, saj vam bo bolje slediti s povezave (z danimi razlagami in možnostjo lažjega kopiranja in lepljenja neposredno s spletnega mesta).

7. korak: Omogočite/preizkusite kamero

Omogočite/preizkusite kamero
Omogočite/preizkusite kamero
Omogočite/preizkusite kamero
Omogočite/preizkusite kamero

Po namestitvi programa OpenCV je bil preostanek moje poti zaključen z uporabo vadnice MJRoBot na spletnem mestu Hackster.io, ki ga najdete tukaj:

Preden začnemo, bi vas rad spomnil, da nisem prvotni ustvarjalec teh skriptov, ampak sem na koncu spremenil njihove dele.

Za začetek moramo preizkusiti kamero in se prepričati, da lahko posnamemo video na zaslon. Približno eno uro sem poskušal zagnati skript iz 3. koraka programa MJRoBot. Ker bi življenje moralo, moramo dejansko omogočiti kamero na Raspberry Pi (izkazalo se je, da bi bilo dobro prebrati priložena navodila … mmm nah). Po priključitvi fotoaparata na ustrezna vrata sledite tem korakom:

  • Odprite ukazni terminal in vnesite sudo raspi-config
  • Izberite »Omogoči kamero« (to lahko najdete pod možnostjo naprave)
  • Pritisnite "Enter"
  • Pojdite na "Dokončaj" in pozvani boste k ponovnemu zagonu

Nato sledite tem korakom:

  • Pojdite v glavni meni maline (zgoraj levo)
  • Nastavitve
  • Konfiguracija Raspberry Pi
  • Vmesniki
  • Nato v fotoaparatu izberite »Omogočeno«
  • Nato "V redu"

Zdaj bi morali uspešno zagnati ta skript iz vadnice MJRoBot, da preizkusite kamero (ne pozabite, da je vsa ta koda in podrobnejši opis na zgornji povezavi do vadnice MJRobot):

uvoz numpy kot np

import 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. flip (frame, -1) # Flip camera vertikalno siva = cv2.cvtColor (okvir, cv2. COLOR_BGR2GRAY) cv2.imshow ('okvir', okvir) cv2.imshow ('siva', siva) k = cv2.waitKey (30) & 0xff če je k == 27: # pritisnite 'ESC', da zaprete prekinitev cap.release () cv2.destroyAllWindows ()

Prejšnja koda mora prikazati dve okni, eno v barvi, drugo pa v sivinah. Če ste prišli tako daleč, mislim, da si zaslužite lep sendvič.

8. korak: Zbiranje podatkov in podatki o usposabljanju

Zbiranje podatkov in podatki o usposabljanju
Zbiranje podatkov in podatki o usposabljanju
Zbiranje podatkov in podatki o usposabljanju
Zbiranje podatkov in podatki o usposabljanju
Zbiranje podatkov in podatki o usposabljanju
Zbiranje podatkov in podatki o usposabljanju

V priloženi vadnici avtor podrobneje obravnava procese kode, ki bo kmalu predstavljena, ker pa so to navodila za izdelavo tega zrcala, se ne bom poglobil v zgodovino niti v zapleteno mehaniko. Priporočam pa, da si vzamete en mesec svojega življenja in preberete o teh dveh stvareh, saj vam lahko dobro služita.

Preden lahko vse to uspemo, je treba izvesti še približno tri skripte. Prvi je za zbiranje podatkov, drugi za njihovo usposabljanje in zadnji je dejansko za prepoznavanje. Zbiranje podatkov zahteva, da se dejanske slike obraza posnamejo in shranijo na določenem mestu za usposabljanje. Ustvarjalec te kode je zelo preprosto naredil vse to, zato priporočam, da upoštevate ta navodila, da se izognete glavobolu.

Odprite ukazno vrstico in naredite nov imenik, ki mu bo poimenoval nekaj zabavnega (poklical sem svoj FaceRec)

mkdir FaceRec

Zdaj spremenite imenik v FaceRec in naredite podimenik, pri čemer mu poimenujte nabor podatkov

cd FaceRec

mkdir nabor podatkov

Medtem ko smo pri tem, lahko naredimo tudi drugi podimenik z imenom trener

trener mkdir

Zdaj lahko zaženete in sledite navodilom prvega skripta, ki bo zajemal slike uporabnika. (Samo opozorilo, ne pozabite vnesti ID -ja uporabnika kot 1, 2, 3 itd.)

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') # Za vsako oseba, vnesite en številski ID obraza face_id = input ('\ n vnesite ID uporabnika konec pritisnite ==>') print ("\ n [INFO] Začetek zajema obraza. Poglejte kamero in počakajte …") # Inicializirajte posamezno število vzorčenih obrazov count = 0 while (True): ret, img = cam.read () img = cv2.flip (img, -1) # flip video slika navpično siva = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) obrazov = face_detector.detectMultiScale (siva, 1,3, 5) za (x, y, w, h) v obrazih: cv2. pravokotnik (img, (x, y), (x+w, y+h), (255, 0, 0), 2) count + = 1 # Shranjeno sliko shranite v mapo naborov podatkov cv2.imwrite ("nabor podatkov/uporabnik." + Str (id_ obraza) + '.' + Str (število) + ".jpg", sivo [y: y +h, x: x+w]) cv2.imshow ('image', img) k = cv2.waitKey (100) & 0xff # Pritisnite 'ESC' za izhod iz videa, če je k == 27: break elif count> = 30: # Vzemite 30 vzorcev obraza in ustavite video prelom k print ("\ n [INFO] Izhod iz programa in čiščenje") cam.release () cv2.destroyAllWindows ()

Na tej točki se prepričajte, da ste na Pi namestili blazino. Če ne, zaženite ukaz:

pip namestite vzglavnik

Ko je to končano, lahko zaženete skript za usposabljanje (drugi skript), ki vam bo brez težav priskrbel datoteko.yaml, ki bo uporabljena v končnem scenariju

uvoz cv2import numpy kot np iz PIL uvoz slike uvoza os # Pot do baze podatkov o sliki obraza pot = 'niz podatkov' prepoznavalec = cv2.face. LBPHFaceRecognizer_create () detektor = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml"); # funkcija, da dobite slike in podatke o oznakah def getImagesAndLabels (pot): imagePaths = [os.path.join (pot, f) za f v os.listdir (pot)] faceSamples = ids = za imagePath v imagePaths: PIL_img = Image.open (imagePath).convert ('L') # pretvori v sivino img_numpy = np.array (PIL_img, 'uint8') id = int (os.path.split (imagePath) [-1]. split (".") [1]) obrazov = detektor.detectMultiScale (img_numpy) za (x, y, w, h) v obrazih: faceSamples.append (img_numpy [y: y+h, x: x+w]) ids.append (id) return faceSamples, ids print ("\ n [INFO] Obrazi za usposabljanje. Trajalo bo nekaj sekund. Počakajte …") obrazi, ids = getImagesAndLabels (pot) prepoznaval.train (obrazovi, np.array (ids)) # Shranite model v trainer/trainer.yml Reconizer.write ('trainer/trainer.yml') # Reconizer.save () je delal na Macu, ne pa na Pi # Natisnite število obrazovanih obrazov in natisnite končni program ("\ n [INFO] {0} obrazovani obrazi. Izhod iz programa".format (len (np.unique (ids))))

Pri tem nizu skriptov je kul, da je v sistem mogoče vnesti več obrazov, kar pomeni, da lahko po želji več posameznikov dostopa do notranjosti ogledala.

Spodaj imam za prenos na voljo skript zajema podatkov in skript usposabljanja.

9. korak: Čas za prepoznavanje obraza

Čas za prepoznavanje obraza
Čas za prepoznavanje obraza
Čas za prepoznavanje obraza
Čas za prepoznavanje obraza

Končno lahko zaženemo skript za prepoznavanje. Tej skripti je bilo dodano več kode, da bi motorični proces deloval, zato bom te dele podrobneje razložil. Razčlenil ga bom na odseke, vendar bom celoten scenarij postavil na konec koraka, če to želite.

Začeli bomo z uvozom vseh modulov, ki jih potrebujemo, nato pa način GPIO nastavimo na GPIO. BCM

uvoz numpy kot np

uvoz os čas uvoza uvoz RPi. GPIO kot GPIO GPIO.setwarnings (False) GPIO.setmode (GPIO. BCM)

Ta naslednji seznam z imenom ControlPin je niz številk, ki predstavlja izhodne zatiče, ki bodo uporabljeni za naš koračni motor.

ControlPin = [14, 15, 18, 23]

For-zanka te zatiče nastavi kot izhode in nato poskrbi, da so izklopljeni. Tu imam še nekaj kode, s katero lahko predal zaprem s pritiskom na gumb, vendar sem se odločil, da namesto tega uporabim časovnik.

GPIO.setup (ControlPin , GPIO. OUT)

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

Naslednji dve spremenljivki sta zaporedja, ki ju bomo uporabili za pogon motorja. Te informacije sem se naučil iz čudovitega videoposnetka Gavena MacDonalda, ki ga toplo priporočam za ogled, ko se poglobljeno loti ne le kode, ampak tudi dejanskega motorja (najdete tukaj: https://www.youtube.com/embed/Dc16mKFA7Fo). V bistvu se bo vsako zaporedje ponavljalo z uporabo ugnezdenih zank for v prihajajočih funkcijah openComp in closeComp. Če natančno pogledate, je seq2 ravno nasprotje seq1. Ja, uganili ste. Ena je za premikanje motorja naprej, druga pa za vzvratno vožnjo.

seq1 =

seq2 =

Začenši z našo funkcijo openComp ustvarimo zanko for, ki se bo ponavljala 1024-krat. Glede na videoposnetek MacDonald's 512 bi ponovitve omogočile popolno vrtenje motorja in ugotovil sem, da sta približno dve rotaciji dobri dolžini, vendar se to lahko prilagodi glede na velikost posameznika. Naslednja for zanka je sestavljena iz 8 ponovitev, da bi upoštevali 8 nizov, najdenih v seq1 in seq2. In nazadnje, zadnja for-zanka se štirikrat ponovi za štiri elemente, ki jih najdemo v vsakem od teh nizov, pa tudi za 4 zatiče GPIO, na katere imamo priključen motor. Spodnja vrstica izbere pin GPIO in ga nato vklopi ali izklopi, odvisno od ponovitve. Vrstica za določa nekaj časa medpomnilnika, da se naš motor sploh ne vrti. Ko se motor vrti, da premakne predal, spi 5 sekund, preden gre naprej. Ta čas lahko prilagodite tukaj ali pa omogočite komentirano kodo, ki omogoča uporabo gumba za posredovanje naprej s skriptom in ne s časovnikom.

za i v dosegu (1024):

za polkorak v območju (8): za pin v območju (4): izhod GPIO (izhod ControlPin [pin], seq1 [halfstep] [pin]) time.sleep (.001) '' 'medtem ko je True: če GPIO.input (2) == GPIO. LOW: break; '' 'time.sleep (5)

Funkcija closeComp deluje na podoben način. Ko se motor premakne, nadaljujem z nastavitvijo naših zadnjih zatičev GPIO na nizko, da se prepričam, da ne zapravljamo energije, nato pa dodam še tri sekunde časa, preden nadaljujem.

za i v dosegu (1024):

za polkorak v razponu (8): za pin v območju (4): izhod GPIO (izhod ControlPin [pin], seq2 [halfstep] [pin]) time.sleep (.001) tiskanje ("oddelek zaprt") GPIO.output (ControlPin [0], 0) GPIO.output (ControlPin [3], 0) time.sleep (3)

Večji del naslednjega dela se uporabi za nastavitev kamere in začetek prepoznavanja obrazov. Še enkrat, navodila MKRoBot gredo v dele bolj, vendar za zdaj samo prikazujem dele, ki se uporabljajo za ogledalo.

Najprej sem spremenil imena seznamov, tako da je moje ime v indeksu, ki sem mu ga dodelil med zbiranjem podatkov (v mojem primeru 1). Nato sem nastavil preostale vrednosti na Brez, saj v nizu podatkov nisem imel več obrazov.

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

Zadnjih nekaj vrstic kode je izvedenih v debeli for zanki. Ustvaril sem spremenljivko za shranjevanje zaupanja kot celo število (intConfidence), preden se zaupanje spremenljivke spremeni v niz. Nato z izjavo if preverim, ali je zaupanje večje od 30 in ali je id (katero osebo računalnik zazna, v tem primeru »Daniel«) enak mojemu imenu. Ko je to potrjeno, se pokliče funkcija openComp, ki (kot je razloženo prej) premakne motor, se po 5 sekundah zažene in nato nadaljuje z zapiranjem CompCo, ki motor premakne v nasprotno smer in izvede nekaj čiščenja, preden nadaljuje z zanko debeline.

če je intConfidence> 30 in id == 'Daniel':

openComp () closeComp ()

Napaka, ki sem jo odkril tukaj, je ta, da se koda včasih po vrnitvi closeComp nadaljuje, vendar je pogojna izjava if znova resnična, kot da bere video vir, ki je še vedno v medpomnilniku. Čeprav se to ne zgodi vsakič, ko bom še našel način, da se to nikoli ne zgodi, zato, če ima kdo kakšno idejo, naj mi to sporoči v komentarjih.

Tu je celoten skript na enem mestu (tik pod tem pa je na voljo za prenos):

uvoz cv2

uvoz numpy kot np uvoz os čas uvoza uvoz RPi. GPIO kot GPIO GPIO.setwarnings (False) GPIO.setmode (GPIO. BCM) ControlPin = [14, 15, 18, 23] za i v območju (4): GPIO.setup (ControlPin , GPIO. OUT) Izhod GPIO (ControlPin , 0) GPIO.setup (2, GPIO. IN, pull_up_down = GPIO. PUD_DOWN) seq1 =

10. korak: Namestitev Pi in priključitev motorja

Namestitev Pi in priključitev motorja
Namestitev Pi in priključitev motorja
Namestitev Pi in priključitev motorja
Namestitev Pi in priključitev motorja
Namestitev Pi in priključitev motorja
Namestitev Pi in priključitev motorja

Namestitev Raspberry Pi na okvir je bila precej preprosta. Oblikoval sem majhen 90-stopinjski komolec z enim obrazom z luknjo, druga stran pa popolnoma ravno. Po 3D tiskanju jih lahko pritrdite z vijaki na Raspberry Pi na montažnih luknjah (uporabil sem dve luknji na vsaki strani zatičev GPIO).

Nato sem uporabil super lepilo na nasprotnih straneh 3D natisnjenih komolcev za lepljenje Pi tik pred predalom na okvirju. Ko sem lepilo posušil, sem lahko preprosto in priročno odstranil ali zamenjal Pi le z dvema vijakoma. Spodaj imam povezavo.stl za komolec.

Zdaj preprosto priključite gonilnik motorja na PI z IN1, IN2, IN3, IN4, ki se poveže z GPIO 14, 15, 18, 23. Na koncu priključite 5v in ozemljitvene nožice krmilne plošče na izhod 5v in ozemljitvene nožice Pi.

Tukaj je povezava do Pi -jevega Pinout -a za nekaj referenc:

11. korak: Namestitev kamere

Namestitev kamere
Namestitev kamere
Namestitev kamere
Namestitev kamere
Namestitev kamere
Namestitev kamere

Namestitev kamere je bila nekoliko manj robustna kot Pi, vendar je metoda opravila delo. Po oblikovanju in tiskanju tankega nosilca z dvema luknjama na vsakem koncu sem žarek pritrdil na Rasberry Pi skozi njegovo montažno luknjo. Nato samo pritrdite kamero na nasprotni konec žarka z drugim vijakom. Ta-da! Izgleda precej muhasto.

12. korak: Ustvarjanje in namestitev mehanizma za premikanje predalov

Ustvarjanje in namestitev mehanizma za premikanje predalov
Ustvarjanje in namestitev mehanizma za premikanje predalov
Ustvarjanje in namestitev mehanizma za premikanje predalov
Ustvarjanje in namestitev mehanizma za premikanje predalov
Ustvarjanje in namestitev mehanizma za premikanje predalov
Ustvarjanje in namestitev mehanizma za premikanje predalov

Ta korak je bil olajšan zaradi vedno dobronamernih daril skupnosti izdelovalcev. Po hitrem iskanju v Thingiverse sem lahko našel linearni aktuator, ki ga je ustvaril TucksProjects (najdete ga tukaj: https://www.thingiverse.com/thing:2987762). Ostalo je le, da ga udarite na kartico SD in pustite tiskalniku, da opravi delo.

Na koncu sem vstopil v Fusion 360 in uredil ostrešje, ker je bila gred mojega motorja prevelika za tisto, ki jo ponuja TucksProjects. Spodaj imam.stl za to. Po tiskanju ga moramo samo sestaviti tako, da namestimo opornico na gred motorja, nato pa pritrdimo stranice motorja in ohišja z 2 vijakoma (pazite, da vstavite stojalo vmes, preden ga zaprete). Na koncu sem moral odrezati centimeter od stojala, da se prilega med predal in okvir.

Zdaj ostane le pritrditev mehanizma na okvir in predal. "A KAKO BOMO DELALI?" vprašaš … ja, povej to z mano: Super lepilo. Kot je prikazano na zgornjih slikah, mehanizem preprosto postavite na dno okvirja in ga potisnite navzgor ob kos lesa, po katerem predal drsi. Pri tem je ključnega pomena, da poskušate stojalo/mehanizem postaviti čim bolj vzporedno z okvirjem, tako da pri premikanju mehanizma potisne predal naravnost in ne pod kotom. Ko se lepilo posuši, na rob stojala položite še nekaj lepila in predal premaknite na mesto ter pustite, da se posuši. Ko končamo, imamo močan mehanizem za potiskanje skrivnega predala noter in ven.

Korak: Dodajanje kartona za ogledalo

Dodajanje kartona za ogledalo
Dodajanje kartona za ogledalo
Dodajanje kartona za ogledalo
Dodajanje kartona za ogledalo
Dodajanje kartona za ogledalo
Dodajanje kartona za ogledalo

Da bi bil ta dvosmerni film bolj zrcalni, sem ugotovil, da nam dobro služi, če karton postavimo za steklo. Uporabljen je karton, ki je priložen okvirju, vendar bo kos, ki ga boste prilegali, deloval. To tudi zagotavlja, da LED dioda kamere, krmilnik motorja ali Pi ne prikazuje svetlobe na drugi strani ogledala. Ko je vse na svojem mestu, s svinčnikom označite, kje fotoaparat sedi na kartonu. Nato z britvico izrežite pravokotnik, tako da lahko kamera pokuka, ko je na svojem mestu.

14. korak: Oblačenje zadnjega dela

Oblačenje zadnjega dela
Oblačenje zadnjega dela
Oblačenje zadnjega dela
Oblačenje zadnjega dela

Zadnja stvar, ki jo morate narediti, je, da postavite sprednji del predala, ki je bil prej odložen. Premaknite motor tako, da štrli predal. Nato prilepite sprednji del tako, da je kos predala na sredini (na vseh straneh bi moralo biti malo obešeno. Nato ga lahko obesite na steno.

15. korak: Finale

Finale
Finale
Finale
Finale

Evo ga! Obstaja več izboljšav, na primer dodajanje tega gumba, nakup boljšega dvosmernega filma in odpravljanje te napake v kodi, vendar vse skupaj opravi delo: izgleda kot ogledalo, prepozna vnaprej določeno uporabnikov obraz in odpre tisti srčkan predal. Kot vedno bi rad slišal vaše misli, vprašanja in spomine v spodnjih komentarjih.

Skupna ocena: 10/10

Komentarji: #Ali ne bi poskusili znova … razen če bi lahko sledil tem navodilom;)

Izziv Secret Compartment Challenge
Izziv Secret Compartment Challenge
Izziv Secret Compartment Challenge
Izziv Secret Compartment Challenge

Velika nagrada v izzivu Secret Compartment Challenge

Priporočena: