СОЗДАНИЕ БЕСПРОВОДНОГО ШИЛДА-БАРОМЕТРА С ESP8266. ЧАСТЬ II. МОДУЛИ И ПРОТОТИПИРОВАНИЕ
Мы продолжаем вас знакомить с созданием беспроводного шилда-барометра с использованием модуля ESP8266: вторая часть перевода статьи http://digitaljunky.io/make-a-connected-barometer-shield-for-arduino-uno
Первая часть перевода расположена тут
ARDUINO И ДЕЛИТЕЛЬ НАПРЯЖЕНИЯ
Здесь мы будем использовать два резистора для создания выходного напряжения, которое является лишь частью от входного. Формула тут такова: Vo = Vin * R2 / (R1 + R2). С Vin = 5В, R1=1кОм и R2=2кОм, выходное напряжение Vo = 5*2/(1+2) = 3.33В. А это же то, что нам надо! Вы можете использовать другие номиналы резисторов, лишь бы соотношение R2 / (R2+R1) оставалось тем же.
Если вы хотите изучить больше о делителях напряжения, вы можете прочитать об этом тут. Схема, которая тут реализована, отличается от той, которую можно найти по ссылке, однако они работают одним и тем же образов.
Как мы сказали ранее, мы не можем использовать пин 3.3В Arduino для питания WIFI модуля ESP8266, поскольку ток на этом выходе не является достаточным. Вот почему мы будем использовать регулятор напряжения, для понижения выхода с линии 5В до 3.3В. Два развязывающих конденсатора расположены по обоим сторонам регулятора. C1 и C4 рекомендованы документацией. C2 и C3 - дополнительная предосторожность.
ARDUINO И КОНВЕРТЕР ЛОГИЧЕСКОГО УРОВНЯ
Это устройство используется для повышения напряжения сигнала от устройства с более низким напряжением к более высокому напряжению, равно как и понижение уровня сигнала от устройства с более высоким уровнем к более низкому. В нашем случае, стороной с высоким напряжением является плата Arduino (5В), а стороной с низким (3.3В) - модуль ESP8266.
Инструкцию по работе с подобным преобразователем можно найти тут. Стоит отметить, что модель, которую они используют для демонстрации, отличается от моей, так как у неё в обоих направлениях работает только один канал из двух.
ARDUINO С НАПРЯЖЕНИЕМ 3.3V
Может показаться достаточным использовать для данной работы версию Arduino, которая сразу же работает на логике 3.3В. Это может быть, как и Arduino Pro mini 3.3V 8MHz, так и клон от SainSmart, который позволяет переключатся между работой в режиме на 3.3В и 5В при помощи переключателя. Было выбрано это решение, потому что оно предоставляет возможность избавиться от некоторых ограничений, с которыми можно встретится при отладке схемы. В данном случае будем использовать более общие решения, чтобы сделать данную инструкцию как можно более доступной (насколько это возможно).
ОБНОВЛЕНИЕ ПРОШИВКИ ESP8266
Почему можно хотеть установить новую прошивку? Может быть все ваши попытки запустить модуль провалились и вам кажется, что это заводской брак? Или может вы заинтересованы в использовании Lua? Или может вам требуется привести прошивку к той версии, которая используется в вашей библиотеке?
В итоге можно сказать, что причины найдутся. Поэтому опишем как это делать.
Обновление прошивки - это не очень сложная задача. Запомните, что требуется подсоединить выход GPIO_0 к земле и перезагрузить модуль ESP8266, чтобы он перезагрузился в режим прошивки. Можно использовать модуль USB-UART FTDI для совершения этой операции.
После сборки схемы, требуется найти программу для прошивки. Тут перечислены некоторые из них. Для NodeMCU вы можете использовать фирменный прошевальщик. Я собрал тут несколько прошивок, но будьте осторожны, ничего гарантировать не могу. В конце статьи описаны источники этих прошивок.
Если вы выжили в первой части этого повествования, дальнейшее должно быть простым. Если вы можете подключится к своему ESP8266 и он отвечает корректно, можно полагать, что часть проекта, связанная с взаимодействием с данным модулем, окончена и можно перейти к части с датчиками.
ДАТЧИКИ
В данном шилде будут использованы 3 датчика:
- BMP180: точный датчик производства Bosch, который может измерять атмосферное давление и температуру. Он использует интерфейс I2C для взаимодействия, так что его требуется подключить к выходам A4 и A5. Это устройство работает на 3.3В, но благодаря встроенному регулятору может работать от 5В. Я запитал его от 3.3В потому что я хотел снизить нагрузку на главный выход Vcc. но даташит говорит, что пиковое потребление находится на уровне 65 мА, что на 15 мА больше, чем есть на данном выходе, так что возможно это была не лучшая идея.
- DHT11: очень простой и дешёвый датчика влажности и температуры. Его старший брат - датчик DHT22 имеет большую точность, но и в два раза большую цену. Я не очень доверяю ему, поэтому с него мы будем получать данные только о влажности. В библиотеке есть метод для вычисления Индекс температуры, который зависит от температуры и влажности, что очень хорошо. Он используется с подтягивающим резистором на выхода Vcc.
- Фоторезистор (датчик освещённости): сопротивление данного компонента обратно пропорционально интенсивности падающего на него света. Мы используем его в паре с подтягивающим резистором. Почему? Потому что аналоговый вход имеет большой импеданс. Это означает, что если вы подсоединили его напрямую к 5В, вполне вероятно, что ток не потечёт. С подтягивающим резистором, ток течёт от 5В к GND и аналоговые выходы получают напряжение так как мы этого хотим. Измеренное напряжение на налоговом входе определяется примерно так же, как у делителя напряжения: Vo = Vcc * R/(R + Rфотор). Когда появляется свет, Rфотор стремится к нулю и напряжение стремится к 5В. Vo возрастает до тех пор, пока Rфотор не достигнет нуля при максимальной яркости. В этой точке Vo = Vcc = 5V. В темноте Rфотор стремится к бесконечности, так что Vo = 0. С подтягивающим резистором на 10 кОМ измерения будут лучше адаптированы к светлым помещениям, с резистором на 1 кОм - к тёмным.
Эти датчики настолько популярны, что найти инструкции по ним не составит труда (в конце статьи приведены ссылки).
КОД
Как только вы собрали и проверили ваш макет, можно залить следующий код. Он представляет из себя лишь обёртку над стандартными примерами из разных библиотек. Показания опрашиваются каждые две секунды и выводятся на консоль.
Вывод будет иметь примерно такой вид:
1 2 3 4 5 6 7 8 9 10 |
Readings from DHT11 : Humidity : 33.00 % Temperature (C) : 32.00 Heat index : 31.19 Readings from BMP180 : Temperature (C) : 35.30 Pressure (abs) : 1015.59 Pressure (corrected for altitude) : 1033.47 Readings for luminosity : 96 % |
ТЕСТИРОВАНИЕ СХЕМЫ НА МАКЕТНОЙ ПЛАТЕ
Теперь пришло время собрать их всех! Я выбрал для использования конвертер логического уровня, так как на мой взгляд он лучше справляется со своей работой. Схема соответствует той, что мы собрали ранее, за исключением кнопки для ручной перезагрузки.
Как только мы закончили с этими джунглями проводов, вы можете захотеть пропустить следующую часть и сразу перейти к финальной в случае если хотите протестировать собранное перед тем, как всё будет спаяно.