Mundarija:
- Ta'minotlar
- 1 -qadam: qurish
- 2 -qadam: kamera
- 3 -qadam: monitor
- 4 -qadam: bezatish
- 5 -qadam: Dasturlash
- 6 -qadam: Raspberry PI ni tayyorlash
- 7 -qadam: dasturiy ta'minot
- 8 -qadam: dasturlash - kamerani oldindan ko'rish
- 9 -qadam: Dasturlash - Katta gumbazli tugma
- 10 -qadam: Twitter -ga joylashtiring
- 11 -qadam: Ba'zi elementlarni birlashtirish
- 12 -qadam: simlarni ulash
- 13 -qadam: MagicBox
Video: RaspberryPI foto kamerasi - MagicBox: 13 qadam (rasmlar bilan)
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:24
Biroz oldin, menda Raspberry PI -dan fotosurat mashinasini yaratish haqida aqldan ozgan fikr bor edi. Mening shahrimda, odamlar borib, elektronika, kompyuter va boshqalardan foydalanib, nima qilayotganlarini ko'rsatadigan kichik ko'rgazma bo'lib o'tdi … Men kambag'al odamning Maker Feyeri kabi edim, lekin mahalliy miqyosda.
Biri yaqinlashib kelayotgandi, va men xotinim bilan birgalikda bu narsani quramiz.
Bu qanday ishlaydi ?
Siz ko'k tugmani bosasiz - u miltillay boshlaydi va 3 soniyadan so'ng rasm olinadi. Kameraning boshqa tomonida hisoblagich bor, u orqaga sanashni ko'rsatadi va rasm olinganidan so'ng, rasmni oldindan ko'rish.
Endi siz uni Twitter va Facebook -ga yuborishni yoki bekor qilib, qaytadan urinishni tanlashingiz mumkin. Bu juda oddiy.
Hamma narsa Python -da dasturlashtirilgan bo'lib, PI ramkali buferdan foydalaniladi - Xorg yo'q, GUI ishlatilmaydi.
Mana, loyihaning ishlayotgan videosi
Ta'minotlar
- Raspberry PI (men 2 -versiyadan foydalanmoqdaman)
- Raspberry PI kamera (1 -versiyadan foydalangan holda)
- 3x Katta gumbaz tugmachalari
- VGA/HDMI bilan TFT/LCD monitor
- MDF
- Metall menteşeler, vintlar va boshqalar.
- Elektr asboblari
- Bo'sh vaqt va juda ko'p quvonch
1 -qadam: qurish
Uni qurish qiziqarli edi. Ko'p kesish, bo'yash va burg'ulash.
Men kameraning asosiy tuzilishini yaratish uchun MDF panellaridan foydalanardim. Ular engil va ular bilan ishlash oson. Bundan tashqari, bu mahalliy Fablab lazer mashinasi kesadigan yog'ochning bir turi edi.
Ichki simlarga kirish monitor tomonidan, gidravlik menteşeler yordamida amalga oshirildi, ular monitorni ko'tarishga yordam berdi.
2 -qadam: kamera
Kamera
Kamera quyidagi o'lchamdagi quti: 60 sm x 40 sm x 30 sm Sizniki kichikroq, kattaroq bo'lishi mumkin, bu sizga bog'liq. Siz foydalanmoqchi bo'lgan monitorni joylashtirishingiz kerak. MDF panellari mahalliy Fablabda lazer bilan kesilgan. Orqa tomonda 3 teshik bo'lishi kerak - ikkita katta gumbazli tugma va bitta monitor uchun. Old tomondan, Raspberry PI kamerasi uchun ikkita teshik - biri katta gumbazli tugmachasi uchun, ikkinchisi - kichikroq. Menda aniq o'lchovlar yo'q - kamerani tasavvur qiling va undan foydalaning.
3 -qadam: monitor
Monitor
Monitörün qo'llab -quvvatlashi, yog'och o'lchamlarini qo'llab -quvvatlash uchun kichik yog'och qismlarini qo'shib qo'ydi.
U plastik korpusdan ajratilgan va vintlar bilan mahkamlangan. Uni ko'tarish uchun ikkita gidravlik menteşe ishlatilgan.
4 -qadam: bezatish
Menga Fuji X-T30 uslubi juda yoqgani uchun, biz borib shunga o'xshash narsani qildik.
Birinchidan, biz uni ko'pik bilan yopdik va keyin uni qora rangga bo'yadik. Bo'yoqdan so'ng, biz kumush qismlar uchun alyumin folga qo'shdik va uni o'rab oldik
Ob'ektivni simulyatsiya qilish uchun biz faqat Raspberry PI kamera moduli o'tirish uchun kichik teshik qilganimizda, yumaloq Tupperware dasturidan foydalanganmiz.
5 -qadam: Dasturlash
Kamerani dasturlash juda qiyin edi, lekin bu juda qiziqarli edi.
GUI yo'q - bu CLIda ishlaydi va Python 3 versiyasida ishlaydi.
Men birinchi navbatda tugmachalarni sinab ko'rish va dasturlashdan boshladim, keyinroq allaqachon taqdim etilgan asboblar va Python API yordamida suratga tushish. Keyin men kamera chiqishidagi rasmlarni joylashtirishga (hisoblash uchun) va Twitter va Facebook bilan ishlashga o'tdim.
Bularning hammasi menga qulay bo'lganidan so'ng, jumboq kabi, men hamma qismlarni bir joyga to'pladim. Bu erda biz xuddi shu jarayon bilan boramiz. Sekin va kichikdan boshlang va tez va katta tomonga o'ting.
Birinchidan, Raspberry PI ni sozlashdan boshlaylik
6 -qadam: Raspberry PI ni tayyorlash
Men Raspbian -ni Raspberry PI -ga qanday o'rnatishni tushuntirmayman - u erda juda ko'p darsliklar bor, hatto Raspberry PI rasmiy veb -saytida ham.
Siz faqat SSH -ga kirishingiz yoki uni monitorga ulashingiz va klaviatura va sichqonchani ulashingiz kerak.
QAYD: Raspberry PI kamerasini ishga tushirganda, uni monitorga ulash lozim. Ungacha barcha qadamlar SSH yordamida amalga oshirilishi mumkin.
Raspberry PI -ni ishga tushirgandan so'ng, biz Raspberry PI kamerasini yoqishimiz kerak. Buning uchun raspi-config vositasidan foydalanaylik.
sudo raspi-config
- 5 -variantni - interfeys parametrlarini tanlang
- P1 - Raspberry PI kamerasiga ulanishni yoqish/o'chirish -ni tanlang
- Ha deb ayting
- OK uchun
- Finish -ni tanlang
- Hozir qayta yuklash uchun Ha -ni tanlang
Qayta ishga tushirilgandan so'ng, biz davom etishimiz mumkin
7 -qadam: dasturiy ta'minot
Bizga Python kutubxonalarini o'rnatish kerak bo'ladi. Bu Raspbian -ning so'nggi versiyasi - Buster uchun yangilandi
Birinchidan, Python 3 ni standart sifatida o'rnatishga ruxsat bering. SYSTEM WIDE -ni qanday sozlashni bilish uchun ushbu havolaga o'ting
Kutubxonalar:
- python-pil.imagetk tasvirlarni boshqarish uchun
- python-rpi.gpio GPIO PIN-kodlariga kirish uchun
- Raspberry PI kamerasiga kirish uchun python-picamera
- Rasmni twitterda bo'lishish uchun tweepy
- facebook-sdk-ni Facebook sahifasiga ulashish
sudo apt-get install python3-pil.imagetk python3-rpi.gpio python3-picamera python3-tweepy python3-pip
Facebook-sdk-ni o'rnatish uchun Python pip-dan foydalaning
sudo pip3 facebook-sdk-ni o'rnating
8 -qadam: dasturlash - kamerani oldindan ko'rish
Bu loyihaga qo'ygan talablarimdan biri bu dastur CLI rejimida ishlashi edi. Shunday qilib, biz kamera tasvirini konsolda ko'rsatishimiz kerak. Buning uchun Python Picamera -dan foydalanamiz. Shundan so'ng, keling, pil.imagetk yordamida kamerani oldindan ko'rishning ustki qatlamini ko'rsatamiz
Bizning kichik dasturimiz (biz oxirigacha bitta katta dasturga qadar kichik dasturlarni ishlab chiqamiz) kamerani oldindan ko'rishini ko'rsatadi.
#!/usr/bin/env python
vaqtni import qilish pikamera vaqtdan import uyqu kamerasi = picamera. PiCamera () # Kamerani kerakli piksellar sonini belgilang.resolution = (1280, 1024) camera.framerate = 24 camera.start_preview () try: while (True): uxlash (1)) (KeyboardInterrupt, SystemExit) tashqari: chop etish ("Chiqish …") camera.stop_preview ()
Buni sinab ko'rish uchun uni bajaring
python kameraPreview.py
Kamerani tepada tasvirlar bilan oldindan ko'ring
Rasmga olishdan oldin hisoblagichni ko'rsatishni xohlaganim uchun, kamerani oldindan ko'rishni bir -biriga mos keladigan tasvirlar kerak edi.
Quyidagi kod kamerani oldindan ko'rish bilan 1.pngga to'g'ri keladi
pikamerni PIL importidan Tasvirni vaqtli qabul qilishdan picamera. PiCamera () bilan kamera: kamera.resolution = (1920, 1080) camera.framerate = 24 camera.start_preview () # load image 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: uxlash (1)
Urunib ko'r:
python imageOverlay.py
Keling, bir -birining ustiga qo'yilgan tasvirlar bilan ortga hisoblashni yarataylik. 1-p.webp
Shundan so'ng, faqat quyidagi kodni ishlating:
pikamera import qilish
PIL importdan Tasvirni vaqtni import qilish picamera. PiCamera () bilan kamera sifatida: camera.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 uyqu (2) #oldingi qoplamali kamerani olib tashlash.remove_overlay (o) pad. tobytes (), size = img2.size) o.alfa = 128 o.layer = 3 uyqu (2) # oldingi qoplamali kamerani olib tashlash add_overlay (pad.tobytes (), size = img3.size) o.alfa = 128 o.layer = 3 uyqu (2)
Endi uni bajaring:
python imageOverlayCounter.py
Va orqaga hisoblashni ko'ring
Voy - kod juda ko'p va rasm yo'q … Hammasini birlashtirib hal qilaylik - kamerani oldindan ko'rish, sanash va rasmga olish.
PIL tasvirini import qilish PILdan uyqu rejimini vaqt oralig'ida yuklashdan hisoblagich (): # yuk img1 img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1. png ') # yaratish pad = Image.new (' RGB ', (((img1.size [0] + 31) // 32) * 32, ((img1.size [1] + 15) // 16) * 16,)) # qoplamani yopish - 3 pad.paste (img1, (0, 0)) o = kamera.add_overlay (pad.tobytes (), size = img1.size) o.alfa = 128 o.layer = 3 uxlash (1) # Oldingi qoplamali kamerani olib tashlash o.alfa = 128 o.layer = 3 uyqu (1) # oldingi qoplamali kamerani olib tashlash tobytes (), size = img3.size) o.alfa = 128 o.layer = 3 uyqu (1) kamera.remove_overlay (o) kamera = picamera. PiCamera () kamera.ruxsat = (1280, 1024) kamera.framat = 24 camera.start_preview () overlayCounter () camera.capture ('testCounter.jpg') camera.stop_preview ()
Urunib ko'r:
python rasmWithTimer.py
Va bu erda bizda Yoda bor
9 -qadam: Dasturlash - Katta gumbazli tugma
Katta gumbazli tugma - bu katta dumaloq tugma - diametri taxminan 100 mm bo'lgan kichik LED. Aytishlaricha, u 12V da ishlaydi, lekin Raspberry PI -ning 3.3v uni yoqish uchun etarli
Sinov uchun sxemadan foydalaning
Kod:
GPIO -dan RPi importidan
takeButton = 17 ledButton = 27 GPIO.setmode (GPIO. BCM) GPIO.setup (takeButton, GPIO. IN, GPIO. PUD_UP) GPIO.setup (ledButton, GPIO. OUT) #Light GPIO.output (ledButton, True) # Bloklash funktsiyasi GPIO.wait_for_edge (takeButton, GPIO. FALLING) chop etish ("Tugma bosilgan") GPIO.output (ledButton, False) GPIO.cleanup ()
Kodni ba'zi tushuntirishlar GPIOS -dan qiymatlarni olish shakllaridan biri uzilishlar (boshqa so'rov) - chekkalarni aniqlash.
Chegara - YUQORIDAN LOWga (pasayish chekkasiga) yoki LOWga HIGHga (ko'tarilish chetiga) o'tish nomi. Agar PIN hech narsaga ulanmagan bo'lsa, har qanday o'qish aniqlanmaydi. Vaqtinchalik echim - bu PIN -kodda yuqoriga/pastga tortish qarshiligiga ega bo'lish. Raspberry PI dasturiy ta'minot orqali yuqoriga/pastga qarshilikni sozlash imkonini beradi.
Chiziq
GPIO.setup (takeButton, GPIO. IN, GPIO. PUD_UP)
PIN kodni aynan shunday qilish uchun sozlaydi - yuqoriga torting
Nega yuqoriga tortish kerak? Katta gumbazli tugmachada 2 ta PIN -kod mavjud - ularni sindirish yoki bosish (xuddi Arduino/Raspberry PI to'plamlari bilan birga keladigan kichik tugmalar kabi). Men uni tugmachaning "bosish" PIN kodiga uladim. Bosilganda, elektron yopiladi va elektr o'tadi (odatda ochiq).
Chiziq
GPIO.wait_for_edge (takeButton, GPIO. FALLING)
PIN -kod tushganini aniqlaguncha kutadi (skriptning bajarilishini to'xtatib qo'yadi) - tugmani qo'yib yuborish elektr oqimini uzib qo'yadi va PIN -kod 3.3v dan 0vgacha o'zgaradi.
LED PIN -kodi faqat tugmachadagi LEDni yoqish uchun
Arduino Tutorials -dan bosish tugmalari, Vikipediyani o'chirish yoki bosish va GPIO uzilishlari haqida qo'shimcha ma'lumot.
Keling, tugmachani kamera bilan birlashtiraylik - faqat tugma bosilganda rasmga oling
PIL importidan RPi -dan GPIO -ni import uyqusidan uyqu vaqtidan Rasm # QAYD: Asosiy dasturda bekor qilish tugmachasi shu bo'ladi # Men videoni ravshanligi uchun bu erda ishlataman 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) uyqu (1) def offLeds (): GPIO.output (ledCancel, False) # Tasvirni o'chirish vazifasi overlayCounter (): #load images img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.png') # Qatlam yaratish # img1 bilan ishlatiladi, chunki barchasi bir xil o'lchamdagi pad = Image.new ('RGB', (((img1.size [0] + 31) // 32) * 32, ((img1.size [1] + 15) // 16) * 16,)) # qoplamani yopish - 3 pad.paste (img1, (0, 0)) ov = camera.add_overlay (pad.tobytes) (), size = img1.size) ov.alpha = 200 # sath 3 ga teng, chunki kamerani oldindan ko'rish 2 -qavatda. ov.layer = 3 uyqu (1) kamera.remove_overlay (ov) # qoplamani yopish - 2 pad.paste (img2, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img2.size) ov.alpha = 200 # sath 3 ga teng, chunki kamerani oldindan ko'rish 2 -qavatda. ov.layer = 3 uyqu (1) kamera.remove_overlay (ov)) # qoplamani joylashtiring - 1 pad.paste (img3, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img3.size) ov.alpha = 200 # sathi 3, chunki kamerani oldindan ko'rish 2 -qavatda ov.layer = 3 uyqu (1) camera.remove_overlay (ov) kamera = picamera. PiCamera () kamera.resolution = (1280, 1024) kamera.framerate = 24 kamera.start_preview () GPIO.wait_for_edge (takeButton, GPIO. FALLING) onLeds () overlayCounter () camera.capture ('pushTesting.jpg') camera.stop_preview () offLeds () GPIO.cleanup ()
Bir oz kodni tushuntirish
U kamerani oldindan ko'rishni boshlaydi va tugma bosilguncha kutadi. Tugma bosilgandan so'ng, LED yonadi va hisoblash boshlanadi. Oxiriga yetganda, rasm olinadi va LED o'chadi
10 -qadam: Twitter -ga joylashtiring
Endi biz Python -dan foydalanamiz va tvit yozamiz!:) Yuborish uchun sizga rasm kerak bo'ladi - oqilona tanlang.
Birinchidan, biz twitter API -ga kirishimiz kerak va buning uchun APP -ni yaratishimiz kerak. Yangi ilovani yaratish uchun https://apps.twitter.com saytiga o'ting.
Siz dasturchi hisobiga murojaat qilishingiz kerak bo'ladi - ba'zi savollarni to'ldiring va elektron pochta manzilingizni tasdiqlang. Shundan so'ng siz yangi APP yaratishingiz mumkin bo'ladi.
APP -ni yaratgandan so'ng, kalitlar va tokenlarga o'ting va kirish tokenini va kirish belgisini yarating. Kalitlari bo'lgan oyna ko'rsatiladi, FAQAT BIRINChI - ULARNI NUXAT QILING VA KECHA SAKL QILING.
Rasmni twitter hisobingizga yuborish uchun quyidagi koddan foydalaning. To'ldirishni unutmang:
- Consumer_key
- maxfiy
- access_token
- kirish_token_siri
twitter xabari - bu tvitda yuboriladigan matn.
jpg_foto_to_send - bu tvitga biriktiriladigan rasm. Iltimos, Python skriptlari bilan bir xil katalogda rasmga ega bo'ling va koddagi nomni o'zgartiring.
tweepy # Twitter sozlamalarini import qilish 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) # twitterga yuborish def sendToTwitter (): cfg = {"Consumer_key": "", "Consumer_secret": "", "access_token": "", "access_token_secret": ""} api = get_api (cfg) # Status xabari tweet = "Twitter xabari" status = api.update_with_media ("jpg_foto_to_Send", tweet) sendToTwitter ()
Sizning tvitingiz uchun Twitter kanalingizni tekshiring.
Mana bu tvit
Yoki quyida:
#RaspberryPI MagicBox. Rasmga oling, ko'rib chiqing va ularni twitter va Facebook -ga yuborishni tanlang. Raspberry PI tomonidan quvvatlanadi. @@ Raspberry_Pi#RaspberryPI#RaspberryPIProjectpic.twitter.com/cCL33Zjb8p
- Bruno Rikardo Santos (@feiticeir0) 29 fevral, 2020 yil
11 -qadam: Ba'zi elementlarni birlashtirish
Keling, Big Dome Push tugmachasini birlashtiramiz, uni bosamiz, hisoblaymiz, rasmga olamiz, uni twitterga yuborish yoki yubormaslikni hal qilamiz.
Biz boshqa rasmni qo'shamiz va uchta tugmani ishlatamiz. Rasmga tushganda, barcha 3 tugmachali LEDlar yonadi.
Biz boshqa rasmni qo'shamiz, u ijtimoiy tarmoqlarga joylashtirish uchun ikonkalarni ko'rsatadi
SelectOption-p.webp
Aenviar-p.webp
Videoda Moviy tugmachasi ko'rsatilmagan (kameraning old tomonida), lekin LED yonadi va u bosilgach miltillay boshlaydi.
Agar xohlasangiz, kod biriktirilgan
Bu asosiy dasturdan oldingi yakuniy sinov kodi.
# coding = utf-8 import picamera import _thread import subprocess as a time of import from RPi import GPIO from PIL import Image import threading # Twitter import tweepy # Facebook import facebook # Suratga olish tugmasi = 17 # SocialNetwork Button socialNetworkButton = 23 # Rasmni bekor qilish tugmasi = 24 # Rasmga olish tugmasi LED takePicButtonLed = 27 # Ijtimoiy tarmoqqa joylashtirish tugmasi LED postSNLed = 22 # Bekor qilish tugmasi LED bekor qilish tugmasiLed = 5 GPIO.setmode (GPIO. BCM) GPIO.setup (takeButton, GPIO. IN, GPIO). PUD_UP) GPIO.setup (socialNetworkButton, GPIO. IN, GPIO. PUD_UP) GPIO.setup (bekor qilish Button, GPIO. IN, GPIO. PUD_UP) GPIO.setup (takePicButtonLed, GPIO. OUT) GPIO.setup (postSNLed, GPIO. OB).) GPIO.setup (bekor qilish ButtonLed, GPIO. OUT) # Twitter sozlamalari 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) # twitterga yuborish def sendToTwitter (): cfg = {"con sumer_key ":" "," Consumer_secret ":" "," access_token ":" "," access_token_secret ":" "} api = get_api (cfg) # Status Message tweet =" MagicBox ko'rsatiladigan test. #MagicBox #RaspberryPI #Raspberry #Instructables "status = api.update_with_media (" pushTesting.jpg ", tvit) #Facebook AOth def get_api_facebook (cfg): graph = facebook. GraphAPI (cfg ['access_token'])) # sahifa sifatida joylashtiring. Agar siz o'zingizni yozmoqchi bo'lsangiz, quyidagilarni o'tkazib yuborishingiz mumkin. resp = graph.get_object ("men/hisoblar") page_access_token = Resp [sahifadagi ma'lumotlar uchun] uchun hech kim yo'q: agar sahifa ['id'] == cfg ['page_id']: page_access_token = page ['access_token'] graph = facebook. GraphAPI (page_access_token) qaytish grafigi # Facebookga yuborish def sendToFacebook (): # Kirish uchun qadriyatlar cfg = {"page_id": "", "access_token": ""} api = get_api_facebook (cfg) caption = "Tasvirga sarlavha" albumid = "" api.put_photo (image = ochiq ("pushTesting.jpg", "rb"), caption = "Rasmga sarlavha ") # Light only TakePicButtonLed def onlyTakePicLed (): GPIO.output (takePicButtonLed, True) GPIO.output (postSNLed, False) GPIO.output (bekorButtonLed, False) # Light only Cancel and SocialNetwork button def bekorPostLEDS (): GPI. O.output (takePicButtonLed, False) GPIO.output (postSNLed, True) GPIO.output (bekorButtonLed, True) # Blink milt -miltini qaytarib sanash vaqtida LEDni tortib oling TimerPicture (): GPIO.output (takePicButtonLed, True) uyqu (0,5) GPIO.output (takePicButtonLed, False) uxlash (0,5) GPIO.output (takePicButtonLed, True) uyqu (0,5) GPIO.output (takePicButtonLed,Soxta uyqu (0.5) GPIO.output (takePicButtonLed, True) uyqu (0.5) GPIO.output (takePicButtonLed, False) # Ijtimoiy tarmoqlarga yozish paytida blink postSNLed def blinkPosting (stop_event): # Start while (not_ stop_event.is_set ()): bosib chiqarish ("o'chirish") GPIO.output (postSNLed, False) uyqu (0,5) chop etish ("yoqish") GPIO.output (postSNLed, True) uyqu (0,5) def taymer (): GPIO.output (takePicButtonLed, To'g'ri)) uxlash (1) GPIO.output (postSNLed, True) uyqu (1) GPIO.output (bekor qilish ButtonLed, Haqiqiy) uyqu (1) def showAllLeds (): GPIO.output (takePicButtonLed, To'g'ri) GPIO. chiqish (postSNLed, To'g'ri) GPIO.output (bekor qilish ButtonLed, Haqiqiy) # 1 -qatlamda oldindan ko'rishni ko'rsatish Def displeyPreview (imgName): # PIL tasvirli ko'rgazmali narsa bo'lgani uchun # biz oldindan ko'rish img = Image.open (imgName) ni ko'rsatish uchun kameraning qoplamasini ishlatamiz.) to'ldirish = 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 # Qatlamda oldindan ko'rishni ko'rsatish 3 def displeyPreview3 (imgName): # PIL tasviri ko'rgazmasi # bo'lgani uchun, biz kameraning qoplamasini ishlatamiz # ko'rish uchun img = Image.open (imgName) to'ldirish = 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') # Yaratish Overlay pad = Image.new ('RGB', (((imgsn.size [0] + 31) // 32) * 32, ((imgsn.size [1] + 15) // 16) * 16,)) # Overlay pad.paste (imgsn, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = imgsn.size) ov.alpha = 100 ov.layer = 3 qaytish ov # Qoplamali funksiya image def overlayCounter (): # rasmlarni yuklash img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.png') # Overlay yaratish # Img1 bilan ishlatiladi, chunki barchasi bir xil o'lchamdagi pad = Image.new ('RGB', (((img1.size [0] + 31) // 32) * 32, ((img1.size [1] + 15) // 16) * 16,)) # qoplamani yopish - 3 pad.paste (img1, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img1.size) ov.alpha = 200 # qatlam - 3, chunki kamerani oldindan ko'rish 2 -qavatda. ov.layer = 3 uyqu (1) kamera.remove_overlay (ov) # qoplamani yopish - 2 pad.paste (img2, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img2.size) ov.alpha = 200 # sath 3 ga teng, chunki kamerani oldindan ko'rish 2 -qavat ov.layer = 3 uyqu (1) kamera.remove_overlay (ov) # joylashtirish qoplama - 1 pad.paste (img3, (0, 0)) ov = camera.add_overlay (pad.tobytes (), size = img3.size) ov.alpha = 200 # sath 3, chunki kamerani oldindan ko'rish 2 -qavatda ov.layer = 3 uyqu (1) camera.remove_overlay (ov) # Asosiy funksiya # Ochilish xabarlari bo'lmasligi uchun ekranni tozalash # ehtimol buni bash tmp = sp.call ('aniq', 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 = '' ' Rasm GPIO.wait_for_edge (takeButton, GPIO. FALLING) # Rasmlar ko'rsatilayotganda LEDlar bilan hisoblashni boshlang # Balki overlayCounter funktsiyasida ishlatilgan bo'lishi mumkin, chunki u rasmlarni ko'rsatadigan taymerlarga ega, lekin LED effektlari # bir xil bo'lolmaydi _thread.start_new_thread (countingTimerPicture, ()) # Kamera rasmining ustki qismidagi rasmlarni ko'rsatishCounter () #AllLeds () camera.capture ('pushTesting.jpg') kamerasini olish paytida barcha LEDlarni ko'rsatish. stop_preview () #display image displayPreview ('pushTesting.jpg') # Overlayni ko'rsatish oo = overlaysn () # Bekor qilish yoki ijtimoiy tarmoqlarga joylashtirish uchun LEDlarni ko'rsatishPostLEDS () GPIO.add_event_detect (socialNetworkButton, GPIO. FALLING) GPIO.add_eventButton, GPIO. FALLING) while (True): if GPIO.event_detecte d (socialNetworkButton): camera.remove_overlay (oo) GPIO.output (bekorButtonLed, False) o = displayPreview3 ('Aenviar.png') #print "Ijtimoiy tarmoqlar tugmasi" sendToTwitter () sendToFacebook () camera.remove_overlay (o) break GPIO.event_detected (bekor qilish tugmasi): #print "Bekor qilindi" camera.remove_overlay (oo) tanaffus # reset GPIOS GPIO.remove_event_detect (socialNetworkButton) GPIO.remove_event_detect (bekor qilish) GPIO.remove_toptasi (olib tashlanishi) "Chiqdi …") #offLeds () GPIO.cleanup ()
12 -qadam: simlarni ulash
Kabel faqat Big Dome Push tugmachalarini Raspberry PI -ga ulaydi.
Faqat Fritzing sxemasiga amal qiling.
Ulanishlar quyidagilar:
UlanishRPI GPIO PIN GND Yashil tugmachasiGND (#3) GND sariq tugmasiGND (#9) GND ko'k tugmasiGND (#39) Rasmga olish (Moviy tugmachani "surish") 17 (BCM) Ijtimoiy tarmoqlarga joylashtirish (Yashil bosish) "Tugmasini bosish") 23 (BCM) Bekor qilish (Sarg'ish tugmachasi "Push to make") 24 (BCM) Moviy tugma LED27 (BCM) Yashil tugma LED22 (BCM) Sariq tugma LED5 (BCM)
Issiqlik qisqarishi ham rangli kodlangan
- Qora - bu GND ulanishlari
- Sariq - "bog'lanish" turkumi
- Moviy - bu LED ulanishlari
GPIO. BCM raqamlari va boshqalar GPIO. BOARD ulanishlari
Mening aloqalarim BCM bo'lgani uchun, menimcha, hozir BCM va BOARD o'rtasidagi farq haqida gapirish uchun yaxshi vaqt.
Asosiy farq shundaki, siz GPIO PIN -kodlariga qanday murojaat qilasiz, bu esa o'z navbatida ulanishlarni qanday amalga oshirishingizga yordam beradi. GPIO.board PIN -kodlarini Internetdagi har qanday GPIO tartibida ko'rsatilgan raqamga yo'naltiradi.
GPIO. BCM, Broadcom SOC ko'radigan PIN -kodlarga ishora qiladi. Bu Raspberry PI ning yangi versiyalarida o'zgarishi mumkin.
Pinout.xyz saytida taxtali raqamlari pinlar yonida joylashgan va BCM shu tarzda ko'rsatilgan - BCM X (bu erda X - raqam)
13 -qadam: MagicBox
Bu bosqichga biriktirilgan kod oxirgi hisoblanadi.
Siz uni malina PI boot -da ishga tushirishingiz mumkin, hatto kirishga hojat yo'q. Buning uchun kodni joylashtirgan katalogda shu kichik skriptni yarating - yo'llarni mos ravishda o'zgartiring
#!/bin/bash
cd/home/pi/magicbox python MagicBox.py
Uni bajariladigan qilib qo'ying
chmod +x start_magicbox.sh
Endi uni 0et chiqishidan oldin /etc/rc.local deb chaqiring
sudo vi /etc/rc.local
/home/pi/magicbox/start_magicbox.sh &
saqlang va chiqing.
Endi, har bir qayta yuklashda, Python dasturi bajariladi
QAYD: Barcha rasm fayllari skript bilan bir xil katalogda bo'lishi kerak. Sizda bo'lishi kerak:
- 1. png
- 2. png
- 3. png
- Aenviar.png
- TanlangOption.png
Siz bu fayllarni MagicBox github -da olishingiz mumkin.
Tavsiya:
Smartfon kamerasi uchun Bluetooth pedalli kalit: 13 qadam (rasmlar bilan)
Smartfon kamerasi uchun Bluetooth pedalli kalit: Shu kunlarda men yo'riqnomalar, youtube videolari va blog postlarini yaratmoqchiman. Blog postini mahsuldor qilish uchun iloji boricha batafsil suratga olish kerak. Buni qilish oson emas, chunki insonning faqat ikki qo'li bor. Men muhtojman
5 kg yuk kamerasi va HX711 kuchaytirgichi bilan Arduino shkalasi: 4 qadam (rasmlar bilan)
5 kg yuk xujayrasi va HX711 kuchaytirgichi bilan Arduino shkalasi: Bu yo'riqnomada javonlarda mavjud bo'lgan kichik tortish o'lchagichini yasash usullari tasvirlangan. Kerakli materiallar: 1. Arduino - bu dizaynda standart Arduino Uno ishlatiladi, boshqa Arduino versiyalari yoki klonlari ham ishlashi kerak2. HX711 uzilib qoldi
Vaqt o'tishi uchun suv o'tkazmaydigan Raspberry Pi bilan ishlaydigan Wi -Fi DSLR veb -kamerasi: 3 qadam (rasmlar bilan)
Vaqt o'tishi uchun suv o'tkazmaydigan Raspberry Pi bilan ishlaydigan DSLR veb -kamerasi: men quyosh botishini uydan tomosha qilyapman. Shunday qilib, men quyosh botganda va men uni ko'rish uchun uyda bo'lmaganimda, FOMO -ni olaman. IP -kameralar tasvir sifatini yomonlashtirdi. Men birinchi DSLR -ni qayta ishlatish usullarini izlay boshladim: 2007 yildagi Cano
RaspberryPi -ga qo'shimcha funktsiyalarni qo'shish uchun RaspberryPi 3/4 kengaytmasi: 15 qadam (rasmlar bilan)
Raspberry Pi -ga qo'shimcha funktsiyalarni qo'shish uchun RaspberryPi 3/4 kengaytma kengashi: biz bilamizki, malina pi 3/4 ADC (analogdan raqamli konvertorga) va RTC (real vaqtda soat) o'rnatilgan emas, shuning uchun men o'z ichiga 16 ta tenglikni yarataman. 12bit kanalli ADC, RTC, SIM7600 4G moduli, tugmachalar, o'rni, USB quvvatini o'chirish, 5V o'chirish, 12V kuch
Ob'ektlarni kuzatish kamerasi aylanishi o'qi bilan. 3D bosma va RoboClaw DC dvigatel boshqaruvi va Arduino -da qurilgan: 5 qadam (rasmlar bilan)
Ob'ektni kuzatish kamerasi aylanishi o'qi bilan. 3D bosilgan va RoboClaw DC Motor Controller & Arduino-da qurilgan: bu loyiha mening qiziqishimni DIY bilan uyg'unlashtirganimdan beri eng sevimli loyihalarimdan biri bo'ldi. Men har doim kinofilmlarni tomosha qilish uchun ekran bo'ylab harakatlanayotgan filmlardagi kinofilmlarga taqlid qilishni xohlaganman