Официальный сайт компании Arduino по адресу arduino.cc
Метеостанция на Nano
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Вот такой проект получился.
Изначально к данному прибору был добавлен модуль часов реального времени RTC, но по какой то причине после использования его в другом проекте он вышел из строя (и так произошло с тремя различными модулями на DS1302 и DS 1307). Поэтому в данном скетче часы реализованы програмно, что правда приводит к отставанию по времени (возможно потому что плата Нано из Китая и что то не ровно считает милисекунды - может даже кварц)
Так вот на дисплей выведена информация от датчиков:
- температура и влажность- DHT11 -
- давление - bmp085 - ( на фото целый набор датчиков ускорения и т.д, но использовал только 085-ый)
- время
- TFT дисплей от Нокия 5110
При помощи кнопки (лев.верх) вхожу в меню установки времени и даты. Пока что кнопками (нижним рядом) меняю только минуты в "+" и в "-", а часы подтягиваются за ними. В планах отставшейся кнопкой - прав. верх. переключаться на установку часов, минут, даты.
//* Sergey K #define BTN_PLUSE 11 #define BTN_MINUSE 12 #define BTN_MODE 3 #define BTN_EXIT 4 #include <SPI.h> #include <Adafruit_GFX.h> #include <Adafruit_PCD8544.h> Adafruit_PCD8544 display = Adafruit_PCD8544(10, 9, 8, 7, 6); #include "I2Cdev.h" #include "BMP085.h" #include "DHT.h" #include <Wire.h> #include <Time.h> //#include <DS1307RTC.h> #define DHTPIN 2 BMP085 barometer; #define DHTTYPE DHT11 // DHT 11 DHT dht(DHTPIN, DHTTYPE); float temperature; float pressure; float altitude; int32_t lastMicros; int Day=19; int Month = 1; int Year = 2016; int Secon=0; int Minute = 00; int Hour = 16; int flag_0=0; int flag_1 =0; int flag_2=0; long timer=0; #define LED_PIN 13 // (Arduino is 13, Teensy is 11, Teensy++ is 6) bool blinkState = false; void setup() { Serial.begin(9600); Wire.begin(); dht.begin(); display.begin(); Serial.println("Initializing I2C devices..."); barometer.initialize(); // verify connection Serial.println("Testing device connections..."); Serial.println(barometer.testConnection() ? "BMP085 connection successful" : "BMP085 connection failed"); // Контраст дисплея display.setContrast(60); //display.display(); // show splashscreen // delay(100); display.clearDisplay(); // clears the screen and buffer display.setCursor(10,10); display.setTextSize(2); display.setTextColor(BLACK); // 'inverted' text display.print("METEO"); display.display(); // delay(500); display.clearDisplay(); pinMode(BTN_PLUSE, INPUT); pinMode(BTN_MINUSE, INPUT); pinMode(BTN_MODE, INPUT); pinMode(BTN_EXIT, INPUT); digitalWrite(BTN_PLUSE, LOW); digitalWrite(BTN_MINUSE, LOW); digitalWrite(BTN_MODE, LOW); digitalWrite(BTN_EXIT, LOW); } void loop() { flag_0=0; flag_1 =0; flag_2=0; display.clearDisplay(); float h = dht.readHumidity(); int t = dht.readTemperature(); if (isnan(h) || isnan(t)) { Serial.println("Failed to read from DHT sensor!"); return; } if (millis() - timer >= 950) { timer = millis(); Secon++; times (); } clock(Hour, Minute, Secon, Day, Month, Year); barometer.setControl(BMP085_MODE_TEMPERATURE); lastMicros = micros(); while (micros() - lastMicros < barometer.getMeasureDelayMicroseconds()); temperature = barometer.getTemperatureC(); display.setCursor(0,4); display.setTextSize(2); display.setTextColor(BLACK); // 'inverted' text display.print(t); display.print("C"); display.setTextSize(1); barometer.setControl(BMP085_MODE_PRESSURE_3); lastMicros = micros(); while (micros() - lastMicros < barometer.getMeasureDelayMicroseconds()); pressure = barometer.getPressure(); altitude = barometer.getAltitude(pressure); int pres = pressure/133.322; int alt = altitude; display.setCursor(40,0); display.setTextColor(BLACK); display.print(pres); display.print("mmHg"); display.setCursor(40,8); display.print(h); display.print("% "); display.setCursor(40,16); display.print(alt); display.println("alt "); display.display(); if (digitalRead(BTN_MODE)==HIGH) { mode(); } } void mode () // функция устанавлявающая время и дату { label_0: display.clearDisplay(); clock(Hour, Minute, Secon, Day, Month, Year); times (); display.display(); if ( digitalRead(BTN_PLUSE)==HIGH && flag_1==1) { Minute++; flag_1=0; } if ( digitalRead(BTN_PLUSE)==LOW && flag_1==0) flag_1=1; if ( digitalRead(BTN_MINUSE)==HIGH && flag_2==1) { Minute--; flag_2=0; } if ( digitalRead(BTN_MINUSE)==!HIGH && flag_2==0) flag_2=1; if(digitalRead(BTN_MODE)==HIGH&&flag_0==0)//если кнопка нажата // и перемення flag равна 0 , то ... { goto label_0; //это нужно для того что бы с каждым нажатием кнопки //происходило только одно действие // плюс защита от "дребезга" 100% } else { flag_0=1; } if(digitalRead(BTN_MODE)==!HIGH && flag_0==1)//если кнопка нажата //и переменная flag равна - 0 ,то ... { goto label_0; } } void clock (int H, int M, int S, int D, int Mon, int Y) // функция выводящая на экран время { display.setTextSize(2); display.setCursor(0,25); display.setTextColor(BLACK); display.print(H); display.setCursor(20,25); display.print(":"); display.setCursor(28,25); if (M>=0 && M<10) display.print("0"); display.print(M); display.setCursor(50,25); display.print(":"); display.setCursor(58,25); if (S>=0 && S<10) display.print("0"); display.print(S); display.setTextColor(BLACK); display.setTextSize(1); display.setCursor(12,41); display.print(D); display.print("/"); display.print(Mon); display.print("/"); display.print(Y); } void times () // функция считающая время и дату { if (Secon>=60) { Minute++; Secon=0; } if (Minute>=60) { Minute=0; Hour++; } if (Hour>=24) { Hour=0; Day++; } if (Day>=31) { Month++; Day=1; } if (Minute<0) { Minute=59; Hour--; } if (Hour<0) { Hour=23; Day--; } if (Day<0) { Month--; Day=30; } }
По Методу форума картинка не грузится, так что даю ссылку на Яндекс
https://yadi.sk/i/NcV5liFtnLgTV
Strannik-s, ну несолидно как-то. Таких метеостанций только на данно форуме вагон и маленькая тележка. Да и в каждом магазине они валяются на любой вкус. Добавьте хоть чтобы ещё и прогноз с гисметео загружала и показывала - всё какая-то новизна.
Этот проект вышел как побочный эффект системы мониторинга, которая будет измерять температуру, количество открываний двери, количество проходящих людей, многое другое, геопозиционирование, делать фото и отправлять все данные на сервер в таблицу а фото на ФТП сервер. А пока что вышел вот такой вот проект, первое практическое применение. Вас благодарю за обратную связь.
Собрал. Что то на экране пусто...
Собрал. Что то на экране пусто...
проверьте
058
обычно об этом забывают.
Спасибо bodriy2014! Пробовал менять контрастность - бесполезно. Похоже что то с моим новым дисплеем 5110...Разбираюсь.
Спасибо bodriy2014! Пробовал менять контрастность - бесполезно. Похоже что то с моим новым дисплеем 5110...Разбираюсь.
А примеры которые с библиотекой шли работают?
если нет смотрите подключение, если идут смотрите код.
Вчера пересобрал дисплей, присланный с "АЛИ", он заработал. Там вечная проблема с резинкой. Не знаю, надолго ли его хватит. Но до этого с дуру переустановил среду. Теперь куча ошибок при компиляции. Компилятор ругается на BMP085. "Class BMP085 has no member named initialize". Библиотеки, которые до этого стояли, все вернул. Не пойму в чём дело.
Надо смотреть подключение, у меня BMP085 на общем модуле с другими датчиками.
Господа, а кто сталкивался с регулярным выходом из строя часов реального времени - три модуля 1302 и 1307 вышли из строя
Надо смотреть подключение, у меня BMP085 на общем модуле с другими датчиками.
Господа, а кто сталкивался с регулярным выходом из строя часов реального времени - три модуля 1302 и 1307 вышли из строя
были тут комента по поводу этих часиков...не надежные они ..бери ds3231
Надо смотреть подключение, у меня BMP085 на общем модуле с другими датчиками.
Господа, а кто сталкивался с регулярным выходом из строя часов реального времени - три модуля 1302 и 1307 вышли из строя
Но скетч откомпилироваться по любому ведь должен, даже без датчиков! Насчет RTC - я использую ds3231. Ранее сталкивался с не точностью хода 1307, больше их не заказываю.
Вопрос к автору темы! Какую версию ардуины импользуете и какие библиотеки для этого проека? Не могу избавиться от ошибки
Используется Нано.
Однако вчера произошло странное, обновил программу Arduino IDE до последней версии, и вот теперь выскакивает ошибка что у меня все библиотеки сторонние НЕВЕРНЫЕ ! и это не про вероисповедание. Так что сам сейчас в ужасе разбираюсь, что же произошло, при этом ни один проект не грузится...
Нано от мини отличаются лишь отсутсвием usb-com интерфейса у последнего. Вот и я до этого обновил среду. Но потом я вернул всё на место, но ошибки не пропадают.
и так, танцы с бубнами и откатом на более позднюю версию не помогли. Вопрос решился вот так: была папка библиотек i2cdev и т.д. в которой лежало множество библиотек по устройствам, и вот почему то её перестало видеть, вышел из ситуации так: в это папке директория Arduino , там еще несколько директорий с библиотеками, так вот их все скопировал в каталог с библиотеками в ардуино. и заработало
Strannik-s, не могли бы вы мне прислать библиотеки, используемые в проекте? В моей папке I2Cdev только 4 файла (I2Cdev.cpp, I2Cdev.h, keywords.txt, library.json)...yucan@mail.ru
Я вот этот проект сделал, но символы бывает трудно разглядеть, хочется с крупными!
https://github.com/jrowberg/i2cdevlib/tree/master/Arduino/MPU6050
добавь контраста на дисплее
display.setContrast(60);
Скачал, сейчас буду пробовать. Контраста - да, не хватает.
Сделал так, как вы описали выше. Все папаки из каталога "ардуино" закинул в папку "libraries". Всё равно та же самая ошибка "Class BMP085 has no member named initialize". У меня сейчас версия 1.06 Ардуино установлена. У вас какая?
Arduino 1.6.7
Вобщем у меня в каталоге библиотек Ардуино была папка bmp085_1. После её удаления проверка компиляции прошла и проект нормально загрузился. Восстановил bmp085_1 - всё равно нормально компилируется. Так и не понял в чем было дело. Среда v1.06, в ней мне как то привычнее. Заработала! Спасибо автору!
Как показала практика, часы всё же добавлять необходимо - расчет времени на основе внутреннего кварца дает подгрешность то в + то в -
Согласен, неточность хода при работе от внутреннего генератора присутствует в любом устройстве. А нельзя ли снова привязать часы реального времени по квадратной шине? Или коррекцию хода сделать! Вчера присмотрелся - врут весьма прилично! Высосотомер тоже врёт в зависимости от атмосферного давления. Чем ниже давление, тем больше.
а такой экранчик прекрутить реально ? http://ru.aliexpress.com/item/LCD-module-TFT-2-4-inch-TFT-LCD-screen-for...
а такой экранчик прекрутить реально ? http://ru.aliexpress.com/item/LCD-module-TFT-2-4-inch-TFT-LCD-screen-for...
Прикрутить реально, я себе в осциллограф такой и поставил, но учтите даже без использования карты памяти он занимает пины, я на кртинке указал какие обязательно подключать и в архиве с скетчем естть текстовый файл какие пины подключал к дуине http://srukami.inf.ua/pultoscop_v2.html
а существуют переходники на i2c