go to bottom
Постоянный посетитель
Аквафорум рыбкаАквафорум рыбкаАквафорум рыбка
Аватар пользователя

693 90
Выкса
2 года

ARDUINO для автоматизации аквариума (страница 15)

Создал отдельную тему по вопросам использования простых и не дорогих плат ARDUINO для целей автоматизации аквариума.
Идея такая - довести это устройство до полнофункционального контроллера для аквариума, в итоге - с WEB сервером для управления по сети в т.ч. Интернет, и GSM модулем с отправкой SMS.
Начало обсуждения в теме про дозатор :
дозатор

Информация будет, в основном, в виде конкретных примеров.

Пример 1. Использоание плат Arduino UNO и Arduino NANO для управления по времени суток устройствами в 2-х каналах посредством релейного модуля.
Предполагается использование для создания 2-х канального дозатора, но и для включения света, например подойдет, и для многих других целей также.

Используется модуль часов реального времени, для точного планирования по времени суток, и релейный модуль. В данном примере используется 4-канальный, но 2 канала не используются...

Схема коммутации в случае использования платы UNO R3:

для форума


Схема коммутации в случае использования платы NANO:
для форума


Программа для среды программирования Arduino:
//***************************************************
// Скетч для управления релейным модулем, в котором *
// использовано два канала. Используется также RTC *
// Релейный модуль - с инверсной логикой на входе *
// Автор: ZORS *
// Версия 1. Дата 21.12.2013 02:40 *
//***************************************************
//----------ИМПОРТ БИБЛИОТЕК-------------------------
#include //Подключаем библиотеку для использования I2C интерфейса с модулем RTC
#include //Подключаем библиотеку для использования модуля часов реального времени RTC

RTC_DS1307 RTC; //Создаем переменную класса - для использования RTC

//----------Объявляем разные переменные------------
const int RelayChn1 = 6; //Используем цифровой ПОРТ 6 для ПЕРВОГО канала релейного модуля
const int RelayChn2 = 7; //Используем цифровой ПОРТ 7 для ВТОРОГО канала релейного модуля
//----------Настройки времени и продолжительности включения реле

//----------ПЕРВЫЙ канал----------------------------
const long StartRelCn_1 = 25200; //Время срабатывания в ПЕРВОМ канале релейного модуля (в секундах от начала суток)
//в данном случае 25200 - это 7 часов 00 минут = ( 60секунд *60 минут *7 = 25200)
const long DurationCh_1 = 10; //ДЛИТЕЛЬНОСТЬ срабатывания реле в ПЕРВОМ канале (в секундах)

//----------ВТОРОЙ канал----------------------------
const long StartRelCn_2 = 37800; //Время срабатывания во ВТОРОМ канале релейного модуля (в секундах от начала суток)
//В данном случае 10 часов 30 минут = (60 секунд * 60 минут * 10 часов + 60сек*30мин = 37800)
const long DurationCh_2 = 15; //ДЛИТЕЛЬНОСТЬ срабатывания реле во ВТОРОМ канале (в секундах)

//----------Модуль инициализации setup() - выполняется один раз при инициализации платы при подаче напряжение (и аналогичных событиях)
void setup(){

pinMode(RelayChn1,OUTPUT); //Инициализируем порт для ПЕРВОГО канала как ВЫХОД
pinMode(RelayChn2,OUTPUT); //Инициализируем порт для ВТОРОГО канала как ВЫХОД

digitalWrite(RelayChn1,HIGH); //Устанавливаем на входах релейного модуля ВЫСОКИЙ уровень
digitalWrite(RelayChn2,HIGH); //Т.к. используемый релейный модуль с опторазвязкой - управляется инверсной логикой



Wire.begin(); //Инициируем I2C интерфейс
RTC.begin(); //Инициирум RTC модуль

// RTC.adjust(DateTime(__DATE__, __TIME__)); //С этой строки необходимо убрать комментарии один раз в начале,
//для того, чтобы загрузить в RTC дату и время на момент компиляции программы
//Иногда необходимо заливать СКЕТЧ на плату со снятым комментарием - для поправки
//времени в RTC, НО оставлять такой СКЕТЧ в работе НЕЛЬЗЯ !!!!!!!!!!!!!

} // КОНЕЦ ИНИЦИАЛИЗАЦИИ

//--------------------------------------------------
void loop() // ПРОГРАММЫй безусловный ЦИКЛ
{
DateTime myTime = RTC.now(); //Читаем данные времени из RTC при каждом выполнении цикла

//----------Раздел обработки реле по времени ----
long utime = myTime.unixtime(); //сохраняем в переменную - время в формате UNIX
utime %= 86400; //Сохраняем в этой же переменной остаток деления на кол-во секнд в сутках,
//Это дает количество секунд с начала текущих суток

//------------КАНАЛ 1------------------------------
if ((utime >= StartRelCn_1) &&
(utime
//Если секунд с начала суток больше, чем задано для включения
//Но, одновременно и меньше, чем задано для включения + длительность
{
digitalWrite(RelayChn1,LOW); //Устанавливаем на ПЕРВОМ входе релейного модуля НИЗКИЙ уровень - реле срабатывает
}
else //во всех остальных случаях
{
digitalWrite(RelayChn1,HIGH); //Устанавливаем на ПЕРВОМ входе релейного модуля ВЫСОКИЙ уровень - реле выключается
}

//------------КАНАЛ 2 - все аналогично -----------
if ((utime >= StartRelCn_2) &&
(utime
{
digitalWrite(RelayChn2,LOW); //Устанавливаем на ВТОРОМ входе релейного модуля НИЗКИЙ уровень - реле срабатывает
}
else
{
digitalWrite(RelayChn2,HIGH); //Устанавливаем на ВТОРОМ входе релейного модуля ВЫСОКИЙ уровень - реле выключается
}

}//------------Конец ЦИКЛА-----------------------------


(Редактор текста на данном сайте - к сожалению, "ломает" красивое форматирование.

PS: Выложил этот скетч на файлообменник :
http://my-files.ru/h...

В данной программе реализован, довольно-таки простой подход, а простота - основа надежности.

Каждое из 2-х реле срабатывают один раз в сутки в указанное время, причем время указывается в количестве секунд от начала суток, и удерживается указанное количество времени в секундах.
Такой способ задания времени - несколько сложен для понимания, но за это - не нагружает программу и процессор лишним функционалом, который понадобится всего один раз.
Для определения времени наступления события начала включения и выключения реле - используется время в формате UNIX.

Такой подход хорош тем, что даже если включение или перезагрузка платы произойдет в промежутке времени включения, то реле включится в оставшееся время.
В случае с дозированием, это не много что дает, но в случае, если по аналогии будет сделано управление светом, то при подаче напряжения на плату, например, после пропадания напряжения питания, или после посадки напряжения, или др. аналогичных событий, включение и выключение реле произойдет корректно.

У комплектных минутных и секундных таймеров "с розеткой" - об этом можно только мечтать....не реализован такой функционал, и еще у них есть один минус. Реле в таких таймерах - не удерживаемое, а переключаемое, со всеми вытекающими последствиями....

Для программирования нескольких включений каждого реле в течение суток - естественно, потребуется несколько другой подход....спрашивайте когда кому-то потребуется, пока не хочу все усложнять...
В принципе, можно добавить константных переменных, содержащих время и длительность срабатывания, и соответственно добавить проверку на условия.
Если количество необходимых срабатываний каждого реле в сутках больше чем 2 - лучше оформить проверку условий в отдельной функции. Как, говорил человек, учивший меня программированию - "все, что ты делаешь в программе больше двух раз - оформляй отдельной процедурой, или функцией".

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

Весь этот пример тестировался на "живом" железе :
для форума

Для наглядности отладки был еще подключен LCD дисплей 16 сим в 2 строках.
Схема итоговая была такая:
для форума

Обратите внимание, что при использовании I2C последовательного интерфейса - соединения значительно упрощаются. И LCD дисплей подключен транзитом через модуль RTC (часов реального времени). Никаких паяных соединений нет вообще....все скоммутировано - проводами с разъемами.
Скетч - естественно, несколько другой использовался с добавлением строк инициализации и использования LCD 16x2.

Плата использовалась типа такой:
http://www.ebay.com/...
цена примерно 350 руб.

Релейный модуль
http://www.ebay.com/...
цена примерно 150 руб.

Модуль часов реального времени:
http://www.ebay.com/...
Цена примерно 55 руб.

Для сокращения бюджета можно использовать плату проще:
http://www.ebay.com/...
Цена примерно 200 руб.

Если есть потребность подключить ЖК дисплейчик, то лучше брать ЖК дисплей (LCD) c I2C интерфейсом - это сильно упрощает коммутацию, и сокращает количество использованных портов на микроконтроллере.
Например такой можно использовать :
http://www.ebay.com/...
цена около 180 руб.

На ЖК можно выводить статусную информацию, информацию об ошибках, диагностическую информацию. Все это, конечно, можно и в последовательный порт компьютера выводить, но это не всегда удобно (скорее наоборот), поэтому я всегда использую какой-нибудь девайс для вывода информации.

Для использования I2C интерфейса - необходима библиотека Wire. Она есть в стандартном дистрибутиве среды программирования Arduino.
Для использования модуля RTC на микросхеме DS1307 нужна библиотека RTClib.
Если ее не будет в стандартном дистрибутиве, то ее можно взять в интернет. Например здесь :
http://arduino-info....

Необходимо, скачать, и разархивировать zip-файл в папку с понятным названием, например RTCLib. Затем эту папку поместить в папку, где среда Arduino хранит свои библиотеки. Если ставили среду программирования с настройками по умолчанию, то этой папкой будет :
C:Program FilesArduinolibraries
Сюда и помещайте папки с подключаемыми библиотеками. Если на этот момент, среда программирования была запущена - ее необходимо закрыть, и запустить заново. После этого библиотека будет доступна в меню Скетч/Импортировать библиотеку.

Микросхема RTC модуля DS1307, как правило использует адрес на шине I2C равный 0x68
поэтому, необходимо проверить в библиотечных файлах, библиотеки RTClib наличие строки типа этой:
#define DS1307_ADDRESS 0x68

Если будет использоваться LCD 16x2 с I2C интерфейсом, то - понадобиться библиотека LiquidCrystal_I2C. Можно скачать здесь :
http://dvrobot.ru/lc...
Как подключить к среде программирования Arduino - см. выше

ВАЖНО : при использовании I2C устройств - в скетче, библиотека Wire - должна быть объявлена первой, иначе - будут ошибки компиляции.

По этому примеру - все....

в следующем - присоединение термо-датчика DS18B20, и создание несложного терморегулятора.....


Изменено 24.12.13 автор Z0RS
2013-12-2121/12/2013 15:57:48
#1907148
Посетитель
Аквафорум рыбкаАквафорум рыбка
Аватар пользователя

352 43
Омск
5 года

bonlik

1. Вы цифры то подставляете?
2. У вас скетч компилируется и прошивается без ошибок?
3. Выложите скетч который вы заливаете, тогда можно будет глянуть что не так.
Я помню это был один из первых сделанных мной контроллеров, понравилась простота программы и именно она мне помогла с ардуино разобраться.
2016-11-0909/11/2016 05:22:44
#2300395
Малёк
Аквафорум рыбка
Аватар пользователя

11
Липецк
8 года

здравствуйте. цифры я подставляю. компилируется и заливается посмотрите подскажите
#include
#include
RTC_DS1307 RTC;
const int RelayChn1 = 6;
const int RelayChn2 = 7;
const long StartRelCn_1 = 32400;
const long DurationCh_1 = 36000;
const long StartRelCn_2 = 46800;
const long DurationCh_2 = 10800;
void setup(){
pinMode(RelayChn1,OUTPUT);
pinMode(RelayChn2,OUTPUT);
digitalWrite(RelayChn1,HIGH);
digitalWrite(RelayChn2,HIGH);
Wire.begin();
RTC.begin();
RTC.adjust(DateTime(__DATE__, __TIME__));
}
void loop()
{
DateTime myTime = RTC.now();
long utime = myTime.unixtime();
utime %= 86400;
if ((utime >= StartRelCn_1) &&
(utime {
digitalWrite(RelayChn1,LOW);
}
else
{
digitalWrite(RelayChn1,HIGH);
}
if ((utime >= StartRelCn_2) &&
(utime {
digitalWrite(RelayChn2,LOW);
}
else
{
digitalWrite(RelayChn2,HIGH);
}
}

2016-11-0909/11/2016 10:28:01
#2300439
Малёк
Аквафорум рыбка
Аватар пользователя

11
Липецк
8 года

Да ещё модуль часов ds3231 .

Изменено 9.11.16 автор bonlik

2016-11-0909/11/2016 10:40:17
#2300446
Новичок

Аватар пользователя

3
Russian Federation Belgorod
7 года

Доброго времени суток всем. (страница 15)

Большое спасибо автору за подробное описание своих проектов. Я собрал себе контроллер по 2 примеру с небольшими изменениями, все работает отлично. Теперь задумал подключить сервопривод для управления кормушкой, не могу добиться срабатывания в определенное время поворота на 180* и возврата обратно в 0. Помогите со скетчем пожалуйста.

2016-11-2121/11/2016 13:14:59
#2305397
Новичок

Аватар пользователя

1
Ukraine Kiev
7 года

Интересует скетч (страница 15)

Добрый день, а можно у вас попросить этот скетч, а то по ссылке его уже удалили.
Пытаюсь сделать такую штуку сам.

2016-11-3030/11/2016 18:17:26
#2309763
Новичок

Аватар пользователя

3
Russian Federation Belgorod
7 года

Buzya82

Ссылка вот тут ARDUINO для автоматизации аквариума

Изменено 5.12.16 автор Kornetus
2016-12-0505/12/2016 11:10:36
#2311499
Новичок

Аватар пользователя

3
Russian Federation Belgorod
7 года

Kornetus
Большое спасибо автору за подробное описание своих проектов. Я собрал себе контроллер по 2 примеру с небольшими изменениями, все работает отлично. Теперь задумал подключить сервопривод для управления кормушкой, не могу добиться срабатывания в определенное время поворота на 180* и возврата обратно в 0. Помогите со скетчем пожалуйста.

"Спасибо большое" всем кто "откликнулся". Дотумкал сам. Если кому надо:

#include //используем библиотеку для работы с сервоприводом
Servo servo; //объявляем переменную servo типа Servo
int angle1 = 0; //устанавливаем положение вала сервопривода

const long Startservo = .......; //Время срабатывания сервопривода
const long Durationservo = ......; //ДЛИТЕЛЬНОСТЬ срабатывания сервопривода

void setup
servo.attach(3); //привязываем сервопривод к порту 3

void loop
if ((utime >= Startservo) &&
(utime {
servo.write(180); //ставим вал сервопривода под угол 180*

}
else
{
servo.write(0); //ставим вал сервопривода под угол 0*

}
2016-12-0505/12/2016 12:00:17
#2311513
Новичок

Аватар пользователя

8 1
Russian Federation Moscow
2 года

Господа умельци, выкидывайте это барахло DS1307 и ставьте ds3231. Не пожалеете.

Изменено 20.1.17 автор кикстартер

2017-01-2020/01/2017 19:43:03
#2329076
Новичок

Аватар пользователя

9
Russian Federation Tomsk
7 года

Приветствую. Я совсем не программер, но коряво и нудно написать скетч для рассвета-заката на основе этого поста мне удалось. Только одно но: в данном посте скетч под модуль 1307, а у меня на руках только модуль времени 1302. Никак не могу заставить скетч работать с ним в формате unixtime. Может кто подсказать начальные параметры?


#include
#include
#include

DS1302 RTC (5, 6, 7); //Создаем переменную класса - для использования RTC

const int Led = (9, 10);

//----------Led----------------------------
const long StartLed = 28800;
const long y = 900;
//----------Модуль инициализации setup() - выполняется один раз при инициализации платы при подаче напряжение (и аналогичных событиях)
void setup() {

pinMode(Led, OUTPUT);
digitalWrite(Led, 0);



Wire.begin(); //Инициируем I2C интерфейс
rtc.write_protect(false);
rtc.halt(false);


}
//--------------------------------------------------
void loop() //
Time t = rtc.time();



long utime = myTime.unixtime();
utime %= 86400;

//------------Led------------------------------
if ((utime >= StartLed) &&
(utime {
digitalWrite(Led, 15);
}
Это кусок кода. С окончанием все в порядке. На модуле 1307 компиляция прошла нормально (но он придет только через месяц), а здесь не знаю как сделать.
Уже 3-й день сижу, весь инет перерыл, но не нашел скетчей, чтобы подружить 1302 с unix.


Изменено 23.1.17 автор Roywalk

2017-01-2323/01/2017 06:36:10
#2330245
Посетитель
Аквафорум рыбкаАквафорум рыбка
Аватар пользователя

413 62
Подольск
4 года

Roywalk

1. 1302 - это не I2С, потому нафиг не нужны #include и Wire.begin(); //Инициируем I2C интерфейс
2. Что у вас такое time.h я не знаю, но видимо тоже не нужно
3. Проблема я так понимаю здесь long utime = myTime.unixtime(); ?
Ну нет в DS1302.h преобразования даты в число секунд удобное для сравнений, но в чем проблема выдрать нужный код из либы для 1307?

Код перед loop:

#include

#define SECONDS_FROM_1970_TO_2000 946684800

const uint8_t daysInMonth [] PROGMEM = { 31,28,31,30,31,30,31,31,30,31,30,31 };

// number of days since 2000/01/01, valid for 2001..2099
static uint16_t date2days(uint16_t y, uint8_t m, uint8_t d) {
if (y >= 2000)
y -= 2000;
uint16_t days = d;
for (uint8_t i = 1; i days += pgm_read_byte(daysInMonth + i - 1);
if (m > 2 && y % 4 == 0)
++days;
return days + 365 * y + (y + 3) / 4 - 1;
}

static long time2long(uint16_t days, uint8_t h, uint8_t m, uint8_t s) {
return ((days * 24L + h) * 60 + m) * 60 + s;
}

uint32_t unixtime(uint16_t y, uint8_t m, uint8_t d, uint8_t h, uint8_t m, uint8_t s) {
uint32_t t;
uint16_t days = date2days(y, m, d);
t = time2long(days, h, m, s);
t += SECONDS_FROM_1970_TO_2000; // seconds from 1970 to 2000

return t;
}


Код в loop:

long utime = unixtime(t.yr, t.mon, t.date, t.hr, t.min, t.sec);

Изменено 23.1.17 автор dkozyrev
2017-01-2323/01/2017 13:16:36
#2330343
Новичок

Аватар пользователя

9
Russian Federation Tomsk
7 года

dkozyrev

Спасибо за быстрый ответ и готовый код. Просто то, что для вас кажется простым, для меня, никогда не занимавшимся программированием, лес дремучий (причем даже литературу усердно читал - не доходит).
В общем, убрал лишние библиотеки, скопировал Ваш код (в void setup и void loop соответственно, хотя первую часть пытался скопировать и до loop). Снова вылезают ошибки в скопированном коде.
Хрен с ним. Дождусь модуля 1307 и попробую на нем (там хоть компиляция проходит). Если и там не заработает, то напишу назад простой код рассвета-заката через delay (громадный, но хоть понятный и работает) и оставлю так. Просто свет часто моргает и рассвет-закат заново начинаются. Часы только для этого и нужны по сути...
2017-01-2323/01/2017 13:45:07
#2330355
Посетитель
Аквафорум рыбкаАквафорум рыбка
Аватар пользователя

413 62
Подольск
4 года

Roywalk

Не внутрь setup код надо было вставлять, а перед ним, например сразу за #include
2017-01-2323/01/2017 13:53:38
#2330357
Свой на Aqa.ru, Кандидат в Советники
Кандидат в советники аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорума

Аватар пользователя

2593 1105
Москва
4 года

Roywalk
Снова вылезают ошибки в скопированном коде.

Какие? Скопируйте их сюда.
2017-01-2323/01/2017 13:55:59
#2330359
Новичок

Аватар пользователя

9
Russian Federation Tomsk
7 года

Стоп. Сейчас добью и скину ошибки. сюда же.

В начале:

D:РабстолПрограмки + SOFTСхемыarduinoarduino-1.6.7arduino-builder -dump-prefs -logger=machine -hardware "D:РабстолПрограмки + SOFTСхемыarduinoarduino-1.6.7hardware" -tools "D:РабстолПрограмки + SOFTСхемыarduinoarduino-1.6.7tools-builder" -tools "D:РабстолПрограмки + SOFTСхемыarduinoarduino-1.6.7hardwaretoolsavr" -built-in-libraries "D:РабстолПрограмки + SOFTСхемыarduinoarduino-1.6.7libraries" -libraries "D:РабстолПрограмки + SOFTСхемыarduino______1__________libraries" -fqbn=arduino:avr:nano:cpu=atmega328 -ide-version=10607 -build-path "D:Tempbuild74a56b64153967c201741bda7fe138ef.tmp" -warnings=none -prefs=build.warn_data_percentage=75 -verbose

Это где то на 2 листа таких ошибок.

В конце:

"D:Tempbuild74a56b64153967c201741bda7fe138ef.tmpsketch
assvet_time1302fhhdfh.ino.cpp" -o "D:Tempbuild74a56b64153967c201741bda7fe138ef.tmpsketch
assvet_time1302fhhdfh.ino.cpp.o"
Rassvet_time1302fhhdfhСмайлик :40: error: redefinition of 'uint8_t m'

uint32_t unixtime(uint16_t y, uint8_t m, uint8_t d, uint8_t h, uint8_t m, uint8_t s) {

^

Rassvet_time1302fhhdfhСмайлик :40: error: 'uint8_t m' previously declared here

uint32_t unixtime(uint16_t y, uint8_t m, uint8_t d, uint8_t h, uint8_t m, uint8_t s) {

^

Rassvet_time1302fhhdfhСмайлик :40: error: redefinition of 'uint8_t m'

uint32_t unixtime(uint16_t y, uint8_t m, uint8_t d, uint8_t h, uint8_t m, uint8_t s) {

^

Rassvet_time1302fhhdfhСмайлик :40: error: 'uint8_t m' previously declared here

uint32_t unixtime(uint16_t y, uint8_t m, uint8_t d, uint8_t h, uint8_t m, uint8_t s) {

^

D:Temparduino_74a56b64153967c201741bda7fe138ef
assvet_time1302fhhdfh.ino: In function 'void loop()':

Rassvet_time1302fhhdfhСмайлик :65: error: 't' was not declared in this scope

long utime = unixtime(t.yr, t.mon, t.date, t.hr, t.min, t.sec);

^

Rassvet_time1302fhhdfhСмайлик :68: error: redeclaration of 'long int utime'

long utime = myTime.unixtime(); //сохраняем в переменную - время в формате UNIX

^

Rassvet_time1302fhhdfhСмайлик :65: error: 'long int utime' previously declared here

long utime = unixtime(t.yr, t.mon, t.date, t.hr, t.min, t.sec);

^

Rassvet_time1302fhhdfhСмайлик :68: error: 'myTime' was not declared in this scope

long utime = myTime.unixtime(); //сохраняем в переменную - время в формате UNIX

^

Используем библиотеку DS1302 в папке: D:РабстолПрограмки + SOFTСхемыarduinoarduino-1.6.7librariesDS1302 (legacy)
exit status 1
redefinition of 'uint8_t m'


Неудобно засорять форум такими кракозябрами, а спойлер тут не работает. Бросьте эту затею, дождусь другого модуля ))
Изменено 23.1.17 автор Roywalk

Изменено 23.1.17 автор Roywalk

2017-01-2323/01/2017 14:03:26
#2330365
Посетитель
Аквафорум рыбкаАквафорум рыбка
Аватар пользователя

413 62
Подольск
4 года

Roywalk

In function 'void setup()': error: a function-definition is not allowed here
Не надо внутрь функции setup пихать определение других функций, вставляйте в начало.
А еще есть файлообменники, туда можно закинуть лог или программу, а на форуме дать ссылку.
2017-01-2323/01/2017 14:20:08
#2330376
Новичок

Аватар пользователя

9
Russian Federation Tomsk
7 года

dkozyrev

Скинул на Гугл диск полностью весь скетч. Но за мое варварство в Loop шибко не пинайте, лень было голову напрягать с математикой )))
https://drive.google...
2017-01-2323/01/2017 14:26:35
#2330382
Посетитель
Аквафорум рыбкаАквафорум рыбка
Аватар пользователя

413 62
Подольск
4 года

Roywalk

И вставили не все и я малость накосячил, теперь компилится
https://yadi.sk/d/PM...
2017-01-2323/01/2017 15:17:24
#2330407
Свой на Aqa.ru, Кандидат в Советники
Кандидат в советники аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорума

Аватар пользователя

2593 1105
Москва
4 года

Roywalk

Или так https://drive.google...

Используя функцию unixtime из RTClib

П.с. про циклы обязательно почитайтеСмайлик ;)
2017-01-2323/01/2017 15:24:15
#2330411
Новичок

Аватар пользователя

9
Russian Federation Tomsk
7 года

Спасибо! Пойду дальше ковырять. У меня что-то видимо еще с самим компилятором. Снова пишет ошибки о не существующих переменных.

2017-01-2323/01/2017 15:47:41
#2330418
Свой на Aqa.ru, Кандидат в Советники
Кандидат в советники аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорума

Аватар пользователя

2593 1105
Москва
4 года

Roywalk

Не должен... DS1302.h видит? Не ругается на него?
2017-01-2323/01/2017 15:51:15
#2330421
Новичок

Аватар пользователя

9
Russian Federation Tomsk
7 года

Библиотеки норм подгружает, я сверял пути.
Вот ошибки:
Arduino: 1.6.7 (Windows 7), Плата:"Arduino Nano, ATmega328"

WARNING: Spurious .github folder in 'RTClib' library
D:Temparduino_d734b96649d455fe9fd9628c5b753bd8Rassvet.ino: In function 'void loop()':

RassvetСмайлик :48: error: 'class DS1302' has no member named 'time'

Time t = rtc.time();

^

RassvetСмайлик :54: error: 'class Time' has no member named 'yr'

DateTime dt(t.yr, t.mon, t.day, t.hr, t.min, t.sec);

^

RassvetСмайлик :54: error: 'class Time' has no member named 'day'

DateTime dt(t.yr, t.mon, t.day, t.hr, t.min, t.sec);

^

RassvetСмайлик :54: error: 'class Time' has no member named 'hr'

DateTime dt(t.yr, t.mon, t.day, t.hr, t.min, t.sec);

^

exit status 1
'class DS1302' has no member named 'time'

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

Изменено 23.1.17 автор Roywalk

2017-01-2323/01/2017 15:53:54
#2330426
Свой на Aqa.ru, Кандидат в Советники
Кандидат в советники аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорумаРыбки аквафорума

Аватар пользователя

2593 1105
Москва
4 года

DS1302 отсюда https://github.com/m... ?

2017-01-2323/01/2017 15:57:45
#2330431
Новичок

Аватар пользователя

9
Russian Federation Tomsk
7 года

Тьфу блин. Похоже, что нет))) В ютубе брал по ссылке библиотеку. Какая-то косячная видимо) С этой все нормально)) Огромнейшее спасибо.

Изменено 23.1.17 автор Roywalk

2017-01-2323/01/2017 16:09:47
#2330438
Новичок

Аватар пользователя

9
Russian Federation Tomsk
7 года

dkozyrev

Ваш скетч работает, но не полностью. Сначала нашел свою ошибку (диоды горели с одной яркостью), на выход подал логическое значение вместо аналогового, заменил на analogWrite и эта проблема исчезла. Далее прописал инициализацию порта в setup и вывод текущего формата времени в unix (показывает нормально, отчет идет верно, совпадает со временем в компьютере если перевести в привычное значение). Но при заливке полного скетча светодиоды быстро мигают и то только если ардуино подключено к порту, если отключить от порта и сбросить питание светильника, то ничего не горит (пока не подключишь в USB, хотя питание на ардуинку идет от отдельного блока на 5V). Пробовал писать в таком формате убрав рассвет и закат:

if ((utime >= StartLed) &&
(utime {
analogWrite(Led, 255);
analogWrite(Led2, 255);
}
else
{
analogWrite(Led, 0);
analogWrite(Led2, 0);
}
В итоге все горит, но опять до отключения ардуино от USB. Такое ощущение, что цикл не начинает свою работу. С чем это связано никак не пойму. Если вручную забивать значения через analogWrite (как в примерах Blink или Fade), то все нормально меняется.

На всякий случай скинул последний вариант https://drive.google...
2017-01-2424/01/2017 09:18:24
#2330842
Посетитель
Аквафорум рыбкаАквафорум рыбка
Аватар пользователя

413 62
Подольск
4 года

Roywalk

По ссылке старая версия скетча.
Если ведет себя по разному при питании от разных источников - проверяйте тестером на гнездах 5V/GND, может напряжение просаживается или где-то в КЗ.
И почему не пользуетесь отладкой?
Можно же накидать по всей программе Serial.println() для вывода значений переменных или просто меток, что зашло в такую-то ветку, подключить USB и смотреть в терминале чего там творится.
А при автономном питании и без дисплеев можно подключить несколько светодиодов (на D13 уже есть встроенный) и зажигать их в нужных местах программы. По крайней мере узнаете, что код выполняется и в каком месте.
2017-01-2424/01/2017 12:26:39
#2330978



Польвователь
Польвователь
Польвователь
Польвователь
Польвователь
Польвователь
Польвователь
Польвователь
Польвователь
Польвователь
Польвователь
Top