Доброго времени суток! Меня очень заинтересовал этот ваш проект, поскольку я сейчас делаю устройство на семисегментниках и кнопки, как у вас, подключены к пинам наны.:
Если не трудно, не моглы бы вы показать, как записываете на индикатор, у меня код немного громоздкий, а когда это еще и с меню, то многовато получается.
Если не трудно, не моглы бы вы показать, как записываете на индикатор, у меня код немного громоздкий, а когда это еще и с меню, то многовато получается.
Если не трудно, не моглы бы вы показать, как записываете на индикатор, у меня код немного громоздкий, а когда это еще и с меню, то многовато получается.
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, спасибо за ответ, но я увидел у Вас семисегментные индикаторы, я в проекте тоже использую семисегментник через max7219, вот я и хотел попросить Вас показать, как Вы управляете семисегментником, у меня код громоздкий:
Вот я и хотел подсмотреть, как Вы управляете этой штукой
Я так понимаю, что вопрос не ко мне а к Loginkr? Или я совсем запутался?
Спасибо Вам vvg10 за скорый ответ. И еще вопросик если не затруднит . какой длинны у Вас кабель до внешего датчика влажности. А еще неболшое предложение , сделать регулировку яркости подсветки LCD в зависимости от освещенности или от времени суток.
Спасибо Вам vvg10 за скорый ответ. И еще вопросик если не затруднит . какой длинны у Вас кабель до внешего датчика влажности. А еще неболшое предложение , сделать регулировку яркости подсветки LCD в зависимости от освещенности или от времени суток.
Сейчас кабель метра полтора, при тестировании был метров десять - разницы нет. Регулировку яркости проще сделать на фоторезисторе аппаратно, программу уже лень дописывать.... :-)
Доброго времени суток всем. Увидел этот проэкт и сразу решил собрать. Очень уж интересная штучка. Есть у меня какието стандартные библиотечки НО с ними при компиляции пишет ошибочки. Поделитесь плиз на адресок: fm-nafing@mail .ru
Спасибо огромнейшее за библиотечки. Теперь всё компильнулось. НО. Может подскажете что делаю не так? Экран ничего не показывает. Перепроверил все подключения. Всё норм. Заливал любые другие скетчи - всё кажет. только не метео.
.. Может подскажете что делаю не так? Экран ничего не показывает.
Не обижайтесь дружище за мой ответ, но мне весьма сложно ответить на вопрос, что там у Вас не так, исходя только из одной фразы. В своей жизни я опираюсь на несколько аксиом. В даном случае применимы две, а именно:
1. Электроника это наука о контактах;
2. Любая программа имеет как минимум пять ошибок, причем после исправление их количество не уменьшается.
Внимательно и не торопясь все проверьте. Наверняка найдете ошибку и может быть не одну. Проект уже проверен несколькими товарищами и все работает.
Спасибо Вам vvg10 за скорый ответ. И еще вопросик если не затруднит . какой длинны у Вас кабель до внешего датчика влажности. А еще неболшое предложение , сделать регулировку яркости подсветки LCD в зависимости от освещенности или от времени суток.
Спасибо Вам vvg10 за скорый ответ. И еще вопросик если не затруднит . какой длинны у Вас кабель до внешего датчика влажности. А еще неболшое предложение , сделать регулировку яркости подсветки LCD в зависимости от освещенности или от времени суток.
Весной этого года ко мне обратились двое дипломников с просьбой о помощи в реализации данного проекта. Не скрою мне было приятно. Помимо общих вопросов был один на который я не смог ответить, а именно есть ли реализация проектра в среде Proteus. Я бы и не вернулся к этому вопросу если бы мне не пришла в голову очередная идея на Arduino, но железа не оказалось под рукой, и я решил попробовать Proteus для моделирования. С чего начать? Ответ естественно на поверхности, с метеостанции, так как она отлажена и реализована не только мною. Во избежании далнейших вопросов о деталях проекта я решил пойти по пути реализации отдельных ветвей проекта и в конечном итоге объединения накопленных решений, что в общем то логично. Итак представляю результаты поэтапного моделирования (только результаты дабы не перегружать лишней детальной игформацией). Единственно, что мне пока не удалось так это BMP085. Я не смог найти модель этого элемента для Proteus. У кого есть поделитель плз. Если смогу, то заменю другим элементом, но пока без BMP085.
Итак представляю поэтапное моделирование с итогом в виде схемы на Proteus + скетч. Кому не интересно проходите мимо, ну у кого будут вопросы пишите.
Публикую в виде нескольких последовательных постов под заголовками "Комнатнвя метеостанция с часами" этап номер. Ну это понятно.
/*
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);
}
#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);
}
// 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);
}
// 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);
}
часть скетча для обработки 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));
}
*/
//----------------------------------------------------------------------------------------------
Спасибо! всё компельнулось, но "блин" не стартонуло. Возможно ли то что датчики влажности и давления временно отсутствуют ( жду от небесной) - причина, думал, что дату и время покажет.
:-))
А вот моя метео станция + часы
Доброго времени суток! Меня очень заинтересовал этот ваш проект, поскольку я сейчас делаю устройство на семисегментниках и кнопки, как у вас, подключены к пинам наны.:
http://arduino.ru/forum/programmirovanie/pechka-dlya-sauny-s-upravleniem...
Если не трудно, не моглы бы вы показать, как записываете на индикатор, у меня код немного громоздкий, а когда это еще и с меню, то многовато получается.
Спасибо.
Если не трудно, не моглы бы вы показать, как записываете на индикатор, у меня код немного громоздкий, а когда это еще и с меню, то многовато получается.
http://zelectro.cc/LCD1602_and_LM35
http://robocraft.ru/blog/arduino/503.html
http://geektimes.ru/post/254830/
В данном проекте управляется 8-ю битами:
Отправьте мне тож библиотеки, пожалуйста) nicitich@mail.ru
Отправьте мне тож библиотеки, пожалуйста) nicitich@mail.ru
Ловите
Если не трудно, не моглы бы вы показать, как записываете на индикатор, у меня код немного громоздкий, а когда это еще и с меню, то многовато получается.
http://zelectro.cc/LCD1602_and_LM35
http://robocraft.ru/blog/arduino/503.html
http://geektimes.ru/post/254830/
В данном проекте управляется 8-ю битами:
RN6LJK, спасибо за ответ, но я увидел у Вас семисегментные индикаторы, я в проекте тоже использую семисегментник через max7219, вот я и хотел попросить Вас показать, как Вы управляете семисегментником, у меня код громоздкий:
Вот я и хотел подсмотреть, как Вы управляете этой штукой.
Спасибо
RN6LJK, спасибо за ответ, но я увидел у Вас семисегментные индикаторы, я в проекте тоже использую семисегментник через max7219, вот я и хотел попросить Вас показать, как Вы управляете семисегментником, у меня код громоздкий:
Вот я и хотел подсмотреть, как Вы управляете этой штукой
Я так понимаю, что вопрос не ко мне а к Loginkr? Или я совсем запутался?
В моем проекте использован дисплей LCD 16x2.
Добрый день, уменя вопрос к vvg10 поместится ли программа в ардуинку на меге168.
Добрый день, уменя вопрос к vvg10 поместится ли программа в ардуинку на меге168.
Судя по тому, что программа занимает 14к(43%) флэша и 760 байт(37%)дин. памяти в меге328(32к и 2к), то в 168(16к и 1к ) должно влезть.
Спасибо Вам vvg10 за скорый ответ. И еще вопросик если не затруднит . какой длинны у Вас кабель до внешего датчика влажности. А еще неболшое предложение , сделать регулировку яркости подсветки LCD в зависимости от освещенности или от времени суток.
И мне пожалуйста отправьте библиотеки! ) nik.bondar(a)mail.ru
Спасибо Вам vvg10 за скорый ответ. И еще вопросик если не затруднит . какой длинны у Вас кабель до внешего датчика влажности. А еще неболшое предложение , сделать регулировку яркости подсветки LCD в зависимости от освещенности или от времени суток.
Сейчас кабель метра полтора, при тестировании был метров десять - разницы нет. Регулировку яркости проще сделать на фоторезисторе аппаратно, программу уже лень дописывать.... :-)
Здравствуйте. А можно и мне отправить библиотеки. borisnelyubov@yandex.ru
Понравился ваш проект. Хочу повторить. Давно хотел что нибудь такое. Все детали есть. Пришлите пожалуйста если можете библиотеки.
astrons2009@yandex.ru
Прошу прощения за задержку ответа.
Всем кто написал в форум и на мыло ответил.
Кто-то просил схему в Fritzing, держите кому надо:
https://yadi.sk/d/gv6m84gGjb6u4
Немного изменена схема питания, ардуино запитывается отдельно от 12в., остальная часть схемы отдельно от 5в. стабилизатора.
LCD2004
Тоже самое на большом дисплее размером 146 на 63 мм.
Ну символ градуса уж можно было бы сделать, и вторую температуру и влажность, если уж использовать большой дисплей...
Это повторялось точь-в-точь по схеме. Датчик у меня один, второго нет.
Здравствуйте. Очень понравился Ваш проект. Хочу повторить. Пришлите мне пожалуйста Ваши библиотеки на мою почту
sbor524@yandex.ru
Пришлите мне пожалуйста Ваши библиотеки на почту
cyberwall@mail.ru
Библиотеки и файлы можно скачать тут http://iarduino.ru/file/
Доброго времени суток всем. Увидел этот проэкт и сразу решил собрать. Очень уж интересная штучка. Есть у меня какието стандартные библиотечки НО с ними при компиляции пишет ошибочки. Поделитесь плиз на адресок: fm-nafing@mail .ru
Поделитесь плиз на адресок: fm-nafing@mail .ru
Удачи в повторении, хотя элементная база уже есть видимо поновей и этот проект устарел.
Библиотеки отправил.
Спасибо огромнейшее за библиотечки. Теперь всё компильнулось. НО. Может подскажете что делаю не так? Экран ничего не показывает. Перепроверил все подключения. Всё норм. Заливал любые другие скетчи - всё кажет. только не метео.
.. Может подскажете что делаю не так? Экран ничего не показывает.
Не обижайтесь дружище за мой ответ, но мне весьма сложно ответить на вопрос, что там у Вас не так, исходя только из одной фразы. В своей жизни я опираюсь на несколько аксиом. В даном случае применимы две, а именно:
1. Электроника это наука о контактах;
2. Любая программа имеет как минимум пять ошибок, причем после исправление их количество не уменьшается.
Внимательно и не торопясь все проверьте. Наверняка найдете ошибку и может быть не одну. Проект уже проверен несколькими товарищами и все работает.
Спасибо за понимание.
Не могу отписаться от тем, подсажите плз, как это сделать?
Здравствуйте.Как поставить модуль DS1302
Пришлите пожалуйста библиотеки j-shishov@udmnet.ru
Здравствуйте. Думаю ответ есть здесь
http://arduino.ru/forum/apparatnye-voprosy/kak-prilepit-chasy-ds1302
Отослал
Не могу отписаться от тем, подсажите плз, как это сделать?
Отключить уведомления о комментариях к
Вашей теме можно залогинившись на
http://arduino.ru в разделе Мой профиль.
Не могу отписаться от тем, подсажите плз, как это сделать?
Отключить уведомления о комментариях к
Вашей теме можно залогинившись на
http://arduino.ru в разделе Мой профиль.
Во вкладке Следить есть у меня 2 темы,но что нажать? Там нет никаких кнопок.
dennisdennis откройте свое любое сообщение в данной теме и посмотрите внизу и галочку снимите
"Уведомлять меня о новых коментариях".
Поклон Вам низкий за работу.
Теперь понятно. Однако как то витиевато.
Спасибо Вам vvg10 за скорый ответ. И еще вопросик если не затруднит . какой длинны у Вас кабель до внешего датчика влажности. А еще неболшое предложение , сделать регулировку яркости подсветки LCD в зависимости от освещенности или от времени суток.
Спасибо Вам vvg10 за скорый ответ. И еще вопросик если не затруднит . какой длинны у Вас кабель до внешего датчика влажности. А еще неболшое предложение , сделать регулировку яркости подсветки LCD в зависимости от освещенности или от времени суток.
См. пост №212
Весной этого года ко мне обратились двое дипломников с просьбой о помощи в реализации данного проекта. Не скрою мне было приятно. Помимо общих вопросов был один на который я не смог ответить, а именно есть ли реализация проектра в среде Proteus. Я бы и не вернулся к этому вопросу если бы мне не пришла в голову очередная идея на Arduino, но железа не оказалось под рукой, и я решил попробовать Proteus для моделирования. С чего начать? Ответ естественно на поверхности, с метеостанции, так как она отлажена и реализована не только мною. Во избежании далнейших вопросов о деталях проекта я решил пойти по пути реализации отдельных ветвей проекта и в конечном итоге объединения накопленных решений, что в общем то логично. Итак представляю результаты поэтапного моделирования (только результаты дабы не перегружать лишней детальной игформацией). Единственно, что мне пока не удалось так это BMP085. Я не смог найти модель этого элемента для Proteus. У кого есть поделитель плз. Если смогу, то заменю другим элементом, но пока без BMP085.
Итак представляю поэтапное моделирование с итогом в виде схемы на Proteus + скетч. Кому не интересно проходите мимо, ну у кого будут вопросы пишите.
Публикую в виде нескольких последовательных постов под заголовками "Комнатнвя метеостанция с часами" этап номер. Ну это понятно.
Комнатна метеостанция этап 2
Комнатная метеостанция - этап 3
Комнатная метеостанция - этап 4
Комнатная метеостанция - предварительный итог
часть скетча для обработки BMP умышленно не удалял, может пригодиться в дальнейшем
Пока такие результаты.
Топологией планирую заняться.
Кому интересно пишите пообщаемся.
С новым годом!!!!
Здоровья и достатка!!!
Попытался залить скетч - не получается
Не проходит крмпиляция фатальная ошибка: DS1307hю нет такого файла или каталога . Применён nano .
Я полный "чайник" в этом. Подскажите.
Спасибо Виктор R2PM Tula
Попытался залить скетч - не получается
Не проходит крмпиляция фатальная ошибка: DS1307hю нет такого файла или каталога . Применён nano .
Я полный "чайник" в этом. Подскажите.
Спасибо Виктор R2PM Tula
нужно найти библиотеку в инете DS1307.h и поместить ее сюда <бква диска>:\arduino\libraries
Попытался залить скетч - не получается
Не проходит крмпиляция фатальная ошибка: DS1307hю нет такого файла или каталога . Применён nano .
Я полный "чайник" в этом. Подскажите.
Спасибо Виктор R2PM Tula
нужно найти библиотеку в инете DS1307.h и поместить ее сюда <бква диска>:\arduino\libraries
Спасибо большое за оперативный ответ, библиотека есть не сочтите за труд( я чайник в этом деле) куда вставить - незнаю.
С уважением Виктор R2PM
сюда <бква диска>:\arduino\libraries
Спасибо! всё компельнулось, но "блин" не стартонуло. Возможно ли то что датчики влажности и давления временно отсутствуют ( жду от небесной) - причина, думал, что дату и время покажет.
С уважением Виктор
датчик какой