Talaan ng mga Nilalaman:
- Mga gamit
- Hakbang 1: Bumuo
- Hakbang 2: Camera
- Hakbang 3: Subaybayan
- Hakbang 4: Pagdekorasyon
- Hakbang 5: Programming
- Hakbang 6: Paghahanda ng Raspberry PI
- Hakbang 7: Software
- Hakbang 8: Programming - Preview ng Camera
- Hakbang 9: Programming - Button ng Push ng Big Dome
- Hakbang 10: Mag-post sa Twitter
- Hakbang 11: Pagsasama-sama ng Ilang Mga Sangkap
- Hakbang 12: Mga kable
- Hakbang 13: Ang MagicBox
Video: RaspberryPI Photo Camera - MagicBox: 13 Hakbang (na may Mga Larawan)
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-31 10:25
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
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
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
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
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
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
- Piliin ang pagpipilian 5 - Mga Pagpipilian sa Interfacing
- Pumili ng P1 - Paganahin / Huwag paganahin ang koneksyon sa Raspberry PI camera
- Sabihin mong Oo
- para sa OK
- Piliin ang Tapusin
- 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
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
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
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
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
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:
Robot Car Na May Bluetooth, Camera at MIT App Inventor2: 12 Mga Hakbang (na may Mga Larawan)
Robot Car With Bluetooth, Camera and MIT App Inventor2: Nais mo bang bumuo ng iyong sariling robot car? Kaya … ito ang iyong pagkakataon !! Sa Instructable na ito, lalakad kita sa kung paano gumawa ng isang Robot Car na kinokontrol sa pamamagitan ng Bluetooth at MIT App Inventor2. Magkaroon ng kamalayan na ako ay isang newbie at na ito ang aking unang instuc
Paano Mag-disassemble ng isang Computer Na May Madaling Hakbang at Mga Larawan: 13 Hakbang (na may Mga Larawan)
Paano Mag-disassemble ng isang Computer Na May Madaling Mga Hakbang at Larawan: Ito ay isang tagubilin tungkol sa kung paano i-disassemble ang isang PC. Karamihan sa mga pangunahing sangkap ay modular at madaling matanggal. Gayunpaman mahalaga na maging maayos ka tungkol dito. Makakatulong ito upang maiwasan ka sa pagkawala ng mga bahagi, at sa paggawa din ng muling pagsasama
RasbperryPi Car Na May FPV Camera. Kontrol sa pamamagitan ng Web Browser: 31 Mga Hakbang (na may Mga Larawan)
RasbperryPi Car Na May FPV Camera. Kontrol sa pamamagitan ng Web Browser: Kami ay magtatayo ng 4wd kotse - ang pagpipiloto ay magiging katulad tulad ng sa isang tangke - upang iikot ang isang gilid ng gulong ay paikutin na may iba't ibang bilis kaysa sa iba. Sa kotse ay ilalagay ang camera sa espesyal na may-ari kung saan maaari naming baguhin ang posisyon ng camera. Ang robot ay magiging c
Pag-hack sa TV Tuner upang Basahin ang Mga Larawan sa Daigdig Mula sa Mga Satellite: 7 Mga Hakbang (na may Mga Larawan)
Pag-hack sa TV Tuner upang Basahin ang Mga Larawan sa Daigdig Mula sa Mga Satellite: Mayroong maraming mga satellite sa itaas ng aming mga ulo. Alam mo ba, na ang paggamit lamang ng Iyong computer, TV Tuner at simpleng DIY antena Maaari mong matanggap ang mga pagpapadala mula sa kanila? Halimbawa ng mga real time na larawan ng mundo. Ipapakita ko sa iyo kung paano. Kakailanganin mo ang: - 2 w
Recycled Digital Photo Frame Na May Virtual na Pare-pareho: 7 Mga Hakbang (na may Mga Larawan)
Recycled Digital Photo Frame Sa Virtual na Pare-pareho: Kumusta ang lahat! Ang itinuturo na ito ay ipinanganak mula sa isang laptop na nahati sa kalahati, binili mula sa isang kaibigan. Ang unang pagtatangka ng naturang proyekto ay ang aking Lego Digital Photo Frame, subalit, bilang isang masigasig na gumagamit ng Siri at Google Ngayon, napagpasyahan kong dalhin ito sa isang bagong