İçindekiler:
- Gereçler
- Adım 1: 3D Basılı Parçalar
- Adım 2: Kapağı Servo Motora Takın
- Adım 3: NodeMCU ESP8266 Devresini Oluşturun
- Adım 4: Arduino Kodunu Yükleyin ve Test Edin
- Adım 5: Kullanın
Video: Cat Mama Erişim Kontrolü (ESP8266 + Servo Motor + 3D Baskı): 5 Adım (Resimlerle)
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:17
Bu proje, yaşlı diyabetik kedim Chaz için otomatik bir kedi maması kasesi oluşturmak için kullandığım süreci anlatıyor. Bakın, insülinini alabilmesi için önce kahvaltı yapması gerekiyor, ama genellikle yatmadan önce yemeğini almayı unutuyorum, bu da iştahını bozuyor ve insülin programını bozuyor. Bu çanak, gece yarısı ile 07:30 saatleri arasında yiyeceklerin üzerindeki kapağı kapatmak için bir servo motor kullanır. NodeMCU ESP8266 mikrodenetleyicinin Arduino taslağı, programı kontrol etmek için Ağ Zaman Protokolü'nü (NTP) kullanır.
Bu proje daha genç, daha aktif kediler için uygun olmayabilir. Chaz o kadar yaşlı ve çelimsiz ki, kaseyi açmaya meyilli değil, ama bu mümkün.
Arduino veya ESP8266'da yeniyseniz, aşağıdaki önkoşul kılavuzlarından yararlanabilirsiniz:
- Eğitilebilir Arduino Sınıfı
- Instructables Nesnelerin İnterneti Sınıfı
Gereçler
- 3D yazıcı (Creality CR-10s Pro kullanıyorum)
- 3D yazıcı filamenti (altın PLA kullanıyorum)
- NodeMCU ESP8266 wifi mikrodenetleyici
- USB kablosu (A'dan microB'ye)
- USB güç adaptörü
- Mikro servo motor
- Küçük tornavida ve vidalar
- Bağlantı teli
- Başlık pimleri
- Perma-proto kartı
Ne üzerinde çalıştığımı takip etmek için beni YouTube, Instagram, Twitter, Pinterest'te takip edin ve bültenime abone olun. Bir Amazon İş Ortağı olarak, bağlı kuruluş bağlantılarımı kullanarak yaptığınız nitelikli satın alımlardan kazanıyorum.
Adım 1: 3D Basılı Parçalar
Kedi maması kasesi tutucusu, Ardy Lai'nin Thingiverse üzerindeki tasarımına dayanmaktadır. Kedimin kasesini yerleştirmek için daha büyük yaptım ve ayrıca ölçeklendirmek onu çok uzun yaptığı için kısalttım. Bir mikro servo motor için bir tutucu ve kabloların içeriye yönlendirilmesi için birkaç delik ekledim.
Tinkercad kullanarak mikro servonun kornasına takmak için tasarlanmış basit bir kapak modelledim. Tasarımımı doğrudan Tinkercad'den alabilir ve/veya bu adıma ekli STL'leri indirebilirsiniz.
Parçaları Creality CR-10s Pro yazıcımda altın PLA filamentli yazdırdım.
Açıklama: Bu yazı yazılırken, Tinkercad'i yapan Autodesk'in bir çalışanıyım.
Adım 2: Kapağı Servo Motora Takın
Servo korna üzerindeki deliklerin boyutunu artırmak için küçük bir matkap ucu kullandım, ardından servoyu 3D baskılı kapağa takmak için vidalar kullandım.
Adım 3: NodeMCU ESP8266 Devresini Oluşturun
Devre, bir NodeMCU ESP8266 wifi mikrodenetleyici tarafından kontrol edilir. Mikro servo motoru kolayca ayrılabilir hale getirmek için kalıcı bir protokol kartında başlık pinleri kullandım. Servo başlıkları NodeMCU'ya şu şekilde bağlanır:
Sarı servo tel: NodeMCU D1
Kırmızı servo tel: NodeMCU gücü (3V3 veya VIN)
Siyah servo tel: NodeMCU topraklama (GND)
Adım 4: Arduino Kodunu Yükleyin ve Test Edin
Motor/kapak tertibatınızı, 3D baskılı kase tutucu parçasındaki motor şeklindeki oyuğa takın. Motor başlığını mikrodenetleyici kartının başlık pinlerine takın ve devreyi bir USB kablosuyla bilgisayarınıza bağlayın.
Arduino çizimi, geçerli saati almak için Ağ Zaman Protokolünü kullanır ve ardından sabit kodlanmış bir programa göre kapağı açar veya kapatır. Aşağıdaki kodu kopyalayın, wifi kimlik bilgilerinizi ve UTC saat farkını güncelleyin ve Arduino IDE'yi kullanarak NodeMCU kartınıza yükleyin.
#Dahil etmek
#include #include #include ESP8266WiFiMulti wifiMulti; // 'wifiMulti' WiFiUDP UDP adlı ESP8266WiFiMulti sınıfının bir örneğini oluşturun; // IPAddress timeServerIP göndermek ve almak için WiFiUDP sınıfının bir örneğini oluşturun; // time.nist.gov NTP sunucu adresi const char* NTPServerName = "time.nist.gov"; const int NTP_PACKET_SIZE = 48; // NTP zaman damgası, mesajın baytının ilk 48 baytındadır NTPBuffer[NTP_PACKET_SIZE]; // gelen ve giden paketleri tutmak için arabellek Servo myservo; // bir servoyu kontrol etmek için servo nesnesi yarat // çoğu kartta on iki servo nesnesi oluşturulabilir int pos = 0; // servo pozisyonunu saklayacak değişken void setup() { myservo.attach(5); // pin 5 aka D1 üzerindeki servoyu servo nesnesine bağlar // varsayılan olarak kapağı aç Serial.println("kapağı açma"); for (konum = 95; konum >= 0; konum -= 1) { // 95 dereceden 0 dereceye gider myservo.write(poz); // servoya 'pos' gecikmesi(15) değişkeninde pozisyona gitmesini söyle; // servonun pozisyona ulaşması için 15ms bekler } Serial.begin(115200); // Bilgisayar gecikmesine(10) mesaj göndermek için seri iletişimi başlatın; Serial.println("\r\n"); başlatWiFi(); // Verilen bazı erişim noktalarına bağlanmayı deneyin. Ardından bir bağlantı bekleyin startUDP(); if(!WiFi.hostByName(NTPServerName, timeServerIP)) { // NTP sunucusunun IP adresini alın Serial.println("DNS araması başarısız. Yeniden başlatılıyor."); Seri.flush(); ESP.reset(); } Serial.print("Zaman sunucusu IP:\t"); Serial.println(timeServerIP); Serial.println("\r\nNTP isteği gönderiliyor…"); sendNTPpacket(timeServerIP); } işaretsiz uzun aralıkNTP = 60000; // Dakikada bir NTP zamanı iste unsigned long prevNTP = 0; imzasız uzun lastNTPResponse = millis(); uint32_t zamanUNIX = 0; imzasız uzun prevActualTime = 0; void loop() { unsigned long currentMillis = millis(); if (currentMillis - prevNTP > intervalNTP) { // Son NTP isteğinden bu yana bir dakika geçmişse prevNTP = currentMillis; Serial.println("\r\nNTP isteği gönderiliyor…"); sendNTPpacket(timeServerIP); // NTP isteği gönder } uint32_t time = getTime(); // NTP yanıtının gelip gelmediğini kontrol edin ve (UNIX) zamanını alın if (time) { // Yeni bir zaman damgası alındıysa timeUNIX = zaman; Serial.print("NTP yanıtı:\t"); Serial.println(timeUNIX); lastNTPResponse = currentMillis; } else if ((currentMillis - lastNTPResponse) > 3600000) { Serial.println("Son NTP yanıtının üzerinden 1 saatten fazla zaman geçti. Yeniden başlatılıyor."); Seri.flush(); ESP.reset(); } uint32_t realTime = timeUNIX + (currentMillis - lastNTPResponse)/1000; uint32_t easternTime = timeUNIX - 18000 + (currentMillis - lastNTPResponse)/1000; if (actualTime != prevActualTime && timeUNIX != 0) { // Son baskıdan bu yana bir saniye geçmişse prevActualTime = realTime; Serial.printf("\rUTC saati:\t%d:%d:%d ", getHours(actualTime), getMinutes(actualTime), getSeconds(actualTime)); Serial.printf("\rEST (-5):\t%d:%d:%d ", getHours(easternTime), getMinutes(easternTime), getSeconds(easternTime)); Seri.println(); } // 7:30am if(getHours(easternTime) == 7 && getMinutes(easternTime) == 30 && getSeconds(easternTime) == 0){ //kapağı açın Serial.println("kapağı açma"); for (konum = 95; konum >= 0; konum -= 1) { // 95 dereceden 0 dereceye gider myservo.write(poz); // servoya 'pos' gecikmesi(15) değişkeninde pozisyona gitmesini söyle; // servonun pozisyona ulaşması için 15ms bekler } } // gece yarısı if(getHours(easternTime) == 0 && getMinutes(easternTime) == 0 && getSeconds(easternTime) == 0){ //kapağı kapatın Serial. println("kapağı kapatmak"); for (konum = 0; konum <= 95; konum += 1) { // 0 dereceden 95 dereceye gider // 1 derecelik adımlarla myservo.write(poz); // servoya 'pos' gecikmesi(15) değişkeninde pozisyona gitmesini söyle; // servonun pozisyona ulaşması için 15ms bekler } } /* // if(getHours(easternTime) == 12 && getMinutes(easternTime) == 45 && getSeconds(easternTime) == 0){ //kapağı kapatın Serial.println("kapak kapatılıyor"); for (konum = 0; konum = 0; konum -= 1) { // 95 dereceden 0 dereceye gider myservo.write(poz); // servoya 'pos' gecikmesi(15) değişkeninde pozisyona gitmesini söyle; // servonun konuma ulaşması için 15ms bekler } } */ } void startWiFi() { // Verilen bazı erişim noktalarına bağlanmayı deneyin. Ardından wifiMulti.addAP("ssid_from_AP_1", "your_password_for_AP_1"); bağlantısını bekleyin. // bağlanmak istediğiniz Wi-Fi ağlarını ekleyin //wifiMulti.addAP("ssid_from_AP_2", "your_password_for_AP_2"); //wifiMulti.addAP("ssid_from_AP_3", "your_password_for_AP_3"); Serial.println("Bağlanıyor"); while (wifiMulti.run() != WL_CONNECTED) { // Wi-Fi bağlantısının gecikmesini bekleyin(250); Seri.print('.'); } Serial.println("\r\n"); Serial.print("Bağlandı"); Seri.println(WiFi. SSID()); // Bize hangi ağa bağlı olduğumuzu söyleyin Serial.print("IP address:\t"); Serial.print(WiFi.localIP()); // ESP8266'nın IP adresini bilgisayara Serial.println("\r\n"); } void startUDP() { Serial.println("UDP'yi Başlatıyor"); UDP.başla(123); // 123 numaralı bağlantı noktasından UDP mesajlarını dinlemeye başlayın Serial.print("Yerel bağlantı noktası:\t"); Serial.println(UDP.localPort()); Seri.println(); } uint32_t getTime() { if (UDP.parsePacket() == 0) { // Yanıt yoksa (henüz) 0 döndür; } UDP.read(NTPBuffer, NTP_PACKET_SIZE); // paketi ara belleğe oku // 4 zaman damgası baytını tek bir 32 bitlik sayı ile birleştir uint32_t NTPTime = (NTPBuffer[40] << 24) | (NTPBuffer[41] << 16) | (NTPBffer[42] << 8) | NTPBuffer[43]; // NTP zamanını UNIX zaman damgasına dönüştürün: // Unix zamanı 1 Ocak 1970'de başlar. NTP zamanında 2208988800 saniye: const uint32_t yetmişYears = 2208988800UL; // yetmiş yılı çıkar: uint32_t UNIXTime = NTPTime - yetmişYıl; UNIXTime'ı döndür; } void sendNTPpacket(IPAddress& address) { memset(NTPBuffer, 0, NTP_PACKET_SIZE); // arabellekteki tüm baytları 0'a ayarla // NTP isteği oluşturmak için gereken değerleri başlat NTPBuffer[0] = 0b11100011; // LI, Sürüm, Mod // zaman damgası isteyen bir paket gönder: UDP.beginPacket(adres, 123); // NTP istekleri 123 numaralı bağlantı noktasına UDP.write(NTPBuffer, NTP_PACKET_SIZE); UDP.endPacket(); } satır içi int getSeconds(uint32_t UNIXTime) { return UNIXTime % 60; } satır içi int getMinutes(uint32_t UNIXTime) { dönüş UNIXTime / 60 % 60; } satır içi int getHours(uint32_t UNIXTime) { return UNIXTime / 3600 % 24; }
Adım 5: Kullanın
Kablolarınızı kase tutucunun içine yönlendirin ve bir USB AC adaptörü kullanarak kedi besleyicinizi prize takın. Basit kodun yazılma şekli, "açık" durumda başlatılmak içindir ve kapak konumunu yalnızca Arduino taslağında belirtilen zaman eşiklerinde değiştirir.
Takip ettiğiniz için teşekkürler! Kendi versiyonunuzu yaparsanız, aşağıdaki Ben Yaptım bölümünde görmeyi çok isterim!
Bu projeyi beğendiyseniz, diğerlerinden bazıları da ilginizi çekebilir:
- Gökkuşağı Portreleri için Prizma Tutucu
- Kedi Kuleli Kontrplak Depolama Duvarı
- LED Mason Kavanoz Fenerleri (3D baskılı kapak)
- 3D Yazıcı Filament Kuru Kutu
- Acil Durum USB Güç Kaynağı (3D Basılı)
- Parlayan LED Sakızlı Şeker
- Drenajlı 3D Baskılı Geometrik Saksı
- Parlayan 3D Baskılı Çiçekler
- Bir Scooter Altında LED'ler Nasıl Kurulur (Bluetooth ile)
Ne üzerinde çalıştığımı takip etmek için beni YouTube, Instagram, Twitter ve Pinterest'te takip edin.
Önerilen:
Ultrasonik Tabanlı Erişim Sistemi: 6 Adım (Resimlerle)
Ultrasonik Tabanlı Erişim Sistemi: Bu sefer ilginizi çekeceğini düşündüğüm ultrasonik tabanlı bir erişim sistemi sunuyorum. Ultrasonik dalgalara dayalı olduğu için başka herhangi bir elektronik cihaza ihtiyaç duymayan temassız bir erişim sistemidir, ancak eliniz ne olursa olsun. denemek için
Butonlar, Raspberry Pi ve Scratch ile Parlaklık Kontrolü PWM Tabanlı LED Kontrolü: 8 Adım (Resimlerle)
Basmalı Düğmeler, Raspberry Pi ve Scratch Kullanarak Parlaklık Kontrolü PWM Tabanlı LED Kontrolü: Öğrencilerime PWM'nin nasıl çalıştığını açıklamanın bir yolunu bulmaya çalışıyordum, bu yüzden kendime 2 basmalı düğme kullanarak bir LED'in parlaklığını kontrol etmeye çalışma görevi verdim - bir düğme bir LED'in parlaklığını arttırır ve diğeri onu karartır. Programlamak için
MySQL, PHP5 ve Python ile Arduino YÚN'ye Erişim Kontrolü: 11 Adım (Resimlerle)
Arduino YÚN Erişimini MySQL, PHP5 ve Python ile Kontrol Edin: Merhaba Arkadaşlar! Bildiğiniz gibi, Eylül ayında Arduino'nun yeni prömiyeri Arduino YUN. Bu küçük arkadaşın, aklınıza gelebilecek her şeyi (en azından şimdiye kadar) çalıştırabileceğimiz bir Linux gömülü sistemi var. Çok az bilgi varken
SAYAÇLI RFID KAPI ERİŞİM KONTROLÜ: 8 Adım
SAYAÇLI RFID KAPI ERİŞİM KONTROLÜ: SAYAÇLI RFID KAPI ERİŞİM KONTROLÜ Eğitimi
Arduino Yun ve Raspberry Pi ile RFID Erişim Kontrolü: 11 Adım
Arduino Yun ve Raspberry Pi ile RFID Erişim Kontrolü: Eğitilebilir Tabloma Hoş Geldiniz! Programlamak için bir ana anahtar kullanmadan birden fazla kullanıcıya sahip olabilen bir RFID Erişim Kontrol Sistemi için çevrimiçi arama yaptınız mı? Kişi adı ile erişimi kaydedebilen bir sistem mi? Kolayca ekleyebileceğiniz bir sistem