Tartalomjegyzék:

RaspberryPI fényképezőgép - MagicBox: 13 lépés (képekkel)
RaspberryPI fényképezőgép - MagicBox: 13 lépés (képekkel)

Videó: RaspberryPI fényképezőgép - MagicBox: 13 lépés (képekkel)

Videó: RaspberryPI fényképezőgép - MagicBox: 13 lépés (képekkel)
Videó: Raspberry Pi High Quality Camera Getting Started Guide - First Pictures and Videos 2024, Július
Anonim
Image
Image
Épít
Épít

Egy ideje eszembe jutott ez az őrült ötlet, hogy fényképészeti gépet készítsek egy málna PI -ből. Városomban volt egy kis műsor, ahol az emberek elmentek és megmutatták, mit készítenek vagy készítettek elektronika, számítógép stb. Segítségével … Olyan voltam, mint egy szegény ember Maker Faire, de helyi szinten.

Egy jött, és a feleségemmel együtt építjük fel ezt a dolgot.

Hogyan működik ?

Nyomja meg a kék gombot - villogni kezd - és 3 másodperc múlva elkészül a kép. A kamera másik oldalán van egy monitor, amely visszaszámlálást mutat, és a kép elkészítése után a fénykép előnézete.

Most választhatja, hogy elküldi -e a Twitterre és a Facebookra, vagy lemondja, és megpróbálja újra. Ez ennyire egyszerű.

Minden a Python -ban van programozva, a PI framebuffer segítségével - nincs Xorg, nincs GUI.

Itt egy videó a projekt működéséről

Kellékek

  • Raspberry PI (a 2 -es verziót használom)
  • Málna PI kamera (az 1. verzió használatával)
  • 3x Big Dome nyomógomb
  • TFT/LCD monitor VGA/HDMI -vel
  • MDF
  • Fém csuklópántok, csavarok stb.
  • Elektromos szerszámok
  • Szabadidő és sok szórakozás

1. lépés: Építsen

Épít
Épít
Épít
Épít

Építeni szórakoztató volt. Sok vágás, festés és fúrás.

MDF paneleket használtam a kamera alapszerkezetének felépítéséhez. Könnyűek és könnyen kezelhetők. Ezenkívül ez volt az egyik fafajta, amelyet a helyi Fablab lézergépe vágni tudott.

A belsejében lévő vezetékekhez a monitor oldalán keresztül lehetett hozzáférni, hidraulikus csuklópántokkal, hogy segítsenek a monitor felemelésében.

2. lépés: Kamera

Kamera
Kamera
Kamera
Kamera
Kamera
Kamera

Kamera

A kamera egy doboz, amelynek méretei: 60cm x 40cm x 30cm A tied lehet kisebb, nagyobb, ez rajtad múlik. Csak be kell illeszteni a használni kívánt monitort. Az MDF paneleket a helyi Fablab lézerrel vágták le. A hátlapon 3 lyukra van szükség - két nagy kupola nyomógombra és egy a monitorra. Elöl 2 lyuk - az egyik egy nagy kupola nyomógombhoz, a másik - kisebb - a Raspberry PI kamerához. Nincsenek konkrét méréseim - csak képzeljen el egy kamerát, és használja azt.

3. lépés: Monitorozás

Monitor
Monitor
Monitor
Monitor
Monitor
Monitor

Monitor

A monitor tartóját kis fadarabok hozzáadásával készítették el, hogy támogassa a méreteit.

Csík volt a műanyag házból, és csavarokkal rögzítette a helyén. Az emelés megkönnyítése érdekében két (használt) hidraulikus csuklópántot használtak.

4. lépés: Díszítés

Díszítés
Díszítés
Díszítés
Díszítés
Díszítés
Díszítés
Díszítés
Díszítés

Mivel nagyon szeretem a Fuji X-T30-as stílusát, elmentünk és csináltunk valami hasonlót.

Először habbal borítottuk be, majd feketére festettük. A festés után az ezüst részekhez alufóliát tettünk, és becsomagoltuk

Az objektív szimulálásához csak egy kerek Tupperware -t használtunk, amikor egy kis lyukat csináltunk a Raspberry PI kameramodul ülésére.

5. lépés: Programozás

A kamera programozása kihívást jelentett, de nagyon szórakoztató volt.

Nincs grafikus felhasználói felület - ez a CLI -n fut, és a Python 3 -as verzióján.

Először a gombok tesztelésével és programozásával kezdtem, majd képeket készítettem a már biztosított eszközök és a Python API segítségével. Ezután áttértem a képek átfedésére a kamera kimenetében (visszaszámláláshoz), majd a Twitter és a Facebook kapcsolatba lépéséhez.

Miután jól éreztem magam, mint egy rejtvény, összeszereltem az összes darabot. Itt ugyanazzal a folyamattal megyünk. Kezdje lassan és kicsiben, és menjen gyorsan és nagyra.

Először is kezdjük a Raspberry PI konfigurálásával

6. lépés: A málna PI előkészítése

A málna PI előkészítése
A málna PI előkészítése
A málna PI előkészítése
A málna PI előkészítése
A málna PI előkészítése
A málna PI előkészítése

Nem fogom elmagyarázni, hogyan kell telepíteni a Raspbian -t a Raspberry PI -re - sok oktatóanyag létezik, még a Raspberry PI hivatalos honlapján is.

Csak SSH hozzáféréssel kell rendelkeznie, vagy csatlakoztatnia kell egy monitorhoz, és csatlakoztatnia kell a billentyűzetet és az egeret.

MEGJEGYZÉS: Amikor a Raspberry PI kamerával kezdi, csatlakoztatnia kell azt a monitorhoz. Addig az összes lépést SSH használatával lehet elvégezni.

A Raspberry PI rendszerben való indítás után engedélyeznünk kell a Raspberry PI kamerát. Ehhez használjunk raspi-config eszközt.

sudo raspi-config

  1. Válassza az 5. opciót - Interfész opciók
  2. Válassza a P1 - Enable/Disable connection to the Raspberry PI camera lehetőséget
  3. Mondj igent
  4. az OK -hoz
  5. Válassza a Befejezés lehetőséget
  6. Válassza az Igen lehetőséget az újraindításhoz

Az újraindítás után folytathatjuk

7. lépés: Szoftver

Szükségünk lesz néhány Python könyvtárra a telepítéshez. Ez frissítve lett a legújabb Raspbian verzióhoz - Buster

Először állítsuk be a Python 3 -at alapértelmezettként. Kövesse ezt a linket, hogy megtudja, hogyan állítsa be a SYSTEM WIDE -t

Könyvtárak:

  • python-pil.imagetk a képek manipulálására
  • python-rpi.gpio segítségével elérheti a GPIO PINS-t
  • python-picamera a Raspberry PI kamera eléréséhez
  • Tweepy, hogy megosszák a fotót a Twitteren
  • facebook-sdk megosztani egy facebook oldalon

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

A Python pip használatával telepítse a facebook-sdk-t

sudo pip3 telepítse a facebook-sdk-t

8. lépés: Programozás - Kamera előnézet

Image
Image
Programozás - Kamera előnézet
Programozás - Kamera előnézet
Programozás - Kamera előnézet
Programozás - Kamera előnézet

A projekt egyik követelménye az volt, hogy a programnak CLI módban kell futnia. Tehát meg kell jelenítenünk a kamera képét a konzolon. Ehhez használjuk a Python Picamera -t. Ezt követően a pil.imagetk segítségével jelenítsünk meg egy fedvényt a kamera előnézetén

Kis programunk (kis programokat fogunk kifejleszteni, amíg egy nagy lesz a végén) megjeleníti a kamera előnézetét.

#!/usr/bin/env python

importálási idő importálása picamera az időimportból alvó kamera = picamera. PiCamera () # Állítsa be a kívánt felbontást camera.resolution = (1280, 1024) camera.framerate = 24 camera.start_preview () try: while (True): sleep (1) kivéve (KeyboardInterrupt, SystemExit): print ("Kilépés …") camera.stop_preview ()

Hogy kipróbáld, csak hajtsd végre

python cameraPreview.py

Tekintse meg a fényképezőgép előnézetét képekkel a tetején

Mivel azt akartam, hogy a visszaszámlálás megjelenjen a kép készítése előtt, szükségem volt a képekre, amelyek átfedik a kamera előnézetét.

Hozzon létre egy-p.webp" />

A következő kód átfedi az 1-p.webp

importálja a picamerafromot a PIL -ből Importálja a képet az időimportálásból a picamera segítségével. PiCamera () mint kamera: camera.resolution = (1920, 1080) camera.framerate = 24 camera.start_preview () # load image img = Image.open ('1-p.webp

Próbáld ki:

python imageOverlay.py

Most hozzunk létre egy visszaszámlálást fedvényképekkel. Az 1-p.webp

Ezután használja a következő kódot:

importálja a kamerát

a PIL importálásból Kép az időimportálásból a picamera segítségével. PiCamera () mint 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 (), size = img1.size) o.alpha = 128 o.layer = 3 sleep (2) #remove előző overlay camera.remove_overlay (o) pad.paste (img2, (0, 0)) o = camera.add_overlay (pad. tobyte (), size = img2.size) o.alpha = 128 o.layer = 3 sleep (2) # távolítsa el az előző overlay kamerát.remove_overlay (o) pad.paste (img3, (0, 0)) o = kamera. add_overlay (pad.tobytes (), size = img3.size) o.alpha = 128 o.layer = 3 alvás (2)

Most hajtsa végre:

python imageOverlayCounter.py

És lásd a visszaszámlálást

Wow - Sok kód és kép nem készült … Oldjuk meg ezt az összes kombinálásával - előnézeti kamera, visszaszámlálás és kép készítése

importálja a picamerafromot a PIL -ből importálja a képet az időimportból alvó def overlayCounter (): # kép letöltése img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.-p.webp

Próbáld ki:

python pictureWithTimer.py

És itt van Yoda

9. lépés: Programozás - Big Dome nyomógomb

Programozás - Big Dome nyomógomb
Programozás - Big Dome nyomógomb
Programozás - Big Dome nyomógomb
Programozás - Big Dome nyomógomb

A nagy kupola nyomógomb egy nagy kerek gomb - körülbelül 100 mm átmérővel, kis LED -del. Azt mondja, hogy 12V -on működik, de a Raspberry PI 3.3V -ja elegendő a világításhoz

Használja a vázlatot a teszteléshez

A kód:

az RPi import GPIO -ból

takeButton = 17 ledButton = 27 GPIO.setmode (GPIO. BCM) GPIO.setup (takeButton, GPIO. IN, GPIO. PUD_UP) GPIO.setup (ledButton, GPIO. OUT) #Light led GPIO.output (ledButton, True) # Blokkoló funkció GPIO.wait_for_edge (takeButton, GPIO. FALLING) print ("Gomb megnyomva") GPIO.output (ledButton, False) GPIO.cleanup ()

A kód néhány magyarázata A GPIOS -ból származó értékek egyik formája a megszakítások (a másik a lekérdezés) - él észlelés.

Az él a HIGH -ról LOW -ra (leeső él) vagy LOW -HIGH -ra (emelkedő él) való átmenet neve. Ha a PIN -kód nincs csatlakoztatva semmihez, akkor minden olvasás nem lesz definiálva. A megoldás az, hogy egy fel/le ellenállás legyen a PIN -kódban. A Raspberry PI lehetővé teszi a fel/le ellenállások konfigurálását szoftveren keresztül.

A vonal

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

konfigurálja ezt a PIN -kódot - húzza fel

Miért kell felhúzni? Nos, a nagy kupola nyomógombnak 2 PIN -kódja van - nyomja meg, hogy megtörjön vagy nyomjon, hogy készítsen (mint a kis nyomógombok, amelyek gyakran az Arduino/Raspberry PI készletekhez tartoznak). Összekötöttem a gomb "push to make" PIN kódjával. Ha megnyomja, az áramkör bezárul, és az áram áthalad (általában nyitva).

A vonal

GPIO.wait_for_edge (takeButton, GPIO. FALLING)

vár (gyakorlatilag felfüggeszti a szkript végrehajtását), amíg észleli a PIN -kód leesését - a gomb felengedése megszakítja az áramlást, és a PIN -kód 3,3 V -ról 0 V -ra változik

A LED PIN -kód csak a gomb LED -jének világítására szolgál

További információ a nyomókapcsolókról az Arduino oktatóanyagokból, a Wikipedia a push to make vagy push to break funkciókról és a GPIO megszakításokról

Most kombináljuk a nyomógombot a kamerával - Készítsen képet csak a gomb megnyomásakor

kép importálása időből importálás alvó állapotból RPi -ből GPIO importálása PIL importálásból Kép # MEGJEGYZÉS: Ez lesz a törlés gomb a főprogramban.setmode (GPIO. BCM) GPIO.setup (takeButton, GPIO. IN, GPIO. PUD_UP) GPIO.setup (ledCancel, GPIO. OUT) def onLeds (): GPIO.output (ledCancel, True) alvás (1) def off (): GPIO.output (ledCancel, False) # A kép átfedésére szolgáló funkció overlayCounter (): #load images img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.png') # Sablon létrehozása # Az img1 -gyel használják, mert mindegyik azonos méretű pad = Image.new ('RGB', (((img1.size [0] + 31) // 32) * 32, ((img1.size [1] + 15) // 16) * 16,)) # illessze be a fedvényt - 3 pad.paste (img1, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img1.size) ov.alpha = 200 # réteg 3, mert a kamera előnézete a 2. rétegen van ov.layer = 3 alvó (1) camera.remove_overlay (ov) # illessze be a fedvényt - 2 pad.paste (img2, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img2.size) ov.alpha = 200 # réteg 3, mert a kamera előnézete a 2. rétegen ov.layer = 3 sleep (1) camera.remove_overlay (ov) # illessze be a fedvényt - 1 pad.paste (img3, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img3.size) ov.alpha = 200 # réteg 3, mert a kamera előnézete a 2. rétegen ov.layer = 3 alvó (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 ()

Egy kis kódmagyarázat

Elindítja a kamera előnézetét, és ott várja, amíg megnyom egy gombot. A gomb megnyomása után a LED kigyullad és megkezdődik a visszaszámlálás. A végéhez érve a kép elkészül, és a LED kialszik

10. lépés: Közzététel a Twitteren

Közzététel a Twitteren
Közzététel a Twitteren
Közzététel a Twitteren
Közzététel a Twitteren
Közzététel a Twitteren
Közzététel a Twitteren

Most a Python segítségével fogunk tweetelni egy tweetben!:) Szükséged lesz egy képre a posztoláshoz - okosan válassz.

Először is hozzá kell férnünk a Twitter API -hoz, és ehhez létre kell hoznunk egy APP -t. Lépjen a https://apps.twitter.com oldalra, és hozzon létre egy új alkalmazást.

Kérnie kell fejlesztői fiókot - töltsön ki néhány kérdést, és erősítse meg e -mail címét. Ezt követően új APP -t hozhat létre.

Az APP létrehozása után keresse meg a Kulcsok és tokenek elemet, és hozzon létre hozzáférési tokent és hozzáférési token titkot. Egy ablak jelenik meg a gombokkal, CSAK EGYSZER - MÁSOLJUK MEG, és Mentsük el őket később.

Használja az alábbi kódot, hogy képet küldjön twitter fiókjába. Ne felejtse el kitölteni:

  • fogyasztó_kulcs
  • fogyasztó_titka
  • access_token
  • access_token_secret

A twitter üzenet a tweetben elküldendő szöveg.

A jpg_foto_to_send egy kép, amelyet csatolni fognak a tweethez. Kérjük, legyen néhány képe ugyanabban a könyvtárban, mint a Python -szkript, és változtassa meg a kód nevét.

tweepy importálása # Twitter beállítások def get_api (cfg): auth = tweepy. OAuthHandler (cfg ['Consumer_key'], cfg ['Consumer_secret']) auth.set_access_token (cfg ['access_token'], cfg ['access_token_secret'] tweepy. API (auth) # Küldés a twitterre def sendToTwitter (): cfg = {"Consumer_key": "", "Consumer_secret": "", "access_token": "", "access_token_secret": "" "api = get_api (cfg) # Állapotüzenet tweet = "Twitter üzenet" állapot = api.update_with_media ("jpg_foto_to_Send", tweet) sendToTwitter ()

Ellenőrizze Twitter -hírcsatornáját a tweethez.

Itt a Tweet

Vagy alább:

#RaspberryPI MagicBox. Készítsen képeket, tekintse át őket, és küldje el őket a Twitterre és a Facebookra. Powered by Raspberry PI. @@ Raspberry_Pi#RaspberryPI#RaspberryPIProject

- Bruno Ricardo Santos (@feiticeir0) 2020. február 29

11. lépés: Egyes elemek kombinálása

Egyes elemek kombinálása
Egyes elemek kombinálása
Egyes elemek kombinálása
Egyes elemek kombinálása

Most kombináljuk a Big Dome Push gombot, lenyomva, visszaszámlálva, készítsünk képet, döntsük el, hogy elküldjük -e a twitterre vagy sem.

Hozzáadunk egy másik fedvényképet, és mindhárom nyomógombot használjuk. A kép készítésekor mind a 3 gomb LED -je kigyullad.

Hozzáadunk egy másik képet, amely a közösségi hálózatokon közzétett ikonokat mutatja

A SelectOption-p.webp

Az Aenviar-p.webp

A videóban nem látható a kék nyomógomb (a fényképezőgép elején), de a LED világít és villogni kezd, amint megnyomja.

A kód mellékelve van, ha úgy tetszik

Ez a végső tesztkód a főprogram előtt.

# coding = utf-8 import picamera import _thread import alfolyamat sp-ként időből import alvó állapot RPi-ből import GPIO a PIL importálásból Image import threading # Twitter import tweepy # Facebook import facebook # Button to take takeButton = 17 # SocialNetwork Button socialNetworkButton = 23 # Cancel Picture cancelButton = 24 # Kép készítése gomb LED takePicButtonLed = 27 # Közzététel a közösségi hálózaton gomb LED postSNLed = 22 # Mégse gomb 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 beállítások def get_api (cfg): auth = tweepy. OAuthHandler (cfg ['fogyasztói_kulcs'], cfg ['fogyasztói_cím']) auth.set_access_token (cfg ['access_token'], cfg ['access_token_secret']) return tweepy. API (auth) # Küldés a twitterre def sendToTwitter (): cfg = {"con sumer_key ":" "," Consumer_secret ":" "," access_token ":" "," access_token_secret ":" "} api = get_api (cfg) # Állapotüzenet tweet =" MagicBox utasítható tesztelés. #MagicBox #RaspberryPI #Málna #Instructables "status = api.update_with_media (" pushTesting.jpg ", tweet) #Facebook AOth def get_api_facebook (cfg): graph = facebook. GraphAPI (cfg ['access_token']) #Oldal beszerzése Ha önmagaként szeretne közzétenni, kihagyhatja # a következőt.] == cfg ['page_id']: page_access_token = page ['access_token'] graph = facebook. GraphAPI (page_access_token) return graph # Küldés a facebook -ra def sendToFacebook (): #Values for access cfg = {"page_id": "", "access_token": ""} api = get_api_facebook (cfg) caption = "Képfelirat" albumid = "" api.put_photo (image = open ("pushTesting.jpg", "rb"), caption = "Kép felirata ") # Csak Light TakePicButtonLed def onlyTakePicLed (): GPIO.output (takePicButtonLed, True) GPIO.output (postSNLed, False) GPIO.output (cancelButtonLed, False) # Csak fény megszakítása és SocialNetwork gomb def cancelPostLEDS (): GPI O.output (takePicButtonLed, False) GPIO.output (postSNLed, True) GPIO.output (cancelButtonLed, True) # Villogás felvétel LED, miközben visszaszámlálja a számlálást.output (takePicButtonLed, False) sleep (0.5) GPIO.output (takePicButtonLed, True) alvás (0.5) GPIO.output (takePicButtonLed,False) sleep (0.5) GPIO.output (takePicButtonLed, True) sleep (0.5) GPIO.output (takePicButtonLed, False) # Blink postSNLed miközben közzétesz a közösségi hálózatokon def blinkPosting (stop_event): # Kezdés közben (nem stop_event.is_set ()): print ("ki") GPIO.output (postSNLed, False) alvás (0.5) print ("on") GPIO.output (postSNLed, True) alvás (0.5) def timer (): GPIO.output (takePicButtonLed, True)) sleep (1) GPIO.output (postSNLed, True) sleep (1) GPIO.output (cancelButtonLed, True) sleep (1) def showAllLeds (): GPIO.output (takePicButtonLed, True) GPIO.output (postSNLed, True) GPIO.output (CancelButtonLed, True) # Előnézeti kép megjelenítése az 1. rétegben def displayPreview (imgName): # Mivel a PIL képsorozat szar # használjuk a fedvényt a kamerából, hogy megjelenítsük # az előnézet 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 # Előnézet megjelenítése a rétegen 3 def displayPreview3 (imgName): # Mivel a PIL képsorozat gagyi 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 # Funkció overlaySocialNetwork def overlaysn (): imgsn = Image.open ('SelectOption.png') # Létrehozás Overlay pad = Image.new ('RGB', (((imgsn.size [0] + 31) // 32) * 32, ((imgsn.size [1] + 15) // 16) * 16,)) # Illessze be a fedőlapot.paste (imgsn, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = imgsn.size) ov.alpha = 100 ov.layer = 3 return ov # Overlay funkció image def overlayCounter (): #load images img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.png') # Overlay létrehozása # Az img1 -el együtt használják, mert mindegyik azonos méretű pad = Image.new ('RGB', (((img1.size [0] + 31) // 32) * 32, ((img1.size [1] + 15) // 16) * 16,)) # illessze be a fedvényt - 3 pad.paste (img1, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img1.size) ov.alpha = 200 # réteg 3, mert a kamera előnézete a 2. rétegen van ov.layer = 3 alvás (1) camera.remove_overlay (ov) # illessze be a fedvényt - 2 pad.paste (img2, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img2.size) ov.alpha = 200 # réteg 3, mert a kamera előnézete a 2. rétegen ov.layer = 3 alvó (1) camera.remove_overlay (ov) # paste a fedvény - 1 pad.paste (img3, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img3.size) ov.alpha = 200 # réteg 3, mert a kamera előnézete a 2 -es rétegen van ov.layer = 3 alvó (1) camera.remove_overlay (ov) # Fő funkció # Törölje a képernyőt, hogy ne jelenjenek meg a rendszerindító üzenetek # valószínűleg jobb lenne ezt bash tmp = sp.call ('clear', shell = True) camera = picamera. PiCamera () camera.resolution = (1280, 1024) camera.framerate = 24 camera.brightness = 55 camera.sharpness = 0 camera.contrast = 0 #camera.exposure_co mpensation = 0 #camera.exposure_mode = 'auto' #camera.meter_mode = 'átlagos' #Tesztelés itt próbálja ki: while (True): camera.start_preview () #Show LED Only for Only onlyTakePicLed () #Várja meg, amíg a gomb elkészül Kép GPIO.wait_for_edge (takeButton, GPIO. FALLING) # Indítson el egy szálat a LED -ek számolásához, miközben a képek láthatók # nem ugyanaz lenne _thread.start_new_thread (countingTimerPicture, ()) # A képek átfedésének megjelenítése a kamera képfedvényébenCounter () # Az összes LED megjelenítése a showAllLeds () camera.capture ('pushTesting.jpg') kamera készítése közben. stop_preview () #display image displayPreview ('pushTesting.jpg') # Overlay megjelenítése oo = overlaysn () # LED -ek megjelenítése a törléshez vagy közzététel a közösségi hálózatokban CancelPostLEDS () GPIO.add_event_detect (socialNetworkButton, GPIO. FALLING) GPIO.add_event_dutton, GPIO. FALLING), míg (True): ha GPIO.event_detecte d (socialNetworkButton): camera.remove_overlay (oo) GPIO.output (cancelButtonLed, False) o = displayPreview3 ('Aenviar.png') #print "Social Networks Button" sendToTwitter () sendToFacebook () camera.remove_overlay (o) break if GPIO.event_detected (cancelButton): #print "Canceled" camera.remove_overlay (oo) break # reset GPIOS GPIO.remove_event_detect (socialNetworkButton) GPIO.remove_event_detect (cancelButton) GPIO.remove_event_donetet (kivétel) (kivétel) "Kilépett …") #offLeds () GPIO.cleanup ()

12. lépés: huzalozás

Image
Image
Vezeték
Vezeték
Vezeték
Vezeték

A huzalozás csak a Big Dome Push gombokat csatlakoztatja a Raspberry PI -hez.

Csak kövesse a Fritzing sémát.

A kapcsolatok a következők:

Csatlakozás RPI GPIO PIN GND zöld nyomógombGND (#3) GND sárga nyomógombGND (#9) GND kék nyomógombGND (#39) Kép készítése (kék nyomógomb "Push to make") 17 (BCM) Hozzászólás a közösségi hálózatokhoz (Green Push) Gomb "Nyomja meg, hogy") 23 (BCM) Mégse (Sárga nyomógomb "Nyomja meg, hogy") 24 (BCM) Kék nyomógomb LED27 (BCM) Zöld nyomógomb LED22 (BCM) Sárga nyomógomb LED5 (BCM)

A hőzsugorodás is színkóddal van ellátva

  • A fekete a GND kapcsolatok
  • A sárga "push to make" kapcsolatok
  • A kék LED -es csatlakozók

GPIO. BCM számok vs GPIO. BOARD kapcsolatok

Mivel a kapcsolataim BCM -ek, úgy gondolom, hogy most jó alkalom beszélni róla, valamint a BCM és a BOARD közötti különbségről.

A fő különbség az, hogy hogyan hivatkozik a GPIO PIN -kódokra, amelyek viszont befolyásolják a kapcsolatok létrehozását. A GPIO.board a PIN kódokat az internet bármely GPIO elrendezésére nyomtatott szám alapján fogja utalni.

A GPIO. BCM a PIN -kódokra hivatkozik, ahogy a Broadcom SOC látja őket. Ez valószínűleg megváltozik a Raspberry PI újabb verzióiban.

A pinout.

13. lépés: A MagicBox

A lépéshez csatolt kód a végleges.

Futtathatja málna PI rendszerindításkor, anélkül, hogy bejelentkezne. Ehhez csak hozza létre ezt a kis szkriptet a könyvtárban, ahová a kódot helyezte - ennek megfelelően módosítsa az útvonalakat

#!/bin/bash

cd/home/pi/magicbox python MagicBox.py

Legyen végrehajtható

chmod +x start_magicbox.sh

Most hívja fel az /etc/rc.local könyvtárban, közvetlenül a 0 -as kilépés előtt

sudo vi /etc/rc.local

/home/pi/magicbox/start_magicbox.sh &

mentés és kilépés.

Most minden újraindításkor a Python program végrehajtásra kerül

MEGJEGYZÉS: Minden képfájlnak ugyanabban a könyvtárban kell lennie, mint a szkriptnek. A következőkre van szüksége:

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

Mindezeket a fájlokat a MagicBox githubjában szerezheti be.

Ajánlott: