Mundarija:

RaspberryPI foto kamerasi - MagicBox: 13 qadam (rasmlar bilan)
RaspberryPI foto kamerasi - MagicBox: 13 qadam (rasmlar bilan)

Video: RaspberryPI foto kamerasi - MagicBox: 13 qadam (rasmlar bilan)

Video: RaspberryPI foto kamerasi - MagicBox: 13 qadam (rasmlar bilan)
Video: 4K High Quality camera for Raspberry Pi | 13MP MIPI CSI-2 Camera for Raspberry Pi 4 | e-con Systems 2024, Noyabr
Anonim
Image
Image
Qurmoq
Qurmoq

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

Qurmoq
Qurmoq
Qurmoq
Qurmoq

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
Kamera
Kamera
Kamera
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
Monitor
Monitor
Monitor
Monitor
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

Bezatish
Bezatish
Bezatish
Bezatish
Bezatish
Bezatish
Bezatish
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

Raspberry PI ni tayyorlash
Raspberry PI ni tayyorlash
Raspberry PI ni tayyorlash
Raspberry PI ni tayyorlash
Raspberry PI ni tayyorlash
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

  1. 5 -variantni - interfeys parametrlarini tanlang
  2. P1 - Raspberry PI kamerasiga ulanishni yoqish/o'chirish -ni tanlang
  3. Ha deb ayting
  4. OK uchun
  5. Finish -ni tanlang
  6. 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

Image
Image
Dasturlash - kamerani oldindan ko'rish
Dasturlash - kamerani oldindan ko'rish
Dasturlash - kamerani oldindan ko'rish
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

Dasturlash - Katta gumbazni bosish tugmasi
Dasturlash - Katta gumbazni bosish tugmasi
Dasturlash - Katta gumbazni bosish tugmasi
Dasturlash - Katta gumbazni bosish tugmasi

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

Twitter -da joylashtiring
Twitter -da joylashtiring
Twitter -da joylashtiring
Twitter -da joylashtiring
Twitter -da joylashtiring
Twitter -da 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

Ba'zi elementlarni birlashtirish
Ba'zi elementlarni birlashtirish
Ba'zi elementlarni birlashtirish
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

Image
Image
Ulanish
Ulanish
Ulanish
Ulanish

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: