Satura rādītājs:
- Piegādes
- 1. darbība: kastes rāmja izgriešana
- 2. darbība: atvilktnes izgriešana
- 3. darbība: rāmja salikšana kopā
- 4. solis: spogulim
- 5. darbība: instalējiet Raspbian Stretch
- 6. darbība: instalējiet OpenCV
- 7. darbība: iespējojiet/pārbaudiet kameru
- 8. darbība. Datu un apmācības datu vākšana
- 9. darbība. Sejas atpazīšanas laiks
- 10. solis: Pi montāža un motora pievienošana
- 11. darbība: kameras uzstādīšana
- 12. darbība: atvilktņu pārvietošanas mehānisma izveide un uzstādīšana
- 13. darbība. Kartona pievienošana aiz spoguļa
- 14. solis: gala gabala uzlikšana
- 15. solis: fināls
Video: Sejas atpazīšanas spogulis ar slepeno nodalījumu: 15 soļi (ar attēliem)
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:51
Mani vienmēr interesēja aizvien radošie slepenie nodalījumi, ko izmanto stāstos, filmās un tamlīdzīgi. Tātad, redzot slepeno nodalījumu konkursu, es nolēmu pats eksperimentēt ar šo ideju un izveidot parastu spoguli, kas atver slepeno sānu atvilktni, kad tajā ieskatās īstais cilvēks.
Izmantojot Raspberry Pi, dažas zināšanas par python programmēšanu un 8. klases veikalu klasi, mēs varam izveidot šo krāšņo ierīci, lai paslēptu objektus redzamā vietā, kuriem varēs piekļūt tikai pareizais lietotājs.
Es vēlos īpaši pateikties šiem cilvēkiem/platformām, no kurām es arī ieguvu savu informāciju un resursus:
TeCoEd - Youtube kanāls
Emets no PiMyLifeUp
MJRoBot vietnē Hackster.io (profils)
Gavens Makdonalds - Youtube kanāls
Tucker Shannon vietnē Thingiverse (profils)
Piegādes
Rāmja piederumi:
- Koka dēlis (šīs plāksnes izmēri bija 42 x 7,5 x 5/16 collas)
- Rāmis ar zīmuli (ar stiklu)
- Pūšamā krāsa
- Vienvirziena atstarojoša līme
- Stikla tīrītājs un lupata
- MDF koks
Sejas atpazīšanas piederumi:
- Raspberry Pi (es izmantoju Pi 3 B+, bet ir arī citas iespējas)
- Kameras modulis
- Stepper motors
Rīki:
- Galda zāģis
- Džigzāģis
- SmilšpapīrsKoks
- GlueTape
- Mērs
- Šķēres
- Smidzināšanas pudele
- 3D printeris
- Super līme
1. darbība: kastes rāmja izgriešana
Attēlu rāmi nopirku lietotu preču veikalā. Tikai brīdinājums, pārliecinieties, vai dēļi, kas veido rāmi, ir vismaz 1 1/2 collas plati. Tas ir tāpēc, lai uz tā varētu pielīmēt citus koka dēļus ar pietiekami daudz vietas, ar ko strādāt. Tāpat pārliecinieties, vai stikls ir rāmis ir pilnīgi skaidrs. Es nejauši nopirku matētu un pēc tam nācās nopirkt citu rāmi tikai caurspīdīgam stiklam. Tā kā mans rāmis tiek izmantots, kastes rāmja izmēri var atšķirties.
- Novietojiet rāmi portreta virzienā. Izmēriet rāmja stikla cauruma puses garās malas (LS) ar papildu ½”augšpusē un apakšā. (t.i., pievienojiet collu stikla cauruma mērījuma garajai pusei. Ierakstiet to un atzīmējiet LSM (Long Side Measurement).
- Līdzīgi izmēriet cauruma augšējo malu un pievienojiet papildu 1”. Ierakstiet to un atzīmējiet SSM (Short Side Measurement).
- Paņemiet savu dēli un ar galda zāģi sagrieziet divus LSM x 2”un divus SSM x 2”.
- Paņemiet vienu no LSM griezumiem un izmēriet 2”x1” taisnstūri, kas ir 1”no apakšas un ½” no kreisās un labās puses (kā parādīts 3. attēlā).
- Izmantojiet finierzāģi, lai izgrieztu caurumu. Pēc tam izmantojiet smilšpapīru, lai noslīpētu malas.
2. darbība: atvilktnes izgriešana
Tagad mēs sāksim veidot atvilktni (jeb slepeno nodalījumu).
- Izgrieziet divas 4”x 1” malas, 3”x 1” (aizmugurējā mala), 4”x 1” (priekšējā mala) un 4”x 3” (platforma).
- Līmējiet pirmo 4”x 1” malu gar platformas 4”malu. Es ievietoju pāris salocītus papīrus zem platformas puses, lai tas būtu nedaudz pacelts, tādējādi tas netiktu ievilkts caurumā, ko es izgriezu LS dēļā. Uzstādiet nožūt 30 minūtes.
- Līdzīgi pielīmējiet 3 x 1 collu gar platformas 3 ⅜ malu. Uzstādiet nožūt 30 minūtes. Pēc tam pielīmējiet otro 4”x 1” pusi pretējā pusē pirmajai. Uzstādiet nožūt 30 minūtes.
- Pagaidām nolieciet priekšējo malu malā. Tā būs pēdējā lieta, kas pielīmēta pie atvilktnes.
- Kad esat pabeidzis, pārbaudiet, vai tas iekļaujas caurumā, kuru jūs atgriezāt LSM dēļā. Ja nē, slīpējiet caurumu, līdz atvilktne viegli slīd iekšā un ārā un nav vilces.
3. darbība: rāmja salikšana kopā
Kad visas detaļas ir pabeigtas, mēs varam sākt salikt visu rāmi.
- Līmējiet LSM dēli centrā ar stikla caurumu ar ½ collu katrā pusē. Pārliecinieties, ka tas ir pielīmēts ar ½ collu attālumā no cauruma (kā parādīts 1. attēlā). Uzstādiet nožūt 30 minūtes.
- Līmējiet pirmo SSM dēli ar malu, kas pieskaras tikko pielīmētās LSM dēļa iekšpusei. (Izmantojiet lineālu, lai pārliecinātos, ka tas ir pielīmēts taisni). Uzstādiet nožūt 30 minūtes.
- Paņemiet otru LSM pusi un pielīmējiet līdzīgu kā pirmo. Pārliecinieties, ka tas ir ½”attālumā no cauruma un vai tikko piestiprinātais SSM ir pielīmēts dēļa iekšpusē. Uzstādiet nožūt 30 minūtes.
- Līmējiet pēdējo SSM augšējā malā. Tā kā jums ir divi LSM abās pusēs, atkarībā no tā, cik taisni tos piestiprinājāt, jums var būt nepieciešams noslīpēt SSM malas, lai pārliecinātos, ka tas atbilst (mana griešana dažreiz ir izslēgta). Uzstādiet nožūt 30 minūtes.
- Izmēriet nelielu atstarpi starp atvilktnes dibenu un rāmi. Izgrieziet MDF koka gabalu ar šo mērījumu par 4 ". Jūs vēlaties, lai šis gabals būtu tuvu atvilktnei, bet nepieskartos tam. Tas ir paredzēts, lai atbalstītu atvilktni ar minimālu berzi.
- Kad viss ir izdarīts, es izsmidzināju rāmi, lai visi gabali atbilstu.
4. solis: spogulim
Vienvirziena plēves līme, ko nopirku no Amazon, bija aptuveni 10 USD. Ir interesantāki kvalitatīvāki, kas ir nedaudz dārgāki. Tas, ko es izmantoju, atspoguļo, bet jūs varat teikt, ka tas nav parasts spogulis, ko jūs redzētu mājās. Dārgākie iegūs šo izskatu.
- Notīriet stiklu ar stikla tīrītāju abās pusēs.
- Atritiniet vienvirziena līmi un uzlieciet stiklu uz augšu. Izgrieziet līmi tā, lai katrā stikla pusē būtu vismaz ½”pārpalikums.
- Nolieciet glāzi malā un samitriniet tās vienu pusi ar ūdeni. Pēc tam noņemiet plastmasas apvalku no vienvirziena līmes un apsmidziniet tikko atklāto pusi ar ūdeni.
- Novietojiet stikla mitro pusi uz līmes mitrās puses. Ļaujiet sēdēt 30 minūtes.
- Apgrieziet un ar īkšķi izlīdziniet visus burbuļus starp līmi un stiklu. Pēc tam nogrieziet lieko līmi no malām.
5. darbība: instalējiet Raspbian Stretch
Šī bija mana pirmā reize, kad iedziļinājos Raspberry Pi vidē, un es sāku meklēt norādījumus par OS instalēšanu. Beidzot vietnē Youtube atradu vienkāršu TeCoEd apmācību, kas ietvēra Stretch instalēšanas procesu SD kartē (ar diezgan jauku ievadu). Šeit ir saite uz šo apmācību:
Būtībā viss, kas jums jādara, ir:
- Formatējiet SD karti, atlasot disku >> Diska rīki >> Formāts. Lejupielādējiet Raspian Stretch ZIP failu (atrodams šeit:
- Zibspuldziet OS attēlu SD kartē. Lai to paveiktu, TeCoEd izmantoja Win32 diska attēlveidotāju. Es beidzot instalēju balenaEtcher, kas šķita nedaudz vienkāršāk. (Šeit ir balenaEtcher lejupielādes saite:
- Kad esat balenaEtcher, atlasiet “Flash from File” un izvēlieties iepriekš lejupielādēto ZIP failu. Pēc tam atlasiet vēlamo SD karti (ja tā netiek izvēlēta automātiski). Pēc tam nospiediet sulīgo zibspuldzes pogu un gaidiet, kamēr notiks maģija.
Kad tas ir instalēts SD kartē, varat to ievietot Raspberry Pi un iziet vispārējo Pi iestatīšanas procesu.
6. darbība: instalējiet OpenCV
Tagad pārejiet pie vairāk uz sejas atpazīšanu orientētām daļām. Lai atpazītu sejas, mums ir jālejupielādē OpenCV bibliotēka, kurā ir liels skaits rīku darbam ar datora redzi.
OpenCV instalēšana man bija visgrūtākā programmatūras aspekta daļa. Bet pēc daudzu norādījumu ievērošanas es beidzot atradu Emmet apmācību no PiMyLifeUp, kas izdarīja triku, kas atrodams šeit:
Es neizstaigāšu šīs darbības, jo jums būs labāk sekot to sekošanai no saites (ar sniegtajiem paskaidrojumiem un iespēju vieglāk kopēt un ielīmēt tieši no vietnes).
7. darbība: iespējojiet/pārbaudiet kameru
Pēc OpenCV instalēšanas pārējais mans ceļojums tika pabeigts, izmantojot MJRoBot apmācību vietnē Hackster.io, kas atrodama šeit:
Pirms darba sākšanas es vēlos jums atgādināt, ka es neesmu šo skriptu sākotnējais veidotājs, bet galu galā mainīju to daļas.
Lai sāktu, mums jāpārbauda kamera, lai pārliecinātos, ka varam uzņemt video ekrānā. Es pavadīju apmēram stundu, mēģinot palaist MJRoBot 3. darbībā sniegto skriptu. Kā dzīvē būtu, mums faktiski ir jāiespējo kamera Raspberry Pi (izrādās, ka varētu būt laba ideja izlasīt sniegtos norādījumus … mmm nē). Tātad, pēc kameras pievienošanas pareizajam portam, rīkojieties šādi:
- Atveriet komandu termināli un ierakstiet sudo raspi-config
- Atlasiet “Iespējot kameru” (tas var būt atrodams ierīču opcijā)
- Nospiediet “Enter”
- Dodieties uz “Pabeigt”, un jums tiks piedāvāts atsāknēt
Pēc tam rīkojieties šādi:
- Dodieties uz aveņu galveno izvēlni (augšējā kreisajā stūrī)
- Preferences
- Raspberry Pi konfigurācija
- Saskarnes
- Pēc tam kamerā atlasiet “Iespējots”
- Tad “Labi”
Tagad jums vajadzētu būt iespējai veiksmīgi palaist šo skriptu no MJRoBot apmācības, lai pārbaudītu kameru (atcerieties, ka viss šis kods un padziļināts apraksts ir atrodams iepriekš norādītajā saitē uz MJRobot apmācību):
importēt numpy kā np
importēt 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 (kadrs, -1) # Flip kamera vertikāli pelēka = cv2.cvtColor (kadrs, cv2. COLOR_BGR2GRAY) cv2.imshow ('rāmis', rāmis) cv2.imshow ('pelēks', pelēks) k = cv2.waitKey (30) & 0xff, ja k == 27: # nospiediet 'ESC', lai aizvērtu pārtraukuma vāciņu. Release () cv2.destroyAllWindows ()
Iepriekšējam kodam vajadzētu parādīt divus logus - vienu krāsu un otru pelēktoņos. Ja jūs tikāt līdz šim, es domāju, ka esat pelnījis jauku sviestmaizi.
8. darbība. Datu un apmācības datu vākšana
Piedāvātajā apmācībā autore daudz dziļāk iepazīstas ar koda procesiem, kas drīzumā tiks sniegti, taču, tā kā šie ir norādījumi par šī spoguļa izgatavošanu, es neiedziļināšos vēsturē un sarežģītajā mehānikā. Tomēr es iesaku jums veltīt mēnesi savas dzīves, lasot par šīm divām lietām, jo tās var labi kalpot jūsu prātam.
Ir jāpalaiž vēl tikai aptuveni trīs skripti, pirms mēs visu varam sākt darboties. Pirmais ir paredzēts datu vākšanai, otrais - to apmācībai, bet pēdējais - atpazīšanai. Datu vākšanai ir nepieciešami faktiski sejas attēli un jāuzglabā noteiktā apmācības vietā. Šī koda radītājs padarīja to visu ļoti vienkāršu, tāpēc iesaku ievērot šos norādījumus, lai izvairītos no galvassāpēm.
Atveriet komandrindu un izveidojiet jaunu direktoriju, nosaucot to par kaut ko jautru (es nosaucu manu FaceRec)
mkdir FaceRec
Tagad nomainiet direktoriju uz FaceRec un izveidojiet apakšdirektoriju, nosaucot to par datu kopu
cd FaceRec
mkdir datu kopa
Kamēr mēs to darām, mēs varam izveidot arī otru apakšdirektoriju ar nosaukumu treneris
mkdir treneris
Tagad jūs varat palaist un izpildīt pirmā skripta norādījumus, kas uzņems lietotāja attēlus. (Tikai uzmanību, noteikti ievadiet lietotāja ID kā 1, 2, 3 utt.)
importēt cv2import os cam = cv2. VideoCapture (0) cam.set (3, 640) # iestatīt video platumu cam.set (4, 480) # iestatīt video augstumu face_detector = cv2. CascadeClassifier ('haarcascade_frontalface_default.xml') # Katram persona, ievadiet vienu ciparu sejas ID face_id = ievade ('\ n ievadiet lietotāja ID beigas nospiediet ==>') print ("\ n [INFO] Notiek sejas uztveršanas inicializēšana. Paskatieties uz kameru un pagaidiet…") # Inicializējiet individuālo paraugu ņemšanas sejas skaitīšanu skaits = 0, kamēr (True): ret, img = cam.read () img = cv2.flip (img, -1) # flip video attēls vertikāli pelēks = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) sejas = face_detector.detectMultiScale (pelēks, 1.3, 5) (x, y, w, h) sejās: cv2. taisnstūris (img, (x, y), (x+w, y+h), (255, 0, 0), 2) count + = 1 # Saglabājiet uzņemto attēlu datu kopu mapē cv2.imwrite ("datu kopa/lietotājs." + Str (face_id) + '.' + Str (skaits) + ".jpg", pelēks [y: y +h, x: x+w]) cv2.imshow ('attēls', img) k = cv2.waitKey (100) & 0xff # Nospiediet 'ESC', lai izietu no video, ja k == 27: pārtraukuma elifu skaits> = 30: # Paņemiet 30 sejas paraugu un pārtrauciet video brea k print ("\ n [INFO] Iziet no programmas un notīrīt lietas") cam.release () cv2.destroyAllWindows ()
Šajā brīdī pārliecinieties, vai esat uzstādījis spilvenu uz Pi. Ja nē, palaidiet komandu:
pip uzstādīt spilvenu
Kad tas ir pabeigts, varat palaist apmācības skriptu (otro skriptu), kas nemanāmi nodrošinās jums.yaml failu, kas tiks izmantots galīgajā skriptā
importēt cv2import numpy kā np no PIL importēšanas Attēlu importēšana os # Ceļš sejas attēlu datu bāzes ceļam = 'datu kopa' atpazītājs = cv2.face. LBPHFaceRecognizer_create () detektors = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml"); # funkcija attēlu un iezīmju datu iegūšanai: PIL_img = Image.open (imagePath).convert ('L') # pārvērst to pelēktoņos img_numpy = np.array (PIL_img, 'uint8') id = int (os.path.split (imagePath) [-1]. sadalīt (".") [1]) sejas = detektors.detectMultiScale (img_numpy) (x, y, w, h) sejās: faceSamples.append (img_numpy [y: y+h, x: x+w]) ids.append (id) atgriezt seju ids)) # Saglabājiet modeli trenera/trenažiera.yml atpazīšanas ierīcē.write ('trainer/trainer.yml') # tunnizētājs.save () strādāja operētājsistēmā Mac, bet ne uz Pi # Izdrukājiet apmācīto seju skaitu un beidziet programmas drukāšanu ("\ n [INFO] {0} sejas ir apmācītas. Iziet no programmas".format (len (np.unique (ids))))
Šajā skriptu komplektā ir forši tas, ka sistēmā var ievadīt vairākas sejas, kas nozīmē, ka pēc vēlēšanās vairākas personas var piekļūt spoguļa iekšienei.
Lejā ir pieejams datu uztveršanas skripts un apmācības skripts.
9. darbība. Sejas atpazīšanas laiks
Visbeidzot, mēs varam palaist atpazīšanas skriptu. Šim skriptam tika pievienots vairāk kodu, lai padarītu motora procesu funkcionālu, tāpēc es šīs detaļas paskaidrošu nedaudz rūpīgāk. Es to sadalīšu sadaļās, bet es ievietošu visu skriptu soļa beigās, ja jūs to meklējat.
Mēs vispirms importēsim visus nepieciešamos moduļus un pēc tam iestatīsim GPIO režīmu uz GPIO. BCM
importēt numpy kā np
importēt os importēšanas laiku importēt RPi. GPIO kā GPIO GPIO.setwarnings (nepatiess) GPIO.setmode (GPIO. BCM)
Šis nākamais saraksts ar nosaukumu ControlPin ir skaitļu masīvs, kas apzīmē izejas tapas, kas tiks izmantotas mūsu soļu motoram.
ControlPin = [14, 15, 18, 23]
For-loop nosaka šīs tapas kā izejas un pēc tam pārliecinās, ka tās ir izslēgtas. Man joprojām ir kāds kods, lai atvilktni varētu aizvērt, nospiežot pogu, bet es nolēmu izmantot taimeri.
GPIO iestatīšana (ControlPin , GPIO. OUT)
GPIO.output (ControlPin , 0) GPIO.setup (2, GPIO. IN, pull_up_down = GPIO. PUD_DOWN)
Nākamie divi mainīgie ir secības, kuras mēs izmantosim motora darbināšanai. Šo informāciju es uzzināju no brīnišķīga Gavena Makdonalda video, kuru es ļoti iesaku noskatīties, jo viņš iedziļinās ne tikai kodā, bet arī faktiskajā motorā (atrodams šeit: https://www.youtube.com/embed/Dc16mKFA7Fo). Būtībā katra secība tiks atkārtota, izmantojot ligzdotās for-cilpas gaidāmajās openComp un closeComp funkcijās. Ja paskatās uzmanīgi, seq2 ir tieši pretējs secībai 1. Jā, jūs uzminējāt. Viens ir paredzēts motora pārvietošanai uz priekšu, bet otrs - atpakaļgaitai.
secība1 =
seq2 =
Sākot ar mūsu openComp funkciju, mēs izveidojam for-loop, kas atkārtosies 1024 reizes. Saskaņā ar MacDonald's video 512 atkārtojumiem tiktu nodrošināta pilna motora rotācija, un es atklāju, ka apmēram divi apgriezieni bija labs garums, taču to var pielāgot atkarībā no indivīda lieluma. Nākamā cilpa sastāv no 8 atkārtojumiem, lai ņemtu vērā 8 masīvus, kas atrodami secībā 1 un seq2. Visbeidzot, pēdējā for-loop atkārto četras reizes četriem vienumiem, kas atrodami katrā no šiem blokiem, kā arī 4 GPIO tapām, kurām ir pievienots mūsu motors. Šeit esošā līnija izvēlas GPIO tapu un pēc tam to ieslēdz vai izslēdz atkarībā no tā, kurā iterācijā tas ir ieslēgts. Līnija pēc nodrošina zināmu bufera laiku, lai mūsu motors vispār negrieztos. Kad motors griežas, lai izvilktu atvilktni ārā, pirms pāriešanas tas guļ 5 sekundes. Šo laiku var pielāgot šeit vai arī varat iespējot komentējamo kodu, kas ļauj izmantot spiedpogu, lai pārsūtītu ar skriptu, nevis taimeri.
i diapazonā (1024):
pussolim diapazonā (8): tapai diapazonā (4): GPIO.output (ControlPin [pin], seq1 [halfstep] [pin]) time.sleep (.001) '' ', kamēr True: ja GPIO.input (2) == GPIO. LOW: pārtraukums; "" time.sleep (5)
Funkcija closeComp darbojas līdzīgi. Kad motors pārvietojas atpakaļ, es turpinu iestatīt mūsu pēdējās GPIO tapas uz zemu, lai pārliecinātos, ka mēs netērējam enerģiju, un pēc tam es pievienoju vēl trīs sekundes laika, pirms turpināt.
i diapazonā (1024):
pussolim diapazonā (8): tapai diapazonā (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)
Lielākā nākamās daļas daļa tiek izmantota, lai iestatītu kameru un sāktu sejas atpazīšanu. Atkal MKRoBot norādījumi vairāk attiecas uz detaļām, bet pagaidām es tikai parādīju spoguļa daļas.
Vispirms es mainīju sarakstu nosaukumus, lai mans vārds būtu tajā rādītājā, kuru es tam piešķīru, vācot datus (manā gadījumā 1). Un tad es iestatīju pārējās vērtības uz Nav, jo man vairs nebija seju datu kopā.
vārdi = ['Nav', 'Daniel', 'Nav', 'Nav', 'Nav', 'Nav']
Mūsu pēdējās koda rindas ir ieviestas thicc for-loop. Es izveidoju mainīgo, lai pārliecību saglabātu kā veselu skaitli (intConfidence), pirms mainīgā pārliecība tiek pārvērsta par virkni. Tad es izmantoju if-paziņojumu, lai pārbaudītu, vai ticamība ir lielāka par 30 un vai id (kuru personu dators nosaka, šajā gadījumā “Daniel”) ir vienāds ar manu vārdu. Pēc tam, kad tas ir apstiprināts, tiek izsaukta funkcija openComp, kas (kā paskaidrots iepriekš) kustina motoru, izslēdzas pēc 5 sekundēm un pēc tam pāriet uz closeComp, kas pārvieto motoru pretējā virzienā un veic nelielu tīrīšanu, pirms turpināt darbu ar cilpiņu.
ja pašapziņa> 30 un id == 'Daniel':
openComp () closeComp ()
Šeit atradu kļūdu, ka dažreiz pēc closeComp atgriešanās kods tiek turpināts, bet nosacījuma if-paziņojums atkal tiek atzīts par patiesu, it kā tas lasa buferšķīdumā joprojām esošu video plūsmu. Lai gan tas nenotiek katru reizi, kad vēl neesmu atradis veidu, kā nodrošināt, lai tas nekad nenotiktu, tāpēc, ja kādam ir kādas idejas, vienkārši informējiet mani komentāros.
Šeit ir viss skripts vienā vietā (un tieši zem tā ir lejupielādējams):
importēt cv2
importēt numpy kā np importēt os importa laiku importēt RPi. GPIO kā GPIO GPIO.setwarnings (nepatiess) GPIO.setmode (GPIO. BCM) ControlPin = [14, 15, 18, 23] i diapazonā (4): GPIO.setup (ControlPin , GPIO. OUT) GPIO.output (ControlPin , 0) GPIO.setup (2, GPIO. IN, pull_up_down = GPIO. PUD_DOWN) seq1 =
10. solis: Pi montāža un motora pievienošana
Raspberry Pi uzstādīšana pie rāmja bija diezgan vienkārša. Es izveidoju nelielu 90 grādu elkoni ar vienu seju ar caurumu un otru pusi pilnīgi līdzenu. Pēc 3D drukāšanas divus no tiem var piestiprināt ar skrūvēm Raspberry Pi uz tā stiprinājuma caurumiem (es izmantoju divus caurumus katrā GPIO tapu pusē).
Pēc tam es izmantoju super līmi 3D drukāto elkoņu pretējās pusēs, lai pielīmētu Pi tieši virs atvilktnes uz rāmja. Pēc līmes nožūšanas es varēju vienkārši un ērti noņemt vai nomainīt Pi vietā tikai ar divām skrūvēm. Man ir.stl elkoņam, kas saistīts zemāk.
Tagad vienkārši pievienojiet motora draiveri PI ar IN1, IN2, IN3, IN4, savienojot attiecīgi ar GPIO 14, 15, 18, 23. Visbeidzot, pievienojiet vadības paneļa 5v un zemējuma tapas Pi 5V izejai un zemējuma tapām.
Šeit ir saite uz Pi Pinout, lai iegūtu atsauci:
11. darbība: kameras uzstādīšana
Kameras uzstādīšana bija nedaudz mazāk izturīga nekā Pi, taču metode paveica darbu. Pēc plānas sijas projektēšanas un izdrukāšanas ar 2 caurumiem katrā galā es piestiprināju staru pie Rasberry Pi caur tā montāžas atveri. Pēc tam ar citu skrūvi vienkārši pievienojiet kameru sijas pretējam galam. Ta-da! Izskatās diezgan muša.
12. darbība: atvilktņu pārvietošanas mehānisma izveide un uzstādīšana
Šis solis tika padarīts viegls, pateicoties veidotāju kopienas vienmēr labvēlīgajām dāvanām. Pēc ātras Thingiverse meklēšanas man izdevās atrast TucksProjects izveidotu lineāru izpildmehānismu (atrodams šeit: https://www.thingiverse.com/thing:2987762). Atlika tikai iepļaukāt to SD kartē un ļaut printerim paveikt darbu.
Es beidzot devos uz Fusion 360 un rediģēju stimulu, jo mana motora vārpsta bija pārāk liela TucksProjects piedāvātajam. Man ir.stl par to zemāk. Pēc drukāšanas mums tas vienkārši jāsamontē, novietojot uzmavu uz motora vārpstas, pēc tam piestiprinot motora un korpusa malas ar 2 skrūvēm (pirms aizvēršanas noteikti ievietojiet statīvu starp). Man galu galā vajadzēja nogriezt vienu collu no plaukta, lai tas ietilptu starp atvilktni un rāmi.
Tagad atliek tikai mehānismu piestiprināt pie rāmja un atvilktnes. "KĀ DARĪTU ŠO?" jūs jautājat … jā, sakiet to ar mani: Super līme. Kā parādīts iepriekš attēlos, vienkārši novietojiet mehānismu pret rāmja apakšdaļu un piespiediet to pret koka gabalu, pa kuru atvilktne slīd. Šeit ir ļoti svarīgi mēģināt novietot statīvu/mehānismu pēc iespējas paralēli rāmim, lai mehānisms kustētos stumtu atvilktni taisni, nevis slīpi. Pēc tam, kad līme ir izžuvusi, uz plaukta malas uzlieciet vēl kādu līmi un pārvietojiet atvilktni vietā un ļaujiet tai nožūt. Kad tas ir pabeigts, mums ir izturīgs mehānisms, lai iebīdītu un izvilktu slepeno atvilktni.
13. darbība. Kartona pievienošana aiz spoguļa
Lai padarītu šo divvirzienu plēvi spoguļveidīgāku, es atklāju, ka mūsu mērķim labi atbilst kartona ievietošana aiz stikla. Izmantotais kartons tiek piegādāts kopā ar rāmi, taču derēs jebkurš gabals, kas sagriezts atbilstoši. Tas arī nenodrošina gaismu no kameras LED, motora kontrollera vai Pi rāda spoguļa otrā pusē. Kad viss ir savās vietās, izmantojiet zīmuli, lai atzīmētu, kur kamera atrodas uz kartona. Pēc tam ar skuvekli sagrieziet taisnstūri, lai kamera varētu ielūkoties, kad tā ir vietā.
14. solis: gala gabala uzlikšana
Pēdējā lieta, kas jādara, ir uzvilkt atvilktnes priekšējo daļu, kas tika atlikta malā. Pārvietojiet motoru tā, lai atvilktne izliktos. Pēc tam pielīmējiet priekšējo daļu tā, lai atvilktnes gabals būtu centrēts (no visām pusēm vajadzētu nedaudz pakārt. Tad jūs varat vienkārši pakārt to pie sienas.
15. solis: fināls
Tur jums tas ir! Var veikt vairākus uzlabojumus, piemēram, pievienot šo spiedpogu, nopirkt kādu labāku divvirzienu plēvi un labot šo kļūdu kodā, bet kopumā viss tiek paveikts: tas izskatās kā spogulis, tas atpazīst iepriekš noteikto lietotāja seju, un tā atver šo mazo atvilktni. Kā vienmēr, es labprāt uzklausīšu jūsu domas, jautājumus un memuārus zemāk esošajos komentāros.
Kopējais vērtējums: 10/10
Komentāri: #Vai nemēģinātu vēlreiz … ja vien es nevarētu izpildīt šo pamācību;)
Galvenā balva slepenā nodalījuma izaicinājumā
Ieteicams:
Abellcadabra (sejas atpazīšanas durvju bloķēšanas sistēma): 9 soļi
Abellkadabra (sejas atpazīšanas durvju slēdzenes sistēma): Karantīnas laikā klājoties, es mēģināju atrast veidu, kā nogalināt laiku, izveidojot sejas atpazīšanu mājas durvīm. Es to nosaucu par Abellkadabru - kas ir kombinācija starp Abrakadabru, burvju frāze ar durvju zvanu, kuru es ņemu tikai pie zvana. LOL
Sejas atpazīšanas durvju slēdzene: 8 soļi
Sejas atpazīšanas durvju slēdzene: apmēram mēnesi gatavoju, es iepazīstinu ar sejas atpazīšanas durvju slēdzeni! Es centos, lai tas izskatītos pēc iespējas glītāk, bet es varu darīt tik daudz kā 13 gadus vecs. Šo sejas atpazīšanas durvju slēdzeni vada Raspberry Pi 4 ar īpašu pārnēsājamu siksnu
Sejas atpazīšana un identifikācija - Arduino sejas ID, izmantojot OpenCV Python un Arduino .: 6 soļi
Sejas atpazīšana un identifikācija | Arduino sejas ID, izmantojot OpenCV Python un Arduino .: Sejas atpazīšana AKA sejas ID ir viena no svarīgākajām mūsdienu mobilo tālruņu funkcijām. Tātad, man radās jautājums " vai man var būt sejas ID savam Arduino projektam " un atbilde ir jā … Mans ceļojums sākās šādi: 1. solis: piekļuve mums
Sejas atpazīšanas viedā bloķēšana ar LTE Pi HAT: 4 soļi
Sejas atpazīšanas viedā bloķēšana Izmantojot LTE Pi HAT: Sejas atpazīšana tiek izmantota arvien plašāk, mēs to varam izmantot, lai izveidotu viedo slēdzeni
Sejas atpazīšanas drošības sistēma ledusskapim ar Raspberry Pi: 7 soļi (ar attēliem)
Sejas atpazīšanas drošības sistēma ledusskapim ar Raspberry Pi: Pārlūkojot internetu, esmu atklājis, ka drošības sistēmu cenas svārstās no 150 USD līdz 600 USD un vairāk, taču ne visus risinājumus (pat ļoti dārgos) var integrēt ar citiem gudri rīki jūsu mājās! Piemēram, jūs nevarat iestatīt