İçindekiler:
- Gereçler
- 1. Adım: Oluşturun
- 2. Adım: Kamera
- 3. Adım: İzleyin
- Adım 4: Dekorasyon
- Adım 5: Programlama
- Adım 6: Raspberry PI'yi Hazırlama
- 7. Adım: Yazılım
- Adım 8: Programlama - Kamera Önizlemesi
- Adım 9: Programlama - Büyük Kubbe Basma Düğmesi
- Adım 10: Twitter'a Gönderin
- Adım 11: Bazı Öğeleri Birleştirme
- Adım 12: Kablolama
- Adım 13: MagicBox
Video: RaspberryPI Fotoğraf Makinesi - MagicBox: 13 Adım (Resimlerle)
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-31 10:26
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
İ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 ş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 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
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'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ı
- Seçenek 5 - Arayüz Seçenekleri'ni seçin
- P1'i seçin - Raspberry PI kameraya bağlantıyı etkinleştirin/devre dışı bırakın
- Evet de
- tamam için
- Bitir'i seçin
- Ş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
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
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
Ş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
Ş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
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:
Sony A6000 Fotoğraf Makinesi Nasıl Şarj Edilir: 17 Adım
Sony A6000 Fotoğraf Makinesi Nasıl Şarj Edilir: Fotoğraf makinesini ilk kez kullanırken pil takımını şarj ettiğinizden emin olun. Şarj edilmiş pil takımı, kullanmasanız bile yavaş yavaş boşalacaktır. Bir çekim fırsatını kaçırmamak için çekimden önce pil takımını şarj edin. (uygulama
DIY Görüntü Sensörü ve Dijital Fotoğraf Makinesi: 14 Adım (Resimlerle)
Kendin Yap Görüntü Sensörü ve Dijital Kamera: Kendi film kameranızı oluşturmaya ilişkin birçok çevrimiçi eğitim var, ancak kendi görüntü sensörünüzü oluşturmaya ilişkin hiçbir şey olduğunu sanmıyorum! Kullanıma hazır görüntü sensörleri birçok şirkette çevrimiçi olarak mevcuttur ve bunları kullanmak, tasarımın
Saç Kurutma Makinesi Nasıl Yapılır - Kendin Yap Ev Yapımı Saç Kurutma Makinesi: 6 Adım (Resimlerle)
Saç Kurutma Makinesi Nasıl Yapılır - Kendin Yap Ev Yapımı Saç Kurutma Makinesi: ❄ BURAYA ABONE OLUN ➜ https://www.youtube.com/subscription_center?add_us…❄ TÜM VİDEOLAR BURADA ➜ http://www.youtube.com/user/fixitsamo /videos❄ BİZİ TAKİP EDİN: FACEBOOK ➜ https://www.facebook.com/fixitsamo PINTEREST ➜ https://www.facebook.com/fixitsamo
DXG 305V Dijital Fotoğraf Makinesi Pil Modu - Artık Yıpranmış Piller Yok!: 5 Adım
DXG 305V Dijital Fotoğraf Makinesi Pil Modu - Artık Pillerin Eskimesi Yok!: Bu dijital fotoğraf makinesini birkaç yıldır kullanıyorum ve hemen şarj edilebilir pillerin gücünü emdiğini fark ettim! Sonunda, pilleri gerçekten ihtiyacım olduğunda o zamanlar için saklayabilmem için onu değiştirmenin bir yolunu düşündüm
Olympus SP-350 Dijital Fotoğraf Makinesi için Kablo Serbest Bırakma Yuvası: 11 Adım
Olympus SP-350 Dijital Fotoğraf Makinesi için Kablo Serbest Bırakma Yuvası: Bu fotoğraf makinesi, belgeleri kopyalamak için harikadır ve düz yataklı bir tarayıcı kullanmaktan çok daha hızlıdır. Esas olarak, yüksek kaliteli görüntüler oluşturmak yerine, okunabilir dijital görüntüler oluşturmak için basılı veya el yazısı sayfaları hızlı bir şekilde kopyalamakla ilgileniyorum