Sadržaj:

Fotoaparat RaspberryPI - MagicBox: 13 koraka (sa slikama)
Fotoaparat RaspberryPI - MagicBox: 13 koraka (sa slikama)

Video: Fotoaparat RaspberryPI - MagicBox: 13 koraka (sa slikama)

Video: Fotoaparat RaspberryPI - MagicBox: 13 koraka (sa slikama)
Video: Камера высокого разрешения и объективы для Raspberry Pi. Железки Амперки 2024, Srpanj
Anonim
Image
Image
Izgraditi
Izgraditi

Maloprije sam imao ludu ideju o stvaranju fotografskog stroja od Raspberry PI -ja. U mom gradu bila je mala predstava na kojoj su ljudi odlazili i pokazivali što rade ili su napravili koristeći elektroniku, računala itd … Bio sam poput Maker Faire -a siromaha, ali lokalno.

Jedan se približavao i zajedno sa mojom ženom gradimo ovu stvar.

Kako radi ?

Pritisnete plavi gumb - počne treptati - i nakon 3 sekunde slika se snima. S druge strane kamere nalazi se monitor koji prikazuje odbrojavanje, a nakon što je slika snimljena, pregled fotografije.

Sada možete odabrati slanje na Twitter i Facebook ili otkazati i pokušati ponovo. To je tako jednostavno.

Sve je programirano u Pythonu, koristeći PI framebuffer - Ne koristi se Xorg, nema grafičkog sučelja.

Evo video snimka rada projekta

Pribor

  • Raspberry PI (koristim verziju 2)
  • Raspberry PI kamera (pomoću verzije 1)
  • 3x tipke za velike kupole
  • TFT/LCD monitor s VGA/HDMI
  • MDF
  • Metalne šarke, vijci itd.
  • Električni alati
  • Slobodno vrijeme i puno zabave

Korak 1: Izgradite

Izgraditi
Izgraditi
Izgraditi
Izgraditi

Bilo je zabavno graditi ga. Mnogo rezanja, slikanja i bušenja.

Koristio sam MDF ploče za izgradnju osnovne strukture kamere. Lagani su i s njima je lako raditi. Također, to je bila jedna vrsta drva koju je laserski stroj u lokalnom Fablabu mogao rezati.

Pristup unutrašnjim ožičenjima bio je sa strane monitora, koristeći hidraulične šarke kako bi mogli pomoći pri podizanju monitora.

Korak 2: Kamera

Fotoaparat
Fotoaparat
Fotoaparat
Fotoaparat
Fotoaparat
Fotoaparat

Fotoaparat

Kamera je kutija sljedećih dimenzija: 60 cm x 40 cm x 30 cm Vaše mogu biti manje, veće, na vama je. Potrebno je samo prilagoditi monitor koji ćete koristiti. MDF ploče su laserski rezane u lokalnom Fablabu. Potrebne su 3 rupe na stražnjoj strani - dva velika kupolasta gumba i jedan za monitor. Sprijeda, 2 rupe - jedna za veliki gumb s kupolom, a druga - manja - za kameru Raspberry PI. Nemam određena mjerenja - samo zamislite kameru i upotrijebite je.

Korak 3: Monitor

Monitor
Monitor
Monitor
Monitor
Monitor
Monitor

Monitor

Nosač monitora napravljen je dodavanjem malih komada drveta kako bi se podržalo u njegovim dimenzijama.

Bila je odstranjena s plastičnog kućišta i pričvršćena vijcima. Za lakše podizanje korištena su dva (rabljena) hidraulična šarka.

Korak 4: Ukrašavanje

Ukrašavanje
Ukrašavanje
Ukrašavanje
Ukrašavanje
Ukrašavanje
Ukrašavanje
Ukrašavanje
Ukrašavanje

Budući da mi se jako sviđa stil mog Fuji X-T30, otišli smo i učinili nešto slično.

Prvo smo ga prekrili pjenom, a zatim smo ga obojili sprejom u crnu boju. Nakon boje dodali smo aluminijsku foliju za srebrne dijelove i zamotali je

Da bismo simulirali objektiv, samo smo koristili okrugli Tupperware da smo napravili malu rupu za modul kamere Raspberry PI za sjedenje.

Korak 5: Programiranje

Programiranje kamere bilo je izazov, ali bilo je super zabavno.

