Talaan ng mga Nilalaman:

RaspberryPI Photo Camera - MagicBox: 13 Hakbang (na may Mga Larawan)
RaspberryPI Photo Camera - MagicBox: 13 Hakbang (na may Mga Larawan)

Video: RaspberryPI Photo Camera - MagicBox: 13 Hakbang (na may Mga Larawan)

Video: RaspberryPI Photo Camera - MagicBox: 13 Hakbang (na may Mga Larawan)
Video: Камера высокого разрешения и объективы для Raspberry Pi. Железки Амперки 2024, Nobyembre
Anonim
Image
Image
Magtayo
Magtayo

Ilang sandali ang nakaraan, nagkaroon ako ng nakatutuwang ideya na ito upang lumikha ng isang potograpikong makina mula sa isang Raspberry PI. Sa aking lungsod, mayroong isang maliit na palabas kung saan ang mga tao ay pupunta at ipapakita kung ano ang kanilang ginagawa o ginawa gamit ang electronics, computer, atbp … Ako ay tulad ng isang Maker Faire ng isang mahirap na tao, ngunit sa isang lokal na saklaw.

Ang isa ay paparating, at, kasama ang aking asawa, itinatayo namin ang bagay na ito.

Paano ito gumagana?

Pinindot mo ang asul na pindutan - nagsisimula itong kumurap - at pagkatapos ng 3 segundo ay kunan ng larawan. Sa kabilang bahagi ng camera mayroong isang monitor na nagpapakita ng isang countdown at pagkatapos na makuha ang larawan, ang preview ng larawan.

Maaari mo na ngayong piliing ipadala ito sa Twitter at Facebook o kanselahin at subukang muli. Ganun kasimple.

Ang lahat ay nai-program sa Python, na ginagamit ang PI framebuffer - Walang Xorg, walang GUI ang ginagamit.

Narito ang isang video ng proyekto na gumagana

Mga gamit

  • Raspberry PI (Gumagamit ako ng bersyon 2)
  • Raspberry PI Camera (Gamit ang bersyon 1)
  • 3x Big Dome push Buttons
  • TFT / LCD Monitor na may VGA / HDMI
  • MDF
  • Mga metal na bisagra, turnilyo, atbp.
  • Mga Kagamitan sa Kuryente
  • Spare time at maraming kasiyahan

Hakbang 1: Bumuo

Magtayo
Magtayo
Magtayo
Magtayo

Ang pagbuo nito ay masaya. Maraming pagputol, pagpipinta at pagbabarena.

Gumamit ako ng mga MDF panel para sa pagbuo ng pangunahing istraktura ng camera. Ang mga ito ay magaan at madaling magtrabaho. Gayundin, ito ay isang uri ng kahoy na maaaring putulin ng Laser machine sa lokal na Fablab.

Ang pag-access sa mga kable sa loob ay ginawa ng bahagi ng monitor, gamit ang mga haydroliko na bisagra upang matulungan nilang maiangat ang monitor.

Hakbang 2: Camera

Kamera
Kamera
Kamera
Kamera
Kamera
Kamera

Kamera

Ang camera ay isang kahon na may mga sumusunod na sukat: 60cm x 40cm x 30cm Ang iyo ay maaaring mas maliit, mas malaki, nasa sa iyo ito. Kailangan lang tumanggap para sa monitor na gagamitin mo. Ang mga MDF panel ay pinutol ng laser sa lokal na Fablab. Mayroong pangangailangan para sa 3 butas sa likod - dalawang malalaking pindutan ng dome push at isa para sa monitor. Sa harap, 2 butas - isa para sa isang malaking pindutan ng simboryo ng simboryo at isa pa - mas maliit - para sa Raspberry PI camera. Wala akong tiyak na mga sukat - isipin lamang ang isang camera at gamitin iyon.

Hakbang 3: Subaybayan

Subaybayan
Subaybayan
Subaybayan
Subaybayan
Subaybayan
Subaybayan

Subaybayan

Ang suporta sa monitor ay ginawa ng pagdaragdag ng maliliit na piraso ng kahoy upang suportahan ito sa loob ng mga sukat nito.

Nakuha ito mula sa plastik na pabahay at na-secure sa lugar na may mga turnilyo. Upang matulungan ang pag-angat nito, ginamit ang dalawang haydroliko na bisagra (ginamit).

Hakbang 4: Pagdekorasyon

Dekorasyon
Dekorasyon
Dekorasyon
Dekorasyon
Dekorasyon
Dekorasyon
Dekorasyon
Dekorasyon

Dahil maraming gusto ko ang istilo ng aking Fuji X-T30, nagpunta kami at gumawa ng katulad na bagay.

Una, tinakpan namin ito ng foam at sumunod ay spray namin ito ng itim. Matapos ang pintura, nagdagdag kami ng aluminyo foil para sa mga bahagi ng pilak at ibalot ito

Upang gayahin ang lens, gumamit lamang kami ng isang bilog na Tupperware kung gumawa kami ng isang maliit na butas para makaupo ang module ng Raspberry PI camera.

Hakbang 5: Programming

Ang pag-program ng Camera ay isang hamon, ngunit napakasaya.

Walang GUI - tumatakbo ito sa CLI at tumatakbo ito sa bersyon ng Python 3.

Una akong nagsimula sa pamamagitan ng pagsubok at pagprograma ng mga pindutan, susunod ay ang pagkuha ng mga larawan gamit ang mga tool na naibigay at ang Python API. Pagkatapos ay lumipat ako upang i-overlay ang mga larawan sa output ng camera (para sa countdown) at susunod na makipag-ugnay sa Twitter at Facebook.

Matapos kong komportable sa lahat ng iyon, tulad ng isang palaisipan, pinagsama-sama ko ang lahat ng mga piraso. Dito, pupunta kami sa parehong proseso. Magsimulang mabagal at maliit at pumunta sa mabilis at malaki.

Una, magsimula tayo sa pamamagitan ng pag-configure ng Raspberry PI

Hakbang 6: Paghahanda ng Raspberry PI

Paghahanda ng Raspberry PI
Paghahanda ng Raspberry PI
Paghahanda ng Raspberry PI
Paghahanda ng Raspberry PI
Paghahanda ng Raspberry PI
Paghahanda ng Raspberry PI

Hindi ko ipaliwanag kung paano i-install ang Raspbian sa Raspberry PI - maraming mga tutorial doon, kahit na sa opisyal na website ng Raspberry PI.

Kailangan mo lamang na magkaroon ng access sa SSH dito, o i-plug ito sa isang monitor at i-plug ang isang keyboard at mouse.

TANDAAN: Kapag nagsisimula sa Raspberry PI camera, kailangan mong mai-plug in ito sa isang monitor. Hanggang doon, ang lahat ng mga hakbang ay maaaring gawin gamit ang SSH.

Matapos ang pag-boot sa iyong Raspberry PI, kailangan naming paganahin ang Raspberry PI camera. Gumamit tayo ng tool na raspi-config para doon.

sudo raspi-config

  1. Piliin ang pagpipilian 5 - Mga Pagpipilian sa Interfacing
  2. Pumili ng P1 - Paganahin / Huwag paganahin ang koneksyon sa Raspberry PI camera
  3. Sabihin mong Oo
  4. para sa OK
  5. Piliin ang Tapusin
  6. Piliin ang Oo upang mag-reboot ngayon

Pagkatapos ng pag-reboot, maaari kaming magpatuloy

Hakbang 7: Software

Kakailanganin namin ang ilang mga library ng Python upang mai-install. Na-update ito para sa pinakabagong bersyon ng Raspbian - Buster

Una, hinahayaan na itakda ang Python 3 bilang default. Sundin ang link na ito upang malaman kung paano i-set up ito ng SYSTEM WIDE

Mga Aklatan:

  • python-pil.imagetk upang manipulahin ang mga imahe
  • python-rpi.gpio upang ma-access ang GPIO PINS
  • python-picamera upang ma-access ang Raspberry PI Camera
  • Tweepy upang ibahagi ang larawan sa kaba
  • facebook-sdk upang ibahagi sa isang pahina sa facebook

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

Gumamit ng Python pip upang mai-install ang facebook-sdk

sudo pip3 i-install ang facebook-sdk

Hakbang 8: Programming - Preview ng Camera

Image
Image
Programming - Preview ng Camera
Programming - Preview ng Camera
Programming - Preview ng Camera
Programming - Preview ng Camera

Isa sa mga kinakailangan kong itinakda sa proyektong ito ay ang program na ito na tatakbo sa mode na CLI. Kaya, kailangan naming ipakita ang imahe ng camera sa console. Para sa mga ito, gamitin natin ang Python Picamera. Pagkatapos nito, gamitin natin ang pil.imagetk upang ipakita ang isang overlay sa tuktok ng preview ng camera

Ang aming maliit na programa (bubuo kami ng maliliit na programa hanggang sa ang isang malaki sa dulo) ay ipapakita ang preview ng camera.

#! / usr / bin / env python

i-import ang oras ng pag-import ng picamera mula sa pag-import ng oras ng camera sa pag-import = picamera. PiCamera () # Itakda ang resolusyon na nais mo camera.resolution = (1280, 1024) camera.framerate = 24 camera.start_preview () subukan: habang (Totoo): pagtulog (1) maliban sa (KeyboardInterrupt, SystemExit): i-print ("Exiting…") camera.stop_preview ()

Upang subukan ito isagawa lamang ito

python cameraPreview.py

I-preview ang camera na may mga imahe sa itaas

Dahil ginusto ko ang isang countdown na ipinakita bago kumuha ng larawan, kailangan ko ng mga imaheng overlap ng preview ng camera.

Lumikha ng isang imahe ng-p.webp" />

Ang sumusunod na code ay mag-o-overlap sa 1-p.webp

import picamerafrom PIL import Image mula sa oras na pag-import ng pagtulog kasama ang picamera. PiCamera () bilang camera: 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.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 habang True: sleep (1)

Subukan mo:

python imageOverlay.py

Lumikha tayo ngayon ng isang countdown na may mga overlay na imahe. Tulad ng iyong paglikha ng 1-p.webp

Pagkatapos nito, gamitin lamang ang sumusunod na code:

import picamera

mula sa PIL import Image mula sa oras na pag-import ng pagtulog kasama ang picamera. PiCamera () bilang camera: 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 (), size = img1.size) o.alpha = 128 o.layer = 3 pagtulog (2) # alisin ang nakaraang overlay camera.remove_overlay (o) pad.paste (img2, (0, 0)) o = camera.add_overlay (pad. tobytes (), size = img2.size) o.alpha = 128 o.layer = 3 sleep (2) # alisin ang nakaraang overlay camera.remove_overlay (o) pad.paste (img3, (0, 0)) o = camera. add_overlay (pad.tobytes (), size = img3.size) o.alpha = 128 o.layer = 3 sleep (2)

Isagawa ito ngayon:

python imageOverlayCounter.py

At tingnan ang countdown

Wow - Ang ilang mga magkano ang code at walang kunan ng larawan … Malutas natin iyon sa pamamagitan ng pagsasama-sama ng lahat - i-preview ang camera, countdown at kumuha ng larawan

import picamerafrom PIL import Image mula sa oras na pag-import ng 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,)) # i-paste ang overlay - 3 pad.paste (img1, (0, 0)) o = camera.add_overlay (pad.tobytes (), size = img1.size) o.alpha = 128 o.layer = 3 sleep (1) # Alisin ang nakaraang overlay camera.remove_overlay (o) # i-paste ang overlay - 2 pad.paste (img2, (0, 0)) o = camera.add_overlay (pad.tobytes (), size = img2.size) o.alpha = 128 o.layer = 3 pagtulog (1) # alisin ang nakaraang overlay camera.remove_overlay (o) # i-paste ang overlay - 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 ()

Subukan mo:

larawan ng sawaWithTimer.py

At narito mayroon kaming Yoda

Hakbang 9: Programming - Button ng Push ng Big Dome

Programming - Button ng Push ng Big Dome
Programming - Button ng Push ng Big Dome
Programming - Button ng Push ng Big Dome
Programming - Button ng Push ng Big Dome

Ang malaking pindutan ng simboryo ng simboryo ay isang malaking bilog na pindutan - na may paligid ng 100mm out diameter na may isang maliit na LED. Sinasabi nitong gumagana ito sa 12V, ngunit ang 3.3v ng Raspberry PI ay sapat na upang magaan ito

Gamitin ang eskematiko para sa pagsubok

Ang code:

mula sa RPi import GPIO

takebutton = 17 led Button = 27 GPIO.setmode (GPIO. BCM) GPIO.setup (takebutton, GPIO. IN, GPIO. PUD_UP) GPIO.setup (led Button, GPIO. OUT) #Light led GPIO.output (led Button, True) # Pag-block ng pagpapaandar GPIO.wait_for_edge (takebutton, GPIO. FALLING) print ("Button Pressed") GPIO.output (led Button, False) GPIO.cleanup ()

Ang ilang mga nagpapaliwanag ng code Ang isa sa mga paraan ng pagkuha ng mga halaga mula sa GPIOS ay sa pamamagitan ng mga pagkagambala (iba pang botohan) - pagtuklas ng gilid.

Ang gilid ay ang pangalan ng paglipat mula sa Mataas hanggang sa Mababang (bumabagsak na gilid) o LOW to HIGH (tumataas na gilid). Kapag ang PIN ay hindi nakakonekta sa anumang, anumang nabasa ay hindi matutukoy. Ang isang workaround ay upang magkaroon ng isang pull up / down na risistor sa nasabing PIN. Pinapayagan ng Raspberry PI na i-configure ang mga pull up / down na resistor sa pamamagitan ng software.

Ang linya

GPIO.setup (kunin ang Button, GPIO. IN, GPIO. PUD_UP)

isinaayos ang PIN na gawin iyon - mag-pull up

Bakit humugot? Kaya, ang malaking pindutan ng simboryo ng simboryo ay may 2 PIN - itulak upang masira o itulak upang gawin (tulad ng maliit na mga pindutan ng push na madalas na kasama ng Arduino / Raspberry PI kit). Na-wire ko ito sa "push to make" PIN ng pindutan. Kapag pinindot, magsasara ang circuit at pumasa ang kuryente (karaniwang bukas).

Ang linya

GPIO.wait_for_edge (takeButton, GPIO. FALLING)

maghihintay (mabisang suspindihin ang pagpapatupad ng script) hanggang sa makita ang pagbagsak ng PIN - ang pagpapalabas ng pindutan ay magpaputol sa daloy ng kuryente at ang PIN ay magmula sa 3.3v hanggang 0v

Ang LED PIN ay lamang upang magaan ang LED sa pindutan

Higit pang impormasyon sa mga switch ng push mula sa Arduino Tutorials, Wikipedia sa push upang gawin o itulak upang masira at makagambala ang GPIO

Ngayon, pagsamahin natin ang isang push button sa camera - Kumuha lamang ng larawan kapag pinindot ang pindutan

import picamerafrom time import sleep mula sa RPi import GPIO mula sa PIL import Image # TANDAAN: Ito ang magiging pindutan ng pagkansela sa pangunahing programa # Ginagamit ko lang ito dito alang-alang sa kalinawan sa 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.output (ledCancel, True) sleep (1) def offLeds (): GPIO.output (ledCancel, Mali) # Pag-andar upang i-overlay ang imahe def overlayCounter (): #load mga imahe img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.png') # Lumikha ng isang overlay # Ginamit sa img1 sapagkat ang lahat ay pareho ang laki ng pad = Image.new ('RGB', (((img1.size [0] + 31) // 32) * 32, ((img1.size [1] + 15) // 16) * 16,)) # i-paste ang overlay - 3 pad.paste (img1, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img1.size) ov.alpha = 200 # layer ay 3 dahil ang preview ng camera ay nasa layer 2 ov.layer = 3 pagtulog (1) camera.remove_overlay (ov) # i-paste ang overlay - 2 pad.paste (img2, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img2.size) ov.alpha = 200 # layer ay 3 dahil ang preview ng camera ay nasa layer 2 ov.layer = 3 sleep (1) camera.remove_overlay (ov) # i-paste ang overlay - 1 pad.paste (img3, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img3.size) ov.alpha = 200 # layer ay 3 dahil ang preview ng camera ay sa layer 2 ov.layer = 3 pagtulog (1) camera.remove_overlay (ov) camera = picamera. PiCamera () camera.resolution = (1280, 1024) camera.framerate = 24 camera.start_preview () GPIO.wait_for_edge (take Button, GPIO. FALLING) onLeds () overlayCounter () camera.capture ('pushTesting.jpg') camera.stop_preview () offLeds () GPIO.cleanup ()

Kaunting paliwanag ng code

Sinisimula nito ang preview ng camera at naghihintay doon hanggang sa mapindot ang isang pindutan. Matapos mapindot ang pindutan, sindihan ang LED at magsimula ang countdown. Kapag naabot ang dulo, ang larawan ay kinunan at ang LED ay naka-off

Hakbang 10: Mag-post sa Twitter

Mag-post sa Twitter
Mag-post sa Twitter
Mag-post sa Twitter
Mag-post sa Twitter
Mag-post sa Twitter
Mag-post sa Twitter

Ngayon, gagamitin namin ang Python at mag-tweet ng isang tweet!:) Kakailanganin mo ang isang imahe upang mai-post - pumili ng matalino.

Una, kailangan naming acess twitter API at para doon kailangan naming lumikha ng isang APP. Pumunta sa https://apps.twitter.com isang lumikha ng isang bagong application.

Kakailanganin mong mag-apply para sa isang developer account - punan ang ilang mga katanungan at kumpirmahin ang iyong email address. Pagkatapos nito, makakalikha ka ng isang bagong APP.

Matapos likhain ang APP, mag-navigate sa Mga Susi at Token at Bumuo ng isang Access Token at Access Lihim ng Token. Ipapakita ang isang window gamit ang mga Susi LAMANG SA isang beses - Kopyahin ang mga iyon at i-save ang mga ito para sa huli.

Gamitin ang sumusunod na code upang magpadala ng isang larawan sa iyong account sa twitter. Huwag kalimutang punan:

  • consumer_key
  • consumer_secret
  • access_token
  • access_token_secret

Ang mensahe sa kaba ay ang teksto upang ipadala sa tweet.

Ang jpg_foto_to_send ay isang larawan na ikakabit sa tweet. Mangyaring magkaroon ng ilang larawan sa parehong direktoryo ng script ng Python at baguhin ang pangalan sa code.

i-import ang tweepy # Mga setting ng Twitter def get_api (cfg): auth = tweepy. OAuthHandler (cfg ['consumer_key'], CFg ['consumer_secret']) auth.set_access_token (cfg ['access_token'], pagbalik ng

Suriin ang iyong feed sa Twitter para sa iyong tweet.

Narito ang Tweet

O sa ibaba:

#RaspberryPI MagicBox. Kumuha ng mga larawan, suriin ang mga ito at piliing ipadala ang mga ito sa kaba at Facebook. Pinapagana ng Raspberry PI. @@ Raspberry_Pi # RaspberryPI # RaspberryPIProjectpic.twitter.com / cCL33Zjb8p

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

Hakbang 11: Pagsasama-sama ng Ilang Mga Sangkap

Pinagsasama ang Ilang Elemento
Pinagsasama ang Ilang Elemento
Pinagsasama ang Ilang Elemento
Pinagsasama ang Ilang Elemento

Pagsamahin natin ngayon ang pindutan ng Big Dome Push, pindutin ito, pagbilang, kumuha ng larawan, magpasya kung ipadala ito sa twitter.

Magdaragdag kami ng isa pang overlay na imahe at gagamitin ang lahat ng tatlong mga pindutan ng push. Kapag ang larawan ay kinunan, ang lahat ng mga 3 mga pindutan ng LED ay sindihan.

Nagdagdag kami ng isa pang larawan, ipinapakita ang mga icon upang mai-post sa mga social network

Ipinapakita ng SelectOption-p.webp

Ang Aenviar-p.webp

Sa video ay hindi ipinakita ang Blue push button (harap ng camera), ngunit ang LED ay nakabukas at nagsisimula itong kumurap sa sandaling ito ay pinindot.

Ang code ay nakakabit kung nais mo

Ito ang pangwakas na code ng pagsubok bago ang pangunahing programa.

# coding = utf-8 import picamera import _thread import subprocess as sp from time import sleep from RPi import GPIO from PIL import Image import threading # Twitter import tweepy # Facebook import facebook # Button to take picture take Button = 17 # SocialNetwork Button socialNetwork Button = 23 # Ikansela ang larawan Kanselahin = 24 # Kumuha ng pindutan ng larawan LED takePic ButtonLed = 27 # I-post sa pindutan ng Social Network LED postSNLed = 22 # Ikansela ang pindutan LED kanselahin ButtonLed = 5 GPIO.setmode (GPIO. BCM) GPIO.setup (takebutton, GPIO. IN, GPIO. PUD_UP) GPIO.setup (socialNetworkButton, GPIO. IN, GPIO. PUD_UP) GPIO.setup (kanselahin ang Button, GPIO. IN, GPIO. PUD_UP) GPIO.setup (takePicbuttonLed, GPIO. OUT) GPIO.setup (postSNLed, GPIO. OUT) GPIO.setup (kanselahin ButtonLed, GPIO. OUT) # Mga setting ng Twitter def get_api (cfg): auth = tweepy. OAuthHandler (cfg ['consumer_key'], cfg ['consumer_secret']) auth.set_access_token (cfg ['access_token'], cfg ['access_token_secret']) ibalik ang tweepy. API (auth) # Ipadala sa twitter def sendToTwitter (): cfg = {"con sumer_key ":" "," consumer_secret ":" "," access_token ":" "," access_token_secret ":" "} api = get_api (cfg) # Status Message tweet =" MagicBox itinuturo na pagsubok. #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']) # Kumuha ng token ng pahina sa mag-post bilang pahina. Maaari mong laktawan # ang sumusunod kung nais mong mag-post tulad ng iyong sarili. resp = graph.get_object ('me / accounts') page_access_token = Wala para sa pahina sa resp ['data']: kung pahina ['id'] == cfg ['page_id']: page_access_token = page ['access_token'] graph = facebook. GraphAPI (page_access_token) return graph # Ipadala sa facebook def sendToFacebook (): #Values para sa pag-access sa cfg = {"page_id": "", "access_token": ""} api = get_api_facebook (cfg) caption = "I-caption ang imahe na" albumid = "" api.put_photo (image = open ("pushTesting.jpg", "rb"), caption = "I-caption ang imahe ") # Magaan lang ang TakePic ButtonLed def onlyTakePicLed (): GPIO.output (takePic ButtonLed, True) GPIO.output (postSNLed, False) GPIO.output (cancel ButtonLed, False) # Banayad lamang ang Kanselahin at pindutan ng SocialNetwork def cancelPostLEDS (): GPI O.output (takePic ButtonLed, False) GPIO.output (postSNLed, True) GPIO.output (kanselahin ButtonLed, True) # Blink kumuha ng larawan LED habang binibilang ang def countTimerPicture (): GPIO.output (takePic ButtonLed, True) pagtulog (0.5) GPIO.output (takePic ButtonLed, Mali) pagtulog (0.5) GPIO.output (takePic ButtonLed, True) pagtulog (0.5) GPIO.output (takePicbuttonLed,Maling) pagtulog (0.5) GPIO.output (takePic ButtonLed, True) pagtulog (0.5) GPIO.output (takePic ButtonLed, Mali) # Blink postSNLed habang nag-post sa mga social network def blinkPosting (stop_event): # Magsimula habang (hindi stop_event.is_set ()): print ("off") GPIO.output (postSNLed, Mali) pagtulog (0.5) print ("on") GPIO.output (postSNLed, True) pagtulog (0.5) def timer (): GPIO.output (takePic ButtonLed, True) pagtulog (1) GPIO.output (postSNLed, True) pagtulog (1) GPIO.output (kansang ButtonLed, True) pagtulog (1) def showAllLeds (): GPIO.output (takePic ButtonLed, True) GPIO.output (postSNLed, True) GPIO.output (kanselahin ang ButtonLed, Tama) # Ipakita ang isang preview sa layer 1 def displayPreview (imgName): # Dahil ang palabas sa imahe ng PIL ay isang crap # ginagamit namin ang overlay mula sa camera upang maipakita ang # ang preview 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 # Ipakita ang isang preview sa layer 3 def displayPreview3 (imgName): # Dahil ang palabas sa imahe ng PIL ay isang crapp # ginagamit namin ang overlay mula sa camera upang ipakita ang # ang preview 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') # Lumikha Overlay pad = Image.new ('RGB', (((imgsn.size [0] + 31) // 32) * 32, ((imgsn.size [1] + 15) // 16) * 16,)) # Idikit ang overlay pad.paste (imgsn, (0, 0)) ov = camera.add_overlay (pad.tobytes (), laki = imgsn.size) ov.alpha = 100 ov.layer = 3 return ov # Function to overlay image def overlayCounter (): #load images img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.png') # Lumikha ng isang overlay # Ginamit gamit ang img1 sapagkat ang lahat ay pareho ang laki ng pad = Image.new ('RGB', (((img1.size [0] + 31) // 32) * 32, ((img1.size [1] + 15) // 16) * 16,)) # i-paste ang overlay - 3 pad.paste (img1, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img1.size) ov.alpha = 200 # layer ay 3 dahil ang preview ng camera ay nasa layer 2 ov.layer = 3 pagtulog (1) camera.remove_overlay (ov) # i-paste ang overlay - 2 pad.paste (img2, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img2.size) ov.alpha = 200 # layer ay 3 dahil ang preview ng camera ay nasa layer 2 ov.layer = 3 pagtulog (1) camera.remove_overlay (ov) # paste ang overlay - 1 pad.paste (img3, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img3.size) ov.alpha = 200 # layer ay 3 dahil ang preview ng camera ay nasa layer 2 ov.layer = 3 pagtulog (1) camera.remove_overlay (ov) # Pangunahing pagpapaandar # I-clear ang screen upang ang mga mensahe ng boot ay wala # marahil ay mas mahusay na gawin ito sa bash tmp = sp.call ('malinaw', 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' # Pagsubok dito subukan: habang (Totoo): camera.start_preview () #Show LED Lamang para sa Kumuha ng Larawan lamangTakePicLed () # Maghintay para makuha ang pindutan Larawan GPIO.wait_for_edge (takebutton, GPIO. FALLING) # Magsimula ng isang thread upang mabilang sa mga LED habang ipinapakita ang mga imahe ay hindi # magiging pareho _thread.start_new_thread (countTimerPicture, ()) # Ipakita ang mga overlay ng larawan sa overlay ng larawan ng cameraCounter () # Ipakita ang lahat ng LEDS habang kinukuha ang picture showAllLeds () camera.capture ('pushTesting.jpg') camera. stop_preview () #display display ng imahePreview ('pushTesting.jpg') # Ipakita ang overlay oo = overlaysn () # Ipakita ang mga LED upang Kanselahin o I-post sa mga Social Networks kanselahinPostLEDS () GPIO.add_event_detect (socialNetwork Button, GPIO. FALLING) GPIO.add_event_detect (Button, GPIO. FALLING) habang (Totoo): kung GPIO.event_detecte d (socialNetwork Button): camera.remove_overlay (oo) GPIO.output (cancel ButtonLed, False) o = displayPreview3 ('Aenviar.png') #print "Button ng Mga Social Network" sendToTwitter () sendToFacebook () camera.remove_overlay (o) masira kung GPIO.event_detected (canContact Button): #print "Cancelled" camera.remove_overlay (oo) break # reset GPIOS GPIO.remove_event_detect (socialNetwork Button) GPIO.remove_event_detect (cancel Button) GPIO.remove_event_detect (takebutton) camera.stop buksan "Exited…") #offLeds () GPIO.cleanup ()

Hakbang 12: Mga kable

Image
Image
Kable
Kable
Kable
Kable

Ang mga kable ay kable lang ng mga pindutan ng Big Dome Push sa Raspberry PI.

Sundin lamang ang Fritzing Schematic.

Ang mga koneksyon ay:

KoneksyonRPI GPIO PIN GND Green Push ButtonGND (# 3) GND Yellow Push ButtonGND (# 9) GND Blue Push ButtonGND (# 39) Kumuha ng Larawan (Blue Push Button na "Push to make") 17 (BCM) Mag-post sa Mga Social Network (Green Push Button na "Push to make") 23 (BCM) Kanselahin (Yellow Push Button "Push to make") 24 (BCM) Blue Push button LED27 (BCM) Green Push button LED22 (BCM) Yellow Push button LED5 (BCM)

Ang pag-urong din ng init ay naka-code sa kulay

  • Itim ay mga koneksyon sa GND
  • Ang dilaw ay mga "push to make" na koneksyon
  • Ang asul ay mga koneksyon sa LED

Mga numero ng GPIO. BCM kumpara sa mga koneksyon sa GPIO. BOARD

Dahil ang aking mga koneksyon ay BCM, sa palagay ko ngayon ay isang magandang panahon upang pag-usapan ito at ang pagkakaiba sa pagitan ng BCM at BOARD.

Ang pangunahing pagkakaiba ay kung paano ka sumangguni sa mga GPIO PIN, na siya namang ang magdadala sa kung paano mo gagawin ang mga koneksyon. Ire-refer ng GPIO.board ang mga PIN sa pamamagitan ng bilang na nakalimbag sa anumang layout ng GPIO sa internet.

Ang GPIO. BCM ay tumutukoy sa mga numero ng PIN habang nakikita sila ng Broadcom SOC. Malamang na magbabago ito kasama ang mga mas bagong bersyon ng Raspberry PI.

Sa site ng pinout.xyz, ang mga numero ng board ay ang nasa tabi mismo ng mga pin at ang BCM ay tinukoy nang ganoon - BCM X (kung saan X ang numero)

Hakbang 13: Ang MagicBox

Ang nakalakip na code sa hakbang na ito ay ang panghuli.

Maaari mong patakbuhin ito sa raspberry PI boot, nang hindi mo kailangang mag-login. Upang magawa iyon, lumikha lamang ng maliit na script sa direktoryong inilagay mo ang code - baguhin ang mga landas nang naaayon

#! / baseng / bash

cd / home / pi / magicbox python MagicBox.py

Gawin itong maipapatupad

chmod + x start_magicbox.sh

Ngayon, tawagan ito sa /etc/rc.local, bago ang exit 0 instuction

sudo vi /etc/rc.local

/home/pi/magicbox/start_magicbox.sh &

I-save at mag-quit.

Ngayon, sa bawat pag-reboot, ang programa ng Python ay isasagawa

TANDAAN: Ang lahat ng mga file ng imahe ay dapat na nasa parehong direktoryo ng script. Kailangan mong magkaroon ng:

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

Maaari mong makuha ang lahat ng mga file na ito sa MagicBox's github.

Inirerekumendang: