جدول المحتويات:
2025 مؤلف: John Day | [email protected]. آخر تعديل: 2025-01-13 06:56
مشكلة - القطط تستخدم حديقتك كمرحاض
الحل - اقضِ وقتًا طويلاً في هندسة رشاش القطط بميزة التحميل التلقائي على youtube
هذه ليست خطوة بخطوة ، ولكنها نظرة عامة على البناء وبعض التعليمات البرمجية
#BeforeYouCallPETA - القطط بخير ، إنها رشاش منخفض الضغط تمامًا مثل المطر ، ويمكنها تجاوزها قبل أن تدور حولها. المشروع ليس نقع قطة ، ولكن لإظهارها بعيدًا قبل أن يملأ حديقتي بنسخة القط من Barkers Eggs.
الخطوة 1: العناصر الرئيسية المطلوبة
بطاقة Raspberry Pi Zero و SD
كاميرا Raspberry Pi
تناوب
مؤقت 555…. (أو اردوينو ومرحل آخر إذا لم يصل جهاز ضبط الوقت 555 الخاص بك)
الملف اللولبي
مرشة
نوع من المساكن للإلكترونيات
استعداد لضرب مسمار مجازي بمطرقة ثقيلة 6 أطنان
كاميرا ذات دقة قليلة جدًا بحيث بالكاد تستطيع رؤية الماء ، ولكن لا يزال بإمكانك رؤية القطط وهي تعمل بحثًا عن غطاء
الخطوة الثانية: النظام
1 ، تكتشف كاميرا Pi كائنًا بحجم قطة يتحرك لبضعة إطارات للكاميرا (تم توضيحها في الخطوة التالية)
2 ، بي ينطلق الرش
3 ، يعمل القط للغطاء
4 ، يتم تحميل الفيديو تلقائيًا على youtube لمشاهدة متعة
الخطوة 3: وقت الترميز
باستخدام openCV باستخدام طرح الإطار ، يمكنك العثور على مناطق من الإطار تتغير بمرور الوقت ، باستخدام بعض الوظائف الرائعة ، يمكنك معرفة حجم هذه التغييرات وما إذا كانت تستمر بمرور الوقت ، والأهم من ذلك معرفة ما إذا كانت بحجم قطة.
هناك عدد غير قليل من البرامج التعليمية حول طرح الإطارات التي تدخل في تفاصيل كبيرة إذا أجريت بحثًا سريعًا على google.
نظرة عامة على كيفية عمل الكود
1 ، تستمر الكاميرا في التقاط الإطارات ومقارنتها بالآخر
2 ، إذا تم الكشف عن شكل بحجم قطة يتم ملاحظته
3 ، إذا استمر التغيير في حجم القط على مدى 4 إطارات تقريبًا ، فإن pi يستخدم GPIO الخاص به لتشغيل مرحل الطاقة لبدء اردوينو
4 ، يرسل اردوينو إشارة لتشغيل التتابع الثاني لمدة 5 ثوانٍ والذي ينشط الملف اللولبي
5 ، الملف اللولبي عند تشغيله يسمح للماء بالرش
6 ، أثناء تشغيل الرش ، تتوقف الكاميرا عن الكشف عن الفيديو وتسجيله
7 ، يتم تحميل الفيديو على يوتيوب
8 ، اللقطات التي تم تحميلها إلى Dropbox لنظام الضبط الدقيق
ملاحظة - لماذا انتهى بي الأمر باستخدام مرحلات 2 واردوينو لتشغيل ملف لولبي لمدة 5 ثوانٍ …..
1 ، لا يمكن لـ pi بدء تشغيل الملف اللولبي وإيقافه أثناء تسجيل الفيديو حيث يتوقف قرص python مؤقتًا حتى ينتهي الفيديو ، ومن هنا تأتي الحاجة إلى اردوينو (أو مؤقت 555) للسماح للملف اللولبي بالفتح والإغلاق بشكل مستقل عن البرنامج النصي أثناء الفيديو لا يزال قيد التسجيل.
2 ، يمكن استبدال التتابع الأول واردوينو بمؤقت 555 ولكن هذا لم يتم نشره في الوقت المناسب لهذا المشروع ، سيوفر 555 الكثير من الوقت والمال والخطوات.
3 ، لا يمكن لـ pi تشغيل الملف اللولبي مباشرة حيث يعمل Pi GPIO على 3.3 فولت و 51 مللي أمبير كحد أقصى ، ويريد الملف اللولبي 5 فولت وأكثر من 51 مللي أمبير لتشغيله.
4 ، يمكن اقتصاص كل إطار لإزالة كشف الحركة في المناطق غير المرغوب فيها ، مثل حديقة الجيران. سيؤدي عدم القيام بذلك إلى قيام الجار المذكور بإلقاء نظرة مشوشة على حديقتك لأن المرشة تنطلق في كل مرة يريد فيها الذهاب إلى كوخه.
5 ، ربما فاتني شيء واضح وأهدرت وقتي في إعداده على هذا النحو.
الرمز أدناه
استيراد cv2import numpy كـ np import argparse #cat استيراد وقت استيراد RPi. GPIO مثل صندوق إسقاط استيراد نظام التشغيل GPIO من picamera.array استيراد PiRGBArray من picamera استيراد PiCamera # ------------------ ------------------------------ تحميل على youtube ----------------- ---------------------- def HDtoYoutube (): ctime = time.strftime ("_٪ H-٪ M-٪ S") cdate = time.strftime ("_٪ d-٪ m-٪ Y") vidname = ctime + cdate #Trigger relay GPIO.output (11، True) time.sleep (.5) GPIO.output (11، False) print ("أخذ الفيديو") حاول: #Take Video os.system ('raspivid -w 1640 -h 922 -o vid {0}.h264 -t 15000'.format (vidname)) #Upload to youtube print ("Uploading to YouTube") os. system ('sudo youtube-upload --title = "Cat Got Wet {0}" --client-secrets = client_secret.json vid {0}.h264'.format (vidname)) #Remove ملف الفيديو عند الانتهاء os.remove ('vid {0}.h264'.format (vidname)) print ("تم تحميل الفيديو وإزالته من Pi") باستثناء: pass # -------------------- ---------------------------- الصور الثابتة إلى صندوق الإسقاط ------------------- -------------------- def St illsToDropbox (): print ("Uploading Still To Dropbox Function") access_token = 'آه آه آه ، لم تقل الكلمة السحرية … آه آه ، لم تقل الكلمة السحرية' ctime = time.strftime (" ٪ H:٪ M:٪ S ") cdate = time.strftime ("٪ d-٪ m-٪ Y ") جرب: filename =" /Motion/{0}/DetectedAt_{1}.jpg".format(cdate ، ctime) print (filename) client = dropbox.client. DropboxClient (access_token) image = open ("ToDropbox.jpg"، 'rb') client.put_file (اسم الملف ، صورة) image.close () os.remove ("ToDropbox-j.webp
#HowToTriggerRealProgrammersWithBadCode
الخطوة 4: ضعها معًا
حشر الكهرباء في غلاف مقاوم للماء ، ثم قم بلف الأشياء في الجدران واستخدم الكثير من الشريط اللاصق والصمغ الساخن
الخطوة 5: النتائج
عندما تعمل تعمل
الخطوة السادسة: الإيجابيات الكاذبة
عندما لا يتم رش ظلال القطط وزوجتك وابنتك.
Pro-tip - ضع مفتاحًا بجوار الباب يوقف برنامج اكتشاف الحركة مؤقتًا….. ثم انسى استخدامه وانقعه عند إخراج الصناديق.
آمل أن أكون قد جعلت أي خبراء في البرمجة والإلكترونيات والأعمال اليدوية يتذمرون مع كل الأخطاء التي ربما أرتكبها ، وأتمنى بشكل خاص أن تكون قد استمتعت بكل أخطائي الإملائية.