جدول المحتويات:
- اللوازم
- الخطوة 1: الأسلاك
- الخطوة 2: اجعل خلية الحمل قابلة للاستخدام
- الخطوة 3: قاعدة البيانات المقيسة
- الخطوة 4: ترميز خلية التحميل
- الخطوة الخامسة: ترميز مستشعر المياه
- الخطوة 6: تشفير مستشعر القرب
- الخطوة 7: ترميز Stepper Motors
- الخطوة 8: تشفير شاشة LCD
- الخطوة 9: النهاية
فيديو: موزع طعام الحيوانات الأليفة الأوتوماتيكي: 9 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:36
هل شعرت يومًا بإضاعة الكثير من الوقت في إطعام حيوانك الأليف؟ هل اضطررت يومًا إلى الاتصال بشخص ما لإطعام حيواناتك الأليفة أثناء إجازتك؟ لقد حاولت إصلاح هاتين المشكلتين مع مشروع مدرستي الحالي: Petfeed!
اللوازم
Raspberry Pi 3b
خلية تحميل شريط (10 كجم)
HX711 تحميل خلية مكبر للصوت
مستشعر مستوى الماء (https://www.dfrobot.com/product-1493.html)
مستشعر القرب بالموجات فوق الصوتية
ال سي دي 16 سنون
2x محرك متدرج 28byj-48
2x محرك متدرج سائق ULN2003
الخطوة 1: الأسلاك
الكثير من الكابلات هنا. أخرج كبلات التوصيل الخاصة بك وابدأ في التثبيت!
الخطوة 2: اجعل خلية الحمل قابلة للاستخدام
لاستخدام خلية الحمل ، نحتاج أولاً إلى إرفاقها بصفيحتين: صفيحة سفلية ولوحة نزن طعامنا عليها.
البراغي التي تحتاجها هي زوج من البراغي M4 مع مسامير متطابقة وزوج من البراغي M5 مع براغي مطابقة. لقد استخدمت مثقابًا صغيرًا لعمل الثقوب.
(الموافقة المسبقة عن علم:
الخطوة 3: قاعدة البيانات المقيسة
يجب حفظ البيانات من أجهزة الاستشعار لدينا في قاعدة بيانات. لملفات python للاتصال بقاعدة البيانات: انظر أدناه.
فأنت بحاجة أيضًا إلى ملف تهيئة:
[connector_python] user = * yourusername * host = 127.0.0.1 #if port المحلي = 3306 password = * yourpassword * database = * yourdb * [application_config] driver = 'SQL Server'
الخطوة 4: ترميز خلية التحميل
استيراد RPi. GPIO كـ GPIOimport استيراد خيوط وقت الاستيراد من hx711 استيراد HX711 من مساعدين.stepper
بعد استيراد جميع مكتباتنا (لاحظ أننا نستخدم مكتبة HX711 لتشغيل خلية التحميل) يمكننا البدء في كتابة الكود الفعلي الخاص بنا
TARRA_CONSTANT = 80600
GRAM_CONSTANT = 101
لمعرفة الثوابت ، اضبط أولاً TARRA_CONSTANT = 0 و GRAM_CONSTANT = 1.
بعد ذلك ، نحتاج إلى معرفة القيمة التي تقرأها خلية الحمل عندما لا يكون هناك أي وزن يتم وزنه. ستكون هذه القيمة TARRA_CONSTANT.
بالنسبة إلى GRAM_CONSTANT ، ما عليك سوى أن تأخذ شيئًا تعرف وزنه (لقد استخدمت عبوة من السباغيتي) ، ووزنها وقسم قراءات خلية التحميل بالوزن الفعلي للكائن. بالنسبة لي كان هذا 101.
فئة LoadCell (مؤشر ترابط الترابط):
def _init _ (self، socket، lcd): threading. Thread._ init _ (self) self.hx711 = HX711 (dout_pin = 5، pd_sck_pin = 6، channel = 'A'، كسب = 64) self.socket = socket self.lcd = شاشات الكريستال السائل
هنا نقوم بتهيئة فئة LoadCell وتعيين المسامير.
المدى def (النفس):
جرب: while True: self.hx711.reset () # قبل أن نبدأ ، أعد ضبط HX711 (غير ملزم) Meas_avg = sum (self.hx711.get_raw_data ()) / 5 weight = round ((sources_avg - TARRA_CONSTANT) / GRAM_CONSTANT ، 0) print ("weight: {0}". format (weight)) DataRepository.insert_weight (weight) data_weight = DataRepository.get_data_sensor (3) historyId = data_weight ["SensorsHistory"] db_weight = data_weight ["value"] actionTime = data_weight ["actionTime"] self.socket.emit ('data_weight'، {"id": historyId، "Weight": db_weight، "Time": DataRepository.serializeDateTime (actionTime)}) print ("zou moeten emitten") writeWeight = "weight:" + str (db_weight) msg = "PETFEED" LCDWrite.message () إذا كان int (db_weight [: - 2]) <= 100: StepperFood.run () time.sleep (20) باستثناء استثناء كـ e: print ("خطأ في الوزن" + str (e))
الخطوة الخامسة: ترميز مستشعر المياه
استيراد خيوط استيراد الوقت من المستودعات. self ، socket): threading. Thread._ init _ self.socket = socket self.vorige_status = 0 def run (self): try: while True: water = self.is_water () print (water) status = water [" status "] action = water [" action "] DataRepository.insert_water (str (status)، action) data_water = DataRepository.get_data_sensor (2) historyId = data_water [" SensorsHistory "] value = data_water [" value "] if value == "0": value = "te weinig water" else: value = "genoeg water" actionTime = data_water ["actionTime"] self.socket.emit ('data_water'، {"id": historyId، "value": value، "الوقت": DataRepository.serializeDateTime (actionTime)، "action": action}) time.sleep (5) باستثناء Exception as ex: print (ex) print ('error bij waterensor') def is_water (self): status = GPIO.input (GPIO_Wate r) if self.vorige_status == 0 والحالة == 1: print ('water gedetecteerd') sensorData = {"status": status، "action": "water gedetecteerd"} self.vorige_status = status status = GPIO.input (GPIO_Water) إذا self.vorige_status == 1 والحالة == 1: مستشعر طباعة ('water aanwezig') sensorData = {"status": status، "action": "water aanwezig"} status = GPIO.input (GPIO_Water) إذا self.vorige_status == 1 والحالة == 0: مستشعر طباعة ('weg') data = {"status": status، "action": "water weg"} self.vorige_status = status status = GPIO.input (GPIO_Water) if self.vorige_status == 0 والحالة == 0: print ('startpositie') status = GPIO.input (GPIO_Water) sensorData = {"status": status، "action": "startpositie"} إرجاع مستشعر البيانات
الخطوة 6: تشفير مستشعر القرب
استيراد خيوط استيراد الوقت من المستودعات.. IN) def current_milli_time (): return int (round (time.time () * 1000)) class UltrasonicSensor (threading. Thread): def _init _ (self ، socket): threading. Thread._ init _ self.socket = تشغيل socket def (ذاتي): جرب: last_reading = 0 فاصل زمني = 5000 بينما صحيح: if current_milli_time ()> last_reading + الفاصل الزمني: dist = self.distance () print ("Measured Distance =٪.1f cm"٪ dist) DataRepository. insert_proximity (dist) data_prox = DataRepository.get_data_sensor (1) historyId = data_prox ["SensorsHistory"] prox = data_prox ["value"] actionTime = data_prox ["actionTime"] self.socket.emit ('data_proximity'، {"id": historyId، "Proximity": بروكسي، "Time": DataRepository.serializeDateTime (actionTime)}) last_reading = current_milli_time () باستثناء الاستثناء مثل: print (ex) de f مسافة (ذاتية): # اضبط المشغل على HIGH GPIO.output (GPIO_Trig، True) # اضبط المشغل بعد 0.01ms إلى LOW time.sleep (0.00001) GPIO.output (GPIO_Trig، False) StartTime = time.time () StopTime = time.time () # save StartTime while GPIO.input (GPIO_Echo) == 0: StartTime = time.time () # حفظ وقت الوصول بينما GPIO.input (GPIO_Echo) == 1: StopTime = time.time () # فرق التوقيت بين وقت البدء والوصول. TimeElapsed = StopTime - StartTime # اضرب بالسرعة الصوتية (34300 سم / ثانية) # وقسمه على 2 ، لأن هناك والمسافة الخلفية = (TimeElapsed * 34300) / 2 مسافة العودة
الخطوة 7: ترميز Stepper Motors
استيراد RPi. GPIO كـ GPIO استيراد وقت استيراد مؤشر الترابط GPIO.setmode (GPIO. BCM) GPIO.setwarnings (False) control_pins = [12 ، 16 ، 20 ، 21] لـ pin in control_pins: GPIO.setup (pin، GPIO. OUT) GPIO.output (pin، 0) halfstep_seq =
هذا الرمز قابل لإعادة الاستخدام للمحرك السائر الآخر ، ما عليك سوى تعيين أرقام دبوس التحكم على دبابيس repective وإعادة تسمية الفئة إلى StepperWater:
الخطوة 8: تشفير شاشة LCD
الكثير من التعليمات البرمجية ، لكننا على وشك الانتهاء.
يتم تضمين فئة LCD كملف LCD.py
من helpers. LCD استيراد شاشات الكريستال السائل
E = 26 RS = 25 D0 = 19 D1 = 13 D2 = 24 D3 = 22 D4 = 23 D5 = 8 D6 = 7 D7 = 10 LCD = LCD (E ، RS ، [D0 ، D1 ، D2 ، D3 ، D4 ، D5 ، D6، D7]) class LCDWrite: def message (msg): حاول: print ("try") lcd.init_LCD () lcd.send_instruction (12) lcd.clear_display () lcd.write_message (msg، '1') باستثناء: print ("error LCDWrite")
الخطوة 9: النهاية
النتيجة النهائية: كيف رسمناها مقابل كيف انتهى الأمر.
موصى به:
مشروع وعاء طعام الحيوانات الأليفة الآلي: 13 خطوة
مشروع وعاء طعام الحيوانات الأليفة الآلي: سوف يصور هذا الدليل ويشرح كيفية بناء مغذي حيوانات أليفة آلي وقابل للبرمجة مع أوعية طعام مرفقة. لقد أرفقت مقطع فيديو هنا يصور كيفية عمل المنتجات وكيف تبدو
موزع أغذية الحيوانات الأليفة: 3 خطوات
موزع أغذية الحيوانات الأليفة: Para los amantes de mascotas ، este es un proyecto que les puede ser muy útil! Un alimentador automático que te permite Observar cual es el pesaje de la comida، y solo es necesario que oprimas un botón.Un mecanismo sencillo que podrás armar desde to
مشروع اردوينو: موزع طعام للقطط: 6 خطوات
مشروع اردوينو: موزع طعام القطط: تم إنشاء هذا الدليل لتلبية متطلبات مشروع Makecourse في جامعة جنوب فلوريدا (www.makecourse.com)
المنجنيق الأوتوماتيكي لرمي طعام الحيوانات الأليفة (كلب ، قطة ، دجاج ، إلخ) ، رمي الكرات والمزيد!: 4 خطوات (بالصور)
المنجنيق الأوتوماتيكي لرمي طعام الحيوانات الأليفة (كلب ، قطة ، دجاج ، إلخ) ، رمي الكرات والمزيد!: مرحبًا ومرحبًا بكم في أول Instructable! كلبنا يحب طعامها ، وسوف تأكله حرفيًا في غضون ثوان. لقد ابتكرت طرقًا لإبطاء هذا ، من الكرات التي تحتوي على الطعام بداخلها إلى رميها في جميع أنحاء الفناء الخلفي. بشكل مثير للدهشة ، هي
موزع طعام للكلاب يعمل بالطاقة من اردوينو: 10 خطوات (مع صور)
موزع طعام الكلاب المدعوم من Arduino: إذا كان منزلك يشبه منزلي ، فقد يتم نسيان بعض المهام عندما تكون في عجلة من أمرك. لا تدع حيوانك الأليف هو الذي يُنسى! يستخدم موزع طعام الكلاب الآلي هذا Arduino لتقديم الكمية المناسبة من kibble في الوقت المناسب. الكل pa