Съдържание:

Сензор за ниво на колектор за захранване с батерии: 7 стъпки (със снимки)
Сензор за ниво на колектор за захранване с батерии: 7 стъпки (със снимки)

Видео: Сензор за ниво на колектор за захранване с батерии: 7 стъпки (със снимки)

Видео: Сензор за ниво на колектор за захранване с батерии: 7 стъпки (със снимки)
Видео: Zigbee сензор за присъствие и светлина за Tuya Smart, интеграция в Home Assistant 2024, Ноември
Anonim
Сензор за ниво на водосъбирател, захранван от батерии
Сензор за ниво на водосъбирател, захранван от батерии
Сензор за ниво на водосъбирател, захранван от батерии
Сензор за ниво на водосъбирател, захранван от батерии

Нашата къща има резервоар за вода, захранван от дъжд, падащ върху покрива, и се използва за тоалетна, пералня и поливане на растения в градината. През последните три години лятото беше много сухо, затова следихме нивото на водата в резервоара. Досега използвахме дървена пръчка, която сложихме в резервоара и маркирахме нивото. Но със сигурност трябва да е възможно да се подобри това!

Тук идва този проект. Идеята е да се прикрепи ултразвуков сензор за разстояние в горната част на резервоара. Този сензор работи като сонар, излъчващ звукови вълни, които след това се отразяват от водната повърхност. От времето, необходимо на вълните да се върнат и скоростта на звука, можете да изчислите разстоянието до водната повърхност и да определите колко пълен е резервоарът.

Тъй като нямам мрежова връзка близо до резервоара, от съществено значение е цялото устройство да работи на батерии. Това означава, че трябваше да съм наясно с консумацията на енергия на всички части. За да изпратя обратно данните, реших да използвам вградения Wifi на микрочип ESP8266. Докато Wifi е доста гладен за захранване, той има предимство пред друг вид радиовръзка: можете директно да се свържете с безжичния рутер на вашия дом, без да се налага да изграждате друго устройство, което действа като реле.

За да спестя енергия, ще поставя ESP8266 в дълбок сън през повечето време и ще правя измервания на всеки час. За целта ми да следя нивото на водата това е повече от достатъчно. Данните ще бъдат изпратени до ThingSpeak и след това могат да бъдат отчетени на смартфон чрез приложение.

Още една подробност! Скоростта на звука, необходима за измерването на разстоянието, зависи от температурата и в по -малка степен от влажността. За точно външно измерване през сезоните ще добавим BME280 сензор, който измерва температура, влажност и налягане. Като бонус това прави от нашия сензор за нивото на водата и мини метеорологична станция.

Части:

  • 1x ESP8266 ESP-12F.
  • 1x адаптерна плоча ESP-12F.
  • 1x FT232RL FTDI: USB към сериен адаптер.
  • 1x HC-SR04-P: ултразвуков модул за измерване на разстоянието. Обърнете внимание, че P е важен, тъй като това е версията, която има ниско минимално работно напрежение от 3V.
  • 1x BME280 3.3V версия: сензор за температура, налягане и влажност.
  • 1x IRL2203N: n-канален MOSFET транзистор.
  • 1x MCP1700-3302E 3.3V версия: регулатор на напрежението.
  • 3x акумулаторна батерия AA, напр. 2600mAh.
  • 1x държач за 3 батерии.
  • 1x макет.
  • Резистори: 1x 470K, 1x 100K, 4x 10K.
  • Кондензатори: 2x керамични 1uF.
  • 3x превключвател.
  • U-образни проводници.
  • Кабелни проводници.
  • Пластмасов съд за супа 1л.
  • Прикачен пръстен за контейнера.

Направих кода достъпен в GitHub.

Стъпка 1: Запознаване с ултразвуковия сензор за разстояние

Запознаване с ултразвуковия сензор за разстояние
Запознаване с ултразвуковия сензор за разстояние
Запознаване с ултразвуковия сензор за разстояние
Запознаване с ултразвуковия сензор за разстояние

Ще измерим разстоянието до водната повърхност с ултразвуков сензор, HC-SR04-P. Точно като прилеп, този сензор използва сонар: той изпраща звуков импулс с твърде висока честота за човешкото ухо, следователно ултразвуков и изчаква да удари обект, да се отрази и да се върне. След това разстоянието може да бъде изчислено от времето, необходимо за приемане на ехото и скоростта на звука.

Конкретно, ако Trig щифтът се дърпа високо за поне 10 μs, сензорът изпраща поредица от 8 импулса с честота 40 Hz. След това отговорът се получава на ехо пина под формата на импулс с продължителност, равна на времето между изпращането и приемането на ултразвуковия импулс. След това трябва да разделим на 2, тъй като ултразвуковият импулс се движи напред-назад и се нуждаем от еднопосочното време на пътуване и умножаваме по скоростта на звука, която е около 340 m/s.

Но почакай малко! Всъщност скоростта на звука зависи от температурата и в по -малка степен от влажността. Забивам ли се или това е от значение? С помощта на изчислителен инструмент откриваме, че през зимата (при -5 ° C) можем да имаме 328,5 m/s, а през лятото (при 25 ° C) 347,1 m/s. Така че да предположим, че откриваме еднопосочно време на пътуване от 3 ms. През зимата това би означавало 98,55 см, а през лятото 104,13 см. Това е голяма разлика! Така че, за да получим достатъчно точност през сезоните и дори ден и нощ, трябва да добавим термометър към нашата настройка. Реших да включа BME280, който измерва температура, влажност и налягане. В кода, който използвах във функцията speedOfSound формула, която изчислява скоростта на звука по отношение на трите параметъра, въпреки че температурата наистина е най -важният фактор. Влажността все още има по -малък ефект, но въздействието на налягането е незначително. Бихме могли да използваме по -проста формула, като вземем предвид само температурата, която внедрих в speedOfSoundSimple.

Има още един важен момент за HC-SR04. Предлагат се две версии: стандартната версия работи при 5V, докато HC-SR04-P може да работи в диапазон от напрежения от 3V до 5V. Тъй като 3-те акумулаторни батерии AA осигуряват около 3x1.25V = 3.75V, важно е да получите P-версия. Някои продавачи може да изпратят грешен. Така че, ако си купите, разгледайте снимките. Двете версии изглеждат различно както отзад, така и отпред, както е обяснено на тази страница. На гърба на P-версията и трите чипа са хоризонтални, докато при стандартната версия единият е вертикален. В предната част стандартната версия има допълнителен сребърен компонент.

В електронната схема ще използваме транзистор като превключвател, за да изключим захранването на ултразвуковия сензор, когато нашата настройка премине в дълбок сън, за да спести живота на батерията. В противен случай той все още ще консумира около 2mA. BME280, от друга страна, консумира само около 5 μ, когато е неактивен, така че не е необходимо да го изключвате с транзистора.

Стъпка 2: Избор на платка ESP8266

Избор на платка ESP8266
Избор на платка ESP8266

За да работи сензорът възможно най -дълго на батерия, трябва да спестим консумация на енергия. Докато Wifi на ESP8266 предоставя много удобен начин за свързване на нашия сензор към облака, той също е доста гладен за енергия. При работа ESP8266 консумира около 80mA. Така че с батерии от 2600 mAh бихме могли да работим само с устройството си най -много 32 часа, преди те да са празни. На практика ще бъде по -малко, тъй като няма да можем да използваме пълния капацитет от 2600 mAh, преди напрежението да падне до твърде ниско ниво.

За щастие ESP8266 има и режим на дълбок сън, при който почти всичко е изключено. Така че планът е да поставите ESP8266 в дълбок сън през повечето време и да го събуждате толкова често, за да направите измерване и да изпратите данните през Wi -Fi на ThingSpeak. Според тази страница максималното време за дълбок сън е било около 71 минути, но от ядрото ESP8266 Arduino 2.4.1 се е увеличило до около 3,5 часа. В кода си се установих за един час.

Първо опитах удобната платка за разработка на NodeMCU, но ужасно, в дълбок сън тя все пак консумираше около 9 mA, което ни дава най-много 12 дни чист дълбок сън, без дори да отчитаме интервалите за събуждане. Важен виновник е регулаторът на напрежението AMS1117, който използва мощност, дори ако се опитате да го заобиколите, като свържете батерията директно към щифта 3.3V. Тази страница обяснява как да премахнете регулатора на напрежението и USB UART. Никога обаче не успях да направя това, без да унищожа дъската си. Освен това, след като премахнете USB UART, вече не можете да се свържете с ESP8266, за да разберете какво се е объркало.

Повечето платки за разработка на ESP8266 изглежда използват разточителния регулатор на напрежението AMS1117. Едно изключение е WEMOS D1 mini (снимка вляво), който идва с по -икономичния ME6211. Всъщност открих, че WEMOS D1 mini използва около 150 μA в дълбок сън, което е повече като него. Повечето от тях вероятно се дължат на USB UART. С тази платка трябва сами да запоявате заглавките за щифтовете.

Въпреки това, можем да направим много по-добре, като използваме платка с голи кости като ESP-12F (снимка вдясно), която няма USB UART или регулатор на напрежението. Захранвайки 3.3V щифта установих, че консумацията в дълбок сън е само 22 μA!

Но за да накарате ESP-12F да работи, подгответе се за запояване и малко повече проблеми с програмирането! Освен това, освен ако батериите директно не подават правилното напрежение, което е между 3V и 3.6V, трябва да осигурим собствен регулатор на напрежението. На практика се оказва трудно да се намери акумулаторна система, която да осигурява напрежение в този диапазон през целия си цикъл на разреждане. Не забравяйте, че също трябва да захранваме сензора HC-SR04-P, който теоретично може да работи с напрежение до 3V, но функционира по-точно, ако напрежението е по-високо. Освен това в моята диаграма HC-SR04-P се включва от транзистор, който предизвиква малък допълнителен спад на напрежението. Ще използваме регулатора на напрежението MCP1700-3302E. Максималното входно напрежение е 6V, така че го захранваме с до 4 батерии АА. Реших да използвам 3 батерии тип АА.

Стъпка 3: Създайте канал ThingSpeak

Ще използваме ThingSpeak, облачна услуга на IoT, за да съхраняваме данните си. Отидете на https://thingspeak.com/ и създайте акаунт. След като сте влезли, щракнете върху бутона Нов канал, за да създадете канал. В настройките на канала попълнете името и описанието, както желаете. След това назоваваме полетата на канала и ги активираме, като щракнем върху квадратчетата отдясно. Ако използвате моя код непроменен, полетата са следните:

  • Поле 1: ниво на водата (см)
  • Поле 2: Ниво на батерията (V)
  • Поле 3: температура (° C)
  • Поле 4: влажност (%)
  • Поле 5: налягане (Pa)

За бъдещи справки запишете идентификатора на канала, ключа за четене на API и ключа за API за запис, които могат да бъдат намерени в API ключовете на менюто.

Можете да отчетете данните на ThingSpeak на вашия смартфон с помощта на приложение. На моя телефон с Android използвам джаджата IoT ThingSpeak Monitor. Трябва да го конфигурирате с идентификатора на канала и ключа за четене на API.

Стъпка 4: Как да програмирате ESP-12F

Как да програмирате ESP-12F
Как да програмирате ESP-12F
Как да програмирате ESP-12F
Как да програмирате ESP-12F

Имаме нужда от платка с голи кости, за да спестим живота на батерията, но недостатъкът е, че е малко по-трудно да се програмира от платка за разработка с вграден USB UART.

Ще използваме Arduino IDE. Има и други инструкции, обясняващи как да го използвате, затова ще бъда кратък тук. Стъпките за приготвянето му за ESP8266 са:

  • Изтеглете Arduino IDE.
  • Инсталирайте поддръжка за платката ESP8266. В менюто Файл - Предпочитания - Настройки добавете URL адреса https://arduino.esp8266.com/stable/package_esp8266com_index.json към допълнителни URL адреси на мениджъра на борда. Следващо в менюто Инструменти - Борд - Boards Manager инсталирайте esp8266 от esp8266 общност.
  • Изберете като платка: Общ модул ESP8266.

За да се справя с ESP-12F използвах адаптерна плоча, често достъпна в онлайн магазините. Запоявах чипа към плочата и след това запоявах заглавките към плочата. Едва тогава открих, че адаптерната плоча е твърде широка за стандартна макет! Той не оставя свободни щифтове отстрани, за да осъществите вашите връзки.

Решението, за което отидох, е да използвам U-образни проводници и да ги свържа, както е на снимката вдясно, преди да поставите ESP8266 с адаптерната плоча на чертежа. Така GND и VCC са свързани към релсите на макетната платка, а останалите щифтове се предоставят по -надолу по дъската. Недостатъкът е, че макетът ви ще бъде доста претъпкан с проводници, след като завършите цялата верига. Друго решение е да поставите две дъски заедно, както е показано в това видео.

След това, за да програмираме ESP-12F през USB порта на вашия компютър, се нуждаем от USB към сериен адаптер. Използвах FT232RL FTDI програмист. Програмистът има джъмпер за избор между 3.3V или 5V. Трябва да се постави на 3.3V за ESP8266. Не го забравяйте, тъй като 5V може да изпържи чипа ви! Инсталирането на драйверите трябва да бъде автоматично, но ако програмирането не работи, можете да опитате да ги инсталирате ръчно от тази страница.

ESP8266 има режим на програмиране за качване на нов фърмуер на флаш и режим на флаш за стартиране на текущия фърмуер от флаш паметта. За да избирате между тези режими, някои щифтове трябва да приемат определена стойност по време на зареждане:

  • Програмиране: GPIO0: ниско, CH-PD: високо, GPIO2: високо, GPIO15: ниско
  • Светкавица: GPIO0: висока, CH-PD: висока, GPIO2: висока, GPIO15: ниска

Адаптерната плоча вече се грижи за изтеглянето на CH-PD и изтеглянето на GPIO15 с 10K резистори.

Така че в нашата електронна схема все още трябва да издърпаме GPIO2. Ние също така предоставяме превключвател за поставяне на ESP8266 в програмиране или в режим на светкавица и превключвател за нулиране, което става чрез свързване на RST към земята. Освен това се уверете, че сте свързали TX щифта на FT232RL към RXD щифта на ESP8266 и обратно.

Последователността на програмиране е следната:

  • Задайте GPIO2 на ниско, като затворите превключвателя за програмиране.
  • Нулирайте ESP8266, като затворите и след това отворите отново ключа за нулиране. ESP8266 сега се зарежда в режим на програмиране.
  • Задайте GPIO2 обратно на високо, като отворите превключвателя за програмиране.
  • Качете новия фърмуер от Arduino IDE.
  • Нулирайте отново ESP8266, като затворите и отворите отново ключа за нулиране. ESP8266 сега се зарежда във флаш режим и стартира новия фърмуер.

Сега можете да проверите дали програмирането работи, като качите известната скица на Blink.

Ако всичко това работи, поне пиновете GND, VCC, GPIO2, RST, TXD и RXD са правилно запоени и свързани. Какво облекчение! Но преди да продължите, бих препоръчал да тествате и другите щифтове с вашия мултицет. Аз самият имах проблем с един от щифтовете. Можете да използвате тази скица, която настройва всички щифтове на високо един по един за 5 секунди и след това поставя ESP8266 в дълбок сън за 20 секунди. За да активирате ESP8266 да се събуди след дълбок сън, трябва да свържете RST към GPIO16, който дава сигнал за събуждане.

Стъпка 5: Качване на скицата

Направих кода достъпен в GitHub, това е само един файл: Level-Sensor-Deepsleep.ino. Просто го изтеглете и го отворете в Arduino IDE. Или можете да изберете File - New и просто копирайте/поставете кода.

Има някаква информация, която трябва да попълните в началото на файла: името и паролата на WLAN, която да използвате, статичните IP данни и идентификационния номер на канала и API за запис на канала ThingSpeak.

Следвайки съвета в този блог, вместо DHCP, където рутерът динамично присвоява IP, използваме статичен IP, където сами задаваме IP адреса на ESP8266. Това се оказва много по -бързо, така че спестяваме активно време и по този начин енергия на батерията. Така че трябва да предоставим наличен статичен IP адрес, както и IP на рутера (шлюза), маската на подмрежата и DNS сървъра. Ако не сте сигурни какво да попълните, прочетете за настройката на статичен IP в ръководството на вашия рутер. На компютър с Windows, свързан чрез Wi-Fi към вашия рутер, стартирайте черупка (Windows button-r, cmd) и въведете ipconfig /all. Повечето от необходимата информация ще намерите в раздела Wi-Fi.

Разглеждайки кода, виждате, че за разлика от другия код на Arduino, повечето действия се извършват във функцията за настройка вместо във функцията цикъл. Това е така, защото ESP8266 преминава в дълбок сън, след като завърши функцията за настройка (освен ако не сме стартирали в режим OTA). След като се събуди, това е като ново рестартиране и отново стартира настройката.

Ето основните характеристики на кода:

  • След събуждане кодът задава switchPin (по подразбиране GPIO15) на високо. Това включва транзистора, който от своя страна включва сензора HC-SR04-P. Преди да заспи дълбоко, той поставя щифта обратно на ниско, като изключва транзистора и HC-SR04-P, като се уверява, че не изразходва по-скъпо зареждане на батерията.
  • Ако modePIN (по подразбиране GPIO14) е нисък, кодът преминава в режим OTA вместо в режим на измерване. С OTA (актуализация по въздуха) можем да актуализираме фърмуера през Wifi вместо през серийния порт. В нашия случай това е доста удобно, тъй като вече не се налага да свързваме серийния към USB адаптер за по -нататъшни актуализации. Просто задайте GPIO14 на ниско (с превключвателя OTA в електронната верига), нулирайте ESP8266 (с превключвателя за нулиране) и той трябва да стане достъпен в IDE на Arduino за качване.
  • На аналоговия PIN (A0) измерваме напрежението на батерията. Това ни позволява да изключим нашето устройство, известно като постоянен дълбок сън, ако напрежението стане твърде ниско, под minVoltage, за да предпази батериите от прекомерно разреждане. Аналоговото измерване не е много точно, правим измервания numMeasuresBattery (по подразбиране 10) и вземаме средната стойност, за да подобрим точността.
  • Измерването на разстоянието на сензора HC-SR04-P се извършва във функцията distanceMeasurement. За да се подобри точността, измерването се повтаря numMeasuresDistance (по подразбиране 3) пъти.
  • Има функция за изчисляване на speedOfSound от измерването на температурата, влажността и налягането от сензора BME280. I2C адресът по подразбиране на BME280 е 0x76, но ако не работи, може да се наложи да го промените на 0x77: bool bme280Started = bme280.begin (0x77);
  • Ще използваме BME280 в принудителен режим, което означава, че отнема едно измерване и се връща в режим на заспиване, за да пести енергия.
  • Ако зададете капацитет (l), пълно Разстояние (см) и площ (м2), кодът изчислява оставащия обем на резервоара за вода от измерването на разстоянието: двоен оставащ Обем = капацитет+10,0*(пълно разстояние-разстояние)*площ; и качете това в ThingSpeak. Ако запазите стойностите по подразбиране, той качва разстоянието до водната повърхност в см.

Стъпка 6: Изграждане на електронна схема

Изграждане на електронна схема
Изграждане на електронна схема

По -горе е схемата на електронната схема. Той е доста голям за една платка, особено с прекалено голямата адаптерна плоча и трика с U-образните проводници. В един момент със сигурност ми се искаше да използвам алтернативата за свързване на две платки, но в крайна сметка успях.

Ето важните характеристики на веригата:

  • Има две напрежения, които играят роля: входното напрежение от батерията (около 3.75V) и 3.3V, което захранва ESP8266 и BME280. Поставих 3.3V на лявата шина на таблото и 3.75V на дясната шина. Регулаторът на напрежението преобразува 3.75V в 3.3V. Следвайки инструкциите в листа с данни, добавих 1 μF кондензатори към входа и изхода на регулатора на напрежението, за да увелича стабилността.
  • GPIO15 на ESP8266 е свързан към порта на транзистора. Това позволява на ESP8266 да включи транзистора и по този начин ултразвуковия сензор, когато е активен и да го изключи, когато влиза в дълбок сън.
  • GPIO14 е свързан към превключвател, OTA превключвател. Затварянето на превключвателя дава сигнал към ESP8266, който искаме да стартираме след това в режим OTA, т.е. след като натиснем (затворим и отворим) ключа RESET и качим нова скица по въздуха.
  • Щифтовете RST и GPIO2 са свързани както в схемата за програмиране. ПИНът RST вече е свързан и с GPIO16, за да позволи на ESP8266 да се събуди от дълбок сън.
  • Пиновете TRIG и ECHO на ултразвуковия сензор са свързани към GPIO12 и GPIO13, докато щифтовете SCL и SDA на BME280 са свързани към GPIO5 и GPIO4.
  • И накрая, аналоговият извод ADC е чрез делител на напрежение, свързан към входното напрежение. Това позволява измерване на входното напрежение за проверка на заряда на батериите. Щифтът на ADC може да измерва напрежения между 0V и 1V. За делителя на напрежението избрахме резистори от 100K и 470K. Това означава, че напрежението на щифта на ADC се определя от: V_ADC = 100K/(100K+470K) V_in. Приемайки V_ADC = 1V това означава, че можем да измерваме входното напрежение до V_in = 570/100 V_ADC = 5.7V. Що се отнася до консумацията на енергия, също има известен ток, който изтича през делителя на напрежението. С V_in = 3.75V от батериите намираме I_leak = 3.75V/570K = 6.6 μA.

Дори когато веригата работи от батерии, е възможно да свържете USB към сериен адаптер. Просто не забравяйте да изключите VCC на адаптера и да свържете GND, RX и TX както в схемата за програмиране. Това дава възможност да отворите Serial Monitor в Arduino IDE, за да прочетете съобщенията за отстраняване на грешки и да се уверите, че всичко работи според очакванията.

За цялата верига измерих консумация на ток от 50 μA в дълбок сън, когато работи от батерии. Това включва ESP8266, BME280, ултразвуковия сензор (изключен от транзистора) и изтичане през делителя на напрежението и може би други течове. Така че това не е толкова лошо!

Открих, че общото активно време е около 7 секунди, от които 4,25 секунди за свързване към Wi -Fi и 1,25 секунди за изпращане на данните до ThingSpeak. Така че с активен ток от 80mA открих 160 μAh на час за активното време. Като добавим 50 μAh на час за състоянието на дълбок сън имаме общо 210 μAh на час. Това означава, че 2600 mAh батерии теоретично издържат 12400 часа = 515 дни. Това е абсолютният максимум, ако можем да използваме пълния капацитет на батериите (което не е така) и няма течове, които не открих с настоящите си измервания. Така че тепърва ще видя дали това наистина се случва.

Стъпка 7: Довършване на сензора

Завършване на сензора
Завършване на сензора
Завършване на сензора
Завършване на сензора
Завършване на сензора
Завършване на сензора

Сложих сензора в пластмасов контейнер от 1 литър, който съдържаше супа. В долната част направих два отвора, за да паснат „очите“на сензора HC-SR04-P. Освен отворите, контейнерът трябва да е водоустойчив. След това се прикрепя към стената на резервоара за вода с кръгъл пръстен, който обикновено се използва за тръба за източване на дъждовна вода.

Забавлявайте се с проекта!

Препоръчано: