فهرست مطالب:
- تدارکات
- مرحله 1: سیم کشی
- مرحله 2: سلول بار خود را قابل استفاده کنید
- مرحله 3: پایگاه داده عادی شده
- مرحله 4: کدگذاری سلول بار
- مرحله 5: کدگذاری سنسور آب
- مرحله 6: کدگذاری سنسور مجاورت
- مرحله 7: کدگذاری Stepper Motors
- مرحله 8: کدگذاری LCD
- مرحله 9: پایان
تصویری: توزیع کننده غذای خودکار حیوان خانگی: 9 مرحله
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:52
آیا تا به حال احساس کرده اید که برای تغذیه حیوان خانگی خود وقت زیادی را هدر می دهید؟ آیا تا به حال مجبور بوده اید که در تعطیلات با شخصی تماس بگیرید تا به حیوانات خانگی شما غذا بدهد؟ من سعی کردم هر دو این مسائل را با پروژه مدرسه فعلی خود برطرف کنم: Petfeed!
تدارکات
تمشک پای 3b
بار بار (10 کیلوگرم)
HX711 تقویت کننده سلول بار
سنسور سطح آب (https://www.dfrobot.com/product-1493.html)
سنسور مجاورت فراصوت
LCD 16 پین
استپر موتور 2 برابر 28byj-48
2X راننده موتور پله ULN2003
مرحله 1: سیم کشی
کابل کشی زیاد در اینجا کابل های بلوز خود را بیرون آورده و سنجاق را شروع کنید!
مرحله 2: سلول بار خود را قابل استفاده کنید
برای استفاده از لودسل ، ابتدا باید آن را به دو بشقاب وصل کنیم: یک صفحه پایینی و یک بشقاب که غذای خود را روی آن وزن می کنیم.
پیچ های مورد نیاز شما یک جفت پیچ M4 با پیچ های تطبیق دهنده و یک جفت پیچ M5 با پیچ و مهره های تطبیق دهنده است. من از یک مته کوچک برای ایجاد سوراخ ها استفاده کردم.
(عکس:
مرحله 3: پایگاه داده عادی شده
اطلاعات سنسورهای ما باید در پایگاه داده ذخیره شود. برای اتصال فایل های پایتون به پایگاه داده: به زیر مراجعه کنید.
سپس به یک فایل پیکربندی نیز نیاز دارید:
[connector_python] user = * yourusername * host = 127.0.0.1 #if port local = 3306 password = * yourpassword * database = * yourdb * [application_config] driver = 'SQL Server'
مرحله 4: کدگذاری سلول بار
وارد کردن RPi. GPIO به عنوان GPIOimport زمان وارد کردن موضوع از hx711 وارد کردن HX711 از یاران. stepperFood وارد کردن StepperFood از کمکها. LCD نوشتن LCD وارد کردن از مخازن.
پس از وارد کردن همه کتابخانه های خود (توجه داشته باشید ، ما از کتابخانه HX711 برای هدایت لودسل استفاده می کنیم) می توانیم نوشتن کد واقعی خود را شروع کنیم.
TARRA_CONSTANT = 80600
GRAM_CONSTANT = 101
برای یافتن ثابت های ما ، ابتدا TARRA_CONSTANT = 0 و GRAM_CONSTANT = 1 را تنظیم کنید.
در مرحله بعد ما باید مقداری را که لودسل ما می خواند هنگامی که هیچ چیزی وزن نمی شود ، پیدا کنیم. این مقدار TARRA_CONSTANT خواهد بود.
در مورد GRAM_CONSTANT ، به سادگی یک شیء را که وزن آن را می دانید بردارید (من از یک بسته اسپاگتی استفاده کردم) ، آن را وزن کنید و بازخوانی لودسل را با وزن واقعی شی تقسیم کنید. برای من این 101 بود.
کلاس LoadCell (threading. Thread):
def _init _ (self، socket، lcd): threading. Thread._ init _ (self) self.hx711 = HX711 (dout_pin = 5، pd_sck_pin = 6، channel = 'A'، gain = 64) self.socket = socket self.lcd = ال سی دی
در اینجا ما کلاس LoadCell را راه اندازی می کنیم و پین ها را نقشه می کنیم.
def run (خود):
try: while True: self.hx711.reset () # قبل از شروع ، HX711 (اجباری نیست) را بازنشانی کنید masë_avg = sum (self.hx711.get_raw_data ()) / 5 وزن = دور ((اندازه ها_اوگ - 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 ('weight_weight'، {"id": historyId، "Weight": db_weight، "Time": DataRepository.serializeDateTime (actionTime)}) print ("zou moeten emitten") writeWeight = "weight:" + str (db_weight) msg = "PETFEED" LCDWrite.message () if int (db_weight [:-2]) <= 100: StepperFood.run () time.sleep (20) به استثنای e: print ("خطا در توزین" + str (e))
مرحله 5: کدگذاری سنسور آب
وارد کردن زمان وارد کردن موضوع از مخازن. DataRepository وارد کردن DataRepository از RPi وارد کردن GPIOGPIO.setmode (GPIO. BCM) GPIO.setwarnings (False) GPIO_Water = 18 GPIO.setup (GPIO_Water، GPIO. IN) کلاس WaterSensor (thread_. Th) self، socket): threading. Thread._ init _ (self) 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) به جز استثنا به عنوان مثال: print (ex) print ('error bij watersensor') def is_water (self): status = GPIO. ورودی (GPIO_Wate r) if self.vorige_status == 0 و وضعیت == 1: print ('water gedetecteerd') sensorData = {"status": status، "action": "water gedetecteerd"} self.vorige_status = وضعیت وضعیت = GPIO.input (GPIO_Water) if self.vorige_status == 1 و وضعیت == 1: print ('water aanwezig') sensorData = {"status": status، "action": "water aanwezig"} status = GPIO.input (GPIO_Water) اگر self.vorige_status == 1 و وضعیت == 0: چاپ ('water weg') sensorData = {"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"} return sensorData
مرحله 6: کدگذاری سنسور مجاورت
وارد کردن زمان وارد کردن موضوع از مخازن. DataRepository وارد کردن DataRepository از RPi وارد کردن GPIO GPIO.setmode (GPIO. BCM) GPIO.setwarnings (False) GPIO_Trig = 4 GPIO_Echo = 17 GPIO.setup (GPIO_Trig، GPIO. OUEcho). IN) def current_milli_time (): return int (round (time.time () * 1000)) class UltrasonicSensor (threading. Thread): def _init _ (self، socket): threading. Thread._ init _ (self) self.socket = socket def run (self): try: last_reading = 0 interval = 5000 while True: if current_milli_time ()> last_reading + interval: 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": prox، "Time": DataRepository.serializeDateTime (actionTime)}) last_reading = current_milli_time () به جز استثنا به عنوان مثال: print (ex) de f distance (self): # set Trigger to HIGH GPIO.output (GPIO_Trig، True) # set Trigger after 0.01ms to LOW time.sleep (0.00001) GPIO.output (GPIO_Trig، False) StartTime = time.time () StopTime = time.time () # ذخیره StartTime در حالی که GPIO.input (GPIO_Echo) == 0: StartTime = time.time () # صرفه جویی در زمان رسیدن در حالی که GPIO.input (GPIO_Echo) == 1: StopTime = time.time () # تفاوت زمانی بین شروع و رسیدن TimeElapsed = StopTime - StartTime # با سرعت صوتی (34300 cm / s) # ضرب کرده و بر 2 تقسیم کنید ، زیرا فاصله و عقب = (TimeElapsed * 34300) / 2 فاصله بازگشت
مرحله 7: کدگذاری Stepper Motors
وارد کردن RPi. GPIO به عنوان GPIOimport زمان وارد کردن رشته GPIO.setmode (GPIO. BCM) GPIO.setwarnings (False) control_pins = [12، 16، 20، 21] برای پین در control_pins: GPIO.setup (pin، GPIO. OUT) GPIO.output (pin، 0) halfstep_seq =
این کد برای موتور پله ای دیگر قابل استفاده مجدد است ، فقط شماره پین های کنترل را روی پین های بعدی آنها تنظیم کرده و کلاس را به StepperWater تغییر نام دهید:
مرحله 8: کدگذاری LCD
تعداد زیادی کد ، اما ما تقریباً تمام شده ایم.
کلاس LCD به عنوان فایل LCD.py گنجانده شده است
از دستیارها. LCD وارد کردن LCD
E = 26 RS = 25 D0 = 19 D1 = 13 D2 = 24 D3 = 22 D4 = 23 D5 = 8 D6 = 7 D7 = 10 ال سی دی = LCD (E ، RS ، [D0 ، D1 ، D2 ، D3 ، D4 ، D5 ، D6 ، D7]) کلاس LCD نوشتن: پیام دف (msg): try: print ("try") lcd.init_LCD () lcd.send_instruction (12) lcd.clear_display () lcd.write_message (msg، '1') جز: print ("error LCDWrite")
مرحله 9: پایان
نتیجه نهایی: چگونه آن را ترسیم کردیم در مقابل چگونه به پایان رسید.
توصیه شده:
پخش کننده غذای حیوانات خانگی: 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 tu
تغذیه کننده خودکار حیوان خانگی با استفاده از AtTiny85: 6 مرحله
تغذیه کننده خانگی خودکار با استفاده از AtTiny85: O trabalho تغذیه کننده خودکار حیوانات خانگی با استفاده از AtTiny85 de PET Engenharia de Computação está licenciado com uma Licença Creative Commons - Atribuição 4.0 Internacional
DIY ساده ترین تغذیه کننده خودکار حیوان خانگی با آردوینو: 3 مرحله
DIY ساده ترین تغذیه کننده خودکار حیوانات خانگی با آردوینو: سلام به دوستداران حیوانات خانگی! در اعماق همه ما می خواهیم یک توله سگ کوچک ناز یا بچه گربه یا احتمالاً حتی یک خانواده ماهی در خانه داشته باشیم. اما به دلیل مشغله های زیاد ، ما اغلب به خود شک می کنیم که آیا می توانم از حیوان خانگی خود مراقبت کنم؟ مسئولیت اصلی
DIY: چراغ قوه LED لگو UV / آشکارساز ادرار خانگی حیوان خانگی: 3 مرحله
DIY: چراغ قوه LED لگو / آشکارساز ادرار خانگی حیوان خانگی: این یک روش آسان (بدون نیاز به لحیم کاری) ، سرگرم کننده و ارزان است که می توانید یک چراغ قوه UV فوق العاده از لگو تهیه کنید. این همچنین به عنوان یک آشکارساز ادرار خانگی خانگی عمل می کند (قیمتها را مقایسه کنید). اگر تا به حال رویای ساخت فلش لگو خانگی خود را در سر داشته اید
تغذیه کننده خودکار حیوان خانگی با استفاده از ساعت دیجیتالی قدیمی: 10 مرحله (همراه با تصاویر)
تغذیه کننده حیوان خانگی خودکار با استفاده از یک ساعت دیجیتالی قدیمی: سلام ، در این قسمت آموزشی به شما نشان خواهم داد که چگونه با استفاده از یک ساعت دیجیتالی قدیمی یک دستگاه تغذیه کننده خانگی خودکار را ساخته ام. من همچنین یک ویدیو در مورد نحوه ساخت این فیدر جاسازی کرده ام. این دستورالعمل در مسابقه PCB شرکت داده می شود و به عنوان یک لطف می خواهم