Mundarija:

Mushuklarning oziq -ovqat mahsulotlariga kirishni boshqarish (ESP8266 + Servo dvigatel + 3D bosib chiqarish): 5 qadam (rasmlar bilan)
Mushuklarning oziq -ovqat mahsulotlariga kirishni boshqarish (ESP8266 + Servo dvigatel + 3D bosib chiqarish): 5 qadam (rasmlar bilan)

Video: Mushuklarning oziq -ovqat mahsulotlariga kirishni boshqarish (ESP8266 + Servo dvigatel + 3D bosib chiqarish): 5 qadam (rasmlar bilan)

Video: Mushuklarning oziq -ovqat mahsulotlariga kirishni boshqarish (ESP8266 + Servo dvigatel + 3D bosib chiqarish): 5 qadam (rasmlar bilan)
Video: Mushuklar qisqichbaqalarni yaxshi ko'radimi? 2024, Noyabr
Anonim
Image
Image
Mushuklarning oziq -ovqat mahsulotlariga kirishni boshqarish (ESP8266 + Servo dvigatel + 3D bosib chiqarish)
Mushuklarning oziq -ovqat mahsulotlariga kirishni boshqarish (ESP8266 + Servo dvigatel + 3D bosib chiqarish)

Bu loyiha men qandli diabetga chalingan keksa mushuk Chaz uchun avtomatlashtirilgan mushuk uchun ovqat kosasini yaratish jarayonini o'z ichiga oladi. Qarang, u insulin qabul qilishdan oldin nonushta qilishi kerak, lekin men yotishdan oldin uning taomini olishni unutaman, bu uning ishtahasini buzadi va insulin jadvalini buzadi. Bu taom servo dvigateldan foydalanib, yarim tunda va ertalabki 7:30 da oziq -ovqat qopqog'ini yopadi. NodeMCU ESP8266 mikrokontrollerining Arduino eskizi jadvalni boshqarish uchun Tarmoq vaqti protokolidan (NTP) foydalanadi.

Bu loyiha yosh, faol mushuklar uchun mos kelmasligi mumkin. Chaz juda keksa va zaif, u piyolani ochishga urinmaydi, lekin mumkin.

Agar siz Arduino yoki ESP8266 -da yangi bo'lsangiz, sizga quyidagi ko'rsatmalar kerak bo'ladi:

  • Arduino sinf uchun ko'rsatmalar
  • O'qitiladigan narsalar Internet -klassi

Ta'minotlar

  • 3D printer (men Creality CR-10s Pro dan foydalanaman)
  • 3D printerli filament (men oltin PLA ishlataman)
  • NodeMCU ESP8266 Wi -Fi mikrokontroller
  • USB kabeli (A dan microBgacha)
  • USB quvvat adapteri
  • Mikro servo dvigatel
  • Kichik tornavida va vintlardek
  • Ulanish simlari
  • Sarlavha pinlari
  • Perma-proto taxtasi

Men ishlayotgan narsadan xabardor bo'lish uchun meni YouTube, Instagram, Twitter, Pinterest -da kuzatib boring va mening axborot byulletenimga obuna bo'ling. Amazon Associate sifatida men sheriklik havolalarim orqali qilgan xaridlaringizdan daromad olaman.

1 -qadam: 3D bosilgan qismlar

3D bosilgan qismlar
3D bosilgan qismlar
3D bosilgan qismlar
3D bosilgan qismlar

Mushuklar uchun ovqat idishi ushlagichi Ardi Layning Thingiverse dizayniga asoslangan. Men mushukning kosasini joylashtirish uchun uni kattaroq qilib qo'ydim, shuningdek uni qisqartirdim, chunki uni kattalashtirish uni juda baland qilib qo'ydi. Men mikro servo dvigatel uchun tutqichni va kabellarni ichkariga yo'naltirish uchun bir nechta teshik qo'shdim.

Men mikro servo shoxiga mahkamlash uchun mo'ljallangan Tinkercad yordamida oddiy qopqoqni modellashtirdim. Siz mening dizaynimni to'g'ridan -to'g'ri Tinkercad -dan olishingiz mumkin va/yoki ushbu bosqichga biriktirilgan STL -larni yuklab olishingiz mumkin.

Men qismlarini oltindan yasalgan PLA filamentli Creality CR-10s Pro printerimda chop etdim.

Oshkor qilish: bu yozuv yozilganda men Tinkercad ishlab chiqaradigan Autodesk xodimiman.

2 -qadam: Qopqoqni servo dvigatelga ulang

Qopqoqni servo dvigatelga ulang
Qopqoqni servo dvigatelga ulang
Qopqoqni servo dvigatelga ulang
Qopqoqni servo dvigatelga ulang

Men servo shoxidagi teshiklar hajmini oshirish uchun kichik matkap ishlatardim, keyin servo 3D bosilgan qopqog'iga mahkamlash uchun vintlar yordamida.

3 -qadam: NodeMCU ESP8266 sxemasini yarating

NodeMCU ESP8266 sxemasini yarating
NodeMCU ESP8266 sxemasini yarating
NodeMCU ESP8266 sxemasini yarating
NodeMCU ESP8266 sxemasini yarating
NodeMCU ESP8266 sxemasini yarating
NodeMCU ESP8266 sxemasini yarating
NodeMCU ESP8266 sxemasini yarating
NodeMCU ESP8266 sxemasini yarating

O'chirish NodeMCU ESP8266 Wi -Fi mikrokontroller tomonidan boshqariladi. Men mikro-servo dvigatelni osonlik bilan ajratib olish uchun perma-proto taxtasida bosh pinlarini ishlatardim, servo sarlavhalar NodeMCU ga quyidagicha ulangan:

Sariq servo sim: NodeMCU D1

Qizil servo sim: NodeMCU quvvati (3V3 yoki VIN)

Qora servo sim: NodeMCU tuproqli (GND)

4 -qadam: Arduino kodini va sinovini yuklang

Arduino kodini va sinovini yuklang
Arduino kodini va sinovini yuklang

Dvigatel/qopqoq moslamasini 3D bosilgan idishning ushlagichidagi dvigatel shaklidagi bo'lakka o'rnating. Dvigatel sarlavhasini mikrokontrolder platasining bosh pimlariga ulang va elektronni kompyuterga USB kabeli bilan ulang.

Arduino eskizi joriy vaqtni olish uchun tarmoq vaqti protokolidan foydalanadi, so'ngra qattiq kodlangan jadvalga muvofiq qopqog'ini ochadi yoki yopadi. Quyidagi kodni nusxa ko'chiring, Wi -Fi ma'lumotlarini va UTC vaqtini o'zgartiring va Arduino IDE yordamida NodeMCU kartangizga yuklang.

#qo'shing

#kiritish #qo'shish #qo'shish ESP8266WiFiMulti wifiMulti; // "wifiMulti" WiFiUDP UDP deb nomlangan ESP8266WiFiMulti sinfining namunasini yarating; // IPAddress timeServerIP -ni yuborish va qabul qilish uchun WiFiUDP sinfining namunasini yarating; // time.nist.gov NTP server manzili const char* NTPServerName = "time.nist.gov"; const int NTP_PACKET_SIZE = 48; // NTP vaqt tamg'asi xabar baytining birinchi 48 baytida NTPBuffer [NTP_PACKET_SIZE]; // kiruvchi va chiquvchi paketlarni saqlash uchun bufer Servo myservo; // servo nazorat qilish uchun servo ob'ekt yaratish // o'n ikkita servo moslamani ko'pgina taxtalarda yaratish mumkin int pos = 0; // servo holatini saqlash uchun o'zgaruvchi void setup () {myservo.attach (5); // servo ob'ektga 5 aka D1 pinidagi servo biriktiriladi // sukut bo'yicha qopqog'ini oching Serial.println ("qopqog'ini ochish"); uchun (pos = 95; pos> = 0; pos -= 1) {// 95 darajadan 0 darajagacha boradi myservo.write (pos); // servo o'zgarmaydigan 'pos' kechikishidagi holatga o'tishini ayt (15); // servo holatiga yetguncha 15ms kutadi} Serial.begin (115200); // Kompyuterning kechikishiga xabar yuborish uchun ketma -ket muloqotni boshlang (10); Serial.println ("\ r / n"); startWiFi (); // Ba'zi kirish nuqtalariga ulanishga harakat qiling. Keyin ulanishni kutingUDP (); if (! WiFi.hostByName (NTPServerName, timeServerIP)) {// Serial.println NTP serverining IP manzilini oling ("DNS qidiruvi bajarilmadi. Qayta yuklanmoqda."); Serial.flush (); ESP.reset (); } Serial.print ("Vaqt serveri IP: / t"); Serial.println (timeServerIP); Serial.println ("\ r / nNTP so'rovi yuborilmoqda …"); sendNTPpacket (timeServerIP); } imzosiz uzoq intervalNTP = 60000; // NTP vaqtini har daqiqada so'rang imzosiz uzoq prevNTP = 0; imzosiz uzoq lastNTPResponse = millis (); uint32_t vaqt UNIX = 0; imzosiz uzoq prevActualTime = 0; void loop () {unsigned long currentMillis = millis (); if (currentMillis - prevNTP> intervalNTP) {// Agar oxirgi NTP so'rovidan bir daqiqa o'tgan bo'lsa prevNTP = currentMillis; Serial.println ("\ r / nNTP so'rovi yuborilmoqda …"); sendNTPpacket (timeServerIP); // NTP so'rovini yuborish} uint32_t time = getTime (); // NTP javob kelganligini tekshiring va (UNIX) vaqtini oling, agar (vaqt) {// Agar yangi vaqt tamg'asi qabul qilingan bo'lsa, vaqt UNIX = vaqt; Serial.print ("NTP javobi: / t"); Serial.println (timeUNIX); lastNTPResponse = currentMillis; } if if ((currentMillis - lastNTPResponse)> 3600000) {Serial.println ("Oxirgi NTP javobidan 1 soatdan ko'proq vaqt. Qayta yuklash."); Serial.flush (); ESP.reset (); } uint32_t actualTime = timeUNIX + (currentMillis - lastNTPRESponse)/1000; uint32_t EasternTime = timeUNIX - 18000 + (currentMillis - lastNTPRESponse)/1000; if (actualTime! = prevActualTime && timeUNIX! = 0) {// Agar oxirgi bosmadan bir soniya o'tgan bo'lsa prevActualTime = actualTime; Serial.printf ("\ rUTC vaqti: / t%d:%d:%d", getHours (actualTime), getMinutes (actualTime), getSeconds (actualTime)); Serial.printf ("\ rEST (-5): / t%d:%d:%d", getHours (EasternTime), getMinutes (EasternTime), getSeconds (EasternTime)); Serial.println (); } // 7:30 am if (getHours (EasternTime) == 7 && getMinutes (EasternTime) == 30 && getSeconds (EasternTime) == 0) {// qopqog'ini oching Serial.println ("qopqog'ini ochish"); uchun (pos = 95; pos> = 0; pos -= 1) {// 95 darajadan 0 darajagacha boradi myservo.write (pos); // servo o'zgarmaydigan 'pos' kechikishidagi holatga o'tishini ayt (15); // servo holatiga yetguncha 15ms kutadi}} // tunda println ("qopqog'ini yopish"); uchun (pos = 0; pos <= 95; pos += 1) {// 0 darajadan 95 gradusgacha // 1 darajali qadamlarda myservo.write (pos); // servo o'zgarmaydigan 'pos' kechikishidagi holatga o'tishini ayt (15); // servo holatiga yetguncha 15ms kutadi}} /* // testi, agar (getHours (eastTime) == 12 && getMinutes (EasternTime) == 45 && getSeconds (EasternTime) == 0) {// qopqog'ini yoping Serial.println ("qopqog'ini yopish"); uchun (pos = 0; pos = 0; pos -= 1) {// 95 darajadan 0 darajagacha boradi myservo.write (pos); // servo o'zgarmaydigan 'pos' kechikishidagi holatga o'tishini ayt (15); // servo holatiga yetguncha 15ms kutadi}} */} void startWiFi () {// Ba'zi kirish nuqtalariga ulanishga harakat qiling. Keyin wifiMulti.addAP ("ssid_from_AP_1", "your_password_for_AP_1") ulanishini kuting; // ulanmoqchi bo'lgan Wi-Fi tarmoqlarini qo'shing //wifiMulti.addAP("ssid_from_AP_2 "," your_password_for_AP_2 "); //wifiMulti.addAP("ssid_from_AP_3 "," your_password_for_AP_3 "); Serial.println ("Ulanish"); while (wifiMulti.run ()! = WL_CONNECTED) {// Wi-Fi kechikish (250) ulanishini kuting; Serial.print ('.'); } Serial.println ("\ r / n"); Serial.print ("Ulangan"); Serial.println (WiFi. SSID ()); // Bizga Serial.print ("IP -manzil: / t") qaysi tarmoqqa ulanganimizni ayting; Serial.print (WiFi.localIP ()); // ESP8266 IP -manzilini kompyuterga yuboring Serial.println ("\ r / n"); } void startUDP () {Serial.println ("UDP boshlanmoqda"); UDP.begin (123); // 123 -portda UDP xabarlarini tinglashni boshlang Serial.print ("Mahalliy port: / t"); Serial.println (UDP.localPort ()); Serial.println (); } uint32_t getTime () {if (UDP.parsePacket () == 0) {// Agar javob bo'lmasa (hali) 0 qaytariladi; } UDP.read (NTPBuffer, NTP_PACKET_SIZE); // paketni buferga o'qing // 4 vaqt tamg'asi baytini 32 bitli bitta raqamga birlashtiring uint32_t NTPTime = (NTPBuffer [40] << 24) | (NTPBuffer [41] << 16) | (NTPBuffer [42] << 8) | NTPBuffer [43]; // NTP vaqtini UNIX vaqt tamg'asiga aylantiring: // Unix vaqti 1970 yil 1 -yanvardan boshlanadi. Bu NTP vaqtida 2208988800 soniya: const uint32_t etmish yil = 2208988800UL; // etmish yilni olib tashlang: uint32_t UNIXTime = NTPTime - etmish yil; UNIXTime -ni qaytarish; } void sendNTPpacket (IPAddress & address) {memset (NTPBuffer, 0, NTP_PACKET_SIZE); // buferdagi barcha baytlarni 0 ga o'rnating // NTP so'rovini shakllantirish uchun zarur bo'lgan qiymatlarni ishga tushiring NTPBuffer [0] = 0b11100011; // LI, versiya, rejim // vaqt tamg'asini so'ragan paketni yuborish: UDP.beginPacket (manzil, 123); // NTP so'rovlari 123 UDP.write portiga (NTPBuffer, NTP_PACKET_SIZE); UDP.endPacket (); } inline int getSeconds (uint32_t UNIXTime) {qaytish UNIXTime % 60; } inline int getMinutes (uint32_t UNIXTime) {qaytish UNIXTime / 60 % 60; } inline int getHours (uint32_t UNIXTime) {UNIXTime / 3600 % qaytish 24; }

5 -qadam: Undan foydalaning

Buni ishlat!
Buni ishlat!
Buni ishlat!
Buni ishlat!

Simlaringizni piyola ushlagichining ichki qismiga o'tkazing va mushukni oziqlantiruvchi qurilmani USB AC adapter yordamida rozetkaga ulang. Oddiy kod qanday yozilgan bo'lsa, u "ochiq" holatda yuklanishi kerak va faqat Arduino eskizida ko'rsatilgan vaqt oralig'ida qopqoq o'rnini o'zgartiradi.

Kuzatganingiz uchun tashakkur! Agar siz o'z versiyangizni o'zingiz tayyorlasangiz, men uni quyida "Men yaratdim" bo'limida ko'rishni istardim!

Agar sizga ushbu loyiha yoqsa, siz mening ba'zi loyihalarimga qiziqishingiz mumkin:

  • Kamalak portretlari uchun prizma ushlagichi
  • Mushuk minorasi bilan kontrplak saqlash devori
  • LED Mason Jar chiroqlari (3D bosilgan qopqoq)
  • 3D printerli filamentli quruq quti
  • Favqulodda USB quvvat manbai (3D bosilgan)
  • Yorqin LED Gummy Candy
  • Drenajli 3D bosma geometrik planter
  • Yorqin 3D bosilgan gullar
  • LEDlarni skuter ostida qanday o'rnatish kerak (Bluetooth bilan)

Men ishlayotgan narsadan xabardor bo'lish uchun meni YouTube, Instagram, Twitter va Pinterest -da kuzatib boring.

Tavsiya: