Комнатная метеостанция с часами

RN6LJK
Offline
Зарегистрирован: 24.03.2013

:-))

 

Bobrov.Anatoliy
Offline
Зарегистрирован: 29.08.2013

Loginkr пишет:

А вот моя метео станция + часы

 

5f9d2623dc3b.jpg

5f9d2623dc3b.jpg

Доброго времени суток! Меня очень заинтересовал этот ваш проект, поскольку я сейчас делаю устройство на семисегментниках и кнопки, как у вас, подключены к пинам наны.:

http://arduino.ru/forum/programmirovanie/pechka-dlya-sauny-s-upravleniem...

Если не трудно, не моглы бы вы показать, как записываете на индикатор, у меня код немного громоздкий, а когда это еще и с меню, то многовато получается.

 

Спасибо.

RN6LJK
Offline
Зарегистрирован: 24.03.2013

Bobrov.Anatoliy]</p> <p>[quote=Loginkr пишет:

Если не трудно, не моглы бы вы показать, как записываете на индикатор, у меня код немного громоздкий, а когда это еще и с меню, то многовато получается.

http://zelectro.cc/LCD1602_and_LM35

http://robocraft.ru/blog/arduino/503.html

http://geektimes.ru/post/254830/

В данном проекте управляется  8-ю битами:

(фрагмент скетча проекта)
 
// LCD:
// VSS -gnd -  на левый вывод потенц 15ком
// VDD- +5 wolt -  на правый вывод потенц 15ком
// V0-  на cредний вывод потенциометра 15ком
// RW - gnd
// DB7       -> Arduino Digital 6
// DB6       -> Arduino Digital 7
// DB5       -> Arduino Digital 8
// DB4       -> Arduino Digital 9
// E         -> Arduino Digital 10
// RS        -> Arduino Digital 11
// A - +5 wolt через потенц 1 ком
// K - gnd
LiquidCrystal lcd(11, 10, 9, 8, 7, 6);
 
Вот еще для информации I2C управление
 
 
nicitich
Offline
Зарегистрирован: 08.08.2015

Отправьте мне тож библиотеки, пожалуйста) nicitich@mail.ru

RN6LJK
Offline
Зарегистрирован: 24.03.2013

nicitich пишет:

Отправьте мне тож библиотеки, пожалуйста) nicitich@mail.ru

Ловите

Bobrov.Anatoliy
Offline
Зарегистрирован: 29.08.2013

RN6LJK]</p> <p>[quote=Bobrov.Anatoliy пишет:

Loginkr пишет:

Если не трудно, не моглы бы вы показать, как записываете на индикатор, у меня код немного громоздкий, а когда это еще и с меню, то многовато получается.

http://zelectro.cc/LCD1602_and_LM35

http://robocraft.ru/blog/arduino/503.html

http://geektimes.ru/post/254830/

В данном проекте управляется  8-ю битами:

(фрагмент скетча проекта)
 
// LCD:
// VSS -gnd -  на левый вывод потенц 15ком
// VDD- +5 wolt -  на правый вывод потенц 15ком
// V0-  на cредний вывод потенциометра 15ком
// RW - gnd
// DB7       -> Arduino Digital 6
// DB6       -> Arduino Digital 7
// DB5       -> Arduino Digital 8
// DB4       -> Arduino Digital 9
// E         -> Arduino Digital 10
// RS        -> Arduino Digital 11
// A - +5 wolt через потенц 1 ком
// K - gnd
LiquidCrystal lcd(11, 10, 9, 8, 7, 6);
 
Вот еще для информации I2C управление
 
 

RN6LJK, спасибо за ответ, но я увидел у Вас семисегментные индикаторы, я в проекте тоже использую семисегментник через max7219, вот я и хотел попросить Вас показать, как Вы управляете семисегментником, у меня код громоздкий:

  //зададим исходные параметры для дисплея
lc.clearDisplay(0);// clear screen
lc.shutdown(0,false);// turn off power saving, enables display
lc.setIntensity(0,7);// sets brightness (0~15 possible values)
lc.setScanLimit(1, 3);
lc.clearDisplay(0);                 //очищаем экран
 Ti = timer_set;            //в этом блоке печатаем установленную температуру
 hundreds = Ti/100;                 //определяем сотни
 tens=(Ti-hundreds*100)/10;        //определяем десятки
 ones=Ti-(hundreds*100+tens*10);  //определяем единицы
 lc.setDigit(0,0,hundreds,false);     //печатаем сотни
 lc.setDigit(0,1,tens,false);          //печатаем десятки с запятой
 lc.setDigit(0,2,ones,false);        //печатаем единицы
   delay (500);                    //делаем задержку 
  lc.clearDisplay(0);                 //очищаем экран

Вот я и хотел подсмотреть, как Вы управляете этой штукой.

 

Спасибо

RN6LJK
Offline
Зарегистрирован: 24.03.2013

Bobrov.Anatoliy пишет:

RN6LJK, спасибо за ответ, но я увидел у Вас семисегментные индикаторы, я в проекте тоже использую семисегментник через max7219, вот я и хотел попросить Вас показать, как Вы управляете семисегментником, у меня код громоздкий:

Вот я и хотел подсмотреть, как Вы управляете этой штукой

 Я так понимаю, что вопрос не ко мне а к Loginkr? Или я совсем запутался?

В моем проекте использован дисплей LCD 16x2.

pitv
Offline
Зарегистрирован: 14.08.2015

Добрый день,  уменя вопрос к vvg10 поместится ли программа в ардуинку на меге168.

vvg10
vvg10 аватар
Offline
Зарегистрирован: 18.04.2013

pitv пишет:

Добрый день,  уменя вопрос к vvg10 поместится ли программа в ардуинку на меге168.

Судя по тому, что программа занимает 14к(43%) флэша и 760 байт(37%)дин. памяти в меге328(32к и 2к), то в 168(16к и 1к ) должно влезть.

pitv
Offline
Зарегистрирован: 14.08.2015

Спасибо Вам vvg10 за скорый ответ. И еще вопросик если не затруднит . какой длинны у Вас кабель до внешего датчика влажности. А еще неболшое предложение , сделать регулировку яркости подсветки LCD в зависимости от освещенности или от времени суток.

nik0lay
Offline
Зарегистрирован: 31.08.2015

И мне пожалуйста отправьте библиотеки! ) nik.bondar(a)mail.ru

vvg10
vvg10 аватар
Offline
Зарегистрирован: 18.04.2013

pitv пишет:

Спасибо Вам vvg10 за скорый ответ. И еще вопросик если не затруднит . какой длинны у Вас кабель до внешего датчика влажности. А еще неболшое предложение , сделать регулировку яркости подсветки LCD в зависимости от освещенности или от времени суток.

Сейчас кабель метра полтора, при тестировании был метров десять - разницы нет. Регулировку яркости проще сделать на фоторезисторе аппаратно, программу уже лень дописывать.... :-)

mcboris
Offline
Зарегистрирован: 12.09.2015

Здравствуйте. А можно и мне отправить библиотеки. borisnelyubov@yandex.ru 

alex000000
Offline
Зарегистрирован: 21.06.2015

Понравился ваш проект. Хочу повторить. Давно хотел что нибудь такое. Все детали есть. Пришлите пожалуйста если можете библиотеки.

astrons2009@yandex.ru

RN6LJK
Offline
Зарегистрирован: 24.03.2013

Прошу прощения за задержку ответа.

Всем кто написал в форум и на мыло ответил.

mareenman
Offline
Зарегистрирован: 18.07.2014

Кто-то просил схему в Fritzing, держите кому надо:

https://yadi.sk/d/gv6m84gGjb6u4

Немного изменена схема питания, ардуино запитывается отдельно от 12в., остальная часть схемы отдельно от 5в. стабилизатора.

LCD2004

mareenman
Offline
Зарегистрирован: 18.07.2014

Тоже самое на большом дисплее размером 146 на 63 мм.

vvg10
vvg10 аватар
Offline
Зарегистрирован: 18.04.2013

Ну символ градуса уж можно было бы сделать, и вторую температуру и влажность, если уж использовать большой дисплей...

mareenman
Offline
Зарегистрирован: 18.07.2014

Это повторялось точь-в-точь по схеме. Датчик у меня один, второго нет.

ciberpda
Offline
Зарегистрирован: 04.11.2015

Здравствуйте. Очень понравился Ваш проект. Хочу повторить. Пришлите мне пожалуйста Ваши библиотеки на мою почту

 sbor524@yandex.ru

CyberWall
Offline
Зарегистрирован: 03.11.2013

Пришлите мне пожалуйста Ваши библиотеки на почту

cyberwall@mail.ru

yucan
Offline
Зарегистрирован: 20.04.2015

Библиотеки и файлы можно скачать тут http://iarduino.ru/file/

fm-nafing
Offline
Зарегистрирован: 20.11.2015

Доброго времени суток всем. Увидел этот проэкт и сразу решил собрать. Очень уж интересная штучка. Есть у меня какието стандартные библиотечки НО с ними при компиляции пишет ошибочки. Поделитесь плиз на адресок: fm-nafing@mail .ru

RN6LJK
Offline
Зарегистрирован: 24.03.2013

fm-nafing пишет:

 Поделитесь плиз на адресок: fm-nafing@mail .ru

Удачи в повторении, хотя элементная база уже есть видимо поновей и этот проект устарел.

Библиотеки отправил.

fm-nafing
Offline
Зарегистрирован: 20.11.2015

Спасибо огромнейшее за библиотечки. Теперь всё компильнулось. НО. Может подскажете что делаю не так? Экран ничего не показывает. Перепроверил все подключения. Всё норм. Заливал любые другие скетчи - всё кажет. только не метео.

RN6LJK
Offline
Зарегистрирован: 24.03.2013

fm-nafing пишет:

.. Может подскажете что делаю не так? Экран ничего не показывает. 

Не обижайтесь дружище за мой ответ, но мне весьма сложно ответить на вопрос, что там у Вас не так, исходя только из одной фразы. В своей жизни я опираюсь на несколько аксиом.  В даном случае применимы две, а именно:

1. Электроника это наука о контактах;

2. Любая программа имеет как минимум пять ошибок, причем после исправление их количество не уменьшается.

Внимательно и не торопясь все проверьте. Наверняка найдете ошибку и может быть не одну. Проект уже проверен несколькими товарищами и все работает.

Спасибо за понимание.

dennisdennis
dennisdennis аватар
Offline
Зарегистрирован: 18.01.2015

Не могу отписаться от тем, подсажите плз, как это сделать?

broduaga5
Offline
Зарегистрирован: 23.11.2015

Здравствуйте.Как поставить модуль DS1302

broduaga5
Offline
Зарегистрирован: 23.11.2015

Пришлите пожалуйста библиотеки j-shishov@udmnet.ru

RN6LJK
Offline
Зарегистрирован: 24.03.2013

broduaga5 пишет:
Здравствуйте.Как поставить модуль DS1302

Здравствуйте. Думаю ответ есть здесь

http://arduino.ru/forum/apparatnye-voprosy/kak-prilepit-chasy-ds1302

RN6LJK
Offline
Зарегистрирован: 24.03.2013

broduaga5 пишет:
Пришлите пожалуйста библиотеки j-shishov@udmnet.ru

Отослал

RN6LJK
Offline
Зарегистрирован: 24.03.2013

dennisdennis пишет:

Не могу отписаться от тем, подсажите плз, как это сделать?

 

Отключить уведомления о комментариях к 

Вашей теме можно залогинившись на 

http://arduino.ru в разделе Мой профиль.

dennisdennis
dennisdennis аватар
Offline
Зарегистрирован: 18.01.2015

RN6LJK пишет:

dennisdennis пишет:

Не могу отписаться от тем, подсажите плз, как это сделать?

 

Отключить уведомления о комментариях к 

Вашей теме можно залогинившись на 

http://arduino.ru в разделе Мой профиль.

Во вкладке Следить есть у меня 2 темы,но что нажать? Там нет никаких кнопок.

YRA
Offline
Зарегистрирован: 10.01.2015

dennisdennis откройте свое любое сообщение  в данной теме и посмотрите внизу и галочку снимите 

"Уведомлять меня о новых коментариях".

Поклон Вам низкий за работу.

RN6LJK
Offline
Зарегистрирован: 24.03.2013

 

Теперь понятно. Однако как то витиевато.

pitv
Offline
Зарегистрирован: 14.08.2015

pitv пишет:

Спасибо Вам vvg10 за скорый ответ. И еще вопросик если не затруднит . какой длинны у Вас кабель до внешего датчика влажности. А еще неболшое предложение , сделать регулировку яркости подсветки LCD в зависимости от освещенности или от времени суток.

vvg10
vvg10 аватар
Offline
Зарегистрирован: 18.04.2013

pitv пишет:

pitv пишет:

Спасибо Вам vvg10 за скорый ответ. И еще вопросик если не затруднит . какой длинны у Вас кабель до внешего датчика влажности. А еще неболшое предложение , сделать регулировку яркости подсветки LCD в зависимости от освещенности или от времени суток.

См. пост №212

RN6LJK
Offline
Зарегистрирован: 24.03.2013

Весной этого года ко мне обратились двое дипломников с просьбой о помощи в реализации данного проекта. Не скрою мне было приятно. Помимо общих вопросов был один на который я не смог ответить, а именно есть ли реализация проектра в среде Proteus. Я бы и не вернулся к этому вопросу если бы мне не пришла в голову очередная идея на Arduino, но железа не оказалось под рукой, и я решил попробовать Proteus для моделирования. С чего начать? Ответ естественно на поверхности, с метеостанции, так как она отлажена и реализована не только мною. Во избежании далнейших вопросов о деталях проекта я решил пойти по пути реализации отдельных ветвей проекта и в конечном итоге объединения накопленных решений, что в общем то логично. Итак представляю результаты поэтапного моделирования (только результаты дабы не перегружать лишней детальной игформацией). Единственно, что мне пока не удалось так это  BMP085. Я не смог найти модель этого элемента для Proteus. У кого есть поделитель плз. Если смогу, то заменю другим элементом, но пока без BMP085.

Итак представляю поэтапное моделирование с итогом в виде схемы на Proteus + скетч. Кому не интересно проходите мимо, ну у кого будут вопросы пишите.

Публикую в виде нескольких последовательных постов под заголовками "Комнатнвя метеостанция с часами" этап номер. Ну это понятно.

 

RN6LJK
Offline
Зарегистрирован: 24.03.2013
Комнатная метеостанция этап 1

/*
  LiquidCrystal Library - 
 
 Демонстрация подключения LCD для подготовки проекта
 "Комнатная метеостанция с часами"
 
  The circuit:
 * LCD RS pin to digital pin 11
 * LCD Enable pin to digital pin 10
 * LCD D4 pin to digital pin 9
 * LCD D5 pin to digital pin 8
 * LCD D6 pin to digital pin 7
 * LCD D7 pin to digital pin 6
 * LCD R/W pin to ground
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)
 
 Library originally added 18 Apr 2008
 by David A. Mellis
 library modified 5 Jul 2009
 by Limor Fried (http://www.ladyada.net)
 example added 9 Jul 2009
 by Tom Igoe
 modified 22 Nov 2010
 by Tom Igoe
 
 This example code is in the public domain.

 http://www.arduino.cc/en/Tutorial/LiquidCrystal
 */


// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(11, 10, 9, 8, 7, 6);

void setup() {
  // set up the LCD's number of columns and rows: 
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("Weather Station");
}

void loop() {
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 1);
  // print the number of seconds since reset:
  lcd.print(millis()/500);
}

 

RN6LJK
Offline
Зарегистрирован: 24.03.2013

Комнатна метеостанция этап 2



#include <LiquidCrystal.h>
#include <DS1307.h>
#include <Wire.h>
#include <dht.h>
#define I2C_ADDRESS 0x77

// DHT:
// Connect pin 1 (on the left) of the sensor to +5V
// Connect pin 2 of the sensor to whatever your DHTPIN is Arduino analog 0
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
// создаём объект-сенсор
DHT sensor = DHT();

const int ledPin =  13;      // the number of the LED pin
void setup()
{
   // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);   
  
 //DHT11:
// методом attach объявляем к какому контакту подключен
// сенсор. В данном случае это нулевой аналоговый контакт
  sensor.attach(A0);
  
    // Setup Serial connection
  Serial.begin(9600);

}
  
void loop()
{   
 // В Л А Ж Н О С Т Ь
     // метод update заставляет сенсор выдать текущие измерения
        sensor.update();     
        switch (sensor.getLastError())
        {
            case DHT_ERROR_OK:
                 char msg[128];
                // данные последнего измерения можно считать соответствующими
                // методами
               sprintf(msg, "Temperature = %dC, Humidity = %d%%", 
               sensor.getTemperatureInt(), sensor.getHumidityInt()); 

                Serial.println(msg);

                break;
            case DHT_ERROR_START_FAILED_1:
                break;
            case DHT_ERROR_START_FAILED_2:
                break;
            case DHT_ERROR_READ_TIMEOUT:
                break;
            case DHT_ERROR_CHECKSUM_FAILURE:
                break;
        }

// светодиод оставил для индикации работы устройства
  digitalWrite(ledPin, LOW);
  // Wait one second before repeating :)
  delay (500); 
}

 

RN6LJK
Offline
Зарегистрирован: 24.03.2013

Комнатная метеостанция - этап 3

 

// DS1307_Serial_Easy (C)2010 Henning Karlsen
// web: http://www.henningkarlsen.com/electronics
// NO BUTTON
// A quick demo of how to use my DS1307-library to 
// quickly send time and date information over a serial link
//
// I assume you know how to connect the DS1307.
// DS1307:  SDA pin   -> Arduino Digital 2
//          SCL pin   -> Arduino Digital 3

#include <DS1307.h>

// Init the DS1307
DS1307 rtc(2, 3);

void setup()
{
  // Set the clock to run-mode
  rtc.halt(false);
  
  // Setup Serial connection
  Serial.begin(9600);

  // The following lines can be commented out to use the values already stored in the DS1307
  rtc.setDOW(SUNDAY);        // Set Day-of-Week to SUNDAY
  rtc.setTime(12, 0, 0);     // Set the time to 12:00:00 (24hr format)
  rtc.setDate(3, 10, 2010);   // Set the date to October 3th, 2010
}

void loop()
{
  // Send Day-of-Week
  Serial.print(rtc.getDOWStr());
  Serial.print(" ");
  
  // Send date
  Serial.print(rtc.getDateStr());
  Serial.print(" -- ");

  // Send time
  Serial.println(rtc.getTimeStr());
  
  // Wait one second before repeating :)
  delay (1000);
}

 

RN6LJK
Offline
Зарегистрирован: 24.03.2013

Комнатная метеостанция - этап 4

 

// http://nnm.ru/blogs/pencraft/arduino-i-chasy-na-mikrosheme-dallas-ds1307/
//  Ч А С Ы

// DS1307:  SDA pin   -> Arduino Digital 2
//          SCL pin   -> Arduino Digital 3

#include <DS1307.h>

// Init the DS1307
DS1307 rtc(2, 3);

// Init a Time-data structure
Time  t;

// set pin numbers:
// Раскладка без сброса секунд
const int buttonPin_sh = A1;     // Установка ЧАСОВ
const int buttonPin_mn = A2;     // Установка МИНУТЫ
const int buttonPin_dn = A3;     // Установка ДЕНЬ
const int buttonPin_ms =4;     // Установка МЕСЯЦ
const int buttonPin_gd =12;     // Установка ГОД


const int ledPin =  13;      // the number of the LED pin

// variables will change:
int buttonState_sh = 0;         // variable for reading the pushbutton status
int sh;
int mn;
int sc;
int dn;
int ms;
int gd;

void setup()
{
   // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);    
   // initialize the pushbutton pin as an input:
  pinMode(buttonPin_sh, INPUT); 
  
  // Set the clock to run-mode
 rtc.halt(false);
  
  // Setup Serial connection
  Serial.begin(9600);

  // The following lines can be commented out to use the values already stored in the DS1307
/*
 rtc.setDOW(MONDAY);        // Set Day-of-Week to SUNDAY
 rtc.setTime(13,05, 0);     // Set the time to 12:00:00 (24hr format)
 rtc.setDate(12, 11, 2012);   // Set the date to October 3th, 2010
*/
}

void loop()
{
//-------------У С Т А Н О В К И --------------------------------------------------------

// Ч А С Ы
  if (digitalRead(buttonPin_sh) == HIGH) { 
    digitalWrite(ledPin, HIGH); 
    goto set_sh;
                               }
     else {
    digitalWrite(ledPin, LOW); 
          } 
 

// М И Н У Т Ы  - секунды в нуль
  if (digitalRead(buttonPin_mn) == HIGH) { 
    digitalWrite(ledPin, HIGH); 
    goto set_mn;
                               }
     else {
    digitalWrite(ledPin, LOW); 
          } 
  
// ДЕНЬ  
  if (digitalRead(buttonPin_dn) == HIGH) { 
    digitalWrite(ledPin, HIGH); 
    goto set_dn;
                               }
     else {
    digitalWrite(ledPin, LOW); 
          } 
  
// М Е С Я Ц 
  if (digitalRead(buttonPin_ms) == HIGH) { 
    digitalWrite(ledPin, HIGH); 
    goto set_ms;
                               }
     else {
    digitalWrite(ledPin, LOW); 
          } 

// Г О Д
  if (digitalRead(buttonPin_gd) == HIGH) { 
    digitalWrite(ledPin, HIGH); 
    goto set_gd;
                               }
     else {
    digitalWrite(ledPin, LOW); 
          } 


//--------------------------------------------------
    goto sen_d;
//----------ЧАСЫ------------------------------------
 set_sh:
  t = rtc.getTime();
  sh=t.hour;
  mn=t.min;
  sc=t.sec;
  sh=sh+1;
  if (sh<=23)
  {}
  else{
    sh=0;
      }
rtc.setTime(sh,mn,sc);     // Set the time to 12:00:00 (24hr format)
goto sen_d;
//-------------МИНУТЫ-----------------
 set_mn:
  t = rtc.getTime();
  sh=t.hour;
  mn=t.min;
  sc=0;
  mn=mn+1;
  if (mn<=59)
  {}
  else{
    mn=0;
      }
rtc.setTime(sh,mn,sc);     // Set the time to 12:00:00 (24hr format)

//-----------------------------------
goto sen_d;

//-------------Д Н И-----------------
 set_dn:
  t = rtc.getTime();
  dn=t.date;
  ms=t.mon;
  gd=t.year;
  dn=dn+1;
  if (dn<=31)
  {}
  else{
    dn=1;
      }
rtc.setDate(dn, ms, gd);     // Set the time to 12:00:00 (24hr format)
goto sen_d;

//-------------М Е С Я Ц Ы-----------------
 set_ms:
  t = rtc.getTime();
  dn=t.date;
  ms=t.mon;
  gd=t.year;
  ms=ms+1;
  if (ms<=12)
  {}
  else{
    ms=1;
      }
rtc.setDate(dn, ms, gd);     // Set the time to 12:00:00 (24hr format)
goto sen_d;

//-------------Г О Д Ы-----------------
 set_gd:
  t = rtc.getTime();
  dn=t.date;
  ms=t.mon;
  gd=t.year;
  gd=gd+1;
  if (gd<=2020)
  {}
  else{
    gd=2013;
      }
rtc.setDate(dn, ms, gd);     // Set the time to 12:00:00 (24hr format)
goto sen_d;

 
 
 

//------------------------------------------------------------------------------

 // Get data from the DS1307
/*
    t = rtc.getTime();

// Send date over serial connection
  Serial.print("Today is the ");
  Serial.print(t.date, DEC);
  Serial.print(".");
  Serial.print(". day of ");
  Serial.print(rtc.getMonthStr(FORMAT_SHORT));
  Serial.print(".");
  Serial.print(" in the year ");
  Serial.print(t.year, FORMAT_SHORT);
  Serial.println("");
  
// Send Day-of-Week and time
  Serial.print("It is the ");
  Serial.print(t.dow, DEC);
  Serial.print(". day of the week (counting monday as the 1th), and it has passed ");

  Serial.print(t.hour, DEC);
  Serial.print(".");
  Serial.print(" hour(s), ");
  Serial.print(t.min, DEC);
  Serial.print(".");
  Serial.print(" minute(s) and ");
  Serial.print(".");
  Serial.print(t.sec, DEC);
  Serial.println();

*/

 sen_d: 
  // Send date
  Serial.print(rtc.getDateStr(FORMAT_SHORT));
  Serial.print(" -- ");

  // Send time
  Serial.println(rtc.getTimeStr());
 
  // Wait one second before repeating :)
  delay (100);
}

 

RN6LJK
Offline
Зарегистрирован: 24.03.2013

Комнатная метеостанция - предварительный итог

часть скетча для обработки BMP умышленно не удалял, может пригодиться в дальнейшем

 


//----------------------------------------------------------------------------------------------
// Домашняя метеостанция с часами
// 27 12 2015 - проверено
// RN6LJK
// v 1.2
// Arduino _1.0.1 ---- В Н И М А Н И Е !!!!  ЭТО ВАЖНО   на доугих версиях может не работать
//----------------------------------------------------------------------------------------------
// Б Е З   М О Д У Л Я   BMP085

#include <LiquidCrystal.h>
#include <DS1307.h>
#include <Wire.h>
#include <dht.h>
#define I2C_ADDRESS 0x77

// DHT:
// Connect pin 1 (on the left) of the sensor to +5V
// Connect pin 2 of the sensor to whatever your DHTPIN is Arduino analog 0
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
// создаём объект-сенсор
DHT sensor = DHT();
/*    
//BMP085: 
// интерфейс I2C
// SDA - Arduino analog 4
// SCL - Arduino analog 5
// VCC - VCC
// GND - GROUND
const unsigned char oversampling_setting = 3; //oversamplig (передискретизация)
const unsigned char pressure_waittime[4] = { 5, 8, 14, 26 };
int ac1;
int ac2; 
int ac3; 
unsigned int ac4;
unsigned int ac5;
unsigned int ac6;
int b1; 
int b2;
int mb;
int mc;
int md;
*/

// DS1307:
// SDA pin   -> Arduino Digital 2
// SCL pin   -> Arduino Digital 3
// VCC - VCC
// GND - в моем случае подключение к GROUND блокирует работу DS1307,  
// поэтому GND не подключено, причину так и не выяснил.
DS1307 rtc(2,3);
// Init a Time-data structure
Time  t;
// set pin numbers:
const int buttonPin_sh = A1;     // Установка ЧАСОВ
const int buttonPin_mn = A2;     // Установка МИНУТЫ
const int buttonPin_dn = A3;     // Установка ДЕНЬ
const int buttonPin_ms = 4;     // Установка МЕСЯЦ
const int buttonPin_gd = 5;     // Установка ГОД
const int buttonPin_nu = 12;     // Установка МИНУТА СЕКУНДА В НОЛЬ
int sh;
int mn;
int sc;
int dn;
int ms;
int gd;

// LCD:
// VSS -gnd -  на левый вывод потенц 15ком
// VDD- +5 wolt -  на правый вывод потенц 15ком
// V0-  на cредний вывод потенциометра 15ком
// RW - gnd
// DB7       -> Arduino Digital 6
// DB6       -> Arduino Digital 7
// DB5       -> Arduino Digital 8
// DB4       -> Arduino Digital 9
// E         -> Arduino Digital 10
// RS        -> Arduino Digital 11
// A - +5 wolt через потенц 1 ком
// K - gnd
LiquidCrystal lcd(11, 10, 9, 8, 7, 6);


// светодиод оставил для индикации работы устройства
const int ledPin =  13;      // the number of the LED pin


//----------------------------------------------------------------------------------------------
 void setup()
{
  
    // Setup Serial connection ДЛЯ ОТЛАДКИ ВЫВОДА, необходимо подключить виртуальный 
    // монитор или смотреть через монитор порта, но предусмотреть вывод типа Serial.print()
    
    //   Serial.begin(9600);
  
  
   // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);    

// LCD:
// Setup LCD to 16x2 characters
  lcd.begin(16, 2);

//  DS1307: 
  // Set the clock to run-mode - разрешить установку
    rtc.halt(false);
//  Программная установка времени для аварийных работ
//  rtc.setDate(10,2,2013);   // Set the date to October 3th, 2010
//  rtc.setTime(22,00, 0);     // Set the time to 12:00:00 (24hr format)
//  rtc.setDOW(THURSDAY);        // Set Day-of-Week to SUNDAY
//  Set SQW/Out rate to 1Hz, and enable SQW
//  rtc.setSQWRate(SQW_RATE_1);
//  rtc.enableSQW(true);

//DHT11:
// методом attach объявляем к какому контакту подключен
// сенсор. В данном случае это нулевой аналоговый контакт
  sensor.attach(A0);
/*
//BMP085:
 Wire.begin();
  bmp085_get_cal_data();
*/
}

//void bmp085_read_temperature_and_pressure(int& temperature, long& pressure);


//----------------------------------------------------------------------------------------------

void loop()
{
//-------------У С Т А Н О В К А    Д А Т Ы    И    В Р Е М Е Н И ---------------------------------------

// Ч А С Ы
  if (digitalRead(buttonPin_sh) == HIGH) { 
// светодиод оставил для индикации работы устройства
    digitalWrite(ledPin, HIGH); 
    goto set_sh;
                               }
     else {
    digitalWrite(ledPin, LOW); 
          } 
 
// М И Н У Т Ы  - секунды в нуль
  if (digitalRead(buttonPin_mn) == HIGH) { 
// светодиод оставил для индикации работы устройства
    digitalWrite(ledPin, HIGH); 
    goto set_mn;
                               }
     else {
    digitalWrite(ledPin, LOW); 
          } 

// МИНУТА СЕКУНДА В НОЛЬ
  if (digitalRead(buttonPin_nu) == HIGH) { 
// светодиод оставил для индикации работы устройства
    digitalWrite(ledPin, HIGH); 
    goto set_nu;
                               }
     else {
    digitalWrite(ledPin, LOW); 
          }   

// ДЕНЬ  
  if (digitalRead(buttonPin_dn) == HIGH) { 
// светодиод оставил для индикации работы устройства
    digitalWrite(ledPin, HIGH); 
    goto set_dn;
                               }
     else {
    digitalWrite(ledPin, LOW); 
          } 
  
// М Е С Я Ц 
  if (digitalRead(buttonPin_ms) == HIGH) { 
// светодиод оставил для индикации работы устройства
    digitalWrite(ledPin, HIGH); 
    goto set_ms;
                               }
     else {
    digitalWrite(ledPin, LOW); 
          } 

// Г О Д
  if (digitalRead(buttonPin_gd) == HIGH) { 
// светодиод оставил для индикации работы устройства
    digitalWrite(ledPin, HIGH); 
    goto set_gd;
                               }
     else {
    digitalWrite(ledPin, LOW); 
          } 

//--------------------------
    goto sen_d;

//----------ЧАСЫ------------------------------------
set_sh:
  t = rtc.getTime();
  sh=t.hour;
  mn=t.min;
  sc=t.sec;
  sh=sh+1;
  if (sh<=23)
  {}
  else{
    sh=0;
      }
rtc.setTime(sh,mn,sc);     // Set the time to 12:00:00 (24hr format)
goto sen_d;

//-------------МИНУТЫ-----------------
set_mn:
  t = rtc.getTime();
  sh=t.hour;
  mn=t.min;
  sc=t.sec;
  mn=mn+1;
  if (mn<=59)
  {}
  else{
    mn=0;
      }
rtc.setTime(sh,mn,sc);     // Set the time to 12:00:00 (24hr format)
goto sen_d;

//-------------МИНУТА СЕКУНДА В НОЛЬ-----------------
set_nu:
  t = rtc.getTime();
  sh=t.hour;
  mn=0;
  sc=0;
rtc.setTime(sh,mn,sc);     // Set the time to 12:00:00 (24hr format)
goto sen_d;


//-------------Д Н И-----------------
set_dn:
  t = rtc.getTime();
  dn=t.date;
  ms=t.mon;
  gd=t.year;
  dn=dn+1;
  if (dn<=31)
  {}
  else{
    dn=1;
      }
rtc.setDate(dn, ms, gd);     // Set the time to 12:00:00 (24hr format)
goto sen_d;

//-------------М Е С Я Ц Ы-----------------
set_ms:
  t = rtc.getTime();
  dn=t.date;
  ms=t.mon;
  gd=t.year;
  ms=ms+1;
  if (ms<=12)
  {}
  else{
    ms=1;
      }
rtc.setDate(dn, ms, gd);     // Set the time to 12:00:00 (24hr format)
goto sen_d;

//-------------Г О Д Ы-----------------
set_gd:
  t = rtc.getTime();
  dn=t.date;
  ms=t.mon;
  gd=t.year;
  gd=gd+1;
  if (gd<=2033)
  {}
  else{
    gd=2013;
      }
rtc.setDate(dn, ms, gd);     // Set the time to 12:00:00 (24hr format)
goto sen_d;


//------------  И Н Д И К А Ц И Я    Р Е З У Л Ь Т А Т О В  -----------------------------------------------------
sen_d: 
  int  temperature = 0;
  long pressure = 0;
  int temp=0;
  float pres=0.0;
/*
  bmp085_read_temperature_and_pressure(&temperature,&pressure);
  temp=temperature;
  temp=temp/10;
  pres=pressure;
  pres=pres*0.0075;
  pressure=pressure*0.0075;
*/
// светодиод оставил для индикации работы устройства
  digitalWrite(ledPin, HIGH);
  lcd.setCursor(0, 0);
  lcd.print(rtc.getTimeStr(FORMAT_SHORT));
  lcd.setCursor(8, 0);
  lcd.print(rtc.getDateStr(FORMAT_SHORT));
// Индикация температуры от BMP085
//  lcd.setCursor(0, 1);
//  lcd.print("tt");

// Температуру надо взять от DHT-11
//  lcd.print(temp); 
//  lcd.print("`C");

// В Л А Ж Н О С Т Ь
     // метод update заставляет сенсор выдать текущие измерения
        sensor.update();     
        switch (sensor.getLastError())
        {
            case DHT_ERROR_OK:
                char msg[128];
                // данные последнего измерения можно считать соответствующими
                // методами
//               sprintf(msg, "Temperature = %dC, Humidity = %d%%", 
//               sensor.getTemperatureInt(), sensor.getHumidityInt()); 
//               sprintf(msg, "%d`C  %d%%", 
//               sensor.getTemperatureInt(), sensor.getHumidityInt());
//               sprintf(msg, "%d%%", sensor.getHumidityInt());

// Индикация температуры и влажности от DHT-11


//Serial.println(msg);
sprintf(msg, "%d`C  %d%%",sensor.getTemperatureInt(), sensor.getHumidityInt());
// не смог подобрать кода градуса для LCD
// sprintf(msg, "%d°C  %d%%",sensor.getTemperatureInt(), sensor.getHumidityInt());
//sprintf(msg, "%d%%", sensor.getHumidityInt());
 lcd.setCursor(0, 1);
 lcd.print(msg);

// Индикация  влажности                 
//     lcd.setCursor(6, 1);
//     lcd.print(msg);

                break;
            case DHT_ERROR_START_FAILED_1:
                break;
            case DHT_ERROR_START_FAILED_2:
                break;
            case DHT_ERROR_READ_TIMEOUT:
                break;
            case DHT_ERROR_CHECKSUM_FAILURE:
                break;
        }
  lcd.setCursor(11, 1);
// Индикация давления от BMP085  
  lcd.print("ppp");   
//  lcd.print(pressure,DEC); 
  lcd.print("mm");   

// светодиод оставил для индикации работы устройства
  digitalWrite(ledPin, LOW);
  
  // Т А К Т О В А Я    Ч А С Т О Т А  У С Т Р О Й С Т В А 
  // Значение 1000 - для реальной схемы
  // для симуляции в PROTEUS подбирать
  
  delay (800);

}

/*
//------ ОБРАБОТКА РЕЗУЛЬТАТОВ ОТ BMP085 -----------------------------------------------------
void bmp085_read_temperature_and_pressure(int* temperature, long* pressure) {
   long ut = bmp085_read_ut();
   long up = bmp085_read_up();
   long x1, x2, x3, b3, b5, b6, p;
   unsigned long b4, b7;

   //расчет температуры 
   x1 = ((long) ut - ac6) * ac5 >> 15;
   x2 = ((long) mc << 11) / (x1 + md);
   b5 = x1 + x2;
   *temperature = (b5 + 8) >> 4;
     
   //расчет давления
   b6 = b5 - 4000;
   x1 = (b2 * (b6 * b6 >> 12)) >> 11;
   x2 = ac2 * b6 >> 11;
   x3 = x1 + x2;
   
   if (oversampling_setting == 3) b3 = ((int32_t) ac1 * 4 + x3 + 2) << 1;
   if (oversampling_setting == 2) b3 = ((int32_t) ac1 * 4 + x3 + 2);
   if (oversampling_setting == 1) b3 = ((int32_t) ac1 * 4 + x3 + 2) >> 1;
   if (oversampling_setting == 0) b3 = ((int32_t) ac1 * 4 + x3 + 2) >> 2;

   x1 = ac3 * b6 >> 13;
   x2 = (b1 * (b6 * b6 >> 12)) >> 16;
   x3 = ((x1 + x2) + 2) >> 2;
   b4 = (ac4 * (uint32_t) (x3 + 32768)) >> 15;
   b7 = ((uint32_t) up - b3) * (50000 >> oversampling_setting);
   p = b7 < 0x80000000 ? (b7 * 2) / b4 : (b7 / b4) * 2;

   x1 = (p >> 8) * (p >> 8);
   x1 = (x1 * 3038) >> 16;
   x2 = (-7357 * p) >> 16;
   *pressure = p + ((x1 + x2 + 3791) >> 4);
}


unsigned int bmp085_read_ut() {
  write_register(0xf4,0x2e);
  delay(5); //дольше чем 4.5 мс 
  return read_int_register(0xf6);
}

void  bmp085_get_cal_data() {
  ac1 = read_int_register(0xAA);
  ac2 = read_int_register(0xAC);
  ac3 = read_int_register(0xAE);
  ac4 = read_int_register(0xB0);
  ac5 = read_int_register(0xB2);
  ac6 = read_int_register(0xB4);
  b1 = read_int_register(0xB6);
  b2 = read_int_register(0xB8);
  mb = read_int_register(0xBA);
  mc = read_int_register(0xBC);
  md = read_int_register(0xBE);
}


long bmp085_read_up() {
  write_register(0xf4,0x34+(oversampling_setting<<6));
  delay(pressure_waittime[oversampling_setting]);
  
  unsigned char msb, lsb, xlsb;
  Wire.beginTransmission(I2C_ADDRESS);
  Wire.write(0xf6);  // register to read
  Wire.endTransmission();

  Wire.requestFrom(I2C_ADDRESS, 3); // read a byte
  while(!Wire.available()) {
    // ожидание 
  }
  msb = Wire.read();
  while(!Wire.available()) {
    // ожидание
  }
  lsb |= Wire.read();
  while(!Wire.available()) {
    // ожидание
  }
  xlsb |= Wire.read();
  return (((long)msb<<16) | ((long)lsb<<8) | ((long)xlsb)) >>(8-oversampling_setting);
}

void write_register(unsigned char r, unsigned char v)
{
  Wire.beginTransmission(I2C_ADDRESS);
  Wire.write(r);
  Wire.write(v);
  Wire.endTransmission();
}

char read_register(unsigned char r)
{
  unsigned char v;
  Wire.beginTransmission(I2C_ADDRESS);
  Wire.write(r);  // register to read
  Wire.endTransmission();

  Wire.requestFrom(I2C_ADDRESS, 1); // read a byte
  while(!Wire.available()) {
    // ожидание
  }
  v = Wire.read();
  return v;
}

int read_int_register(unsigned char r)
{
  unsigned char msb, lsb;
  Wire.beginTransmission(I2C_ADDRESS);
  Wire.write(r);  // register to read
  Wire.endTransmission();

  Wire.requestFrom(I2C_ADDRESS, 2); // read a byte
  while(!Wire.available()) {
    // ожидание
  }
  msb = Wire.read();
  while(!Wire.available()) {
    // ожидание
  }
  lsb = Wire.read();
  return (((int)msb<<8) | ((int)lsb));
}
*/
//----------------------------------------------------------------------------------------------

 

RN6LJK
Offline
Зарегистрирован: 24.03.2013

Пока такие результаты.

Топологией планирую заняться.

Кому интересно пишите пообщаемся.

R2PM
Offline
Зарегистрирован: 28.12.2015

С новым годом!!!!

Здоровья и достатка!!!

Попытался залить скетч - не получается

Не проходит крмпиляция фатальная ошибка: DS1307hю нет такого файла или каталога . Применён nano .

Я полный  "чайник" в этом. Подскажите.

Спасибо Виктор R2PM Tula

 

 

lex2k
Offline
Зарегистрирован: 17.12.2015

R2PM пишет:

Попытался залить скетч - не получается

Не проходит крмпиляция фатальная ошибка: DS1307hю нет такого файла или каталога . Применён nano .

Я полный  "чайник" в этом. Подскажите.

Спасибо Виктор R2PM Tula

нужно найти библиотеку в инете DS1307.h и поместить ее сюда <бква диска>:\arduino\libraries

R2PM
Offline
Зарегистрирован: 28.12.2015

lex2k пишет:

R2PM пишет:

Попытался залить скетч - не получается

Не проходит крмпиляция фатальная ошибка: DS1307hю нет такого файла или каталога . Применён nano .

Я полный  "чайник" в этом. Подскажите.

Спасибо Виктор R2PM Tula

нужно найти библиотеку в инете DS1307.h и поместить ее сюда <бква диска>:\arduino\libraries

Спасибо большое за оперативный ответ, библиотека есть не сочтите за труд( я чайник в этом деле) куда вставить - незнаю.

С уважением Виктор R2PM

lex2k
Offline
Зарегистрирован: 17.12.2015

сюда <бква диска>:\arduino\libraries

R2PM
Offline
Зарегистрирован: 28.12.2015

Спасибо! всё компельнулось, но "блин" не стартонуло. Возможно ли то что датчики влажности и давления временно отсутствуют ( жду от небесной) - причина, думал, что дату и  время покажет.

С уважением Виктор

lex2k
Offline
Зарегистрирован: 17.12.2015

датчик какой