Mündəricat:

RaspberryPI Foto Kamera - MagicBox: 13 Addım (Şəkillərlə birlikdə)
RaspberryPI Foto Kamera - MagicBox: 13 Addım (Şəkillərlə birlikdə)

Video: RaspberryPI Foto Kamera - MagicBox: 13 Addım (Şəkillərlə birlikdə)

Video: RaspberryPI Foto Kamera - MagicBox: 13 Addım (Şəkillərlə birlikdə)
Video: РЕПКА ВКУСНЕЕ МАЛИНЫ? Смотрим на Repka Pi, сравниваем с Raspberry Pi 2024, Noyabr
Anonim
Image
Image
Qurmaq
Qurmaq

Bir müddət əvvəl, Raspberry PI -dən bir fotoşəkil maşını yaratmaq fikrim var idi. Mənim şəhərimdə insanların gedib elektronika, kompüter və s. İstifadə edərək nə etdiklərini və ya etdiklərini göstərəcəkləri kiçik bir şou var idi … Mən yoxsul bir adamın Maker Faire kimi idim, amma yerli miqyasda.

Biri gəlirdi və həyat yoldaşımla birlikdə bu şeyi tikirik.

Bu necə işləyir ?

Mavi düyməni basırsınız - yanıb -sönməyə başlayır və 3 saniyədən sonra şəkil çəkilir. Kameranın digər tərəfində bir geri sayım göstərən bir şəkil və şəkil çəkildikdən sonra fotoşəkilin ön görünüşü var.

İndi onu Twitter və Facebook -a göndərməyi və ya ləğv edib yenidən cəhd etməyi seçə bilərsiniz. Bu qədər sadədir.

PI çərçivə tamponundan istifadə edərək hər şey Pythonda proqramlaşdırılmışdır - Xorg yoxdur, GUI istifadə edilmir.

İşdə layihənin işlədiyi bir video

Təchizat

  • Raspberry PI (2 -ci versiyadan istifadə edirəm)
  • Raspberry PI Kamera (1 -ci versiyadan istifadə edərək)
  • 3x Böyük Dome düymələri
  • VGA/HDMI ilə TFT/LCD Monitor
  • MDF
  • Metal menteşələr, vintlər və s.
  • Elektrik alətləri
  • Boş vaxt və çox əyləncə

Addım 1: Qurmaq

Qurmaq
Qurmaq
Qurmaq
Qurmaq

Onu tikmək əyləncəli idi. Bir çox kəsmə, rəngləmə və qazma.

Kameranın əsas quruluşunu yaratmaq üçün MDF panellərindən istifadə etdim. Yüngül və işləmək asandır. Ayrıca, yerli Fablabdakı Lazer maşınının kəsə bildiyi bir növ ağac idi.

İçəridə olan naqillərə hidravlik menteşələrdən istifadə edərək monitoru qaldırmaq üçün monitorun tərəfi daxil idi.

Addım 2: Kamera

Kamera
Kamera
Kamera
Kamera
Kamera
Kamera

Kamera

Kamera aşağıdakı ölçüləri olan bir qutudur: 60cm x 40cm x 30cm Sizinki daha kiçik, daha böyük ola bilər, bu sizə bağlıdır. İstifadə edəcəyiniz monitoru yerləşdirmək kifayətdir. MDF panelləri yerli Fablab -da lazerlə kəsilmişdir. Arxada 3 çuxura ehtiyac var - iki böyük günbəz basma düyməsi və biri də monitor üçün. Ön tərəfdə, Raspberry PI kamerası üçün 2 deşik - biri böyük bir günbəz düyməsinə, digəri isə kiçikdir. Xüsusi ölçülərim yoxdur - sadəcə bir kamera təsəvvür edin və ondan istifadə edin.

Addım 3: Monitor

Ekran
Ekran
Ekran
Ekran
Ekran
Ekran

Ekran

Monitör dəstəyi, ölçüləri daxilində dəstəkləmək üçün kiçik taxta parçaları əlavə etdi.

Plastik korpusdan çıxarıldı və vintlər ilə sabitləndi. Kaldırmağa kömək etmək üçün iki hidravlik menteşə (istifadə olunur) istifadə edilmişdir.

Addım 4: Dekorasiya

Dekorasiya
Dekorasiya
Dekorasiya
Dekorasiya
Dekorasiya
Dekorasiya
Dekorasiya
Dekorasiya

Fuji X-T30-un tərzini çox bəyəndiyim üçün gedib oxşar bir şey etdik.

Əvvəlcə köpüklə örtdük və sonra qara rəngə boyadıq. Boyadan sonra gümüş hissələr üçün alüminium folqa əlavə edib içəri sarırıq

Lensi simulyasiya etmək üçün, Raspberry PI kamera modulunun oturması üçün kiçik bir deşik açsaydıq, yuvarlaq bir Tupperware istifadə etdik.

Addım 5: Proqramlaşdırma

Kameranı proqramlaşdırmaq çətin idi, amma çox əyləncəli idi.

GUI yoxdur - bu CLI üzərində işləyir və Python 3 versiyasında işləyir.

Əvvəlcə düymələri sınamaq və proqramlaşdırmaqla başladım, sonra isə artıq verilmiş vasitələrdən və Python API -dən istifadə edərək şəkil çəkmək. Daha sonra kamera çıxışında (geri sayım üçün) şəkilləri örtməyə və Twitter və Facebook ilə qarşılıqlı əlaqəyə keçdim.

Bütün bunlardan razı qaldıqdan sonra, bir tapmaca kimi, bütün parçaları bir yerə yığdım. Burada eyni proseslə gedirik. Yavaş və kiçikdən başlayın və sürətlə böyükə keçin.

Əvvəlcə Raspberry PI -ni konfiqurasiya etməklə başlayaq

Addım 6: Raspberry PI hazırlanması

Raspberry PI hazırlanması
Raspberry PI hazırlanması
Raspberry PI hazırlanması
Raspberry PI hazırlanması
Raspberry PI hazırlanması
Raspberry PI hazırlanması

Raspbian -ı Raspberry PI -də necə quracağınızı izah etməyəcəyəm - hətta Raspberry PI rəsmi saytında belə bir çox dərslər var.

Bunun üçün SSH girişinə sahib olmalısınız və ya bir monitöre qoşmalı və bir klaviatura və siçan bağlamalısınız.

DİQQƏT: Raspberry PI kamerası ilə işə başlayanda onu bir monitora qoşmalısınız. Oraya qədər bütün addımlar SSH istifadə edərək edilə bilər.

Raspberry PI -ni yüklədikdən sonra, Raspberry PI kamerasını işə salmalıyıq. Bunun üçün raspi-config alətindən istifadə edək.

sudo raspi-config

  1. Seçim 5 - Arayüz Seçimləri seçin
  2. P1 seçin - Raspberry PI kamera ilə əlaqəni aktivləşdir/deaktiv edin
  3. Bəli demək
  4. OK üçün
  5. Bitir seçin
  6. İndi yenidən başlatmaq üçün Bəli seçin

Yenidən başladıqdan sonra davam edə bilərik

Addım 7: Proqram təminatı

Qurulacaq bəzi Python kitabxanalarına ehtiyacımız olacaq. Bu, ən son Raspbian versiyası - Buster üçün yeniləndi

Əvvəlcə Python 3 -ü standart olaraq təyin edək. SİSTEM WIDE -in necə qurulacağını bilmək üçün bu linki izləyin

Kitabxanalar:

  • python-pil.imagetk şəkilləri idarə etmək üçün
  • GPIO PINS-ə daxil olmaq üçün python-rpi.gpio
  • Raspberry PI Kamerasına daxil olmaq üçün python-picamera
  • Şəkli twitter -də paylaşmaq üçün tweepy
  • facebook səhifəsində paylaşmaq üçün facebook-sdk

sudo apt-get python3-pil.imagetk python3-rpi.gpio python3-picamera python3-tweepy python3-pip quraşdırın

Facebook-sdk qurmaq üçün Python pip istifadə edin

sudo pip3 facebook-sdk quraşdırın

Addım 8: Proqramlaşdırma - Kameraya Önizləmə

Image
Image
Proqramlaşdırma - Kameraya Önizləmə
Proqramlaşdırma - Kameraya Önizləmə
Proqramlaşdırma - Kameraya Önizləmə
Proqramlaşdırma - Kameraya Önizləmə

Bu layihəyə qoyduğum tələblərdən biri də bu proqramın CLI rejimində çalışması idi. Beləliklə, kamera görüntüsünü konsolda göstərməliyik. Bunun üçün Python Picamera'dan istifadə edək. Bundan sonra, pil.imagetk istifadə edərək kamera önizləməsinin üstündə bir örtüşmə göstərək

Kiçik proqramımız (sonunda böyük olana qədər kiçik proqramlar hazırlayacağıq) kamera önizləməsini göstərəcək.

#!/usr/bin/env python

idxal vaxtı idxal pikamera vaxtdan idxal yuxu kamerası = picamera. PiCamera () # İstədiyiniz qətnaməni qurun kamera.resolution = (1280, 1024) camera.framerate = 24 camera.start_preview () try: while (True): sleep (1)) (KeyboardInterrupt, SystemExit) istisna olmaqla: print ("Exiting…") camera.stop_preview ()

Bunu sınamaq üçün sadəcə icra edin

python kameraPreview.py

Üstündə şəkillər olan kameraya önizləyin

Şəkil çəkməzdən əvvəl geri sayımın göstərilməsini istədiyim üçün kamera önizləməsinin üst -üstə düşən şəkillərə ehtiyacım var idi.

Aşağıdakı kod kamera önizləməsi ilə 1-p.webp

PIC idarəsindən PIL idxal et Image, picamera. PiCamera () ilə kamera idarəsi zamanı yuxu gətirir: camera.resolution = (1920, 1080) camera.framerate = 24 camera.start_preview () # load image img = Image.open ('1-p.webp

Yoxla:

python imageOverlay.py

İndi üst -üstə düşən şəkillərlə bir geri sayım yaradaq. 1-p.webp

Bundan sonra, yalnız aşağıdakı kodu istifadə edin:

picamera idxal edin

PIL importundan Image idxalı zamanı picamera. PiCamera () ilə kamera: kamera.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 yuxu (2) #əvvəlki bindirme kamerasını silmək tobytes (), size = img2.size) o.alpha = 128 o.layer = 3 yuxu (2) # əvvəlki örtülü kameranı çıxarın add_overlay (pad.tobytes (), size = img3.size) o.alfa = 128 o.layer = 3 yuxu (2)

İndi icra edin:

python imageOverlayCounter.py

Və geri saymağa baxın

Vay - Çox kod var və heç bir şəkil çəkilməyib … Gəlin hamısını bir araya gətirərək həll edək - kamera, geri sayma və şəkil çəkin

PIL idxalından PIL idxalı Şəkil idxalı zamanı yuxu def overlayCounter (): # load image img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.-p.webp

Yoxla:

python şəkliWithTimer.py

Və burada Yoda var

Addım 9: Proqramlaşdırma - Böyük Dome Push Button

Proqramlaşdırma - Böyük Dome Push Button
Proqramlaşdırma - Böyük Dome Push Button
Proqramlaşdırma - Böyük Dome Push Button
Proqramlaşdırma - Böyük Dome Push Button

Böyük günbəz basma düyməsi böyük bir yuvarlaq düymədir - kiçik bir LED ilə diametri təxminən 100 mm. 12V -də işlədiyini söyləyir, ancaq Raspberry PI -nin 3.3v cihazı onu işıqlandırmaq üçün kifayətdir

Test üçün sxemdən istifadə edin

Kod:

RPi idxal GPIO -dan

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) # Bloklama funksiyası GPIO.wait_for_edge (takeButton, GPIO. FALLING) çap ("Düymə Basıldı") GPIO.output (ledButton, False) GPIO.cleanup ()

Kodun bəzi izahları GPIOS -dan dəyərlər əldə etməyin formalarından biri də kəsilmələrdir (digəri sorğudur) - kənar aşkarlama.

Kenar YÜKSƏKDEN LOW (düşən kənar) və ya LOW -dan HIGH -a (yüksələn kənar) keçidin adıdır. PIN heç bir şeyə bağlı olmadıqda, hər hansı bir oxunuş təyin olunmayacaq. Bir həll yolu, PİN -də yuxarı/aşağı çəkmə rezistorunun olmasıdır. Raspberry PI, proqram vasitəsi ilə yuxarı/aşağı çəkmə rezistorlarını konfiqurasiya etməyə imkan verir.

Xətt

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

PIN kodunu konfiqurasiya edir - yuxarı çəkin

Niyə yuxarı çəkilsin? Yaxşı, böyük günbəz basma düyməsinin 2 PİN kodu var - qırmaq və ya etmək üçün itələyin (tez -tez Arduino/Raspberry PI dəstləri ilə gələn kiçik düymələr kimi). Düymənin "etmək üçün bas" PIN koduna bağladım. Basıldıqda dövrə bağlanır və elektrik keçir (normal olaraq açıqdır).

Xətt

GPIO.wait_for_edge (takeButton, GPIO. FALLING)

PİN -in düşməsini algılayana qədər gözləyəcək (skriptin icrasını effektiv şəkildə dayandıracaq) - düyməni buraxmaq elektrik axını kəsəcək və PIN 3.3v -dən 0v -ə keçəcək.

LED PIN düyməsindəki LED -i yandırmaq üçündür

Arduino Dərsliklərindən, açmaqdan və ya qırmaqdan və GPIO -dan kəsilməkdən bəhs edən təkan açarları haqqında daha çox məlumat

İndi bir düyməni kamera ilə birləşdirək - Yalnız düymə basıldığında şəkil çəkin

PIL idxalından RPi -dən GPIO -dan idxal yuxu vaxtından yuxu idxalı Image # QEYD: Əsas proqramda ləğv etmə düyməsi budur # Videonun aydın olması üçün burada istifadə edirəm 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) yuxu (1) def offLeds (): GPIO.output (ledCancel, False) # Image def overlayCounter (): # şəkilləri yüklə img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.png') # Bir örtük yaradın # Hamısı eyni ölçüdə olduğu üçün img1 ilə istifadə olunur = Image.new ('RGB', (((img1.size [0] + 31) // 32) * 32, ((img1.size [1] + 15) // 16) * 16,)) # üst üstə yapışdırın - 3 pad.paste (img1, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img1.size) ov.alpha = 200 # qat 3 -dür, çünki kamera önizlənməsi 2 -ci mərtəbədədir ov.layer = 3 yuxu (1) kamera.remove_overlay (ov) # üst üstə yapışdırın - 2 pad.paste (img2, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img2.size) ov.alpha = 200 # qat 3 -dür, çünki kamera önizləmə 2 -ci təbəqədədir ov.layer = 3 yuxu (1) kamera.remove_overlay (ov)) # örtüyü yapışdırın - 1 pad.paste (img3, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img3.size) ov.alpha = 200 # qat 3 -dir, çünki kamera önizləmə qat 2 ov.layer = 3 yuxu (1) camera.remove_overlay (ov) kamera = picamera. PiCamera () kamera.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 ()

Bir az kod izahı

Kamera önizləməsinə başlayır və bir düyməyə basılana qədər orada gözləyir. Düymə basıldıqdan sonra LED yanır və geri sayma başlayır. Sona çatanda şəkil çəkilir və LED sönür

Addım 10: Twitter -ə göndərin

Twitter -ə yazın
Twitter -ə yazın
Twitter -ə yazın
Twitter -ə yazın
Twitter -ə yazın
Twitter -ə yazın

İndi Python istifadə edəcəyik və bir tvit yazacağıq!:) Göndərmək üçün bir şəkilə ehtiyacınız olacaq - ağıllı seçin.

Əvvəlcə twitter API -yə daxil olmalıyıq və bunun üçün bir tətbiq yaratmalıyıq. Yeni bir tətbiq yaratmaq üçün https://apps.twitter.com saytına daxil olun.

Bir geliştirici hesabı üçün müraciət etməlisiniz - bəzi sualları doldurun və e -poçt ünvanınızı təsdiq edin. Bundan sonra yeni bir tətbiq yarada bilərsiniz.

Tətbiq yaratdıqdan sonra Açarlara və Tokenlərə gedin və Giriş Tokeni və Giriş Token Sirri yaradın. Açılan düymələri olan bir pəncərə görünəcək - bunları kopyalayıb daha sonra saxla.

Twitter hesabınıza şəkil göndərmək üçün aşağıdakı kodu istifadə edin. Doldurmağı unutmayın:

  • istehlakçı_ açarı
  • istehlakçı_sirri
  • access_token
  • access_token_secret

twitter mesajı, tvitdə göndəriləcək mətndir.

jpg_foto_to_send, tvitə əlavə ediləcək bir şəkildir. Zəhmət olmasa Python skripti ilə eyni qovluqda bir şəkil çəkin və koddakı adı dəyişdirin.

tweepy # Twitter parametrlərini daxil edin 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ə göndər defToTwitter (): cfg = {"Consumer_key": "", "Consumer_secret": "", "access_token": "", "access_token_secret": ""} api = get_api (cfg) # Status Mesajı tweet = "Twitter mesajı" status = api.update_with_media ("jpg_foto_to_Send", tweet) sendToTwitter ()

Tweet üçün Twitter kanalınızı yoxlayın.

İşdə Tweet

Və ya körük:

#RaspberryPI MagicBox. Şəkillər çəkin, nəzərdən keçirin və twitter və Facebook -a göndərməyi seçin. Raspberry PI tərəfindən dəstəklənir. @@ Raspberry_Pi#RaspberryPI#RaspberryPIProjectpic.twitter.com/cCL33Zjb8p

- Bruno Ricardo Santos (@feiticeir0) 29 Fevral 2020

Addım 11: Bəzi elementləri birləşdirin

Bəzi elementlərin birləşməsi
Bəzi elementlərin birləşməsi
Bəzi elementlərin birləşməsi
Bəzi elementlərin birləşməsi

İndi Big Dome Push düyməsini birləşdirək, basıb, geri sayaq, şəkil çəkək, twitterə göndərib göndərməyəcəyimizə qərar verək.

Başqa bir örtük şəkli əlavə edəcəyik və üç düyməni istifadə edəcəyik. Şəkil çəkildikdə bütün 3 düyməli LEDlər yanacaq.

Sosial şəbəkələrdə yayımlanacaq nişanları göstərən başqa bir şəkil əlavə edirik

SelectOption-p.webp

Aenviar.png, Sosial Şəbəkələrə göndərilən bir mesajdır.

Videoda Mavi düymə (kameranın önü) göstərilmir, ancaq LED yanır və basıldığı anda yanıb sönməyə başlayır.

İstəsəniz kod əlavə olunur

Bu, əsas proqramdan əvvəl son sınaq kodudur.

# coding = utf-8 import picamera import _thread import subprocess from time from import time from RPi import GPIO from PIL import Image import threading # Twitter import tweepy # Facebook import facebook # Şəkil çəkmək üçün düyməButton = 17 # SocialNetwork Button socialNetworkButton = 23 # Ləğv et Şəkil ləğv etmə düyməsi = 24 # Şəkil çək düyməsi LED çəkməPicButtonLed = 27 # Sosial Şəbəkəyə Göndər düyməsi LED postSNLed = 22 # İptal düyməsi LED ləğvButtonLed = 5 GPIO.setmode (GPIO. BCM) GPIO.setup (takeButton, GPIO. IN, GPIO. PUD_UP) GPIO.setup (socialNetworkButton, GPIO. IN, GPIO. PUD_UP) GPIO.setup (ləğvButton, GPIO. IN, GPIO. PUD_UP) GPIO.setup (takePicButtonLed, GPIO. OUT) GPIO.setup (postSNLed, GPIO. OUT)) GPIO.setup (bekorButtonLed, GPIO. OUT) # Twitter ayarları def_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 -ə göndər defToTwitter (): cfg = {"con sumer_key ":" "," Consumer_secret ":" "," access_token ":" "," access_token_secret ":" "} api = get_api (cfg) # Status Message tweet =" MagicBox təlimatlı test. #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'])) # Səhifə olaraq yazın. Özünüz kimi yazmaq istəyirsinizsə # aşağıdakıları atlaya bilərsiniz. resp = graph.get_object ('mən/hesablar') page_access_token = Resp [səhifədəki '' səhifədə heç bir məlumat yoxdur]: əgər səhifə ['id'] == cfg ['page_id']: page_access_token = page ['access_token'] graph = facebook. GraphAPI (page_access_token) qayıtma qrafiki # facebook -a göndər sendToFacebook (): # Giriş cfg = {"page_id": "" dəyərləri, "access_token": ""} api = get_api_facebook (cfg) caption = "Şəklin başlığı" albumid = "" api.put_photo (image = açıq ("pushTesting.jpg", "rb"), caption = "Şəklin başlığı ") # Yalnız Light TakePicButtonLed def yalnızTakePicLed (): GPIO.output (takePicButtonLed, True) GPIO.output (postSNLed, False) GPIO.output (bekorButtonLed, False) # Yalnız İşıq Ləğv et və Sosial Şəbəkə düyməsini ləğv etPostLEDS (): GPI O.output (takePicButtonLed, False) GPIO.output (postSNLed, True) GPIO.output (ləğvButtonLed, True) # Geri sayma zamanı TimerPicture (): GPIO.output (takePicButtonLed, True) yuxu (0.5) GPIO..output (takePicButtonLed, False) yuxu (0.5) GPIO.output (takePicButtonLed, True) yuxu (0.5) GPIO.output (takePicButtonLed,Yanlış) yuxu (0.5) GPIO.output (takePicButtonLed, Doğru) yuxu (0.5) GPIO.output (takePicButtonLed, Yanlış) # Sosial şəbəkələrə yazılarkən blink postSNLed def blinkPosting (stop_event): # Start while (not_vent.is_set ()): çap ("söndürülmüş") GPIO.output (postSNLed, Yanlış) yuxu (0.5) çap ("açıq") GPIO.output (postSNLed, Doğru) yuxu (0.5) def timer (): GPIO.output (takePicButtonLed, Doğru)) yuxu (1) GPIO.output (postSNLed, True) yuxu (1) GPIO.output (ləğvButtonLed, True) yuxu (1) def showAllLeds (): GPIO.output (takePicButtonLed, Doğru) GPIO. çıxış (postSNLed, Doğru) GPIO.output (ləğv etmək ButtonLed, True) # 1 -ci təbəqədə bir önizləmə göstər Def displayPreview (imgName): # PIL şəkil şousu pis bir şey olduğu üçün # önizləmə img = Image.open (imgName) görüntüləmək üçün kameranın üzərindən istifadə edirik.) 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 # Qatda önizləmə göstərin 3 def displayPreview3 (imgName): # PIL şəkil şousu bədbəxt olduğuna görə # önizləmə görüntüsünü göstərmək üçün kameradan istifadə edirik # 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 # Function overlaySocialNetwork def overlaysn (): imgsn = Image.open ('SelectOption.png') # Yarat Yer örtüyü = Image.new ('RGB', (((imgsn.size [0] + 31) // 32) * 32, ((imgsn.size [1] + 15) // 16) * 16,)) # Yer örtüyü yastığını yapışdırın. image def overlayCounter (): # şəkilləri yüklə img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.png') # Bir örtüşmə yaradın # Hamısı eyni ölçüdə olduğu üçün img1 ilə istifadə olunur = Image.new ('RGB', (((img1.size [0] + 31) // 32) * 32, ((img1.size [1] + 15) // 16) * 16,)) # üst üstə yapışdırın - 3 pad.paste (img1, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img1.size) ov.alpha = 200 # qat 3 -dür, çünki kamera önizlənməsi 2 -ci qatdadır. ov.layer = 3 yuxu (1) kamera.remove_overlay (ov) # üst üstə yapışdırın - 2 pad.paste (img2, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img2.size) ov.alpha = 200 # qat 3 -dür, çünki kamera önizlənməsi 2 -ci qatdadır. layer = 3 yuxu (1) kamera.remove_overlay (ov) # yapışdır bindirmə - 1 pad.paste (img3, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img3.size) ov.alpha = 200 # qat 3 -dir, çünki kamera önizləmə 2 -ci təbəqədədir ov.layer = 3 yuxu (1) camera.remove_overlay (ov) # Əsas funksiya # Açıq mesajlar olmadığı üçün ekranı təmizləyin # yəqin ki, bunu bash tmp = sp.call ('aydın', shell = True) 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' #Burada sınaqdan keçirin: while (True): camera.start_preview () #Yalnız LED çəkin Yalnız Şəkil çəkinTakePicLed () #Düymənin çəkilməsini gözləyin Şəkil GPIO.wait_for_edge (takeButton, GPIO. FALLING) # Şəkillər göstərilərkən LED -lərlə saymaq üçün bir mövzuya başlayın # Yəqin ki, overlayCounter funksiyasında istifadə oluna bilər, çünki # şəkilləri göstərmək üçün taymerləri də var, amma led effektləri # eyni _thread.start_new_thread olmayacaq (countingTimerPicture, ()) # Kamera şəkil örtüşməsində şəkillərin üst üstə çıxmasını göstərin Counter () # Şəkil showAllLeds () camera.capture ('pushTesting.jpg') kamera çəkərkən bütün LEDləri göstərin. stop_preview () #display image displayPreview ('pushTesting.jpg') # Yer paylaşımını göstər oo = overlaysn () # Ləğv etmək və ya Sosial Şəbəkələrə Göndərmək üçün LED göstər, GPIO. FALLING) while (True): if GPIO.event_detecte d (socialNetworkButton): camera.remove_overlay (oo) GPIO.output (ləğvButtonLed, False) o = displayPreview3 ('Aenviar.png') #print "Sosial Şəbəkələr Düyməsi" sendToTwitter () sendToFacebook () camera.remove_overlay (o) break GPIO.event_detected (ləğv etmə) "Çıxdı …") #offLeds () GPIO.cleanup ()

Addım 12: Kabel çəkmə

Image
Image
Kablolama
Kablolama
Kablolama
Kablolama

Kablolama, Big Dome Push düymələrini Raspberry PI -yə bağlayır.

Yalnız Fritzing sxeminə əməl edin.

Bağlantılar bunlardır:

BağlantıRPI GPIO PIN GND Yaşıl Basın DüyməsiGND (#3) GND Sarı Basın DüyməsiGND (#9) GND Mavi Basın DüyməsiGND (#39) Şəkil çəkin (Mavi Push Button "Push to") 17 (BCM) Sosial Şəbəkələrə Göndərin (Yaşıl Push) Düymə "etmək üçün bas") 23 (BCM) Ləğv et (Sarı Push Button "Push to make") 24 (BCM) Blue Push button LED27 (BCM) Green Push button LED22 (BCM) Yellow Push button LED5 (BCM)

İstilik daralması da rəng kodludur

  • Qara GND əlaqələridir
  • Sarı, "etmək üçün itələyən" əlaqələrdir
  • Mavi LED əlaqələridir

GPIO. BCM nömrələri vs GPIO. BOARD əlaqələri

Əlaqələrim BCM olduğundan, düşünürəm ki, bu barədə və BCM ilə BOARD arasındakı fərq haqqında danışmağın yaxşı vaxtıdır.

Əsas fərq, GPIO PIN -lərinə necə istinad etməyinizdir ki, bu da əlaqələri necə quracağınızı idarə edəcəkdir. GPIO.board, İnternetdəki hər hansı bir GPIO layoutunda yazılmış nömrəyə görə PIN kodlarına istinad edəcək.

GPIO. BCM, Broadcom SOC -ın gördüyü kimi PIN nömrələrinə istinad edir. Bu, Raspberry PI -nin daha yeni versiyalarında dəyişə bilər.

Pinout.xyz saytında, lövhə nömrələri sancaqların yanındakılardır və BCM buna bənzəyir - BCM X (burada X rəqəmdir)

Addım 13: MagicBox

Bu addıma əlavə edilmiş kod son sayılır.

Daxil olmağınız lazım olmadan, moruq PI açılışında işlədə bilərsiniz. Bunu etmək üçün kodu yerləşdirdiyiniz qovluqda bu kiçik skript yaradın - yolları buna uyğun olaraq dəyişdirin

#!/bin/bash

cd/home/pi/magicbox python MagicBox.py

İcra edilə bilən hala gətirin

chmod +x start_magicbox.sh

İndi onu 0et çıxışından dərhal əvvəl /etc/rc.local adlandırın

sudo vi /etc/rc.local

/home/pi/magicbox/start_magicbox.sh &

saxlamaq və çıxmaq.

İndi hər yenidən başladıqda Python proqramı icra ediləcək

QEYD: Bütün görüntü faylları skriptlə eyni qovluqda olmalıdır. Sahib olmalısınız:

  • 1. png
  • 2. png
  • 3. png
  • Aenviar.png
  • SelectOption-p.webp" />

Bütün bu faylları MagicBox github -dan əldə edə bilərsiniz.

Tövsiyə: