INHOUDSOPGAWE:
- Voorrade
- Stap 1: 3D -gedrukte onderdele
- Stap 2: Bevestig deksel op servomotor
- Stap 3: Bou NodeMCU ESP8266 -stroombaan
- Stap 4: Laai Arduino -kode op en toets
- Stap 5: Gebruik dit
Video: Toegangsbeheer vir katte (ESP8266 + servomotor + 3D -druk): 5 stappe (met foto's)
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:23
Hierdie projek gaan oor die proses waarmee ek 'n outomatiese bak vir katte vir my bejaarde diabeet kat Chaz gemaak het. Sien, hy moet ontbyt eet voordat hy sy insulien kan kry, maar ek vergeet gereeld om sy kosskottel op te tel voor ek gaan slaap, wat sy eetlus bederf en sy insulienprogram afskakel. Hierdie gereg gebruik 'n servomotor om 'n deksel oor die kos tussen middernag en 07:30 toe te maak. Die Arduino -skets van die NodeMCU ESP8266 mikrokontroleerder gebruik Network Time Protocol (NTP) om die skedule te beheer.
Hierdie projek is moontlik nie geskik vir jonger, meer aktiewe katte nie. Chaz is so oud en broos, hy is nie geneig om die bak oop te maak nie, maar dit is moontlik.
As u nuut is by die Arduino of die ESP8266, kan u die volgende vereiste gidse geniet:
- Onderrigbare Arduino -klas
- Instructables Internet of Things -klas
Voorrade
- 3D-drukker (ek gebruik 'n Creality CR-10s Pro)
- 3D -printer filament (ek gebruik goue PLA)
- NodeMCU ESP8266 wifi -mikrobeheerder
- USB -kabel (A na mikroB)
- USB -kragadapter
- Mikro servomotor
- Klein skroewedraaier en skroewe
- Aansluitdraad
- Kopspelde
- Perma-proto bord
Volg my op YouTube, Instagram, Twitter, Pinterest en teken in op my nuusbrief om tred te hou met waaraan ek werk. As Amazon -medewerker verdien ek uit kwalifiserende aankope wat u doen met my aangeslote skakels.
Stap 1: 3D -gedrukte onderdele
Die houer vir kattekos is gebaseer op die ontwerp van Ardy Lai op Thingiverse. Ek het dit groter gemaak vir my kat se bak, en ek het dit ook korter gemaak, aangesien die opskaling dit te lank gemaak het. Ek het 'n houer vir 'n mikro -servomotor bygevoeg en 'n paar gate vir kabels om na binne te lei.
Ek het 'n eenvoudige deksel gemaak met behulp van Tinkercad, wat ontwerp is om aan die horing van die mikroservo vasgemaak te word. U kan my ontwerp direk van Tinkercad aflaai en/of die STL's wat by hierdie stap aangeheg is, aflaai.
Ek het die dele op my Creality CR-10s Pro-drukker gedruk met 'n goue PLA-filament.
Openbaarmaking: ten tyde van hierdie skrywe is ek 'n werknemer van Autodesk, wat Tinkercad vervaardig.
Stap 2: Bevestig deksel op servomotor
Ek gebruik 'n klein boorpunt om die gate op die servohoring te vergroot, en gebruik dan skroewe om die servo aan die 3D -gedrukte deksel vas te maak.
Stap 3: Bou NodeMCU ESP8266 -stroombaan
Die kring word beheer deur 'n NodeMCU ESP8266 wifi -mikrobeheerder. Ek het kopstukke op 'n perma-proto-bord gebruik om die mikro-servomotor maklik afneembaar te maak. Die servokoppe is soos volg aan die NodeMCU gekoppel:
Geel servodraad: NodeMCU D1
Rooi servodraad: NodeMCU -krag (3V3 of VIN)
Swart servodraad: NodeMCU -grond (GND)
Stap 4: Laai Arduino -kode op en toets
Installeer u motor/deksel-eenheid in die motorvormige uitsny op die 3D-gedrukte deel van die houer. Koppel die motorkop in die koppenne van die mikrokontrollerbord en steek die stroombaan in u rekenaar met 'n USB -kabel.
Die Arduino-skets gebruik Network Time Protocol om die huidige tyd te haal en maak dan die deksel oop of toe volgens 'n hardgekodeerde skedule. Kopieer die volgende kode, werk u wifi -geloofsbriewe en UTC -tydverskuiwing op, en laai dit op u NodeMCU -bord op met die Arduino IDE.
#insluit
#include #include #include ESP8266WiFiMulti wifiMulti; // Skep 'n voorbeeld van die ESP8266WiFiMulti -klas, genaamd 'wifiMulti' WiFiUDP UDP; // Skep 'n voorbeeld van die WiFiUDP -klas om IPAddress timeServerIP te stuur en te ontvang; // time.nist.gov NTP -bedieneradres const char* NTPServerName = "time.nist.gov"; const int NTP_PACKET_SIZE = 48; // NTP tydstempel is in die eerste 48 grepe van die boodskap greep NTPBuffer [NTP_PACKET_SIZE]; // buffer vir inkomende en uitgaande pakkies Servo myservo; // skep servo -voorwerp om 'n servo te beheer // twaalf servo -voorwerpe kan op die meeste borde int pos = 0 geskep word; // veranderlike om die servoposisie leemte op te stel () {myservo.attach (5); // plak die servo op pen 5 aka D1 aan die servo -voorwerp // maak standaard die deksel oop Serial.println ("maak die deksel oop"); vir (pos = 95; pos> = 0; pos -= 1) {// gaan van 95 grade tot 0 grade myservo.write (pos); // sê vir servo om in posisie te gaan met veranderlike 'pos' -vertraging (15); // wag 15 ms vir die servo om die posisie te bereik} Serial.begin (115200); // Begin die seriële kommunikasie om boodskappe na die rekenaarvertraging (10) te stuur; Serial.println ("\ r / n"); startWiFi (); // Probeer om aan te meld by sekere gegewe toegangspunte. Wag dan vir 'n verbinding beginUDP (); if (! WiFi.hostByName (NTPServerName, timeServerIP)) {// Kry die IP -adres van die NTP -bediener Serial.println ("DNS -opsporing misluk. Herlaai."); Serial.flush (); ESP.reset (); } Serial.print ("Tydbediener -IP: / t"); Serial.println (timeServerIP); Serial.println ("\ r / nStuur NTP -versoek …"); sendNTPpacket (timeServerIP); } ongetekende lang intervalNTP = 60000; // Versoek NTP -tyd elke minuut ongetekend lang prevNTP = 0; ongetekende lang laasteNTPResponse = millis (); uint32_t tydUNIX = 0; ongetekende lang prevActualTime = 0; leemte -lus () {ongetekende lang stroomMillis = millis (); if (currentMillis - prevNTP> intervalNTP) {// As 'n minuut verloop het sedert die laaste NTP -versoek prevNTP = currentMillis; Serial.println ("\ r / nStuur NTP -versoek …"); sendNTPpacket (timeServerIP); // Stuur 'n NTP -versoek} uint32_t time = getTime (); // Kontroleer of 'n NTP -antwoord gekom het en kry die (UNIX) tyd as (tyd) {// As 'n nuwe tydstempel ontvang is timeUNIX = tyd; Serial.print ("NTP -antwoord: / t"); Serial.println (timeUNIX); lastNTPResponse = currentMillis; } anders if ((currentMillis - lastNTPResponse)> 3600000) {Serial.println ("Meer as 1 uur sedert die laaste NTP -reaksie. Herlaai."); Serial.flush (); ESP.reset (); } uint32_t actualTime = timeUNIX + (currentMillis - lastNTPResponse)/1000; uint32_t eastTime = timeUNIX - 18000 + (currentMillis - lastNTPResponse)/1000; if (actualTime! = prevActualTime && timeUNIX! = 0) {// As 'n sekonde verloop het sedert die vorige druk prevActualTime = actualTime; Serial.printf ("\ rUTC -tyd: / t%d:%d:%d", getHours (actualTime), getMinutes (actualTime), getSeconds (actualTime)); Serial.printf ("\ rEST (-5): / t%d:%d:%d", getHours (eastTime), getMinutes (eastTime), getSeconds (eastTime)); Serial.println (); } // 07:30 as (getHours (eastTime) == 7 && getMinutes (eastTime) == 30 && getSeconds (eastTime) == 0) {// maak die deksel oop Serial.println ("maak die deksel oop"); vir (pos = 95; pos> = 0; pos -= 1) {// gaan van 95 grade tot 0 grade myservo.write (pos); // sê vir servo om in posisie te gaan met veranderlike 'pos' -vertraging (15); // wag 15 ms vir die servo om die posisie te bereik}} // middernag as (getHours (eastTime) == 0 && getMinutes (eastTime) == 0 && getSeconds (eastTime) == 0) {// sluit die deksel Serial. println ("sluit die deksel"); vir (pos = 0; pos <= 95; pos += 1) {// gaan van 0 grade tot 95 grade // in stappe van 1 graad myservo.write (pos); // sê vir servo om in posisie te gaan met veranderlike 'pos' -vertraging (15); // wag 15 ms totdat die servo die posisie bereik}} /* // toets of (getHours (eastTime) == 12 && getMinutes (eastTime) == 45 && getSeconds (eastTime) == 0) {// die deksel sluit Serial.println ("sluit die deksel"); vir (pos = 0; pos = 0; pos -= 1) {// gaan van 95 grade tot 0 grade myservo.write (pos); // sê vir servo om in posisie te gaan met veranderlike 'pos' -vertraging (15); // wag 15 ms vir die servo om die posisie te bereik}} */} ongeldig startWiFi () {// Probeer om aan te meld by 'n gegewe toegangspunt. Wag dan vir 'n verbinding wifiMulti.addAP ("ssid_from_AP_1", "your_password_for_AP_1"); // voeg Wi-Fi-netwerke by waarmee u wil skakel //wifiMulti.addAP("ssid_from_AP_2 "," your_password_for_AP_2 "); //wifiMulti.addAP("ssid_from_AP_3 "," your_password_for_AP_3 "); Serial.println ("Verbind"); terwyl (wifiMulti.run ()! = WL_CONNECTED) {// Wag totdat die Wi-Fi vertraag het (250); Serial.print ('.'); } Serial.println ("\ r / n"); Serial.print ("gekoppel aan"); Serial.println (WiFi. SSID ()); // Vertel ons met watter netwerk ons gekoppel is aan Serial.print ("IP -adres: / t"); Serial.print (WiFi.localIP ()); // Stuur die IP -adres van die ESP8266 na die rekenaar Serial.println ("\ r / n"); } ongeldig startUDP () {Serial.println ("Begin UDP"); UDP.begin (123); // Begin luister na UDP -boodskappe op poort 123 Serial.print ("Local port: / t"); Serial.println (UDP.localPort ()); Serial.println (); } uint32_t getTime () {if (UDP.parsePacket () == 0) {// As daar (nog) geen antwoord is nie, gee 0 terug; } UDP.read (NTPBuffer, NTP_PACKET_SIZE); // lees die pakkie in die buffer // Kombineer die 4 tydstempel grepe in een 32-bis nommer uint32_t NTPTime = (NTPBuffer [40] << 24) | (NTPBuffer [41] << 16) | (NTPBuffer [42] << 8) | NTPBuffer [43]; // Skakel NTP -tyd om na 'n UNIX -tydstempel: // Unix -tyd begin op 1 Januarie 1970. Dit is 2208988800 sekondes in NTP -tyd: const uint32_t seventyYears = 2208988800UL; // trek sewentig jaar af: uint32_t UNIXTime = NTPTime - sewentig jaar; stuur UNIXTime terug; } void sendNTPpacket (IPAddress & address) {memset (NTPBuffer, 0, NTP_PACKET_SIZE); // stel alle grepe in die buffer op 0 // Initialiseer waardes wat nodig is om NTP -versoek te vorm NTPBuffer [0] = 0b11100011; // LI, weergawe, modus // stuur 'n pakkie wat 'n tydstempel versoek: UDP.beginPacket (adres, 123); // NTP -versoeke moet 123 UDP.write (NTPBuffer, NTP_PACKET_SIZE) na 123 poort; 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; }
Stap 5: Gebruik dit
Lei u drade na die binnekant van die houer en steek u katvoeder met 'n USB -wisselstroomadapter in 'n uitlaat. Die manier waarop die eenvoudige kode geskryf is, is bedoel om in die 'oop' toestand op te laai, en dit verander slegs die deksel se posisie op die tyddrempels wat in die Arduino -skets gespesifiseer word.
Dankie dat u saamgevolg het! As u u eie weergawe maak, sien ek dit graag in die gedeelte I Made It hieronder!
As u van hierdie projek hou, sal u dalk in sommige van my ander belangstel:
- Prismahouer vir reënboogportrette
- Houtmuur van laaghout met Cat Tower
- LED Mason Jar Lanterns (3D -gedrukte deksel)
- 3D -drukker filament droë boks
- Nood USB -kragbron (3D -gedruk)
- Gloeiende LED Gummy Candy
- 3D -gedrukte meetkundige planter met dreinering
- Gloeiende 3D -gedrukte blomme
- Hoe om LED's onder 'n bromponie te installeer (met Bluetooth)
Volg my op YouTube, Instagram, Twitter en Pinterest om tred te hou met waaraan ek werk.
Aanbeveel:
Geen plas nou nie, 'n toestel vir aanpassing van troeteldiere wat die katte keer om in u huis te plas: 4 stappe
No Pee Now, Pet Behavior Adjustment Device waarmee die katte in u huis kan plas: ek het my kat so gepla dat sy daarvan hou om op my bed te piepie, ek het alles nagegaan wat ek nodig het en ek het haar ook na die veearts geneem. Nadat ek alles wat ek kan dink, ontstel en na die dokter se woord geluister het, besef ek dat sy net 'n slegte gedrag het. So die
Sourino - die beste speelding vir katte en kinders: 14 stappe (met prente)
Sourino - die beste speelding vir katte en kinders: Stel jou voor dat lang partytjies met kinders en katte wat Sourino speel, hierdie speelding sal beide katte en kinders verbaas. U sal daarvan hou om in die afstandbeheerde modus te speel en u kat mal te maak. In outonome modus sal u dit waardeer om Sourino deur u kat te laat beweeg
Gemotoriseerde snaarspeelgoed vir katte: 6 stappe
Gemotoriseerde snaarspeelgoed vir katte: speel jou kat graag met toue? maar is u te lui om met hom/haar te speel? Hier kom die oplossing - 'n DIY -gemotoriseerde katstring speelgoed. Om hierdie speelding te maak, hoef u geen elektroniese ervaring te hê nie. Dit is ook beginnersvriendelik
Bou u eie toegangsbeheer met Please-open.it: 4 stappe
Bou u eie toegangsbeheer met Please-open.it: Please-open.it is gevestig in Frankryk en ons is voltyds besig met hierdie projek. Ons wil hê dat ondernemings (hotelle, kampe, stasies, huur …) baat by meer buigsame oplossings en natuurlik teen 'n laer prys. Koppel elke interne data (stel aan
RFID -toegangsbeheer met Arduino Yun en Raspberry Pi: 11 stappe
RFID -toegangsbeheer met Arduino Yun en Raspberry Pi: Welkom by my Instructable! Het u aanlyn gesoek na 'n RFID -toegangsbeheerstelsel wat verskeie gebruikers kan hê sonder om 'n hoofsleutel te gebruik om dit te programmeer? 'N Stelsel wat die toegang met die persone se naam kan aanmeld? 'N Stelsel waar u maklik