Sisukord:

Kassitoidu juurdepääsu kontroll (ESP8266 + servomootor + 3D -printimine): 5 sammu (koos piltidega)
Kassitoidu juurdepääsu kontroll (ESP8266 + servomootor + 3D -printimine): 5 sammu (koos piltidega)

Video: Kassitoidu juurdepääsu kontroll (ESP8266 + servomootor + 3D -printimine): 5 sammu (koos piltidega)

Video: Kassitoidu juurdepääsu kontroll (ESP8266 + servomootor + 3D -printimine): 5 sammu (koos piltidega)
Video: Kuidas Mehed Rannas Naisi Sebivad 2024, Juuni
Anonim
Image
Image
Kassitoidu juurdepääsu kontroll (ESP8266 + servomootor + 3D -printimine)
Kassitoidu juurdepääsu kontroll (ESP8266 + servomootor + 3D -printimine)

See projekt hõlmab protsessi, mida kasutasin automatiseeritud kassitoidu kausi loomiseks oma eakale diabeetilisele kassile Chaz. Vaadake, ta peab enne insuliini saamist hommikusööki sööma, kuid sageli unustan ma enne magamaminekut tema toidunõu kätte, mis rikub tema isu ja loobub insuliinigraafikust. See roog kasutab servomootorit toiduainete kaane sulgemiseks kesköö ja 7.30 vahel. NodeMCU ESP8266 mikrokontrolleri Arduino visand kasutab ajakava juhtimiseks võrguajaprotokolli (NTP).

See projekt ei pruugi sobida noorematele, aktiivsematele kassidele. Chaz on nii vana ja nõrk, et ta ei kipu kaussi lahti lööma, kuid see on võimalik.

Kui olete Arduino või ESP8266 uus kasutaja, võite nautida järgmisi eeltingimuste juhiseid:

  • Juhitavad Arduino klass
  • Juhendatavate asjade Interneti klass

Tarvikud

  • 3D-printer (kasutan Creality CR-10s Pro)
  • 3D -printeri hõõgniit (ma kasutan kuldset PLA -d)
  • NodeMCU ESP8266 wifi mikrokontroller
  • USB -kaabel (A kuni microB)
  • USB toiteadapter
  • Mikroservomootor
  • Väike kruvikeeraja ja kruvid
  • Ühendusjuhe
  • Päise tihvtid
  • Perma-proto plaat

Tööga kursis hoidmiseks jälgige mind YouTube'is, Instagramis, Twitteris, Pinterestis ja tellige minu uudiskiri. Amazoni sidusettevõttena teenin kvalifitseeritud ostudest, mille teete minu sidusettevõtte linkide abil.

Samm: 3D -prinditud osad

3D trükitud osad
3D trükitud osad
3D trükitud osad
3D trükitud osad

Kassitoidu kausihoidja põhineb Ardy Lai disainil Thingiverse'is. Tegin selle suuremaks, et mahutada oma kassi kauss, ja muutsin selle ka lühemaks, kuna selle suurendamine oli selle liiga kõrgeks muutnud. Lisasin mikro -servomootori hoidja ja paar auku kaablite jaoks, et neid sisemusse suunata.

Ma modelleerisin Tinkercadi abil lihtsa kaane, mis oli mõeldud kinnitamiseks mikroservo sarve külge. Saate minu disaini hankida otse Tinkercadist ja/või alla laadida sellele sammule lisatud STL -id.

Prindisin osad kuldse PLA hõõgniidiga oma Creality CR-10s Pro printerile.

Avalikustamine: selle kirjutamise ajal olen Tinkercadi tootva Autodeski töötaja.

Samm: kinnitage servomootorile kaas

Kinnitage servomootorile kaas
Kinnitage servomootorile kaas
Kinnitage servomootorile kaas
Kinnitage servomootorile kaas

Kasutasin väikest puurit, et suurendada servosarva avade suurust, seejärel kasutasin kruvisid servo kinnitamiseks 3D -prinditud kaane külge.

Samm: ehitage NodeMCU ESP8266 ahel

Ehitage NodeMCU ESP8266 ahel
Ehitage NodeMCU ESP8266 ahel
Ehitage NodeMCU ESP8266 ahel
Ehitage NodeMCU ESP8266 ahel
Ehitage NodeMCU ESP8266 ahel
Ehitage NodeMCU ESP8266 ahel
Ehitage NodeMCU ESP8266 ahel
Ehitage NodeMCU ESP8266 ahel

Ahelat juhib NodeMCU ESP8266 wifi mikrokontroller. Ma kasutasin päise tihvte perma-proto plaadil, et muuta mikropervomootor kergesti eemaldatavaks. Servo päised ühendatakse NodeMCU-ga järgmiselt:

Kollane servotraat: NodeMCU D1

Punane servotraat: sõlme MCU toide (3V3 või VIN)

Must servotraat: NodeMCU maandus (GND)

Samm: laadige Arduino kood ja test üles

Laadige Arduino kood ja test üles
Laadige Arduino kood ja test üles

Paigaldage oma mootori/kaane komplekt kausihoidiku 3D-prinditud osa mootorikujulisse väljalõigetesse. Ühendage mootori päis mikrokontrolleri plaadi päisepistikutega ja ühendage ahel arvutiga USB -kaabli abil.

Arduino visand kasutab praeguse aja toomiseks võrguajaprotokolli ja seejärel avab või sulgeb kaane vastavalt rangelt kodeeritud ajakavale. Kopeerige järgmine kood, värskendage oma wifi mandaati ja UTC ajanihet ning laadige see Arduino IDE abil üles oma NodeMCU tahvlile.

#kaasake

#kaasama #sisalda #sisalda ESP8266WiFiMulti wifiMulti; // Loo ESP8266WiFiMulti klassi eksemplar, nimega 'wifiMulti' WiFiUDP UDP; // Loo WiFiUDP klassi eksemplar, et saata ja vastu võtta IPAddress timeServerIP; // time.nist.gov NTP -serveri aadress const char* NTPServerName = "time.nist.gov"; const int NTP_PACKET_SIZE = 48; // NTP ajatempel on sõnumi esimese 48 baidi baidis NTPBuffer [NTP_PACKET_SIZE]; // puhver sissetulevate ja väljaminevate pakettide hoidmiseks Servo myservo; // servo -objekti loomine servo juhtimiseks // enamikule tahvlitele saab luua kaksteist servo -objekti int pos = 0; // muutuja servoasendi salvestamiseks void setup () {myservo.attach (5); // kinnitab tihvti 5 aka D1 servoobjektile servo // avage kaas vaikimisi Serial.println ("kaane avamine"); for (pos = 95; pos> = 0; pos -= 1) {// läheb 95 kraadilt 0 kraadini myservo.write (pos); // käsib servol minna asendisse muutuja 'pos' delay (15); // ootab 15 ms, kuni servo jõuab asendisse} Serial.begin (115200); // Käivitage jadaühendus sõnumite saatmiseks arvutisse viivitus (10); Serial.println ("\ r / n"); startWiFi (); // Proovige luua ühendus mõne antud pääsupunktiga. Seejärel oodake ühenduse käivitamistUDP (); if (! WiFi.hostByName (NTPServerName, timeServerIP)) {// Hankige NTP -serveri Serial.println IP -aadress ("DNS -i otsing ebaõnnestus. Taaskäivitamine."); Serial.flush (); ESP.reset (); } Serial.print ("Ajaserveri IP: / t"); Serial.println (timeServerIP); Serial.println ("\ r / nNTP -päringu saatmine …"); sendNTPpacket (timeServerIP); } allkirjastamata pikk intervallNTP = 60000; // Taotle NTP aega iga minut allkirjastamata pikk prevNTP = 0; allkirjastamata pikk lastNTPResponse = millis (); uint32_t timeUNIX = 0; allkirjastamata pikk prevActualTime = 0; void loop () {unsigned long currentMillis = millis (); if (currentMillis - prevNTP> intervalNTP) {// Kui minut on möödunud viimasest NTP -päringust prevNTP = currentMillis; Serial.println ("\ r / nNTP -päringu saatmine …"); sendNTPpacket (timeServerIP); // NTP päringu saatmine} uint32_t time = getTime (); // Kontrollige, kas NTP vastus on saabunud ja hankige (UNIX) aeg, kui (aeg) {// Kui uus ajatempel on vastu võetud timeUNIX = time; Serial.print ("NTP vastus: / t"); Serial.println (timeUNIX); lastNTPResponse = currentMillis; } else if ((currentMillis - lastNTPResponse)> 3600000) {Serial.println ("Rohkem kui 1 tund pärast viimast NTP vastust. Taaskäivitamine."); Serial.flush (); ESP.reset (); } uint32_t tegelik aeg = aegUNIX + (currentMillis - lastNTPResponse)/1000; uint32_t eastTime = timeUNIX - 18000 + (currentMillis - lastNTPResponse)/1000; if (tegelik aeg! = prevActualTime && timeUNIX! = 0) {// Kui sekund on möödunud viimasest printimisest prevActualTime = tegelik aeg; Serial.printf ("\ rUTC aeg: / t%d:%d:%d", getHours (tegelik aeg), getMinutes (tegelik aeg), getSeconds (tegelik aeg)); Serial.printf ("\ rEST (-5): / t%d:%d:%d", getHours (eastTime), getMinutes (eastTime), getSeconds (eastTime)); Serial.println (); } // 7:30 am if (getHours (eastTime) == 7 && getMinutes (eastTime) == 30 && getSeconds (eastTime) == 0) {// avage kaas Serial.println ("kaane avamine"); for (pos = 95; pos> = 0; pos -= 1) {// läheb 95 kraadilt 0 kraadini myservo.write (pos); // käsib servol minna asendisse muutuja 'pos' delay (15); // ootab 15 ms, kuni servo jõuab asendisse}} // kesköö, kui (getHours (eastTime) == 0 && getMinutes (eastTime) == 0 && getSeconds (eastTime) == 0) {// sulge kaas Serial. println ("kaane sulgemine"); jaoks (pos = 0; pos <= 95; pos += 1) {// läheb 0 kraadist 95 kraadini // 1 -kraadiste sammudega myservo.write (pos); // käsib servol minna asendisse muutuja 'pos' delay (15); // ootab 15 ms, kuni servo jõuab asendisse}} /* // katsetame, kas (getHours (eastTime) == 12 && getMinutes (eastTime) == 45 && getSeconds (eastTime) == 0) {// sulgege kaas Serial.println ("kaane sulgemine"); jaoks (pos = 0; pos = 0; pos -= 1) {// läheb 95 kraadilt 0 kraadini myservo.write (pos); // käsib servol minna asendisse muutuja 'pos' delay (15); // ootab 15 ms, kuni servo jõuab asendisse}} */} void startWiFi () {// Proovige luua ühendus mõne antud pääsupunktiga. Seejärel oodake ühenduse loomist wifiMulti.addAP ("ssid_from_AP_1", "your_password_for_AP_1"); // lisage WiFi-võrgud, millega soovite ühenduse luua //wifiMulti.addAP("ssid_from_AP_2 "," your_password_for_AP_2 "); //wifiMulti.addAP("ssid_from_AP_3 "," your_password_for_AP_3 "); Serial.println ("Ühendamine"); while (wifiMulti.run ()! = WL_CONNECTED) {// Oodake Wi-Fi ühendamise viivitust (250); Serial.print ('.'); } Serial.println ("\ r / n"); Serial.print ("Ühendatud"); Serial.println (WiFi. SSID ()); // Öelge meile, millise võrguga oleme ühendatud Serial.print ("IP -aadress: / t"); Serial.print (WiFi.localIP ()); // Saada ESP8266 IP -aadress arvutisse Serial.println ("\ r / n"); } void startUDP () {Serial.println ("UDP käivitamine"); UDP.algus (123); // Alusta UDP -sõnumite kuulamist pordil 123 Serial.print ("Kohalik port: / t"); Serial.println (UDP.localPort ()); Serial.println (); } uint32_t getTime () {if (UDP.parsePacket () == 0) {// Kui vastust pole (veel), tagastage 0; } UDP.read (NTPBuffer, NTP_PACKET_SIZE); // paketi lugemine puhvrisse // Kombineeri 4 ajatempli baiti üheks 32-bitiseks numbriks uint32_t NTPTime = (NTPBuffer [40] << 24) | (NTP -puhver [41] << 16) | (NTP -puhver [42] << 8) | NTPBuffer [43]; // Teisenda NTP aeg UNIXi ajatempliks: // Unixi aeg algab 1. jaanuaril 1970. See on 2208988800 sekundit NTP aja järgi: const uint32_t sevenyYears = 2208988800UL; // lahutage seitsekümmend aastat: uint32_t UNIXTime = NTPTime - sevenyYears; tagasta UNIXTime; } void sendNTPpacket (IPAddress & address) {memset (NTPBuffer, 0, NTP_PACKET_SIZE); // määrake puhveris kõik baidid väärtusele 0 // NTP -päringu vormistamiseks vajalike väärtuste initsialiseerimine NTPBuffer [0] = 0b11100011; // LI, versioon, režiim // ajapakki nõudva paketi saatmine: UDP.beginPacket (aadress, 123); // NTP -päringud on porti 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; }

Samm: kasutage seda

Kasuta seda!
Kasuta seda!
Kasuta seda!
Kasuta seda!

Viige oma juhtmed kausihoidiku sisemusse ja ühendage oma kassi toitja USB vahelduvvooluadapteri abil pistikupessa. Lihtsa koodi kirjutamise viis on mõeldud käivitamiseks avatud olekus ja see muudab kaane asendit ainult Arduino visandis määratud ajalävedel.

Aitäh, et jälgite! Kui teete oma versiooni, tahaksin seda näha allolevas jaotises Mina tegin!

Kui teile see projekt meeldib, võite olla huvitatud mõnest mu projektist:

  • Prismahoidja vikerkaareportreede jaoks
  • Vineerist hoiusein kassitorniga
  • LED Mason Jar Lanternid (3D trükitud kaas)
  • 3D -printeri hõõgniidi kuivkarp
  • Emergency USB toiteallikas (3D trükitud)
  • Hõõguv LED kummikomm
  • 3D -trükitud geomeetriline külvik koos drenaažiga
  • Hõõguvad 3D -trükitud lilled
  • Kuidas paigaldada LED -id rolleri alla (Bluetoothiga)

Tööga kursis hoidmiseks jälgige mind YouTube'is, Instagramis, Twitteris ja Pinterestis.

Soovitan: