Mündəricat:
- Təchizat
- Addım 1: Qurmaq
- Addım 2: Kamera
- Addım 3: Monitor
- Addım 4: Dekorasiya
- Addım 5: Proqramlaşdırma
- Addım 6: Raspberry PI hazırlanması
- Addım 7: Proqram təminatı
- Addım 8: Proqramlaşdırma - Kameraya Önizləmə
- Addım 9: Proqramlaşdırma - Böyük Dome Push Button
- Addım 10: Twitter -ə göndərin
- Addım 11: Bəzi elementləri birləşdirin
- Addım 12: Kabel çəkmə
- Addım 13: MagicBox
Video: RaspberryPI Foto Kamera - MagicBox: 13 Addım (Şəkillərlə birlikdə)
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-31 10:16
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
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 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
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
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ı
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
- Seçim 5 - Arayüz Seçimləri seçin
- P1 seçin - Raspberry PI kamera ilə əlaqəni aktivləşdir/deaktiv edin
- Bəli demək
- OK üçün
- Bitir seçin
- İ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ə
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
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
İ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
İ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ə
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ə:
Gyroscope Platform/ Gimbal Kamera: 5 Addım (Şəkillərlə birlikdə)
Gyroscope Platform/ Camera Gimbal: Bu təlimat, Cənubi Florida Universitetində Makecourse (www.makecourse.com) layihə tələbinin yerinə yetirilməsi üçün yaradılmışdır
Retro Raspberry Pi Tumblr GIF Kamera: 10 Addım (Şəkillərlə birlikdə)
Retro Raspberry Pi Tumblr GIF Kamera: Üzüm kameralarımı yeni, rəqəmsal şəkildə istifadə etmək üçün bir yol istədim. Fərqli şəraitdə bir neçə ayağım var, amma filmi inkişaf etdirmək bahalı olduğu üçün əsrlər boyu istifadə etməmişəm. Bir Moruq necə qoyduğumu görmək üçün bu Təlimatla birlikdə izləyin
DIY Kamera Kaydırıcısı (Motorlu): 6 Addım (Şəkillərlə birlikdə)
DIY Kamera Kaydırıcısı (Motorlu): Qırılmış bir printerim var idi və skaner edən motor şassisi ilə motorlu kamera kaydırıcısı hazırladım! Burada bütün hissələrə bağlantılar buraxacağam, amma unutmayın ki, bu layihə hamı üçün fərqli olacaq. köhnə bir qırıq printerdən istifadə etdim, buna görə də qəpik
Arduino Bluetooth Kamera: 4 Addım (Şəkillərlə birlikdə)
Arduino Bluetooth Kamera: Salam! Bu gün kamera, simsiz qurğular və digər texniki inkişafları olan cib telefonu ilə heç kəsi təəccübləndirə bilməzsiniz. Arduino platforması sayəsində milyonlarla insan elektronika və proqramlaşdırma dünyasını kəşf etdi. 100,5
UNICORN KAMERA - Raspberry Pi Zero W NoIR 8MP Kamera Quruluşu: 7 addım (şəkillərlə)
UNICORN KAMERASI - Raspberry Pi Zero W NoIR 8MP Kamera Quruluşu: Pi Zero W NoIR 8MP Kamera Quruluşu Bu Təlimat İnfraqırmızı Kamera və ya Həqiqətən Sərin Portativ Kamera və ya Portativ Moruqlu Pi Kamera istəyən və ya sadəcə əylənmək istəyən hər kəsə kömək etmək üçün yaradılmışdır. . Bu ən əlverişli və konfiqurasiya olunan