جدول المحتويات:

كاميرا صور RaspberryPI - MagicBox: 13 خطوة (بالصور)
كاميرا صور RaspberryPI - MagicBox: 13 خطوة (بالصور)

فيديو: كاميرا صور RaspberryPI - MagicBox: 13 خطوة (بالصور)

فيديو: كاميرا صور RaspberryPI - MagicBox: 13 خطوة (بالصور)
فيديو: The best way for digitizing your negatives 🎞️ 2024, يوليو
Anonim
Image
Image
يبني
يبني

منذ فترة ، كانت لدي فكرة مجنونة لإنشاء آلة تصوير من Raspberry PI. في مدينتي ، كان هناك عرض صغير حيث سيذهب الناس ويعرضون ما كانوا يصنعونه أو صنعوه باستخدام الإلكترونيات وأجهزة الكمبيوتر وما إلى ذلك … كنت مثل صانع الرجل الفقير ، ولكن على نطاق محلي.

كان أحدهم قادمًا ، وقمنا مع زوجتي ببناء هذا الشيء.

كيف يعمل ؟

تضغط على الزر الأزرق - يبدأ في الوميض - وبعد 3 ثوانٍ يتم التقاط صورة. على الجانب الآخر من الكاميرا ، هناك شاشة تعرض العد التنازلي وبعد التقاط الصورة ، يتم معاينة الصورة.

يمكنك الآن اختيار إرسالها إلى Twitter و Facebook أو الإلغاء والمحاولة مرة أخرى. بكل بساطة.

تمت برمجة كل شيء في Python ، باستخدام PI Framebuffer - No Xorg ، لا يتم استخدام واجهة المستخدم الرسومية.

هذا فيديو للمشروع يعمل

اللوازم

  • Raspberry PI (أنا أستخدم الإصدار 2)
  • كاميرا Raspberry PI (باستخدام الإصدار 1)
  • 3 أزرار دفع قبة كبيرة
  • شاشة TFT / LCD مع VGA / HDMI
  • MDF
  • مفصلات معدنية ، براغي ، إلخ.
  • أدوات كهربائية
  • وقت الفراغ والكثير من المرح

الخطوة 1: بناء

يبني
يبني
يبني
يبني

كان البناء ممتعًا. الكثير من القص والرسم والحفر.

لقد استخدمت لوحات MDF لبناء الهيكل الأساسي للكاميرا. فهي خفيفة وسهلة العمل معها. أيضًا ، كان نوعًا واحدًا من الأخشاب تمكنت آلة الليزر في مصنع Fablab المحلي من قطعه.

تم الوصول إلى الأسلاك الداخلية من جانب الشاشة ، باستخدام مفصلات هيدروليكية حتى يتمكنوا من المساعدة في رفع الشاشة.

الخطوة الثانية: الكاميرا

الة تصوير
الة تصوير
الة تصوير
الة تصوير
الة تصوير
الة تصوير

الة تصوير

الكاميرا عبارة عن صندوق بالأبعاد التالية: 60 سم × 40 سم × 30 سم يمكنك أن تكون أصغر ، أكبر ، الأمر متروك لك. تحتاج فقط إلى استيعاب الشاشة التي ستستخدمها. تم قطع ألواح MDF بالليزر في مصنع Fablab المحلي. هناك حاجة لثلاثة ثقوب في الخلف - زران كبيران للضغط على شكل قبة وآخر للشاشة. في الأمام ، فتحتان - أحدهما لزر ضغط على شكل قبة كبيرة والآخر - أصغر - لكاميرا Raspberry PI. ليس لدي قياسات محددة - فقط تخيل كاميرا واستخدمها.

الخطوة 3: المراقبة

مراقب
مراقب
مراقب
مراقب
مراقب
مراقب

مراقب

تم عمل دعم الشاشة بإضافة قطع صغيرة من الخشب لدعمها في أبعادها.

كان عبارة عن شريط من الغلاف البلاستيكي ومثبت في مكانه بمسامير. للمساعدة في رفعه ، تم استخدام مفصلتين هيدروليكيتين (مستخدمتين).

الخطوة 4: التزيين

تزيين
تزيين
تزيين
تزيين
تزيين
تزيين
تزيين
تزيين

نظرًا لأنني أحب أسلوب فوجي X-T30 كثيرًا ، فقد ذهبنا وفعلنا شيئًا مشابهًا.

أولاً ، قمنا بتغطيتها بالرغوة وبعد ذلك قمنا برشها باللون الأسود. بعد الطلاء ، أضفنا رقائق الألومنيوم للأجزاء الفضية ولفناها

لمحاكاة العدسة ، استخدمنا للتو Tupperware دائريًا حيث قمنا بعمل ثقب صغير لوحدة الكاميرا Raspberry PI للجلوس.

الخطوة الخامسة: البرمجة

كانت برمجة الكاميرا تمثل تحديًا ، لكنها كانت ممتعة للغاية.

لا توجد واجهة مستخدم رسومية - هذا يعمل على CLI ويعمل على Python الإصدار 3.

لقد بدأت أولاً باختبار الأزرار وبرمجتها ، ثم التقاط الصور باستخدام الأدوات المتوفرة بالفعل و Python API. انتقلت بعد ذلك إلى تراكب الصور في إخراج الكاميرا (للعد التنازلي) وبجانب التفاعل مع Twitter و Facebook.

بعد أن شعرت بالراحة مع كل ذلك ، مثل اللغز ، جمعت كل القطع معًا. هنا ، نذهب بنفس العملية. ابدأ بطيئًا وصغيرًا وانتقل إلى سريع وكبير.

أولاً ، لنبدأ بتكوين Raspberry PI

الخطوة 6: تحضير Raspberry PI

تحضير Raspberry PI
تحضير Raspberry PI
تحضير Raspberry PI
تحضير Raspberry PI
تحضير Raspberry PI
تحضير Raspberry PI

لن أشرح كيفية تثبيت Raspbian على Raspberry PI - هناك الكثير من البرامج التعليمية المتاحة ، حتى على موقع Raspberry PI الرسمي.

تحتاج فقط إلى الوصول إلى SSH ، أو توصيله بشاشة وتوصيل لوحة المفاتيح والماوس.

ملاحظة: عند البدء بكاميرا Raspberry PI ، تحتاج إلى توصيلها بالشاشة. حتى ذلك الحين ، يمكن إجراء جميع الخطوات باستخدام SSH.

بعد التمهيد في Raspberry PI الخاص بك ، نحتاج إلى تمكين كاميرا Raspberry PI. لنستخدم أداة raspi-config لذلك.

sudo raspi-config

  1. اختر الخيار 5 - خيارات التفاعل
  2. اختر P1 - تمكين / تعطيل الاتصال بكاميرا Raspberry PI
  3. قل نعم
  4. حسنًا
  5. اختر إنهاء
  6. اختر نعم لإعادة التشغيل الآن

بعد إعادة التشغيل ، يمكننا المتابعة

الخطوة 7: البرمجيات

سنحتاج إلى تثبيت بعض مكتبات Python. تم تحديث هذا لأحدث إصدار Raspbian - Buster

أولاً ، لنقم بتعيين Python 3 كإعداد افتراضي. اتبع هذا الرابط لمعرفة كيفية إعداد النظام على نطاق واسع

المكتبات:

  • python-pil.imagetk لمعالجة الصور
  • python-rpi.gpio للوصول إلى دبابيس GPIO
  • python-picamera للوصول إلى كاميرا Raspberry PI
  • تويبي لمشاركة الصورة على تويتر
  • facebook-sdk للمشاركة في صفحة الفيسبوك

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

استخدم Python pip لتثبيت facebook-sdk

sudo pip3 تثبيت facebook-sdk

الخطوة 8: البرمجة - معاينة الكاميرا

Image
Image
البرمجة - معاينة الكاميرا
البرمجة - معاينة الكاميرا
البرمجة - معاينة الكاميرا
البرمجة - معاينة الكاميرا

كان أحد المتطلبات التي حددتها لهذا المشروع هو تشغيل هذا البرنامج في وضع CLI. لذلك ، نحتاج إلى عرض صورة الكاميرا على وحدة التحكم. لهذا ، دعونا نستخدم Python Picamera. بعد ذلك ، دعنا نستخدم pil.imagetk لعرض تراكب أعلى معاينة الكاميرا

سيعرض برنامجنا الصغير (سنقوم بتطوير برامج صغيرة حتى واحد كبير في النهاية) معاينة الكاميرا.

#! / usr / bin / env python

استيراد وقت استيراد picamera من وقت استيراد كاميرا النوم = picamera. PiCamera () # اضبط الدقة التي تريدها camera.resolution = (1280 ، 1024) camera.framerate = 24 camera.start_preview () جرب: while (True): sleep (1)) باستثناء (KeyboardInterrupt، SystemExit): print ("Exiting…") camera.stop_preview ()

لتجربته فقط قم بتنفيذه

بيثون cameraPreview.py

معاينة الكاميرا مع الصور في الأعلى

نظرًا لأنني أردت عرض العد التنازلي قبل التقاط الصورة ، كنت بحاجة إلى صور متداخلة مع معاينة الكاميرا.

قم بإنشاء صورة-p.webp" />

ستتداخل الكود التالي مع 1-p.webp

استيراد صورة من استيراد PIL صورة من وقت استيراد وضع السكون باستخدام picamera. PiCamera () ككاميرا: camera.resolution = (1920 ، 1080) camera.framerate = 24 camera.start_preview () # تحميل صورة img = Image.open ('1-p.webp

جربها:

بيثون imageOverlay.py

لنقم الآن بإنشاء عد تنازلي باستخدام صور التراكب. كما لو كنت قد أنشأت الصورة 1-p.webp

بعد ذلك ، فقط استخدم الكود التالي:

استيراد picamera

من استيراد صورة PIL من وقت استيراد السكون باستخدام picamera. PiCamera () ككاميرا: 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 sleep (2) # remove السابقة overlay camera.remove_overlay (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 (o) pad.paste (img3، (0، 0)) o = camera. add_overlay (pad.tobytes ()، size = img3.size) o.alpha = 128 o.layer = 3 سكون (2)

الآن قم بتنفيذها:

بيثون imageOverlayCounter.py

وانظر العد التنازلي

رائع - الكثير من التعليمات البرمجية ولم يتم التقاط صورة … فلنحل ذلك من خلال الجمع بين كل ذلك معًا - معاينة الكاميرا والعد التنازلي والتقاط صورة

استيراد picameraf من استيراد PIL صورة من وقت استيراد وضع السكون التراكب (): # تحميل صورة img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.-p.webp

جربها:

بيثون pictureWithTimer.py

وهنا لدينا يودا

الخطوة 9: البرمجة - زر ضغط القبة الكبيرة

البرمجة - زر ضغط القبة الكبيرة
البرمجة - زر ضغط القبة الكبيرة
البرمجة - زر ضغط القبة الكبيرة
البرمجة - زر ضغط القبة الكبيرة

زر الضغط ذو القبة الكبيرة هو زر دائري كبير - بقطر يبلغ حوالي 100 مم مع مصباح LED صغير. تقول أنها تعمل في 12V ، لكن 3.3v من Raspberry PI كافية لإضاءةها

استخدم التخطيطي للاختبار

الرمز:

من RPi استيراد GPIO

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) # وظيفة الحظر GPIO.wait_for_edge (takeButton، GPIO. FALLING) طباعة ("زر الضغط على الزر") GPIO.output (زر led ، خطأ) GPIO.cleanup ()

البعض يشرح الكود أحد أشكال الحصول على القيم من GPIOS يكون من خلال المقاطعات (البعض الآخر هو الاستقصاء) - اكتشاف الحافة.

الحافة هي اسم الانتقال من HIGH إلى LOW (حافة هبوط) أو LOW إلى HIGH (حافة صاعدة). عندما لا يكون رقم التعريف الشخصي متصلاً بأي شيء ، سيتم إلغاء تحديد أي قراءة. الحل هو أن يكون لديك مقاومة سحب لأعلى / لأسفل في PIN المذكور. يسمح Raspberry PI بتكوين مقاومات سحب لأعلى / لأسفل من خلال البرنامج.

الخط

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

يكوّن رقم التعريف الشخصي هذا للقيام بذلك بالضبط - اسحب

لماذا الانسحاب؟ حسنًا ، يحتوي زر ضغط القبة الكبيرة على رقمين PIN - اضغط للكسر أو الضغط من أجل صنع (تمامًا مثل أزرار الضغط الصغيرة التي تأتي غالبًا مع مجموعات Arduino / Raspberry PI). لقد قمت بتوصيله برقم التعريف الشخصي "اضغط لإجراء" للزر. عند الضغط عليه ، يتم إغلاق الدائرة وتمر الكهرباء (عادة ما تكون مفتوحة).

الخط

GPIO.wait_for_edge (TakeButton، GPIO. FALLING)

سينتظر (تعليق تنفيذ البرنامج النصي فعليًا) حتى يكتشف سقوط رقم التعريف الشخصي - سيؤدي تحرير الزر إلى قطع تدفق الكهرباء وسيذهب رقم التعريف الشخصي من 3.3 فولت إلى 0 فولت

رمز PIN الخاص بـ LED هو فقط لإضاءة مؤشر LED الموجود على الزر

مزيد من المعلومات حول مفاتيح الدفع من Arduino Tutorials و Wikipedia عند الدفع لإجراء أو دفع لكسر ومقاطعات GPIO

الآن ، دعنا ندمج زر ضغط مع الكاميرا - التقط صورة فقط عند الضغط على الزر

استيراد picamer من وقت استيراد السكون من RPi استيراد GPIO من PIL import Image # ملاحظة: هذا ما سيكون زر الإلغاء في البرنامج الرئيسي # أنا أستخدمه هنا فقط من أجل الوضوح في أخذ الفيديو الزر = 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) 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 لأن جميعها لها نفس الحجم pad = 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 # layer is 3 لأن معاينة الكاميرا على طبقة 2 ov.layer = 3 سكون (1) camera.remove_overlay (ov) # لصق التراكب - 2 pad.paste (img2 ، (0 ، 0)) ov = camera.add_overlay (pad.tobytes ()، size = img2.size) ov.alpha = 200 # layer هي 3 لأن معاينة الكاميرا على طبقة 2 ov.layer = 3 سكون (1) camera.remove_overlay (ov) # لصق التراكب - 1 pad.paste (img3، (0، 0)) ov = camera.add_overlay (pad.tobytes ()، size = img3.size) ov.alpha = 200 # layer هي 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: انشر على Twitter

انشر على Twitter
انشر على Twitter
انشر على Twitter
انشر على Twitter
انشر على Twitter
انشر على Twitter

الآن ، سنستخدم بايثون ونغرد تغريدة!:) ستحتاج إلى صورة لنشرها - اختر بحكمة.

أولاً ، نحتاج إلى الدخول إلى twitter API ومن أجل ذلك نحتاج إلى إنشاء تطبيق. انتقل إلى https://apps.twitter.com لإنشاء تطبيق جديد.

ستحتاج إلى تقديم طلب للحصول على حساب مطور - املأ بعض الأسئلة وقم بتأكيد عنوان بريدك الإلكتروني. بعد ذلك ، ستتمكن من إنشاء تطبيق جديد.

بعد إنشاء التطبيق ، انتقل إلى Keys and Tokens وقم بإنشاء رمز وصول و Access Token Secret. ستظهر نافذة تحتوي على المفاتيح مرة واحدة فقط - انسخ تلك المفاتيح واحفظها لاحقًا.

استخدم الكود التالي لإرسال صورة إلى حساب تويتر الخاص بك. لا تنسى أن تملأ:

  • مفتاح المستهلك
  • سر المستهلك
  • رمز وصول
  • access_token_secret

رسالة تويتر هي النص المراد إرساله في التغريدة.

jpg_foto_to_send هي صورة سيتم إرفاقها بالتغريدة. يرجى الحصول على صورة في نفس الدليل مثل نص Python وتغيير الاسم في الكود.

import tweepy # Twitter settings def 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) # Send to twitter def sendToTwitter (): cfg = {"Consumer_key": ""، "Consumer_secret": ""، "access_token": ""، "access_token_secret": ""} api = get_api (cfg) # رسالة الحالة tweet = "رسالة تويتر" status = api.update_with_media ("jpg_foto_to_Send"، tweet) sendToTwitter ()

تحقق من موجز Twitter الخاص بك بحثًا عن تغريدتك.

ها هي التغريدة

أو خوار:

#RaspberryPI MagicBox. التقط الصور وراجعها واختر إرسالها إلى Twitter و Facebook. مدعوم من Raspberry PI. Raspberry_Pi # RaspberryPI # RaspberryPIProjectpic.twitter.com / cCL33Zjb8p

- برونو ريكاردو سانتوس (@ feiticeir0) 29 فبراير 2020

الخطوة 11: الجمع بين بعض العناصر

الجمع بين بعض العناصر
الجمع بين بعض العناصر
الجمع بين بعض العناصر
الجمع بين بعض العناصر

دعنا الآن نجمع زر Big Dome Push ، بالضغط عليه ، والعد التنازلي ، والتقاط صورة ، وتحديد ما إذا كنت تريد إرسالها إلى Twitter أم لا.

سنضيف صورة تراكب أخرى ونستخدم جميع الأزرار الانضغاطية الثلاثة. عند التقاط الصورة ، ستضيء جميع مصابيح LED الثلاثة.

نضيف صورة أخرى تظهر الأيقونات للنشر على الشبكات الاجتماعية

يعرض SelectOption-p.webp

Aenviar-p.webp

في الفيديو لا يظهر زر الضغط الأزرق (أمام الكاميرا) ، ولكن مؤشر LED مضاء ويبدأ في الوميض بمجرد الضغط عليه.

يتم إرفاق الرمز إذا كنت تفضل ذلك

هذا هو كود الاختبار النهائي قبل البرنامج الرئيسي.

# coding = utf-8 استيراد picamera _thread استيراد العملية الفرعية كـ sp من وقت استيراد السكون من RPi استيراد GPIO من PIL استيراد خيوط استيراد الصورة # Twitter import tweepy # Facebook import facebook # زر لالتقاط صورة Button = 17 # SocialNetwork Button socialNetworkButton = 23 # إلغاء الصورة إلغاء الزر = 24 # التقاط صورة زر LED أخذ PicButtonLed = 27 # نشر على زر الشبكة الاجتماعية مشاركة LEDSNLed = 22 # إلغاء زر LED إلغاء الزر = 5 GPIO.setmode (GPIO. BCM) GPIO.setup (takeButton، GPIO. IN، GPIO. PUD_UP) GPIO.setup (socialNetworkButton، GPIO. IN، GPIO. PUD_UP) GPIO.setup (إلغاء الزر ، GPIO. IN ، GPIO. PUD_UP) GPIO.setup (takePicButtonLed ، GPIO. OUT) GPIO.setup (postSNLed ، GPIO. OUT) GPIO.setup (CancelButtonLed، GPIO. OUT) # إعدادات Twitter def get_api (cfg): auth = tweepy. OAuthHandler (cfg ['Consumer_key']، cfg ['Consumer_secret']) auth.set_access_token (cfg ['access_token'] ، cfg ['access_token_secret']) return tweepy. API (auth) # Send to twitter def sendToTwitter (): cfg = {"con sumer_key ":" "،" Consumer_secret ":" "،" access_token ":" "،" access_token_secret ":" "} api = get_api (cfg) # رسالة الحالة tweet =" MagicBox اختبار قابل للتوجيه. #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']) # الحصول على رمز مميز للصفحة انشر كصفحة. يمكنك تخطي # التالي إذا كنت تريد النشر بنفسك. resp = graph.get_object ('me / accounts') page_access_token = لا شيء للصفحة قيد التنفيذ ['data']: إذا كانت الصفحة ['id'] == cfg ['page_id']: page_access_token = page ['access_token'] graph = facebook. GraphAPI (page_access_token) رسم بياني إرجاع # Send to facebook def sendToFacebook (): #Values for access 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) # Light only Cancel and SocialNetwork defissionPostLEDS (): GPI O.output (takePicButtonLed، False) GPIO.output (postSNLed، True) GPIO.output (إلغاء الزر ، صحيح) # وميض التقاط صورة LED أثناء العد التنازلي العد التنازلي TimerPicture (): GPIO.output (takePicButtonLed، True) sleep (0.5) GPIO.output (takePicButtonLed، False) sleep (0.5) GPIO.output (takePicButtonLed، True) sleep (0.5) GPIO.output (takePicButtonLed،خطأ) sleep (0.5) GPIO.output (takePicButtonLed، True) sleep (0.5) GPIO.output (takePicButtonLed، False) # وميض postSNLed أثناء النشر على الشبكات الاجتماعية def blinkPosting (stop_event): # Start while (not 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) النوم (1) GPIO.output (postSNLed، True) sleep (1) GPIO.output (إلغاء الزر ، True) السكون (1) def showAllLeds (): GPIO.output (takePicButtonLed، True) GPIO.output (postSNLed، True) GPIO.output (إلغاء الزر ، صحيح) # عرض معاينة على الطبقة 1 معاينة العرض (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 # Function overlaySocialNetwork def overaysn (): imgsn = Image.open ('SelectOption.png') # Create لوحة التراكب = Image.new ('RGB'، (((imgsn.size [0] + 31) // 32) * 32، ((imgsn.size [1] + 15) // 16) * 16،)) # لصق لوحة التراكب. image def overlayCounter (): # تحميل الصور img1 = Image.open ('3.png') img2 = Image.open ('2.png') img3 = Image.open ('1.png') # إنشاء تراكب # تُستخدم مع img1 لأن جميعها من نفس الحجم pad = 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 # layer هي 3 لأن معاينة الكاميرا على طبقة 2 ov.layer = 3 سكون (1) camera.remove_overlay (ov) # لصق التراكب - 2 pad.paste (img2، (0، 0)) ov = camera.add_overlay (pad.tobytes ()، size = img2.size) ov.alpha = 200 # layer هي 3 لأن معاينة الكاميرا على طبقة 2 ov.layer = 3 سكون (1) camera.remove_overlay (ov) # لصق the overlay - 1 pad.paste (img3، (0، 0)) ov = camera.add_overlay (pad.tobytes ()، size = img3.size) ov.alpha = 200 # layer هي 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 () #Show LED Only لالتقاط صورة فقطTakePicLed () # انتظر حتى يلتقط الزر صورة GPIO.wait_for_edge (takeButton، GPIO. FALLING) # ابدأ خيطًا للعد باستخدام مصابيح LED أثناء عرض الصور # ربما يمكن استخدامها في وظيفة overlayCounter ، # لأنها تحتوي أيضًا على مؤقتات لإظهار الصور ، ولكن تأثيرات LED لن يكون # هو نفسه _thread.start_new_thread (countingTimerPicture، ()) # أظهر تراكب الصور في تراكب صورة الكاميرا Counter () # اعرض كل LEDS أثناء التقاط الصورة showAllLeds () camera.capture ('pushTesting.jpg') الكاميرا. stop_preview () #display image displayPreview ('pushTesting.jpg') # Show overlay oo = Overaysn () # Show LEDs to Cancel or PostLEDS () GPIO.add_event_detect (socialNetworkButton، GPIO. FALLING) GPIO.add_event_detect (إلغاء الزر ، GPIO. FALLING) بينما (صواب): إذا كان GPIO.event_detecte d (socialNetworkButton): camera.remove_overlay (oo) GPIO.output (cancellButtonLed، False) o = displayPreview3 ('Aenviar.png') #print "Social Networks Button" sendToTwitter () sendToFacebook () camera.remove_overlay (o) break if GPIO.event_detected (إلغاء زر): # print "Canceled" camera.remove_overlay (oo) break # reset GPIOS GPIO. "تم الخروج …") #offLeds () GPIO.cleanup ()

الخطوة 12: الأسلاك

Image
Image
الأسلاك
الأسلاك
الأسلاك
الأسلاك

الأسلاك هي فقط توصيل أزرار Big Dome Push بـ Raspberry PI.

ما عليك سوى اتباع مخطط فريتزينج.

الوصلات هي:

ConnectionRPI GPIO PIN GND Green Push ButtonGND (# 3) GND Yellow Push ButtonGND (# 9) GND Blue Push ButtonGND (# 39) التقاط صورة (زر الضغط الأزرق "Push to make") 17 (BCM) النشر على الشبكات الاجتماعية (Green Push الزر "اضغط لإجراء") 23 (مليار متر مكعب) إلغاء (زر الضغط الأصفر "اضغط لإجراء") 24 (مليار متر مكعب) زر الضغط الأزرق LED27 (مليار متر مكعب) زر الضغط الأخضر LED22 (مليار متر مكعب) زر الضغط الأصفر LED5 (مليار متر مكعب)

الانكماش الحراري هو أيضا مشفر بالألوان

  • الأسود هو اتصالات GND
  • الأصفر هو "دفع لإجراء" اتصالات
  • اللون الأزرق هو وصلات LED

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

نظرًا لأن اتصالاتي هي BCM ، أعتقد أن الوقت مناسب الآن للتحدث عنها والفرق بين BCM و BOARD.

يتمثل الاختلاف الرئيسي في كيفية الرجوع إلى أرقام PIN الخاصة بـ GPIO ، والتي بدورها ستقود كيفية إجراء الاتصالات. سيقوم GPIO.board بإحالة رموز PIN من خلال الرقم المطبوع على أي تخطيط GPIO على الإنترنت.

يشير GPIO. BCM إلى أرقام PIN كما تراها Broadcom SOC. من المحتمل أن يتغير هذا مع الإصدارات الأحدث من Raspberry PI.

في موقع pinout.xyz ، تكون أرقام اللوحة هي الأرقام الموجودة بجوار المسامير مباشرة ويشار إلى BCM على هذا النحو - BCM X (حيث X هو الرقم)

الخطوة 13: MagicBox

الكود المرفق بهذه الخطوة هو النهائي.

يمكنك تشغيله عند تمهيد raspberry PI ، دون الحاجة إلى تسجيل الدخول. للقيام بذلك ، ما عليك سوى إنشاء هذا البرنامج النصي الصغير في الدليل الذي وضعت فيه الكود - قم بتغيير المسارات وفقًا لذلك

#! / بن / باش

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 &

احفظ واخرج.

الآن ، مع كل إعادة تشغيل ، سيتم تنفيذ برنامج Python

ملاحظة: يجب أن تكون جميع ملفات الصور في نفس دليل البرنامج النصي. تحتاج أن تملك:

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

يمكنك الحصول على كل هذه الملفات في MagicBox's github.

موصى به: