Ну, сделал вроде, стоит на балконе тестится. Только в стационарном варианте пока. Индикатор 1602 на шине I2C, ну и остальные датчики. Жду доставку DHT22 взамен 11 (будет мерять влажность на улице, температуру и давление буду брать с ВМР.) Внутри балкона температуру будет мерять датчик в модуле часов DS3231 (точность у него сопоставимая с ВМР). А тот походный вариант, о котором писал вначале, пока в планах, но там наверное поменяю кучу датчиков на один ВМЕ-280. Но это пока в планах...
Если интересует, могу здесь выложить скетч, который получился, там есть одна проблемка, стоит delay в одном месте. Но мне он не мешает, т.к. процессор более ничем не занимается, кроме как приемом данных с датчиков и выводом их на экран.
Вот, все здесь и все работает (как видно из фотографий выше).
[code]
/*Скетч выводит на эекран 1602 дату и время. Нажатием кнопки
происходит переключение экранов 1 - Дата, время и день недели;
2 - Давление и влажность; 3 - Температура и влажность на улице;
4 - Температура и влажность в квартире. Все экраны индицируются
тремя светодиодами: - все погашены (дата и время); - красный
(pin 10) - давление и влажность на улице; желтый (pin 11) -
температура и влажность на улице; - зеленый (pin 12) - температура
и влажность в квартире. Также от уровня освещенности в помещении
автоматически включается подсветка LCD дисплея. Фоторезистор
подключен к аналоговому выводу А0 и на + 5В, а от -5В резистор
на 10 кОм на А0.*/
#include <LiquidCrystal_I2C.h>
//#include <LiquidCrystal.h>
#include "DHT.h" //- убираем если не будем использовать отдельный датчик влажности
#define DHTPIN 2 // 2 pin для датчика DHT22
#define DHTTYPE DHT11 //- убираем если не будем использовать отдельный датчик влажности или меняем цифры на 22 (DHT-22)
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#define SEALEVELPRESSURE_HPA (1013.25) // 1013.25 давление на момент измерений над уровнем моря в гектопаскалях
#include "ds3231.h"
Adafruit_BMP280 bme; // I2C для BME280
DHT dht(DHTPIN, DHTTYPE); // - убираем если не будем использовать отдельный датчик влажности
float temp3 = 0, Pressure = 0, Altitude = 0, Humidity = 0; //добавляем датчик влажности беме280
int regim=1; // объявление переменной "режим"
int flag=0; // объявление переменной ""
uint8_t time[8];
unsigned long prev, interval = 1000;
//LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
LiquidCrystal_I2C lcd(0x3F,16,2); //
void setup()
{
//lcd.begin(16, 2); // инициализация LCD
//lcd.clear(); // очистка LCD
lcd.init(); // инициализация LCD I2C
lcd.backlight(); // включение подсветки LCD I2C
Wire.begin(); // инициализация
dht.begin(); // инициализация датчика DHT-11 (DHT-22) - убираем если не будем его использовать
bme.begin(); //запуск BME280
DS3231_init(DS3231_INTCN); // инициализация модуля часов
// объявление пинов для светодиодов
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
}
void loop()
{
//объявление переменных со всех датчиков
Pressure = bme.readPressure();
Altitude = bme.readAltitude(SEALEVELPRESSURE_HPA);
temp3 = bme.readTemperature();
float hdht = dht.readHumidity();
float tdht = dht.readTemperature();
char tempF[6];
float temperature;
delay(1000);
char in;
unsigned long now = millis();
struct ts t;
// show time once in a while
if ((now - prev > interval) && (Serial.available() <= 0)) {
DS3231_get(&t); //Get time
temperature = DS3231_get_treg(); //Get temperature
dtostrf(temperature, 5, 1, tempF);
//ожидание нажатия кнопки
if(digitalRead(8)==HIGH&&flag==0)//если кнопка нажата
// и переменная flag равна 0 , то ...
{
regim++;
flag=1;
//это нужно для того что бы с каждым нажатием кнопки
//происходило только одно действие
// плюс защита от "дребезга" 100%
lcd.begin(16, 2);// Очистка дисплея при нажатии кнопки
if(regim>4)//ограничим количество режимов
{
regim=1;//так как мы используем только одну кнопку,
// то переключать режимы будем циклично
}
}
if(digitalRead(8)==LOW&&flag==1)//если кнопка НЕ нажата
//и переменная flag равна - 1 ,то ...
{
flag=0;//обнуляем переменную "knopka"
}
if(regim==1)//первый режим
{
digitalWrite(10,LOW);
digitalWrite(11,LOW);//выключаем все светодиоды
digitalWrite(12,LOW);
//здесь может быть любое ваше действие 1
// вывод на экран показаний даты и времени
lcd.setCursor(1,1); // Дата
lcd.print(t.mday);
printMonth(t.mon);
lcd.print((t.year)+100); //+100 - это прибавление 100 лет для корректного
// вывода даты 2016 а не 1916
lcd.setCursor(3,0); // Время
lcd.print(t.hour);
lcd.print(":");
if(t.min<10)
{
lcd.print("0");
}
lcd.print(t.min);
lcd.print(":");
if(t.sec<10)
{
lcd.print("0");
}
lcd.print(t.sec);
lcd.setCursor(12, 0); // установка курсора
printwday(t.wday); //Вывод на экран дня недели
//lcd.setCursor(14, 0); // установка курсора
//lcd.print(t.wday); //Вывод на экран дня недели цифрой
}
}
if(regim==2)//второй режим
{
digitalWrite(10,HIGH);//включаем красный светодиод
digitalWrite(11,LOW);
digitalWrite(12,LOW);
//здесь может быть любое ваше действие 2
// Вывод на экран атмосферного давления с ВМР280
lcd.setCursor(1, 0);
lcd.write(byte(224)); lcd.print("a"); lcd.write(byte(179)); lcd.write(byte(187)); lcd.print(". ");// Надпись "Давл."
lcd.print(bme.readPressure()/ 133.3, 1);
lcd.print(" mm ");
// Вывод на экран влажности воздуха с DHT22
lcd.setCursor(1, 1);
lcd.print("B"); lcd.write(byte(187)); lcd.print("a"); lcd.write(byte(182)); lcd.write(byte(189)); lcd.print(". ");// Надпись "Влажн."
lcd.print(hdht);
lcd.print(" %");
}
if(regim==3)//третий режим
{
digitalWrite(10,LOW);
digitalWrite(11,HIGH);//включаем светодиод
digitalWrite(12,LOW);
//здесь может быть любое ваше действие 3
// Вывод на экран температуры с ВМР280
lcd.setCursor(0, 0);
lcd.print("B"); lcd.write(byte(189)); lcd.print("e"); lcd.write(byte(193)); lcd.write(byte(189)); lcd.write(byte(199)); lcd.write(byte(199)); lcd.print(" ");// Надпись "Внешняя"
lcd.print(bme.readTemperature(), 1);
lcd.print((char)223);//вывод на экран значка "градус"
lcd.print("C");
// Вывод на экран влажности воздуха с DHT22
lcd.setCursor(9, 1);
lcd.print(hdht);
lcd.print("%");
// Вывод на экран атмосферного давления с ВМР280
lcd.setCursor(0, 1);
lcd.print(bme.readPressure()/ 133.3, 1);
lcd.print(" mm");
}
if(regim==4)//четвертый режим
{
digitalWrite(10,LOW);
digitalWrite(11,LOW);
digitalWrite(12,HIGH);//включаем светодиод
//здесь может быть любое ваше действие 4
// вывод не экран температуры с модуля часов
lcd.setCursor(0, 0);
lcd.write(byte(160)); lcd.print("a"); lcd.write(byte(187)); lcd.write(byte(186)); lcd.print("o"); lcd.write(byte(189)); lcd.print(" ");// Надпись "Балкон"
lcd.print(tempF);
lcd.print((char)223);
lcd.print("C");
//prev = now;
// Вывод на экран влажности воздуха с DHT22
lcd.setCursor(9, 1);
lcd.print(hdht);
lcd.print("%");
// Вывод на экран атмосферного давления с ВМР280
lcd.setCursor(0, 1);
lcd.print(bme.readPressure()/ 133.3, 1);
lcd.print(" mm");
}
}
void printMonth(int month)
{
switch(month)
{
case 1: lcd.print(" "); lcd.write(byte(177)); lcd.write(byte(189)); lcd.write(byte(179)); lcd.print("a"); lcd.print("p"); lcd.write(byte(196)); lcd.print(" ");break;
case 2: lcd.print(" "); lcd.write(byte(170));lcd.print("e"); lcd.write(byte(179)); lcd.print("p"); lcd.print("a"); lcd.write(byte(187)); lcd.write(byte(196)); lcd.print(" ");break;
case 3: lcd.print(" "); lcd.print("Map"); lcd.write(byte(191)); lcd.print(" ");break;
case 4: lcd.print(" "); lcd.print("A"); lcd.write(byte(190)); lcd.print("p"); lcd.print("e"); lcd.write(byte(187)); lcd.write(byte(196)); lcd.print(" ");break;
case 5: lcd.print(" "); lcd.print("Ma"); lcd.write(byte(185)); lcd.print(" ");break;
case 6: lcd.print(" "); lcd.write(byte(165)); lcd.write(byte(198)); lcd.write(byte(189)); lcd.write(byte(196)); lcd.print(" ");break;
case 7: lcd.print(" "); lcd.write(byte(165)); lcd.write(byte(198)); lcd.write(byte(187)); lcd.write(byte(196)); lcd.print(" ");break;
case 8: lcd.print(" "); lcd.print("A"); lcd.write(byte(179)); lcd.write(byte(180)); lcd.print("y"); lcd.print("c"); lcd.write(byte(191)); lcd.print(" ");break;
case 9: lcd.print(" "); lcd.print("C"); lcd.print("e"); lcd.write(byte(189)); lcd.write(byte(191)); lcd.write(byte(199)); lcd.write(byte(178)); lcd.print("p"); lcd.write(byte(196)); lcd.print(" ");break;
case 10: lcd.print(" "); lcd.print("O"); lcd.write(byte(186)); lcd.write(byte(191)); lcd.write(byte(199)); lcd.write(byte(178)); lcd.print("p"); lcd.write(byte(196)); lcd.print(" ");break;
case 11: lcd.print(" "); lcd.print("H"); lcd.print("o"); lcd.write(byte(199)); lcd.write(byte(178)); lcd.print("p"); lcd.write(byte(196)); lcd.print(" ");break;
case 12: lcd.print(" "); lcd.write(byte(224)); lcd.print("e"); lcd.write(byte(186)); lcd.print("a"); lcd.write(byte(178)); lcd.print("p"); lcd.write(byte(196)); lcd.print(" ");break;
default: lcd.print(" Error ");break;
// case 1: lcd.print(" January ");break;
// case 2: lcd.print(" February ");break;
// case 3: lcd.print(" March ");break;
// case 4: lcd.print(" April ");break;
// case 5: lcd.print(" May ");break;
// case 6: lcd.print(" June ");break;
// case 7: lcd.print(" July ");break;
// case 8: lcd.print(" August ");break;
// case 9: lcd.print(" September ");break;
// case 10: lcd.print(" October ");break;
// case 11: lcd.print(" November ");break;
// case 12: lcd.print(" December ");break;
// default: lcd.print(" Error ");break;
lcd.clear();
}
}
void printwday(int wday)
{
switch(wday)
{
case 1: lcd.write(byte(168)); lcd.write(byte(189));break;//Пн
case 2: lcd.print("B"); lcd.write(byte(191));break;//Вт
case 3: lcd.print("Cp");break;//Ср
case 4: lcd.write(byte(171)); lcd.write(byte(191));break;//Чт
case 5: lcd.write(byte(168)); lcd.write(byte(191));break;//Пт
case 6: lcd.print("C"); lcd.write(byte(178));break;//Сб
case 7: lcd.print("Bc");break;//Вс
default: lcd.print("Error");break;
// case 1: lcd.print("Mon");break;
// case 2: lcd.print("Tue");break;
// case 3: lcd.print("Wed");break;
// case 4: lcd.print("Thu");break;
// case 5: lcd.print("Fri");break;
// case 6: lcd.print("Sat");break;
// case 7: lcd.print("Sun");break;
// default: lcd.print("Error");break;
lcd.clear();
}
}
// команда на выключение подсветки экрана lcd.noBacklight();
[/code]
Только почему-то длинные строки вывода названия месяца здесь разбило в несколько строк. В таком виде не скомпилируется. И еще с парой строк такая же проблема, чуть выше...
И выбросил фоторезистор, не стал с ним заморачиваться, а в сверху в скетче остались комменты, что он подключен.
Я делал так: Вырезал все библиотеки которые были у меня и сохранил из в другой папке, на всякий пожарный). Потом запустил в IDE менеджер библиотек и установил все необходимое мне через него. Так я был уверен, что библиотеки еще не "перепаханные" пользователями и 100% рабочие. После этого все стало видиться и компилироваться. (Моя версия IDE тоже 1.6.10).
Да, там были дни недели и названия месяцев на аглицком, мне не оч. понравилось. Перечитал кучу форумов и нашел как сделать на килилице. В скетче оставил возможность вернуть все к английскому, нужно только закомментировать строки с выводом русских букв и раскомментировать с латиницей. В этой ветке гдето есть ссылка, я давал на видео, с объяснением как писать на кирилице. Не нашел пока как вторую строку в персом экране (дата, день месяца и год) установить в центр строки. А так он вроде начинается с 1 знакоместа и когда месяц будет (к примеру сентябрь) год отодвигается к правому краю строки...
Как я сказал выше - там все осталось для аглицкого. Только закомментировать или удалить ненужное и снять коммент с нужного. Только в тех строках, где написано "Внешняя" "Балкон" Давление" и "Влажность" нужно поставить свои надписи типа "IN", "OUT", Pres" и "Hum"
Genri5, спасибо за скетч! Пока не занимался своим устроийством, нежданно на голову "свалился ремонт" в ванной комнате, так что пока все лежит на макетке. Тем более - заказал и жду доставку BME-280. Когда придет, буду уже заниматься дальше и воспользуюсь данным скетчем.
Кстати, параллельно занимался еще одним проектом на Тиньке13, хочу спросить - "есть ли опыт с данным процессором в плане составления программ?" Если есть - спишемся в личку объясню что нужно...
Как не странно, но у меня тоже ремонт в ванной комнате с туалетом. Делал теплый пол, выравнивание стен, кафель. Пока стяжка выстаивалась сварганил портативный баометр с часами. Уже с керилицей. Получилось достаточно компактно. Нет сам на тиньке ничего не програмировал.
А почему никто не пишет, что BMP280 врёт по страшной силе? По температуре погрешность вполне может дойти до 2 градусов, проверенно. С давлением чуть по сложнее, но тоже можно быть уверенным, что погрешность есть, поскольку температура учитывается при его расчёте. Это с таким-то зверскими АЦП. Заводская калибровка ни к чёрту. Может кто дружит с кем-то из бошевцев, и выведает, как корректировать корректировочные коэффициенты, чтоб можно было самостоятельно загнать погрешность в норму?
Согласен, есть небольшие несовпадения в температуре с ВМР280 и DS3231 (как раз в полтора градуса), но кто брешет не знаю. В принципе, точность меня устраивает. А когда придет ВМЕ280 - проверю и его, может он будет точнее...
Петрович, а Вы выпаяли светодид с модуля DS3231? Если нет - то советую выпаять. Увидите разницу. И еще я заметил что когда написал скетч для BME280 без применения библиотек, он стал показывать точнее и скетч стал меньше по объему.
Интересно, за счет чего этот код выдаёт более точные результаты? На сколько можно видеть, те фрагменты, которые отвечают за вычисления показаний с BMP-шки, просто вставлены из ходовой библиотеки от Adafruit. Может раньше у Вас был какой-то самопальный, «оптимизированный» алгоритм расчёта?
На всякий случай отмечу, что датчик у меня так и не увидился с Adafruit библиотекой, хотя и менял в Adafruit_BME280.h адрес 0х77 на 0х76. Не стал выяснять почему, на просторах интернета много других с которыми он увидился - cactus_io_BME280_I2C, SparkFun_BME280_Arduino_Library-master, BME280-master. Но показания датчика, в частности температуры, уж как-то разсходились с лабараторным термометром. Но когда я написал с кетч с как Вы выразились "те фрагментами, которые отвечают за вычисления показаний", то результат меня приятно удивил. И скетч стал меньшим по объему. Скетч не идеален, но результат меня устраивает.
Спасибо за cactus библиотеку. Раньше она мне не попадалась. Очень компактная и простая. Сделана для датчиков BME280, но очень легко приспосабливается и для BMP. Просто надо подправить REGISTER_CHIPID. Для BME он согласно документации равен 0x60, а для BMP 0x58. Проблем с погрешностью она конечно не решает, хотя имеется функция setTempCal(), которая, судя по всему предназначена для ручной подгонки температуры. Библиотека свободна от кода, предназначенного для работы с SPI, благодаря чему легко читается и будет понятна даже новичкам.
Genri5 попробовал загрузить скетч из поста 61, все работает, но думаю стоит его немного подправить в плане размещения данных по экрану. В частности температура, если она примет отрицательные значения - показания не поместятся. Буду пробовать все параметры вывести на отдельной строке, благо есть две свободные на экране... Также не поместится на экране дата вместе с названием следующего месяца (September) год уползет на строку с днем недели и временем. Нужно названия месяцев писать сокращенно, тогда будет нормально.
А в общем спасибо за скетч, Ваша работа избавила меня от нескольких часов самостоятельного написания...
Да, кстати, нужно еще убрать второй знак после запятой в показаниях давления, слишком быстро изменяются показания, да и точность такая не важна.
Genri5 попробовал загрузить скетч из поста 61, все работает, но думаю стоит его немного подправить в плане размещения данных по экрану. В частности температура, если она примет отрицательные значения - показания не поместятся. Буду пробовать все параметры вывести на отдельной строке, благо есть две свободные на экране... Также не поместится на экране дата вместе с названием следующего месяца (September) год уползет на строку с днем недели и временем. Нужно названия месяцев писать сокращенно, тогда будет нормально.
А в общем спасибо за скетч, Ваша работа избавила меня от нескольких часов самостоятельного написания...
Да, кстати, нужно еще убрать второй знак после запятой в показаниях давления, слишком быстро изменяются показания, да и точность такая не важна.
Петрович, в связи с этим я перешел на другой дисплейчик – от Нокиа 3410.
В нем и разрешение повыше и дополнительные столбики есть. Перешел на другую библиотеку - U8Glib, для нее нашел много шрифтов с кириллицей. Так, что скетч на сегодняшний день имеет несколько другой вид.
Понятно. А дисплей точно от 3410? Поиском посмотрел, на картинках - там столько же строк и знакомест как в 3310 (6 строк, 14 столбцов). Да и это пока не столь важно. Под данный проект не собираюсь покупать новый дисплей т.к. в наличии есть 2 от 3310, поэтому нужно использовать их.
Все вышеописанные мной пожелания по предыдущему скетчу я сделал, так что на экране уже нормальный, читаемый вид. Правда все равно мелковато, нужно уже очки напяливать. Есть еще желание доработать скетч, чтобы процессор спал во время бездействия и лежания в кармане или рюкзаке, а при нажатии кнопочки просыпался и выдавал показания. И контроль заряда батарейки желателен...
Или вместо сна просто выключать питание устройства? Ведь загрузка программы и опрос датчика, при включении, происходит за пару секунд, эта задержка не критична... Подумаю.
Кстати, как предлагалось выше, не стал переделывать Дуину под трехвольтовое питание, подал 3,3 сразу на ногу VCC. DS3231 и BME280 тоже запитал от 3,3 - в итоге все работает без проблем
Ничего подобного у 3410 6 строк и 16 столбцов. Это вот пока без корпуса. Уменя Nano_V3 поэтому есть 3.3 В. А у BME280 на плате есть стабилизатор на 3.3 В и согласующие уровни, полевики.
Я нашел несколько полезных статей по измерению напряжения Ардуиной, если интересно - вот одна из них с наиболее точным методом измерения: http://blog.unlimite.net/?p=25
Пробовал из скетча измерителя емкости аккумуляторов, но там опорное напряжение взято 3,3 В, а в реальности оно постоянно падает (аккум разржается) и большая погрешность. Лучше сразу делать как описано в статье, от опорного внутреннего источника.
Да-а-а, вид конечно у этого экранчика получше, вернее изображение на нем...
Да-а-а, вид конечно у этого экранчика получше, вернее изображение на нем...
Да в том, то и дело, что когда я его прикрутил, понял, что назад дороги нет. Но пришлось освоить другую библиотеку для вывода на печать(U8Glib). Но и библиотека мне понравилась больше.
А что входит в понимание "освоить"? Я, как говорил ранее, начинаю только познавать Дуину, пользуюсь готовыми проектами, немного перерабатываю под себя или беру стандартные примеры с библиотеками и подпиливаю. Но чтобы самому что-то перелопатить и освоить - это для меня "темный лес". Я так понимаю - библиотека это набор готовых инструкций для какого-либо устройства, который заставляет это устройство взаимодействовать с МК. Как можно там что-то дописать или убрать лишнее?
Я имею в виду, изучить ее функционал и возможности. Какими командами выводить на печать данные, а какими просто буквы и цыфры, как сформировать символы и логотипы, как добавить кириллицу, и т. д. .
Отлично получилось! Я тоже сейчас пытаюсь нахаляву найти такой дисплейчик. Попадался незадорого от 3510, но почитал в Нете, к нему библиотеки не подходят, да и размер у него такой-же как у 3310. Если не найду такой, то придется делать из того что есть в наличии. Так что пока все приостановилось в стадии макета, а сам занимаюсь профилактикой автомобиля, так сказать, подготовкой к осенне-зимнему сезону.
Кстати пробовал одновременно сравнить показания ВМР-280 и ВМЕ-280 - почти идентичны. Рсвхождение в пару десятых и по температуре и по давлению. Правда не знаю кто из них показывает с погрешностью.
Здравствуйте! Нужно вместо BMP180 подключить BMP280 (по шине I2С). Если пишут, что бибилиотеки подходят, то выходит можно? Например в проекте с часами на MAX7219? Или какая то доработка нужна?
Сегодня попробовал подключить BMP280 по SPI-шине по этой схеме.
Обновил ИДЕ до 10 версии еше раз подправил Adafruit библиотеку - заработала. Самую последнюю я скачивал это Grove_BME280-master.
BMP280, китайский, практически не удается запустить. Запускаю по I2C, получилось в 2-х случаях:
1. С библиотекой Grove_BME280-master файл примера, результат:
Device error!
Temp: 0.00C
Pressure: 0.00Pa
Altitude: 44330.76m
Humidity: 0%
2. из этой ветки, пост №11, без библиотеки, результат:
TEMP: 25.11 *C
PRESS: 1009.22 hPa
PRESS: 756.92 mmHg
HUM: 0.00 %
правда ситуация при прошивке в этом случае странная - из файла тхт копирую в Arduino и прошиваю NANO, если затем прошить другой прошивкой, а затем попробовать прошить опять этой, выскакивает ошибка:
У меня пока только DHT22, BMP-280 и DS18B20 + купил DS3231, так что проверять особо не на чем. На 1604 IIC + DS3231 переделал. Жду 128х64, хочу делать на нём + WiFi сбор архива на комп и попробовать подключить на сайт narodmon.ru
Ну, сделал вроде, стоит на балконе тестится. Только в стационарном варианте пока. Индикатор 1602 на шине I2C, ну и остальные датчики. Жду доставку DHT22 взамен 11 (будет мерять влажность на улице, температуру и давление буду брать с ВМР.) Внутри балкона температуру будет мерять датчик в модуле часов DS3231 (точность у него сопоставимая с ВМР). А тот походный вариант, о котором писал вначале, пока в планах, но там наверное поменяю кучу датчиков на один ВМЕ-280. Но это пока в планах...
Если интересует, могу здесь выложить скетч, который получился, там есть одна проблемка, стоит delay в одном месте. Но мне он не мешает, т.к. процессор более ничем не занимается, кроме как приемом данных с датчиков и выводом их на экран.
Вот что получилось:
Интересно, конечно. А я сделал стационырный вот от сюда:
http://radiokot.ru/forum/viewtopic.php?f=25&t=112934&sid=3d2750378585feb....
А походный хочу, что-то похожее на Ваше. Тем более что есть BME280.
Вот, все здесь и все работает (как видно из фотографий выше).
Только почему-то длинные строки вывода названия месяца здесь разбило в несколько строк. В таком виде не скомпилируется. И еще с парой строк такая же проблема, чуть выше...
И выбросил фоторезистор, не стал с ним заморачиваться, а в сверху в скетче остались комменты, что он подключен.
Вот у меня Arduino IDE 1.6.10 все, что связано с библиотеками Adafruit не хочет кампилироваться и библиотеки не становятся. Надо разбираться.
Я делал так: Вырезал все библиотеки которые были у меня и сохранил из в другой папке, на всякий пожарный). Потом запустил в IDE менеджер библиотек и установил все необходимое мне через него. Так я был уверен, что библиотеки еще не "перепаханные" пользователями и 100% рабочие. После этого все стало видиться и компилироваться. (Моя версия IDE тоже 1.6.10).
Как я понял, Вы, с этого скетча переделывали под свои требования. Потому, что на фото русские буквы.
А, я не прав, русские буквы пишутся отдельными кодами.
Да, там были дни недели и названия месяцев на аглицком, мне не оч. понравилось. Перечитал кучу форумов и нашел как сделать на килилице. В скетче оставил возможность вернуть все к английскому, нужно только закомментировать строки с выводом русских букв и раскомментировать с латиницей. В этой ветке гдето есть ссылка, я давал на видео, с объяснением как писать на кирилице. Не нашел пока как вторую строку в персом экране (дата, день месяца и год) установить в центр строки. А так он вроде начинается с 1 знакоместа и когда месяц будет (к примеру сентябрь) год отодвигается к правому краю строки...
Дело в том что у меня другой дисплей и такой вывод кирилицы не подойдет, проще выводить английские буквы.
Как я сказал выше - там все осталось для аглицкого. Только закомментировать или удалить ненужное и снять коммент с нужного. Только в тех строках, где написано "Внешняя" "Балкон" Давление" и "Влажность" нужно поставить свои надписи типа "IN", "OUT", Pres" и "Hum"
Вот нашел свою тему, в которой есть ссылка на видео по написанию кирилицы: http://arduino.ru/forum/programmirovanie/arduino-ide-1610-i-biblioteka-liquidcrystali2c
Приветствую, Петрович, вот наваял рабочий скетч для портативного барометра c часами - BME280+ds3231+lcd3310:
А можете помочь сделать данный скетч для цветного tft дисплея + dht 11 + bmp280 + rtc? для uno r3
Genri5, спасибо за скетч! Пока не занимался своим устроийством, нежданно на голову "свалился ремонт" в ванной комнате, так что пока все лежит на макетке. Тем более - заказал и жду доставку BME-280. Когда придет, буду уже заниматься дальше и воспользуюсь данным скетчем.
Кстати, параллельно занимался еще одним проектом на Тиньке13, хочу спросить - "есть ли опыт с данным процессором в плане составления программ?" Если есть - спишемся в личку объясню что нужно...
Как не странно, но у меня тоже ремонт в ванной комнате с туалетом. Делал теплый пол, выравнивание стен, кафель. Пока стяжка выстаивалась сварганил портативный баометр с часами. Уже с керилицей. Получилось достаточно компактно. Нет сам на тиньке ничего не програмировал.
А почему никто не пишет, что BMP280 врёт по страшной силе? По температуре погрешность вполне может дойти до 2 градусов, проверенно. С давлением чуть по сложнее, но тоже можно быть уверенным, что погрешность есть, поскольку температура учитывается при его расчёте. Это с таким-то зверскими АЦП. Заводская калибровка ни к чёрту. Может кто дружит с кем-то из бошевцев, и выведает, как корректировать корректировочные коэффициенты, чтоб можно было самостоятельно загнать погрешность в норму?
Похоже этот автор статьи с Вами не согласен: http://www.avislab.com/blog/bmp280/.
Не знаю как BMP280, но BME280 я очень доволен.
Согласен, есть небольшие несовпадения в температуре с ВМР280 и DS3231 (как раз в полтора градуса), но кто брешет не знаю. В принципе, точность меня устраивает. А когда придет ВМЕ280 - проверю и его, может он будет точнее...
Петрович, а Вы выпаяли светодид с модуля DS3231? Если нет - то советую выпаять. Увидите разницу. И еще я заметил что когда написал скетч для BME280 без применения библиотек, он стал показывать точнее и скетч стал меньше по объему.
Светодиод пока не выдрал, но удалю позже.
Насчет скетча не понял, как без библиотеки на ВМЕ280? А как же он работает?
Интересно, за счет чего этот код выдаёт более точные результаты? На сколько можно видеть, те фрагменты, которые отвечают за вычисления показаний с BMP-шки, просто вставлены из ходовой библиотеки от Adafruit. Может раньше у Вас был какой-то самопальный, «оптимизированный» алгоритм расчёта?
На всякий случай отмечу, что датчик у меня так и не увидился с Adafruit библиотекой, хотя и менял в Adafruit_BME280.h адрес 0х77 на 0х76. Не стал выяснять почему, на просторах интернета много других с которыми он увидился - cactus_io_BME280_I2C, SparkFun_BME280_Arduino_Library-master, BME280-master. Но показания датчика, в частности температуры, уж как-то разсходились с лабараторным термометром. Но когда я написал с кетч с как Вы выразились "те фрагментами, которые отвечают за вычисления показаний", то результат меня приятно удивил. И скетч стал меньшим по объему. Скетч не идеален, но результат меня устраивает.
Спасибо за cactus библиотеку. Раньше она мне не попадалась. Очень компактная и простая. Сделана для датчиков BME280, но очень легко приспосабливается и для BMP. Просто надо подправить REGISTER_CHIPID. Для BME он согласно документации равен 0x60, а для BMP 0x58. Проблем с погрешностью она конечно не решает, хотя имеется функция setTempCal(), которая, судя по всему предназначена для ручной подгонки температуры. Библиотека свободна от кода, предназначенного для работы с SPI, благодаря чему легко читается и будет понятна даже новичкам.
Обновил ИДЕ до 10 версии еше раз подправил Adafruit библиотеку - заработала. Самую последнюю я скачивал это Grove_BME280-master.
А что правил в библиотеке, что там не так?
Да все тоже адрес - 0х77 на 0х76.
begin(0x76).
В Adafruit_BMP280, так можно. Чтоб не лазить в библиотеку.
Genri5 попробовал загрузить скетч из поста 61, все работает, но думаю стоит его немного подправить в плане размещения данных по экрану. В частности температура, если она примет отрицательные значения - показания не поместятся. Буду пробовать все параметры вывести на отдельной строке, благо есть две свободные на экране... Также не поместится на экране дата вместе с названием следующего месяца (September) год уползет на строку с днем недели и временем. Нужно названия месяцев писать сокращенно, тогда будет нормально.
А в общем спасибо за скетч, Ваша работа избавила меня от нескольких часов самостоятельного написания...
Да, кстати, нужно еще убрать второй знак после запятой в показаниях давления, слишком быстро изменяются показания, да и точность такая не важна.
Genri5 попробовал загрузить скетч из поста 61, все работает, но думаю стоит его немного подправить в плане размещения данных по экрану. В частности температура, если она примет отрицательные значения - показания не поместятся. Буду пробовать все параметры вывести на отдельной строке, благо есть две свободные на экране... Также не поместится на экране дата вместе с названием следующего месяца (September) год уползет на строку с днем недели и временем. Нужно названия месяцев писать сокращенно, тогда будет нормально.
А в общем спасибо за скетч, Ваша работа избавила меня от нескольких часов самостоятельного написания...
Да, кстати, нужно еще убрать второй знак после запятой в показаниях давления, слишком быстро изменяются показания, да и точность такая не важна.
Петрович, в связи с этим я перешел на другой дисплейчик – от Нокиа 3410.
В нем и разрешение повыше и дополнительные столбики есть. Перешел на другую библиотеку - U8Glib, для нее нашел много шрифтов с кириллицей. Так, что скетч на сегодняшний день имеет несколько другой вид.
Понятно. А дисплей точно от 3410? Поиском посмотрел, на картинках - там столько же строк и знакомест как в 3310 (6 строк, 14 столбцов). Да и это пока не столь важно. Под данный проект не собираюсь покупать новый дисплей т.к. в наличии есть 2 от 3310, поэтому нужно использовать их.
Все вышеописанные мной пожелания по предыдущему скетчу я сделал, так что на экране уже нормальный, читаемый вид. Правда все равно мелковато, нужно уже очки напяливать. Есть еще желание доработать скетч, чтобы процессор спал во время бездействия и лежания в кармане или рюкзаке, а при нажатии кнопочки просыпался и выдавал показания. И контроль заряда батарейки желателен...
Или вместо сна просто выключать питание устройства? Ведь загрузка программы и опрос датчика, при включении, происходит за пару секунд, эта задержка не критична... Подумаю.
Кстати, как предлагалось выше, не стал переделывать Дуину под трехвольтовое питание, подал 3,3 сразу на ногу VCC. DS3231 и BME280 тоже запитал от 3,3 - в итоге все работает без проблем
Ничего подобного у 3410 6 строк и 16 столбцов. Это вот пока без корпуса. Уменя Nano_V3 поэтому есть 3.3 В. А у BME280 на плате есть стабилизатор на 3.3 В и согласующие уровни, полевики.
Действительно больше места на этом. Значит мне картинки попались не с него... А так - отлично, знатная штуковина получится, когда корпус будет.
Только на фото снова, в последней строке, если появится минус, сдвинется все вправо. Просто нужно сделать один знак после запятой во всех параметрах.
Измерения по току не делались. сколько потребляет готовый девайс?
Да это не проблема. Можно поколдавть над сокращениями надписей, можно сделать по одной цифре после запятой, это кому как нравится.
Сейчас пытаюсь прикрутить к скетчу измерение напряжения батареи
Я тоже над этим задумывался, но пока не определился. По-моему я видел контроллер зарядки аккумулятора с индикацией рарядки.
Вот, именно с того скетча и выдергиваю процесс измерения.
Измерения по току не делались. сколько потребляет готовый девайс?
У меня получилось 18 мА . Если еще убрать светодиод питания с платы Ардуины, то будет на 1.5 -2.0 мА меньше.
Только на фото снова, в последней строке, если появится минус, сдвинется все вправо. Просто нужно сделать один знак после запятой во всех параметрах.
Петрович, вот подправил, подумал одного знака после запятой действительно достаточно:
Я нашел несколько полезных статей по измерению напряжения Ардуиной, если интересно - вот одна из них с наиболее точным методом измерения: http://blog.unlimite.net/?p=25
Пробовал из скетча измерителя емкости аккумуляторов, но там опорное напряжение взято 3,3 В, а в реальности оно постоянно падает (аккум разржается) и большая погрешность. Лучше сразу делать как описано в статье, от опорного внутреннего источника.
Да-а-а, вид конечно у этого экранчика получше, вернее изображение на нем...
Да-а-а, вид конечно у этого экранчика получше, вернее изображение на нем...
Да в том, то и дело, что когда я его прикрутил, понял, что назад дороги нет. Но пришлось освоить другую библиотеку для вывода на печать(U8Glib). Но и библиотека мне понравилась больше.
А что входит в понимание "освоить"? Я, как говорил ранее, начинаю только познавать Дуину, пользуюсь готовыми проектами, немного перерабатываю под себя или беру стандартные примеры с библиотеками и подпиливаю. Но чтобы самому что-то перелопатить и освоить - это для меня "темный лес". Я так понимаю - библиотека это набор готовых инструкций для какого-либо устройства, который заставляет это устройство взаимодействовать с МК. Как можно там что-то дописать или убрать лишнее?
Я имею в виду, изучить ее функционал и возможности. Какими командами выводить на печать данные, а какими просто буквы и цыфры, как сформировать символы и логотипы, как добавить кириллицу, и т. д. .
Петрович, поигрался с шрифтами и вот сейчас вот такой вид :
Отлично получилось! Я тоже сейчас пытаюсь нахаляву найти такой дисплейчик. Попадался незадорого от 3510, но почитал в Нете, к нему библиотеки не подходят, да и размер у него такой-же как у 3310. Если не найду такой, то придется делать из того что есть в наличии. Так что пока все приостановилось в стадии макета, а сам занимаюсь профилактикой автомобиля, так сказать, подготовкой к осенне-зимнему сезону.
Кстати пробовал одновременно сравнить показания ВМР-280 и ВМЕ-280 - почти идентичны. Рсвхождение в пару десятых и по температуре и по давлению. Правда не знаю кто из них показывает с погрешностью.
Вы поищите у ремонтников мобилок, особенно у частных. У них много остается хлама. Я нашел через olx, повезло, что продавец оказался из моего города.
Здравствуйте! Нужно вместо BMP180 подключить BMP280 (по шине I2С). Если пишут, что бибилиотеки подходят, то выходит можно? Например в проекте с часами на MAX7219? Или какая то доработка нужна?
Сегодня попробовал подключить BMP280 по SPI-шине по этой схеме.
Работает.
первая колонка DHT22, вторая BMP280. Внизу поверенный "Метеоскоп"
Обновил ИДЕ до 10 версии еше раз подправил Adafruit библиотеку - заработала. Самую последнюю я скачивал это Grove_BME280-master.
BMP280, китайский, практически не удается запустить. Запускаю по I2C, получилось в 2-х случаях:
1. С библиотекой Grove_BME280-master файл примера, результат:
первая колонка DHT22, вторая BMP280. Внизу поверенный "Метеоскоп"
Евгений! А переделать на дисплей под I2C c выбором используемых датчиков?
У меня пока только DHT22, BMP-280 и DS18B20 + купил DS3231, так что проверять особо не на чем. На 1604 IIC + DS3231 переделал. Жду 128х64, хочу делать на нём + WiFi сбор архива на комп и попробовать подключить на сайт narodmon.ru