Turinys:

„RaspberryPI“fotoaparatas - „MagicBox“: 13 žingsnių (su nuotraukomis)
„RaspberryPI“fotoaparatas - „MagicBox“: 13 žingsnių (su nuotraukomis)

Video: „RaspberryPI“fotoaparatas - „MagicBox“: 13 žingsnių (su nuotraukomis)

Video: „RaspberryPI“fotoaparatas - „MagicBox“: 13 žingsnių (su nuotraukomis)
Video: Raspberry Pi мультимедиа часть 1 2024, Lapkritis
Anonim
Image
Image
Statyti
Statyti

Prieš kurį laiką man kilo ši beprotiška idėja sukurti fotografavimo mašiną iš Raspberry PI. Mano mieste buvo nedidelis šou, kuriame žmonės eidavo ir rodydavo, ką gamina ar gamina naudodamiesi elektronika, kompiuteriais ir tt … Aš buvau kaip vargšo kūrėjas, bet vietinis.

Vienas artėjo, ir mes kartu su žmona statome šį daiktą.

Kaip tai veikia ?

Paspausite mėlyną mygtuką - jis pradės mirksėti - ir po 3 sekundžių bus padaryta nuotrauka. Kitoje fotoaparato pusėje yra monitorius, rodantis atgalinį laiką ir nufotografavus, nuotraukos peržiūra.

Dabar galite nusiųsti jį į „Twitter“ir „Facebook“arba atšaukti ir bandyti dar kartą. Tai taip paprasta.

Viskas yra užprogramuota „Python“, naudojant PI kadrų buferį - nėra „Xorg“, jokios GUI.

Štai vaizdo įrašas apie projekto veikimą

Prekės

  • Raspberry PI (naudoju 2 versiją)
  • „Raspberry PI“kamera (naudojant 1 versiją)
  • 3 „Big Dome“mygtukai
  • TFT/LCD monitorius su VGA/HDMI
  • MDF
  • Metaliniai vyriai, varžtai ir kt.
  • Elektriniai įrankiai
  • Laisvas laikas ir daug linksmybių

1 žingsnis: statykite

Statyti
Statyti
Statyti
Statyti

Jį statyti buvo smagu. Daug pjovimo, dažymo ir gręžimo.

Pagrindinei fotoaparato struktūrai sukurti naudojau MDF plokštes. Jie yra lengvi ir su jais lengva dirbti. Be to, tai buvo vienos rūšies mediena, kurią vietinio fabriko lazerinė mašina sugebėjo pjauti.

Prieigą prie laidų viduje padarė monitoriaus pusė, naudojant hidraulinius vyriai, kad jie galėtų padėti pakelti monitorių.

2 žingsnis: fotoaparatas

Fotoaparatas
Fotoaparatas
Fotoaparatas
Fotoaparatas
Fotoaparatas
Fotoaparatas

Fotoaparatas

Fotoaparatas yra dėžutė, kurios matmenys: 60 cm x 40 cm x 30 cm Jūsų gali būti mažesnė, didesnė, tai priklauso nuo jūsų. Tiesiog reikia pritaikyti monitoriui, kurį ketinate naudoti. MDF plokštės buvo pjaustytos lazeriu vietiniame „Fablab“. Galinėje pusėje reikia padaryti 3 skyles - du didelius kupolinius mygtukus ir vieną monitoriui. Priekyje 2 skylės - viena skirta dideliam kupolo mygtukui, kita - mažesnė - „Raspberry PI“fotoaparatui. Neturiu konkrečių matavimų - tiesiog įsivaizduokite fotoaparatą ir naudokitės juo.

3 žingsnis: stebėkite

Monitorius
Monitorius
Monitorius
Monitorius
Monitorius
Monitorius

Monitorius

Monitoriaus atrama buvo pridėta pridedant mažų medienos gabalų, kad būtų palaikomas jo dydis.

Tai buvo juostelė iš plastikinio korpuso ir pritvirtinta varžtais. Norėdami jį pakelti, buvo naudojami du hidrauliniai vyriai (naudojami).

4 žingsnis: dekoravimas

Dekoravimas
Dekoravimas
Dekoravimas
Dekoravimas
Dekoravimas
Dekoravimas
Dekoravimas
Dekoravimas

Kadangi man labai patinka mano „Fuji X-T30“stilius, nuėjome ir padarėme kažką panašaus.

Pirmiausia padengėme putomis, o paskui purškėme juodai. Po dažymo pridėjome aliuminio foliją sidabrinėms dalims ir apvyniokite

Norėdami imituoti objektyvą, mes tiesiog naudojome apvalų „Tupperware“, kai padarėme nedidelę skylę, skirtą „Raspberry PI“fotoaparato moduliui sėdėti.

5 žingsnis: programavimas

Fotoaparato programavimas buvo iššūkis, bet tai buvo labai smagu.

Nėra GUI - tai veikia CLI ir veikia „Python“3 versijoje.

Pirmiausia pradėjau nuo mygtukų testavimo ir programavimo, toliau fotografavau naudodami jau pateiktus įrankius ir „Python“API. Tada perėjau prie nuotraukų perdengimo fotoaparato išvestyje (atgaliniam skaičiavimui) ir šalia bendrauti su „Twitter“ir „Facebook“.

Po to, kai man buvo patogu, kaip dėlionė, aš surinkau visas dalis. Čia mes einame tuo pačiu procesu. Pradėkite lėtai ir nuo mažo ir eikite į greitą ir didelį.

Pirma, pradėkime nuo „Raspberry PI“konfigūravimo

6 žingsnis: paruoškite aviečių PI

Aviečių PI paruošimas
Aviečių PI paruošimas
Aviečių PI paruošimas
Aviečių PI paruošimas
Aviečių PI paruošimas
Aviečių PI paruošimas

Aš nekalbėsiu, kaip įdiegti „Raspbian“į „Raspberry PI“- ten yra daug vadovėlių, net oficialioje „Raspberry PI“svetainėje.

Jums tereikia turėti prieigą prie SSH arba prijungti prie monitoriaus ir prijungti klaviatūrą bei pelę.

PASTABA: Pradėdami nuo „Raspberry PI“kameros, turite ją prijungti prie monitoriaus. Iki tol visus veiksmus galima atlikti naudojant SSH.

Įkėlę „Raspberry PI“, turime įjungti „Raspberry PI“kamerą. Tam naudokime raspi-config įrankį.

sudo raspi-config

  1. Pasirinkite 5 parinktį - sąsajos parinktys
  2. Pasirinkite P1 - įjungti/išjungti ryšį su Raspberry PI kamera
  3. Pasakyti "taip
  4. už gerai
  5. Pasirinkite Baigti
  6. Pasirinkite Taip, kad dabar paleistumėte iš naujo

Po perkrovimo galime tęsti

7 žingsnis: programinė įranga

Mums reikės įdiegti kai kurias „Python“bibliotekas. Tai buvo atnaujinta naujausiai „Raspbian“versijai - „Buster“

Pirma, leiskite nustatyti „Python 3“kaip numatytąjį. Sekite šią nuorodą, kad sužinotumėte, kaip ją nustatyti SYSTEM WIDE

Bibliotekos:

  • python-pil.imagetk manipuliuoti vaizdais
  • python-rpi.gpio, kad galėtumėte pasiekti GPIO PINS
  • „python-picamera“, kad pasiektumėte „Raspberry PI“kamerą
  • „Tweepy“, norėdamas pasidalyti nuotrauka „Twitter“
  • facebook-sdk, kad galėtumėte bendrinti „Facebook“puslapyje

sudo apt-get install python3-pil.imagetk python3-rpi.gpio python3-picamera python3-tweepy python3-pip

Norėdami įdiegti „facebook-sdk“, naudokite „Python pip“

sudo pip3 įdiegti facebook-sdk

8 žingsnis: programavimas - fotoaparato peržiūra

Image
Image
Programavimas - fotoaparato peržiūra
Programavimas - fotoaparato peržiūra
Programavimas - fotoaparato peržiūra
Programavimas - fotoaparato peržiūra

Vienas iš šiam projektui keliamų reikalavimų buvo, kad ši programa veiktų CLI režimu. Taigi, mes turime parodyti fotoaparato vaizdą konsolėje. Tam naudokime „Python Picamera“. Po to naudokime pil.imagetk, kad būtų rodoma perdanga fotoaparato peržiūros viršuje

Mūsų mažoje programoje (mes kursime mažas programas, kol viena didelė pabaigoje) bus rodoma fotoaparato peržiūra.

#!/usr/bin/env python

importuoti laiką importuoti picamera iš laiko importavimo miego kameros = picamera. PiCamera () # Nustatykite norimą skiriamąją gebą camera.resolution = (1280, 1024) camera.framerate = 24 camera.start_preview () try: while (True): sleep (1), išskyrus (KeyboardInterrupt, SystemExit): print ("Exiting …") camera.stop_preview ()

Norėdami tai išbandyti, tiesiog vykdykite

python cameraPreview.py

Peržiūrėkite fotoaparatą su vaizdais viršuje

Kadangi norėjau, kad prieš fotografuojant būtų rodomas atgalinis laikas, man reikėjo vaizdų, sutampančių su fotoaparato peržiūra.

Sukurkite-p.webp" />

Šis kodas sutaps su 1-p.webp

importuoti picamerafrom iš PIL importuoti vaizdą iš laiko importavimo miego su picamera. „PiCamera“() kaip kamera: camera.resolution = (1920, 1080) camera.framerate = 24 camera.start_preview () # load image img = Image.open ('1-p.webp

Pabandyk tai:

python imageOverlay.py

Dabar sukurkime atgalinį skaičiavimą su perdangos vaizdais. Kaip ir sukūrėte 1-p.webp

Po to tiesiog naudokite šį kodą:

importuoti fotoaparatą

iš PIL importo vaizdo iš laiko importavimo miego su „picamera“. „PiCamera“() kaip kamera: camera.resolution = (1280, 1024) camera.framerate = 24 camera.start_preview () # load image img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.png') # create pad = Image.new ('RGB', (((img1.size [0] + 31) / / 32) * 32, ((img1.size [1] + 15) // 16) * 16,)) pad.paste (img1, (0, 0)) o = camera.add_overlay (pad.tobytes (), dydis = img1.size) o.alpha = 128 o.layer = 3 miego režimas (2) #remove previous overlay camera.remove_overlay (o) pad.paste (img2, (0, 0)) o = camera.add_overlay (pad. tobaitai (), dydis = img2.size) o.alpha = 128 o.layer = 3 miego režimas (2) # pašalinkite ankstesnę perdangos kamerą.remove_overlay (o) pad.paste (img3, (0, 0)) o = kamera. add_overlay (pad.tobytes (), size = img3.size) o.alpha = 128 o.layer = 3 miegas (2)

Dabar vykdykite:

python imageOverlayCounter.py

Ir žiūrėkite atgalinį skaičiavimą

Oho - daug kodo ir nepadaryta nuotrauka … Išspręskime tai derindami viską kartu - peržiūrėkite fotoaparatą, skaičiuokite atgal ir nufotografuokite

importuoti picamerafrom iš PIL importuoti vaizdą iš laiko importavimo miego def overlayCounter (): # load image img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.-p.webp

Pabandyk tai:

python pictureWithTimer.py

Ir čia mes turime Yoda

9 žingsnis: programavimas - „Big Dome“mygtukas

Programavimas - „Big Dome“mygtukas
Programavimas - „Big Dome“mygtukas
Programavimas - „Big Dome“mygtukas
Programavimas - „Big Dome“mygtukas

Didelis kupolo mygtukas yra didelis apvalus mygtukas - maždaug 100 mm skersmens su mažu šviesos diodu. Jis sako, kad veikia esant 12 V įtampai, tačiau 3,3 V „Raspberry PI“pakanka, kad jis užsidegtų

Bandymui naudokite schemą

Kodas:

iš RPi importo GPIO

takeButton = 17 ledButton = 27 GPIO.setmode (GPIO. BCM) GPIO.setup (takeButton, GPIO. IN, GPIO. PUD_UP) GPIO.setup (ledButton, GPIO. OUT) #Light LED GPIO.output (ledButton, True) # Blokavimo funkcija GPIO.wait_for_edge (takeButton, GPIO. FALLING) print („Mygtukas paspaustas“) GPIO.output (ledButton, False) GPIO.cleanup ()

Kai kurie kodo paaiškinimai Viena iš verčių gavimo iš GPIOS formų yra pertraukos (kita - apklausa) - krašto aptikimas.

Kraštas yra perėjimo iš HIGH į LOW (krintantis kraštas) arba LOW į HIGH (kylančio krašto) pavadinimas. Kai PIN kodas nėra prie nieko prijungtas, bet koks skaitymas bus neapibrėžtas. Sprendimas yra minėto PIN kodo įtraukimas į viršų/žemyn. „Raspberry PI“leidžia sukonfigūruoti traukimo aukštyn/žemyn rezistorius naudojant programinę įrangą.

Linija

GPIO.setup (takeButton, GPIO. IN, GPIO. PUD_UP)

sukonfigūruoja tą PIN kodą, kad tai padarytų - patraukite aukštyn

Kodėl traukti? Na, didysis kupolo mygtukas turi 2 PIN kodus - paspauskite, kad sulaužytumėte arba paspauskite, kad padarytumėte (kaip ir mažus mygtukus, kurie dažnai būna su „Arduino“/„Raspberry PI“rinkiniais). Prijungiau jį prie mygtuko „paspauskite, kad padarytumėte“. Paspaudus grandinė užsidaro ir praeina elektra (paprastai atidaryta).

Linija

GPIO.wait_for_edge (takeButton, GPIO. FALLING)

palauks (faktiškai sustabdydama scenarijaus vykdymą), kol aptiks krentantį PIN kodą - atleidus mygtuką, elektros srovė sumažės, o PIN kodas pasikeis nuo 3.3v iki 0v

Šviesos diodo PIN kodas skirtas tik mygtuko šviesos diodui uždegti

Daugiau informacijos apie stūmimo jungiklius rasite „Arduino Tutorials“, „Wikipedia“apie „push to make“arba „push to break“ir GPIO pertraukimus

Dabar sujungkime mygtuką su fotoaparatu - nufotografuokite tik paspaudę mygtuką

importuoti picameraf iš laiko importuoti miego režimą iš RPi importuoti GPIO iš PIL importo paveikslėlio # PASTABA: tai bus atšaukimo mygtukas pagrindinėje programoje.setmode (GPIO. BCM) GPIO.setup (takeButton, GPIO. IN, GPIO. PUD_UP) GPIO.setup (ledCancel, GPIO. OUT) def onLeds (): GPIO.output (ledCancel, True) miego režimas (1) def off : GPIO.output (ledCancel, False) Image.open ('1.png') # Sukurti perdangą # Naudojama su img1, nes visi yra vienodo dydžio bloknotai = Image.new ('RGB', (((img1.size [0] + 31) // 32) * 32, ((img1.size [1] + 15) // 16) * 16,)) # įklijuokite perdangą - 3 pad.paste (img1, (0, 0)) ov = camera.add_overlay (pad.tobytes (), dydis = img1.size) ov.alpha = 200 # sluoksnis yra 3, nes fotoaparato peržiūra yra 2 sluoksnyje ov.layer = 3 miego režimas (1) camera.remove_overlay (ov) # įklijuokite perdangą - 2 pad.paste (img2, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img2.size) ov.alpha = 200 # sluoksnis yra 3, nes fotoaparato peržiūra yra 2 sluoksnyje ov.layer = 3 miega (1) camera.remove_overlay (ov) # įklijuokite perdangą - 1 pad.paste (img3, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img3.size) ov.alpha = 200 # sluoksnis yra 3, nes fotoaparato peržiūra yra ant 2 sluoksnio ov. GPIO. FALLING) onLeds () overlayCounter () camera.capture ('pushTesting.jpg') camera.stop_preview () offLeds () GPIO.cleanup ()

Šiek tiek kodo paaiškinimo

Ji pradeda fotoaparato peržiūrą ir laukia, kol bus paspaustas mygtukas. Paspaudus mygtuką, užsidega šviesos diodas ir prasideda atgalinis skaičiavimas. Pasiekus pabaigą, fotografuojama ir šviesos diodas išjungiamas

10 veiksmas: paskelbkite „Twitter“

Paskelbkite „Twitter“
Paskelbkite „Twitter“
Paskelbkite „Twitter“
Paskelbkite „Twitter“
Paskelbkite „Twitter“
Paskelbkite „Twitter“

Dabar mes naudosime „Python“ir parašysime tviterį!:) Jums reikės atvaizdo paskelbti - rinkitės protingai.

Pirma, turime pasiekti „Twitter“API ir tam turime sukurti APP. Eikite į https://apps.twitter.com ir sukurkite naują programą.

Turėsite kreiptis dėl kūrėjo paskyros - užpildykite keletą klausimų ir patvirtinkite savo el. Pašto adresą. Po to galėsite sukurti naują APP.

Sukūrę APP, eikite į raktus ir žetonus ir sugeneruokite prieigos raktą ir prieigos rakto paslaptį. Bus rodomas langas su TIK RAKTAIS - KOPIJUOKITE IR IŠSAUGOKITE VĖLIAU.

Naudokite šį kodą, norėdami nusiųsti nuotrauką į savo „Twitter“paskyrą. Nepamirškite užpildyti:

  • vartotojas_raktas
  • vartotojų_slaptis
  • prieigos raktas
  • access_token_secret

„Twitter“pranešimas yra tekstas, kurį reikia išsiųsti „tweet“.

jpg_foto_to_send yra nuotrauka, kuri bus pridėta prie tviterio. Turėkite paveikslėlį tame pačiame kataloge kaip „Python“scenarijus ir pakeiskite kodo pavadinimą.

importuoti „tweepy“# „Twitter“nustatymai def get_api (cfg): auth = tweepy. OAuthHandler (cfg ['Consumer_key'], cfg ['Consumer_secret']) auth.set_access_token (cfg ['access_token'], cfg ['access_token_secret'] tweepy. API (auth) # Siųsti „Twitter“def sendToTwitter (): cfg = {"Consumer_key": "", "Consumer_secret": "", "access_token": "", "access_token_secret": "" "api = get_api (cfg) # Būsenos pranešimas tweet = "Twitter message" status = api.update_with_media ("jpg_foto_to_Send", tweet) sendToTwitter ()

Patikrinkite savo „Twitter“sklaidos kanalą, kad gautumėte „Twitter“.

Štai „Tweet“

Arba žemiau:

#RaspberryPI MagicBox. Fotografuokite, peržiūrėkite ir nusiųskite į „Twitter“ir „Facebook“. Pagaminta iš Raspberry PI. @@ Raspberry_Pi#RaspberryPI#RaspberryPIProjectpic.twitter.com/cCL33Zjb8p

- Bruno Ricardo Santos (@feiticeir0) 2020 m. Vasario 29 d

11 žingsnis: kai kurių elementų sujungimas

Kai kurių elementų derinimas
Kai kurių elementų derinimas
Kai kurių elementų derinimas
Kai kurių elementų derinimas

Dabar sujunkime „Big Dome Push“mygtuką, paspausdami jį, skaičiuodami atgal, nufotografuokite, nuspręskite, ar siųsti jį „Twitter“.

Mes pridėsime kitą perdangos vaizdą ir naudosime visus tris mygtukus. Kai fotografuojama, užsidegs visi 3 mygtukų šviesos diodai.

Pridedame dar vieną paveikslėlį, kuriame rodomos piktogramos, kurias galima paskelbti socialiniuose tinkluose

„SelectOption.png“rodo „Facebook“ir „Twitter“piktogramas

„Aenviar.png“yra tik pranešimas, kuriame siunčiama į socialinius tinklus.

Vaizdo įraše nerodomas mėlynas mygtukas (fotoaparato priekyje), tačiau šviečia šviesos diodas ir jis pradeda mirksėti vos jį paspaudus.

Kodas pridedamas, jei norite

Tai yra galutinis bandymo kodas prieš pagrindinę programą.

# kodavimas = utf-8 importuoti picamera importuoti _sriegio importavimo subprocesas kaip sp iš laiko importuoti miegą iš RPi importuoti GPIO iš PIL importo vaizdų sriegimo # „Twitter“importuoti „tweepy“# Atšaukti paveikslėlį CancelButton = 24 # Fotografavimo mygtukas LED takePicButtonLed = 27 # Paskelbti socialinio tinklo mygtuke LED postSNLed = 22 # Atšaukti mygtuko LED CancelButtonLed = 5 GPIO.setmode (GPIO. BCM) GPIO.setup (takeButton, GPIO. IN, GPIO). PUD_UP) GPIO.setup (socialNetworkButton, GPIO. IN, GPIO. PUD_UP) GPIO.setup (CancelButton, GPIO. IN, GPIO. PUD_UP) GPIO.setup (takePicButtonLed, GPIO. OUT) GPIO.setup (postSNLed, GPIO. OUT)] GPIO.setup (cancelButtonLed, GPIO. OUT) # „Twitter“nustatymai def get_api (cfg): auth = tweepy. OAuthHandler (cfg ['vartotojiškas raktas'], cfg ['vartotojos paslaptis']) auth.set_access_token (cfg ['access_token'], cfg ['access_token_secret']) return tweepy. API (auth) # Siųsti „Twitter“def sendToTwitter (): cfg = {"con sumer_key ":" "," Consumer_secret ":" "," access_token ":" "," access_token_secret ":" "} api = get_api (cfg) # Būsenos pranešimas tweet =" MagicBox nurodomas testavimas. #MagicBox #RaspberryPI #Aviečių #Instrukcijos "status = api.update_with_media (" pushTesting.jpg ", tweet) #Facebook AOth def get_api_facebook (cfg): graph = facebook. GraphAPI (cfg ['access_token']) #Gauti puslapį paskelbti kaip puslapį. Jei norite paskelbti kaip save, galite praleisti # eilutę.] == cfg ['page_id']: page_access_token = page ['access_token'] graph = facebook. GraphAPI (page_access_token) return graph # Siųsti į facebook def sendToFacebook (): #Values for access cfg = {"page_id": "", "access_token": ""} api = get_api_facebook (cfg) caption = "Caption the image" albumas = "" api.put_photo (vaizdas = atviras ("pushTesting.jpg", "rb"), caption = "Vaizdo antraštė ") # Tik šviesa TakePicButtonLed def onlyTakePicLed (): GPIO.output (takePicButtonLed, True) GPIO.output (postSNLed, False) GPIO.output (CancelButtonLed, False) # Tik šviesa Atšaukti ir SocialNetwork mygtukas def cancelPostLEDS (): GPI O. output (takePicButtonLed, False) GPIO.output (postSNLed, True) GPIO.output (CancelButtonLed, True) # Mirksėti fotografuoti LED, o atgal skaičiuoti def countingTimerPicture (): GPIO.output (takePicButtonLed, True) miego režimas (0,5) GPIO.output (takePicButtonLed, False) miego režimas (0.5) GPIO.output (takePicButtonLed, True) miego režimas (0.5) GPIO.output (takePicButtonLed,False) sleep (0.5) GPIO.output (takePicButtonLed, True) miegas (0.5) GPIO.output (takePicButtonLed, False) # Blink postSNLed skelbiant socialiniuose tinkluose def blinkPosting (stop_event): # Pradėti, kol (ne stop_event.is_set ()): spausdinti ("išjungta") GPIO.output (postSNLed, False) miego režimas (0,5) print ("įjungtas") GPIO.output (postSNLed, True) miego režimas (0,5) def timer (): GPIO.output (takePicButtonLed, True)) miego (1) GPIO.output (postSNLed, True) miego (1) GPIO.output (CancelButtonLed, True) miego (1) def showAllLeds (): GPIO.output (takePicButtonLed, True) GPIO.output (postSNLed, True) GPIO.putput (CancelButtonLed, True)) padding = Image.new ('RGB', (((img.size [0] + 31) // 32) * 32, ((img.size [1] + 15) // 16) * 16,)) padding.paste (img, (0, 0)) ov = camera.add_overlay (padding.tobytes (), size = img.size) ov.layer = 1 # Rodyti sluoksnio peržiūrą 3 def displayPreview3 (imgName): # Kadangi PIL vaizdų demonstravimas yra kvailas #, mes naudojame fotoaparato perdangą, kad būtų rodomas # peržiūra img = Image.open (imgName) padding = Image.new ('RGB', (((img.size [0] + 31) // 32) * 32, ((img.size [1] + 15) // 16) * 16,)) padding.paste (img, (0, 0)) ov = camera.add_overlay (padding.tobytes (), size = img.size) ov.alpha = 150 ov.layer = 3 return ov # Function overlaySocialNetwork def overlaysn (): imgsn = Image.open ('SelectOption.png') # Sukurti Perdangos bloknotas = Image.new ('RGB', (((imgsn.size [0] + 31) // 32) * 32, ((imgsn.size [1] + 15) // 16) * 16,)) # Įklijuokite perdangą pad.paste (imgsn, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = imgsn.size) ov.alpha = 100 ov.layer = 3 return ov # Funkcija persidengti image def overlayCounter (): #load images img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.png') # Sukurti perdangą # Naudojama su img1, nes visi yra vienodo dydžio bloknotai = Image.new ('RGB', (((img1.size [0] + 31) // 32) * 32, ((img1.size [1] + 15) // 16) * 16,)) # įklijuokite perdangą - 3 pad.paste (img1, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img1.size) ov.alpha = 200 # sluoksnis yra 3, nes fotoaparato peržiūra yra ant 2 sluoksnio ov.layer = 3 miego režimas (1) camera.remove_overlay (ov) # įklijuokite perdangą - 2 pad.paste (img2, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img2.size) ov.alpha = 200 # sluoksnis yra 3, nes fotoaparato peržiūra yra 2 sluoksnyje ov.layer = 3 miego režimas (1) camera.remove_overlay (ov) # paste perdanga - 1 pad.paste (img3, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img3.size) ov.alpha = 200 # sluoksnis yra 3, nes fotoaparato peržiūra yra 2 sluoksnyje ov.layer = 3 miego režimas (1) camera.remove_overlay (ov) # Pagrindinė funkcija # Išvalyti ekraną, kad nebūtų įkrovos pranešimų # tikriausiai geriau tai padaryti bash tmp = sp.call ('clear', apvalkalas = tiesa) kamera = picamera. PiCamera () camera.resolution = (1280, 1024) camera.framerate = 24 camera.brightness = 55 camera.sharpness = 0 camera.contrast = 0 #camera.exposure_co mpensation = 0 #camera.exposure_mode = 'auto' #camera.meter_mode = 'vidurkis' #Bandymas čia pabandykite: while (Tiesa): camera.start_preview () #Rodyti LED tik fotografuotiTakePicLed () #Palaukite, kol bus užfiksuotas Paveikslėlis GPIO.wait_for_edge (takeButton, GPIO. FALLING) # Pradėkite temą skaičiuoti su šviesos diodais, kol rodomi vaizdai # Tikriausiai galima naudoti „overlayCounter“funkcijoje, # nes ji taip pat turi laikmačius nuotraukoms rodyti, bet LED efektus # nebūtų tas pats. stop_preview () #display image displayPreview ('pushTesting.jpg') # Rodyti perdangą oo = overlaysn () # Rodyti atšaukiamus šviesos diodus arba paskelbti socialiniuose tinkluose CancelPostLEDS () GPIO.add_event_detect (socialNetworkButton, GPIO. FALLING) GPIO.add_event_dutton, GPIO. FALLING), o (tiesa): jei GPIO.event_detecte d (socialNetworkButton): camera.remove_overlay (oo) GPIO.output (cancelButtonLed, False) o = displayPreview3 ('Aenviar.png') #print "Socialinių tinklų mygtukas" sendToTwitter () sendToFacebook () camera.remove_overlay (o) break if GPIO.event_detected (cancelButton): #print "Atšaukta" camera.remove_overlay (oo) break # reset GPIOS GPIO.remove_event_detect (socialNetworkButton) GPIO.remove_event_detect (cancelButton) GPIO.remove_event_donceptor (takeButton) „Išėjo …“) #offLeds () GPIO.cleanup ()

12 žingsnis: laidų prijungimas

Image
Image
Laidai
Laidai
Laidai
Laidai

Laidai tik prijungia „Big Dome Push“mygtukus prie „Raspberry PI“.

Tiesiog sekite Fritzing schemą.

Ryšiai yra šie:

Ryšys RPI GPIO PIN GND žalias mygtukasGND (#3) GND geltonas mygtukasGND (#9) GND mėlynas mygtukasGND (#39) Fotografavimas (mėlynas mygtukas „Push to make“) 17 (BCM) Skelbimas socialiniuose tinkluose (žalias mygtukas Mygtukas „Paspauskite, kad padarytumėte“) 23 (BCM) Atšaukti (Geltonas mygtukas „Paspauskite, kad padarytumėte“) 24 (BCM) Mėlynas mygtukas LED27 (BCM) Žalias mygtukas LED22 (BCM) Geltonas mygtukas LED5 (BCM)

Šilumos susitraukimas taip pat pažymėtas spalvomis

  • Juoda yra GND jungtys
  • Geltonos spalvos yra „pastūmimo sukurti“jungtys
  • Mėlynos yra LED jungtys

GPIO. BCM numeriai prieš GPIO. BOARD ryšius

Kadangi mano ryšiai yra BCM, manau, kad dabar tinkamas laikas kalbėti apie tai ir skirtumą tarp BCM ir BOARD.

Pagrindinis skirtumas yra tai, kaip jūs nurodote GPIO PIN kodus, o tai savo ruožtu paskatins prisijungti. GPIO.board nurodys PIN kodus pagal numerį, atspausdintą ant bet kurio GPIO išdėstymo internete.

GPIO. BCM remiasi PIN numeriais, kaip juos mato „Broadcom SOC“. Tikėtina, kad tai pasikeis naujesnėse „Raspberry PI“versijose.

Pinout.xyz svetainėje lentos numeriai yra tie, kurie yra šalia kaiščių, o BCM nurodomi taip - BCM X (kur X yra skaičius)

13 žingsnis: „MagicBox“

Prie šio veiksmo pridėtas kodas yra galutinis.

Galite paleisti jį su aviečių PI įkrova, net nereikia prisijungti. Norėdami tai padaryti, tiesiog sukurkite šį mažą scenarijų kataloge, į kurį įdėjote kodą - atitinkamai pakeiskite kelius

#!/bin/bash

cd/home/pi/magicbox python MagicBox.py

Padarykite tai vykdomą

chmod +x start_magicbox.sh

Dabar paskambinkite /etc/rc.local, prieš pat išėjimą 0

sudo vi /etc/rc.local

/home/pi/magicbox/start_magicbox.sh &

išsaugoti ir mesti.

Dabar, kiekvieną kartą paleidus iš naujo, „Python“programa bus vykdoma

PASTABA: visi vaizdo failai turi būti tame pačiame kataloge kaip ir scenarijus. Jums reikia turėti:

  • 1.png
  • 2.png
  • 3.png
  • Aenviar.png
  • PasirinkiteOption.png

Visus šiuos failus galite gauti „MagicBox“„github“.

Rekomenduojamas: