İçindekiler:

RaspberryPI Fotoğraf Makinesi - MagicBox: 13 Adım (Resimlerle)
RaspberryPI Fotoğraf Makinesi - MagicBox: 13 Adım (Resimlerle)

Video: RaspberryPI Fotoğraf Makinesi - MagicBox: 13 Adım (Resimlerle)

Video: RaspberryPI Fotoğraf Makinesi - MagicBox: 13 Adım (Resimlerle)
Video: 3D hologram fan portrait solution. Who wanna date this holographic sexy lady #3dhologramfan 2024, Kasım
Anonim
Image
Image
Yapı
Yapı

Bir süre önce, Raspberry PI'den bir fotoğraf makinesi yaratmak gibi çılgın bir fikrim vardı. Benim şehrimde, insanların elektronik, bilgisayar vb. kullanarak ne yaptıklarını veya yaptıklarını gösterdikleri küçük bir gösteri vardı… Fakir bir adamın Maker Faire'ı gibiydim, ama yerel kapsamda.

Biri yaklaşıyordu ve karımla birlikte bu şeyi inşa ediyoruz.

O nasıl çalışır ?

Mavi düğmeye basarsınız - yanıp sönmeye başlar - ve 3 saniye sonra bir resim çekilir. Kameranın diğer tarafında, geri sayımı ve fotoğraf çekildikten sonra fotoğrafın önizlemesini gösteren bir monitör var.

Artık Twitter ve Facebook'a göndermeyi seçebilir veya iptal edip tekrar deneyebilirsiniz. Bu kadar basit.

Her şey Python'da PI çerçeve arabelleğinden yararlanılarak programlanır - Xorg yok, GUI kullanılmaz.

İşte projenin çalışma videosu

Gereçler

  • Raspberry PI (sürüm 2 kullanıyorum)
  • Raspberry PI Kamera (Sürüm 1 Kullanılıyor)
  • 3x Büyük Kubbe basma Düğmeleri
  • VGA/HDMI'li TFT/LCD Monitör
  • MDF
  • Metal menteşeler, vidalar vb.
  • Elektrikli El Aletleri
  • Boş zaman ve çok eğlenceli

1. Adım: Oluşturun

Yapı
Yapı
Yapı
Yapı

İnşa etmek eğlenceliydi. Çok fazla kesme, boyama ve delme.

Kameranın temel yapısını oluşturmak için MDF paneller kullandım. Onlar hafif ve çalışmak kolaydır. Ayrıca, yerel Fablab'daki Lazer makinesinin kesebildiği bir tür ahşaptı.

İçerideki kablolara erişim, monitörün kaldırılmasına yardımcı olabilmeleri için hidrolik menteşeler kullanılarak monitör tarafından yapıldı.

2. Adım: Kamera

Kamera
Kamera
Kamera
Kamera
Kamera
Kamera

Kamera

Kamera şu boyutlarda bir kutudur: 60cm x 40cm x 30cm Sizinki daha küçük, daha büyük olabilir, size kalmış. Sadece kullanacağınız monitör için uyum sağlamanız gerekiyor. MDF paneller, yerel Fablab'da lazerle kesilmiştir. Arkada 3 deliğe ihtiyaç vardır - iki büyük kubbe basma düğmesi ve biri monitör için. Önde 2 delik - biri büyük kubbe basma düğmesi için ve diğeri - daha küçük - Raspberry PI kamera için. Belirli ölçümlerim yok - sadece bir kamera hayal edin ve onu kullanın.

3. Adım: İzleyin

monitör
monitör
monitör
monitör
monitör
monitör

monitör

Monitör desteği, boyutları dahilinde desteklemek için küçük ahşap parçaları eklenerek yapılmıştır.

Plastik mahfazadan sıyrıldı ve vidalarla yerine sabitlendi. Kaldırmaya yardımcı olmak için iki hidrolik menteşe (kullanılmış) kullanıldı.

Adım 4: Dekorasyon

dekorasyon
dekorasyon
dekorasyon
dekorasyon
dekorasyon
dekorasyon
dekorasyon
dekorasyon

Fuji X-T30'umun stilini çok beğendiğim için gidip benzer bir şey yaptık.

Önce üzerini köpükle kapladık ve ardından spreyle siyaha boyadık. Boyadan sonra gümüş kısımlar için alüminyum folyo ekleyip sarıyoruz.

Merceği simüle etmek için, Raspberry PI kamera modülünün oturması için küçük bir delik açtığımız yuvarlak bir Tupperware kullandık.

Adım 5: Programlama

Kamerayı programlamak zordu ama çok eğlenceliydi.

GUI yok - bu CLI'de çalışır ve Python sürüm 3'te çalışır.

İlk önce düğmeleri test ederek ve programlayarak başladım, ardından zaten sağlanan araçları ve Python API'sini kullanarak fotoğraf çektim. Daha sonra kamera çıkışında (geri sayım için) resimleri üst üste bindirmeye ve Twitter ve Facebook ile etkileşime geçmeye devam ettim.

Bütün bunlarla rahat ettikten sonra, bir yapboz gibi tüm parçaları bir araya getirdim. Burada da aynı süreçle gidiyoruz. Yavaş ve küçük başlayın ve hızlı ve büyük gidin.

İlk olarak, Raspberry PI'yi yapılandırarak başlayalım

Adım 6: Raspberry PI'yi Hazırlama

Raspberry PI'nin Hazırlanması
Raspberry PI'nin Hazırlanması
Raspberry PI'nin Hazırlanması
Raspberry PI'nin Hazırlanması
Raspberry PI'nin Hazırlanması
Raspberry PI'nin Hazırlanması

Raspberry PI'ye Raspbian'ın nasıl kurulacağını açıklamayacağım - orada bir sürü eğitim var, hatta Raspberry PI resmi web sitesinde bile.

Yalnızca SSH erişiminizin olması veya bir monitöre ve bir klavye ve fareye takmanız yeterlidir.

NOT: Raspberry PI kamera ile başlarken, onu bir monitöre takmanız gerekir. O zamana kadar tüm adımlar SSH kullanılarak yapılabilir.

Raspberry PI'nizde önyükleme yaptıktan sonra Raspberry PI kamerasını etkinleştirmemiz gerekiyor. Bunun için raspi-config aracını kullanalım.

sudo raspi yapılandırması

  1. Seçenek 5 - Arayüz Seçenekleri'ni seçin
  2. P1'i seçin - Raspberry PI kameraya bağlantıyı etkinleştirin/devre dışı bırakın
  3. Evet de
  4. tamam için
  5. Bitir'i seçin
  6. Şimdi yeniden başlatmak için Evet'i seçin

Yeniden başlattıktan sonra devam edebiliriz

7. Adım: Yazılım

Yüklenecek bazı Python kitaplıklarına ihtiyacımız olacak. Bu, en son Raspbian sürümü için güncellendi - Buster

İlk önce Python 3'ü varsayılan olarak ayarlayalım. SYSTEM WIDE'ı nasıl kuracağınızı öğrenmek için bu bağlantıyı takip edin

Kütüphaneler:

  • görüntüleri işlemek için python-pil.imagetk
  • GPIO PIN'lerine erişmek için python-rpi.gpio
  • Raspberry PI Kameraya erişmek için python-picamera
  • Fotoğrafı twitter'da paylaşmak tweepy
  • facebook-sdk bir facebook sayfasında paylaşmak için

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

facebook-sdk yüklemek için Python pip kullanın

sudo pip3 facebook-sdk'yi kurun

Adım 8: Programlama - Kamera Önizlemesi

Image
Image
Programlama - Kamera Önizlemesi
Programlama - Kamera Önizlemesi
Programlama - Kamera Önizlemesi
Programlama - Kamera Önizlemesi

Bu proje için belirlediğim gereksinimlerden biri, bu programın CLI modunda çalışmasıydı. Bu yüzden kamera görüntüsünü konsolda göstermemiz gerekiyor. Bunun için Python Picamera'yı kullanalım. Bundan sonra, kamera önizlemesinin üstünde bir bindirme görüntülemek için pil.imagetk'yi kullanalım.

Küçük programımız (sonunda bir büyük olana kadar küçük programlar geliştireceğiz) kamera ön izlemesini gösterecek.

#!/usr/bin/env piton

zamanı içe aktar picamera'yı zamandan içe aktar uyku kamerası = picamera. PiCamera() # İstediğiniz çözünürlüğü ayarlayın camera. Resolution = (1280, 1024) camera.framerate = 24 camera.start_preview() try: while (True): sleep(1) hariç (KeyboardInterrupt, SystemExit): print ("Exiting…") camera.stop_preview()

Denemek için sadece yürütün

python cameraPreview.py

Üstte görüntülerle kamerayı önizleyin

Fotoğraf çekmeden önce bir geri sayım gösterilmesini istediğim için, kamera ön izlemesiyle örtüşen görüntülere ihtiyacım vardı.

Bir-p.webp" />

Aşağıdaki kod, kamera önizlemesi ile 1-p.webp

PIL'den picamera'yı içe aktar Zamandaki görüntüyü picamera. PiCamera() ile kamera olarak içe aktar: camera. Resolution = (1920, 1080) camera.framerate = 24 camera.start_preview() # image yükle img = Image.open('1.png ') # create pad = Image.new('RGB', (((img.size[0] + 31) // 32) * 32, ((img.size[1] + 15) // 16) * 16,)) pad.paste(img, (0, 0)) o = camera.add_overlay(pad.tobytes(), size=img.size) o.alpha = 128 o.layer = 3 while True: sleep(1)

Dene:

python imageOverlay.py

Şimdi bindirme görüntüleri ile bir geri sayım oluşturalım. 1-p.webp

Bundan sonra, sadece aşağıdaki kodu kullanın:

fotoğraf makinesini içe aktar

PIL'den içe aktar Zamandan gelen görüntüyü picamera. PiCamera() ile kamera olarak içe aktar: camera. Resolution = (1280, 1024) camera.framerate = 24 camera.start_preview() # image yükle 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) #önceki bindirmeyi kaldır camera.remove_overlay(o) pad.paste(img2, (0, 0)) o = camera.add_overlay(pad. tobytes(), size=img2.size) o.alpha = 128 o.layer = 3 sleep(2) # önceki overlay camerayı kaldır.remove_overlay(o) pad.paste(img3, (0, 0)) o = kamera. add_overlay(pad.tobytes(), size=img3.size) o.alpha = 128 o.layer = 3 uyku(2)

Şimdi yürütün:

python imageOverlayCounter.py

Ve geri sayımı görün

Vay - Biraz kod var ve hiç fotoğraf çekilmemiş… Hadi hepsini birleştirerek çözelim - kamerayı önizleyin, geri sayım yapın ve fotoğraf çekin

PIL'den picamera'yı içe aktar Zamandan görüntüyü içe aktar uyku def overlayCounter(): # görüntü yükle 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,)) # bindirmeyi yapıştırın - 3 pad.paste(img1, (0, 0)) o = camera.add_overlay(pad.tobytes(), size=img1.size) o.alpha = 128 o.layer = 3 uyku(1) # Önceki bindirmeyi kaldır camera.remove_overlay(o) # bindirmeyi yapıştır - 2 pad.paste(img2, (0, 0)) o = camera.add_overlay(pad.tobytes(), size=img2.size) o.alpha = 128 o.layer = 3 uyku(1) #önceki yerleşimi kaldır camera.remove_overlay(o) # bindirmeyi yapıştır - 3 pad.paste(img3, (0, 0)) o = camera.add_overlay(pad. tobytes(), size=img3.size) o.alpha = 128 o.layer = 3 uyku(1) camera.remove_overlay(o) camera = picamera. PiCamera() camera. Resolution = (1280, 1024) camera.framerate = 24 camera.start_preview() overlayCounter() camera.capture('testingCounter.jpg') camera.stop_preview()

Dene:

piton resmiWithTimer.py

Ve burada Yoda'mız var

Adım 9: Programlama - Büyük Kubbe Basma Düğmesi

Programlama - Büyük Kubbe Basma Düğmesi
Programlama - Büyük Kubbe Basma Düğmesi
Programlama - Büyük Kubbe Basma Düğmesi
Programlama - Büyük Kubbe Basma Düğmesi

Büyük kubbe basma düğmesi, küçük bir LED ile yaklaşık 100 mm dış çapa sahip büyük bir yuvarlak düğmedir. 12V'da çalıştığını söylüyor, ancak Raspberry PI'nin 3.3v'si onu aydınlatmak için yeterli.

Test için şemayı kullanın

kod:

RPi'den GPIO'yu içe aktar

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) # Engelleme işlevi GPIO.wait_for_edge(takeButton, GPIO. FALLING) print ("Butona Basıldı") GPIO.output(ledButton, False) GPIO.cleanup()

Kodun bazı açıklamaları GPIOS'tan değer alma biçimlerinden biri kesmelerdir (diğeri yoklamadır) - kenar algılama.

Kenar, YÜKSEK'ten DÜŞÜK'e (düşen kenar) veya DÜŞÜK'ten YÜKSEK'e (yükselen kenar) geçişin adıdır. PIN hiçbir şeye bağlı olmadığında, herhangi bir okuma tanımsız olacaktır. Bir geçici çözüm, söz konusu PIN'de bir yukarı/aşağı çekme direncine sahip olmaktır. Raspberry PI, yazılım aracılığıyla yukarı/aşağı dirençlerin yapılandırılmasına izin verir.

Çizgi

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

bu PIN'i tam da bunu yapacak şekilde yapılandırır - yukarı çekin

Neden yukarı çekin? Büyük kubbe düğmenin 2 PIN'i vardır - kırmak için bas veya yapmak için bas (tıpkı Arduino/Ahududu PI kitleriyle birlikte gelen küçük düğmeler gibi). Düğmenin "yapmak için bas" PIN'ine bağladım. Basıldığında devre kapanır ve elektrik geçer (normalde açık).

Çizgi

GPIO.wait_for_edge(takeButton, GPIO. FALLING)

PIN'in düştüğünü algılayana kadar bekleyecek (komut dosyasının yürütülmesini etkin bir şekilde askıya alacak) - düğmeyi bırakmak elektrik akışını kesecek ve PIN 3,3v'den 0v'ye gidecek

LED PIN sadece düğmedeki LED'i yakmak içindir

Arduino Tutorials'dan push anahtarları, Wikipedia'da push to make veya push to break ve GPIO kesintileri hakkında daha fazla bilgi

Şimdi, bir düğmeyi kamerayla birleştirelim - Yalnızca düğmeye basıldığında fotoğraf çekin

picamera'yı zamandan içe aktar RPi'den uykuyu içe aktar PIL'den GPIO'yu içe aktar Görüntü # NOT: Bu, ana programdaki iptal düğmesi olacak # Burada sadece videoda netlik olması için kullanıyorum takeButton = 24 ledİptal = 5 GPIO.setmode(GPIO. BCM) GPIO.setup(takeButton, GPIO. IN, GPIO. PUD_UP) GPIO.setup(ledCancel, GPIO. OUT) def onLeds(): GPIO.output(ledCancel, True) uyku(1) def offLed'ler (): GPIO.output(ledCancel, False) # Görüntü bindirme işlevi def overlayCounter(): #load görüntüleri img1 = Image.open('3.png') img2 = Image.open('2.png') img3 = Image.open('1.png') # Bir bindirme oluştur # Hepsi aynı boyutta ped olduğundan img1 ile kullanılır = Image.new('RGB', (((img1.size[0] + 31) // 32) * 32, ((img1.size[1] + 15) // 16) * 16,)) # bindirmeyi yapıştır - 3 pad.paste(img1, (0, 0)) ov = camera.add_overlay(pad.tobytes (), size=img1.size) ov.alpha = 200 # katman 3'tür çünkü kamera önizlemesi katman 2'dedir ov.layer = 3 sleep(1) camera.remove_overlay(ov) # bindirmeyi yapıştırın - 2 pad.paste(img2, (0, 0)) ov = camera.add_overlay(pad.tobytes(), size=img2.size) ov.alpha = 200 # katman 3'tür çünkü kamera önizlemesi katman 2'dedir ov.layer = 3 sleep(1) camera.remove_overlay(ov) # bindirmeyi yapıştır - 1 pad.paste(img3, (0, 0)) ov = camera.add_overlay(pad.tobytes(), size=img3.size) ov.alpha = 200 # katman 3'tür çünkü kamera önizlemesi katman 2 üzerinde ov.layer = 3 uyku(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()

Biraz kod açıklaması

Kamera ön izlemesini başlatır ve bir düğmeye basılana kadar orada bekler. Butona basıldıktan sonra led yanar ve geri sayım başlar. Sona gelindiğinde resim çekilir ve led söner

Adım 10: Twitter'a Gönderin

Twitter'a gönder
Twitter'a gönder
Twitter'a gönder
Twitter'a gönder
Twitter'a gönder
Twitter'a gönder

Şimdi Python'u kullanacağız ve bir tweet atacağız!:) Göndermek için bir resme ihtiyacınız olacak - akıllıca seçin.

Öncelikle twitter API'sine erişmemiz gerekiyor ve bunun için bir APP oluşturmamız gerekiyor. https://apps.twitter.com adresine gidin ve yeni bir uygulama oluşturun.

Bir geliştirici hesabına başvurmanız gerekecek - bazı soruları doldurun ve e-posta adresinizi onaylayın. Bundan sonra, yeni bir APP oluşturabileceksiniz.

Uygulamayı oluşturduktan sonra Anahtarlar ve Simgeler'e gidin ve Erişim Simgesi ve Erişim Simgesi Sırrı Oluşturun. SADECE BİR KEZ - BUNLARI KOPYALAYIN VE SONRAKİ İÇİN SAKLAYIN.

Twitter hesabınıza resim göndermek için aşağıdaki kodu kullanın. Doldurmayı unutmayın:

  • tüketici anahtarı
  • tüketici mahremiyeti
  • erişim_token
  • access_token_secret

twitter mesajı, tweet'te gönderilecek metindir.

jpg_foto_to_send, tweet'e eklenecek bir resimdir. Lütfen Python betiğiyle aynı dizinde bir resim bulundurun ve koddaki adı değiştirin.

import tweepy # Twitter ayarları 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) # Twitter'a gönder def sendToTwitter(): cfg = { "consumer_key": "", "consumer_secret": "", "access_token": "", "access_token_secret": "" } api = get_api(cfg) # Durum Mesajı tweet = "Twitter mesajı" status = api.update_with_media("jpg_foto_to_Send", tweet) sendToTwitter()

Tweet'iniz için Twitter beslemenizi kontrol edin.

İşte Tweet

Veya feryat:

#RaspberryPI MagicBox. Fotoğraf çekin, inceleyin ve twitter ve Facebook'a göndermeyi seçin. Ahududu PI tarafından desteklenmektedir. @@Raspberry_Pi#RaspberryPI#RaspberryPIProjectpic.twitter.com/cCL33Zjb8p

- Bruno Ricardo Santos (@feiticeir0) 29 Şubat 2020

Adım 11: Bazı Öğeleri Birleştirme

Bazı Elemanları Birleştirmek
Bazı Elemanları Birleştirmek
Bazı Elemanları Birleştirmek
Bazı Elemanları Birleştirmek

Şimdi Big Dome Push butonunu birleştirip, basarak, geri sayarak, fotoğrafını çekelim, twitter'a gönderilip gönderilmeyeceğine karar verelim.

Başka bir bindirme görüntüsü ekleyeceğiz ve üç düğmeyi de kullanacağız. Resim çekildiğinde, 3 düğmenin tüm LED'leri yanacaktır.

Sosyal ağlara gönderilecek simgeleri gösteren başka bir resim ekliyoruz

SelectOption-p.webp

Aenviar.png, sadece Sosyal Ağlara gönderildiğini söyleyen bir mesajdır.

Videoda Mavi basma düğmesi (kameranın önü) gösterilmiyor, ancak LED yanıyor ve basıldığı anda yanıp sönmeye başlıyor.

İsterseniz kod ektedir

Bu, ana programdan önceki son test kodudur.

# coding=utf-8 içe aktarma picamera içe aktarma _thread alt işlemi zamandan sp olarak içe aktarma RPi'den uykuyu içe aktarma PIL'den GPIO'yu içe aktarma Görüntü içe aktarma iş parçacığı # Twitter içe aktarma tweepy # Facebook içe aktarma facebook # Fotoğraf çekme butonu = 17 # SocialNetwork Button socialNetworkButton = 23 # İptal Resim iptalButton = 24 # Resim çek düğmesi LED'i takePicButtonLed = 27 # Sosyal Ağa Gönder düğmesi LED postSNLed = 22 # İptal düğmesi LED'i iptalButtonLed = 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.setup(postSNLed, GPIO.) GPIO.setup(cancelButtonLed, GPIO. OUT) # Twitter ayarları def get_api(cfg): auth = tweepy. OAuthHandler(cfg['consumer_key'], cfg['consumer_secret']) auth.set_access_token(cfg']access_token, cfg['access_token_secret']) return tweepy. API(auth) # Twitter'a gönder def sendToTwitter(): cfg = { "con sumer_key": "", "consumer_secret": "", "access_token": "", "access_token_secret": "" } api = get_api(cfg) # Durum Mesajı tweet = "MagicBox talimat testi. #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']) # Sayfa jetonunu al sayfa olarak gönder. Kendin gibi gönderi yapmak istiyorsan, aşağıdaki # atlayabilirsin. resp = graph.get_object('me/accounts') page_access_token = resp['data'] içindeki sayfa için yok: if page['id'] == cfg['page_id']: page_access_token = sayfa['access_token'] graph = facebook. GraphAPI(page_access_token) dönüş grafiği # Facebook'a gönder def sendToFacebook(): #erişim için değerler cfg = { "page_id": "", "access_token": "" } api = get_api_facebook(cfg) caption = "Görüntünün altyazısı" albumid = "" api.put_photo(image=open("pushTesting.jpg", "rb"), caption="Görüntünün başlığı ") # Yalnızca hafif TakePicButtonLed def onlyTakePicLed(): GPIO.output(takePicButtonLed, True) GPIO.output(postSNLed, False) GPIO.output(cancelButtonLed, False) # Yalnızca hafif İptal ve SocialNetwork düğmesi def iptalPostLEDS(): GPI O.output(takePicButtonLed, False) GPIO.output(postSNLed, True) GPIO.output(cancelButtonLed, True) # Def sayma sırasında yanıp sönen resim çekme LED'iTimerPicture(): GPIO.output(takePicButtonLed, True) uyku(0.5) GPIO.output(takePicButtonLed, False) sleep(0.5) GPIO.output(takePicButtonLed, True) sleep(0.5) GPIO.output(takePicButtonLed,False) sleep(0.5) GPIO.output(takePicButtonLed, True) sleep(0.5) GPIO.output(takePicButtonLed, False) # PostSNL'yi sosyal ağlara gönderirken yanıp söner def flashPosting(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) # Katman 1'de bir önizleme göster def displayPreview(imgName): # PIL resim gösterisi saçma olduğu için # görüntülemek için kameradan bindirmeyi kullanıyoruz # önizleme 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 # Katmanda bir önizleme göster 3 def displayPreview3(imgName): # PIL resim gösterisi bir crapp olduğundan #, ön izlemeyi görüntülemek için kameradaki bindirmeyi kullanırız 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 dönüş ov # function overlaySocialNetwork def overlaysn(): imgsn = Image.open('SelectOption.png') # Create Bindirme paneli = Image.new('RGB', (((imgsn.size[0] + 31) // 32) * 32, ((imgsn.size[1] + 15) // 16) * 16,)) # Bindirmeyi yapıştır pad.paste(imgsn, (0, 0)) ov = camera.add_overlay(pad.tobytes(), size=imgsn.size) ov.alpha = 100 ov.layer = 3 return ov # Bindirme işlevi image def overlayCounter(): #load image img1 = Image.open('3.png') img2 = Image.open('2.png') img3 = Image.open('1.png') # Bir bindirme oluştur # Hepsi aynı boyutta olduğundan img1 ile birlikte kullanılır pad = Image.new('RGB', (((img1.size[0] + 31) // 32) * 32, ((img1.size[1] + 15) // 16) * 16,)) # bindirmeyi yapıştır - 3 pad.paste(img1, (0, 0)) ov = camera.add_overlay(pad.tobytes(), size=img1.size) ov.alpha = 200 # katman 3'tür çünkü kamera önizlemesi katman 2'dedir ov.layer = 3 sleep(1) camera.remove_overlay(ov) # kaplamayı yapıştırın - 2 pad.paste(img2, (0, 0)) ov = camera.add_overlay(pad.tobytes(), size=img2.size) ov.alpha = 200 # katman 3'tür çünkü kamera önizlemesi katman 2'dedir ov.layer = 3 sleep(1) camera.remove_overlay(ov) # yapıştır kaplama - 1 pad.paste(img3, (0, 0)) ov = camera.add_overlay(pad.tobytes(), size=img3.size) ov.alpha = 200 # katman 3'tür çünkü kamera önizlemesi katman 2'dedir ov.layer = 3 sleep(1) camera.remove_overlay(ov) # Ana işlev # Önyükleme mesajlarının olmaması için ekranı temizle # muhtemelen bunu bash'da yapmak daha iyi olabilir 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' # Burada test etmeyi deneyin: while (Doğru): camera.start_preview() #Yalnızca Resim Çek için LED'i GösterTakePicLed() # Düğmenin çekilmesini bekleyin Picture GPIO.wait_for_edge(takeButton, GPIO. FALLING) # Resimler gösterilirken LED'lerle saymak için bir iş parçacığı başlatın # Muhtemelen overlayCounter işlevinde kullanılabilir, # çünkü aynı zamanda resimleri göstermek için zamanlayıcılara sahiptir, ancak led efektleri # aynı olmaz _thread.start_new_thread (countingTimerPicture, ()) # Kameradaki resimlerin yer paylaşımını göster overlayCounter() # Resim çekerken tüm LED'leri göster showAllLeds() camera.capture('pushTesting.jpg') kamera. stop_preview() #display image displayPreview('pushTesting.jpg') # Overlay'i göster oo = overlaysn() # İptal Edilecek veya Sosyal Ağlara Gönderilecek LED'leri Göster CancelPostLEDS() GPIO.add_event_detect(socialNetworkButton, GPIO. FALLING) GPIO.add_event_detect(cancel), GPIO. FALLING) while (Doğru): if GPIO.event_detecte d(socialNetworkButton): camera.remove_overlay(oo) GPIO.output(cancelButtonLed, False) o = displayPreview3('Aenviar.png') #print "Sosyal Ağlar Düğmesi" sendToTwitter() sendToFacebook() camera.remove_overlay(o) kırılırsa GPIO.event_detected(cancelButton): #print "İptal edildi" camera.remove_overlay(oo) break # reset GPIOS GPIO.remove_event_detect(socialNetworkButton) GPIO.remove_event_detect(cancelButton) GPIO.remove_event_detect() GPIO.remove_event_detect. "Çıkış yapıldı…") #offLeds() GPIO.cleanup()

Adım 12: Kablolama

Image
Image
kablolama
kablolama
kablolama
kablolama

Kablolama, Big Dome Push butonlarını Raspberry PI'ye bağlar.

Sadece Fritzing Şemasını takip edin.

Bağlantılar:

BağlantıRPI GPIO PIN GND Yeşil ButonGND (#3) GND Sarı ButonGND (#9) GND Mavi ButonGND(#39) Resim Çek (Mavi Basma Düğmesi "Yapmak için Bas")17 (BCM) Sosyal Ağlara Gönder (Yeşil Basma) "Yapmak için bas")23 (BCM) İptal (Sarı Düğme "Yapmak için Bas")24 (BCM) Mavi Düğme LED27 (BCM) Yeşil Düğme LED22 (BCM) Sarı Düğme LED5 (BCM)

Isıyla büzüşen ayrıca renk kodludur

  • Siyah, GND bağlantılarıdır
  • Sarı, "yapmak için bas" bağlantılarıdır
  • Mavi LED bağlantılarıdır

GPIO. BCM numaraları ve GPIO. BOARD bağlantıları

Bağlantılarım BCM olduğundan, şimdi bunun hakkında ve BCM ile BOARD arasındaki farktan bahsetmek için iyi bir zaman olduğunu düşünüyorum.

Temel fark, GPIO PIN'lerine nasıl başvurduğunuzdur, bu da bağlantıları nasıl yapacağınızı yönlendirecektir. GPIO.board, PIN'leri internetteki herhangi bir GPIO düzeninde basılan numaraya göre yönlendirecektir.

GPIO. BCM, PIN numaralarını Broadcom SOC'nin gördüğü şekliyle ifade eder. Bunun Raspberry PI'nin daha yeni sürümleri boyunca değişmesi muhtemeldir.

pinout.xyz sitesinde, kart numaraları pinlerin hemen yanındaki numaralardır ve BCM'ye şu şekilde atıfta bulunulur - BCM X (burada X sayıdır)

Adım 13: MagicBox

Bu adıma ekli kod nihaidir.

Giriş yapmanıza gerek kalmadan ahududu PI önyüklemesinde çalıştırabilirsiniz. Bunu yapmak için, kodu yerleştirdiğiniz dizinde bu küçük komut dosyasını oluşturmanız yeterlidir - yolları buna göre değiştirin

#!/bin/bash

cd /home/pi/magicbox python MagicBox.py

Yürütülebilir yap

chmod +x start_magicbox.sh

Şimdi, çıkış 0 talimatından hemen önce /etc/rc.local içinde arayın

sudo vi /etc/rc.local

/home/pi/magicbox/start_magicbox.sh &

kaydet ve çık.

Şimdi, her yeniden başlatma ile Python programı yürütülecek

NOT: Tüm görüntü dosyaları, komut dosyasıyla aynı dizinde olmalıdır. Sahip olmalısın:

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

Tüm bu dosyaları MagicBox'ın github'ından alabilirsiniz.

Önerilen: