فهرست مطالب:

RaspberryPI Photo Camera - MagicBox: 13 مرحله (همراه با تصاویر)
RaspberryPI Photo Camera - MagicBox: 13 مرحله (همراه با تصاویر)

تصویری: RaspberryPI Photo Camera - MagicBox: 13 مرحله (همراه با تصاویر)

تصویری: RaspberryPI Photo Camera - MagicBox: 13 مرحله (همراه با تصاویر)
تصویری: On the traces of an Ancient Civilization? 🗿 What if we have been mistaken on our past? 2024, دسامبر
Anonim
Image
Image
ساختن
ساختن

چندی پیش ، من این ایده دیوانه را داشتم که از یک Raspberry PI یک دستگاه عکاسی ایجاد کنم. در شهر من ، یک نمایش کوچک وجود داشت که مردم می رفتند و نشان می دادند که با استفاده از وسایل الکترونیکی ، رایانه ها و غیره چه می سازند یا چه ساخته اند … من شبیه ساز یک فقیر بودم ، اما در محدوده محلی.

یکی در حال آمدن بود ، و ما به همراه همسرم این چیز را ساختیم.

چگونه کار می کند؟

شما دکمه آبی را فشار می دهید - شروع به چشمک زدن می کند - و بعد از 3 ثانیه یک عکس گرفته می شود. در طرف دیگر دوربین یک مانیتور وجود دارد که شمارش معکوس را نشان می دهد و پس از گرفتن عکس ، پیش نمایش عکس.

اکنون می توانید انتخاب کنید که آن را به توییتر و فیس بوک ارسال کنید یا لغو کنید و دوباره امتحان کنید. ساده است.

همه چیز در پایتون برنامه ریزی شده است و از فریم بافر PI استفاده می کند - بدون Xorg ، بدون رابط کاربری گرافیکی استفاده می شود.

در اینجا ویدئویی از عملکرد این پروژه مشاهده می کنید

تدارکات

  • Raspberry PI (من از نسخه 2 استفاده می کنم)
  • Raspberry PI Camera (با استفاده از نسخه 1)
  • 3x دکمه های فشار بزرگ گنبد
  • مانیتور TFT/LCD با VGA/HDMI
  • ام دی اف
  • لولا ، پیچ و …
  • ابزارهای قدرت
  • اوقات فراغت و سرگرمی زیاد

مرحله 1: ساختن

ساختن
ساختن
ساختن
ساختن

ساختن آن سرگرم کننده بود. برش ، رنگ آمیزی و حفاری زیاد.

من از پانل های MDF برای ساخت ساختار اصلی دوربین استفاده کردم. سبک هستند و کار با آنها آسان است. همچنین ، این یک نوع چوب بود که دستگاه لیزر در Fablab محلی قادر به برش آن بود.

دسترسی به سیم کشی داخل توسط مانیتور و با استفاده از لولا هیدرولیکی انجام شد تا بتوانند مانیتور را بلند کنند.

مرحله 2: دوربین

دوربین
دوربین
دوربین
دوربین
دوربین
دوربین

دوربین

دوربین یک جعبه با ابعاد زیر است: 60cm x 40cm x 30cm شما می توانید کوچکتر ، بزرگتر ، به شما بستگی دارد. فقط باید مانیتوری را که می خواهید استفاده کنید جا دهید. پانل های MDF در Fablab محلی برش لیزری داده شد. در پشت نیاز به 3 سوراخ وجود دارد - دو دکمه بزرگ گنبدی و یکی برای مانیتور. در جلو ، 2 سوراخ - یکی برای دکمه بزرگ گنبد و دیگری - کوچکتر - برای دوربین Raspberry PI. اندازه گیری های خاصی ندارم - فقط یک دوربین را تصور کنید و از آن استفاده کنید.

مرحله 3: مانیتور کنید

مانیتور
مانیتور
مانیتور
مانیتور
مانیتور
مانیتور

مانیتور

پشتیبانی مانیتور با افزودن تکه های کوچک چوب برای حمایت از آن در ابعاد آن ساخته شده است.

این نوار از محفظه پلاستیکی جدا شده بود و با پیچ در جای خود محکم شده بود. برای کمک به بلند کردن آن ، از دو لولا هیدرولیک (استفاده شده) استفاده شد.

مرحله 4: تزئین

تزئین کردن
تزئین کردن
تزئین کردن
تزئین کردن
تزئین کردن
تزئین کردن
تزئین کردن
تزئین کردن

از آنجا که من سبک فوجی X-T30 خود را بسیار دوست دارم ، ما رفتیم و کاری مشابه انجام دادیم.

ابتدا روی آن را با فوم پوشانده و سپس آن را سیاه رنگ اسپری می کنیم. بعد از رنگ ، فویل آلومینیومی را برای قسمت های نقره اضافه کرده و داخل آن می پیچیم

برای شبیه سازی لنز ، ما فقط از یک Tupperware گرد استفاده کردیم ، اگر ما یک سوراخ کوچک برای نشستن ماژول دوربین Raspberry PI ایجاد کردیم.

مرحله 5: برنامه نویسی

برنامه نویسی دوربین یک چالش بود ، اما بسیار سرگرم کننده بود.

هیچ رابط کاربری گرافیکی وجود ندارد - این روی CLI اجرا می شود و بر روی پایتون نسخه 3 اجرا می شود.

من ابتدا با آزمایش و برنامه نویسی دکمه ها شروع کردم ، بعد عکس گرفتن با استفاده از ابزارهای ارائه شده و API پایتون بود. سپس به سراغ پوشاندن تصاویر در خروجی دوربین (برای شمارش معکوس) و سپس تعامل با توییتر و فیس بوک رفتم.

بعد از اینکه با همه اینها راحت شدم ، مانند یک پازل ، همه قطعات را با هم جمع کردم. در اینجا ، ما با همان روند پیش می رویم. آهسته و کوچک شروع کنید و سریع و بزرگ بروید.

ابتدا ، اجازه دهید با پیکربندی Raspberry PI شروع کنیم

مرحله 6: آماده سازی PI تمشک

آماده سازی PI تمشک
آماده سازی PI تمشک
آماده سازی PI تمشک
آماده سازی PI تمشک
آماده سازی PI تمشک
آماده سازی PI تمشک

من قصد ندارم نحوه نصب Raspbian را روی Raspberry PI توضیح دهم - آموزش های زیادی در آنجا وجود دارد ، حتی در وب سایت رسمی Raspberry PI.

شما فقط باید SSH به آن دسترسی داشته باشید ، یا آن را به یک مانیتور وصل کنید و یک صفحه کلید و ماوس را وصل کنید.

توجه: هنگام شروع به کار با رزبری PI دوربین ، باید آن را به مانیتور وصل کنید. تا آنجا ، همه مراحل را می توان با استفاده از SSH انجام داد.

پس از بوت شدن در Raspberry PI ، باید دوربین Raspberry PI را فعال کنیم. بیایید از ابزار raspi-config برای آن استفاده کنیم.

sudo raspi-config

  1. گزینه 5 - Interfacing Options را انتخاب کنید
  2. P1 را انتخاب کنید - اتصال/غیرفعال کردن اتصال به دوربین Raspberry PI را انتخاب کنید
  3. بگو آره
  4. برای OK
  5. Finish را انتخاب کنید
  6. برای راه اندازی مجدد اکنون بله را انتخاب کنید

پس از راه اندازی مجدد ، می توانیم ادامه دهیم

مرحله 7: نرم افزار

ما برای نصب به چند کتابخانه پایتون نیاز داریم. این برای آخرین نسخه Raspbian - Buster به روز شده است

ابتدا ، اجازه دهید Python 3 را به عنوان پیش فرض تنظیم کنیم. برای اطلاع از نحوه راه اندازی SYSTEM WIDE این پیوند را دنبال کنید

کتابخانه ها:

  • python-pil.imagetk برای دستکاری تصاویر
  • python-rpi.gpio برای دسترسی به پین GPIO
  • python-picamera برای دسترسی به دوربین Raspberry PI Camera
  • Tweepy برای به اشتراک گذاشتن عکس در توییتر
  • facebook-sdk برای به اشتراک گذاشتن در یک صفحه فیس بوک

sudo apt-get python3-pil.imagetk python3-rpi.gpio python3-picamera python3-tweepy python3-pip

برای نصب facebook-sdk از Python pip استفاده کنید

sudo pip3 نصب facebook-sdk

مرحله 8: برنامه نویسی - پیش نمایش دوربین

Image
Image
برنامه نویسی - پیش نمایش دوربین
برنامه نویسی - پیش نمایش دوربین
برنامه نویسی - پیش نمایش دوربین
برنامه نویسی - پیش نمایش دوربین

یکی از الزاماتی که من برای این پروژه تعیین کردم این بود که این برنامه در حالت CLI اجرا شود. بنابراین ، ما باید تصویر دوربین را روی کنسول نمایش دهیم. برای این کار ، اجازه دهید از Python Picamera استفاده کنیم. پس از آن ، بیایید از pil.imagetk برای نمایش یک پوشش در بالای پیش نمایش دوربین استفاده کنیم

برنامه کوچک ما (ما قصد داریم برنامه های کوچک را تا یک برنامه بزرگ در پایان توسعه دهیم) پیش نمایش دوربین را نمایش می دهد.

#!/usr/bin/env پایتون

وارد کردن زمان وارد کردن دوربین از زمان وارد کردن دوربین خواب = picamera. PiCamera () # وضوح موردنظر خود را برای دوربین تنظیم کنید. rezolution = (1280، 1024) camera.framerate = 24 camera.start_preview () try: while (True): sleep (1) به جز (KeyboardInterrupt، SystemExit): print ("Exiting …") camera.stop_preview ()

برای امتحان کردن آن فقط آن را اجرا کنید

python cameraPreview.py

پیش نمایش دوربین با تصاویر در بالا

از آنجا که می خواستم قبل از گرفتن عکس شمارش معکوس نمایش داده شود ، به تصاویری نیاز داشتم که با پیش نمایش دوربین همپوشانی داشته باشند.

یک تصویر-p.webp" />

کد زیر 1-p.webp

وارد کردن picamera از PIL وارد کردن تصویر از زمان وارد کردن خواب با picamera. PiCamera () به عنوان دوربین: camera.resolution = (1920، 1080) camera.framerate = 24 camera.start_preview () # بارگذاری تصویر img = Image.open ('1-p.webp

امتحان کنید:

python imageOverlay.py

بیایید اکنون با تصاویر همپوشانی یک شمارش معکوس ایجاد کنیم. همانطور که تصویر 1-p.webp

پس از آن ، فقط از کد زیر استفاده کنید:

وارد کردن picamera

از PIL import Image from time import sleep with picamera. PiCamera () as camera: 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 خواب (2) #حذف دوربین همپوشانی قبلی. حذف_پوشش (o) pad.paste (img2، (0، 0)) o = camera.add_overlay (pad) tobytes () ، size = img2.size) o.alpha = 128 o.layer = 3 sleep (2) # remove overlay camera.remove_overlay (o) pad.paste (img3، (0، 0)) o = camera add_overlay (pad.tobytes () ، size = img3.size) o.alpha = 128 o.layer = 3 خواب (2)

حالا آن را اجرا کنید:

python imageOverlayCounter.py

و شمارش معکوس را مشاهده کنید

عجب - مقدار زیادی کد و عکسی گرفته نشده است … بیایید با ترکیب همه اینها را حل کنیم - پیش نمایش دوربین ، شمارش معکوس و گرفتن عکس

import picamerafrom PIL import image from time import sleep def overlayCounter (): # بارگذاری تصویر img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1-p.webp

امتحان کنید:

python pictureWithTimer.py

و در اینجا ما Yoda داریم

مرحله 9: برنامه نویسی - دکمه بزرگ گنبد

برنامه نویسی - دکمه فشار بزرگ گنبد
برنامه نویسی - دکمه فشار بزرگ گنبد
برنامه نویسی - دکمه فشار بزرگ گنبد
برنامه نویسی - دکمه فشار بزرگ گنبد

دکمه فشار گنبد بزرگ یک دکمه گرد بزرگ است - با قطر حدود 100 میلی متر با یک LED کوچک. می گوید در ولتاژ 12 ولت کار می کند ، اما 3.3 ولت رزبری PI برای روشن شدن آن کافی است

برای آزمایش از شماتیک استفاده کنید

کد:

از وارد کردن RPi GPIO

takeButton = 17 ledButton = 27 GPIO.setmode (GPIO. BCM) GPIO.setup (takeButton، GPIO. IN، GPIO. PUD_UP) GPIO.setup (ledButton، GPIO. OUT) #چراغ GPIO.output (ledButton ، True) # مسدود کردن عملکرد GPIO.wait_for_edge (takeButton، GPIO. FALLING) چاپ ("دکمه فشار داده شده") GPIO.output (ledButton ، False) GPIO.cleanup ()

برخی از توضیحات کد یکی از اشکال دریافت مقادیر از GPIOS وقفه ها (دیگری نظرسنجی) است - تشخیص لبه.

لبه نام گذار از HIGH به LOW (لبه در حال سقوط) یا LOW به HIGH (افزایش لبه) است. هنگامی که پین به هیچ چیز متصل نیست ، هر خوانده نامشخص است. راه حل این است که در PIN مذکور یک مقاومت کشش بالا/پایین داشته باشید. Raspberry PI به شما امکان می دهد مقاومت های کشش بالا/پایین را از طریق نرم افزار پیکربندی کنید.

خط

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

آن PIN را برای انجام این کار پیکربندی می کند - بالا بکشید

چرا بالا کشید؟ خوب ، دکمه بزرگ گنبد دارای 2 پین است - فشار برای شکستن یا فشار برای ساخت (درست مانند دکمه های کوچک فشار که اغلب با کیت های PI آردوینو/تمشک عرضه می شوند). آن را به پین "فشار برای ایجاد" دکمه وصل کرده ام. هنگامی که فشار داده می شود ، مدار بسته می شود و برق عبور می کند (معمولاً باز است).

خط

GPIO.wait_for_edge (takeButton، GPIO. FALLING)

منتظر می ماند (اجرای اسکریپت را به حالت تعلیق در می آورد) تا زمانی که سقوط PIN را تشخیص دهد - با رها کردن دکمه ، جریان برق قطع می شود و PIN از 3.3 ولت به 0 ولت می رسد.

PIN LED فقط برای روشن کردن LED روی دکمه است

اطلاعات بیشتر در مورد سوئیچ های فشار از Arduino Tutorials ، ویکی پدیا در مورد push to make یا push to break و وقفه های GPIO

حالا ، بیایید یک دکمه فشاری را با دوربین ترکیب کنیم - فقط وقتی دکمه را فشار می دهید عکس بگیرید

وارد کردن عکس از زمان وارد کردن خواب از RPi وارد کردن GPIO از PIL وارد کردن تصویر # توجه: این دکمه لغو در برنامه اصلی خواهد بود.setmode (GPIO. BCM) GPIO.setup (takeButton، GPIO. IN، GPIO. PUD_UP) GPIO.setup (ledCancel، GPIO. OUT) def onLeds (): GPIO.output (ledCancel، True) sleep (1) def offLeds (): GPIO.output (ledCancel ، False) # تابع برای همپوشانی تصویر def overlayCounter (): # بارگذاری تصاویر img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.png') # ایجاد یک همپوشانی # با img1 استفاده می شود زیرا همه اندازه پد = Image.new ('RGB'، (((img1.size [0] + 31) // 32)) * 32 ، ((img1.size [1] + 15) // 16) * 16 ،)) # پوشش را بچسبانید - 3 pad.paste (img1، (0، 0)) ov = camera.add_overlay (pad.tobytes ()، size = img1.size) ov.alpha = 200 # لایه 3 است زیرا پیش نمایش دوربین روی لایه 2 قرار دارد. لایه = 3 خواب (1) camera.remove_overlay (ov) # چسباندن پوشش - 2 pad.paste (img2 ، (0 ، 0)) ov = camera.add_overlay (pad.tobytes ()، size = img2.size) ov.alpha = 200 # لایه 3 است زیرا پیش نمایش دوربین در لایه 2 ov. لایه = 3 خواب (1) camera.remove_overlay (ov) # چسباندن پوشش - 1 pad.paste (img3، (0، 0)) ov = camera.add_overlay (pad.tobytes ()، size = img3.size) ov.alpha = 200 # لایه 3 است زیرا پیش نمایش دوربین در لایه 2 ov.layer = 3 خواب (1) camera.remove_overlay (ov) camera = picamera. PiCamera () camera.resolution = (1280، 1024) camera.framerate = 24 camera.start_preview () GPIO.wait_for_edge (takeButton، GPIO. FALLING) onLeds () overlayCounter () camera.capture ('pushTesting.jpg') camera.stop_preview () offLeds () GPIO.cleanup ()

کمی توضیح کد

پیش نمایش دوربین را شروع می کند و در آنجا منتظر می ماند تا دکمه ای فشار داده شود. پس از فشار دادن دکمه ، LED روشن می شود و شمارش معکوس شروع می شود. هنگام رسیدن به انتها ، عکس گرفته می شود و LED خاموش می شود

مرحله 10: ارسال به توییتر

ارسال به توییتر
ارسال به توییتر
ارسال به توییتر
ارسال به توییتر
ارسال به توییتر
ارسال به توییتر

اکنون ، ما قصد داریم از پایتون استفاده کنیم و یک توییت را توییت کنیم!:) برای ارسال به تصویر نیاز دارید - عاقلانه انتخاب کنید.

اول ، ما باید به API توییتر دسترسی پیدا کنیم و برای این کار باید یک APP ایجاد کنیم. برای ایجاد یک برنامه جدید به https://apps.twitter.com بروید.

باید برای یک حساب توسعه دهنده درخواست دهید - برخی از سوالات را تکمیل کرده و آدرس ایمیل خود را تأیید کنید. پس از آن ، می توانید یک برنامه جدید ایجاد کنید.

پس از ایجاد APP ، به Keys و Tokens بروید و یک Access Token و Access Token Secret ایجاد کنید. پنجره ای با کلیدها فقط یکبار نشان داده می شود - آنها را کپی کرده و بعداً آنها را ذخیره کنید.

از کد زیر برای ارسال تصویر به حساب توییتر خود استفاده کنید. پر کردن را فراموش نکنید:

  • مصرف کننده_کلید
  • راز_ مصرف کننده
  • نشانه دسترسی
  • access_token_seret

پیام توییتر متنی است که در توییت ارسال می شود.

jpg_foto_to_nden تصویری است که به توییت ضمیمه می شود. لطفاً یک عکس در همان فهرست با اسکریپت پایتون داشته باشید و نام آن را در کد تغییر دهید.

واردات tweepy # تنظیمات توییتر def get_api (cfg): auth = tweepy. OAuthHandler (cfg ['user_key']، cfg ['secret_secret']) auth.set_access_token (cfg ['access_token']، cfg ['access_token_secret']) بازگشت tweepy. API (author) # ارسال به توییتر def sendToTwitter (): cfg = {"user_key": ""، "مصرف کننده_پنهان": "" ، "access_token": "" "،" access_token_secret ":" "} api = get_api (cfg) # پیام وضعیت tweet = "پیام توییتر" status = api.update_with_media ("jpg_foto_to_Sand" ، tweet) sendToTwitter ()

برای توییت خود فید توییتر خود را بررسی کنید.

این توییت است

یا زیر:

#RaspberryPI MagicBox. عکس بگیرید ، آنها را مرور کنید و ارسال آنها را به توییتر و فیس بوک انتخاب کنید. طراحی شده توسط Raspberry PI. Raspberry_Pi#RaspberryPI#RaspberryPIProjectpic.twitter.com/cCL33Zjb8p

- برونو ریکاردو سانتوس (@feiticeir0) 29 فوریه 2020

مرحله 11: ترکیب برخی عناصر

ترکیب برخی عناصر
ترکیب برخی عناصر
ترکیب برخی عناصر
ترکیب برخی عناصر

بیایید اکنون دکمه فشار بزرگ گنبد را ترکیب کرده ، آن را فشار دهیم ، شمارش معکوس کنیم ، عکس بگیریم ، تصمیم بگیریم که آن را به توییتر ارسال کنیم یا نه.

ما یک تصویر همپوشانی دیگر اضافه می کنیم و از هر سه دکمه فشار استفاده می کنیم. وقتی عکس گرفته می شود ، LED های 3 دکمه روشن می شوند.

ما یک عکس دیگر اضافه می کنیم که نمادهای ارسال شده به شبکه های اجتماعی را نشان می دهد

SelectOption-p.webp

Aenviar-p.webp

در ویدیو دکمه آبی (جلوی دوربین) نشان داده نمی شود ، اما LED روشن است و به محض فشار دادن شروع به چشمک زدن می کند.

در صورت تمایل کد پیوست شده است

این آخرین کد تست قبل از برنامه اصلی است.

# coding = utf-8 import picamera import _thread import subprocess as sp from time import import sleep from RPi import GPIO from PIL import Import threading threading # توییت واردات توییتر # واردات فیس بوک فیس بوک # دکمه برای گرفتن عکس takeButton = 17 # SocialNetwork Button socialNetworkButton = 23 # لغو تصویر cancelButton = 24 # عکس گرفتن از دکمه LED takePicButtonLed = 27 # ارسال به دکمه شبکه اجتماعی LED postSNLed = 22 # لغو دکمه LED cancelButtonLed = 5 GPIO.setmode (GPIO. BCM) GPIO.setup (takeButton، GPIO. IN، GPIO. PUD_UP) GPIO.setup (socialNetworkButton، GPIO. IN، GPIO. PUD_UP) GPIO.setup (cancelButton، GPIO. IN، GPIO. PUD_UP) GPIO.setup (takePicButtonLed، GPIO. OUT) GPIO.setup (postI)) GPIO.setup (cancelButtonLed، GPIO. OUT) # تنظیمات توییتر def get_api (cfg): auth = tweepy. OAuthHandler (cfg ['user_key']، cfg ['مصرف کننده_پنهان']) auth.set_access_token (cfg ['access_token'] ، cfg ['access_token_secret']) tweepy. API (author) # ارسال به twitter def sendToTwitter (): cfg = {"con sumer_key ":" "،" مصرف کننده_پنهان ":" "،" access_token ":" "،" access_token_secret ":" "} api = get_api (cfg) # وضعیت وضعیت tweet =" تست قابل آموزش MagicBox. #MagicBox #RaspberryPI #تمشک #Instructables "status = api.update_wid_media (" pushTesting.jpg "، tweet) #Facebook AOth def get_api_facebook (cfg): graph = facebook. GraphAPI (cfg ['get_token')] # # اگر می خواهید خودتان پست بگذارید می توانید از # موارد زیر صرف نظر کنید. resp = graph.get_object ('من/حساب ها] page_access_token = هیچ صفحه ای در resp [' data '] وجود ندارد: اگر صفحه [' id '] == cfg ['page_id']: page_access_token = صفحه ['access_token'] graph = facebook. GraphAPI (page_access_token) نمودار بازگشتی # ارسال به فیس بوک def sendToFacebook (): # ارزشهای دسترسی cfg = {"page_id": "" ، "access_token": ""} api = get_api_facebook (cfg) caption = "عنوان تصویر" albumid = "" api.put_photo (image = open ("pushTesting.jpg"، "rb") ، caption = "عنوان تصویر ") # Light only TakePicButtonLed def onlyTakePicLed (): GPIO.output (takePicButtonLed، True) GPIO.output (postSNLed، False) GPIO.output (cancelButtonLed، False) # فقط نور لغو و دکمه SocialNetwork برای لغوPostLEDS (): O.output (takePicButtonLed، False) GPIO.output (postSNLed، True) GPIO.output (cancelButtonLed، True) # چشمک زدن عکس LED را هنگام شمارش معکوس برای شمارش TimerPicture (): GPIO.output (takePicButtonLed ، True) خواب (0.5) GPIO.output (takePicButtonLed، False) خواب (0.5) GPIO.output (takePicButtonLed، True) خواب (0.5) GPIO.output (takePicButtonLed ،False) sleep (0.5) GPIO.output (takePicButtonLed، True) sleep (0.5) GPIO.output (takePicButtonLed، False) # چشمک زدن پست SNL هنگام ارسال به شبکه های اجتماعی def blinkPosting (stop_event): # شروع کنید (نه stop_event.is_set ()): print ("off") GPIO.output (postSNLed، False) sleep (0.5) print ("on") GPIO.output (postSNLed، True) sleep (0.5) def timer (): GPIO.output (takePicButtonLed، True) sleep (1) GPIO.output (postSNLed، True) sleep (1) GPIO.output (cancelButtonLed، True) sleep (1) def showAllLeds (): GPIO.output (takePicButtonLed، True) GPIO.output (postSNLed، True) GPIO.output (cancelButtonLed، True) # نمایش یک پیش نمایش در لایه 1 def displayPreview (imgName): # از آنجا که نمایش تصویر PIL یک مزخرف است # ما از پوشش روی دوربین برای نمایش # پیش نمایش img = Image.open (imgName) padding = Image.new ('RGB'، (((img.size [0] + 31) // 32) * 32، ((img.size [1] + 15) // 16) * 16،)) padding.paste (img، (0، 0)) ov = camera.add_overlay (padding.tobytes ()، size = img.size) ov.layer = 1 # نمایش پیش نمایش روی لایه 3 def displayPreview3 (imgName): # از آنجا که نمایش تصویر PIL یک crapp است # ما از پوشش روی دوربین برای نمایش # پیش نمایش 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 # تابع overlaySocialNetwork def overlaysn (): imgsn = Image.open ('SelectOption.png') # ایجاد پوشش پد = تصویر. جدید ('RGB' ، (((imgsn.size [0] + 31) // 32) * 32 ، ((imgsn.size [1] + 15) // 16) * 16 ،)) # جای گذاری pad.paste (imgsn، (0، 0)) ov = camera.add_overlay (pad.tobytes ()، size = imgsn.size) ov.alpha = 100 ov.layer = 3 ov ov تصویر Def overlayCounter (): # بارگذاری تصاویر img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.png') # ایجاد یک همپوشانی # با img1 استفاده می شود زیرا همه اندازه پد = Image.new ('RGB'، (((img1.size [0] + 31) // 32) * 32 ، ((img1.size [1] + 15) // 16) * 16 ،)) # چسباندن پوشش - 3 pad.paste (img1 ، (0، 0)) ov = camera.add_overlay (pad.tobytes () ، size = img1.size) ov.alpha = 200 # لایه 3 می باشد زیرا پیش نمایش دوربین روی لایه 2 قرار دارد ov.layer = 3 sleep (1) camera.remove_overlay (ov) # paste overlay - 2 pad.paste (img2، (0، 0)) ov = camera.add_overlay (pad.tobytes () ، size = img2.size) ov.alpha = 200 # لایه 3 است زیرا پیش نمایش دوربین در لایه 2 ov.layer = 3 sleep (1) camera.remove_overlay (ov) # paste overlay - 1 pad.paste (img3، (0، 0)) ov = camera.add_overlay (pad.tobytes ()، size = img3.size) ov.alpha = 200 # لایه 3 است زیرا پیش نمایش دوربین در لایه 2 است ov.layer = 3 sleep (1) camera.remove_overlay (ov) # عملکرد اصلی # صفحه را پاک کنید تا پیام های بوت در دسترس نباشند # احتمالاً بهتر است این کار را در bash tmp = sp.call ('clear' انجام دهید) shell = True) camera = picamera. PiCamera () camera.resolution = (1280، 1024) camera.framerate = 24 camera.brightness = 55 camera.sharpness = 0 camera.contrast = 0 #camera.exposure_co mpensation = 0 #camera.exposure_mode = 'auto' #camera.meter_mode = 'average' #در اینجا آزمایش کنید: while (True): camera.start_preview () #نمایش LED فقط برای گرفتن عکس فقط TakePicLed () #منتظر بمانید تا دکمه گرفته شود تصویر GPIO.wait_for_edge (takeButton، GPIO. FALLING) # یک موضوع را برای شمارش با LED ها در حالی که تصاویر نشان داده شده است شروع کنید # احتمالاً می توان از آن در عملکرد overlayCounter استفاده کرد ، # زیرا دارای تایمر برای نمایش تصاویر است ، اما جلوه های رهبری # یکسان نخواهد بود _thread.start_new_thread (countingTimerPicture، ()) # همپوش تصاویر را در پوشش دوربین روی صفحه نمایش دهید Counter () # همه LED ها را در حین گرفتن عکس نشان دهید showAllLeds () camera.capture ('pushTesting.jpg'). stop_preview () #display image displayPreview ('pushTesting.jpg') # نمایش همپوشانی oo = overlaysn () # نمایش LED ها برای لغو یا ارسال به شبکه های اجتماعی لغوPostLEDS () GPIO.add_event_detect (socialNetworkButton، GPIO. FALLET_Point_Button) GPIO.adton ، GPIO. FALLING) در حالی که (True): اگر GPIO.event_detecte d (socialNetworkButton): camera.remove_overlay (oo) GPIO.output (cancelButtonLed، False) o = displayPreview3 ('Aenviar.png') #print "دکمه شبکه های اجتماعی" sendToTwitter () sendToFacebook () camera.remove_overlay (o) در صورت شکستن GPIO.event_detected (cancelButton): #print "Cancled" camera.remove_overlay (oo) break # reset GPIOS GPIO.remove_event_detect (socialNetworkButton) GPIO.remove_event_detect (cancelButton) GPIO.remove_event_detect () "خارج شد …") #offLeds () GPIO.cleanup ()

مرحله 12: سیم کشی

Image
Image
سیم کشی
سیم کشی
سیم کشی
سیم کشی

سیم کشی فقط سیم کشی دکمه های Big Dome Push به Raspberry PI است.

کافی است از طرح Fritzing Schematic پیروی کنید.

اتصالات عبارتند از:

ConnectionRPI GPIO PIN GND دکمه سبز فشار GND (#3) GND دکمه فشار زرد GND (#9) GND دکمه آبی GND (#39) عکس بگیرید (دکمه آبی فشار "فشار دهید") 17 (BCM) ارسال به شبکه های اجتماعی (فشار سبز) دکمه "Push to make") 23 (BCM) لغو (دکمه زرد زرد "Push to make") 24 (BCM) دکمه آبی آبی LED27 (BCM) دکمه سبز فشار LED22 (BCM) دکمه فشار زرد LED5 (BCM)

انقباض حرارتی نیز دارای کد رنگی است

  • سیاه اتصالات GND است
  • زرد ارتباطات "فشار برای ایجاد" است
  • آبی اتصالات LED هستند

اعداد GPIO. BCM در مقابل اتصالات GPIO. BOARD

از آنجا که ارتباطات من BCM است ، فکر می کنم اکنون زمان مناسبی است که در مورد آن و تفاوت BCM و BOARD صحبت کنم.

تفاوت اصلی در نحوه مراجعه شما به پین های GPIO است که به نوبه خود نحوه انجام اتصالات را به دنبال خواهد داشت. GPIO.board پین ها را با شماره چاپ شده در هر طرح GPIO در اینترنت ارجاع می دهد.

GPIO. BCM همانطور که Broadcom SOC آنها را می بیند ، به شماره های PIN اشاره می کند. این احتمالاً در نسخه های جدیدتر Raspberry PI تغییر می کند.

در سایت pinout.xyz ، شماره های برد همان هایی هستند که درست در کنار پین ها قرار دارند و BCM به این ترتیب ذکر شده است - BCM X (جایی که X عدد است)

مرحله 13: MagicBox

کد پیوست شده به این مرحله نهایی است.

می توانید آن را در بوت تمشک PI اجرا کنید ، حتی بدون نیاز به ورود به سیستم. برای انجام این کار ، کافی است این اسکریپت کوچک را در فهرست راهنمای ایجاد شده ایجاد کنید - مسیرها را متناسب با آن تغییر دهید

#!/bin/bash

cd/home/pi/magicbox python MagicBox.py

آن را اجرایی کنید

chmod +x start_magicbox.sh

اکنون ، آن را در /etc/rc.local ، درست قبل از آموزش خروجی 0 صدا کنید

sudo vi /etc/rc.local

/home/pi/magicbox/start_magicbox.sh &

ذخیره نموده و خارج شوید.

اکنون ، با هر بار راه اندازی مجدد ، برنامه پایتون اجرا می شود

توجه: همه فایل های تصویری باید در همان فهرست اسکریپت باشند. باید داشته باشی:

  • 1.png
  • 2.png
  • 3.png
  • Aenviar.png
  • SelectOption.png

می توانید همه این فایل ها را در github MagicBox دریافت کنید.

توصیه شده: