সুচিপত্র:

ক্যাট ফুড অ্যাক্সেস কন্ট্রোল (ESP8266 + Servo Motor + 3D Printing): 5 টি ধাপ (ছবি সহ)
ক্যাট ফুড অ্যাক্সেস কন্ট্রোল (ESP8266 + Servo Motor + 3D Printing): 5 টি ধাপ (ছবি সহ)

ভিডিও: ক্যাট ফুড অ্যাক্সেস কন্ট্রোল (ESP8266 + Servo Motor + 3D Printing): 5 টি ধাপ (ছবি সহ)

ভিডিও: ক্যাট ফুড অ্যাক্সেস কন্ট্রোল (ESP8266 + Servo Motor + 3D Printing): 5 টি ধাপ (ছবি সহ)
ভিডিও: আপনার বিড়ালের বয়স অনুযায়ী ক্যাট ফুড দিন | Cat Food According to the age of your Cat | PiuFamily 2024, নভেম্বর
Anonim
Image
Image
ক্যাট ফুড অ্যাক্সেস কন্ট্রোল (ESP8266 + Servo Motor + 3D Printing)
ক্যাট ফুড অ্যাক্সেস কন্ট্রোল (ESP8266 + Servo Motor + 3D Printing)

এই প্রজেক্টটি আমার বয়স্ক ডায়াবেটিক বিড়াল চাজের জন্য একটি স্বয়ংক্রিয় বিড়াল খাবারের বাটি তৈরি করতে ব্যবহৃত প্রক্রিয়াটির উপর দিয়ে যায়। দেখুন, তার ইনসুলিন পাওয়ার আগে তাকে প্রাত breakfastরাশ খাওয়া দরকার, কিন্তু আমি ঘুমাতে যাওয়ার আগে প্রায়ই তার খাবারের থালা তুলতে ভুলে যাই, যা তার ক্ষুধা নষ্ট করে এবং তার ইনসুলিনের সময়সূচী ফেলে দেয়। এই থালাটি মধ্যরাত থেকে সকাল সাড়ে টার মধ্যে খাবারের উপর একটি idাকনা বন্ধ করার জন্য একটি সার্ভো মোটর ব্যবহার করে। NodeMCU ESP8266 মাইক্রোকন্ট্রোলারের Arduino স্কেচ সময়সূচী নিয়ন্ত্রণ করতে নেটওয়ার্ক টাইম প্রোটোকল (NTP) ব্যবহার করে।

এই প্রকল্পটি ছোট, বেশি সক্রিয় বিড়ালের জন্য উপযুক্ত নাও হতে পারে। চাজ এত পুরানো এবং দুর্বল, তিনি বাটিটি খোলার চেষ্টা করতে আগ্রহী নন, তবে এটি সম্ভব।

আপনি যদি Arduino বা ESP8266 এ নতুন হন, তাহলে আপনি নিম্নলিখিত পূর্বশর্ত গাইডগুলি উপভোগ করতে পারেন:

  • নির্দেশিকা Arduino ক্লাস
  • ইন্সট্রাকটেবল ইন্টারনেট অফ থিংস ক্লাস

সরবরাহ

  • 3D প্রিন্টার (আমি একটি ক্রিয়েলিটি CR-10s প্রো ব্যবহার করি)
  • 3D প্রিন্টার ফিলামেন্ট (আমি গোল্ড PLA ব্যবহার করছি)
  • NodeMCU ESP8266 ওয়াইফাই মাইক্রোকন্ট্রোলার
  • ইউএসবি কেবল (এ থেকে মাইক্রোবি)
  • ইউএসবি পাওয়ার অ্যাডাপ্টার
  • মাইক্রো সার্ভো মোটর
  • ছোট স্ক্রু ড্রাইভার এবং স্ক্রু
  • হুকআপ তার
  • হেডার পিন
  • পারমা-প্রোটো বোর্ড

আমি যা নিয়ে কাজ করছি তার সাথে তাল মিলিয়ে চলতে, আমাকে ইউটিউব, ইনস্টাগ্রাম, টুইটার, পিন্টারেস্টে অনুসরণ করুন এবং আমার নিউজলেটার সাবস্ক্রাইব করুন। একজন অ্যামাজন অ্যাসোসিয়েট হিসাবে আমি আমার অনুমোদিত লিঙ্কগুলি ব্যবহার করে আপনি যে যোগ্যতা অর্জন করেন তা থেকে উপার্জন করি।

ধাপ 1: 3D মুদ্রিত অংশ

3D মুদ্রিত যন্ত্রাংশ
3D মুদ্রিত যন্ত্রাংশ
3D মুদ্রিত যন্ত্রাংশ
3D মুদ্রিত যন্ত্রাংশ

ক্যাট ফুড বাটি হোল্ডার থিংভার্সের উপর আরডি লাই এর নকশা ভিত্তিক। আমি এটা আমার বিড়ালের বাটি মিটমাট করার জন্য বড় করেছিলাম, এবং এটিকে ছোট করেছিলাম যেহেতু এটি স্কেল করা খুব লম্বা করে তুলেছিল। আমি একটি মাইক্রো সার্ভো মোটরের জন্য একটি ধারক যোগ করেছি, এবং ভিতরে যাওয়ার জন্য তারের জন্য কয়েকটি গর্ত।

আমি টিঙ্কারক্যাড ব্যবহার করে একটি সাধারণ idাকনা তৈরি করেছি, যা মাইক্রো সার্ভোর শিং সংযুক্ত করার জন্য ডিজাইন করা হয়েছে। আপনি টিঙ্কারক্যাড থেকে সরাসরি আমার নকশাটি ধরতে পারেন এবং/অথবা এই ধাপে সংযুক্ত এসটিএলগুলি ডাউনলোড করতে পারেন।

আমি আমার ক্রিয়েলিটি CR-10s প্রো প্রিন্টারে সোনার পিএলএ ফিলামেন্ট দিয়ে পার্টস প্রিন্ট করেছি।

প্রকাশ: এই লেখার সময়, আমি অটোডেস্কের একজন কর্মচারী, যা টিঙ্কারক্যাড তৈরি করে।

ধাপ 2: Servo মোটর Lাকনা সংযুক্ত করুন

Servo মোটর Lাকনা সংযুক্ত করুন
Servo মোটর Lাকনা সংযুক্ত করুন
Servo মোটর Lাকনা সংযুক্ত করুন
Servo মোটর Lাকনা সংযুক্ত করুন

আমি সার্ভো হর্নের গর্তের আকার বাড়ানোর জন্য একটি ছোট ড্রিল বিট ব্যবহার করেছি, তারপর 3D মুদ্রিত idাকনার সাথে সার্ভো সংযুক্ত করতে স্ক্রু ব্যবহার করেছি।

ধাপ 3: NodeMCU ESP8266 সার্কিট তৈরি করুন

NodeMCU ESP8266 সার্কিট তৈরি করুন
NodeMCU ESP8266 সার্কিট তৈরি করুন
NodeMCU ESP8266 সার্কিট তৈরি করুন
NodeMCU ESP8266 সার্কিট তৈরি করুন
NodeMCU ESP8266 সার্কিট তৈরি করুন
NodeMCU ESP8266 সার্কিট তৈরি করুন
NodeMCU ESP8266 সার্কিট তৈরি করুন
NodeMCU ESP8266 সার্কিট তৈরি করুন

সার্কিটটি একটি NodeMCU ESP8266 wifi মাইক্রোকন্ট্রোলার দ্বারা নিয়ন্ত্রিত হয়। আমি একটি পারমা-প্রোটো বোর্ডে হেডার পিন ব্যবহার করেছি যাতে মাইক্রো সার্ভো মোটরকে সহজেই বিচ্ছিন্ন করা যায়।

হলুদ servo তারের: NodeMCU D1

লাল servo তারের: NodeMCU শক্তি (3V3 বা VIN)

কালো servo তারের: NodeMCU স্থল (GND)

ধাপ 4: Arduino কোড এবং পরীক্ষা আপলোড করুন

Arduino কোড এবং পরীক্ষা আপলোড করুন
Arduino কোড এবং পরীক্ষা আপলোড করুন

বাটি হোল্ডার 3D মুদ্রিত অংশে মোটর-আকৃতির কাটআউটে আপনার মোটর/idাকনা সমাবেশটি ইনস্টল করুন। মাইক্রোকন্ট্রোলার বোর্ডের হেডার পিনগুলিতে মোটর হেডারটি প্লাগ করুন এবং একটি ইউএসবি কেবল দিয়ে আপনার কম্পিউটারে সার্কিটটি প্লাগ করুন।

Arduino স্কেচ বর্তমান সময় আনতে নেটওয়ার্ক টাইম প্রোটোকল ব্যবহার করে এবং তারপর হার্ড কোডেড সময়সূচী অনুযায়ী opensাকনা খুলে বা বন্ধ করে। নিম্নলিখিত কোডটি অনুলিপি করুন, আপনার ওয়াইফাই শংসাপত্র এবং UTC টাইম অফসেট আপডেট করুন এবং Arduino IDE ব্যবহার করে আপনার NodeMCU বোর্ডে আপলোড করুন।

#অন্তর্ভুক্ত

#অন্তর্ভুক্ত #অন্তর্ভুক্ত #অন্তর্ভুক্ত #ESP8266WiFiMulti wifiMulti; // ESP8266WiFiMulti ক্লাসের একটি উদাহরণ তৈরি করুন, যাকে বলা হয় 'wifiMulti' WiFiUDP UDP; // IPAddress timeServerIP প্রেরণ ও গ্রহণের জন্য WiFiUDP শ্রেণীর একটি উদাহরণ তৈরি করুন; // time.nist.gov NTP সার্ভারের ঠিকানা const char* NTPServerName = "time.nist.gov"; const int NTP_PACKET_SIZE = 48; // এনটিপি টাইম স্ট্যাম্পটি মেসেজের প্রথম 48 বাইটে আছে NTPBuffer [NTP_PACKET_SIZE]; // বাফার আগত এবং বহির্গামী প্যাকেট Servo myservo রাখা; // একটি servo নিয়ন্ত্রণ করার জন্য servo অবজেক্ট তৈরি করুন // বারো servo অবজেক্ট অধিকাংশ বোর্ডে তৈরি করা যেতে পারে int pos = 0; // সার্ভো পজিশন ভয়েড সেটআপ () {myservo.attach (5); // সার্ভো অবজেক্টে পিন 5 ওরফে D1 এ সার্ভো সংযুক্ত করে // ডিফল্টভাবে Serial.println ("lাকনা খোলা") theাকনা খুলুন; জন্য (pos = 95; pos> = 0; pos -= 1) {// 95 ডিগ্রী থেকে 0 ডিগ্রীতে যায় // ভেরিয়েবল 'পজ' বিলম্বের অবস্থানে যেতে সার্ভোকে বলুন (15); // সার্ভো অবস্থানে পৌঁছানোর জন্য 15ms অপেক্ষা করে} Serial.begin (115200); // কম্পিউটার দেরিতে বার্তা পাঠাতে সিরিয়াল যোগাযোগ শুরু করুন (10); Serial.println ("\ r / n"); startWiFi (); // কিছু প্রদত্ত অ্যাক্সেস পয়েন্টের সাথে সংযোগ করার চেষ্টা করুন। তারপর একটি সংযোগ startUDP () জন্য অপেক্ষা করুন; যদি (! Serial.flush (); ESP.reset (); } সিরিয়াল.প্রিন্ট ("টাইম সার্ভার আইপি: / টি"); Serial.println (timeServerIP); Serial.println ("\ r / n NTP অনুরোধ পাঠানো হচ্ছে …"); sendNTPpacket (timeServerIP); } স্বাক্ষরবিহীন দীর্ঘ ব্যবধান NTP = 60000; // অনুরোধ করুন প্রতি মিনিটে এনটিপি সময় স্বাক্ষরবিহীন দীর্ঘ prevNTP = 0; স্বাক্ষরবিহীন দীর্ঘ lastNTPResponse = মিলিস (); uint32_t সময় UNIX = 0; স্বাক্ষরবিহীন দীর্ঘ prevActualTime = 0; অকার্যকর লুপ () {স্বাক্ষরবিহীন দীর্ঘ কারেন্টমিলিস = মিলিস (); যদি (currentMillis - prevNTP> intervalNTP) {// যদি শেষ NTP অনুরোধের পর থেকে একটি মিনিট কেটে যায় prevNTP = currentMillis; Serial.println ("\ r / n NTP অনুরোধ পাঠানো হচ্ছে …"); sendNTPpacket (timeServerIP); // একটি NTP অনুরোধ পাঠান} uint32_t time = getTime (); // একটি এনটিপি প্রতিক্রিয়া এসেছে কিনা তা পরীক্ষা করুন এবং (UNIX) সময় পান যদি (সময়) {// যদি একটি নতুন টাইমস্ট্যাম্প পাওয়া গেছে timeUNIX = time; Serial.print ("NTP প্রতিক্রিয়া: / t"); Serial.println (timeUNIX); lastNTPResponse = currentMillis; } অন্যথায় যদি ((currentMillis - lastNTPResponse)> 3600000) {Serial.println ("গত NTP প্রতিক্রিয়া থেকে 1 ঘন্টারও বেশি সময় ধরে। রিবুট করা।"); Serial.flush (); ESP.reset (); } uint32_t actualTime = timeUNIX + (currentMillis - lastNTPResponse)/1000; uint32_t EasternTime = timeUNIX - 18000 + (currentMillis - lastNTPResponse)/1000; যদি (realTime! Serial.printf ("\ rUTC সময়: / t%d:%d:%d", getHours (actualTime), getMinutes (actualTime), getSeconds (actualTime)); Serial.printf ("E rEST (-5): / t%d:%d:%d", getHours (EasternTime), getMinutes (EasternTime), getSeconds (EasternTime)); Serial.println (); } // 7:30 am যদি (getHours (EasternTime) == 7 && getMinutes (EasternTime) == 30 && getSeconds (EasternTime) == 0) {// openাকনা খুলুন Serial.println ("lাকনা খোলা"); জন্য (pos = 95; pos> = 0; pos -= 1) {// 95 ডিগ্রী থেকে 0 ডিগ্রীতে যায় // ভেরিয়েবল 'পজ' বিলম্বের অবস্থানে যেতে সার্ভোকে বলুন (15); // সার্ভো অবস্থানে পৌঁছানোর জন্য 15ms অপেক্ষা করে}} // মধ্যরাত যদি (getHours (EasternTime) == 0 && getMinutes (EasternTime) == 0 && getSeconds (EasternTime) == 0) {// theাকনা সিরিয়াল বন্ধ করুন। println ("closingাকনা বন্ধ করা"); জন্য // ভেরিয়েবল 'পজ' বিলম্বের অবস্থানে যেতে সার্ভোকে বলুন (15); // সার্ভো অবস্থানে পৌঁছানোর জন্য 15ms অপেক্ষা করে}} /* // পরীক্ষা যদি (getHours (EasternTime) == 12 && getMinutes (EasternTime) == 45 && getSeconds (EasternTime) == 0) {// theাকনা বন্ধ করুন Serial.println ("closingাকনা বন্ধ করা"); জন্য (pos = 0; pos = 0; pos -= 1) {// 95 ডিগ্রী থেকে 0 ডিগ্রীতে যায় // ভেরিয়েবল 'পজ' বিলম্বের অবস্থানে যেতে সার্ভোকে বলুন (15); // সার্ভো অবস্থানে পৌঁছানোর জন্য 15ms অপেক্ষা করে}} */} void startWiFi () {// কিছু প্রদত্ত অ্যাক্সেস পয়েন্টের সাথে সংযোগ করার চেষ্টা করুন। তারপর একটি সংযোগের জন্য অপেক্ষা করুন wifiMulti.addAP ("ssid_from_AP_1", "your_password_for_AP_1"); // আপনি যে ওয়াই-ফাই নেটওয়ার্ক সংযুক্ত করতে চান তা যোগ করুন //wifiMulti.addAP("ssid_from_AP_2 "," your_password_for_AP_2 "); //wifiMulti.addAP("ssid_from_AP_3 "," your_password_for_AP_3 "); Serial.println ("সংযোগ"); যখন (wifiMulti.run ()! = WL_CONNECTED) {// ওয়াই-ফাই সংযোগ বিলম্বের জন্য অপেক্ষা করুন (250); সিরিয়াল.প্রিন্ট ('।'); } Serial.println ("\ r / n"); সিরিয়াল.প্রিন্ট ("এর সাথে সংযুক্ত"); Serial.println (WiFi. SSID ()); // Serial.print ("IP ঠিকানা: / t") এর সাথে আমরা কোন নেটওয়ার্কের সাথে সংযুক্ত তা আমাদের বলুন; Serial.print (WiFi.localIP ()); // ESP8266 এর IP ঠিকানাটি কম্পিউটার Serial.println ("\ r / n") পাঠান; } void startUDP () {Serial.println ("UDP শুরু হচ্ছে"); UDP. শুরু (123); // পোর্ট 123 Serial.print এ UDP বার্তা শোনা শুরু করুন ("স্থানীয় পোর্ট: / t"); Serial.println (UDP.localPort ()); Serial.println (); } uint32_t getTime () {if (UDP.parsePacket () == 0) {// যদি কোন প্রতিক্রিয়া না থাকে (এখনো) রিটার্ন 0; } UDP.read (NTPBuffer, NTP_PACKET_SIZE); // বাফারে প্যাকেটটি পড়ুন // 4 টি টাইমস্ট্যাম্প বাইট এক 32-বিট নম্বর uint32_t NTPTime = (NTPBuffer [40] << 24) | (NTPBuffer [41] << 16) | (NTPBuffer [42] << 8) | NTPBuffer [43]; // এনটিপি সময়কে ইউনিক্স টাইমস্ট্যাম্পে রূপান্তর করুন: // ইউনিক্স সময় শুরু হয় ১ জানুয়ারি ১.০ থেকে। এটি এনটিপি সময়ে 2208988800 সেকেন্ড: const uint32_t সত্তর বছর = 2208988800UL; // সত্তর বছর বিয়োগ: uint32_t UNIXTime = NTPTime - সত্তর বছর; UNIXTime ফেরত; } অকার্যকর sendNTPpacket (IPAddress & address) {memset (NTPBuffer, 0, NTP_PACKET_SIZE); // বাফারের সমস্ত বাইট 0 এ সেট করুন // এনটিপি অনুরোধ NTPBuffer গঠনের জন্য প্রয়োজনীয় মানগুলি আরম্ভ করুন [0] = 0b11100011; // এলআই, সংস্করণ, মোড // টাইমস্ট্যাম্পের অনুরোধ করে একটি প্যাকেট পাঠান: 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 এসি অ্যাডাপ্টার ব্যবহার করে আপনার ক্যাট ফিডারটিকে একটি আউটলেটে প্লাগ করুন। যেভাবে সহজ কোডটি লেখা হয়েছে, এটি "খোলা" অবস্থায় বুট করা বোঝানো হয়েছে, এবং এটি আরডুইনো স্কেচে নির্দিষ্ট সময়সীমায় কেবল তার idাকনার অবস্থান পরিবর্তন করবে।

অনুসরণ করার জন্য ধন্যবাদ! আপনি যদি আপনার নিজের সংস্করণটি তৈরি করেন, আমি নীচের আই মেড ইট বিভাগে এটি দেখতে চাই!

আপনি যদি এই প্রকল্পটি পছন্দ করেন তবে আপনি আমার অন্যদের মধ্যে আগ্রহী হতে পারেন:

  • রেইনবো পোর্ট্রেটের জন্য প্রিজম হোল্ডার
  • ক্যাট টাওয়ার সহ প্লাইউড স্টোরেজ ওয়াল
  • LED মেসন জার লণ্ঠন (3D মুদ্রিত idাকনা)
  • 3D প্রিন্টার ফিলামেন্ট ড্রাই বক্স
  • জরুরী ইউএসবি পাওয়ার সোর্স (3D মুদ্রিত)
  • জ্বলজ্বলে এলইডি আঠালো ক্যান্ডি
  • ড্রেনেজ সহ 3D মুদ্রিত জ্যামিতিক প্ল্যান্টার
  • জ্বলজ্বলে 3D মুদ্রিত ফুল
  • একটি স্কুটার (ব্লুটুথ সহ) এর অধীনে এলইডি কীভাবে ইনস্টল করবেন

আমি যা নিয়ে কাজ করছি তার সাথে তাল মিলিয়ে চলার জন্য আমাকে ইউটিউব, ইনস্টাগ্রাম, টুইটার এবং পিন্টারেস্টে ফলো করুন।

প্রস্তাবিত: