INHOUDSOPGAWE:

RaspberryPI -fotokamera - MagicBox: 13 stappe (met foto's)
RaspberryPI -fotokamera - MagicBox: 13 stappe (met foto's)

Video: RaspberryPI -fotokamera - MagicBox: 13 stappe (met foto's)

Video: RaspberryPI -fotokamera - MagicBox: 13 stappe (met foto's)
Video: Pi2AES _(Z Reviews)_ Magical Signal Box from the Future 2024, November
Anonim
Image
Image
Bou
Bou

Ek het 'n rukkie gelede 'n gekke idee gehad om 'n fotografiese masjien uit 'n Framboos PI te maak. In my stad was daar 'n klein vertoning waar mense gaan wys wat hulle met elektronika, rekenaars, ens. Maak, of wat hulle gemaak het … Ek was soos 'n arm man se Maker Faire, maar in 'n plaaslike omgewing.

Die een het gekom, en saam met my vrou bou ons hierdie ding.

Hoe werk dit ?

U druk die blou knoppie - dit begin knip - en na 3 sekondes word 'n foto geneem. Aan die ander kant van die kamera is 'n monitor wat 'n aftelling toon en nadat die foto geneem is, 'n voorskou van die foto.

U kan nou kies om dit na Twitter en Facebook te stuur of te kanselleer en weer te probeer. Dit is so eenvoudig.

Alles is in Python geprogrammeer, met behulp van die PI -framebuffer - geen Xorg, geen GUI word gebruik nie.

Hier is 'n video van die projek wat werk

Voorrade

  • Framboos PI (ek gebruik weergawe 2)
  • Framboos PI -kamera (gebruik weergawe 1)
  • 3x Big Dome -knoppies
  • TFT/LCD -monitor met VGA/HDMI
  • MDF
  • Metaal skarniere, skroewe, ens.
  • Kraggereedskap
  • Spaar tyd en baie plesier

Stap 1: Bou

Bou
Bou
Bou
Bou

Dit was lekker om dit te bou. Baie sny, verf en boor.

Ek het MDF -panele gebruik om die basiese struktuur van die kamera te bou. Hulle is lig en maklik om mee te werk. Dit was ook een houtsoort wat die lasermasjien by die plaaslike Fablab kon sny.

Die toegang tot die binnekant van die bedrading is deur die monitorkant gemaak, met behulp van hidrouliese skarniere, sodat hulle kon help om die monitor op te lig.

Stap 2: kamera

Kamera
Kamera
Kamera
Kamera
Kamera
Kamera

Kamera

Die kamera is 'n boks met die volgende afmetings: 60cm x 40cm x 30cm Die uwe kan kleiner, groter wees, dit is aan u. U hoef net die monitor wat u gaan gebruik, te akkommodeer. Die MDF -panele is laser gesny by die plaaslike Fablab. Daar is 3 gate aan die agterkant nodig - twee groot koepelknoppies en een vir die monitor. Voor, 2 gate - een vir 'n groot drukknop en nog een - kleiner - vir die Raspberry PI -kamera. Ek het nie spesifieke metings nie - stel jou net 'n kamera voor en gebruik dit.

Stap 3: Monitor

Monitor
Monitor
Monitor
Monitor
Monitor
Monitor

Monitor

Die monitorsteun is gemaak om klein stukkies hout by te voeg om dit binne die afmetings te ondersteun.

Dit is van die plastiekbehuizing verwyder en met skroewe vasgemaak. Om dit te help lig, is twee hidrouliese skarniere (gebruik) gebruik.

Stap 4: Versier

Versier
Versier
Versier
Versier
Versier
Versier
Versier
Versier

Aangesien ek baie van die styl van my Fuji X-T30 hou, het ons iets soortgelyks gedoen.

Ons het dit eers met skuim bedek en daarna met swart verf gespuit. Na die verf het ons aluminiumfoelie vir die silwer dele bygevoeg en toegedraai

Om die lens te simuleer, gebruik ons net 'n ronde Tupperware, waar ons 'n klein gaatjie vir die Raspberry PI -kameramodule sit.

Stap 5: Programmering

Die programmering van die kamera was 'n uitdaging, maar dit was baie lekker.

Daar is geen GUI nie - dit werk op die CLI en werk op Python weergawe 3.

Ek het eers die knoppies getoets en geprogrammeer, daarna is foto's geneem met die gereedskap wat reeds verskaf is en die Python API. Ek het toe oorgegaan om foto's in die kamera -uitset te bedek (vir die aftelling) en daarna met Twitter en Facebook te kommunikeer.

Nadat ek gemaklik daarmee was, het ek al die stukke soos 'n legkaart bymekaargemaak. Hier gaan ons met dieselfde proses. Begin stadig en klein en gaan na vinnig en groot.

Laat ons eers begin met die opstel van die Raspberry PI

Stap 6: Berei die Framboos -PI voor

Voorbereiding van die Framboos PI
Voorbereiding van die Framboos PI
Voorbereiding van die Framboos PI
Voorbereiding van die Framboos PI
Voorbereiding van die Framboos PI
Voorbereiding van die Framboos PI

Ek gaan nie verduidelik hoe om Raspbian op die Raspberry PI te installeer nie - daar is baie tutoriale, selfs op die Raspberry PI amptelike webwerf.

U hoef net toegang tot SSH te hê, of om dit aan 'n monitor te koppel en 'n sleutelbord en muis aan te sluit.

OPMERKING: As u met die Raspberry PI -kamera begin, moet u dit op 'n monitor aansluit. Tot daar kan al die stappe gedoen word met behulp van SSH.

Nadat u u Raspberry PI opgestart het, moet ons die Raspberry PI -kamera aktiveer. Laat ons daarvoor 'n raspi-config-instrument gebruik.

sudo raspi-config

  1. Kies opsie 5 - koppelvlakopsies
  2. Kies P1 - Aktiveer/deaktiveer verbinding met die Raspberry PI -kamera
  3. Sê ja
  4. vir OK
  5. Kies Voltooi
  6. Kies Ja om nou weer te begin

Na die herlaai kan ons voortgaan

Stap 7: sagteware

Ons benodig 'n paar Python -biblioteke om geïnstalleer te word. Dit is opgedateer vir die nuutste Raspbian -weergawe - Buster

Laat ons Python 3 as standaard instel. Volg hierdie skakel om te weet hoe u SYSTEM WIDE instel

Biblioteke:

  • python-pil.imagetk om beelde te manipuleer
  • python-rpi.gpio om toegang tot die GPIO-PINS te verkry
  • python-picamera om toegang te verkry tot die Framboos PI-kamera
  • Tweepy om die foto met Twitter te deel
  • facebook-sdk om met 'n Facebook-bladsy te deel

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

Gebruik Python pip om facebook-sdk te installeer

sudo pip3 installeer facebook-sdk

Stap 8: Programmering - Voorskou van die kamera

Image
Image
Programmering - Voorskou van die kamera
Programmering - Voorskou van die kamera
Programmering - Voorskou van die kamera
Programmering - Voorskou van die kamera

Een van die vereistes wat ek aan hierdie projek gestel het, was dat hierdie program in die CLI -modus uitgevoer moes word. Ons moet dus die kamerabeeld op die konsole vertoon. Hiervoor gebruik ons Python Picamera. Laat ons daarna pil.imagetk gebruik om 'n overlay bo -op die voorskou van die kamera te vertoon

Ons klein program (ons gaan klein programme ontwikkel tot aan die einde een groot) sal die voorskou van die kamera vertoon.

#!/usr/bin/env python

import time import picamera from time import sleep camera = picamera. PiCamera () # Stel die resolusie in wat u wil hê camera.resolution = (1280, 1024) camera.framerate = 24 camera.start_preview () try: while (True): sleep (1) behalwe (KeyboardInterrupt, SystemExit): druk ("Uitgang …") camera.stop_preview ()

Om dit te probeer, voer dit net uit

python kameraPreview.py

Voorbeeld van die kamera met prente bo -op

Aangesien ek 'n aftelling wou hê voordat ek die foto neem, het ek beelde nodig wat die voorskou van die kamera oorvleuel.

Skep 'n-p.webp" />

Die volgende kode oorvleuel 1-p.webp

import picameraf vanaf PIL import Image from time import sleep with picamera. PiCamera () as camera: camera.resolution = (1920, 1080) camera.framerate = 24 camera.start_preview () # load image img = Image.open ('1-p.webp

Probeer dit:

python imageOverlay.py

Kom ons maak nou 'n aftelling met oorlegbeelde. Net soos jy die 1-p.webp

Gebruik daarna net die volgende kode:

voer picamera in

vanaf PIL invoer Beeld van tyd af slaap met picamera. PiCamera () as kamera: camera.resolution = (1280, 1024) camera.framerate = 24 camera.start_preview () # load image img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.png') # create pad = Image.new ('RGB', (((img1.size [0] + 31) / / 32) * 32, ((img1.size [1] + 15) // 16) * 16,)) pad.paste (img1, (0, 0)) o = camera.add_overlay (pad.tobytes (), grootte = img1.size) o.alpha = 128 o.layer = 3 slaap (2) #verwyder vorige overlay camera.remove_overlay (o) pad.paste (img2, (0, 0)) o = camera.add_overlay (pad. tobytes (), grootte = img2.size) o.alpha = 128 o.layer = 3 slaap (2) # verwyder vorige overlay camera.remove_overlay (o) pad.paste (img3, (0, 0)) o = kamera. add_overlay (pad.tobytes (), size = img3.size) o.alpha = 128 o.layer = 3 slaap (2)

Voer dit nou uit:

python imageOverlayCounter.py

En kyk na die aftelling

Sjoe - baie kode en geen foto geneem nie … Kom ons los dit op deur alles saam te voeg - voorskoukamera, aftelling en neem 'n foto

import picameraf vanaf 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.-p.webp

Probeer dit:

python pictureWithTimer.py

En hier het ons Yoda

Stap 9: Programmering - Big Dome -drukknop

Programmering - Big Dome -drukknop
Programmering - Big Dome -drukknop
Programmering - Big Dome -drukknop
Programmering - Big Dome -drukknop

Die drukknop met 'n groot koepel is 'n groot ronde knoppie - met 'n deursnee van ongeveer 100 mm met 'n klein LED. Dit sê dat dit op 12V werk, maar die 3.3v van die Raspberry PI is genoeg om dit te verlig

Gebruik die skema vir toetsing

Die kode:

vanaf RPi invoer GPIO

takeButton = 17 ledButton = 27 GPIO.setmode (GPIO. BCM) GPIO.setup (takeButton, GPIO. IN, GPIO. PUD_UP) GPIO.setup (ledButton, GPIO. OUT) #Ligte geleide GPIO.output (ledButton, True) # Blokkeringsfunksie GPIO.wait_for_edge (takeButton, GPIO. FALLING) druk ("Knoppie ingedruk") GPIO.output (ledButton, False) GPIO.cleanup ()

Enkele verduidelikings van die kode Een van die vorme om waardes uit GPIOS te kry, is deur onderbrekings (ander is peiling) - randopsporing.

Die rand is die naam van die oorgang van HOOG na LAAG (valrand) of LAAG na HOOG (stygende rand). As die PIN aan niks gekoppel is nie, sal enige lees ongedefinieer word. 'N Oplossing is om 'n op-/afweerstand in die genoemde PIN te hê. Met die Raspberry PI kan u optel-/afwaartse weerstande via sagteware instel.

Die lyn

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

stel die PIN op om dit te doen - trek op

Hoekom trek? Die groot koepel -drukknoppie het 2 PIN's - druk om te breek of druk om te maak (net soos die klein drukknoppies wat gereeld saam met Arduino/Raspberry PI -kits kom). Ek het dit met die 'druk om te maak' PIN van die knoppie bedraad. As dit ingedruk word, sluit die stroombaan en gaan elektrisiteit verby (normaalweg oop).

Die lyn

GPIO.wait_for_edge (takeButton, GPIO. FALLING)

sal wag (effektief die uitvoering van die script opskort) totdat dit die val van die PIN opspoor - deur die knoppie los te maak, sal die stroom vloei en die PIN sal van 3.3v na 0v gaan

Die LED -PIN is net om die LED op die knoppie aan te steek

Meer inligting oor drukskakelaars van Arduino Tutorials, Wikipedia oor druk om te maak of druk om te breek en GPIO -onderbrekings

Kom ons kombineer nou 'n drukknoppie met die kamera - Neem slegs 'n foto as u op die knoppie druk

invoer van die kamera af vanaf die tyd slaap vanaf RPi invoer GPIO vanaf PIL invoer Beeld # OPMERKING: dit is die kanselleerknoppie in die hoofprogram # Ek gebruik dit net hier ter wille van die duidelikheid in die 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) slaap (1) def offLeds (): GPIO.output (ledCancel, False) # Funksie om beeld def overlayCounter (): # laai beelde img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.png') # Skep 'n oorleg * 32, ((img1.size [1] + 15) // 16) * 16,)) # plak die overlay - 3 pad.paste (img1, (0, 0)) ov = camera.add_overlay (pad.tobytes (), grootte = img1.size) ov.alpha = 200 # laag is 3 omdat kamera voorskou op laag 2 ov.layer = 3 slaap (1) camera.remove_overlay (ov) # plak die overlay - 2 pad.paste (img2, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img2.size) ov.alpha = 200 # laag is 3 omdat kamera voorskou op laag 2 ov.layer = 3 slaap (1) camera.remove_overlay (ov) # plak die overlay - 1 pad.paste (img3, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img3.size) ov.alpha = 200 # laag is 3 omdat kamera voorskou is op laag 2 ov.layer = 3 slaap (1) camera.remove_overlay (ov) kamera = 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 ()

'N Bietjie kode verduideliking

Dit begin die voorskou van die kamera en wag daar totdat 'n knoppie ingedruk word. Nadat die knoppie ingedruk is, brand die LED en begin die aftelling. By die einde word die foto geneem en die LED is af

Stap 10: Plaas op Twitter

Plaas op Twitter
Plaas op Twitter
Plaas op Twitter
Plaas op Twitter
Plaas op Twitter
Plaas op Twitter

Nou gaan ons Python gebruik en 'n tweet tweet!:) Jy benodig 'n prentjie om te plaas - kies verstandig.

Eerstens moet ons toegang kry tot Twitter API en daarvoor moet ons 'n APP skep. Gaan na https://apps.twitter.com en skep 'n nuwe toepassing.

U moet aansoek doen vir 'n ontwikkelaarrekening - vul 'n paar vrae in en bevestig u e -posadres. Daarna kan u 'n nuwe APP skep.

Nadat u die APP geskep het, navigeer u na sleutels en tokens en genereer 'n toegangstoken en toegangstokengeheim. Daar sal 'n venster verskyn met die sleutels SLEGS SLEGS - KOPIERE HULLE EN STAAN HULLE LATER.

Gebruik die volgende kode om 'n foto na u Twitter -rekening te stuur. Moenie vergeet om in te vul nie:

  • verbruikersleutel
  • verbruiker_geheim
  • toegangsteken
  • access_token_secret

Twitter -boodskap is die teks wat u in die tweet moet stuur.

jpg_foto_to_send is 'n prentjie wat aan die tweet geheg sal word. Sit 'n prentjie in dieselfde gids as die Python -skrif en verander die naam in die kode.

invoer tweepy # Twitter -instellings def get_api (cfg): auth = tweepy. OAuthHandler (cfg ['consumer_key'], cfg ['consumer_secret']) auth.set_access_token (cfg ['access_token'], cfg ['access_token_secret']) terugkeer tweepy. API (auth) # Stuur na twitter def sendToTwitter (): cfg = {"consumer_key": "", "consumer_secret": "", "access_token": "", "access_token_secret": ""} api = get_api (cfg) # Statusboodskap tweet = "Twitter -boodskap" status = api.update_with_media ("jpg_foto_to_Send", tweet) sendToTwitter ()

Kyk na u Twitter -feed vir u tweet.

Hier is die Tweet

Of blaas:

#FramboosPI MagicBox. Neem foto's, hersien dit en kies om dit na Twitter en Facebook te stuur. Aangedryf deur Framboos PI. @@ Raspberry_Pi#RaspberryPI#RaspberryPIProjectpic.twitter.com/cCL33Zjb8p

- Bruno Ricardo Santos (@feiticeir0) 29 Februarie 2020

Stap 11: Kombineer sommige elemente

'N Paar elemente kombineer
'N Paar elemente kombineer
'N Paar elemente kombineer
'N Paar elemente kombineer

Kom ons kombineer nou die Big Dome -drukknop, druk daarop, tel af, neem 'n foto, besluit of u dit na Twitter wil stuur of nie.

Ons sal nog 'n bedekking byvoeg en al drie drukknoppies gebruik. As die foto geneem word, sal al die drie knoppies LED's brand.

Ons voeg nog 'n prentjie by, wat die ikone wys om op sosiale netwerke te plaas

SelectOption-p.webp

Aenviar-p.webp

In die video word die blou drukknoppie (voorkant die kamera) nie gewys nie, maar die LED is aan en dit begin flikker sodra dit ingedruk word.

Die kode is aangeheg as u dit verkies

Dit is die finale toetskode voor die hoofprogram.

# kodering = utf-8 invoer picamera invoer _draad invoer subproses as sp van tyd af slaap slaap van RPi invoer GPIO van PIL invoer Beeld invoer threading # Twitter invoer tweepy # Facebook invoer facebook # Knoppie om foto te neem takeButton = 17 # SocialNetwork Button socialNetworkButton = 23 # Kanselleer Foto cancelButton = 24 # Neem knoppie LED takePicButtonLed = 27 # Plaas op knoppie Social Network LED postSNLed = 22 # Kanselleer knoppie 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 -instellings def get_api (cfg): auth = tweepy. OAuthHandler (cfg ['consumer_key'], cfg ['consumer_secret']) auth.set_access_token (cfg ['access_token'], cfg ['access_token_secret']) terugkeer tweepy. API (auth) # Stuur na twitter def sendToTwitter (): cfg = {"con sumer_key ":" "," consumer_secret ":" "," access_token ":" "," access_token_secret ":" "} api = get_api (cfg) # Status Message tweet =" MagicBox instructable testing. #MagicBox #RaspberryPI #Raspberry #Instructables "status = api.update_with_media (" pushTesting.jpg ", tweet) #Facebook AOde def get_api_facebook (cfg): graph = facebook. GraphAPI (cfg ['access_token']) #Kry bladsy token na plaas as die bladsy. U kan # die volgende oorslaan as u as u self wil plaas. resp = graph.get_object ('ek/rekeninge') page_access_token = Geen vir bladsy in resp ['data']: if page ['id'] == cfg ['page_id']: page_access_token = bladsy ['access_token'] grafiek = facebook. GraphAPI (page_access_token) teruggrafiek # Stuur na facebook def sendToFacebook (): #Waardes vir toegang cfg = {"page_id": "", "access_token": ""} api = get_api_facebook (cfg) caption = "Caption the image" albumid = "" api.put_photo (image = open ("pushTesting.jpg", "rb"), caption = "Caption the image ") # Slegs slegs TakePicButtonLed defTakePicLed (): GPIO.output (takePicButtonLed, True) GPIO.output (postSNLed, False) GPIO.output (cancelButtonLed, False) # Slegs lig Kanselleer en SocialNetwork -knoppie def kanselleer PostLEDS (): GPI O.output (takePicButtonLed, False) GPIO.output (postSNLed, True) GPIO.output (cancelButtonLed, True) # Blink neem foto -LED terwyl aftelling def countingTimerPicture (): GPIO.output (takePicButtonLed, True) slaap (0.5) GPIO.output (takePicButtonLed, False) slaap (0.5) GPIO.output (takePicButtonLed, True) slaap (0.5) GPIO.output (takePicButtonLed,Onwaar) slaap (0.5) GPIO.output (takePicButtonLed, True) slaap (0.5) GPIO.output (takePicButtonLed, False) # Knipper postSNLed terwyl u na sosiale netwerke plaas, def blinkPosting (stop_event): # Begin terwyl (nie stop_event.is_set ()): druk ("af") GPIO.output (postSNLed, False) slaap (0.5) print ("on") GPIO.output (postSNLed, True) slaap (0.5) def timer (): GPIO.output (takePicButtonLed, True) slaap (1) GPIO.output (postSNLed, True) slaap (1) GPIO.output (cancelButtonLed, True) slaap (1) def showAllLeds (): GPIO.output (takePicButtonLed, True) GPIO.output (postSNLed, True) GPIO.output (cancelButtonLed, True) # Wys 'n voorskou op laag 1 def displayPreview (imgName): # Aangesien die PIL -beeldvertoning 'n onzin is # gebruik ons die oorleg van die kamera om # die voorskou te wys img = Image.open (imgName) padding = Image.new ('RGB', (((afbeeldingsgrootte [0] + 31) // 32) * 32, ((afbeeldingsgrootte [1] + 15) // 16) * 16,)) padding.paste (img, (0, 0)) ov = camera.add_overlay (padding.tobytes (), size = img.size) ov.layer = 1 # Gee 'n voorskou op die laag 3 def displayPreview3 (imgName): # Aangesien die PIL -beeldvertoning 'n crapp is # gebruik ons die overlay van die kamera om # die voorskou 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') # Create Overlay pad = Image.new ('RGB', (((imgsn.size [0] + 31) // 32) * 32, ((imgsn.size [1] + 15) // 16) * 16,)) # Plak die overlay pad. Plak (imgsn, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = imgsn.size) ov.alpha = 100 ov.layer = 3 return ov # Funksie om te bedek image def overlayCounter (): #load images img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.png') # Skep 'n overlay # Gebruik met img1 omdat almal dieselfde grootte pad het = Image.new ('RGB', (((img1.size [0] + 31) // 32) * 32, ((img1.size [1] + 15) // 16) * 16,)) # plak die overlay - 3 pad.paste (img1, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img1.size) ov.alpha = 200 # laag is 3 omdat kamera voorskou op laag 2 ov.layer = 3 slaap (1) camera.remove_overlay (ov) # plak die overlay - 2 pad.paste (img2, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img2.size) ov.alpha = 200 # laag is 3 omdat kamera voorskou op laag 2 ov.layer = 3 slaap (1) camera.remove_overlay (ov) # plak die overlay - 1 pad.pasta (img3, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img3.size) ov.alpha = 200 # laag is 3 omdat die kamera se voorskou op laag 2 is ov.layer = 3 slaap (1) camera.remove_overlay (ov) # Hooffunksie # Maak skerm skoon sodat die opstartboodskappe nie voorkom nie # waarskynlik is dit beter om dit te doen in bash tmp = sp.call ('duidelik', shell = True) 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 = 'gemiddelde' #Toets hier probeer: terwyl (Waar): camera.start_preview () #Show LED Only for Take Picture OnlyTakePicLed () #Wag tot knoppie geneem word Beeld GPIO.wait_for_edge (takeButton, GPIO. FALLING) # Begin 'n draad om met die LED's te tel terwyl die beelde vertoon word # Waarskynlik kan dit gebruik word in die overlayCounter -funksie, # omdat dit ook timers het om die foto's te wys, maar die LED -effekte sou nie # dieselfde wees nie _thread.start_new_thread (countingTimerPicture, ()) # Wys die foto -oortrek in die kamera -beeld -overlayCounter () # Wys alle LED's terwyl die foto showAllLeds () camera.capture ('pushTesting.jpg') kamera geneem word. stop_preview () #display image displayPreview ('pushTesting.jpg') # Show overlay oo = overlaysn () # Show LEDs to Cancel or Post to Social Networks cancelPostLEDS () GPIO.add_event_detect (socialNetworkButton, GPIO. FALLING) GPIO.add_event_detect (cancelButton), GPIO. FALLING) terwyl (Waar): as GPIO.event_detecte d (socialNetworkButton): camera.remove_overlay (oo) GPIO.output (cancelButtonLed, False) o = displayPreview3 ('Aenviar.png') #print "Knoppie sosiale netwerke" sendToTwitter () sendToFacebook () camera.remove_overlay (o) breek as GPIO.event_detected (cancelButton): #print "Gekanselleer" camera.remove_overlay (oo) break # reset GPIOS GPIO.remove_event_detect (socialNetworkButton) GPIO.remove_event_detect (cancelButton) GPIO.remove_event_detect (takeButton) camera (stopButton): "Verlaat …") #offLeds () GPIO.cleanup ()

Stap 12: Bedrading

Image
Image
Bedrading
Bedrading
Bedrading
Bedrading

Die bedrading is net die bedrading van die Big Dome -drukknoppies na die Raspberry PI.

Volg net die Fritzing -skema.

Die verbindings is:

Verbinding RPI GPIO PIN GND Groen drukknop GND (#3) GND Geel drukknop GND (#9) GND Blou drukknop GND (#39) Neem foto (blou drukknop "Druk om te maak") 17 (BCM) Plaas op sosiale netwerke (groen druk Knoppie "Druk om te maak") 23 (BCM) Kanselleer (geel drukknop "Druk om te maak") 24 (BCM) Blou drukknop LED27 (BCM) Groen drukknop LED22 (BCM) Geel drukknop LED5 (BCM)

Die hitte krimp is ook gekodeer

  • Swart is GND -verbindings
  • Geel is 'push to make' verbindings
  • Blou is LED -verbindings

GPIO. BCM -nommers vs GPIO. BOARD -verbindings

Aangesien my verbindings BCM is, dink ek dat dit 'n goeie tyd is om daaroor te praat en die verskil tussen BCM en BOARD.

Die belangrikste verskil is hoe u na die GPIO -PIN's verwys, wat weer die manier waarop u die verbindings doen, sal bestuur. GPIO.board verwys die PIN's na die nommer wat op enige GPIO -uitleg op die internet gedruk is.

GPIO. BCM verwys na die PIN -nommers soos die Broadcom SOC dit sien. Dit sal waarskynlik verander in nuwer weergawes van die Raspberry PI.

Op die pinout.xyz -webwerf is die bordnommers die een langs die penne en die BCM word so verwys - BCM X (waar X die getal is)

Stap 13: Die MagicBox

Die aangehegte kode by hierdie stap is die finale.

U kan dit doen met framboos PI -opstart, sonder om eers aan te meld. Om dit te doen, skep net hierdie klein skrif in die gids waarin u die kode geplaas het - verander paaie dienooreenkomstig

#!/bin/bash

cd/home/pi/magicbox python MagicBox.py

Maak dit uitvoerbaar

chmod +x start_magicbox.sh

Noem dit nou in /etc/rc.local, net voor die afrit 0

sudo vi /etc/rc.local

/home/pi/magicbox/start_magicbox.sh &

stoor en hou op.

Met elke herlaai word die Python -program uitgevoer

LET WEL: Al die prentlêers moet in dieselfde gids as die script wees. U moet:

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

U kan al hierdie lêers by MagicBox se github kry.

Aanbeveel: