Բովանդակություն:
- Պարագաներ
- Քայլ 1: 3D տպագիր մասեր
- Քայլ 2: Կցեք կափարիչը Servo Motor- ին
- Քայլ 3. Կառուցեք NodeMCU ESP8266 միացում
- Քայլ 4: Վերբեռնեք Arduino ծածկագիրը և փորձարկումը
- Քայլ 5: Օգտագործեք այն:
Video: Cat Food Access Access Control (ESP8266 + Servo Motor + 3D Printing) ՝ 5 քայլ (նկարներով)
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:45
Այս նախագիծն անցնում է այն գործընթացով, որով ես զբաղվում էի կատուների սննդի ավտոմատ ամանի ստեղծմամբ ՝ իմ տարեց շաքարախտով հիվանդ Չազ կատվի համար: Տեսեք, նա պետք է նախաճաշի նախքան ինսուլինը ստանալը, բայց ես հաճախ մոռանում եմ քնելուց առաջ վերցնել նրա ուտեստը, ինչը փչացնում է նրա ախորժակը և գցում է ինսուլինի ժամանակացույցը: Այս ուտեստը օգտագործում է սերվո շարժիչ `սննդի կափարիչը փակելու կեսգիշերից մինչև առավոտյան 7:30: NodeMCU ESP8266 միկրոկառավարիչի Arduino էսքիզը օգտագործում է Network Time Protocol (NTP) ՝ ժամանակացույցը վերահսկելու համար:
Այս նախագիծը կարող է հարմար չլինել երիտասարդ, ավելի ակտիվ կատուների համար: Չազն այնքան ծեր է և տկար, նա հակված չէ փորձել գավաթը բացել, բայց դա հնարավոր է:
Եթե դուք նորեկ եք Arduino- ում կամ ESP8266- ում, կարող եք օգտվել հետևյալ նախադրյալ ուղեցույցներից.
- Հրահանգներ Arduino դաս
- Instructables իրերի ինտերնետ դաս
Պարագաներ
- 3D տպիչ (ես օգտագործում եմ Creality CR-10s Pro)
- 3D տպիչի թել (ես օգտագործում եմ ոսկե PLA)
- NodeMCU ESP8266 wifi միկրոկոնտրոլեր
- USB մալուխ (A- ից microB)
- USB հոսանքի ադապտեր
- Միկրո servo շարժիչ
- Փոքր պտուտակահան և պտուտակներ
- Միացման մետաղալար
- Վերնագրի կապում
- Պերմա-նախատախտակ
Աշխատանքին հետևելու համար հետևեք ինձ YouTube- ում, Instagram- ում, Twitter- ում, Pinterest- ում և բաժանորդագրվեք իմ տեղեկագրին: Որպես Amazon Associate ես վաստակում եմ որակյալ գնումներից, որոնք դուք կատարում եք ՝ օգտագործելով իմ փոխկապակցված հղումները:
Քայլ 1: 3D տպագիր մասեր
Կատուների սննդի ամանի կրողը հիմնված է Արդի Լայի նախագծի վրա Thingiverse- ում: Ես այն ավելի մեծ դարձրեցի ՝ տեղավորելով իմ կատվի ամանը, և նաև այն ավելի կարճ դարձրեցի, քանի որ այն մեծացնելով այն չափազանց բարձր էր դարձրել: Ես ավելացրեցի միկրո սերվո շարժիչի պահարան և մի քանի անցք մալուխների համար դեպի ներս:
Ես մոդելավորեցի մի պարզ կափարիչ ՝ օգտագործելով Tinkercad- ը, որը նախատեսված է միկրո սերվոյի եղջյուրին ամրացնելու համար: Դուք կարող եք վերցնել իմ դիզայնը անմիջապես Tinkercad- ից և/կամ ներբեռնել այս քայլին կից STL- ները:
Ես տպագրեցի մասերը իմ Creality CR-10s Pro տպիչի վրա ՝ ոսկե PLA թելերով:
Բացահայտում. Այս գրառման պահին ես Autodesk- ի աշխատակից եմ, որը արտադրում է Tinkercad- ը:
Քայլ 2: Կցեք կափարիչը Servo Motor- ին
Ես փոքր հորատիչ օգտագործեցի սերվոյի եղջյուրի անցքերի չափը մեծացնելու համար, այնուհետև պտուտակներ օգտագործեցի սերվոն եռաչափ տպված կափարիչին ամրացնելու համար:
Քայլ 3. Կառուցեք NodeMCU ESP8266 միացում
Շղթան վերահսկվում է NodeMCU ESP8266 wifi միկրոկոնտրոլերի կողմից: Ես օգտագործել եմ վերնագրի կապում մշտական պրոտո տախտակի վրա, որպեսզի միկրո servo շարժիչը հեշտությամբ անջատելի լինի: Servo վերնագրերը միացված են NodeMCU- ին հետևյալ կերպ.
Դեղին servo մետաղալար `NodeMCU D1
Կարմիր սերվո լար `NodeMCU հզորություն (3V3 կամ VIN)
Սև servo մետաղալար ՝ NodeMCU հող (GND)
Քայլ 4: Վերբեռնեք Arduino ծածկագիրը և փորձարկումը
Տեղադրեք ձեր շարժիչի/կափարիչի հավաքածուն եռաչափ տպված մասի վրա, շարժիչի տեսքով կտրվածքի մեջ: Միացրեք շարժիչի վերնագիրը միկրոկառավարիչի տախտակի վերնագրի կապում և միացրեք համակարգիչը ձեր համակարգչին USB մալուխով:
Arduino- ի էսքիզը օգտագործում է Network Time Protocol- ը `ընթացիկ ժամանակը բերելու համար, այնուհետև բացում կամ փակում է կափարիչը` կոշտ ծածկագրված ժամանակացույցի համաձայն: Պատճենեք հետևյալ ծածկագիրը, թարմացրեք ձեր Wi -Fi հավատարմագրերը և UTC ժամանակի անջատումը և տեղադրեք այն ձեր NodeMCU տախտակին ՝ օգտագործելով Arduino IDE- ն:
#ներառում
#ներառել #ներառել #ներառել 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; // ստեղծել servo օբյեկտ `servo- ն վերահսկելու համար // տասներկու servo օբյեկտ կարող է ստեղծվել տախտակների մեծ մասում int pos = 0; // փոփոխական, որպեսզի պահպանվի servo position void setup () {myservo.attach (5); // ամրացնում է servo 5 -րդ կապի Dka a1- ն servo օբյեկտին // լռելյայն բացել կափարիչը Serial.println («կափարիչը բացելը»); for (pos = 95; pos> = 0; pos -= 1) {// անցնում է 95 աստիճանից մինչև 0 աստիճան myservo.write (pos); // սերվոյին ասա, որ անցնի «pos» փոփոխականի հետաձգման դիրքը (15); // սպասում է 15 ms, մինչև servo- ն հասնի դիրքի} Serial.begin (115200); // Սկսեք սերիական հաղորդակցությունը `համակարգչին ուշացումով հաղորդագրություններ ուղարկելու համար (10); Serial.println ("\ r / n"); startWiFi (); // Փորձեք միանալ որոշ տրված մուտքի կետերին: Այնուհետեւ սպասեք միացման startUDP (); եթե (! WiFi.hostByName (NTPServerName, timeServerIP)) {// Ստացեք NTP սերվերի IP հասցեն Serial.println ("DNS որոնումը ձախողվեց: Վերագործարկում"); Serial.flush (); ESP.reset (); } Serial.print ("serverամանակի սերվերի IP: / t"); Serial.println (timeServerIP); Serial.println ("\ r / n Ուղարկվում է NTP հարցում …"); sendNTPpacket (timeServerIP); } անստորագիր երկար ընդմիջում NTP = 60000; // Պահանջել NTP ժամանակ ամեն րոպե չստորագրված երկար prevNTP = 0; անստորագիր երկար վերջին NTPResponse = 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) ժամը, եթե (ժամանակ) {// Եթե նոր ժամադրոշմ է ստացվել ժամանակը UNIX = ժամանակը; Serial.print ("NTP պատասխան. / T"); Serial.println (timeUNIX); lastNTPResponse = ընթացիկ Միլիս; } else if ((currentMillis - lastNTPResponse)> 3600000) {Serial.println ("Վերջին NTP արձագանքից ավելի քան 1 ժամ. վերագործարկում"); Serial.flush (); ESP.reset (); } uint32_t actualTime = timeUNIX + (currentMillis - lastNTPResponse)/1000; uint32_t EasternTime = ժամանակ UNIX - 18000 + (ընթացիկ Միլիս - վերջին NTPResponse)/1000; եթե (actualTime! = prevActualTime && timeUNIX! = 0) {// Եթե վերջին տպագրությունից մեկ վայրկյան է անցել prevActualTime = actualTime; Serial.printf ("\ rUTC ժամանակը: / 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 («կափարիչի բացում»); for (pos = 95; pos> = 0; pos -= 1) {// անցնում է 95 աստիճանից մինչև 0 աստիճան myservo.write (pos); // սերվոյին ասա, որ անցնի «pos» փոփոխականի հետաձգման դիրքը (15); // սպասում է 15 ms սերվոյին պաշտոնին հասնելու համար}} // կեսգիշեր, եթե (getHours (eastTime) == 0 && getMinutes (eastTime) == 0 && getSeconds (eastTime) == 0) {// փակեք կափարիչը Serial. println («կափարիչը փակելը»); համար (pos = 0; pos <= 95; pos += 1) {// անցնում է 0 աստիճանից մինչև 95 աստիճան // 1 աստիճանի քայլերով myservo.write (pos); // սերվոյին ասա, որ անցնի «pos» փոփոխականի հետաձգման դիրքը (15); // սպասում է 15 ms սերվոյին դիրքի հասնելու համար}} /* // փորձարկում, եթե (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 ms, մինչև servo- ն հասնի դիրքի}} */} 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 ()); // Ուղարկեք ESP8266- ի IP հասցեն համակարգչին 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); // կարդալ փաթեթը բուֆերի մեջ // Համատեղել 4 ժամաչափի բայթը մեկ 32 բիթանոց համարի մեջ uint32_t NTPTime = (NTPBuffer [40] << 24) | (NTPBuffer [41] << 16) | (NTPBuffer [42] << 8) | NTPBuffer [43]; // Փոխարկեք NTP ժամանակը UNIX- ի ժամանակացույցի: // Unix- ի ժամանակը սկսվում է 1970 թ. Հունվարի 1 -ից: Դա NTP ժամանակում կազմում է 2208988800 վայրկյան. 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) {վերադարձ UNIXTime % 60; } inline int getMinutes (uint32_t UNIXTime) {վերադարձ UNIXTime / 60 % 60; } inline int getHours (uint32_t UNIXTime) {վերադարձ UNIXTime / 3600 % 24; }
Քայլ 5: Օգտագործեք այն:
Ուղղեք ձեր լարերը ամանի պահարանի ներսում և միացրեք ձեր կատվի սնուցողը վարդակից `օգտագործելով USB AC ադապտեր: Ինչպես պարզ կոդն է գրված, այն պետք է գործարկվի «բաց» վիճակում և կփոխի իր կափարիչի դիրքը միայն Arduino էսքիզում նշված ժամանակային շեմերին:
Շնորհակալություն հետևելու համար: Եթե դուք ինքներդ եք պատրաստում ձեր տարբերակը, ես կցանկանայի այն տեսնել ներքևում գտնվող «Ես պատրաստեցի» բաժնում:
Եթե ձեզ դուր է գալիս այս նախագիծը, ապա ձեզ կարող են հետաքրքրել իմ մյուսներից մի քանիսը.
- Պրիզմայի սեփականատեր Rիածանի դիմանկարների համար
- Նրբատախտակի պահեստային պատ Cat Tower- ով
- LED Mason Jar Lanterns (3D տպագիր կափարիչ)
- 3D տպիչի թելերի չոր տուփ
- Արտակարգ իրավիճակների USB էներգիայի աղբյուր (3D տպագիր)
- Փայլուն լուսադիոդային կոնֆետ
- Եռաչափ տպված երկրաչափական տնկիչ `ջրահեռացմամբ
- Եռաչափ տպված ծաղիկներ
- Ինչպես տեղադրել LED- ները սկուտերի տակ (Bluetooth- ով)
Աշխատանքին հետևելու համար հետևեք ինձ YouTube- ում, Instagram- ում, Twitter- ում և Pinterest- ում:
Խորհուրդ ենք տալիս:
JCN: Vector Equilibrium Food համակարգչային հայեցակարգ. 9 քայլ
JCN: Vector Equilibrium Food Computer Computer Concept. Մենք բացում ենք հոլովակի առաջիկա տեսահոլովակը " JCN և տիեզերագնացները; Epic Tale of Food and Fun in Outer Space ". Այն, ինչ ես հանեցի նախագծի տեսակոնֆերանսներից, այն է, որ մենք պետք է կենտրոնանանք տարածական հասկացությունների վրա և զվարճանք ունենանք: Ես ունեմ
Sad Cat Fixer, Catch -Me Cat Toy - Դպրոցական նախագիծ ՝ 3 քայլ
Sad Cat Fixer, Catch-Me Cat Toy-School Project. Ահա մեր արտադրանքը, դա ինտերակտիվ խաղալիք մուկ է. Catch-Me Cat Toy: Ահա այն խնդիրների ցանկը, որոնց բախվում են մեր հասարակության շատ կատուներ. Կատուներն այս օրերին դառնում են անգործուն և ընկճված, անելիք չունեն: Սեփականատերերի մեծ մասը զբաղված է աշխատանքով կամ դպրոցով և ձեր զբաղմունքով
Cat Food Bowl ծածկող սարք ՝ 4 քայլ
Cat Food Bowl Covering Device. Այս հրահանգը ստեղծվել է Հարավային Ֆլորիդայի համալսարանի Makecourse (www.makecourse.com) համալսարանի նախագծի պահանջի կատարման համար: Այս սարքը եղել է
Cat-a-way-Computer Vision Cat Sprinkler: 6 քայլ (նկարներով)
Cat -a -way - Համակարգչային տեսողություն Cat Sprinkler: Խնդիր. Կատուներն օգտագործում են ձեր այգին որպես զուգարան Լուծում - Շատ ժամանակ ծախսեք կատվի հեղուկացիրի ինժեներական աշխատանքների վրա `YouTube youtube- ի ավտոմատ բեռնման հնարավորությամբ: Սա քայլ առ քայլ չէ, այլ շինարարության ակնարկ: ծածկագիր#ՆախքանԿանչեսՊԵՏԱ - Կատուներն են
RFID NFC ARDUINO ACCESS CONTROL ՀԱՄԱԿԱՐԳ ՝ 3 քայլ
RFID NFC ARDUINO ACCESS CONTROL SYSTEM. Ինձ անհրաժեշտ էր մուտքի վերահսկման համակարգ իմ գրասենյակի համար: Ամբողջ նախագիծը կառուցելը բավականին հեշտ է: Ես տանը ունեի պահեստային Aduino Mega և Ethernet վահան, ուստի ևս մի քանի բաղադրիչով ունեմ կարողացա մուտքի վերահսկման համակարգ կառուցել իմ անջատվածի համար