Nema grafičkog sučelja - ovo radi na CLI -ju i na Pythonu verzije 3.

Prvo sam počeo s testiranjem i programiranjem gumba, sljedeće je bilo fotografiranje pomoću već ponuđenih alata i Python API -ja. Zatim sam prešao na preklapanje slika u izlazu kamere (za odbrojavanje), a zatim i na interakciju s Twitterom i Facebookom.

Nakon što sam se snašao u svemu tome, poput slagalice, sastavio sam sve dijelove zajedno. Ovdje idemo na isti proces. Počnite sporo i malo, a zatim brzo i veliko.

Prvo, počnimo s konfiguriranjem Raspberry PI

Korak 6: Priprema maline PI

Priprema PI od maline
Priprema PI od maline
Priprema PI od maline
Priprema PI od maline
Priprema PI od maline
Priprema PI od maline

Neću vam objašnjavati kako instalirati Raspbian na Raspberry PI - postoji mnogo vodiča, čak i na službenoj web stranici Raspberry PI.

Samo trebate imati pristup SSH -u ili ga priključiti na monitor i priključiti tipkovnicu i miš.

NAPOMENA: Kada započinjete s Raspberry PI kamerom, morate je priključiti na monitor. Do tada se svi koraci mogu izvesti pomoću SSH -a.

Nakon pokretanja u vašem Raspberry PI -u, moramo omogućiti Raspberry PI kameru. Upotrijebimo za to raspi-config alat.

sudo raspi-config

  1. Odaberite opciju 5 - Opcije sučelja
  2. Odaberite P1 - Omogući/onemogući vezu s Raspberry PI kamerom
  3. Reci da
  4. za OK
  5. Odaberite Završi
  6. Odaberite Da za ponovno pokretanje sada

Nakon ponovnog pokretanja možemo nastaviti

Korak 7: Softver

Trebat će nam neke Python knjižnice za instaliranje. Ovo je ažurirano za najnoviju Raspbian verziju - Buster

Prvo, postavimo Python 3 kao zadani. Slijedite ovu vezu da biste saznali kako ga postaviti SISTEM ŠIR

Knjižnice:

  • python-pil.imagetk za manipulaciju slikama
  • python-rpi.gpio za pristup GPIO PINS-u
  • python-picamera za pristup Raspberry PI kameri
  • Tweepy za dijeljenje fotografije na Twitteru
  • facebook-sdk za dijeljenje na Facebook stranici

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

Za instaliranje facebook-sdk upotrijebite Python pip

sudo pip3 instalirajte facebook-sdk

Korak 8: Programiranje - Pregled kamere

Image
Image
Programiranje - Pregled kamere
Programiranje - Pregled kamere
Programiranje - Pregled kamere
Programiranje - Pregled kamere

Jedan od zahtjeva koje sam postavio ovom projektu bio je da se ovaj program pokrene u CLI načinu rada. Dakle, moramo prikazati sliku kamere na konzoli. Za to ćemo upotrijebiti Python Picamera. Nakon toga, upotrijebimo pil.imagetk za prikaz sloja na vrhu pregleda kamere

Naš mali program (razvijat ćemo male programe do jednog velikog na kraju) prikazat će pregled kamere.

#!/usr/bin/env python

import time import pikamera from time import sleep camera = picamera. PiCamera () # Postavite željenu rezoluciju camera.resolution = (1280, 1024) camera.framerate = 24 camera.start_preview () try: while (True): sleep (1) osim (KeyboardInterrupt, SystemExit): print ("Exiting …") camera.stop_preview ()

Da biste ga isprobali, samo ga izvedite

python cameraPreview.py

Pregledajte kameru sa slikama na vrhu

Budući da sam htio prikazati odbrojavanje prije snimanja fotografije, trebale su mi slike koje se preklapaju s pregledom kamere.

Napravite-p.webp" />

Sljedeći kôd će se preklapati 1-p.webp

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

Probaj:

python imageOverlay.py

Sada napravimo odbrojavanje sa preklopnim slikama. Kao što ste stvorili sliku 1.png, stvorite još dvije slike s 2 i 3 u njima.

Nakon toga samo upotrijebite sljedeći kôd:

uvoz pikamera

from PIL import Image from time import sleep with picamera. PiCamera () as 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 sleep (2) #ukloni prethodnu kameru s preklapanjem.remove_overlay (o) pad.paste (img2, (0, 0)) o = camera.add_overlay (podloga). tobytes (), size = img2.size) o.alpha = 128 o.layer = 3 sleep (2) # ukloniti prethodnu kameru s preklapanjem.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)

Sada ga izvršite:

python imageOverlayCounter.py

I pogledajte odbrojavanje

Wow - Malo koda i bez slike … Riješimo to kombinirajući sve zajedno - pregledajte kameru, odbrojavanje i fotografirajte

import pikamerafrom PIL import Image from time import sleep def deflay overlayCounter (): # load image img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.-p.webp

Probaj:

python pictureWithTimer.py

I ovdje imamo Yodu

Korak 9: Programiranje - gumb za veliku kupolu

Programiranje - tipka za veliku kupolu
Programiranje - tipka za veliku kupolu
Programiranje - tipka za veliku kupolu
Programiranje - tipka za veliku kupolu

Gumb za veliku kupolu veliki je okrugli gumb - promjera oko 100 mm s malom LED diodom. Kaže da radi na 12V, ali 3.3V Raspberry PI -ja je dovoljno da se upali

Za testiranje upotrijebite shemu

Kod:

iz RPi uvezite GPIO

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) # Funkcija blokiranja GPIO.wait_for_edge (takeButton, GPIO. FALLING) print ("Button Presssed") GPIO.output (ledButton, False) GPIO.cleanup ()

Neka objašnjenja koda Jedan od oblika dobivanja vrijednosti iz GPIOS -a je putem prekida (drugi je prozivanje) - otkrivanje rubova.

Rub je naziv prijelaza s VISOKOG na NISKO (padajući rub) ili NISKOG na VISOK (rastući rub). Kad PIN nije povezan ni s čim, svako čitanje bit će nedefinirano. Zaobilazno rješenje je da u navedenom PIN -u imate otpornik za povlačenje/spuštanje. Raspberry PI omogućuje konfiguraciju pull up/down otpornika putem softvera.

Crta

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

konfigurira taj PIN da učini upravo to - povucite prema gore

Zašto se povlačiti? Pa, veliki gumb za kupolu ima 2 PIN -a - push to break ili push to make (baš kao i mali gumbi koji često dolaze s Arduino/Raspberry PI setovima). Povezao sam ga s PIN -om gumba "push to make". Kada se pritisne, krug se zatvara i struja prolazi (normalno otvorena).

Crta

GPIO.čekajte_za_rub (takeButton, GPIO. FALLING)

će pričekati (učinkovito obustaviti izvršavanje skripte) dok ne otkrije pad PIN -a - otpuštanjem gumba prekinuti će se protok električne energije, a PIN će preći sa 3,3v na 0v

LED PIN služi samo za paljenje LED diode na gumbu

Više informacija o push prekidačima iz Arduino Tutoriala, Wikipedije o push to make ili push to break i GPIO prekidima

Sada, spojimo gumb s kamerom - Fotografirajte samo kad je gumb pritisnut

import pikamera from time import sleep from RPi import GPIO from PIL import Image # NAPOMENA: Ovo će biti gumb za otkazivanje u glavnom programu # Upravo ga koristim ovdje radi jasnoće u videu 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) spavanje (1) def offLeds (): GPIO.output (ledCancel, False) # Funkcija za preklapanje slike def overlayCounter (): # load images img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.png') # Izradite prekrivač # Koristi se sa img1 jer su svi iste veličine pad = Image.new ('RGB', (((img1.size [0] + 31) // 32) * 32, ((img1.size [1] + 15) // 16) * 16,)) # zalijepite sloj - 3 pad.paste (img1, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img1.size) ov.alpha = 200 # sloj je 3 jer je pregled kamere na drugom sloju ov.layer = 3 sleep (1) camera.remove_overlay (ov) # zalijepite sloj - 2 pad.paste (img2, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img2.size) ov.alpha = 200 # sloj je 3 jer je pregled kamere na drugom sloju ov.layer = 3 sleep (1) camera.remove_overlay (ov) # zalijepite preklapanje - 1 pad.paste (img3, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img3.size) ov.alpha = 200 # sloj je 3 jer je pregled kamere na drugom sloju ov.layer = 3 sleep (1) camera.remove_overlay (ov) camera = picamera. PiCamera () camera.resolution = (1280, 1024) camera.framerate = 24 camera.start_preview () GPIO.wait_for_edge (takeButton, GPIO. FALLING) onLeds () overlayCounter () camera.capture ('pushTesting.jpg') camera.stop_preview () offLeds () GPIO.cleanup ()

Malo objašnjenja koda

Pokreće pregled kamere i čeka dok se ne pritisne tipka. Nakon pritiska na tipku, LED svijetli i počinje odbrojavanje. Kad dođete do kraja, slika se snima i LED se isključuje

Korak 10: Objavite na Twitteru

Objavite na Twitteru
Objavite na Twitteru
Objavite na Twitteru
Objavite na Twitteru
Objavite na Twitteru
Objavite na Twitteru

Sada ćemo koristiti Python i tweetirati tweet!:) Za objavu će vam trebati slika - birajte mudro.

Prvo moramo pristupiti twitter API -ju, a za to moramo stvoriti APP. Idite na https://apps.twitter.com i izradite novu aplikaciju.

Morat ćete se prijaviti za račun razvojnog programera - ispunite neka pitanja i potvrdite svoju e -adresu. Nakon toga ćete moći izraditi novu aplikaciju.

Nakon izrade APP -a idite na Ključevi i žetoni te generirajte pristupnu oznaku i tajnu pristupne oznake. Prikazat će se prozor s KLJUČIMA SAMO JEDNOM - KOPIRAJTE I SPASITE IH KASNIJE.

Pomoću sljedećeg koda pošaljite sliku na svoj twitter račun. Ne zaboravite popuniti:

  • potrošački_ključ
  • potrošač_tajna
  • access_token
  • access_token_secret

twitter poruka je tekst koji se šalje putem tvita.

jpg_foto_to_send je slika koja će biti priložena tweetu. Molimo vas da imate sliku u istom direktoriju kao Python skripta i promijenite ime u kodu.

import tweepy # Twitter postavke def get_api (cfg): auth = tweepy. OAuthHandler (cfg ['customer_key'], cfg ['Consumer_secret']) auth.set_access_token (cfg ['access_token'], cfg ['access_token_secret') tweepy. API (auth) # Pošalji na twitter def sendToTwitter (): cfg = {"customer_key": "", "customer_secret": "", "access_token": "", "access_token_secret": ""} api = get_api (cfg) # Poruka statusa tweet = "Twitter poruka" status = api.update_with_media ("jpg_foto_to_Send", tweet) sendToTwitter ()

Za svoj tweet provjerite svoj Twitter sadržaj.

Evo Tweeta

Ili ispod:

#RaspberryPI MagicBox. Snimite fotografije, pregledajte ih i odaberite slanje na Twitter i Facebook. Pokreće ga Raspberry PI. @@ Raspberry_Pi#RaspberryPI#RaspberryPIProjectpic.twitter.com/cCL33Zjb8p

- Bruno Ricardo Santos (@feiticeir0) 29. veljače 2020

Korak 11: Kombiniranje nekih elemenata

Kombinirajući neke elemente
Kombinirajući neke elemente
Kombinirajući neke elemente
Kombinirajući neke elemente

Kombinirajmo sada gumb Big Dome Push, pritisnemo ga, odbrojavamo, fotografiramo, odlučimo hoćemo li ga poslati na twitter.

Dodati ćemo još jednu sliku s preklapanjem i upotrijebiti sva tri gumba. Kad je slika snimljena, zasvijetlit će sve LED diode s 3 gumba.

Dodajemo još jednu sliku koja prikazuje ikone za objavljivanje na društvenim mrežama

SelectOption-p.webp

Aenviar-p.webp

U videu nije prikazan plavi gumb (prednji dio kamere), ali LED dioda svijetli i počinje treperiti čim se pritisne.

Kôd se dodaje ako želite

Ovo je konačni kôd za testiranje prije glavnog programa.

# coding = utf-8 import picamera import _thread import subprocess as sp from time import import sleep from RPi import GPIO from PIL import Image threading threading # Twitter import tweepy # Facebook import facebook # Button to take picture takeButton = 17 # SocialNetwork Button socialNetworkButton = 23 # Otkaži sliku cancelButton = 24 # Gumb za snimanje slike LED takePicButtonLed = 27 # Dugme za objavu na društvenoj mreži LED postSNLed = 22 # Gumb za odustajanje 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 postavke def get_api (cfg): auth = tweepy. OAuthHandler (cfg ['customer_key'], cfg ['Consumer_secret']) auth.set_access_token (cfg ['access_token'], cfg ['access_token_secret']) return tweepy. API (auth) # Pošalji na twitter def sendToTwitter (): cfg = {"con sumer_key ":" "," customer_secret ":" "," access_token ":" "," access_token_secret ":" "} api = get_api (cfg) # Poruka o statusu tweet =" MagicBox testiranje po instrukcijama. #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']) # objavite kao stranicu. Možete preskočiti # sljedeće ako želite objaviti kao sebe. resp = graph.get_object ('ja/računi') page_access_token = Nema za stranicu u resp ['data']: if page ['id'] == cfg ['page_id']: page_access_token = page ['access_token'] graph = facebook. GraphAPI (page_access_token) return graph # Pošalji na facebook def sendToFacebook (): #Vrijednosti za pristup cfg = {"page_id": "", "access_token": ""} api = get_api_facebook (cfg) caption = "Natpis slike" albumid = "" api.put_photo (image = open ("pushTesting.jpg", "rb"), caption = "Naslov slike ") # Samo svjetlo TakePicButtonLed def onlyTakePicLed (): GPIO.output (takePicButtonLed, True) GPIO.output (postSNLed, False) GPIO.output (cancelButtonLed, False) # Samo svjetlo Otkaži i gumb za društvenu mrežu def cancelPostLEDS (): GPI O.izlaz (takePicButtonLed, False) GPIO.output (postSNLed, True) GPIO.output (cancelButtonLed, True) # Trepće LED za snimanje slike dok odbrojava def countingTimerPicture (): GPIO.output (takePicButtonLed, True) spavanje (0,5) GPIO.output (takePicButtonLed, False) spavanje (0,5) GPIO.output (takePicButtonLed, True) spavanje (0,5) GPIO.output (takePicButtonLed,False) sleep (0,5) GPIO.output (takePicButtonLed, True) sleep (0,5) GPIO.output (takePicButtonLed, False) # Blink postSNLed tijekom objavljivanja na društvenim mrežama def blinkPosting (stop_event): # Start while (not stop_event.is_set ()): print ("off") GPIO.output (postSNLed, False) sleep (0.5) print ("on") GPIO.output (postSNLed, True) sleep (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) # Prikažite pregled na sloju 1 def displayPreview (imgName): # Budući da je prikaz PIL slike sranje # koristimo preklop s kamere za prikaz # pregleda 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 # Prikaži pregled na sloju 3 def displayPreview3 (imgName): # Budući da je prikaz PIL slika sranje # koristimo prekrivač s kamere za prikaz # pregleda 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 # Funkcija overlaySocialNetwork def overlaysn (): imgsn = Image.open ('SelectOption.png') # Izradi Sloj za preklapanje = Image.new ('RGB', ((((imgsn.size [0] + 31) // 32) * 32, ((imgsn.size [1] + 15) // 16) * 16,)) # Zalijepite prekrivač pad.paste (imgsn, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = imgsn.size) ov.alpha = 100 ov.layer = 3 return ov # Funkcija za preklapanje image def overlayCounter (): #load images img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.png') # Izradite prekrivač # Koristi se sa img1 jer su svi iste veličine pad = Image.new ('RGB', ((((img1.size [0] + 31) // 32) * 32, ((img1.size [1] + 15) // 16) * 16,)) # zalijepite sloj - 3 pad.paste (img1, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img1.size) ov.alpha = 200 # sloj je 3 jer je pregled kamere na drugom sloju ov.layer = 3 sleep (1) camera.remove_overlay (ov) # zalijepite sloj - 2 pad.paste (img2, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img2.size) ov.alpha = 200 # sloj je 3 jer je pregled kamere na drugom sloju ov.layer = 3 sleep (1) camera.remove_overlay (ov) # paste preklapanje - 1 pad.paste (img3, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img3.size) ov.alpha = 200 # sloj je 3 jer je pregled kamere na drugom sloju ov.layer = 3 sleep (1) camera.remove_overlay (ov) # Glavna funkcija # Očisti zaslon tako da poruke o pokretanju nisu prisutne # vjerojatno bi bilo bolje da to učinite u 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 = 'average' #Testiranje ovdje pokušajte: while (Tačno): camera.start_preview () #Prikaži LED samo za snimanje fotografijeTakePicLed () #Pričekajte da se gumb zauzme Slika GPIO.wait_for_edge (takeButton, GPIO. FALLING) # Pokrenite nit za brojanje sa LED diodama dok su slike prikazane # Vjerojatno se može koristiti u funkciji overlayCounter, # jer ima i mjerače vremena za prikaz slika, ali LED efekti ne bi # bio isti _thread.start_new_thread (countingTimerPicture, ()) # Prikaz sloja slika u preklapanju slika fotoaparataCounter () # Prikaži sve LED diode dok snimate sliku showAllLeds () camera.capture ('pushTesting.jpg') kameru. stop_preview () #display image displayPreview ('pushTesting.jpg') # Show overlay oo = overlaysn () # Prikaži LED diode za otkazivanje ili objavljivanje na društvenim mrežama cancelPostLEDS () GPIO.add_event_detect (socialNetworkButton, GPIO. FALLING) GPIOut.dd_event, GPIO. FALLING) while (Tačno): ako je GPIO.event_detecte d (socialNetworkButton): camera.remove_overlay (oo) GPIO.output (cancelButtonLed, False) o = displayPreview3 ('Aenviar.png') #print "Gumb društvenih mreža" sendToTwitter () sendToFacebook () camera.remove_overlay (o) break if GPIO.event_detected (cancelButton): #print "Otkazana" kamera.remove_overlay (oo) break # reset GPIOS GPIO.remove_event_detect (socialNetworkButton) GPIO.remove_event_detect (cancelButton) GPIO.remove_event_deteton (printBrite) "Izašao …") #offLeds () GPIO.cleanup ()

Korak 12: Ožičenje

Image
Image
Ožičenje
Ožičenje
Ožičenje
Ožičenje

Ožičenje samo povezuje gumbe Big Dome Push na Raspberry PI.

Samo slijedite shemu Fritzing.

Veze su:

PovezivanjeRPI GPIO PIN GND Zeleni potisni gumbGND (#3) GND Žuti potisni gumbGND (#9) GND Plavi gumb GND (#39) Snimite sliku (Plavi gumb "Push to make") 17 (BCM) Objavi na društvenim mrežama (zeleni pritisak Tipka "Pritisni za izradu") 23 (BCM) Odustani (Žuta tipka "Pritisni za izradu") 24 (BCM) Plava tipka LED27 (BCM) Zelena tipka LED22 (BCM) Žuta tipka LED5 (BCM)

Termoskupljanje je također označeno bojom

  • Crna je GND veza
  • Žute su veze "push to make"
  • Plave su LED veze

GPIO. BCM brojevi u odnosu na GPIO. BOARD veze

Budući da su moje veze BCM, mislim da je sada dobro vrijeme za razgovor o tome i razlici između BCM -a i BOARD -a.

Glavna razlika je u tome kako se pozivate na GPIO PIN -ove koji će zauzvrat utjecati na način povezivanja. GPIO.board će pozivati PIN -ove prema broju ispisanom na bilo kojem GPIO rasporedu na internetu.

GPIO. BCM upućuje na PIN brojeve onako kako ih vidi Broadcom SOC. To će se vjerojatno promijeniti u novijim verzijama Raspberry PI -ja.

Na web mjestu pinout.xyz brojevi ploča su oni tik uz pinove, a BCM se tako naziva - BCM X (gdje je X broj)

Korak 13: MagicBox

Priloženi kôd ovom koraku konačan je.

Možete ga pokrenuti na maline PI boot, čak i bez potrebe za prijavom. Da biste to učinili, samo stvorite ovu malu skriptu u direktoriju u koji ste postavili kôd - promijenite staze u skladu s tim

#!/bin/bash

cd/home/pi/magicbox python MagicBox.py

Neka bude izvršno

chmod +x start_magicbox.sh

Sada, nazovite ga u /etc/rc.local, neposredno prije ulaza za izlaz 0

sudo vi /etc/rc.local

/home/pi/magicbox/start_magicbox.sh &

spremi i odustani.

Sada, pri svakom ponovnom pokretanju, program Python će se izvršavati

NAPOMENA: Sve slikovne datoteke moraju biti u istom direktoriju kao skripta. Morate imati:

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

Sve ove datoteke možete nabaviti na MagicBox -ovom githubu.

Preporučeni: