Përmbajtje:

Kamera fotografike RaspberryPI - MagicBox: 13 hapa (me fotografi)
Kamera fotografike RaspberryPI - MagicBox: 13 hapa (me fotografi)
Anonim
Image
Image
Ndërto
Ndërto

Pak kohë më parë, pata këtë ide të çmendur për të krijuar një makinë fotografike nga një PI Raspberry. Në qytetin tim, kishte një shfaqje të vogël ku njerëzit shkonin dhe tregonin atë që po bënin ose kishin bërë duke përdorur elektronikë, kompjuterë, etj … Unë isha si Maker Faire i një të varfri, por në një fushë lokale.

Njëra po afrohej dhe, së bashku me gruan time, ne e ndërtuam këtë gjë.

Si punon ?

Shtypni butonin blu - fillon të ndizet - dhe pas 3 sekondash bëhet një fotografi. Në anën tjetër të kamerës ka një monitor që tregon një numërim mbrapsht dhe pasi të merret fotografia, parapamja e fotografisë.

Tani mund të zgjidhni ta dërgoni në Twitter dhe Facebook ose ta anuloni dhe provoni përsëri. Thatshtë kaq e thjeshtë.

Çdo gjë është programuar në Python, duke përdorur PI framebuffer - Asnjë Xorg, asnjë GUI nuk përdoren.

Këtu keni një video të projektit duke punuar

Furnizimet

  • Raspberry PI (Unë jam duke përdorur versionin 2)
  • Kamera Raspberry PI (Duke përdorur versionin 1)
  • 3x Butonat e Shtypjes së Big Dome
  • Monitor TFT/LCD me VGA/HDMI
  • MDF
  • Varet metalike, vida, etj.
  • Mjetet e energjisë
  • Koha e lirë dhe shumë argëtim

Hapi 1: Ndërtoni

Ndërto
Ndërto
Ndërto
Ndërto

Ndërtimi i tij ishte argëtues. Shumë prerje, lyerje dhe shpime.

Kam përdorur panele MDF për ndërtimin e strukturës bazë të kamerës. Ato janë të lehta dhe të lehta për tu punuar me to. Gjithashtu, ishte një lloj druri që makina Laser në Fablab lokale ishte në gjendje të priste.

Qasja në instalimet elektrike brenda u bë nga ana e monitorit, duke përdorur varen hidraulike, në mënyrë që të mund të ndihmojnë në ngritjen e monitorit.

Hapi 2: Kamera

Kamera
Kamera
Kamera
Kamera
Kamera
Kamera

Kamera

Kamera është një kuti me dimensionet e mëposhtme: 60cm x 40cm x 30cm E juaja mund të jetë më e vogël, më e madhe, varet nga ju. Thjesht duhet të përshtateni për monitorin që do të përdorni. Panelet MDF u prenë me lazer në Fablab lokale. Ka nevojë për 3 vrima në pjesën e pasme - dy butona të mëdhenj të kupolës dhe një për monitorin. Në pjesën e përparme, 2 vrima - një për një buton të madh të kupolës dhe një tjetër - më të vogla - për kamerën Raspberry PI. Unë nuk kam matje specifike - thjesht imagjinoni një aparat fotografik dhe përdorni atë.

Hapi 3: Monitoroni

Monitor
Monitor
Monitor
Monitor
Monitor
Monitor

Monitor

Mbështetja e monitorit është bërë duke shtuar copa të vogla druri për ta mbështetur atë brenda dimensioneve të saj.

Ishte një shirit nga strehimi plastik dhe i siguruar në vend me vida. Për të ndihmuar në ngritjen e tij, u përdorën dy varen hidraulike (të përdorura).

Hapi 4: Dekorimi

Zbukurim
Zbukurim
Zbukurim
Zbukurim
Zbukurim
Zbukurim
Zbukurim
Zbukurim

Meqenëse më pëlqen shumë stili i Fuji X-T30, shkuam dhe bëmë diçka të ngjashme.

Së pari, e mbuluam me shkumë dhe më pas e lyejmë me llak me ngjyrë të zezë. Pas bojës, shtuam fletë alumini për pjesët e argjendit dhe e mbështjellim

Për të simuluar lentet, ne thjesht përdorëm një Tupperware të rrumbullakët, nëse kishim bërë një vrimë të vogël për të ulur modulin e kamerës Raspberry PI.

Hapi 5: Programimi

Programimi i Kamerës ishte një sfidë, por ishte super argëtuese.

Nuk ka GUI - kjo funksionon në CLI dhe funksionon në versionin 3 të Python.

Fillova së pari duke testuar dhe programuar butonat, më pas ishte marrja e fotografive duke përdorur mjetet e ofruara tashmë dhe API Python. Pastaj kalova në mbivendosjen e fotografive në daljen e kamerës (për numërimin mbrapsht) dhe më pas për të bashkëvepruar me Twitter dhe Facebook.

Pasi u ndjeva mirë me gjithçka, si një enigmë, i mblodha të gjitha pjesët së bashku. Këtu, ne po shkojmë me të njëjtin proces. Filloni ngadalë dhe të vogël dhe shkoni në të shpejtë dhe të mëdhenj.

Së pari, le të fillojmë me konfigurimin e Raspberry PI

Hapi 6: Përgatitja e PI -së së Mjedrës

Përgatitja e PI e mjedrës
Përgatitja e PI e mjedrës
Përgatitja e PI e Mjedrës
Përgatitja e PI e Mjedrës
Përgatitja e PI e mjedrës
Përgatitja e PI e mjedrës

Unë nuk do të shpjegoj se si ta instaloj Raspbian në Raspberry PI - ka shumë mësime atje, madje edhe në faqen zyrtare të Raspberry PI.

Thjesht duhet të kesh qasje SSH në të, ose ta lidhësh me një monitor dhe të lidhësh një tastierë dhe miun.

SH NOTNIM: Kur filloni me kamerën Raspberry PI, duhet ta keni të kyçur në një monitor. Deri atje, të gjithë hapat mund të bëhen duke përdorur SSH.

Pas nisjes në Raspberry PI tuaj, ne duhet të aktivizojmë kamerën Raspberry PI. Le të përdorim mjetin raspi-config për këtë.

sudo raspi-config

  1. Zgjidhni opsionin 5 - Opsionet e ndërlidhjes
  2. Zgjidhni P1 - Aktivizoni/Çaktivizoni lidhjen me kamerën Raspberry PI
  3. Thuaj po
  4. për OK
  5. Zgjidhni Mbaro
  6. Zgjidhni Po për të rindezur tani

Pas rindezjes, mund të vazhdojmë

Hapi 7: Softueri

Do të na duhen disa biblioteka Python për t'u instaluar. Kjo është përditësuar për versionin më të fundit Raspbian - Buster

Së pari, le të vendosim Python 3 si parazgjedhje. Ndiqni këtë lidhje për të ditur se si ta konfiguroni atë SISTEMI WIDE

Bibliotekat:

  • python-pil.imagetk për të manipuluar imazhet
  • python-rpi.gpio për të hyrë në PIN-et e GPIO
  • python-picamera për të hyrë në Kamera Raspberry PI
  • Tweepy për të ndarë foton në Twitter
  • facebook-sdk për ta ndarë në një faqe në facebook

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

Përdorni Python pip për të instaluar facebook-sdk

sudo pip3 instaloni facebook-sdk

Hapi 8: Programimi - Pamja e kamerës

Image
Image
Programimi - Pamja e Kameras
Programimi - Pamja e Kameras
Programimi - Pamja e Kameras
Programimi - Pamja e Kameras

Një nga kërkesat që i vendosa këtij projekti ishte që ky program të funksiononte në modalitetin CLI. Pra, ne duhet të shfaqim imazhin e kamerës në tastierë. Për këtë, le të përdorim Python Picamera. Pas kësaj, le të përdorim pil.imagetk për të shfaqur një mbivendosje në krye të vrojtimit të kamerës

Programi ynë i vogël (ne do të zhvillojmë programe të vegjël derisa një i madh në fund) do të shfaq vrojtimin e kamerës.

#!/usr/bin/env python

importo kohë importoni picamera nga koha importoni aparat gjumi = picamera. PiCamera () # Vendosni rezolucionin që dëshironi camera.resolution = (1280, 1024) camera.framerate = 24 camera.start_preview () provoni: ndërsa (True): fle (1) përveç (KeyboardInterrupt, SystemExit): print ("Po del …") camera.stop_preview ()

Për ta provuar, thjesht ekzekutojeni

python cameraPreview.py

Shikoni paraprakisht kamerën me imazhe në krye

Meqenëse doja një numërim mbrapsht të shfaqur para se të bëja fotografinë, më duheshin imazhe që mbivendosen parapamjen e kamerës.

Krijoni një imazh-p.webp" />

Kodi i mëposhtëm do të mbivendoset 1-p.webp

importo picamera nga PIL import imazh nga koha importo gjumë me picamera. PiCamera () si kamera: camera.resolution = (1920, 1080) camera.framerate = 24 camera.start_preview () # load image img = Image.open ('1.png ') # create pad = Image.new (' RGB ', (((img.size [0] + 31) // 32) * 32, ((img. madhësia [1] + 15) // 16) * 16,)) pad.pastë (img, (0, 0)) o = camera.add_overlay (pad.tobytes (), size = img.size) o.alpha = 128 o.layer = 3 while True: fle (1)

Provoje:

python imageOverlay.py

Le të krijojmë tani një numërim mbrapsht me imazhe të mbivendosura. Ashtu si keni krijuar imazhin 1.png, krijoni dy imazhe të tjera me 2 dhe 3 në to.

Pas kësaj, thjesht përdorni kodin e mëposhtëm:

importo picamera

nga importi PIL Imazh nga importimi i kohës fle me picamera. PiCamera () si 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.pastë (img1, (0, 0)) o = camera.add_overlay (pad.tobytes (), madhësia = img1.size) o.alpha = 128 o.layer = 3 gjumë (2) #hiqni mbulesën e mëparshme të kamerës. hiqni mbivendosjen (o) pad.pastë (img2, (0, 0)) o = camera.add_overlay (pad) tobytes (), madhësia = img2.size) o.alpha = 128 o.layer = 3 gjumë (2) # hiqni kamerën e mëparshme të mbivendosjes. hiqni mbivendosjen (o) pad.pastë (img3, (0, 0)) o = kamera. shtoj_shtresë (pad.tobytes (), madhësia = img3.size) o.alpha = 128 o.layer = 3 gjumë (2)

Tani ekzekutoni atë:

python imageOverlayCounter.py

Dhe shikoni numërimin mbrapsht

Wow - Shumë kod dhe asnjë fotografi e marrë … Le ta zgjidhim duke i kombinuar të gjitha së bashku - shikoni kamerën, numërimin mbrapsht dhe bëni një fotografi

import picamera nga PIL import Imazh nga koha import gjumë def overlayCounter (): # ngarkoni imazhin 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,)) # ngjit mbivendosjen - 3 pad.pastë (img1, (0, 0)) o = camera.add_overlay (pad.tobytes (), size = img1.size) o.alpha = 128 o.layer = 3 fle (1) # Hiq mbulesën e mëparshme të kamerës. hiqni mbivendosjen (o) # ngjitni mbivendosjen - 2 pad.pastë (img2, (0, 0)) o = camera.add_overlay (pad.tobytes (), size = img2.size) o.alpha = 128 o.layer = 3 gjumë (1) # hiqni mbivendosjen e mëparshme të kamerës. hiqni mbivendosjen (o) # ngjitni mbivendosjen - 3 pad.pastë (img3, (0, 0)) o = camera.add_overlay (pad) tobytes (), madhësia = 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 ()

Provoje:

python pictureWithTimer.py

Dhe këtu kemi Yoda

Hapi 9: Programimi - Butoni i Shtypjes së Kupolës së Madhe

Programimi - Butoni i Shtypjes së Kupolës së Madhe
Programimi - Butoni i Shtypjes së Kupolës së Madhe
Programimi - Butoni i Shtypjes së Kupolës së Madhe
Programimi - Butoni i Shtypjes së Kupolës së Madhe

Butoni i madh i kupolës është një buton i madh i rrumbullakët - me diametër rreth 100 mm me një LED të vogël. Thotë se punon në 12V, por 3.3v e Raspberry PI është e mjaftueshme për ta ndriçuar atë

Përdorni skemën për testim

Kodi:

nga RPi import GPIO

takeButton = 17 ledButton = 27 GPIO.setmode (GPIO. BCM) GPIO.setup (takeButton, GPIO. IN, GPIO. PUD_UP) GPIO.setup (ledButton, GPIO. OUT) #Led led GPIO.output (ledButton, True) # Funksioni i bllokimit GPIO.wait_for_edge (takeButton, GPIO. FALLING) print ("Button Pressed") GPIO.output (ledButton, False) GPIO.cleanup ()

Disa shpjegime të kodit Një nga format e marrjes së vlerave nga GPIOS është përmes ndërprerjeve (tjetra është sondazhi) - zbulimi i skajit.

Buzë është emri i kalimit nga HIGH në LOW (buzë në rënie) ose LOW në HIGH (buzë në rritje). Kur PIN -i nuk është i lidhur me asgjë, çdo lexim do të jetë i papërcaktuar. Një zgjidhje është të keni një rezistencë tërheqëse lart/poshtë në PIN -in e përmendur. Raspberry PI ju lejon të konfiguroni rezistorët tërheqës lart/poshtë përmes softuerit.

Linja

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

konfiguron atë PIN për të bërë pikërisht atë - tërhiqeni lart

Pse të tërhiqesh? Epo, butoni i madh i shtytjes së kupolës ka 2 PIN - shtyni për të thyer ose shtypni për të bërë (ashtu si butonat e vegjël të shtypjes që shpesh vijnë me komplete Arduino/Raspberry PI). E kam lidhur me kodin PIN të "shtytjes për të bërë". Kur shtypet, qarku mbyllet dhe energjia elektrike kalon (normalisht e hapur).

Linja

GPIO.wait_for_edge (takeButton, GPIO. FALLING)

do të presë (duke pezulluar efektivisht ekzekutimin e skenarit) derisa të zbulojë rënien e PIN -it - lëshimi i butonit do të shkurtojë rrjedhën e energjisë elektrike dhe PIN do të shkojë nga 3.3v në 0v

PIN -i LED është vetëm për të ndezur LED -in në buton

Më shumë informacion mbi ndërprerësit nga Arduino Tutorials, Wikipedia mbi shtytjen për të bërë ose shtytjen për të thyer dhe ndërprerjet GPIO

Tani, le të kombinojmë një buton shtypës me kamerën - Bëni një fotografi vetëm kur shtypet butoni

importo picamera nga koha importo gjumë nga RPi import GPIO nga PIL import Image # SHENIM: Kjo është ajo që do të jetë butoni i anulimit në programin kryesor # Unë thjesht po e përdor këtu për hir të qartësisë në video takeButton = 24 ledCancel = 5 GPIO.setmode (GPIO. BCM) GPIO.setup (takeButton, GPIO. IN, GPIO. PUD_UP) GPIO.setup (ledCancel, GPIO. OUT) def onLeds (): GPIO.putput (ledCancel, True) fle (1) def offLeds (): GPIO.output (ledCancel, False) # Funksioni për të mbivendosur imazhin def overlayCounter (): #load images img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.png') # Krijo një mbivendosje # Përdoret me img1 sepse të gjithë kanë të njëjtën madhësi pad = Image.new ('RGB', (((img1.size [0] + 31) // 32) * 32, ((img1.size [1] + 15) // 16) * 16,)) # ngjit mbivendosjen - 3 pad.pastë (img1, (0, 0)) ov = camera.add_overlay (pad.tobytes (), madhësia = img1.size) ov.alpha = 200 # shtresa është 3 sepse pamja paraprake e kamerës është në shtresën 2 ov. shtresa = 3 fjetje (1) camera.remove_overlay (ov) # ngjit mbivendosjen - 2 pad.pastë (img2, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img2.size) ov.alpha = 200 # shtresa është 3 sepse pamja paraprake e kamerës është në shtresën 2 ov. shtresa = 3 fjetje (1) camera.remove_overlay (ov) # ngjit mbivendosjen - 1 pad.pastë (img3, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img3.size) ov.alpha = 200 # shtresa është 3 sepse parapamja e kamerës është në shtresën 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 ()

Pak shpjegim i kodit

Fillon vrojtimin e kamerës dhe pret atje derisa të shtypet një buton. Pasi të shtypet butoni, LED ndizet dhe fillon numërimi mbrapsht. Kur të arrini në fund, fotografia merret dhe LED fiket

Hapi 10: Postoni në Twitter

Postoni në Twitter
Postoni në Twitter
Postoni në Twitter
Postoni në Twitter
Postoni në Twitter
Postoni në Twitter

Tani, ne do të përdorim Python dhe cicërojmë një cicërimë!:) Do t'ju duhet një imazh për ta postuar - zgjidhni me mençuri.

Së pari, ne kemi nevojë për të hyrë në API të Twitter dhe për këtë ne duhet të krijojmë një APP. Shkoni te https://apps.twitter.com dhe krijoni një aplikacion të ri.

Ju do të duhet të aplikoni për një llogari zhvilluesi - plotësoni disa pyetje dhe konfirmoni adresën tuaj të postës elektronike. Pas kësaj, do të keni mundësi të krijoni një APP të re.

Pas krijimit të APP -së, lundroni te Çelësat dhe Shenjat dhe Gjeneroni një Shenjë të Hyrjes dhe Sekret të Shenjës së Qasjes. Do të shfaqet një dritare me Çelësat VETLM Një herë - Kopjoni ata dhe ruajini ato më vonë.

Përdorni kodin e mëposhtëm për të dërguar një fotografi në llogarinë tuaj në Twitter. Mos harroni të plotësoni:

  • çelësi i konsumatorit
  • sekreti_i konsumatorit
  • aksesi_talla
  • access_token_secret

mesazhi në twitter është teksti që duhet dërguar në cicërimë.

jpg_foto_to_send është një fotografi që do t'i bashkëngjitet cicërimës. Ju lutemi keni një fotografi në të njëjtën drejtori me shkrimin Python dhe ndryshoni emrin në kod.

importo tweepy # Cilësimet e Twitter def get_api (cfg): auth = tweepy. OAuthHandler (cfg ['konsumatori_çelës'], cfg ['konsumatori_sekret']) auth.set_access_token (cfg ['access_token'], cfg ['access_token_secret']) tweepy. API (author) # Dërgo në twitter def sendToTwitter (): cfg = {"çelësi i konsumatorit": "", "sekreti i konsumatorit": "", "aksesi_token": "" "," access_token_secret ":" "} api = get_api (cfg) # Mesazhi i Statusit tweet = "mesazh në Twitter" status = api.update_with_media ("jpg_foto_to_Send", cicërim) sendToTwitter ()

Kontrolloni burimin tuaj në Twitter për cicërimën tuaj.

Këtu është cicërimë

Ose më poshtë:

#RaspberryPI MagicBox. Bëni fotografi, rishikoni ato dhe zgjidhni t'i dërgoni në twitter dhe Facebook. Mundësuar nga Raspberry PI. @@ Raspberry_Pi#RaspberryPI#RaspberryPIProjectpic.twitter.com/cCL33Zjb8p

- Bruno Ricardo Santos (@feiticeir0) 29 shkurt, 2020

Hapi 11: Kombinimi i disa elementeve

Kombinimi i disa elementeve
Kombinimi i disa elementeve
Kombinimi i disa elementeve
Kombinimi i disa elementeve

Tani le të kombinojmë butonin Big Dome Push, duke e shtypur atë, duke numëruar mbrapsht, të bëjmë një fotografi, të vendosim nëse do ta dërgojmë apo jo në Twitter.

Ne do të shtojmë një imazh tjetër të mbivendosur dhe do të përdorim të tre butonat e shtypjes. Kur të merret fotografia, të gjitha 3 butonat LED do të ndizen.

Ne shtojmë një fotografi tjetër, që tregon ikonat për t'u postuar në rrjetet sociale

SelectOption-p.webp

Aenviar-p.webp

Në video nuk shfaqet butoni Blu i shtypjes (para kamerës), por LED është ndezur dhe fillon të pulsojë sapo të shtypet.

Kodi është i bashkangjitur nëse preferoni

Ky është kodi përfundimtar i testimit para programit kryesor.

# coding = utf-8 import picamera import _thread import subprocess as sp from time import import fle from RPi import GPIO from PIL import Import import threading threading # Twitter import tweepy # Facebook import facebook # Button to be picture takeButton = 17 # SocialNetwork Button socialNetworkButton = 23 # Anulo Fotografinë cancelButton = 24 # Bëj butonin e fotografisë LED takePicButtonLed = 27 # Posto në butonin Rrjeti Social LED postSNLed = 22 # Anulo butonin 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 (postim)) GPIO.setup (cancelButtonLed, GPIO. OUT) # Cilësimet e Twitter def get_api (cfg): auth = tweepy. OAuthHandler (cfg ['user_key'], cfg ['konsumatori_sekret']) auth.set_access_token (cfg ['access_token'], cfg ['access_token_secret']) tweepy. API (author) # Dërgo në twitter def sendToTwitter (): cfg = {"con sumer_key ":" "," user_secret ":" "," access_token ":" "," access_token_secret ":" "} api = get_api (cfg) # Status Message tweet =" Testimi i udhëzueshëm i MagicBox. #MagicBox #RaspberryPI #Raspberry #Instructables "status = api.update_with_media (" pushTesting.jpg ", cicëroj) #Facebook AOth def get_api_facebook (cfg): graph = facebook. GraphAPI (cfg ['access_token] # # postoni si faqe. Mund të kaloni # sa vijon nëse doni të postoni si vetja. resp = graph.get_object ('mua/llogaritë') page_access_token = Asnjë për faqen në resp ['data']: nëse faqe ['id'] == cfg ['page_id']: page_access_token = faqe ['access_token'] graph = facebook. GraphAPI (page_access_token) grafi i kthimit # Dërgo në facebook def sendToFacebook (): #Vlerat për qasje cfg = {"page_id": "", "access_token": ""} api = get_api_facebook (cfg) caption = "Caption the image" albumid = "" api.put_photo (image = open ("pushTesting.jpg", "rb"), caption = "Titull imazhit ") # Vetëm dritë TakePicButtonLed def vetëmTakePicLed (): GPIO.output (takePicButtonLed, True) GPIO.output (postSNLed, False) GPIO.output (cancelButtonLed, False) # Vetëm Light Light Cancel dhe butoni SocialNetwork def anuloniPostLEDS (): O.output (takePicButtonLed, False) GPIO.output (postSNLed, True) GPIO.output (cancelButtonLed, True) # Shkrepja e dritës së dritës për të marrë një fotografi duke numëruar mbrapsht numërimin TimerPicture (): GPIO.putput (takePicButtonLed, True) gjumë (0.5) GPIO.putput (takePicButtonLed, False) gjumë (0.5) GPIO.output (takePicButtonLed, True) gjumë (0.5) GPIO.output (takePicButtonLed,Gjumë i rremë (0.5) GPIO.output (takePicButtonLed, True) gjumë (0.5) GPIO.output (takePicButtonLed, False) # Blink postSNLed ndërsa postoni në rrjetet sociale def blinkPosting (stop_event): # Filloni ndërsa (jo stop_event.is_set ()): print ("off") GPIO.output (postSNLed, False) gjumë (0.5) print ("on") GPIO.output (postSNLed, True) gjumë (0.5) def timer (): GPIO.output (takePicButtonLed, True) gjumë (1) GPIO.output (postSNLed, True) gjumë (1) GPIO.output (cancelButtonLed, True) gjumë (1) def showAllLeds (): GPIO.output (takePicButtonLed, True) GPIO.output (postSNLed, True) GPIO.output (cancelButtonLed, True) # Shfaq një pamje paraprake në shtresën 1 def displayPreview (imgName): # Meqenëse shfaqja e imazhit PIL është një mut # ne përdorim mbivendosjen nga kamera për të shfaqur # parapamjen img = Image.open (imgName) mbushje = Imazh. i ri ('RGB', (((madhësia e imazhit [0] + 31) // 32) * 32, ((madhësia e imazhit [1] + 15) // 16) * 16,)) padding.paste (img, (0, 0)) ov = camera.add_overlay (padding.tobytes (), size = img.size) ov.layer = 1 # Shfaq një pamje paraprake në shtresë 3 def displayPreview3 (imgName): # Meqenëse shfaqja e imazhit PIL është një crapp # ne përdorim mbivendosjen nga kamera për të shfaqur # parapamjen img = Image.open (imgName) mbushje = Image.new ('RGB', (((img.size [0] + 31) // 32) * 32, ((img.size [1] + 15) // 16) * 16,)) mbushje.pastë (img, (0, 0)) ov = camera.add_overlay (padding.tobytes (), size = img.size) ov.alpha = 150 ov.layer = 3 return ov # Funksion overlaySocialNetwork def overlaysn (): imgsn = Image.open ('SelectOption.png') # Krijo Mbulesa e mbivendosjes = Imazh. I ri ('RGB', (((imgsn.size [0] + 31) // 32) * 32, ((imgsn. Madhësia [1] + 15) // 16) * 16,)) # Ngjiteni mbivendosjen pad.pastë (imgsn, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = imgsn.size) ov.alpha = 100 ov.layer = 3 return ov # Funksioni i mbivendosjes mbivendosja e imazhitCounter (): # ngarkoni imazhet img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.png') # Krijoni një mbivendosje # Përdoret me img1 sepse të gjithë kanë të njëjtën madhësi pad = Image.new ('RGB', (((img1.size [0] + 31) // 32) * 32, ((img1.size [1] + 15) // 16) * 16,)) # ngjit mbivendosjen - 3 pad.pastë (img1, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img1.size) ov.alpha = 200 # shtresa është 3 sepse pamja paraprake e kamerës është në shtresën 2 ov.layer = 3 fle (1) camera.remove_overlay (ov) # ngjis mbivendosjen - 2 pad.pastë (img2, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img2.size) ov.alpha = 200 # shtresa është 3 sepse vrojtimi i kamerës është në shtresën 2 ov.layer = 3 fle (1) camera.remove_overlay (ov) # paste mbivendosja - 1 pad.pastë (img3, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img3.size) ov.alpha = 200 # shtresa është 3 sepse pamja paraprake e kamerës është në shtresën 2 ov.layer = 3 fjetje (1) camera.remove_overlay (ov) # Funksioni kryesor # Pastroni ekranin në mënyrë që mesazhet e nisjes të mos jenë të pranishme # me siguri do të ishte më mirë ta bësh këtë në bash tmp = sp.call ('qartë', shell = E vërtetë) 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 = 'average' #Testimi këtu provoni: ndërsa (E vërtetë): camera.start_preview () #Shfaq LED vetëm për të marrë vetëm fotografiTakePicLed () #Prisni që butoni të marrë Figura GPIO.wait_for_edge (takeButton, GPIO. FALLING) # Filloni një fije për të numëruar me LED -të ndërsa shfaqen imazhet # Ndoshta mund të përdoret në funksionin e mbivendosjes Counter, # sepse ka edhe kohëmatës për të treguar fotografitë, por efektet e drejtuara nuk do të ishte # e njëjta _thread.start_new_thread (countingTimerPicture, ()) # Trego mbivendosjen e fotografive në mbivendosjen e figurës së kamerësCounter () # # Trego të gjitha LED -të gjatë marrjes së fotografisë showAllLeds () camera.capture ('pushTesting.jpg'). stop_preview () #display image displayPreview ('pushTesting.jpg') # Trego mbivendosjen oo = mbivendosje () # Trego LED -të për të Anuluar ose Postuar në Rrjetet Sociale cancelPostLEDS () GPIO.add_event_detect (socialNetworkButton, GPIO. FALLING_ectionButton) GPIO.adton, GPIO. FALLING) ndërsa (E vërtetë): nëse GPIO.event_detecte d (socialNetworkButton): camera.remove_overlay (oo) GPIO.output (cancelButtonLed, False) o = displayPreview3 ('Aenviar.png') #print "Butoni i Rrjeteve Sociale" sendToTwitter () sendToFacebook () camera.remove_overlay (o) pushim nëse GPIO.event_detected (cancelButton): #print "Cancled" camera.remove_overlay (oo) break # reset GPIOS GPIO.remove_event_detect (socialNetworkButton) GPIO.remove_event_detect (cancelButton) GPIO.remove_event_detect (marr "Dalë …") #offLeds () GPIO.cleanup ()

Hapi 12: Tela

Image
Image
Instalime elektrike
Instalime elektrike
Instalime elektrike
Instalime elektrike

Instalimet elektrike janë vetëm lidhja e butonave të Big Dome Push në Raspberry PI.

Vetëm ndiqni Skemën Fritzing.

Lidhjet janë:

LidhjaRPI GPIO PIN GND Green Push ButtonGND (#3) GND Butoni i Shtypjes së Verdhë GND (#9) GND Blue Push ButtonGND (#39) Bëni Fotografinë (Butoni i Shtytjes Blu "Shtyni për të bërë") 17 (BCM) Postoni në Rrjetet Sociale (Green Push Butoni "Shtyje për të bërë") 23 (BCM) Anulo (Butoni i Shtypjes së Verdhë "Shtyji për të bërë") 24 (BCM) Butoni i Shtytjes Blu LED27 (BCM) Butoni i Shtypjes së Gjelbër LED22 (BCM) Butoni i Shtypjes së Verdhë LED5 (BCM)

Tkurrja e nxehtësisë gjithashtu është e koduar me ngjyra

  • E zeza është lidhje GND
  • Të verdhat janë lidhje "shtytje për të bërë"
  • Blu janë lidhjet LED

Numrat GPIO. BCM kundrejt lidhjeve GPIO. BOARD

Meqenëse lidhjet e mia janë BCM, mendoj se tani është një kohë e mirë për të folur për të dhe ndryshimin midis BCM dhe BOARD.

Dallimi kryesor është se si i referoheni PIN -ve GPIO, të cilat nga ana tjetër do të drejtojnë mënyrën se si i bëni lidhjet. GPIO.board do t'i referohet PIN -et me numrin e shtypur në çdo plan urbanistik GPIO në internet.

GPIO. BCM i referohet numrave PIN siç i sheh Broadcom SOC. Kjo ka të ngjarë të ndryshojë së bashku me versionet më të reja të Raspberry PI.

Në faqen pinout.xyz, numrat e tabelës janë ata që janë pranë kunjave dhe BCM referohen kështu - BCM X (ku X është numri)

Hapi 13: Kutia Magjike

Kodi i bashkangjitur këtij hapi është përfundimtar.

Mund ta ekzekutoni në boot PI të mjedrës, madje pa pasur nevojë të identifikoheni. Për ta bërë këtë, thjesht krijoni këtë skenar të vogël në drejtorinë që keni vendosur kodin - ndryshoni rrugët në përputhje me rrethanat

#!/bin/bash

cd/home/pi/magicbox python MagicBox.py

Bëjeni atë të ekzekutueshëm

chmod +x start_magicbox.sh

Tani, thirreni në /etc/rc.local, pak para instruksionit të daljes 0

sudo vi /etc/rc.lokal

/home/pi/magicbox/start_magicbox.sh &

ruani dhe hiqni dorë.

Tani, me çdo rindezje, programi Python do të ekzekutohet

SH NOTNIM: Të gjithë skedarët e imazhit duhet të jenë në të njëjtën drejtori me skriptin. Ju duhet të keni:

  • 1.png
  • 2.png
  • 3.png
  • Aenviar.png
  • SelectOption.png

Ju mund t'i merrni të gjitha këto skedarë në github të MagicBox.

Recommended: