ዝርዝር ሁኔታ:

የድመት የምግብ ተደራሽነት ቁጥጥር (ESP8266 + Servo Motor + 3D Printing) 5 ደረጃዎች (ከስዕሎች ጋር)
የድመት የምግብ ተደራሽነት ቁጥጥር (ESP8266 + Servo Motor + 3D Printing) 5 ደረጃዎች (ከስዕሎች ጋር)

ቪዲዮ: የድመት የምግብ ተደራሽነት ቁጥጥር (ESP8266 + Servo Motor + 3D Printing) 5 ደረጃዎች (ከስዕሎች ጋር)

ቪዲዮ: የድመት የምግብ ተደራሽነት ቁጥጥር (ESP8266 + Servo Motor + 3D Printing) 5 ደረጃዎች (ከስዕሎች ጋር)
ቪዲዮ: STUDY LIKE HERO | ጎበዝ ተማሪዎች የማይናገሩት ሚስጥር | Hakim Insight 2024, ሰኔ
Anonim
Image
Image
የድመት የምግብ ተደራሽነት ቁጥጥር (ESP8266 + Servo Motor + 3D Printing)
የድመት የምግብ ተደራሽነት ቁጥጥር (ESP8266 + Servo Motor + 3D Printing)

ይህ ፕሮጀክት ለአዛውንቴ የስኳር ህመምተኛ ድመት ቻዝ አውቶማቲክ ድመት የምግብ ሳህን ለመፍጠር የተጠቀምኩበትን ሂደት ያያል። ይመልከቱ ፣ እሱ ኢንሱሊን ከማግኘቱ በፊት ቁርስ መብላት አለበት ፣ ግን ብዙውን ጊዜ ከመተኛቴ በፊት የምግብ ሳህኑን ማንሳት እረሳለሁ ፣ ይህም የምግብ ፍላጎቱን ያበላሸዋል እና የኢንሱሊን መርሃ ግብሩን ይጥላል። ይህ ምግብ በእኩለ ሌሊት ሰዓታት እና በ 7 30 መካከል ባለው ምግብ ላይ ክዳን ለመዝጋት ሰርቪ ሞተር ይጠቀማል። የ NodeMCU ESP8266 ማይክሮ መቆጣጠሪያ አርዱinoኖ ንድፍ የጊዜ ሰሌዳውን ለመቆጣጠር የአውታረ መረብ ጊዜ ፕሮቶኮል (NTP) ይጠቀማል።

ይህ ፕሮጀክት ለወጣት ፣ የበለጠ ንቁ ለሆኑ ድመቶች ተስማሚ ላይሆን ይችላል። ቻዝ በጣም ያረጀ እና ደካማ ነው ፣ ጎድጓዳ ሳህኑን ለመክፈት ለመሞከር ዝንባሌ የለውም ፣ ግን ይቻላል።

ለአርዱዲኖ ወይም ለ ESP8266 አዲስ ከሆኑ በሚከተሉት ቅድመ -መመሪያዎች ሊደሰቱ ይችላሉ-

  • Instructables Arduino ክፍል
  • Instructables የነገሮች ክፍል በይነመረብ

አቅርቦቶች

  • 3 ዲ አታሚ (እኔ Creality CR-10s Pro እጠቀማለሁ)
  • 3 -ል አታሚ ክር (የወርቅ PLA ን እጠቀማለሁ)
  • NodeMCU ESP8266 wifi ማይክሮ መቆጣጠሪያ
  • የዩኤስቢ ገመድ (ከ A ወደ ማይክሮ ቢ)
  • የዩኤስቢ ኃይል አስማሚ
  • ማይክሮ ሰርቮ ሞተር
  • አነስተኛ ጠመዝማዛ እና ዊልስ
  • የሚጣበቅ ገመድ
  • የራስጌ ፒኖች
  • የፐርማ-ፕሮቶ ቦርድ

እየሠራሁበት ያለውን ለመከታተል በዩቲዩብ ፣ በኢንስታግራም ፣ በትዊተር ፣ በፒንቴሬስት ይከተሉኝ እና ለጋዜጣዬ ይመዝገቡ። እንደ አማዞን ተባባሪ እንደመሆኔ የአጋርነት አገናኞቼን በመጠቀም ከሚያደርጉት ብቁ ግዢዎች አገኛለሁ።

ደረጃ 1: 3 ዲ የታተሙ ክፍሎች

3 ዲ የታተሙ ክፍሎች
3 ዲ የታተሙ ክፍሎች
3 ዲ የታተሙ ክፍሎች
3 ዲ የታተሙ ክፍሎች

የድመት ምግብ ጎድጓዳ ሳህን በ Thingiverse ላይ በአርዲ ላይ ንድፍ ላይ የተመሠረተ ነው። የድመቴን ጎድጓዳ ሳህን ለማስተናገድ ትልቅ አደረግሁት ፣ እንዲሁም ከፍ ማድረጉ በጣም ከፍ ስላደረገው አጠር አደረግሁት። እኔ ለማይክሮ ሰርቪስ ሞተር መያዣን እና ወደ ውስጠኛው መስመር ለመሄድ ለኬብሎች ሁለት ቀዳዳዎችን ጨመርኩ።

ከማይክሮ ሰርቪው ቀንድ ጋር ለማያያዝ የተነደፈውን Tinkercad ን በመጠቀም ቀለል ያለ ክዳን ሞዴል አድርጌአለሁ። የእኔን ንድፍ በቀጥታ ከቲንክከርድ መውሰድ እና/ወይም ከዚህ ደረጃ ጋር የተገናኙትን STLs ማውረድ ይችላሉ።

ክፍሎቼን በ Creality CR-10s Pro አታሚዬ ላይ ከወርቅ PLA ክር ጋር አተምኩ።

ይፋ ማድረግ - በዚህ ጽሑፍ ጊዜ እኔ Tinkercad ን የሚሠራው የ Autodesk ሠራተኛ ነኝ።

ደረጃ 2: ክዳንን ወደ ሰርቮ ሞተር ያያይዙ

ክዳንን ወደ ሰርቮ ሞተር ያያይዙ
ክዳንን ወደ ሰርቮ ሞተር ያያይዙ
ክዳንን ወደ ሰርቮ ሞተር ያያይዙ
ክዳንን ወደ ሰርቮ ሞተር ያያይዙ

በ servo ቀንድ ላይ ያሉትን ቀዳዳዎች መጠን ለመጨመር ትንሽ ቁፋሮ ተጠቅሜ ነበር ፣ ከዚያ ሰርቪውን ከ 3 ዲ የታተመ ክዳን ጋር ለማያያዝ ዊንጮችን ተጠቀምኩ።

ደረጃ 3 NodeMCU ESP8266 ወረዳ ይገንቡ

NodeMCU ESP8266 ወረዳ ይገንቡ
NodeMCU ESP8266 ወረዳ ይገንቡ
NodeMCU ESP8266 ወረዳ ይገንቡ
NodeMCU ESP8266 ወረዳ ይገንቡ
NodeMCU ESP8266 ወረዳ ይገንቡ
NodeMCU ESP8266 ወረዳ ይገንቡ
NodeMCU ESP8266 ወረዳ ይገንቡ
NodeMCU ESP8266 ወረዳ ይገንቡ

ወረዳው በ NodeMCU ESP8266 wifi ማይክሮ መቆጣጠሪያ ቁጥጥር ይደረግበታል። ማይክሮ ሰርቮ ሞተር በቀላሉ እንዲነቀል ለማድረግ በፔርማ-ፕሮቶ ቦርድ ላይ የራስጌ ፒኖችን ተጠቅሜ ነበር ።የ servo ራስጌዎች ከ NodeMCU ጋር ተገናኝተዋል።

ቢጫ servo ሽቦ: NodeMCU D1

ቀይ servo ሽቦ: NodeMCU ኃይል (3V3 ወይም ቪን)

ጥቁር ሰርቪ ሽቦ - NodeMCU መሬት (GND)

ደረጃ 4 የአሩዲኖ ኮድ እና ሙከራ ይስቀሉ

የአርዱዲኖ ኮድ እና ሙከራ ይስቀሉ
የአርዱዲኖ ኮድ እና ሙከራ ይስቀሉ

በሳጥን መያዣው 3 ዲ የታተመ ክፍል ላይ የሞተር/ክዳን ስብሰባዎን በሞተር ቅርፅ ባለው ተቆርጦ ይጫኑ። የሞተር ራስጌውን በማይክሮ መቆጣጠሪያ ቦርድ ራስጌ ፒን ላይ ይሰኩ እና ወረዳውን በዩኤስቢ ገመድ ወደ ኮምፒተርዎ ያስገቡ።

የአርዱዲኖ ንድፍ የአሁኑን ጊዜ ለማምጣት የአውታረ መረብ ጊዜ ፕሮቶኮልን ይጠቀማል እና ከዚያ በጠንካራ ኮድ መርሃ ግብር መሠረት ክዳኑን ይከፍታል ወይም ይዘጋል። የሚከተለውን ኮድ ይቅዱ ፣ የ wifi ምስክርነቶችዎን እና የ UTC ጊዜ ማካካሻዎን ያዘምኑ እና አርዱዲኖ አይዲኢን በመጠቀም ወደ ኖድኤምሲዩ ቦርድ ይስቀሉት።

#ያካትቱ

#ያካትቱ #ያካትቱ #ያካትቱ ESP8266WiFiMulti wifiMulti; // ‹wifiMulti› WiFiUDP UDP የሚባለውን የ ESP8266WiFiMulti ክፍል ምሳሌ ይፍጠሩ ፤ // IPAddress timeServerIP ን ለመላክ እና ለመቀበል የ WiFiUDP ክፍል ምሳሌን ይፍጠሩ ፣ // time.nist.gov የ NTP አገልጋይ አድራሻ const char* NTPServerName = "time.nist.gov"; const int NTP_PACKET_SIZE = 48; // NTP የጊዜ ማህተም በመጀመሪያዎቹ 48 ባይት የመልእክት ባይት NTPBuffer [NTP_PACKET_SIZE] ውስጥ ነው ፤ // የገቢ እና የወጪ እሽጎችን Servo myservo ን ለመያዝ ቋት; // አንድ servo ን ለመቆጣጠር የ servo ነገርን ይፍጠሩ // አሥራ ሁለት የ servo ዕቃዎች በአብዛኛዎቹ ሰሌዳዎች ላይ ሊፈጥሩ ይችላሉ int pos = 0; // ተለዋዋጭ የ servo አቀማመጥ ባዶነት ቅንብር () {myservo.attach (5); // አገልጋዩን በፒን 5 aka D1 ላይ ወደ servo ነገር ያያይዘዋል/ክዳኑን በነባሪ Serial.println (“ክዳኑን መክፈት”) ይክፈቱ ፤ ለ (pos = 95; pos> = 0; pos -= 1) {// ከ 95 ዲግሪ ወደ 0 ዲግሪ myservo.write (pos) ይሄዳል ፤ // በተለዋዋጭ 'ፖዝ' መዘግየት (15) ውስጥ ወደ ቦታው እንዲሄድ servo ን ይንገሩት ፤ // አገልጋዩ ወደ ቦታው እንዲደርስ 15ms ይጠብቃል} Serial.begin (115200); // መልዕክቶችን ወደ ኮምፒተር መዘግየት (10) ለመላክ ተከታታይ ግንኙነቱን ይጀምሩ (10) ፤ Serial.println ("\ r / n"); startWiFi (); // ከተወሰኑ የመዳረሻ ነጥቦች ጋር ለመገናኘት ይሞክሩ። ከዚያ ግንኙነቱን ይጠብቁ startUDP (); ከሆነ (! WiFi.hostByName (NTPServerName ፣ timeServerIP)) {// የ NTP አገልጋዩን የአይፒ አድራሻ Serial.println ያግኙ (“የዲ ኤን ኤስ ፍለጋ አልተሳካም። ዳግም ማስጀመር”) ፤ Serial.flush (); ESP.reset (); } Serial.print ("የጊዜ አገልጋይ IP: / t"); Serial.println (timeServerIP); Serial.println ("\ r / n የ NTP ጥያቄን በመላክ ላይ …"); sendNTPpacket (timeServerIP); } ያልተፈረመ ረጅም ክፍተት NTP = 60000; // በየደቂቃው ያልተፈረመ ረዥም prevNTP = 0 የ NTP ጊዜን ይጠይቁ። ያልተፈረመ ረጅም lastNTPResponse = millis (); uint32_t timeUNIX = 0; ያልተፈረመ ረጅም prevActualTime = 0; ባዶነት loop () {ያልተፈረመ ረጅም የአሁኑ ሚሊስ = ሚሊስ (); ከሆነ (currentMillis - prevNTP> intervalNTP) {// ካለፈው NTP ጥያቄ አንድ ደቂቃ ካለፈ prevNTP = currentMillis; Serial.println ("\ r / n የ NTP ጥያቄን በመላክ ላይ …"); sendNTPpacket (timeServerIP); // የ NTP ጥያቄ ይላኩ} uint32_t time = getTime (); // የኤንቲፒ ምላሽ ደርሶ እንደሆነ ያረጋግጡ እና (ጊዜ) ከሆነ (ጊዜ) {// አዲስ የጊዜ ማህተም timeUNIX = ጊዜ ከተቀበለ። Serial.print ("NTP ምላሽ / t"); Serial.println (timeUNIX); lastNTPResponse = currentMillis; } ሌላ ከሆነ ((currentMillis - lastNTPResponse)> 3600000) {Serial.println (“ካለፈው የኤን ቲ ፒ ምላሽ ከ 1 ሰዓት በላይ። ዳግም በመጀመር ላይ”) ፤ Serial.flush (); ESP.reset (); } uint32_t exactTime = timeUNIX + (currentMillis - lastNTPResponse)/1000; uint32_t eastTime = timeUNIX - 18000 + (currentMillis - lastNTPResponse)/1000; ከሆነ (ትክክለኛው ጊዜ! ተከታታይ. ተከታታይ። 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) ይሄዳል ፤ // በተለዋዋጭ 'ፖዝ' መዘግየት (15) ውስጥ ወደ ቦታው እንዲሄድ servo ን ይንገሩት ፤ // አገልጋዩ ቦታው ላይ እንዲደርስ 15ms ይጠብቃል}} // እኩለ ሌሊት ከሆነ (getHours (eastTime) == 0 && getMinutes (eastTime) == 0 && getSeconds (eastTime) == 0) {// ክዳኑን Serial ይዝጉ። println ("ክዳኑን መዝጋት"); ለ (pos = 0; pos <= 95; pos += 1) {// በ 1 ዲግሪ myservo.write (pos) ደረጃዎች ከ 0 ዲግሪ ወደ 95 ዲግሪ // ይሄዳል። // በተለዋዋጭ 'ፖዝ' መዘግየት (15) ውስጥ ወደ ቦታው እንዲሄድ servo ን ይንገሩት ፤ // አገልጋዩ ቦታው ላይ እንዲደርስ 15ms ይጠብቃል}} /* // ሙከራ (getHours (eastTime) == 12 && getMinutes (eastTime) == 45 && getSeconds (eastTime) == 0) {// ክዳኑን ይዝጉ Serial.println ("ክዳኑን መዝጋት"); ለ (pos = 0; pos = 0; pos -= 1) {// ከ 95 ዲግሪ ወደ 0 ዲግሪ myservo.write (pos) ይሄዳል ፤ // በተለዋዋጭ 'ፖዝ' መዘግየት (15) ውስጥ ወደ ቦታው እንዲሄድ servo ን ይንገሩት ፤ // አገልጋዩ ቦታው ላይ እንዲደርስ 15ms ይጠብቃል}} */} ባዶ 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 ("ማገናኘት"); ሳለ (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 ()); // የ ESP8266 የአይፒ አድራሻውን ወደ ኮምፒዩተር Serial.println ("\ r / n") ይላኩ ፤ } ባዶነት startUDP () {Serial.println («UDP ን መጀመር»); UDP.begin (123); // ወደብ 123 Serial.print ("አካባቢያዊ ወደብ: / t") ላይ የ UDP መልዕክቶችን ማዳመጥ ይጀምሩ ፤ Serial.println (UDP.localPort ()); Serial.println (); } uint32_t getTime () {ከሆነ (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]; // የ NTP ጊዜን ወደ UNIX የጊዜ ማህተም ይለውጡ: // የዩኒክስ ሰዓት በጃንዋሪ 1 ቀን 1970 ይጀምራል። ይህ በ NTP ጊዜ ውስጥ 2208988800 ሰከንዶች ነው። // ሰባ ዓመታትን ቀንስ - uint32_t UNIXTime = NTPTime - ሰባ ዓመት; UNIXTime ን መመለስ; } ባዶ ላክNTPpacket (IPAddress & አድራሻ) {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) {UNIXTime % 60 ን ይመልሱ ፤ } inline int getMinutes (uint32_t UNIXTime) {UNIXTime / 60 % 60 መመለስ ፤ } inline int getHours (uint32_t UNIXTime) {UNIXTime / 3600 % 24 መመለስ ፤ }

ደረጃ 5: ይጠቀሙበት

ተጠቀምበት!
ተጠቀምበት!
ተጠቀምበት!
ተጠቀምበት!

ጎድጓዳ ሳህን መያዣው ውስጥ ሽቦዎችዎን ያዙሩ ፣ እና የዩኤስቢ ኤሲ አስማሚ በመጠቀም የድመት መጋቢዎን ወደ መውጫ ውስጥ ያስገቡ። ቀላሉ ኮድ የተጻፈበት መንገድ ፣ እሱ በ “ክፍት” ሁኔታ ውስጥ መነሳት ማለት ነው ፣ እና በአርዱዲኖ ንድፍ ውስጥ በተገለጹት የግቢያ ገደቦች ላይ የሽፋኑን አቀማመጥ ብቻ ይለውጣል።

ስለተከተሉ እናመሰግናለን! እርስዎ የራስዎን ስሪት ከሠሩ ፣ እኔ ከዚህ በታች በሠራሁት ክፍል ውስጥ ማየት እፈልጋለሁ!

ይህንን ፕሮጀክት ከወደዱት ፣ በሌሎች የእኔ ሌሎች ላይ ሊፈልጉ ይችላሉ-

  • ቀስተ ደመና የቁም ስዕሎች የፕሪዝም ባለቤት
  • ከድመት ግንብ ጋር የፓንች ማከማቻ ግድግዳ
  • የ LED ሜሰን ጃር መብራቶች (3 ዲ የታተመ ክዳን)
  • 3 ዲ አታሚ ፊላደር ደረቅ ሣጥን
  • የአስቸኳይ የዩኤስቢ የኃይል ምንጭ (3 ዲ ታትሟል)
  • የሚያብለጨልጭ LED Gummy Candy
  • 3 -ልኬት የታተመ የጂኦሜትሪክ ተክል በእፅዋት ማስወገጃ
  • የሚያብረቀርቅ 3 ዲ የታተሙ አበቦች
  • በስኩተር ስር (በብሉቱዝ) LED ን እንዴት እንደሚጭኑ

እኔ እየሠራሁ ያለውን ለመከታተል በዩቲዩብ ፣ በኢንስታግራም ፣ በትዊተር እና በፒንቴሬስት ይከተሉኝ።

የሚመከር: