Kazalo:

Fotoaparat RaspberryPI - MagicBox: 13 korakov (s slikami)
Fotoaparat RaspberryPI - MagicBox: 13 korakov (s slikami)

Video: Fotoaparat RaspberryPI - MagicBox: 13 korakov (s slikami)

Video: Fotoaparat RaspberryPI - MagicBox: 13 korakov (s slikami)
Video: Камера высокого разрешения и объективы для Raspberry Pi. Железки Амперки 2024, Julij
Anonim
Image
Image
Zgradite
Zgradite

Pred časom se mi je porodila ta nora ideja, da bi iz Raspberry PI ustvaril fotografski stroj. V mojem mestu je bila manjša predstava, kjer so ljudje hodili pokazat, kaj delajo ali so naredili z uporabo elektronike, računalnikov itd.

Eden je prišel gor in skupaj z ženo to stvar zgradimo.

Kako deluje ?

Pritisnite modri gumb - začne utripati - in po 3 sekundah se posname slika. Na drugi strani kamere je monitor, ki prikazuje odštevanje, po fotografiranju pa predogled fotografije.

Zdaj se lahko odločite, da ga pošljete na Twitter in Facebook ali prekličete in poskusite znova. Tako preprosto je.

Vse je programirano v Pythonu z uporabo PI framebuffer - No Xorg, ne uporablja se grafični vmesnik.

Tukaj je video o delu projekta

Zaloge

  • Raspberry PI (uporabljam različico 2)
  • Raspberry PI kamera (uporaba različice 1)
  • 3 -kratni gumbi z veliko kupolo
  • TFT/LCD monitor z VGA/HDMI
  • MDF
  • Kovinski tečaji, vijaki itd.
  • Električna orodja
  • Prosti čas in veliko zabave

1. korak: Zgradite

Zgradite
Zgradite
Zgradite
Zgradite

Zgraditi ga je bilo zabavno. Veliko rezanja, barvanja in vrtanja.

Za izdelavo osnovne strukture kamere sem uporabil plošče MDF. So lahki in z njimi je enostavno delati. Prav tako je bila ena vrsta lesa, ki jo je lahko razrezal laserski stroj v lokalnem Fablabu.

Dostop do ožičenja v notranjosti je potekal s strani monitorja s pomočjo hidravličnih tečajev, da bi lahko pomagali pri dvigu monitorja.

2. korak: Kamera

Kamera
Kamera
Kamera
Kamera
Kamera
Kamera

Kamera

Kamera je škatla z naslednjimi dimenzijami: 60 cm x 40 cm x 30 cm Vaša je lahko manjša, večja, odvisno je od vas. Samo monitor morate namestiti. MDF plošče so bile lasersko rezane v lokalnem Fablabu. Na hrbtni strani potrebujete 3 luknje - dva velika kupolasta gumba in enega za monitor. Spredaj 2 luknji - ena za velik kupolasti gumb in druga - manjša - za kamero Raspberry PI. Nimam posebnih mer - samo zamislite si kamero in jo uporabite.

3. korak: Monitor

Monitor
Monitor
Monitor
Monitor
Monitor
Monitor

Monitor

Nosilec monitorja je bil izdelan z dodajanjem majhnih kosov lesa, ki so ga podpirali v njegovih dimenzijah.

Odstranjen je bil iz plastičnega ohišja in pritrjen z vijaki. Za lažji dvig sta bila uporabljena dva (rabljena) hidravlična tečaja.

4. korak: Okrasitev

Dekoriranje
Dekoriranje
Dekoriranje
Dekoriranje
Dekoriranje
Dekoriranje
Dekoriranje
Dekoriranje

Ker mi je stil Fuji X-T30 zelo všeč, smo šli in naredili nekaj podobnega.

Najprej smo ga pokrili s peno, nato pa smo ga pobarvali s črno. Po barvanju smo srebrnim delom dodali aluminijasto folijo in jo zavili

Za simulacijo objektiva smo uporabili okrogel Tupperware, kjer smo naredili majhno luknjo, na kateri je modul kamere Raspberry PI sedel.

5. korak: Programiranje

Programiranje kamere je bilo izziv, a zelo zabavno.

Grafičnega vmesnika ni - to deluje v CLI in deluje v Pythonu različice 3.

Najprej sem začel s preskušanjem in programiranjem gumbov, nato sem fotografiral z že navedenimi orodji in API -jem Python. Nato sem prešel na prekrivanje slik v izhodu kamere (za odštevanje) in nato v interakcijo s Twitterjem in Facebookom.

Ko mi je bilo vse skupaj prijetno, sem kot sestavljanko sestavil vse kose skupaj. Tukaj gremo po istem postopku. Začnite počasi in majhno ter pojdite na hitro in veliko.

Najprej začnimo s konfiguracijo Raspberry PI

Korak 6: Priprava Raspberry PI

Priprava maline PI
Priprava maline PI
Priprava maline PI
Priprava maline PI
Priprava maline PI
Priprava maline PI

Ne bom razlagal, kako namestiti Raspbian na Raspberry PI - tam je veliko vadnic, tudi na uradni spletni strani Raspberry PI.

Do njega morate imeti dostop SSH ali pa ga priključiti na monitor ter priključiti tipkovnico in miško.

OPOMBA: Ko začnete s kamero Raspberry PI, jo morate priključiti na monitor. Do takrat lahko vse korake izvedete s pomočjo SSH.

Po zagonu v vašem Raspberry PI moramo omogočiti kamero Raspberry PI. Za to uporabimo orodje raspi-config.

sudo raspi-config

  1. Izberite možnost 5 - Možnosti vmesnika
  2. Izberite P1 - Omogoči/onemogoči povezavo s kamero Raspberry PI
  3. Reči da
  4. za OK
  5. Izberite Dokončaj
  6. Izberite Da za ponovni zagon zdaj

Po ponovnem zagonu lahko nadaljujemo

7. korak: Programska oprema

Za namestitev bomo potrebovali nekaj knjižnic Python. To je bilo posodobljeno za najnovejšo različico Raspbian - Buster

Najprej nastavimo Python 3 kot privzetega. Sledite tej povezavi, če želite izvedeti, kako nastaviti SISTEM WIDE

Knjižnice:

  • python-pil.imagetk za upravljanje slik
  • python-rpi.gpio za dostop do kode GPIO PINS
  • python-picamera za dostop do Raspberry PI kamere
  • Tweepy za deljenje fotografije na Twitterju
  • facebook-sdk za skupno rabo na facebook strani

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

Za namestitev facebook-sdk uporabite Python pip

sudo pip3 namestite facebook-sdk

8. korak: Programiranje - Predogled kamere

Image
Image
Programiranje - Predogled kamere
Programiranje - Predogled kamere
Programiranje - Predogled kamere
Programiranje - Predogled kamere

Ena od zahtev, ki sem jih postavil temu projektu, je bila, da naj bi se ta program izvajal v načinu CLI. Zato moramo prikazati sliko kamere na konzoli. Za to uporabimo Python Picamera. Nato uporabimo pil.imagetk za prikaz prekrivanja na vrhu predogleda kamere

Naš mali program (razvili bomo majhne programe do enega velikega na koncu) bo prikazal predogled kamere.

#!/usr/bin/env python

čas uvoza uvoz pikamere iz časa uvoz spanja camera = picamera. PiCamera () # Nastavite želeno ločljivost camera.resolution = (1280, 1024) camera.framerate = 24 camera.start_preview () try: while (True): sleep (1) razen (KeyboardInterrupt, SystemExit): print ("Exiting…") camera.stop_preview ()

Če želite poskusiti, ga samo izvedite

python cameraPreview.py

Predogled fotoaparata s slikami na vrhu

Ker sem želel, da se pred fotografiranjem prikaže odštevanje, sem potreboval slike, ki prekrivajo predogled kamere.

Ustvarite sliko-p.webp" />

Naslednja koda se bo 1-p.webp

uvozi slikovno kamero iz PIL -a uvoz slike iz časa uvoza spanja s pikamero. PiCamera () kot kamero: camera.resolution = (1920, 1080) camera.framerate = 24 camera.start_preview () # naložite sliko img = Image.open ('1.png ') # create pad = Image.new (' RGB ', (((img.size [0] + 31) // 32) * 32, ((img.size [1] + 15) // 16) * 16,)) pad.paste (img, (0, 0)) o = camera.add_overlay (pad.tobytes (), size = img.size) o.alpha = 128 o.layer = 3 medtem ko je True: sleep (1)

Poskusi:

python imageOverlay.py

Ustvarimo odštevanje s prekrivnimi slikami. Kot ste ustvarili sliko 1.png, ustvarite še dve sliki z 2 in 3 v njih.

Po tem uporabite samo naslednjo kodo:

uvozna pikamera

iz PIL uvoza Slike iz časa uvoza spanja s pikamero. PiCamera () kot kamero: camera.resolution = (1280, 1024) camera.framerate = 24 camera.start_preview () # naložite sliko 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 (), size = img1.size) o.alpha = 128 o.layer = 3 sleep (2) #odstranite prejšnjo prekrivno kamero.remove_overlay (o) pad.paste (img2, (0, 0)) o = camera.add_overlay (blazinica. tobytes (), size = img2.size) o.alpha = 128 o.layer = 3 sleep (2) # odstranite prejšnjo prekrivno kamero.remove_overlay (o) pad.paste (img3, (0, 0)) o = camera. add_overlay (pad.tobytes (), size = img3.size) o.alpha = 128 o.layer = 3 spanje (2)

Zdaj ga izvedite:

python imageOverlayCounter.py

In poglejte odštevanje

Wow - Nekaj veliko kode in nobene slike … Rešimo to tako, da združimo vse skupaj - predogled kamere, odštevanje in slikanje

import picamerafrom PIL import Image from time import sleep def overlayCounter (): # 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,)) # prilepi prekrivanje - 3 pad.paste (img1, (0, 0)) o = camera.add_overlay (pad.tobytes (), size = img1.size) o.alpha = 128 o.layer = 3 sleep (1) # Odstrani prejšnjo prekrivno kamero.remove_overlay (o) # prilepi prekrivanje - 2 pad.paste (img2, (0, 0)) o = camera.add_overlay (pad.tobytes (), velikost = img2.size) o.alpha = 128 o.layer = 3 sleep (1) #odstranite prejšnjo prekrivno kamero.remove_overlay (o) # prilepite prekrivanje - 3 pad.paste (img3, (0, 0)) o = camera.add_overlay (pad). tobytes (), size = img3.size) o.alpha = 128 o.layer = 3 sleep (1) camera.remove_overlay (o) camera = picamera. PiCamera () camera.resolution = (1280, 1024) camera.framerate = 24 camera.start_preview () overlayCounter () camera.capture ('testingCounter.jpg') camera.stop_preview ()

Poskusi:

python pictureWithTimer.py

In tu imamo Yodo

9. korak: Programiranje - gumb z veliko kupolo

Programiranje - gumb z veliko kupolo
Programiranje - gumb z veliko kupolo
Programiranje - gumb z veliko kupolo
Programiranje - gumb z veliko kupolo

Gumb za veliko kupolo je velik okrogel gumb - s premerom okoli 100 mm z majhno LED. Piše, da deluje pri 12V, vendar je 3.3V Raspberry PI dovolj, da ga prižge

Za preskus uporabite shemo

Koda:

iz RPi uvoz 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) # Blokiranje funkcije GPIO.wait_for_edge (takeButton, GPIO. FALLING) print ("Button Presssed") GPIO.output (ledButton, False) GPIO.cleanup ()

Nekaj razlage kode Ena od oblik pridobivanja vrednosti iz GPIOS je prek prekinitev (druga je polling) - zaznavanje roba.

Rob je ime prehoda od VISOKEGA do NIZKEGA (padajoči rob) ali NIZKEGA do VISOKEGA (naraščajoči rob). Ko PIN ni povezan z nobenim, bo vsako branje nedefinirano. Rešitev je, če imate v omenjeni kodi PIN upor navzgor/navzdol. Raspberry PI omogoča konfiguriranje uporov navzgor/navzdol s programsko opremo.

Linija

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

konfigurira PIN za to - povlecite navzgor

Zakaj vleči? No, velika kupolasta tipka ima 2 PIN -a - push to break ali push to make (tako kot majhni gumbi, ki so pogosto priloženi kompletom Arduino/Raspberry PI). Priključil sem ga na PIN tipko "push to make". Ko pritisnete, se vezje zapre in elektrika preide (običajno odprta).

Linija

GPIO.wait_for_edge (takeButton, GPIO. FALLING)

bo počakal (učinkovito prekinil izvajanje skripta), dokler ne zazna padca PIN -a - sprostitev gumba bo zmanjšala pretok električne energije in PIN bo prešel s 3,3 V na 0 V

LED PIN je samo, da zasveti LED na gumbu

Več informacij o potisnih stikalih iz Vadnic Arduino, Wikipedije o potisni napravi ali pritisni za prekinitev in prekinitvah GPIO

Zdaj pa združimo potisni gumb s kamero - Fotografirajte samo, ko pritisnete gumb

uvoz pikamera iz časa uvoz spanja iz RPi uvoz GPIO iz PIL uvoza Slika # OPOMBA: To bo gumb za preklic v glavnem programu # Uporabljam ga samo zaradi jasnosti v videu takeButton = 24 ledCancel = 5 GPIO.setmode (GPIO. BCM) GPIO.setup (takeButton, GPIO. IN, GPIO. PUD_UP) GPIO.setup (ledCancel, GPIO. OUT) def onLeds (): GPIO.output (ledCancel, True) spanje (1) def offLeds (): GPIO.output (ledCancel, False) # Funkcija za prekrivanje slike def overlayCounter (): # load images img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.png') # Ustvari prekrivanje # Uporablja se z img1, ker so vsi enake velikosti pad = Image.new ('RGB', (((img1.size [0] + 31) // 32) * 32, ((img1.size [1] + 15) // 16) * 16,)) # prilepite prekrivanje - 3 pad.paste (img1, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img1.size) ov.alpha = 200 # plast je 3, ker je predogled kamere na 2. sloju ov.layer = 3 sleep (1) camera.remove_overlay (ov) # prilepi prekrivanje - 2 pad.paste (img2, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img2.size) ov.alpha = 200 # plast je 3, ker je predogled kamere na plast 2 ov.layer = 3 sleep (1) camera.remove_overlay (ov) # prilepi prekrivanje - 1 pad.paste (img3, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img3.size) ov.alpha = 200 # plast je 3, ker je predogled kamere na plast 2 ov.layer = 3 sleep (1) camera.remove_overlay (ov) camera = picamera. PiCamera () camera.resolution = (1280, 1024) camera.framerate = 24 camera.start_preview () GPIO.wait_for_edge (takeButton, GPIO. FALLING) onLeds () overlayCounter () camera.capture ('pushTesting.jpg') camera.stop_preview () offLeds () GPIO.cleanup ()

Nekaj razlage kode

Zažene predogled kamere in tam počaka, dokler ne pritisnete gumba. Ko pritisnete gumb, zasveti LED in začne se odštevanje. Ko pridemo do konca, se slika posname in LED ugasne

10. korak: objavite na Twitterju

Objavi na Twitterju
Objavi na Twitterju
Objavi na Twitterju
Objavi na Twitterju
Objavi na Twitterju
Objavi na Twitterju

Zdaj bomo uporabili Python in tvitali tvit!:) Za objavo boste potrebovali sliko - izberite pametno.

Najprej moramo dostopati do twitter API -ja in za to moramo ustvariti APP. Pojdite na https://apps.twitter.com in ustvarite novo aplikacijo.

Prijaviti se boste morali za račun razvijalca - izpolnite nekaj vprašanj in potrdite svoj e -poštni naslov. Po tem boste lahko ustvarili nov APP.

Ko ustvarite APP, se pomaknite do ključev in žetonov ter ustvarite žeton dostopa in skrivnost žetona dostopa. Odprlo se bo okno s tipkami SAMO ENKRAT - KOpirajte jih in jih shranite pozneje.

Z naslednjo kodo pošljite sliko na svoj račun na Twitterju. Ne pozabite izpolniti:

  • ključ_potrošnika
  • Consumer_secret
  • dostopni žeton
  • access_token_secret

Twitter sporočilo je besedilo, ki ga pošljete v tvit.

jpg_foto_to_send je slika, ki bo priložena tweetu. Prosimo, da v istem imeniku kot skript Python vnesete sliko in spremenite ime v kodi.

uvoz tweepy # nastavitev za Twitter def get_api (cfg): auth = tweepy. OAuthHandler (cfg ['customer_key'], cfg ['Consumer_secret']) auth.set_access_token (cfg ['access_token'], cfg ['access_token_secret]) tweepy. API (auth) # Pošlji na twitter def sendToTwitter (): cfg = {"customer_key": "", "customer_secret": "", "access_token": "", "access_token_secret": ""} api = get_api (cfg) # Sporočilo o stanju tweet = "Sporočilo v Twitterju" status = api.update_with_media ("jpg_foto_to_Send", tweet) sendToTwitter ()

Za svoj tvit preverite v svojem viru Twitter.

Tukaj je Tweet

Ali spodaj:

#RaspberryPI MagicBox. Fotografirajte, pregledajte in se odločite, da jih pošljete na Twitter in Facebook. Poganja ga Raspberry PI. @@ Raspberry_Pi#RaspberryPI#RaspberryPIProjectpic.twitter.com/cCL33Zjb8p

- Bruno Ricardo Santos (@feiticeir0) 29. februar 2020

11. korak: Združevanje nekaterih elementov

Kombinacija nekaterih elementov
Kombinacija nekaterih elementov
Kombinacija nekaterih elementov
Kombinacija nekaterih elementov

Zdaj združimo gumb Big Dome Push, ga pritisnemo, odštevamo, posnamemo fotografijo in se odločimo, ali jo bomo poslali na Twitter.

Dodali bomo še eno prekrivno sliko in uporabili vse tri gumbe. Ko je slika posneta, zasvetijo vse LED lučke s tremi gumbi.

Dodamo še eno sliko, ki prikazuje ikone za objavo v družabnih omrežjih

SelectOption-p.webp

Aenviar-p.webp

V videoposnetku ni prikazan modri gumb (sprednja stran kamere), LED pa sveti in začne utripati takoj, ko ga pritisnete.

Koda je priložena, če želite

To je zadnja preskusna koda pred glavnim programom.

# coding = utf-8 import picamera import _thread import subprocess as sp from time import sleep from from RPi import GPIO from PIL import Import image threading # Twitter import tweepy # Facebook uvoz facebook # Gumb za fotografiranje takeButton = 17 # SocialNetwork Button socialNetworkButton = 23 # Prekliči Picture cancelButton = 24 # Gumb za fotografiranje LED LED takePicButtonLed = 27 # Objavi na gumbu za družabno omrežje LED objavaSNLed = 22 # Gumb za preklic 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 nastavitve def get_api (cfg): auth = tweepy. OAuthHandler (cfg ['customer_key'], cfg ['customer_secret']) auth.set_access_token (cfg ['access_token']), cfg ['access_token_secret']) return tweepy. API (auth) # Pošlji na twitter def sendToTwitter (): cfg = {"con sumer_key ":" "," customer_secret ":" "," access_token ":" "," access_token_secret ":" "} api = get_api (cfg) # Sporočilo o stanju tweet =" MagicBox testiranje po navodilih. #MagicBox #RaspberryPI #Raspberry #Instructables "status = api.update_with_media (" pushTesting.jpg ", tweet) #Facebook AOth def get_api_facebook (cfg): graph = facebook. GraphAPI (cfg ['access_token']) # objavi kot stran. Če želite objaviti kot sami, lahko preskočite # naslednje. resp = graph.get_object ('jaz/računi') page_access_token = Ni za stran v resp ['data']: if page ['id'] == cfg ['page_id']: page_access_token = page ['access_token'] graph = facebook. GraphAPI (page_access_token) vrni graf # Pošlji na facebook def sendToFacebook (): #Vrednosti za dostop cfg = {"page_id": "", "access_token": ""} api = get_api_facebook (cfg) caption = "Napis slike" albumid = "" api.put_photo (image = open ("pushTesting.jpg", "rb"), caption = "Napis slike ") # Samo za svetlobo TakePicButtonLed def onlyTakePicLed (): GPIO.output (takePicButtonLed, True) GPIO.output (postSNLed, False) GPIO.output (cancelButtonLed, False) # Light only Cancel in gumb SocialNetwork def prekliči PostLEDS (): GPI O.output (takePicButtonLed, False) GPIO.output (postSNLed, True) GPIO.output (cancelButtonLed, True) # Utripa LED za fotografiranje med odštevanjem def countingTimerPicture (): GPIO.output (takePicButtonLed, True) spanje (0,5) GPIO.output (takePicButtonLed, False) spanje (0.5) GPIO.output (takePicButtonLed, True) spanje (0.5) GPIO.output (takePicButtonLed,False) (0,5) GPIO.output (takePicButtonLed, True) sleep (0,5) GPIO.output (takePicButtonLed, False) # Blink postSNLed med objavo v družabnih omrežjih def blinkPosting (stop_event): # Start while (not stop_event.is_set ()): print ("off") GPIO.output (postSNLed, False) sleep (0.5) print ("on") GPIO.output (postSNLed, True) sleep (0.5) def timer (): GPIO.output (takePicButtonLed, True) sleep (1) GPIO.output (postSNLed, True) sleep (1) GPIO.output (cancelButtonLed, True) sleep (1) def showAllLeds (): GPIO.output (takePicButtonLed, True) GPIO.output (postSNLed, True) GPIO.output (cancelButtonLed, True) # Prikaz predogleda na sloju 1 def displayPreview (imgName): # Ker je prikaz slik PIL sranje # uporabljamo prekrivanje s kamere za prikaz # predogleda 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.layer = 1 # Prikaz predogleda na plasti 3 def displayPreview3 (imgName): # Ker je prikaz slik PIL sranje # uporabljamo prekrivanje s kamere za prikaz # predogleda 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 # Funkcija overlaySocialNetwork def overlaysn (): imgsn = Image.open ('SelectOption.png') # Ustvari Prekrivna ploščica = Image.new ('RGB', ((((imgsn.size [0] + 31) // 32) * 32, ((imgsn.size [1] + 15) // 16) * 16,)) # Prilepite prekrivni element pad.paste (imgsn, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = imgsn.size) ov.alpha = 100 ov.layer = 3 return ov # Funkcija za prekrivanje image def overlayCounter (): #load images img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.png') # Ustvari prekrivanje # Uporablja se z img1, ker so vsi enake velikosti pad = Image.new ('RGB', ((((img1.size [0] + 31) // 32) * 32, ((img1.size [1] + 15) // 16) * 16,)) # prilepite prekrivanje - 3 pad.paste (img1, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img1.size) ov.alpha = 200 # plast je 3, ker je predogled kamere na drugem sloju ov.layer = 3 sleep (1) camera.remove_overlay (ov) # prilepite prekrivanje - 2 pad.paste (img2, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img2.size) ov.alpha = 200 # plast je 3, ker je predogled kamere na drugi plasti ov.layer = 3 sleep (1) camera.remove_overlay (ov) # paste prekrivanje - 1 pad.paste (img3, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img3.size) ov.alpha = 200 # plast je 3, ker je predogled kamere na drugi plasti ov.layer = 3 sleep (1) camera.remove_overlay (ov) # Glavna funkcija # Počisti zaslon, tako da zagonskih sporočil ni, # verjetno bi bilo bolje, če to storite v bash tmp = sp.call ('clear', shell = True) camera = 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 = 'average' #Testiranje tukaj poskusite: while (True): camera.start_preview () #Prikaži LED samo za fotografiranjeTakePicLed () #Počakajte, da gumb za snemanje Slika GPIO.wait_for_edge (takeButton, GPIO. FALLING) # Začnite nit za štetje z LED diodami, medtem ko so slike prikazane # Verjetno bi lahko uporabili v funkciji overlayCounter, # ker ima tudi časovnike za prikaz slik, vendar učinke LED ne bi bilo # enako _thread.start_new_thread (countingTimerPicture, ()) # Prikaži prekrivanje slik v prekrivanju slik fotoaparataCounter () # Prikaz vseh LED med fotografiranjem showAllLeds () camera.capture ('pushTesting.jpg') camera. stop_preview () #display image displayPreview ('pushTesting.jpg') # Show overlay oo = overlaysn () # Prikaži LED za preklic ali objavo v družabnih omrežjih cancelPostLEDS () GPIO.add_event_detect (socialNetworkButton, GPIO. FALLING) GPIO.add_event, GPIO. FALLING) medtem ko (True): če je GPIO.event_detecte d (socialNetworkButton): camera.remove_overlay (oo) GPIO.output (cancelButtonLed, False) o = displayPreview3 ('Aenviar.png') #print "Gumb za družabna omrežja" sendToTwitter () sendToFacebook () camera.remove_overlay (o) break if GPIO.event_detected (cancelButton): #print "Canceled" camera.remove_overlay (oo) break # reset GPIOS GPIO.remove_event_detect (socialNetworkButton) GPIO.remove_event_detect (cancelButton) GPIO.remove_event_detect (printBusk) "Izstopilo …") #offLeds () GPIO.cleanup ()

12. korak: Ožičenje

Image
Image
Ožičenje
Ožičenje
Ožičenje
Ožičenje

Ožičenje samo povezuje gumbe Big Dome Push na Raspberry PI.

Samo sledite shemi Fritzing.

Povezave so:

Povezava RPI GPIO PIN GND Zeleni potisni gumbGND (#3) GND Rumeni potisni gumbGND (#9) GND Modri potisni gumbGND (#39) Posnemite sliko (modri gumb "Push to make") 17 (BCM) Objavi v družabnih omrežjih (Green Push) Gumb "Push to make") 23 (BCM) Prekliči (rumeni gumb "Push to make") 24 (BCM) Modri gumb LED27 (BCM) Zeleni gumb LED22 (BCM) Rumeni gumb LED5 (BCM)

Termoskrčljiv je tudi barvno kodiran

  • Črna je povezava GND
  • Rumene so povezave "push to make"
  • Modri so LED priključki

Številke GPIO. BCM v primerjavi s povezavami GPIO. BOARD

Ker so moje povezave BCM, mislim, da je zdaj pravi čas, da se pogovorim o tem in o razliki med BCM in BOARD.

Glavna razlika je v tem, kako se nanašate na kode GPIO, ki bodo vplivale na to, kako vzpostavljate povezave. GPIO.board bo kode PIN označil s številko, natisnjeno na kateri koli postavitvi GPIO v internetu.

GPIO. BCM se sklicuje na številke PIN, kot jih vidi Broadcom SOC. To se bo verjetno spremenilo pri novejših različicah Raspberry PI.

Na spletnem mestu pinout.xyz so številke plošč tik ob zatičih in BCM se tako imenuje - BCM X (kjer je X številka)

13. korak: MagicBox

Koda, priložena temu koraku, je zadnja.

Zaženete ga lahko ob zagonu maline PI, ne da bi se morali prijaviti. Če želite to narediti, preprosto ustvarite ta majhen skript v imeniku, v katerega ste postavili kodo, in ustrezno spremenite poti

#!/bin/bash

cd/home/pi/magicbox python MagicBox.py

Naj bo izvedljiv

chmod +x start_magicbox.sh

Zdaj ga pokličite v /etc/rc.local, tik pred vhodom 0 izhoda

sudo vi /etc/rc.local

/home/pi/magicbox/start_magicbox.sh &

shranite in zapustite.

Zdaj se bo pri vsakem ponovnem zagonu izvajal program Python

OPOMBA: Vse slikovne datoteke morajo biti v istem imeniku kot skript. Imeti morate:

  • 1.png
  • 2.png
  • 3.png
  • Aenviar.png
  • IzberiteOption.png

Vse te datoteke lahko dobite na MagicBox -ovem githubu.

Priporočena: