Obsah:
- Zásoby
- Krok 1: 3D tištěné díly
- Krok 2: Připojte víko k servomotoru
- Krok 3: Sestavte obvod NodeMCU ESP8266
- Krok 4: Nahrajte kód Arduino a otestujte ho
- Krok 5: Použijte to
Video: Řízení přístupu pro kočky (ESP8266 + servomotor + 3D tisk): 5 kroků (s obrázky)
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:19
Tento projekt prochází procesem, který jsem použil pro vytvoření automatické misky pro kočky pro moji starší diabetickou kočku Chaz. Vidíte, potřebuje si dát snídani, než si může podat inzulín, ale já často zapomínám vyzvednout si jídlo, než půjdu spát, což mu kazí chuť k jídlu a odhazuje jeho inzulinový plán. Toto jídlo používá servomotor k uzavření víka nad jídlem mezi půlnocí a 7:30 hod. Náčrt Arduino mikrokontroléru NodeMCU ESP8266 používá k ovládání plánu protokol Network Time Protocol (NTP).
Tento projekt nemusí být vhodný pro mladší, aktivnější kočky. Chaz je tak starý a křehký, že není ochoten pokusit se vypáčit misku, ale je to možné.
Pokud jste v Arduinu nebo ESP8266 nováčci, můžete se těšit na následující prerekvizitní průvodce:
- Instructables Třída Arduino
- Třída Internet věcí věcí Instructables
Zásoby
- 3D tiskárna (používám Creality CR-10s Pro)
- Filament 3D tiskárny (používám zlaté PLA)
- NodeMCU ESP8266 wifi mikrokontrolér
- USB kabel (A na microB)
- USB napájecí adaptér
- Mikromotor
- Malý šroubovák a šrouby
- Propojovací drát
- Kolíky záhlaví
- Deska Perma-proto
Chcete -li držet krok s tím, na čem pracuji, sledujte mě na YouTube, Instagramu, Twitteru, Pinterestu a přihlaste se k odběru mého zpravodaje. Jako Amazon Associate vydělávám na oprávněných nákupech, které provádíte pomocí mých partnerských odkazů.
Krok 1: 3D tištěné díly
Držák misky na krmivo pro kočky vychází z designu Ardy Laie na Thingiverse. Udělal jsem to větší, abych pojal misku své kočky, a také jsem ji zkrátil, protože její zvětšení ji udělalo příliš vysokou. Přidal jsem držák pro mikro servomotor a pár otvorů pro kabely, které vedou dovnitř.
Pomocí Tinkercad jsem vymodeloval jednoduché víko, určené k přichycení k rohu mikro serva. Můj návrh můžete získat přímo z Tinkercad a/nebo stáhnout STL připojené k tomuto kroku.
Díly jsem vytiskl na své tiskárně Creality CR-10s Pro zlatým PLA filamentem.
Zveřejnění: v době psaní tohoto článku jsem zaměstnancem společnosti Autodesk, která vyrábí Tinkercad.
Krok 2: Připojte víko k servomotoru
Pomocí malého vrtáku jsem zvětšil velikost otvorů na servo houkačce a poté pomocí šroubů připevnil servo k víku s 3D potiskem.
Krok 3: Sestavte obvod NodeMCU ESP8266
Obvod je řízen wifi mikrokontrolérem NodeMCU ESP8266. Použil jsem záhlaví na desce perma-proto, aby byl mikro servomotor snadno odpojitelný. Záhlaví serva jsou připojena k NodeMCU následujícím způsobem:
Žlutý servo vodič: NodeMCU D1
Červený servo vodič: napájení NodeMCU (3V3 nebo VIN)
Černý servo vodič: uzemnění NodeMCU (GND)
Krok 4: Nahrajte kód Arduino a otestujte ho
Nainstalujte sestavu motoru/víka do výřezu ve tvaru motoru na 3D vytištěné části držáku mísy. Zapojte záhlaví motoru do kolíků konektoru desky mikrokontroléru a zapojte obvod do počítače kabelem USB.
Skica Arduino používá protokol Network Time Protocol k načtení aktuálního času a poté otevírá nebo zavírá víko podle pevně zakódovaného plánu. Zkopírujte následující kód, aktualizujte své wifi pověření a časový posun UTC a nahrajte jej na desku NodeMCU pomocí Arduino IDE.
#zahrnout
#include #include #include ESP8266WiFiMulti wifiMulti; // Vytvořte instanci třídy ESP8266WiFiMulti s názvem 'wifiMulti' WiFiUDP UDP; // Vytvořte instanci třídy WiFiUDP pro odesílání a přijímání IPAddress timeServerIP; // time.nist.gov Adresa serveru NTP const char* NTPServerName = "time.nist.gov"; const int NTP_PACKET_SIZE = 48; // Časové razítko NTP je v prvních 48 bajtech bajtu zprávy NTPBuffer [NTP_PACKET_SIZE]; // vyrovnávací paměť pro uchovávání příchozích a odchozích paketů Servo myservo; // vytvoření objektu serva k ovládání servo // na většině desek lze vytvořit dvanáct objektů serva int pos = 0; // proměnná pro uložení polohy serva void setup () {myservo.attach (5); // připojí servo na pinu 5 alias D1 k objektu serva // ve výchozím nastavení otevře víko Serial.println ("otevření víka"); for (pos = 95; pos> = 0; pos -= 1) {// jde z 95 stupňů na 0 stupňů myservo.write (pos); // řekněte servu, aby přešlo na pozici v proměnné 'pos' delay (15); // čeká 15 ms, než servo dosáhne polohy} Serial.begin (115200); // Spusťte sériovou komunikaci pro odesílání zpráv do počítače se zpožděním (10); Serial.println ("\ r / n"); startWiFi (); // Zkuste se připojit k některým daným přístupovým bodům. Poté počkejte na připojení startUDP (); if (! WiFi.hostByName (NTPServerName, timeServerIP)) {// Získejte IP adresu serveru NTP Serial.println ("Vyhledávání DNS se nezdařilo. Restartování."); Serial.flush (); ESP.reset (); } Serial.print ("Adresa IP časového serveru: / t"); Serial.println (timeServerIP); Serial.println ("\ r / nPosílání požadavku NTP …"); sendNTPpacket (timeServerIP); } dlouhý bez znaménkaNTP = 60 000; // Žádost o čas NTP každou minutu bez znaménka dlouhá prevNTP = 0; unsigned long lastNTPResponse = millis (); uint32_t timeUNIX = 0; nepodepsané dlouhé prevActualTime = 0; void loop () {unsigned long currentMillis = millis (); if (currentMillis - prevNTP> intervalNTP) {// Pokud od posledního požadavku NTP uplynula minuta prevNTP = currentMillis; Serial.println ("\ r / nPosílání požadavku NTP …"); sendNTPpacket (timeServerIP); // Odeslání požadavku NTP} uint32_t time = getTime (); // Zkontrolujte, zda dorazila odpověď NTP, a získejte (UNIX) čas if (čas) {// Pokud bylo přijato nové časové razítko timeUNIX = čas; Serial.print ("Odpověď NTP: / t"); Serial.println (timeUNIX); lastNTPResponse = currentMillis; } else if ((currentMillis - lastNTPResponse)> 3600000) {Serial.println ("Více než 1 hodinu od poslední odpovědi NTP. Restartování."); Serial.flush (); ESP.reset (); } uint32_t actualTime = timeUNIX + (currentMillis - lastNTPResponse)/1000; uint32_t EasternTime = timeUNIX - 18000 + (currentMillis - lastNTPResponse)/1000; if (actualTime! = prevActualTime && timeUNIX! = 0) {// Pokud od posledního tisku uplynula vteřina prevActualTime = actualTime; Serial.printf ("\ rUTC čas: / 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 ráno if (getHours (EasternTime) == 7 && getMinutes (EasternTime) == 30 && getSeconds (EasternTime) == 0) {// otevřete víko Serial.println ("otevření víka"); for (pos = 95; pos> = 0; pos -= 1) {// jde z 95 stupňů na 0 stupňů myservo.write (pos); // řekněte servu, aby přešlo na pozici v proměnné 'pos' delay (15); // čeká 15 ms, než servo dosáhne polohy}} // půlnoc, pokud (getHours (EasternTime) == 0 && getMinutes (EasternTime) == 0 && getSeconds (EasternTime) == 0) {// zavřete víko Sériové. println ("zavření víka"); for (pos = 0; pos <= 95; pos += 1) {// jde z 0 stupňů na 95 stupňů // v krocích po 1 stupni myservo.write (pos); // řekněte servu, aby přešlo na pozici v proměnné 'pos' delay (15); // čeká 15 ms, než servo dosáhne polohy}} /* // testování if (getHours (EasternTime) == 12 && getMinutes (EasternTime) == 45 && getSeconds (EasternTime) == 0) {// zavřete víko Serial.println ("zavření víka"); for (pos = 0; pos = 0; pos -= 1) {// jde z 95 stupňů na 0 stupňů myservo.write (pos); // řekněte servu, aby přešlo na pozici v proměnné 'pos' delay (15); // čeká 15 ms, než servo dosáhne polohy}} */} neplatné startWiFi () {// Zkuste se připojit k některým daným přístupovým bodům. Poté počkejte na připojení wifiMulti.addAP ("ssid_from_AP_1", "your_password_for_AP_1"); // přidejte sítě Wi-Fi, ke kterým se chcete připojit //wifiMulti.addAP("ssid_from_AP_2 "," your_password_for_AP_2 "); //wifiMulti.addAP("ssid_from_AP_3 "," your_password_for_AP_3 "); Serial.println ("Připojování"); while (wifiMulti.run ()! = WL_CONNECTED) {// Počkejte na zpoždění připojení Wi-Fi (250); Serial.print ('.'); } Serial.println ("\ r / n"); Serial.print („Připojeno k“); Serial.println (WiFi. SSID ()); // Sdělte nám, k jaké síti jsme připojeni k Serial.print ("IP adresa: / t"); Serial.print (WiFi.localIP ()); // Odeslání IP adresy ESP8266 do počítače Serial.println ("\ r / n"); } void startUDP () {Serial.println ("Spouštění UDP"); UDP.begin (123); // Začněte poslouchat zprávy UDP na portu 123 Serial.print ("Místní port: / t"); Serial.println (UDP.localPort ()); Serial.println (); } uint32_t getTime () {if (UDP.parsePacket () == 0) {// Pokud žádná odpověď (zatím) vrátí 0; } UDP.read (NTPBuffer, NTP_PACKET_SIZE); // načtení paketu do vyrovnávací paměti // Sloučení 4 bytů časového razítka do jednoho 32bitového čísla uint32_t NTPTime = (NTPBuffer [40] << 24) | (NTPBuffer [41] << 16) | (NTPBuffer [42] << 8) | NTPBuffer [43]; // Převod času NTP na časové razítko UNIX: // Unixový čas začíná 1. ledna 1970. To je 2208988800 sekund v čase NTP: const uint32_t sedmdesát let = 2208988800UL; // odečíst sedmdesát let: uint32_t UNIXTime = NTPTime - sedmdesát let; vrátit UNIXTime; } void sendNTPpacket (IPAddress & address) {memset (NTPBuffer, 0, NTP_PACKET_SIZE); // nastavit všechny bajty ve vyrovnávací paměti na 0 // Inicializovat hodnoty potřebné k vytvoření požadavku NTP NTPBuffer [0] = 0b11100011; // LI, Version, Mode // odeslání paketu požadujícího časové razítko: UDP.beginPacket (adresa, 123); // Požadavky NTP jsou na port 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; }
Krok 5: Použijte to
Veďte vodiče do vnitřní části držáku mísy a pomocí napájecího adaptéru USB zapojte podavač koček do zásuvky. Způsob, jakým je jednoduchý kód napsán, má být spuštěn ve stavu „otevřeno“a změní polohu víka pouze v časových prahech uvedených v náčrtu Arduino.
Děkujeme za sledování! Pokud si vytvoříte vlastní verzi, rád ji uvidím v sekci I Made It níže!
Pokud se vám tento projekt líbí, můžete se zajímat o některé z mých dalších:
- Držák hranolu pro duhové portréty
- Úložná stěna z překližky s Cat Tower
- LED lampičky Mason Jar (víko s 3D potiskem)
- Suchý box s 3D tiskárnou
- Nouzový zdroj napájení USB (3D tisk)
- Svítící LED Gummy Candy
- 3D vytištěný geometrický květináč s drenáží
- Zářící 3D vytištěné květiny
- Jak nainstalovat LED pod koloběžku (s Bluetooth)
Abyste udrželi krok s tím, na čem pracuji, sledujte mě na YouTube, Instagramu, Twitteru a Pinterestu.
Doporučuje:
Krmítko pro kočky (pet) pro průmyslovou sílu: 10 kroků
Podavač krmiv pro kočky z průmyslové síly: Cestuji několik týdnů v kuse a mám tyto venkovní divoké kočky, které je třeba krmit, když jsem pryč. Již několik let používám upravené podavače zakoupené od Amazonu, které jsou ovládány pomocí počítače Raspberry Pi. I když moje
Kvantifikace přístupu k vaší mysli: 8 kroků (s obrázky)
Kvantifikace přístupu k vaší mysli: Řídím tedy laboratoř kreativní technologie na California College of the Arts. Je to v podstatě vzdělávací hackerský prostor pro studenty umění a designu. Docela úžasné, že? Po absolvování University of Minnesota s titulem z mechanického
SYSTÉM ŘÍZENÍ PŘÍSTUPU RFID NFC ARDUINO: 3 kroky
RFID NFC ARDUINO SYSTÉM ŘÍZENÍ PŘÍSTUPU: To, co jsem potřeboval, byl systém řízení přístupu do mé kanceláře. Celý projekt je velmi snadné stavět. Měl jsem doma náhradní Aduino Mega a ethernetový štít, takže s několika dalšími součástmi mám byl schopen vybudovat systém řízení přístupu pro mé off
Vytvořte si vlastní řízení přístupu pomocí Please-open.it: 4 kroky
Vytvořte si vlastní řízení přístupu pomocí Please-open.it: Please-open.it sídlí ve Francii a my se tomuto projektu budeme věnovat na plný úvazek. Chceme, aby firmy (hotely, kempy, stanice, nájemné …) těžily z flexibilnějších řešení a samozřejmě za nižší cenu. Připojte všechna interní data (jmenujte
Řízení přístupu RFID s Arduino Yun a Raspberry Pi: 11 kroků
Řízení přístupu RFID s Arduino Yun a Raspberry Pi: Vítejte v mém Instructable! Hledali jste online systém řízení přístupu RFID, který může mít více uživatelů bez použití hlavního klíče k jeho programování? Systém, který může zaznamenávat přístup pomocí jména osob? Systém, do kterého můžete snadno přidat