विषयसूची:

कैट फ़ूड एक्सेस कंट्रोल (ESP8266 + सर्वो मोटर + 3D प्रिंटिंग): 5 चरण (चित्रों के साथ)
कैट फ़ूड एक्सेस कंट्रोल (ESP8266 + सर्वो मोटर + 3D प्रिंटिंग): 5 चरण (चित्रों के साथ)

वीडियो: कैट फ़ूड एक्सेस कंट्रोल (ESP8266 + सर्वो मोटर + 3D प्रिंटिंग): 5 चरण (चित्रों के साथ)

वीडियो: कैट फ़ूड एक्सेस कंट्रोल (ESP8266 + सर्वो मोटर + 3D प्रिंटिंग): 5 चरण (चित्रों के साथ)
वीडियो: 3D Printed Pin Support Challenge 😱 2024, जून
Anonim
Image
Image
कैट फूड एक्सेस कंट्रोल (ESP8266 + सर्वो मोटर + 3D प्रिंटिंग)
कैट फूड एक्सेस कंट्रोल (ESP8266 + सर्वो मोटर + 3D प्रिंटिंग)

यह परियोजना मेरी बुजुर्ग मधुमेह बिल्ली चाज़ के लिए एक स्वचालित बिल्ली के भोजन का कटोरा बनाने की प्रक्रिया से आगे निकल जाती है। देखिए, इंसुलिन लेने से पहले उसे नाश्ता करने की जरूरत है, लेकिन मैं अक्सर सोने से पहले उसका खाना लेना भूल जाता हूं, जिससे उसकी भूख खराब हो जाती है और उसका इंसुलिन शेड्यूल खराब हो जाता है। यह व्यंजन मध्यरात्रि से 7:30 बजे के बीच भोजन पर ढक्कन बंद करने के लिए सर्वो मोटर का उपयोग करता है। NodeMCU ESP8266 माइक्रोकंट्रोलर का Arduino स्केच शेड्यूल को नियंत्रित करने के लिए नेटवर्क टाइम प्रोटोकॉल (NTP) का उपयोग करता है।

यह परियोजना छोटी, अधिक सक्रिय बिल्लियों के लिए उपयुक्त नहीं हो सकती है। चाज़ इतना बूढ़ा और कमजोर है, वह कटोरे को खोलने की कोशिश करने के लिए इच्छुक नहीं है, लेकिन यह संभव है।

यदि आप Arduino या ESP8266 में नए हैं, तो आप निम्नलिखित पूर्वापेक्षा गाइड का आनंद ले सकते हैं:

  • निर्देशयोग्य Arduino Class
  • इंस्ट्रक्शंस इंटरनेट ऑफ थिंग्स क्लास

आपूर्ति

  • 3D प्रिंटर (मैं एक Creality CR-10s Pro का उपयोग करता हूं)
  • 3डी प्रिंटर फिलामेंट (मैं गोल्ड पीएलए का उपयोग कर रहा हूं)
  • NodeMCU ESP8266 वाईफाई माइक्रोकंट्रोलर
  • यूएसबी केबल (ए से माइक्रोबी)
  • यूएसबी पावर एडाप्टर
  • माइक्रो सर्वो मोटर
  • छोटा पेचकश और स्क्रू
  • तार बांधना
  • हैडर पिन
  • पर्मा-प्रोटो बोर्ड

मैं जिस पर काम कर रहा हूं, उसके साथ बने रहने के लिए, मुझे YouTube, Instagram, Twitter, Pinterest पर फ़ॉलो करें और मेरे न्यूज़लेटर की सदस्यता लें। एक अमेज़ॅन सहयोगी के रूप में मैं आपके द्वारा मेरे संबद्ध लिंक का उपयोग करके योग्य खरीदारी से कमाता हूं।

चरण 1: 3 डी प्रिंटेड पार्ट्स

3डी प्रिंटेड पार्ट्स
3डी प्रिंटेड पार्ट्स
3डी प्रिंटेड पार्ट्स
3डी प्रिंटेड पार्ट्स

कैट फूड बाउल होल्डर थिंगविवर्स पर अर्डी लाई के डिजाइन पर आधारित है। मैंने अपनी बिल्ली के कटोरे को समायोजित करने के लिए इसे बड़ा कर दिया, और इसे छोटा भी कर दिया क्योंकि इसे बढ़ाने से यह बहुत लंबा हो गया था। मैंने एक माइक्रो सर्वो मोटर के लिए एक धारक जोड़ा, और केबल के लिए कुछ छेद अंदर की ओर जाने के लिए।

मैंने टिंकरकाड का उपयोग करके एक साधारण ढक्कन का मॉडल तैयार किया, जिसे माइक्रो सर्वो के हॉर्न से जोड़ने के लिए डिज़ाइन किया गया था। आप सीधे टिंकरकाड से मेरा डिज़ाइन प्राप्त कर सकते हैं, और/या इस चरण से जुड़ी एसटीएल डाउनलोड कर सकते हैं।

मैंने अपने Creality CR-10s Pro प्रिंटर पर सोने के PLA फिलामेंट के साथ पुर्जे प्रिंट किए।

प्रकटीकरण: इस लेखन के समय, मैं ऑटोडेस्क का कर्मचारी हूं, जो टिंकरकाड बनाता है।

चरण 2: सर्वो मोटर में ढक्कन संलग्न करें

सर्वो मोटर में ढक्कन संलग्न करें
सर्वो मोटर में ढक्कन संलग्न करें
सर्वो मोटर में ढक्कन संलग्न करें
सर्वो मोटर में ढक्कन संलग्न करें

मैंने सर्वो हॉर्न पर छेद के आकार को बढ़ाने के लिए एक छोटी सी ड्रिल बिट का उपयोग किया, फिर सर्वो को 3 डी प्रिंटेड ढक्कन से जोड़ने के लिए स्क्रू का उपयोग किया।

चरण 3: NodeMCU ESP8266 सर्किट बनाएँ

NodeMCU ESP8266 सर्किट बनाएँ
NodeMCU ESP8266 सर्किट बनाएँ
NodeMCU ESP8266 सर्किट बनाएँ
NodeMCU ESP8266 सर्किट बनाएँ
NodeMCU ESP8266 सर्किट बनाएँ
NodeMCU ESP8266 सर्किट बनाएँ
NodeMCU ESP8266 सर्किट बनाएँ
NodeMCU ESP8266 सर्किट बनाएँ

सर्किट को NodeMCU ESP8266 वाईफाई माइक्रोकंट्रोलर द्वारा नियंत्रित किया जाता है। माइक्रो सर्वो मोटर को आसानी से अलग करने योग्य बनाने के लिए मैंने एक पर्मा-प्रोटो बोर्ड पर हेडर पिन का इस्तेमाल किया। सर्वो हेडर निम्नानुसार नोडएमसीयू से जुड़े हुए हैं:

पीला सर्वो तार: NodeMCU D1

लाल सर्वो तार: NodeMCU पावर (3V3 या VIN)

ब्लैक सर्वो वायर: NodeMCU ग्राउंड (GND)

चरण 4: Arduino कोड और परीक्षण अपलोड करें

Arduino कोड और टेस्ट अपलोड करें
Arduino कोड और टेस्ट अपलोड करें

अपने मोटर/लिड असेंबली को बाउल होल्डर के 3डी प्रिंटेड हिस्से पर मोटर के आकार के कटआउट में स्थापित करें। मोटर हेडर को माइक्रोकंट्रोलर बोर्ड के हेडर पिन में प्लग करें, और सर्किट को अपने कंप्यूटर में USB केबल से प्लग करें।

Arduino स्केच वर्तमान समय लाने के लिए नेटवर्क टाइम प्रोटोकॉल का उपयोग करता है और फिर हार्ड-कोडेड शेड्यूल के अनुसार ढक्कन को खोलता या बंद करता है। निम्नलिखित कोड को कॉपी करें, अपने वाईफाई क्रेडेंशियल और यूटीसी समय ऑफसेट को अपडेट करें, और इसे Arduino IDE का उपयोग करके अपने NodeMCU बोर्ड पर अपलोड करें।

#शामिल

#include #include #include ESP8266WiFiMulti wifiMulti; // ESP8266WiFiMulti क्लास का एक उदाहरण बनाएं, जिसे 'wifiMulti' WiFiUDP UDP कहा जाता है; // IPAddress timeServerIP भेजने और प्राप्त करने के लिए WiFiUDP वर्ग का एक उदाहरण बनाएं; // time.nist.gov NTP सर्वर एड्रेस कास्ट चार* NTPServerName = "time.nist.gov"; कॉन्स्ट इंट NTP_PACKET_SIZE = 48; // NTP टाइम स्टैम्प संदेश बाइट NTPBuffer [NTP_PACKET_SIZE] के पहले 48 बाइट्स में है; // आने वाले और बाहर जाने वाले पैकेट रखने के लिए बफर सर्वो myservo; // सर्वो को नियंत्रित करने के लिए सर्वो ऑब्जेक्ट बनाएं // बारह सर्वो ऑब्जेक्ट अधिकांश बोर्डों पर बनाए जा सकते हैं int pos = 0; // सर्वो स्थिति शून्य सेटअप () {myservo.attach(5) को संग्रहीत करने के लिए चर; // पिन 5 उर्फ डी 1 पर सर्वो ऑब्जेक्ट को सर्वो से जोड़ता है // डिफ़ॉल्ट रूप से ढक्कन खोलें Serial.println ("ढक्कन खोलना"); for (pos = ९५; pos >= 0; pos -= १) {// ९५ डिग्री से ० डिग्री myservo.write(pos); // सर्वो को चर 'स्थिति' विलंब (15) में स्थिति में जाने के लिए कहें; // सर्वो की स्थिति तक पहुंचने के लिए 15ms प्रतीक्षा करता है } Serial.begin (115200); // कंप्यूटर विलंब (10) को संदेश भेजने के लिए सीरियल संचार शुरू करें; सीरियल.प्रिंट्लन ("\ r / n"); स्टार्ट वाईफाई (); // कुछ दिए गए एक्सेस पॉइंट से कनेक्ट करने का प्रयास करें। फिर कनेक्शन के लिए प्रतीक्षा करें startUDP (); if(!WiFi.hostByName(NTPServerName, timeServerIP)) {// NTP सर्वर का IP पता प्राप्त करें Serial.println ("DNS लुकअप विफल। रिबूटिंग।"); सीरियल फ्लश (); ईएसपी.रीसेट (); } सीरियल.प्रिंट ("टाइम सर्वर आईपी: / टी"); Serial.println(timeServerIP); Serial.println ("\ r / n NTP अनुरोध भेजा जा रहा है …"); सेंडएनटीपीपैकेट (टाइमसर्वरआईपी); } अहस्ताक्षरित लंबा अंतरालNTP = ६००००; // अनुरोध एनटीपी समय हर मिनट अहस्ताक्षरित लंबे prevNTP = 0; अहस्ताक्षरित लंबा lastNTPResponse = मिली (); uint32_t समययूनिक्स = 0; अहस्ताक्षरित लंबा पिछला वास्तविक समय = 0; शून्य लूप () { अहस्ताक्षरित लंबे करंटमिलिस = मिली (); अगर (currentMillis - prevNTP > अंतरालNTP) {// यदि पिछले NTP अनुरोध के बाद से एक मिनट बीत चुका है prevNTP = currentMillis; Serial.println ("\ r / n NTP अनुरोध भेजा जा रहा है …"); सेंडएनटीपीपैकेट (टाइमसर्वरआईपी); // एक एनटीपी अनुरोध भेजें } uint32_t समय = गेटटाइम (); // जांचें कि क्या एनटीपी प्रतिक्रिया आ गई है और (यूनिक्स) समय प्राप्त करें यदि (समय) {// यदि एक नया टाइमस्टैम्प प्राप्त हुआ है तो टाइमयूनिक्स = समय; सीरियल.प्रिंट ("एनटीपी प्रतिक्रिया: / t"); सीरियल.प्रिंट्लन (टाइमयूनिक्स); lastNTPResponse = करंटमिलिस; } और अगर ((currentMillis - lastNTPResponse) > 3600000) { Serial.println ("पिछले NTP प्रतिक्रिया के बाद से 1 घंटे से अधिक। रिबूटिंग।"); सीरियल फ्लश (); ईएसपी.रीसेट (); } uint32_t realTime = timeUNIX + (currentMillis - lastNTPResponse)/1000; uint32_t पूर्वी समय = समय UNIX - १८००० + (currentMillis - lastNTPResponse)/१०००; अगर (वास्तविक समय != prevActualTime && timeUNIX != 0) {// यदि अंतिम प्रिंट के बाद से एक सेकंड बीत चुका है prevActualTime = realTime; Serial.printf ("\ rUTC समय: / t% d:% d:% d ", getHours (वास्तविक समय), getMinutes (वास्तविक समय), getSeconds (वास्तविक समय)); Serial.printf("\rEST (-5):\t%d:%d:%d ", getHours(पूर्वी समय), getMinutes(पूर्वी समय), getSeconds(पूर्वी समय)); सीरियल.प्रिंट्लन (); } // 7:30 बजे अगर (getHours (पूर्वी समय) == 7 && getMinutes (पूर्वी समय) == 30 && getSeconds (पूर्वी समय) == 0) {// ढक्कन खोलें सीरियल। for (pos = ९५; pos >= 0; pos -= १) {// ९५ डिग्री से ० डिग्री myservo.write(pos); // सर्वो को चर 'स्थिति' विलंब (15) में स्थिति में जाने के लिए कहें; // सर्वो की स्थिति तक पहुंचने के लिए 15ms प्रतीक्षा करता है}} // आधी रात अगर (getHours (पूर्वी समय) == 0 && getMinutes (पूर्वी समय) == 0 && getSeconds (पूर्वी समय) == 0) {// ढक्कन बंद करें सीरियल। println ("ढक्कन बंद करना"); for (pos = 0; pos <= 95; pos += 1) {// 1 डिग्री myservo.write(pos) के चरणों में 0 डिग्री से 95 डिग्री // तक जाता है; // सर्वो को चर 'स्थिति' विलंब (15) में स्थिति में जाने के लिए कहें; // सर्वो की स्थिति तक पहुंचने के लिए 15ms प्रतीक्षा करता है}} /* // परीक्षण अगर (getHours (पूर्वी समय) == 12 && getMinutes (पूर्वी समय) == 45 && getSeconds (पूर्वी समय) == 0) {// ढक्कन बंद करें Serial.println ("ढक्कन बंद करना"); for (pos = 0; pos = 0; pos -= 1) {// ९५ डिग्री से ० डिग्री myservo.write(pos); // सर्वो को चर 'स्थिति' विलंब (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) के लिए प्रतीक्षा करें; सीरियल.प्रिंट ('।'); } सीरियल.प्रिंट्लन ("\ r / n"); सीरियल.प्रिंट ("कनेक्टेड"); Serial.println (वाईफाई.एसएसआईडी ()); // हमें बताएं कि हम किस नेटवर्क से जुड़े हैं Serial.print("IP पता:\t"); सीरियल.प्रिंट (वाईफाई.लोकलआईपी ()); // कंप्यूटर पर ESP8266 का IP पता भेजें Serial.println("\r\n"); } शून्य startUDP () { Serial.println ("यूडीपी शुरू करना"); यूडीपी.बेगिन(123); // पोर्ट 123 सीरियल.प्रिंट ("लोकल पोर्ट: / t") पर यूडीपी संदेशों को सुनना शुरू करें; Serial.println (UDP.localPort ()); सीरियल.प्रिंट्लन (); } uint32_t getTime() { अगर (UDP.parsePacket() == 0) {// यदि कोई प्रतिक्रिया नहीं है (अभी तक) वापसी 0; } UDP.read(NTPBuffer, NTP_PACKET_SIZE); // पैकेट को बफर में पढ़ें // 4 टाइमस्टैम्प बाइट्स को एक 32-बिट संख्या में मिलाएं uint32_t NTPTime = (NTPBuffer[40] << 24) | (एनटीपीबफर[41] << 16) | (एनटीपीबफर[42] << 8) | एनटीपीबफर [43]; // NTP समय को UNIX टाइमस्टैम्प में बदलें: // यूनिक्स का समय 1 जनवरी 1970 से शुरू होता है। NTP समय में यह 2208988800 सेकंड है: const uint32_t सत्तर वर्ष = 2208988800UL; // सत्तर वर्ष घटाएं: uint32_t UNIXTime = NTPTime - सत्तर वर्ष; यूनिक्सटाइम लौटाएं; } शून्य भेजेंएनटीपीपैकेट (आईपीएड्रेस और पता) {मेमसेट (एनटीपीबफर, 0, एनटीपी_पैकेट_एसआईजेडई); // बफर में सभी बाइट्स को 0 पर सेट करें // एनटीपी अनुरोध बनाने के लिए आवश्यक मूल्यों को आरंभ करें NTPBuffer [0] = 0b11100011; // LI, संस्करण, मोड // टाइमस्टैम्प का अनुरोध करने वाला एक पैकेट भेजें: UDP.beginPacket (पता, 123); // NTP अनुरोध 123 UDP.write (NTPBuffer, NTP_PACKET_SIZE) को पोर्ट करने के लिए हैं; यूडीपी.एंडपैकेट (); } इनलाइन int getSeconds (uint32_t UNIXTime) { वापसी UNIXTime% 60; } इनलाइन int getMinutes(uint32_t UNIXTime) { वापसी UNIXTime / 60% ६०; } इनलाइन int getHours (uint32_t UNIXTime) { वापसी UNIXTime / 360% 24; }

चरण 5: इसका इस्तेमाल करें

इसका इस्तेमाल करें!
इसका इस्तेमाल करें!
इसका इस्तेमाल करें!
इसका इस्तेमाल करें!

अपने तारों को बाउल होल्डर के अंदर की ओर रूट करें, और USB AC अडैप्टर का उपयोग करके अपने कैट फीडर को आउटलेट में प्लग करें। जिस तरह से सरल कोड लिखा जाता है, वह "खुली" स्थिति में बूट होने के लिए होता है, और केवल Arduino स्केच में निर्दिष्ट समय सीमा पर इसकी ढक्कन स्थिति को बदल देगा।

साथ चलने के लिए धन्यवाद! यदि आप अपना स्वयं का संस्करण बनाते हैं, तो मुझे इसे नीचे दिए गए I मेड इट सेक्शन में देखना अच्छा लगेगा!

यदि आपको यह परियोजना पसंद है, तो आप मेरे कुछ अन्य लोगों में रुचि ले सकते हैं:

  • रेनबो पोर्ट्रेट्स के लिए प्रिज्म होल्डर
  • कैट टॉवर के साथ प्लाइवुड स्टोरेज वॉल
  • एलईडी मेसन जार लालटेन (3 डी मुद्रित ढक्कन)
  • 3डी प्रिंटर फिलामेंट ड्राई बॉक्स
  • आपातकालीन यूएसबी पावर स्रोत (3 डी प्रिंटेड)
  • चमकती एलईडी चिपचिपा कैंडी
  • ड्रेनेज के साथ 3 डी प्रिंटेड जियोमेट्रिक प्लांटर
  • चमकते 3डी प्रिंटेड फूल
  • स्कूटर के नीचे एलईडी कैसे स्थापित करें (ब्लूटूथ के साथ)

मैं जिस पर काम कर रहा हूं, उससे अपडेट रहने के लिए, मुझे YouTube, Instagram, Twitter और Pinterest पर फ़ॉलो करें।

सिफारिश की: