проблема Arduino Uno + RTC DS1307

Тема в разделе "Arduino & Shields", создана пользователем Crusader, 17 май 2014.

  1. Crusader

    Crusader Нуб

    Добрый день товарищи!

    Делаю систему автоматического полива теплицы, решил начать соответственно с таймеров. Купил к arduino uno модуль RTC DS1307.
    вот такого образца : http://arduino-ua.com/prod22-Real_Time_Clock_Modyl_DS1307
    (по ссылке есть схема разводки, даташиты, библиотеки)

    Подключаю по схеме, а именно : подаю VCC 5V , GND , SDA (на A4), SDC (на A5)

    нашел вот такой тестовый скетч:

    Код (Text):
    #include <WProgram.h>
    #include <Wire.h>
    #include <DS1307.h>

    int rtc[7];
    int ledPin =  13;
    void setup()
    {
      DDRC|=_BV(2) |_BV(3);  // POWER:Vcc Gnd
      PORTC |=_BV(3);  // VCC PINC3
      pinMode(ledPin, OUTPUT);
      Serial.begin(9600);



      RTC.stop();
      RTC.set(DS1307_SEC,1);
      RTC.set(DS1307_MIN,21);
      RTC.set(DS1307_HR,4);
      RTC.set(DS1307_DOW,7);
      RTC.set(DS1307_DATE,17);
      RTC.set(DS1307_MTH,5);
      RTC.set(DS1307_YR,14);
      RTC.start();

    }

    void loop()
    {
      RTC.get(rtc,true);

      for(int i=0; i<7; i++)
      {
        Serial.print(rtc[i]);
        Serial.print(" ");
      }
      Serial.println();
      //digitalWrite(ledPin, HIGH);
      delay(500);
      //digitalWrite(ledPin, LOW);
      delay(500);
    }
    Разумеется после однократной настройки времени комментирую в коде инициализацию часов (void setup)

    Теперь проблема :

    Всё вроде отрабатывает, секунды тикают , минуты увеличиваются. Но как только отсоединяешь arduino от питания - время сбивается!! Если так и нужно - тогда я не понимаю смысл этих RTC и назначение батарейки в модуле...

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

    Спасибо!
     
  2. Mitrandir

    Mitrandir Гуру

    батарейка точно живая?
     
  3. Crusader

    Crusader Нуб

    Живая!
     
    Последнее редактирование: 18 май 2014
  4. kaoplx

    kaoplx Нуб

    Ну как разобрался? Делаю тоже. Сегодня получил ds1307, залил немного другой скетч
    Код (Text):
    #include <Wire.h>
    #include "RTClib.h"

    RTC_DS1307 RTC;

    void setup () {
        Serial.begin(9600);
        Wire.begin();
        RTC.begin();
    }

    void loop () {
        // Определяем время
        DateTime now = RTC.now();
       
        // Выводим время в монитор порта
        Serial.print(now.year(), DEC);
        Serial.print('/');
        Serial.print(now.month(), DEC);
        Serial.print('/');
        Serial.print(now.day(), DEC);
        Serial.print(' ');
        Serial.print(now.hour(), DEC);
        Serial.print(':');
        Serial.print(now.minute(), DEC);
        Serial.print(':');
        Serial.print(now.second(), DEC);
        Serial.println();
        delay(1000);
    }
    Все работает. отключал питаение на 3 часа все ок.
    Задался такой же проблемой. система полива в теплице.
    Предлагаю скооперироваться, поделится идеями. имеется arduino uno, ds1307, и электрический кран с питание 3-5 вольт (закрывается открывается при смене полярности). у меня задача состоит в том чтобы открывать кран по расписанию. Пока все это доставлялось начитался много всякой информации. Столкнулся с проблемой обеспечения питанием, то есть батарейки от которой питается arduino хватит на 3-4 дня. Теперь ищу варианты каким образом сократить энергопотребление, находил статьи типа "как усыпить arduino" и т.д. пока не разобрался как это работает.
     
  5. Crusader

    Crusader Нуб

    Приветствую!
    Да, разобрался, хотя и не понял, в чем было дело. Просто заработало само собой. Неделю проверяю - вроде всё ок.

    Описание моей конструкции:
    - Есть водопровод, на нем электромагнитный клапан
    - От клапана шланг на бочку
    - Бочка служит для нагрева воды, в ней прорезан "нипель" на 15 ( выход под кран или клапан)
    -Будет установлен второй клапан, который будет отвечать непосредственно за полив.

    Т.е. :
    1 таймер - наполнение бочки (открываем водопровод)
    определение температуры воды
    2 таймер - открытие клапана бочки и непосредственно полив.

    Для полива используется капельная лента (погугли..)

    Еще планируются датчики температуры, влажности, Ethernet-shield , 3G модем + управление через интернет... Но в первую очередь это полив :)

    Теперь о самом интересном:
    Кран сейчас у меня есть вот такой:
    http://masterkit.ru/main/set.php?code_id=1339218
    Я его поставил на водопровод.
    Еще я заказал вот такой кран :
    http://www.ebay.com/itm/16124127256...eName=STRK:MEWNX:IT&_trksid=p3984.m1497.l2648
    Этот будет стоять на бочке.

    Что имею :
    Arduino UNO
    DS1307
    LCD keypad shield (выводу информацию, буду настраивать таймеры через него)
    Реле для управления клапанами ( 3 шт сейчас)

    По-поводу энергосбережения:
    Проблема такая же стоит, в теплице среди недели электричества нету, оно подается только по выходным. По этому решил использовать заряжающийся аккумулятор:
    http://lenova.by/goodsdetails.aspx?item=5442
    Если будет мало - добавлю еще один такой. Система будет заряжаться по выходным.
    Ищу хорошую недорогую подзарядку для аккумов, может ты подскажешь?
    Какой ты юзаешь клапан? Скинь ссылку. Хорошо бы найти пластмассовые - они подешевле.

    Ну вот вкратце. Если что забыл - пиши, расскажу.
     
    Последнее редактирование: 23 май 2014
  6. Tomasina

    Tomasina Сушитель лампочек Модератор

    я для подзарядки использую солнечную батарею, ибо не хочу 220 во влажной среде. Контроллер заряда желателен, но необязателен - можно просто стабилизатор на 12-13 Вольт, просто КПД будет ниже.
     
  7. Mitrandir

    Mitrandir Гуру

    А в чем проблема с 220 во влажной среде?
    У меня в теплице печка стлит 220 кушает и ничего...
    А вот за ардуину волнуюсь....
     
  8. Mitrandir

    Mitrandir Гуру

    Пиьание у меня постоянное от 220 но как ибп планирую юзать аккум от авто дает нужные мне 12 вольт и емкий
     
  9. Tomasina

    Tomasina Сушитель лампочек Модератор

    испарения воды с примесями (а водопроводная вся такая) постепенно создадут солевые отложения (налет) на поверхностях. Что-то где-то прольется и попадешь под напряжение.
    Может, я и перестраховываюсь, конечно.
     
  10. Crusader

    Crusader Нуб

    А какую солнечную батарею Вы используете? Киньте ссылку.
     
  11. Tomasina

    Tomasina Сушитель лампочек Модератор

    Гибкую на 60 Вт (да, избыточно, я эту использую при поездках с палаткой, а специально для теплицы покупать - пока жаба душит), но для подзарядки АКБ на 7 Ач вполне достаточно СБ на 15-20 Вт, обойдется где-то в 2,5-3 тыс, если брать в России и 1,5-2 тыс., если брать у китайцев. Дешевле можно спаять и самостоятельно, но хлопотно.

    [​IMG] [​IMG]
     
  12. Crusader

    Crusader Нуб

    А батареи хватает в пасмурную погоду? Меня смущает немного ее эффективность, когда нету прямых солнечных лучей...
     
  13. Tomasina

    Tomasina Сушитель лампочек Модератор

    На солнышке дает 3.8 А, в пасмурную и дождливую погоду выдает 0.9 А, чего вполне хватает для заряда АКБ на 7 Ач. У меня и разряд-то небольшой - контроллер с периферией кушает не более 0.2 А, каждый из 8 клапанов 1 А, но раз в сутки на 5- 15 минут. Пока ни разу не вырубался по истощению.
     
    ИгорьК и Megakoteyka нравится это.
  14. Максим B

    Максим B Гуру

    Таже беда с RTC. Заливаю скетч - пока есть питание все ок, как только убираю время продолжает идти с того момента где остановилось, а не далее. Батарейка живая
     
  15. Максим B

    Максим B Гуру

    Использую ардуино нано. Данный код не сработал для нано (((


    Код (Text):
    #include <Wire.h>
    #include "RTClib.h"

    RTC_DS1307 RTC;

    void setup () {
        Serial.begin(9600);
        Wire.begin();
        RTC.begin();
    }

    void loop () {
        // Определяем время
        DateTime now = RTC.now();
     
        // Выводим время в монитор порта
        Serial.print(now.year(), DEC);
        Serial.print('/');
        Serial.print(now.month(), DEC);
        Serial.print('/');
        Serial.print(now.day(), DEC);
        Serial.print(' ');
        Serial.print(now.hour(), DEC);
        Serial.print(':');
        Serial.print(now.minute(), DEC);
        Serial.print(':');
        Serial.print(now.second(), DEC);
        Serial.println();
        delay(1000);
    }
     
  16. Crusader

    Crusader Нуб

    А если при наличии питаня нажать кнопочку RESET на ардуйне, время не сбивается?
     
  17. Максим B

    Максим B Гуру

    нет, продолжает идти. Вот такой код помог.


    Код (Text):
    // DS1307_LCD (C)2010 Henning Karlsen
    // web: http://www.henningkarlsen.com/electronics
    //
    // A quick demo of how to use my DS1307-library to make a quick
    // clock using a DS1307 and a 16x2 LCD.
    //
    // I assume you know how to connect the DS1307 and LCD.
    // DS1302:  SDA pin  -> Arduino Digital 4
    //          SCL pin  -> Arduino Digital 5
    // LCD:    DB7      -> Arduino Digital 6
    //          DB6      -> Arduino Digital 7
    //          DB5      -> Arduino Digital 8
    //          DB4      -> Arduino Digital 9
    //          E        -> Arduino Digital 10
    //          RS        -> Arduino Digital 11

    #include <LiquidCrystal.h>
    #include <DS1307.h>

    // Init the DS1307
    DS1307 rtc(A4, A5);

    // Init the LCD
    LiquidCrystal lcd(A0, A3, 9, 10, 11, 12);

    void setup()
    {
      // Set the clock to run-mode
      rtc.halt(false);
     
      // Setup LCD to 16x2 characters
      lcd.begin(16, 2);

      // 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(22, 49, 0);    // Set the time to 12:00:00 (24hr format)
    //  rtc.setDate(25, 5, 2014);  // Set the date to October 3th, 2010

      // Set SQW/Out rate to 1Hz, and enable SQW
      rtc.setSQWRate(SQW_RATE_1);
      rtc.enableSQW(true);
    }

    void loop()
    {
      // Display time centered on the upper line
      lcd.setCursor(4, 0);
      lcd.print(rtc.getTimeStr());
     
      // Display abbreviated Day-of-Week in the lower left corner
      lcd.setCursor(0, 1);
      lcd.print(rtc.getDOWStr(FORMAT_SHORT));
     
      // Display date in the lower right corner
      lcd.setCursor(6, 1);
      lcd.print(rtc.getDateStr());

      // Wait one second before repeating :)
      delay (1000);
    }
     
  18. Максим B

    Максим B Гуру

    Не на долго хватило данного кода (((( Часы продолжают идти, но с отставанием в 10 минут после публикации кода (((
     
  19. geher

    geher Гуру

    В порядке гипотезы:
    Что есть SQW_RATE_1?
    Могу предположить, что это константа, определяющая коэффициент, от которого зависит отношение скорости хода часов к тактовой микропроцессора. Возможно, имеет смысл попробовать другие варианты. Возможно, есть SQW_RATE_2 или что-то в этом роде. Стоит посмотреть константы, которые скорее всего объявлены в DS1307.h
     
  20. Megakoteyka

    Megakoteyka Оракул Модератор

    Это константа, задающая коэффициент делителя для вывода SQW, видимо. К работе самих часов это не имеет отношения, вывод SQW используется для тактирования внешних устройств.
    Тут подробно расписано про SQW:
    http://avrdevices.ru/chasi-realynogo-vremeni-ds1307/
    http://easymcu.ru/publ/9-1-0-99
    А скорость хода часов можно изменить только установкой другого кварца - они же часы, зачем им с неправильной скоростью уметь тикать?