Sadržaj:

RaspberryPI foto kamera - MagicBox: 13 koraka (sa slikama)
RaspberryPI foto kamera - MagicBox: 13 koraka (sa slikama)

Video: RaspberryPI foto kamera - MagicBox: 13 koraka (sa slikama)

Video: RaspberryPI foto kamera - MagicBox: 13 koraka (sa slikama)
Video: Testing out the NEW Raspberry Pi Camera Module 3 2024, Novembar
Anonim
Image
Image
Build
Build

Nedavno sam imao ludu ideju da napravim fotografsku mašinu od Raspberry PI. U mom gradu održana je mala predstava na kojoj su ljudi odlazili i pokazivali šta rade ili su napravili koristeći elektroniku, računare itd … Bio sam poput Maker Faire -a siromaha, ali na lokalnom nivou.

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

Kako to radi ?

Pritisnete plavo dugme - počne treperiti - 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 izabrati da ga pošaljete na Twitter i Facebook ili otkažete i pokušate ponovo. Tako je jednostavno.

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

Evo video snimka rada projekta

Supplies

  • Raspberry PI (koristim verziju 2)
  • Raspberry PI kamera (koristi se verzija 1)
  • 3x dugmeta za velike kupole
  • TFT/LCD monitor sa VGA/HDMI
  • MDF
  • Metalne šarke, vijci itd.
  • Električni alati
  • Slobodno vreme i puno zabave

Korak 1: Izgradite

Build
Build
Build
Build

Bilo je zabavno graditi ga. Mnogo sečenja, farbanja i bušenja.

Koristio sam MDF ploče za izgradnju osnovne strukture kamere. Lagani su i laki za rad. Takođe, to je bila jedna vrsta drveta koju je laserska mašina u lokalnom Fablabu uspjela rezati.

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

Korak 2: Kamera

Kamera
Kamera
Kamera
Kamera
Kamera
Kamera

Kamera

Kamera je kutija sljedećih dimenzija: 60cm x 40cm x 30cm Vaše mogu biti manje, veće, na vama je. Samo je potrebno prilagoditi monitor koji ćete koristiti. MDF ploče su laserski rezane u lokalnom Fablabu. Potrebne su 3 rupe na poleđini - dva velika kupolasta dugmeta i jedno za monitor. Na prednjoj strani, 2 rupe - jedna za veliko kupolasto dugme i druga - manja - za Raspberry PI kameru. Nemam određena mjerenja - samo zamislite kameru i upotrijebite je.

Korak 3: Monitor

Monitor
Monitor
Monitor
Monitor
Monitor
Monitor

Monitor

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

Bila je uklonjena sa plastičnog kućišta i pričvršćena vijcima. Za lakše podizanje korištene su dvije polovne hidraulične šarke.

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 crnom bojom. 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 radi na Pythonu verzije 3.

Prvo sam počeo s testiranjem i programiranjem gumba, zatim sam fotografirao koristeći već ponuđene alate i Python API. Zatim sam prešao na preklapanje slika u izlazu kamere (za odbrojavanje), a zatim i na interakciju s Twitter -om 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 polako i malo, a zatim idite na brzo i veliko.

Prvo, počnimo s konfiguriranjem Raspberry PI

Korak 6: Priprema Raspberry PI

Priprema Raspberry PI
Priprema Raspberry PI
Priprema Raspberry PI
Priprema Raspberry PI
Priprema Raspberry PI
Priprema Raspberry PI

Neću 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 tastaturu 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 vašeg Raspberry PI -a, moramo omogućiti Raspberry PI kameru. Koristimo 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. Recite 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 biblioteke 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 ŠIROKI

Biblioteke:

  • 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

Koristite Python pip za instaliranje facebook-sdk

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 koji sam postavio ovom projektu bio je da se ovaj program izvodi 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

vrijeme uvoza uvoz pikamera iz vremena uvoz kamera za spavanje = picamera. PiCamera () # Postavite željenu rezoluciju camera.resolution = (1280, 1024) camera.framerate = 24 camera.start_preview () try: while (True): sleep (1) osim (KeyboardInterrupt, SystemExit): print ("Izlaz …") camera.stop_preview ()

Da biste ga isprobali, samo ga izvedite

python cameraPreview.py

Pregledajte kameru sa slikama na vrhu

Budući da sam htio odbrojavanje prikazano 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

uvezi sliku iz PIL -a Uvezi sliku iz vremena uvezi stanje mirovanja sa picamera. PiCamera () kao kameru: 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 preklopljenim 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:

import pikamera

iz PIL uvoza Slike iz vremenskog uvoza u stanje mirovanja pomoću picamera. PiCamera () kao kamere: camera.resolution = (1280, 1024) camera.framerate = 24 camera.start_preview () # učitaj sliku 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 preklopljenu kameru.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) # ukloni prethodnu preklopljenu kameru.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

importiraj pikameru iz PIL uvoza Slike iz vremena importiraj sleep def 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 - veliko dugme kupolom

Programiranje - veliko dugme kupolom
Programiranje - veliko dugme kupolom
Programiranje - veliko dugme kupolom
Programiranje - veliko dugme kupolom

Dugme sa velikom kupolom je veliko okruglo dugme - prečnika oko 100 mm sa malom LED diodom. Kaže da radi na 12V, ali 3.3V Raspberry PI -a je dovoljno da se upali

Koristite shemu za testiranje

Kod:

iz RPi uvoz 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 za prijelaz s HIGH na LOW (padajući rub) ili LOW na HIGH (rastući rub). Kada 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ćava konfiguriranje otpornika za povlačenje/spuštanje kroz softver.

Linija

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

konfigurira taj PIN za upravo to - povucite prema gore

Zašto se povlačiti? Pa, veliko dugme za kupolu ima 2 PIN -a - pritisnite za lomljenje ili pritisnite za izradu (baš kao i mali gumbi koji često dolaze s Arduino/Raspberry PI setovima). Povezao sam ga sa PIN -om za dugme "pritisni za stvaranje". Kada se pritisne, krug se zatvara i struja prolazi (normalno otvorena).

Linija

GPIO.wait_for_edge (takeButton, GPIO. FALLING)

će čekati (efektivno obustavljajući izvršavanje skripte) dok ne otkrije pad PIN -a - otpuštanje dugmeta će prekinuti protok električne energije i PIN će preći sa 3,3v na 0v

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

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

Sada, spojimo dugme sa kamerom - Snimite sliku samo kada je dugme pritisnuto

uvozi pikameru iz vremena uvozi spavanje iz RPi uvozi GPIO iz PIL uvoza Slika # NAPOMENA: Ovo će biti dugme 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') # Napravite 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 prekrivač - 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 prekrivač - 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 tamo čeka dok se ne pritisne dugme. Nakon što pritisnete dugme, LED lampica zasvijetli i odbrojavanje počinje. 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 tvitovati tvit!:) Za objavljivanje ć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 stvorite novu aplikaciju.

Morat ćete se prijaviti za račun programera - popunite neka pitanja i potvrdite svoju adresu e -pošte. Nakon toga ćete moći kreirati novu aplikaciju.

Nakon kreiranja APP -a idite na Ključevi i žetoni i Generirajte pristupni token i tajnu pristupnog tokena. Prozor će se prikazati sa KLJUČIMA SAMO JEDNOM - KOPIRAJTE I SPASNITE IH KASNIJE.

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

  • potrošački_ključ
  • Consumer_secret
  • 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 i Python skripta i promijenite ime u kodu.

uvoz tweepy # Twitter postavki 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 ()

Provjerite svoj tvit na svom Twitter profilu.

Evo Tweeta

Ili ispod:

#RaspberryPI MagicBox. Snimite fotografije, pregledajte ih i odlučite ih poslati na Twitter i Facebook. Pokreće Raspberry PI. @@ Raspberry_Pi#RaspberryPI#RaspberryPIProjectpic.twitter.com/cCL33Zjb8p

- Bruno Ricardo Santos (@feiticeir0) 29. februara 2020

Korak 11: Kombinovanje nekih elemenata

Kombinacija nekih elemenata
Kombinacija nekih elemenata
Kombinacija nekih elemenata
Kombinacija nekih elemenata

Hajdemo sada kombinirati dugme Big Dome Push, pritisnuti ga, odbrojavati, fotografirati, odlučiti hoćemo li ga poslati na Twitter.

Dodaćemo još jednu sliku sa preklapanjem i koristiti sva tri tastera. Kad se slika snimi, zasvijetlit će sve LED diode sa 3 dugmeta.

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

SelectOption-p.webp

Aenviar-p.webp

U videu nije prikazano plavo dugme (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 sleep from RPi import GPIO from PIL import import threading # Twitter import tweepy # Facebook import facebook # Dugme za slikanje takeButton = 17 # SocialNetwork Button socialNetworkButton = 23 # Otkaži sliku cancelButton = 24 # Dugme za snimanje slike LED takePicButtonLed = 27 # Dugme za objavu na društvenoj mreži LED postSNLed = 22 # Dugme za otkazivanje 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) # Trepće postSNLed tokom objavljivanja na društvenim mrežama def blinkPosting (stop_event): # Pokreni dok (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 sa 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): # Pošto je prikaz PIL slika sranje # koristimo prekrivač sa 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') # Kreiraj 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') # Kreirajte 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 prekrivač - 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 prekrivač - 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 ekran tako da poruke o pokretanju nisu prisutne # vjerovatno bi bilo bolje da to učinite u bash tmp = sp.call ('clear', ljuska = Tačno) 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 = 'average' #Testiranje ovdje pokušajte: while (Tačno): camera.start_preview () #Prikaži LED samo za Snimanje slikeTakePicLed () #Sačekajte da dugme za snimanje Slika GPIO.wait_for_edge (takeButton, GPIO. FALLING) # Započni nit za brojanje sa LED diodama dok su slike prikazane # Vjerovatno se može koristiti u funkciji overlayCounter, # jer ima i tajmere za prikaz slika, ali LED efekte ne bi # bio isti _thread.start_new_thread (countingTimerPicture, ()) # Prikažite slike u preklapanju slika sa kamereCounter () # Prikaži sve LED diode dok snimate sliku showAllLeds () camera.capture ('pushTesting.jpg') kameru. stop_preview () #display image displayPreview ('pushTesting.jpg') # Prikaži prekrivanje oo = overlaysn () # Prikaži LED diode za otkazivanje ili objavljivanje na društvenim mrežama cancelPostLEDS () GPIO.add_event_detect (socialNetworkButton, GPIO. FALLING) GPIO.add_event_, GPIO. FALLING) dok je (Tačno): ako je GPIO.event_detecte d (socialNetworkButton): camera.remove_overlay (oo) GPIO.output (cancelButtonLed, False) o = displayPreview3 ('Aenviar.png') #print "Dugme 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_detenter (printBox) "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 dugmad Big Dome Push na Raspberry PI.

Samo slijedite shemu Fritzinga.

Veze su:

PovezivanjeRPI GPIO PIN GND Zeleni potisni gumbGND (#3) GND Žuti potisni gumbGND (#9) GND Plavi gumb GND (#39) Snimite sliku (Plavi gumb "Pritisni za izradu") 17 (BCM) Objavi na društvenim mrežama (Zeleni pritisak Dugme "Pritisni za izradu") 23 (BCM) Odustani (Žuto dugme "Pritisni za stvaranje") 24 (BCM) Plavo dugme za LED LED27 (BCM) Zeleno dugme za pritiskanje LED22 (BCM) Žuto dugme za pritiskanje LED5 (BCM)

Termoskupljanje je također označeno bojom

  • Crna je GND veza
  • Žute su "push to make" veze
  • 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 odštampanom 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 s novijim verzijama Raspberry PI -ja.

Na web stranici 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 je konačan.

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 putanje 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 izlazne 0 instukcije

sudo vi /etc/rc.local

/home/pi/magicbox/start_magicbox.sh &

sačuvaj i odustani.

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

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

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

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

Preporučuje se: