Përmbajtje:

Kontrolli i Qasjes në Ushqimin e Cat (ESP8266 + Servo Motor + Printim 3D): 5 hapa (me fotografi)
Kontrolli i Qasjes në Ushqimin e Cat (ESP8266 + Servo Motor + Printim 3D): 5 hapa (me fotografi)

Video: Kontrolli i Qasjes në Ushqimin e Cat (ESP8266 + Servo Motor + Printim 3D): 5 hapa (me fotografi)

Video: Kontrolli i Qasjes në Ushqimin e Cat (ESP8266 + Servo Motor + Printim 3D): 5 hapa (me fotografi)
Video: Три бездомных котенка в черной машине. Чудеса случаются. 2024, Nëntor
Anonim
Image
Image
Kontrolli i Qasjes në Ushqimin e Cat (ESP8266 + Servo Motor + Printim 3D)
Kontrolli i Qasjes në Ushqimin e Cat (ESP8266 + Servo Motor + Printim 3D)

Ky projekt kalon mbi procesin që kam përdorur për të krijuar një tas të automatizuar të ushqimit të maceve, për macen time të moshuar diabetike Chaz. Shikoni, ai duhet të hajë mëngjes para se të marrë insulinë, por unë shpesh harroj të marr pjatën e tij para se të shkoj në shtrat, gjë që e prish oreksin e tij dhe e heq orarin e tij të insulinës. Kjo pjatë përdor një servo motor për të mbyllur një kapak mbi ushqimin midis orëve të mesnatës dhe 7:30 të mëngjesit. Skica Arduino e mikrokontrolluesit NodeMCU ESP8266 përdor Protokollin e Kohes së Rrjetit (NTP) për të kontrolluar orarin.

Ky projekt mund të mos jetë i përshtatshëm për macet më të reja, më aktive. Chaz është kaq i vjetër dhe i dobët, ai nuk është i prirur të përpiqet ta hapë tasin, por është e mundur.

Nëse jeni i ri në Arduino ose ESP8266, mund të shijoni udhëzuesit e mëposhtëm paraprak:

  • Udhëzues Klasa Arduino
  • Instructables Class of Internet of Things

Furnizimet

  • Printer 3D (Unë përdor një Creality CR-10s Pro)
  • Filament i printerit 3D (Unë jam duke përdorur PLA ari)
  • Mikrokontrollues wifi NodeMCU ESP8266
  • Kabllo USB (A në microB)
  • Përshtatës i energjisë USB
  • Mikro servo motor
  • Kaçavidë të vogël dhe vida
  • Teli lidhës
  • Kunjat e kokës
  • Tabela Perma-proto

Për të vazhduar me atë që po punoj, më ndiqni në YouTube, Instagram, Twitter, Pinterest dhe regjistrohuni në gazetën time. Si një Amazon Associate unë fitoj nga blerjet kualifikuese që bëni duke përdorur lidhjet e mia të filialeve.

Hapi 1: Pjesë të printuara në 3D

Pjesë të printuara 3D
Pjesë të printuara 3D
Pjesë të printuara 3D
Pjesë të printuara 3D

Mbajtësi i tasit të ushqimit për mace bazohet në modelin e Ardy Lai në Thingiverse. Unë e bëra atë më të madhe për të akomoduar tasin e maces time, dhe gjithashtu e bëra atë më të shkurtër pasi zmadhimi i tij e kishte bërë atë shumë të gjatë. Shtova një mbajtës për një mikro servo motor, dhe disa vrima për kabllot që të kalojnë në brendësi.

Kam modeluar një kapak të thjeshtë duke përdorur Tinkercad, i krijuar për t'u ngjitur në bririn e mikro servos. Ju mund të kapni modelin tim direkt nga Tinkercad dhe/ose të shkarkoni STL -të e bashkangjitura në këtë hap.

I printova pjesët në printerin tim Creality CR-10s Pro me fije të artë PLA.

Zbulimi: në kohën e këtij shkrimi, unë jam një punonjës i Autodesk, i cili bën Tinkercad.

Hapi 2: Lidheni kapakun me Servo Motor

Bashkangjitni kapakun në Servo Motor
Bashkangjitni kapakun në Servo Motor
Bashkangjitni kapakun në Servo Motor
Bashkangjitni kapakun në Servo Motor

Kam përdorur një stërvitje të vogël për të rritur madhësinë e vrimave në bririn e servo, pastaj kam përdorur vida për të bashkuar servo në kapakun e printuar 3D.

Hapi 3: Ndërtoni qarkun NodeMCU ESP8266

Ndërtoni qarkun NodeMCU ESP8266
Ndërtoni qarkun NodeMCU ESP8266
Ndërtoni qarkun NodeMCU ESP8266
Ndërtoni qarkun NodeMCU ESP8266
Ndërtoni qarkun NodeMCU ESP8266
Ndërtoni qarkun NodeMCU ESP8266
Ndërtoni qarkun NodeMCU ESP8266
Ndërtoni qarkun NodeMCU ESP8266

Qarku kontrollohet nga një mikrokontrollues wifi NodeMCU ESP8266. Kam përdorur kunjat e kokës në një tabelë perma-proto për ta bërë mikro servo motorin lehtësisht të ndashëm. Kokat e servo janë të lidhura me NodeMCU si më poshtë:

Servo tela e verdhë: NodeMCU D1

Servo tela e kuqe: Fuqia NodeMCU (3V3 ose VIN)

Servo tela e zezë: NodeMCU toka (GND)

Hapi 4: Ngarko kodin dhe provën Arduino

Ngarko kodin dhe testin Arduino
Ngarko kodin dhe testin Arduino

Instaloni montimin e motorit/kapakut tuaj në prerjen në formë motori në pjesën e mbajtësit të tasit të printuar 3D. Lidheni kokën e motorit në kunjat e kokës së bordit të mikrokontrolluesit dhe lidhni qarkun në kompjuterin tuaj me një kabllo USB.

Skica Arduino përdor Protokollin e Kohës së Rrjetit për të marrë kohën aktuale dhe më pas hap ose mbyll kapakun sipas një programi të koduar. Kopjoni kodin e mëposhtëm, përditësoni kredencialet tuaja wifi dhe kompensimin e kohës UTC dhe ngarkojeni atë në bordin tuaj NodeMCU duke përdorur Arduino IDE.

#përfshi

#include #include #include ESP8266WiFiMulti wifiMulti; // Krijoni një shembull të klasës ESP8266WiFiMulti, të quajtur 'wifiMulti' WiFiUDP UDP; // Krijoni një shembull të klasës WiFiUDP për të dërguar dhe marrë IPAddress timeServerIP; // time.nist.gov Adresa e serverit NTP const char* NTPServerName = "time.nist.gov"; const int NTP_PACKET_SIZE = 48; // Vula kohore NTP është në 48 bajtët e parë të bajtit të mesazhit NTPBuffer [NTP_PACKET_SIZE]; // tampon për të mbajtur paketat hyrëse dhe dalëse Servo myservo; // krijoni një servo objekt për të kontrolluar një servo // dymbëdhjetë servo objekte mund të krijohen në shumicën e bordeve int pos = 0; // ndryshore për të ruajtur pozicionin servo void setup () {myservo.attach (5); // bashkon servon në pin 5 aka D1 në objektin servo // hap kapakun sipas parazgjedhjes Serial.println ("hapja e kapakut"); për (pos = 95; pos> = 0; pos -= 1) {// shkon nga 95 gradë në 0 gradë myservo.shkruaj (pos); // thuaji servo -s të shkojë në pozicionin në ndryshoren 'pos' vonesë (15); // pret 15ms që servo të arrijë pozicionin} Serial.filloj (115200); // Filloni komunikimin serik për të dërguar mesazhe në vonesën e kompjuterit (10); Serial.println ("\ r / n"); startWiFi (); // Mundohuni të lidheni me disa pika aksesi të dhëna. Pastaj prisni një lidhje startUDP (); nëse (! WiFi.hostByName (NTPServerName, timeServerIP)) {// Merrni adresën IP të serverit NTP Serial.println ("Kërkimi i DNS dështoi. Rinisja."); Serial.flush (); ESP.reset (); } Serial.print ("IP serveri i kohës: / t"); Serial.println (timeServerIP); Serial.println ("\ r / nDërgimi i kërkesës NTP …"); sendNTPpacket (timeServerIP); } interval i gjatë i panënshkruarNTP = 60000; // Kërkoni kohë NTP çdo minutë të pa nënshkruar prevNTP të gjatë = 0; pa shenjë e gjatëNTPResponse = millis (); uint32_t koha UNIX = 0; kohë e pa nënshkruar prevActualTime = 0; lak void () {rrymë e gjatë e panënshkruarMillis = millis (); if (currentMillis - prevNTP> intervalNTP) {// Nëse ka kaluar një minutë nga kërkesa e fundit NTP prevNTP = currentMillis; Serial.println ("\ r / nDërgimi i kërkesës për NTP …"); sendNTPpacket (timeServerIP); // Dërgo një kërkesë NTP} uint32_t time = getTime (); // Kontrolloni nëse ka ardhur një përgjigje NTP dhe merrni kohën (UNIX) nëse (koha) {// Nëse është marrë një afat kohor i ri UNIX = koha; Serial.print ("Përgjigja NTP: / t"); Serial.println (koha UNIX); lastNTPResponse = aktualeMillis; } else if ((currentMillis - lastNTPResponse)> 3600000) {Serial.println ("Më shumë se 1 orë nga përgjigja e fundit NTP. Rinisja."); Serial.flush (); ESP.reset (); } uint32_t aktualeTime = koha UNIX + (aktualeMillis - lastNTPResponse)/1000; uint32_t EasternTime = koha UNIX - 18000 + (aktualeMillis - lastNTPResponse)/1000; nëse (Koha aktuale! = koha paraprake &&UNIX! = 0) {// Nëse ka kaluar një sekondë nga printimi i fundit prevActualTime = koha aktuale; Serial.printf ("\ rUTC time: / t%d:%d:%d", getHours (koha aktuale), getMinutes (aktualTime), getSeconds (koha aktuale)); Serial.printf ("\ rEST (-5): / t%d:%d:%d", getHours (EasternTime), getMinutes (EasternTime), getSeconds (EasternTime)); Serial.println (); } // 7:30 e mëngjesit nëse (getHours (EasternTime) == 7 && getMinutes (EasternTime) == 30 && getSeconds (EasternTime) == 0) {// hapni kapakun Serial.println ("hapja e kapakut"); për (pos = 95; pos> = 0; pos -= 1) {// shkon nga 95 gradë në 0 gradë myservo.shkruaj (pos); // thuaji servo -s të shkojë në pozicionin në ndryshoren 'pos' vonesë (15); // pret 15ms që servo të arrijë pozicionin}} // mesnatë nëse (getHours (EasternTime) == 0 && getMinutes (EasternTime) == 0 && getSeconds (EasternTime) == 0) {// mbyll kapakun Serial. println ("mbyllja e kapakut"); për (pos = 0; pos <= 95; pos += 1) {// shkon nga 0 gradë në 95 gradë // në hapa 1 shkallë myservo.shkruaj (pos); // thuaji servo -s të shkojë në pozicionin në ndryshoren 'pos' vonesë (15); // pret 15ms që servo të arrijë pozicionin}} /* // testimi nëse (getHours (EasternTime) == 12 && getMinutes (EasternTime) == 45 && getSeconds (EasternTime) == 0) {// mbyllni kapakun Serial.println ("mbyllja e kapakut"); për (pos = 0; pos = 0; pos -= 1) {// shkon nga 95 gradë në 0 gradë myservo.shkruaj (pos); // thuaji servo -s të shkojë në pozicionin në ndryshoren 'pos' vonesë (15); // pret 15ms që servo të arrijë pozicionin}} */} void startWiFi () {// Përpiquni të lidheni me disa pika të dhëna aksesi. Pastaj prisni për një lidhje wifiMulti.addAP ("ssid_from_AP_1", "your_password_for_AP_1"); // shtoni rrjete Wi-Fi me të cilat dëshironi të lidheni //wifiMulti.addAP("ssid_from_AP_2 "," your_password_for_AP_2 "); //wifiMulti.addAP("ssid_from_AP_3 "," your_password_for_AP_3 "); Serial.println ("Lidhja"); ndërsa (wifiMulti.run ()! = WL_CONNECTED) {// Prisni që Wi-Fi të lidhet me vonesë (250); Serial.print ('.'); } Serial.println ("\ r / n"); Serial.print ("I lidhur me"); Serial.println (WiFi. SSID ()); // Na tregoni se me cilin rrjet jemi lidhur me Serial.print ("Adresa IP: / t"); Serial.print (WiFi.localIP ()); // Dërgoni adresën IP të ESP8266 në kompjuterin Serial.println ("\ r / n"); } void startUDP () {Serial.println ("Fillimi i UDP"); UDP.filloj (123); // Filloni të dëgjoni mesazhet UDP në portin 123 Serial.print ("Porti lokal: / t"); Serial.println (UDP.localPort ()); Serial.println (); } uint32_t getTime () {if (UDP.parsePacket () == 0) {// Nëse nuk ka përgjigje (ende) kthe 0; } UDP.read (NTPBuffer, NTP_PACKET_SIZE); // lexoni paketën në tampon // Kombinoni 4 bytes të kohëzgjatjes në një numër 32-bit uint32_t NTPTime = (NTPBuffer [40] << 24) | (NTPBuffer [41] << 16) | (NTPBuffer [42] << 8) | NTPBuffer [43]; // Shndërroni kohën NTP në një etiketë kohore UNIX: // Koha Unix fillon më 1 Janar 1970. Kjo është 2208988800 sekonda në kohën NTP: const uint32_t shtatëdhjetë Vite = 2208988800UL; // zbres shtatëdhjetë vjet: uint32_t UNIXTime = NTPTime - shtatëdhjetëYears; kthimi UNIXTime; } void sendNTPpacket (IPAdresa & adresa) {memset (NTPBuffer, 0, NTP_PACKET_SIZE); // vendosni të gjithë bajtët në tampon në 0 // Filloni vlerat e nevojshme për të formuar kërkesën NTP NTPBuffer [0] = 0b11100011; // LI, Versioni, Modaliteti // dërgoni një paketë duke kërkuar një afat kohor: UDP.beginPacket (adresa, 123); // Kërkesat NTP duhet të futen në portin 123 UDP.write (NTPBuffer, NTP_PACKET_SIZE); UDP.endPacket (); } inline int getSeconds (uint32_t UNIXTime) {return UNIXTime % 60; } inline int getMinutes (uint32_t UNIXTime) {kthimi UNIXTime / 60 % 60; } inline int getHours (uint32_t UNIXTime) {return UNIXTime / 3600 % 24; }

Hapi 5: Përdoreni

Perdore!
Perdore!
Perdore!
Perdore!

Kaloni telat në pjesën e brendshme të mbajtësit të tasit dhe futeni ushqyesin tuaj të maceve në një prizë duke përdorur një përshtatës USB AC. Mënyra se si është shkruar kodi i thjeshtë, ka për qëllim të fillojë në gjendjen "e hapur" dhe do të ndryshojë pozicionin e kapakut vetëm në pragjet e kohës të përcaktuara në skicën Arduino.

Faleminderit që na ndoqët! Nëse e bëni versionin tuaj, do të më pëlqente ta shihja atë në seksionin Unë e bëra më poshtë!

Nëse ju pëlqen ky projekt, mund të jeni të interesuar për disa nga të tjerët e mi:

  • Mbajtës i Prismit për Portrete të Ylberit
  • Muri i Magazinimit të Kompensatës me Cat Tower
  • Fenerë LED Mason Jar (kapak i printuar 3D)
  • Kuti e Filamentit të Printerit 3D të Thatë
  • Burimi i energjisë i urgjencës USB (i printuar në 3D)
  • Karamele me shkëlqim LED me shkëlqim
  • Mbjellës Gjeometrik i Shtypur 3D Me Kullim
  • Lule të ndezura me printim 3D
  • Si të instaloni LED nën një skuter (me Bluetooth)

Për të vazhduar me atë që po punoj, më ndiqni në YouTube, Instagram, Twitter dhe Pinterest.

Recommended: