Как да се изгради контролна схема с регулируемо работно време чрез Wi-Fi

SCP-093 Red Sea Object | Euclid | portal / extradimensional scp (Юли 2019).

$config[ads_text] not found
Anonim

Как да се изгради контролна схема с регулируемо работно време чрез Wi-Fi


В тази статия ще научите как да изградите система, която да включва и изключва зареждания с постоянен ток чрез мобилно приложение. Ще научите също как да изпълнявате тази задача чрез незабавни действия или чрез предварително зададени таймери за включване и изключване на товари.

Резюме на Проекта

Можете да внедрите тази система в среди, където трябва да настроите DC зареждането за определено време. Това ще ви позволи да използвате приложението си за Android без да е необходим хардуерен интерфейс, клавиатура и LCD екран.

Общ преглед на целия проект.

Списък с части

частКОЛ
Arduino UNO или съвместим съвет1
Wi-Fi модул ESP82661
USB кабел TTL (опция)1
Реле SPDT 12V2
BC337 NPN BJT2
BS170 MOSFET N канал1
1K ома резистор2
10K ома резистор2
1N4007 диод2
Винтови терминали2
Регулируем регулатор на напрежението LM3171
0.1uF кондензатор2
Заглавници, женски и мъжки-
Празна плоскост на ПХБ2

Настройване на борда за пробив ESP8266

ESP8266 е евтин SoC чип с вграден микроконтролер и пълен TCP / IP протоколен стек, което означава, че той може директно да осъществи достъп до вашата Wi-Fi мрежа.

Тъй като този чип има свой собствен MCU, можете да поставите кода си за кандидатстване в него или можете да използвате модула точно като Wi-Fi радиоприемник - като това, което ще направим в този проект. Ще бъде по-ефективно да се използва един и същ модул като приемо-предавател и контролер, но само за учебни цели, вместо това ще комуникираме с модула, като използваме Arduino.

Чипът ESP8266 се предлага в различни модули. Ще използваме модула ESP-01. Разбира се, можете да използвате всеки друг модул.

Първо, трябва да знаете, че модулът работи на 3.3V, а логиката-високото напрежение от Arduino трябва да бъде същата, за да предотврати причиняването на повреди на нашия модул. Това изисква конвертор на нивото на напрежение между Arduino (който работи на 5V) и модула. Добрата новина е, че само трансферният щифт на Arduino ще се нуждае от този конвертор, тъй като приемникът ще разпознае 3.3V логически сигнали от ESP8266

Един от най-простите начини да направите това преобразуване е да използвате дизайн от Sparkfun: Можете да поръчате готов модул.

5V до 3.3V конвертор на нивото

Следната фигура показва нашето ESP8266 pinout:

Източник на изображението: Ръководство за бърз старт на WiFi модула на ESP8266

PIN функция
UTXDUART предават данни
URXDUART Получаване на данни: Входът трябва да е 3.3V съвместим
CH_PDPower-down: Нисък вход захранва чипа надолу, високият вход го захранва; свързвайте високо с нормална работа или модулът няма да функционира.
GPIO0При стартиране: Трябва да е високо, за да влезете в светкавицата или в нормалното зареждане; low влиза в специални режими на зареждане.
GPIO2При стартиране: Ниски причини буутлоудъра да влезе в режим на качване на флаш; високата причина за нормално зареждане.
RSTНулиране; активно ниско
GNDприземен
VCCМощност / 3.3V

Използвах LM317, регулируем линеен регулатор на изходното напрежение с изходен ток до 1, 5А, за осигуряване на подходящо 3.3V захранване за модула.

Забележка : Не използвайте 3.3V щифт от Arduino, докато 3.3V регулаторът на напрежение, използван в Arduino, не може да изведе искания ток за модула, особено за пиковата консумация на енергия при предаване.

ESP8266 диаграма на пробив

Използвах BS170 (вместо BSS138) за логически конвертор; и двете работят добре.

ESP8266 breakout board

Сега можете да свържете модула си с вашия USB-TTL конвертор кабел и да опитате модула. За повече подробности препоръчвам да прочетете някои стартови наръчници като ESP8266 WiFi Module Quick Start Guide.

USB-TTL кабел за преобразуване

Настройване на борда на прекъсвачите на релета

Диагностична схема на релейните платки

Използвах BC337 NPN BJT за управление на бобината на релето с 1K Ohm базов резистор. Аз също използвах 1n4007 диод като защита от обратното напрежение на намотката.

Избрах да направя нормално затворена (НС) връзка със земята. Докато изключването е нормалното състояние за мен, можете да обърнете връзката, ако искате.

Релейна преграда (отгоре)

Разделителна дъска за реле (изглед отдолу)

Ардуино кодекс

Сега имаме проблем. ESP8266 използва UART като интерфейс за AT команди, а Arduino UNO (който използва Atmega328) има само един UART порт. Този един порт вече е свързан към нашия USB-TTL мост, също с щифт 0 и щифт 1.

Като решение можете да използвате емулатор за UART порт на друг цифров щифт на Arduino, използвайки AltSoftSerial или SoftwareSerial библиотеки. Това ще ви позволи все още да имате хардуерния UART порт за отстраняване на грешки и отпечатване на съобщения в конзолата, докато софтуерът ще бъде за комуникация с модула.

Много хора (включително и мен) съобщиха за провал със сериен софтуер за високи скорости на предаване на данни - като този, който ще използваме с esp8266, 115200 baud. Мога да кажа, че ще имате 50% повредени получени данни от модула, ако сте използвали сериен софтуер и почти 100% коректно прехвърлени данни от Arduino към модула. Получих тези резултати, след като подуших RX и TX линиите.

Като решение, добавих някои команди за "дефиниране" в кода, за да направите нещата по-лесни за избор между софтуерен или хардуерен порт. Имайте предвид, че не можете да използвате същия порт за отстраняване на грешки и комуникация с модула, така че трябва да избирате между тях.

 //uncomment Serial.*** if you want to use HW serial port (PIN 0, 1) //uncomment esp8266.*** if you want to use SW serial port (PIN 2, 3) #define esp8266_Available() Serial.available() //esp8266.available() #define esp8266_Find(ARG) Serial.find(ARG) //esp8266.find(ARG) #define esp8266_Read() Serial.read() //esp8266.read() #define esp8266_Write(ARG1, ARG2) Serial.write(ARG1, ARG2) //esp8266.write(ARG1, ARG2) #define esp8266_Print(ARG) Serial.print(ARG) //esp8266.print(ARG) 

В кода ще намерите частта, която настройва модула, за да се свърже с маршрутизатора ви.

 sendCommand("AT+RST\r\n", 2000, DEBUG); // reset module sendCommand("AT+CWMODE=1\r\n", 1000, DEBUG); // configure as access point sendCommand("AT+CWJAP=\"tur\", \"341983#tur\"\r\n", 3000, DEBUG); //**** CHANGE SSID and PASSWORD ACCORDING TO YOUR NETWORK ******// delay(10000); sendCommand("AT+CIFSR\r\n", 1000, DEBUG); // get ip address sendCommand("AT+CIPMUX=1\r\n", 1000, DEBUG); // configure for multiple connections sendCommand("AT+CIPSERVER=1, 1337\r\n", 1000, DEBUG); // turn on server on port 1337 

Линията Sketch чака команда да получи Wi-Fi връзка. Понастоящем поддържаните команди са:

  • "con", за да отговори на състоянието на резултатите, ниско или високо.
  • 'on =' включете съответния щифт.
  • 'of =' изключете съответния щифт.
  • "Tm = n / fS", зададен на (n) / изключен (f) таймер за съответния щифт.

Всички предишни команди имат отговорен отговор.

Забележки:

  • Някои части на тази скица се основават на урок AllAboutEE.
  • Ако използвате модули със стар SDK, може да страдате от бъгове като мен. Единственото решение в този случай е да актуализирате фърмуера си до най-новата версия. Проверете тази статия на AAC за помощ при актуализирането на фърмуера. Аз усъвършенствах фърмуера от версия 1.3 до 1.5.4.

Изтегляне на кода

Приложение за Android

За да контролираме всички горепосочени хардуерни компоненти, ще използваме просто приложение за Android. Това приложение ще ни позволи да включим или изключим изхода директно или след определен период от време.

Изтегляне на кода

Забележка: Това приложение изисква Android 4.0 (IceCreamSandwich) и нагоре.

  • На първо място, трябва да знаете IP адреса на вашия модул. Ако сте използвали серийния порт на софтуера, IP ще бъде отпечатан на конзолата, ако сте използвали хардуерен порт, трябва да използвате сериен кабел, за да подушите RX, TX линии и да видите IP адреса. Също така ще трябва да знаете номера на портовете, както го поставяте в скицата. След това натиснете "свързване", за да получите състоянието на всичките три входа. Ще трябва да сте сигурни, че вашият Wi-Fi е включен и сте свързани към вашата локална мрежа.
  • Сега натиснете който и да е превключвател, който искате да включите / изключите. Когато искате, можете да кликнете върху "опресняване", за да опресните състоянието на всички изходи.
  • В раздела "Таймери" можете да настроите някой от тези три изхода да се включи / изключи след определен период от време (между 0 и 24 часа).
  • След всеки процес, ще получите съобщение за потвърждение, което ви казва дали процесът е приключил успешно или имате грешка.