Мазмұны:

Мысық тағамдарына қол жеткізуді басқару (ESP8266 + Servo Motor + 3D басып шығару): 5 қадам (суреттермен)
Мысық тағамдарына қол жеткізуді басқару (ESP8266 + Servo Motor + 3D басып шығару): 5 қадам (суреттермен)

Бейне: Мысық тағамдарына қол жеткізуді басқару (ESP8266 + Servo Motor + 3D басып шығару): 5 қадам (суреттермен)

Бейне: Мысық тағамдарына қол жеткізуді басқару (ESP8266 + Servo Motor + 3D басып шығару): 5 қадам (суреттермен)
Бейне: Мысық жаныңызға келсе, ол Сізге Аллах тағаланың ҮШ жолдауын жеткізгені 2024, Қараша
Anonim
Image
Image
Мысық тағамдарына қол жеткізуді басқару (ESP8266 + Servo Motor + 3D басып шығару)
Мысық тағамдарына қол жеткізуді басқару (ESP8266 + Servo Motor + 3D басып шығару)

Бұл жоба мен қарт диабеттік мысық Чазға арналған автоматтандырылған мысықтарға арналған ыдыс жасау процесін қамтиды. Қараңыз, ол инсулин алмастан бұрын таңғы ас ішуі керек, бірақ мен ұйықтамас бұрын оның тамағын алуды ұмытып кетемін, бұл оның тәбетін бұзады және инсулин кестесін бұзады. Бұл ыдыс түн ортасы мен таңғы 7.30 аралығында тағамның қақпағын жабу үшін серво қозғалтқышты пайдаланады. NodeMCU ESP8266 микроконтроллерінің Arduino эскизі кестені басқару үшін Network Time Protocol (NTP) желісін қолданады.

Бұл жоба жас, белсенді мысықтарға сәйкес келмеуі мүмкін. Чаз өте ескі және әлсіз, ол тостағанды ашуға тырыспайды, бірақ мүмкін.

Егер сіз Arduino немесе ESP8266 -да жаңадан болсаңыз, сізге келесі қажетті нұсқаулықтар ұнай алады:

  • Нұсқаулықтар Arduino класы
  • Нұсқауға болатын заттар заттары класы

Жабдықтар

  • 3D принтері (мен Creality CR-10s Pro қолданамын)
  • 3D принтер жіп (мен алтын PLA қолданамын)
  • NodeMCU ESP8266 wifi микроконтроллері
  • USB кабелі (А -дан микробқа дейін)
  • USB қуат адаптері
  • Микросерво қозғалтқышы
  • Кішкене бұрағыш пен бұрандалар
  • Қосылатын сым
  • Тақырып түйреуіштері
  • Перма-прото тақта

Жұмыс үстінде болу үшін YouTube, Instagram, Twitter, Pinterest -те мені қадағалап, ақпараттық бюллетеньге жазылыңыз. Amazon Associate ретінде мен серіктестік сілтемелерімді қолдана отырып, сатып алуларыңыздан табыс табамын.

1 -қадам: 3D басып шығарылған бөлшектер

3D басып шығарылған бөлшектер
3D басып шығарылған бөлшектер
3D басып шығарылған бөлшектер
3D басып шығарылған бөлшектер

Мысықтарға арналған ыдыс ұстағыш Арди Лайдың Thingiverse дизайнына негізделген. Мен мысықтың тостағанын орналастыру үшін оны үлкейтіп қойдым, сонымен қатар масштабтау оны тым биік етіп қойғандықтан оны қысқартадым. Мен микросерво қозғалтқышы үшін ұстағышты және кабельдердің ішкі жағына өтетін бірнеше тесікті қостым.

Мен Tinkercad көмегімен микро қақпақтың мүйізіне бекітуге арналған қарапайым қақпақты модельдедім. Сіз менің дизайнымды Tinkercad -тен тікелей ала аласыз және/немесе осы қадамға бекітілген STL жүктей аласыз.

Мен бөліктерді Creality CR-10s Pro принтерінде алтын PLA жіппен басып шығардым.

Ақпаратты ашу: бұл жазу кезінде мен Tinkercad шығаратын Autodesk қызметкерімін.

2 -қадам: қақпақты Servo моторына бекітіңіз

Қақпақты Servo моторына бекітіңіз
Қақпақты Servo моторына бекітіңіз
Қақпақты Servo моторына бекітіңіз
Қақпақты Servo моторына бекітіңіз

Мен серво мүйізіндегі тесіктердің көлемін ұлғайту үшін кішкене бұрғылау ұшын қолдандым, содан кейін servo -ны 3D басып шығарылған қақпаққа бекіту үшін бұрандаларды қолдандым.

3 -қадам: NodeMCU ESP8266 схемасын құрыңыз

NodeMCU ESP8266 схемасын құрыңыз
NodeMCU ESP8266 схемасын құрыңыз
NodeMCU ESP8266 схемасын құрыңыз
NodeMCU ESP8266 схемасын құрыңыз
NodeMCU ESP8266 схемасын құрыңыз
NodeMCU ESP8266 схемасын құрыңыз
NodeMCU ESP8266 схемасын құрыңыз
NodeMCU ESP8266 схемасын құрыңыз

Схема NodeMCU ESP8266 wifi микроконтроллерімен басқарылады. Микросерво қозғалтқышты оңай ажырату үшін мен перма-прото тақтасындағы тақырып түйреуіштерін қолдандым.

Сары серво сымы: NodeMCU D1

Қызыл серво сымы: NodeMCU қуаты (3V3 немесе VIN)

Қара серво сымы: NodeMCU жерге (GND)

4 -қадам: Arduino коды мен тестін жүктеңіз

Arduino коды мен тестін жүктеңіз
Arduino коды мен тестін жүктеңіз

Қозғалтқыш/қақпақ жинағын 3D басып шығарылған ыдыс ұстағышындағы мотор тәрізді ойыққа орнатыңыз. Қозғалтқыштың жоғарғы бөлігін микроконтроллер тақтасының түйреуіштеріне, ал USB кабелі арқылы компьютерге қосыңыз.

Arduino эскизі ағымдағы уақытты алу үшін Network Time хаттамасын қолданады, содан кейін қақпағы қатаң кодталған кестеге сәйкес ашылады немесе жабылады. Келесі кодты көшіріп алыңыз, Wi -Fi тіркелгі деректерін және UTC уақытын ауыстыруды жаңартыңыз және Arduino IDE көмегімен NodeMCU тақтасына жүктеңіз.

#қосу

#қосу #қосу #қосу ESP8266WiFiMulti wifiMulti; // 'wifiMulti' WiFiUDP UDP деп аталатын ESP8266WiFiMulti класының данасын жасаңыз; // IPAddress timeServerIP жіберу және алу үшін WiFiUDP класының данасын жасаңыз; // time.nist.gov NTP серверінің адресі char char* NTPServerName = «time.nist.gov»; const int NTP_PACKET_SIZE = 48; // NTP уақыт белгісі хабарлама байтының алғашқы 48 байтында NTPBuffer [NTP_PACKET_SIZE]; // кіріс және шығыс пакеттерін ұстауға арналған буфер Servo myservo; // сервоприводты басқару үшін серво объектісін құру // тақталардың көпшілігінде он екі серво объектісін құруға болады int pos = 0; // айнымалы мән servo позициясын сақтау үшін void setup () {myservo.attach (5); // серваны объектіге 5 aka D1 түйісіндегі бекітеді // әдепкі бойынша қақпақты ашыңыз Serial.println («қақпақты ашу»); for (pos = 95; pos> = 0; pos -= 1) {// 95 градустан 0 градусқа дейін ауысады myservo.write (pos); // servo -ға «pos» кідірісіндегі позицияға өтуін айт (15); // серво позицияға жеткенше 15 мс күтеді} Serial.begin (115200); // Компьютерге хабар жіберу үшін сериялық байланысты бастау (10); Serial.println («\ r / n»); startWiFi (); // Кейбір кіру нүктелеріне қосылуға тырысыңыз. Содан кейін қосылудың басталуын күтіңізUDP (); if (! WiFi.hostByName (NTPServerName, timeServerIP)) {// Serial.println NTP серверінің IP мекенжайын алыңыз («DNS іздеу сәтсіз аяқталды. Қайта жүктелуде.»); Serial.flush (); ESP.reset (); } Serial.print («Уақыт сервері IP: / t»); Serial.println (timeServerIP); Serial.println («\ r / nNTP сұранысы жіберілуде…»); sendNTPpacket (timeServerIP); } белгісіз ұзақ интервалNTP = 60000; // NTP уақытын сұрау минут сайын белгісіз ұзақ prevNTP = 0; белгісіз ұзақ lastNTPResponse = millis (); uint32_t timeUNIX = 0; unsigned long prevActualTime = 0; void loop () {unsigned long currentMillis = millis (); if (currentMillis - prevNTP> intervalNTP) {// Егер соңғы NTP сұранысынан бір минут өткен болса prevNTP = currentMillis; Serial.println («\ r / nNTP сұранысы жіберілуде…»); sendNTPpacket (timeServerIP); // NTP сұранысын жіберу} uint32_t time = getTime (); // NTP жауапының келгенін тексеріңіз және (UNIX) уақытын алыңыз, егер (уақыт) {// Егер жаңа уақыт белгісі қабылданған болса, timeUNIX = уақыт; Serial.print («NTP жауабы: / t»); Serial.println (timeUNIX); lastNTPResponse = currentMillis; } if if ((currentMillis - lastNTPRESponse)> 3600000) {Serial.println («Соңғы NTP жауапынан 1 сағаттан астам. Қайта жүктеу.»); Serial.flush (); ESP.reset (); } uint32_t actualTime = timeUNIX + (currentMillis - lastNTPRESponse)/1000; uint32_t EasternTime = timeUNIX - 18000 + (currentMillis - lastNTPRESponse)/1000; if (actualTime! = prevActualTime && timeUNIX! = 0) {// Егер соңғы басып шығарудан бір секунд өткен болса prevActualTime = actualTime; Serial.printf («\ rUTC уақыты: / 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) {// Serial.println қақпағын ашу («қақпақты ашу»); for (pos = 95; pos> = 0; pos -= 1) {// 95 градустан 0 градусқа дейін ауысады myservo.write (pos); // servo -ға «pos» кідірісіндегі позицияға өтуін айт (15); // серво позицияға жеткенше 15ms күтеді}} // түн ортасында if (getHours (EasternTime) == 0 && GetMinutes (EasternTime) == 0 && GetSeconds (EasternTime) == 0) {// Serial қақпағын жабыңыз. println («қақпақты жабу»); for (pos = 0; pos <= 95; pos += 1) {// 0 градустан 95 градусқа дейін // 1 дәрежелі қадамдармен myservo.write (pos); // servo -ға «pos» кідірісіндегі позицияға өтуін айт (15); // серво позицияға жеткенше 15 м күтеді}} /* // тестілеу, егер (getHours (EasternTime) == 12 && GetMinutes (EasternTime) == 45 && GetSeconds (EasternTime) == 0) {// қақпақты жабыңыз Serial.println («қақпақты жабу»); for (pos = 0; pos = 0; pos -= 1) {// 95 градустан 0 градусқа дейін ауысады myservo.write (pos); // servo -ға «pos» кідірісіндегі позицияға өтуін айт (15); // servo позицияға жеткенше 15ms күтеді}} */} void startWiFi () {// Кейбір берілген кіру нүктелеріне қосылуға тырысыңыз. Содан кейін wifiMulti.addAP («ssid_from_AP_1», «your_password_for_AP_1») қосылуын күтіңіз; // қосылғыңыз келетін Wi-Fi желілерін қосыңыз //wifiMulti.addAP("ssid_from_AP_2 «,» your_password_for_AP_2 «)); //wifiMulti.addAP("ssid_from_AP_3 «,» your_password_for_AP_3 «); Serial.println («Қосылу»); while (wifiMulti.run ()! = WL_CONNECTED) {// Wi-Fi кідірісін қосуды күтіңіз (250); Serial.print ('.'); } Serial.println («\ r / n»); Serial.print («Қосылды»); Serial.println (WiFi. SSID ()); // Бізге Serial.print қай желіге қосылғанын айтыңыз («IP мекенжайы: / t»); Serial.print (WiFi.localIP ()); // ESP8266 IP мекенжайын Serial.println компьютеріне жіберіңіз («\ r / n»); } void startUDP () {Serial.println («UDP іске қосылады»); UDP.begin (123); // 123 Serial.print портындағы UDP хабарларын тыңдауды бастаңыз («Жергілікті порт: / t»); Serial.println (UDP.localPort ()); Serial.println (); } uint32_t getTime () {if (UDP.parsePacket () == 0) {// Егер жауап болмаса (әлі) 0 қайтарады; } UDP.read (NTPBuffer, NTP_PACKET_SIZE); // пакетті буферге оқу // 4 уақыт белгісінің байтын 32 биттік санға біріктіру uint32_t NTPTime = (NTPBuffer [40] << 24) | (NTPBuffer [41] << 16) | (NTPBuffer [42] << 8) | NTPBuffer [43]; // NTP уақытын UNIX уақыт белгісіне түрлендіру: // Unix уақыты 1970 жылдың 1 қаңтарынан басталады. Бұл NTP уақытында 2208988800 секунд: const uint32_t жетпісжыл = 2208988800UL; // жетпіс жылды шегеріңіз: uint32_t UNIXTime = NTPTime - жетпісжыл; UNIXTime қайтару; } void sendNTPpacket (IPAddress & address) {memset (NTPBuffer, 0, NTP_PACKET_SIZE); // буфердегі барлық байттарды 0 күйіне қойыңыз // NTP сұранысын қалыптастыру үшін қажетті мәндерді инициализациялаңыз NTPBuffer [0] = 0b11100011; // LI, Нұсқа, Режим // уақыт белгісін сұрайтын пакетті жіберу: UDP.beginPacket (адрес, 123); // NTP сұраулары 123 UDP.write портына (NTPBuffer, NTP_PACKET_SIZE); UDP.endPacket (); } inline int getSeconds (uint32_t UNIXTime) {UNIXTime % 60 қайтару; } inline int getMinutes (uint32_t UNIXTime) {UNIXTime қайтару / 60 % 60; } inline int getHours (uint32_t UNIXTime) {UNIXTime / 3600 % қайтару 24; }

5 -қадам: қолданыңыз

Оны қолданыңыз!
Оны қолданыңыз!
Оны қолданыңыз!
Оны қолданыңыз!

Сымдарды тостаған ұстағыштың ішкі жағына бағыттаңыз және мысық бергішті USB айнымалы ток адаптері арқылы розеткаға қосыңыз. Қарапайым код қалай жазылады, ол «ашық» күйде жүктеледі және Arduino эскизінде көрсетілген уақыт шегінде қақпақ қалпын өзгертеді.

Бізді қадағалағаныңыз үшін рахмет! Егер сіз өзіңіздің жеке нұсқаңызды жасасаңыз, мен оны төмендегі «Мен жасадым» бөлімінен көргім келеді!

Егер сізге бұл жоба ұнайтын болса, сізге менің кейбіреулерім қызық болуы мүмкін:

  • Радуга портреттеріне арналған призма ұстағыш
  • Мысық мұнарасы бар фанера сақтау қабырғасы
  • Жарықдиодты Mason Jar шамдары (3D басып шығарылған қақпақ)
  • 3D принтердің құрғақ қорапшасы
  • Төтенше USB қуат көзі (3D басып шығарылған)
  • Жарықдиодты жарықдиодты кәмпиттер
  • Дренажы бар 3D басып шығарылған геометриялық қондырғышы
  • Жарқыраған 3D басып шығарылған гүлдер
  • Жарықдиодты скутердің астына қалай қоюға болады (Bluetooth көмегімен)

Жұмыс үстінде болу үшін мені YouTube, Instagram, Twitter және Pinterest -те қадағалаңыз.

Ұсынылған: