فهرست مطالب:

کنترل دسترسی به غذای گربه (ESP8266 + سرو موتور + چاپ سه بعدی): 5 مرحله (همراه با تصاویر)
کنترل دسترسی به غذای گربه (ESP8266 + سرو موتور + چاپ سه بعدی): 5 مرحله (همراه با تصاویر)

تصویری: کنترل دسترسی به غذای گربه (ESP8266 + سرو موتور + چاپ سه بعدی): 5 مرحله (همراه با تصاویر)

تصویری: کنترل دسترسی به غذای گربه (ESP8266 + سرو موتور + چاپ سه بعدی): 5 مرحله (همراه با تصاویر)
تصویری: بهترین غذای گربه چیه؟ چطوری بفهمیم کدوم غذا باکیفیت تره؟✅🐱 2024, ژوئن
Anonim
Image
Image
کنترل دسترسی به غذای گربه (ESP8266 + موتور سروو + چاپ سه بعدی)
کنترل دسترسی به غذای گربه (ESP8266 + موتور سروو + چاپ سه بعدی)

این پروژه فرایندی را که من برای ایجاد یک کاسه غذای گربه خودکار ، برای گربه دیابتی مسن من Chaz استفاده کردم ، طی می کند. ببینید ، قبل از اینکه بتواند انسولین خود را دریافت کند ، باید صبحانه بخورد ، اما من اغلب فراموش می کنم قبل از خواب ظرف غذای او را بردارم ، این امر اشتهای او را خراب می کند و برنامه انسولین او را کنار می گذارد. این ظرف از سرو موتور استفاده می کند تا درب غذا را بین ساعت های نیمه شب تا 7:30 صبح ببندد. طرح Arduino میکروکنترلر NodeMCU ESP8266 از پروتکل زمان شبکه (NTP) برای کنترل برنامه استفاده می کند.

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

اگر با Arduino یا ESP8266 تازه کار هستید ، ممکن است از راهنمای پیش نیاز زیر لذت ببرید:

  • دستورالعمل کلاس آردوینو
  • آموزش اینترنت اشیاء با قابلیت آموزش

تدارکات

  • چاپگر سه بعدی (من از Creality CR-10s Pro استفاده می کنم)
  • رشته چاپگر سه بعدی (من از PLA طلا استفاده می کنم)
  • میکروکنترلر وای فای NodeMCU ESP8266
  • کابل USB (A تا microB)
  • آداپتور برق USB
  • سروو موتور میکرو
  • پیچ گوشتی و پیچ کوچک
  • سیم اتصال
  • پین هدر
  • تخته Perma-proto

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

مرحله 1: قطعات چاپ سه بعدی

قطعات چاپ سه بعدی
قطعات چاپ سه بعدی
قطعات چاپ سه بعدی
قطعات چاپ سه بعدی

نگهدارنده کاسه غذای گربه بر اساس طراحی آردی لای در Thingiverse است. من آن را بزرگتر کردم تا کاسه گربه ام را در خود جای دهم ، و همچنین کوتاه تر کردم زیرا جرم گیری آن باعث شده بود که آن بسیار بلند شود. من یک نگهدارنده برای یک موتور سروو میکرو و چند سوراخ برای کابل ها به داخل آن اضافه کردم.

من یک درپوش ساده را با استفاده از Tinkercad مدل کردم که برای اتصال به شاخ میکرو سروو طراحی شده است. می توانید طرح من را مستقیماً از Tinkercad بگیرید و/یا STL های پیوست شده به این مرحله را بارگیری کنید.

من قطعات را بر روی چاپگر Creality CR-10s Pro خود با رشته طلا PLA چاپ کردم.

افشاگری: در زمان نگارش این مقاله ، من کارمند Autodesk هستم ، که Tinkercad را می سازد.

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

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

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

مرحله 3: ایجاد NodeMCU ESP8266 Circuit

مدار NodeMCU ESP8266 را بسازید
مدار NodeMCU ESP8266 را بسازید
مدار NodeMCU ESP8266 را بسازید
مدار NodeMCU ESP8266 را بسازید
مدار NodeMCU ESP8266 را بسازید
مدار NodeMCU ESP8266 را بسازید
مدار NodeMCU ESP8266 را بسازید
مدار NodeMCU ESP8266 را بسازید

مدار توسط یک میکروکنترلر وای فای NodeMCU ESP8266 کنترل می شود. من از پین های هدر روی یک برد پرما-پروتو استفاده کردم تا میکرو سروو موتور به راحتی قابل جدا شدن باشد. هدرهای سروو به شرح زیر به NodeMCU متصل می شوند:

سروو سیم زرد: NodeMCU D1

سیم سروو قرمز: قدرت NodeMCU (3V3 یا VIN)

سیم سروو سیاه: زمین NodeMCU (GND)

مرحله 4: کد و تست Arduino را بارگذاری کنید

کد و تست آردوینو را بارگذاری کنید
کد و تست آردوینو را بارگذاری کنید

مجموعه موتور/درپوش خود را در قسمت برش خورده به شکل موتور بر روی قسمت چاپ سه بعدی نگهدارنده کاسه نصب کنید. هدر موتور را به پین های هدر برد میکروکنترلر وصل کرده و مدار را با کابل USB به کامپیوتر وصل کنید.

طرح آردوینو از پروتکل زمان شبکه برای واکشی زمان فعلی استفاده می کند و سپس طبق یک برنامه سخت افزاری درپوش را باز یا بسته می کند. کد زیر را کپی کنید ، اعتبار وای فای خود و زمان UTC offset خود را به روز کنید و آن را با استفاده از Arduino IDE در برد NodeMCU خود بارگذاری کنید.

#عبارتند از

#شامل #شامل #شامل #شامل ESP8266WiFiMulti wifiMulti؛ // ایجاد یک نمونه از کلاس ESP8266WiFiMulti ، به نام 'wifiMulti' WiFiUDP UDP ؛ // نمونه ای از کلاس WiFiUDP برای ارسال و دریافت IPAddress timeServerIP ایجاد کنید. // time.nist.gov آدرس سرور NTP const char* NTPServerName = "time.nist.gov"؛ const int NTP_PACKET_SIZE = 48 ؛ // مهر زمان NTP در 48 بایت اول پیام بایت NTPBuffer [NTP_PACKET_SIZE] است. // بافر برای نگهداری بسته های ورودی و خروجی Servo myservo ؛ // ایجاد شیء سروو برای کنترل یک سروو // دوازده شیء سروو را می توان در بیشتر تخته ها ایجاد کرد int pos = 0؛ // متغیر برای ذخیره موقعیت سروو void setup () {myservo.attach (5)؛ // سروو را روی پین 5 با نام D1 به سروو متصل می کند // درب را به طور پیش فرض Serial.println ("باز کردن درب") باز کنید. برای (pos = 95؛ pos> = 0؛ pos -= 1) {// از 95 درجه تا 0 درجه myservo.write (pos)؛ // به سروو بگویید تا در تأخیر متغیر 'pos' به موقعیت (15) بروید. // 15 ثانیه منتظر می ماند تا سروو به موقعیت برسد} Serial.begin (115200)؛ // برقراری ارتباط سریال برای ارسال پیام به تأخیر کامپیوتر (10) ؛ Serial.println ("\ r / n")؛ startWiFi () ؛ // سعی کنید به برخی از نقاط دسترسی داده شده متصل شوید. سپس منتظر اتصال startUDP () باشید؛ if (! WiFi.hostByName (NTPServerName، timeServerIP)) {// دریافت آدرس IP سرور NTP Serial.println ("جستجوی DNS ناموفق بود. راه اندازی مجدد.") ؛ Serial.flush ()؛ ESP.reset ()؛ } Serial.print ("IP سرور زمان: / t")؛ Serial.println (timeServerIP) ؛ Serial.println ("\ r / n ارسال درخواست NTP …")؛ sendNTPpacket (timeServerIP) ؛ } فاصله طولانی بدون علامت NTP = 60000؛ // درخواست زمان NTP در هر دقیقه بدون امضا prevNTP = 0؛ unsigned long lastNTPResponse = millis ()؛ uint32_t زمان UNIX = 0؛ prevActualTime طولانی بدون امضا = 0؛ void loop () {unsigned long currentMillis = millis ()؛ if (currentMillis - prevNTP> intervalNTP) {// اگر یک دقیقه از آخرین درخواست NTP گذشته است prevNTP = currentMillis ؛ Serial.println ("\ r / n ارسال درخواست NTP …")؛ sendNTPpacket (timeServerIP) ؛ // ارسال درخواست NTP} uint32_t time = getTime ()؛ // بررسی کنید که آیا پاسخ NTP رسیده است و زمان (UNIX) if (زمان) را دریافت کنید {// اگر زمان دریافت زمان جدید زمان دریافت شده است UNIX = time؛ Serial.print ("پاسخ NTP: / t")؛ Serial.println (timeUNIX) ؛ lastNTPResponse = currentMillis؛ } else if ((currentMillis - lastNTPResponse)> 3600000) {Serial.println ("بیش از 1 ساعت از آخرین پاسخ NTP. راه اندازی مجدد.") ؛ Serial.flush ()؛ ESP.reset ()؛ } uint32_t actualTime = timeUNIX + (currentMillis - lastNTPResponse)/1000 ؛ uint32_t eastTime = timeUNIX - 18000 + (currentMillis - lastNTPResponse)/1000 ؛ if (actualTime! = prevActualTime && timeUNIX! = 0) {// اگر یک ثانیه از آخرین چاپ گذشته است prevActualTime = actualTime؛ Serial.printf ("\ rUTC time: / t٪ d:٪ d:٪ d"، getHours (actualTime)، getMinutes (actualTime)، getSeconds (actualTime))؛ Serial.printf ("\ rEST (-5): / t٪ d:٪ d:٪ d"، getHours (eastTime)، getMinutes (eastTime)، getSeconds (EasternTime))؛ Serial.println ()؛ } // ساعت 7:30 صبح اگر (getHours (eastTime) == 7 && getMinutes (eastTime) == 30 && getSeconds (eastTime) == 0) {// درب را باز کنید Serial.println ("بازکردن درب") ؛ برای (pos = 95؛ pos> = 0؛ pos -= 1) {// از 95 درجه تا 0 درجه myservo.write (pos)؛ // به سروو بگویید تا در تأخیر متغیر 'pos' به موقعیت (15) بروید. // 15 ثانیه منتظر می ماند تا سروو به موقعیت برسد}} // نیمه شب اگر (getHours (eastTime) == 0 && getMinutes (eastTime) == 0 && getSeconds (eastTime) == 0) {// درب سریال را ببندید. println ("بستن درب") ؛ for (pos = 0؛ pos <= 95؛ pos += 1) {// از 0 درجه تا 95 درجه // در مراحل 1 درجه myservo.write (pos) ؛ // به سروو بگویید تا در تأخیر متغیر 'pos' به موقعیت (15) بروید. // 15 ثانیه منتظر می ماند تا سروو به موقعیت برسد}} /* // آزمایش اگر (getHours (eastTime) == 12 && getMinutes (eastTime) == 45 && getSeconds (eastTime) == 0) {// درب را ببندید Serial.println ("بستن درب") ؛ برای (pos = 0؛ pos = 0؛ pos -= 1) {// از 95 درجه تا 0 درجه myservo.write (pos) ؛ // به سروو بگویید تا در تأخیر متغیر 'pos' به موقعیت (15) بروید. // 15 ثانیه منتظر می ماند تا سروو به موقعیت برسد}} */} void startWiFi () {// سعی کنید به برخی از نقاط دسترسی داده شده متصل شوید. سپس منتظر اتصال wifiMulti.addAP ("ssid_from_AP_1" ، "your_password_for_AP_1") باشید ؛ // اضافه کردن شبکه های Wi-Fi که می خواهید به //wifiMulti.addAP("ssid_from_AP_2 "،" your_password_for_AP_2 ") متصل شوید ؛ //wifiMulti.addAP("ssid_from_AP_3 "،" your_password_for_AP_3 ") ؛ Serial.println ("اتصال") ؛ while (wifiMulti.run ()! = WL_CONNECTED) {// منتظر بمانید تا اتصال Wi-Fi متوقف شود (250)؛ Serial.print ('.')؛ } Serial.println ("\ r / n")؛ Serial.print ("متصل به") ؛ Serial.println (WiFi. SSID ()) ؛ // به ما بگویید که به چه شبکه ای به Serial.print وصل شده ایم ("آدرس IP: / t") ؛ Serial.print (WiFi.localIP ()) ؛ // آدرس IP ESP8266 را به کامپیوتر Serial.println ("\ r / n") ارسال کنید ؛ } void startUDP () {Serial.println ("شروع UDP")؛ UDP.begin (123) ؛ // شروع به گوش دادن به پیام های UDP در پورت 123 Serial.print ("پورت محلی: / t")؛ Serial.println (UDP.localPort ()) ؛ Serial.println ()؛ } uint32_t getTime () {if (UDP.parsePacket () == 0) {// در صورت عدم پاسخگویی (هنوز) 0 را بازگردانید ؛ } UDP.read (NTPBuffer ، NTP_PACKET_SIZE) ؛ // بسته را در بافر بخوانید (NTPBuffer [41] << 16) | (NTPBuffer [42] << 8) | NTPBuffer [43] ؛ // زمان NTP را به زمان زمانی UNIX تبدیل کنید: // زمان Unix از 1 ژانویه 1970 شروع می شود. این زمان 2208988800 ثانیه در زمان NTP است: const uint32_t هفتاد سال = 2208988800UL ؛ // تفریق هفتاد سال: uint32_t UNIXTime = NTPTime - هفتاد سال بازگشت UNIXTime ؛ } void sendNTPpacket (IPAddress & address) {memset (NTPBuffer، 0، NTP_PACKET_SIZE)؛ // همه بایت های بافر را روی 0 تنظیم کنید // مقداردهی اولیه مورد نیاز برای تشکیل درخواست NTP NTPBuffer [0] = 0b11100011؛ // LI ، نسخه ، حالت // ارسال یک بسته با درخواست زمان: UDP.beginPacket (آدرس ، 123) ؛ // درخواست های NTP به پورت 123 UDP.write (NTPBuffer ، NTP_PACKET_SIZE) است ؛ UDP.endPacket ()؛ } inline int getSeconds (uint32_t UNIXTime) {return UNIXTime٪ 60؛ } inline int getMinutes (uint32_t UNIXTime) {return UNIXTime / 60٪ 60؛ } inline int getHours (uint32_t UNIXTime) {return UNIXTime / 3600٪ 24 ؛ }

مرحله 5: از آن استفاده کنید

استفاده از آن!
استفاده از آن!
استفاده از آن!
استفاده از آن!

سیمهای خود را به داخل نگهدارنده کاسه هدایت کنید و تغذیه گربه خود را با استفاده از آداپتور USB AC به پریز متصل کنید. نحوه نوشتن کد ساده ، منظور این است که در حالت "باز" بوت شود و فقط موقعیت درب آن را در آستانه های زمانی مشخص شده در طرح آردوینو تغییر می دهد.

با تشکر از همراهی شما! اگر نسخه خودتان را تهیه می کنید ، خوشحال می شوم آن را در بخش I made it below (زیر ساختم) ببینم!

اگر این پروژه را دوست دارید ، ممکن است به برخی از پروژه های دیگر من علاقه مند باشید:

  • دارنده Prism برای پرتره های رنگین کمان
  • دیوار ذخیره سازی تخته سه لا با برج گربه
  • فانوس های شیشه ای میسون (درب چاپ سه بعدی)
  • جعبه خشک فیلامنت پرینتر سه بعدی
  • منبع تغذیه اضطراری USB (چاپ سه بعدی)
  • آب نبات چسبناک LED
  • کاشت هندسی چاپ سه بعدی با زهکشی
  • گلهای درخشان چاپ سه بعدی
  • نحوه نصب LED زیر اسکوتر (با بلوتوث)

برای ادامه کار با من ، من را در YouTube ، Instagram ، Twitter و Pinterest دنبال کنید.

توصیه شده: