Проблема с BMP-280?
- Войдите на сайт для отправки комментариев
Втр, 17/05/2016 - 09:26
Приветствую всех!
Я недавно только начал осваивать Ардуино, так, что сильно не пинайте новичка.
Суть вопроса такова. Приобрел на Ali датчик BMP-280. Подключаю к Мини, заливаю скетч с библиотекой на ВМР-180 (как везде пишут, что она поодходит) и пробую проверить его работу, но в монитор порта идут сообщения, что датчик не подключен или идут данные о давлении 1,76 мм ртутного столба, а температура и высота показывает 0,00. Как правильно работать с данным датчиком, может кто уже делал проекты с использованием данного аппарата? Буду очень признателен за помощь.
Сильно не ругайтесь, если тема не в той ветке, но поиском и Гуглом ничего вразумительного не нашел.
Вот это работает? https://learn.adafruit.com/adafruit-bmp280-barometric-pressure-plus-temp...
Нет, выдает сообщение "ВМР280 test. Could not find a valid BMP280 sensor, check wiring!" (это при подключении через шину SPI). А через I2C подключить не могу, т.к. ругается при компиляции скетча.
Да, забыл сказать в первом сообщении, что датчик вот такой:
http://www.ebay.com/itm/BMP280-Pressure-Sensor-Module-High-Precision-Atm...
В схеме нет стабилизатора питания, а только резисторы на + питания и пара конденсаторов в обвязке. Подключил по питанию от отдельного стабилизатора 3,3 вольта. Согласуюстся ли уровни если Ардуино 5-и вольтовая а датчик 3,3В
Так, что, никто не пробовал использовать такой датчик в своих проектах?
Обратите внимание на то, как подключаете датчик. Если SPI, то адресс 077, если I2C, то 076. Опять же, обратите согласование уровней SDA и SCL.
Подключаю по I2C, но вот в скетче, вернее в примере из библиотеки, не вижу где указать адрес датчика. В этом причина? Вот скетч, подскажите пожалуйста где указать этот адрес.
По позже посмотрю саму библиотеку. Я тестировал BME280 библиотека "SparkFunBME280.h" там все работает и выкладывал здесь тему по этому датчику и рабочий скетч: http://arduino.ru/forum/programmirovanie/bme280. Попробуйте Спарковскую библиотеку и примеры от туда. Датчики совершенно одинаковые только у BMP280 нет гигрометра.
Я посмотрел библиотеку там стоит адрес 077 - значит подключать нужно по ISP. Либо, если подключаете по I2C, зайдите по пути: С:\ programFiles86\arduino\libraries\ Adafruit_BMP280_Library-master -ткройте в библиотеке текстовым редактором "Adafruit_BMP280.h "и в строке "#define BMP280_ADDRESS (0x77)" в место (0x77) вставте (0x76) и сохраните. Но на вашей плате я не вижу транзисторов для согласования уровней входов как сдесь например: https://raspberry.com.ua/data/uploads/2016/04/Adafruit_BMP280_I2C_or_SPI_Barometric_Pressure_Altitude_Sensor.jpg
Огромное спасибо, попробую изменить адрес в библиотеке. Да, согласующих транзисторов нет, только 4 резистора, подтягивающие выходы датчика к + питания. Посему вопрос: - будет ли в таком виде он работать с пятивольтовой Ардуиной, если его запитать от 3,3 вольт, а Ардуино от 5 вольт? Или для этого датчика нужна Ардуино 3-х вольтовая? (использую Arduino Pro Mini 5V, 16 MHz).
Как соотнести названия ног на плате данного шилда с названиями сигналов для Ардуино? На плате выводы обозначены как VCC, GND, SCL, SDA, CSB и SD0. Два следующих за GND - это понятно I2C, а вот как быть с MOSI, MISO, SCK и CS?
Да, адрес в библиотеке поменял - пошли показания в монитор порта (подключение по И2С). Раскомментировал в примере строки с выводом данных альтиметра, тоже работает. Благодарю за помощь!
Но вопросы, заданные в предыдущем посте остаются. И потом еще бует несколько вопросов, если не возражаете.
Для Вашей платы необходимо подключить вывод CSB на плюс(3.3в), SDA ->A4, SCL->A5. А вот по согласованию уровней SCL и SDA нужно по гуглить. Что бы не вывести из строя датчик. Я бы, все-таки, ставил адаптер. В моем BME280 стоят два полевика для согласования уровней: http://ardu.net/ru/datchiki-i-sensory/197-modul-bme280-datchik-davleniya.... Хотя, может быть достаточно , что выходы подтянуты резисторами.
Может тогда проще перепрошить Ардуино загрузчиком для Pro Mini 3,3V 8 MHz и питать ее от 3-х вольт?
Вообще хочу сделать такой портативный вариант погодной станции (охотничье-рыбацкий), которая будет состоять из BMP280, DHT22, ну и соответсвенно - часов DS3231. Вывод данных на LCD от Nokia-3310, питание от Li-Ion аккумулятора. Должны быть показания температуры, влажности. давления, возможно высоты над уровнем моря и часов с датой. В дальнейшем, если получится можно туда будет еще приспособить GPS-приемник для отображения координат, но это все в планах. А как я говорил ранее, прогулял я тот урок, на котором Бог раздавал знания по программированию микроконтроллеров, сейчас уже поздно наверстывать упущенное.
Хотел бы к Вам обратиться за практической помощью в написании программы для описанного мною девайса. Из навыков в электронике присутствуют практически все, а вот с программированием "болт". Если не сложно и не отнимет много времени - помогите пожалуйста.
Тогда Вы поторопились с BMP280, взяли бы BME280 не нужен был бы DHT22. Для того, что бы помочь нужно тоже иметь и Pro Mini и LCD, и время.
Понял я уже о том, что поторопился с приобретением датчиков, просто не знал о существовании BME280, только от Вас про него узнал, что он и влажность меряет.
Так а как быть с Ардуиной, может ее действительно переделать в трехвольтовую? Насчет просьбы я понял - нет, так нет, ничего страшного, что-либо придумаю.
Может еще кто нибудь на этом форуме поможет?
Может тогда проще перепрошить Ардуино загрузчиком для Pro Mini 3,3V 8 MHz и питать ее от 3-х вольт?
Просто подайте на Vcc 3,3 вольта. Не нужно ничего переделывать.
Может тогда проще перепрошить Ардуино загрузчиком для Pro Mini 3,3V 8 MHz и питать ее от 3-х вольт?
Просто подайте на Vcc 3,3 вольта. Не нужно ничего переделывать.
Кстати, это вполне логично. Я чего-то об этом не подумал.
Вот похожий проект: https://geektimes.ru/post/258844/
Вот похожий проект: https://geektimes.ru/post/258844/
За ссылку благодарю. Кстати это в "самую дырочку", то что нужно!
А насчет подачи 3-х вольт на Ардуину, уже пробовал, но в таком варианте появляется небольшая погрешность в показаниях 280-го, температуру завышает на пару градусов, давление занижает немного. Еще и не пробовал подключить часы DS3231, как они будут себя вести, когда Ардуина будет работать в заниженным напряжением питания. А так вообще Ардуино работает от 3 вольт, светодиодами моргает, правда разницы в частоте мигания на глаз не видно, а прибором не тыкал. На LCD от Nokia тесты шрифтов от Адафрута выдает.
Всем откликнувшимся спасибо, датчик проверен, работает, хотя последняя ссылка на готовый проект компелироваться не хочет. Придется искать, где "собака порылась".
Тему можно считать исчерпанной.
Всем откликнувшимся спасибо, датчик проверен, работает, хотя последняя ссылка на готовый проект компелироваться не хочет. Придется искать, где "собака порылась".
Тему можно считать исчерпанной.
Возможно другая версия Ардуино IDE, возможно не все библиотеки установлены и т. д..
Да вроде все библиотеки установил, которые в той теме выложил автор. И IDE пробовал 1.0.5 и последнюю 1.6.9, все равно не хочет компилиоваться, выдает ошибки.
Да вроде все библиотеки установил, которые в той теме выложил автор. И IDE пробовал 1.0.5 и последнюю 1.6.9, все равно не хочет компилиоваться, выдает ошибки.
В приведенной, выше ошибке, говорится о том, что не указан тип DHT.
А в отрывке кода указан:
Может здесь, в последней строке?
Если не получится попробуй другие библиотеки DHT использовать - те, которые пишет, что не используются
Получилось скомпилировать только после того, как удалил из папки Ардуино библиотек всего, что там было и установки новых библиотек через Ардуино ИДЕ.
Загрузил в Дуину - время коряво показывает. Если скажем сейчас 9 часов утра 00 минут - показывает 9 -0 -0. С данными датчиков пока не разобрался, но показывает влажность 1177 %, температуру 82.70 и давление 603135 мм.
Буду разбираться...
Разобрался. Библиотека ВМР085, которая подключена к данному скетчу, не работает с датчиком ВМР280. Программа не видит датчика, поэтому такие данные температуры и давления. Пробовал даже загрузить пример "ВМР085", но в монитор порта пишет, что датчик не подключен, хотя в библиотеке стоит адрес датчика 0х76.
Помогите пожалуйста, если не сложно, прикрутить в данный скетч (https://geektimes.ru/post/258844/) библиотеку Adafruit_BMP280_Library из стандартного набора Arduino IDE 1.6.9 по шине I2C. Буду очень признателен!
Я попробовал заменить на BME280...
Проверил, не компилируется. Выложу на всякий случай вышеприведенный код с убранными коментариями, которые касаются датчика DHT22 (в моем устройстве DS3231, BMP280 и DHT22)
Теперь ошибки при компиляции:
Вот как-то так. Забыл добавить, что датчик влажности в ВМР отсутствует (в коде ничего менять не нужно в связи с этим?)
Mifos в сообщении 27, часть кода до 103 строки включительно, скомпилировалась и работает. Но есть один "косячок". В строке, выводящей показания температуры, отображается: Т=22.00/2.30. Т.е. не помещаются показания. Сейчас сам попробую убрать показания с DHT и оставить только с температуру с BMP. Если не получится - отпишусь и попрошу еще помощи...
А пока огромное спасибо за проделанную работу!
Вот часть кода, которую изменил. Убрал показания DHT, оставил температуру с барометра, но все-равно отображается Т=2.30
myGLCD.printNumF(temp3 * 0.1, 2, 53, 20); //Это температура с барометра
Temp3 умножается на 0,1 перед тем как выводится на экран (зачем не понятно).
цифра "2" - скорее всего сколько знаков после запятой.
Попробуй заменить на это:
myGLCD.printNumF(temp3, 1, 53, 20);
Здесь - dps.init(MODE_ULTRA_HIGHRES, 3200,
true
);
закоментирование убирать не надо было
Все правильно, 2 - это сколько знаков полсе запятой. Изменил на 1, стало 23.0, но по-прежнему "0" - это "мертвый" знак. При изменении температуры он не изменяется.
По второму сообщению - закомментированную строку оставил в таком виде, без изменений, т.е. коммент не стал убирать. С раскомментированной строкой не компилируется.
Попробуй вставить
temp3=temp3*10;
после стоки
temp3 = dps.readTemperature();
А в строке где убрали умножение на 0,1 - вернуть умножение на 0,1
Можно еще так попробовать
myGLCD.printNumF(100*temp3 * 0.01, 2, 53, 20);
- должно до сотых выводить.
Не знаю зачем так, надеюсь, что поможет. Тут в библиотеке зарыто что-то.
Нет, не получается. По первому предложению, после вставки строки temp3=temp3*10;, показания на LCD Т=240.00. После добавления второй строки - показания возвращаются к Т=24.00. Вернул все взад.
По второму, предложенному варианту, показания так и остаются Т=24.00
Значит плучается с датчика сразу в целых выдает. Дисплей получется не причем. Можно еще библиотеку BMP 280
другую попробовать.
Как ты выводишь данные на монитор порта? Код можешь показать?
А ну тут все проще - тут дело в переменной.
Стандартный пример из библиотеки \ Arduino \ библиотеки \ Adafruit_BMP280_Library \ bmp280test
long поменял на float
float temp3 = 0, Pressure = 0, Altitude = 0, Humidity = 0; //добавляем датчик влажности беме280
Ну вот не понятно почему тогда давление выводится как-надо. Впрочем скорее всего давление также не правильно выводится, скорее всего так происходит с давлением: например датчик считвает 100750.34 Па переменная long округляет обрезает после точки и получатся 100750.00. Далее перед выводом на экран функция myGLCD.printNumF(Pressure / 133.3, 2, 31, 40); 100750.00 делит на 133.3 = 755.81 что и выводит. Но для давления т.к. оно в паскалях вводится изначально та часть что после запятой никак на точеость не повлияет.
myGLCD.printNumF - выводит номер с точкой, myGLCD.printNumI в целых
видимо тому кто скетч делал изначально, ему в десятых градусы не нужны были. long и int - целые числа только///нам необходимо задавать переменные как float или double
Все, стало показывать температуру с двумя знаками после запятой. С учетом ранее данных рекомендаций, установлю после запятой один знак.
И напоследок еще один вопросик - ничего не нужно менять в скетче, если температура уйдет в отрицательную? Проверить смогу только завтра, засуну датчик на проводах в холодильник. В скетче, в строках вывода на LCD, не вижу где должен родиться знак минус и в связи с этим все показания должны сместитьмя вправо на одно знакоместо. Или нужно сразу это предусмотреть?
А пока огромное спасибо за помощь! Приятно когда есть люди знающие и могущие оказать содействие новичку. Спасибо!
по анологии со стандартным примером можно без объявления переменных обойтись
myGLCD.printNumF(dps.readTemperature(), 2, 53, 20);
Да не стоит благодарить. Я сам не особо разбираюсь...вот самому интересно, что получится. А что проверить в холодильник не обязательно просто воттак запиши myGLCD.printNumF(-22.9, 1, 53, 20); //Это температура с барометра.
В результате должно -22.9 показывать всегда. такое число просто из головы взял...
Да показания должны сместиться на один знак, это надо учитывать, чтобы не прошло наплыва на другие данные или за предел экрана. цифры 53 и 20 что-то типа координат откуда начнется первый символ. Должно все получится. Удачи.
Так получается как нужно, со знаком минус и показания сдвигаются вправо. Но вот на самом деле, когда в ВМР родится минус - поймет ли Дуина что показания отрицательные. Да, еще нужно будет сместить на одно знакоместо вправо значок градус С
Значок "С" в скетче не нашел )) Самое простое сместить значок сразу с запасом. При смене числа знак перемещаться не будет . Поймет ардуина - куда денется. Хорошо, что до нас многое продумали и придумали библиотеки, которые здорово облегчают жизнь.
Да значка "С" пока и небыло, только сейчас подправил и установил его в нужное место.
Вот получилась почти нормальная метеостанция, скетч приведу позже. Хочу еще поковырять его на предмет питания от аккумулятора (с контролем напряжения последнего) и на внедрение кнопки для переключения экранов при нажатии. А то на одном экране все залеплено плотно, а я уже без окуляров не вижу - нужно разделить дату и время на один экран, постоянно, а на второй при нажатии кнопки данные с датчиков.
Петрович, довили свою метестанцию до финала или нет?