#1 2016-11-27 11:47:23

Saddamko
Участник
Зарегистрирован: 2016-10-20
Сообщений: 23

Ардуино, часы, управление реле (ЖЕСТЬ! СМОТРЕТЬ ДО КОНЦА! :)

Устройство разработано для обеспечения возможности автоматического включения подсветки аквариума по расписанию, но может использоваться для других целей. Собрано в небольшой коробочке, содержит Arduino Mini Pro 5V 328, модуль реле, и модуль часов реального времени на чипе DS1307. Вместо этого модуля часов, можно без переделки использовать более современный ds3231.

Может включать и выключать нагрузку по заданному в программе расписанию. Реле рассчитано на подключение достаточно мощной нагрузки (250 вольт 10 Ампер), но утюг к нему подключать не следует, поскольку кроме реле, еще нужно учитывать тонкие дорожки на плате. Но, тем не менее, управлять лампами небольшой мощности можно достаточно уверенно. Тем более, что на плате модуля реле предусмотрена оптронная развязка по питанию, т.е Ардуино отделено от высоковольтной части реле.


aqua(3).jpg


Миниатюрность Ардуино имеет минус - на такой плате не поместился преобразователь USB в TTL и его приходится подключать к плате снаружи, в корпусе я изготовил пропил, куда вывел разъем гребенку, припаяв его к плате Arduino Mini Pro. На снимке в правом верхнем углу виден припаяный к Ардуино небольшой голубой конденсатор - он используется для организации автоматического ресета при запуске программирования (не нужно нажимать кнопку Reset на Arduino Mini Pro, чтобы инициировать режим программирования). Модуль преобразователя USB 2 UART на чипе cp2102 имеет отдельный вывод DTR, выведенный на разъем, который и обеспечивает сигнал Reset.

usb2uart2.jpg

Чтобы сделать автоматический Reset для arduino-mini надо прицепить конденсатор 0.1мкф от DTR на вывод reset ардуины (см. даташит на arduino-pro-mini).



Номинал конденсатора не сильно критичен (я ставил 0.68мкф), надо только чтобы RC-цепочка давала импульс не более 1 сек.

Картинка ниже не моя, но отражает ситуацию,  резистор подтягивающий RST к VCC я не ставил - и так рабоотает.



arduinoresetdtr.png

aqua(2).jpg

Ардуино Mini Pro была выбрана, как самая миниатюрная из имеющихся плат Ардуино, на снимке ниже видно, насколько больше бы потребовалось место для формата Arduino Uno.

aqua(4).jpg

Поскольку предполагается запитывать устройство от 12 вольт, в корпусе нашлось место под микросхему стабилизатора на 5 вольт 7805 (Крен 5), которую я прикрепил к радиатору, на всякий случай. Поскольку потребляемый устройством ток небольшой, 7805 и не греется, даже при питании 12 В, когда на ней падает около 7 вольт. На снимке ниже 7805 с радиатором в верхнем левом углу, к ней идут провода питания от модуля часов, реле и Ардуино.
aqua(6).jpg

Высокохудожественная схема подключения:

aqua(7).jpg

Контакт на плате часов SDA подключаем к контакту A5 платы Ардуино, контакт часов SCL подключаем к выводу A4 Ардуино. На модуле реле два контакта питания (5V И GND), подключаем их на 5 в стабилизатора 7805. Вход управления реле IN подключаем к D10 Arduino.

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

Управляется модуль часов по шине I2C, которая стандартно реализована в Ардуино на контактах A4, A5.

Подключение модуля RTC выполняется к аппаратным выводам SDA, и SCL.


RTC модуль часов на базе чипа DS1307    Arduino Mini Pro
GND    GND
Vcc    +5V
SDA (Serial DAta)    A4
SCL (Serial CLock)    A5



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

relay_module_arduino.jpg

То есть, контакты реле включаются в разрыв цепи нагрузки, как простой переключатель.


#include <Wire.h>
#include "DS1307.h"

DS1307 clock;    //define a object of DS1307 class

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin 13 as an output.
  pinMode(13, OUTPUT);
  pinMode(10, OUTPUT);
  Serial.begin(9600);
  
  clock.begin();

// Этот закоментированый кусок кода раскоментируем, когда хотим установить время в часах:

//  clock.fillByYMD(2016,11,26);//Jan 19,2013
//  clock.fillByHMS(19,48,30);//15:28 30"
//  clock.fillDayOfWeek(TUE);//Saturday
//  Serial.print("setTime");

  printTime();
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);              // wait for a second
  digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);              // wait for a second
  
  clock.getTime();

// Для примера - включаем реле в 7 часов, выключаем в 10

  if (clock.hour==7)
  {
    digitalWrite(10, HIGH);
    Serial.print("On"); Serial.println(clock.minute);
  };
  
  if ( clock.hour==10)
  {
    digitalWrite(10, LOW);
    
    Serial.println("Off");
  };
  
    if (clock.hour==19)
  {
    digitalWrite(10, HIGH);
    Serial.print("On"); Serial.println(clock.minute);
  };
  
  if ( clock.hour==21)
  {
    digitalWrite(10, LOW);
    
    Serial.println("Off");
  };
  
  
}

void printTime()
{
    clock.getTime();
    Serial.print(clock.hour, DEC);
    Serial.print(":");
    Serial.print(clock.minute, DEC);
    Serial.print(":");
    Serial.print(clock.second, DEC);
    Serial.print("    ");
    Serial.print(clock.month, DEC);
    Serial.print("/");
    Serial.print(clock.dayOfMonth, DEC);
    Serial.print("/");
    Serial.print(clock.year+2000, DEC);
    Serial.print(" ");
    Serial.print(clock.dayOfMonth);
    Serial.print("*");
    switch (clock.dayOfWeek)// Friendly printout the weekday
    {
        case MON:
          Serial.print("MON");
          break;
        case TUE:
          Serial.print("TUE");
          break;
        case WED:
          Serial.print("WED");
          break;
        case THU:
          Serial.print("THU");
          break;
        case FRI:
          Serial.print("FRI");
          break;
        case SAT:
          Serial.print("SAT");
          break;
        case SUN:
          Serial.print("SUN");
          break;
    }
    Serial.println(" ");
}

Редактировался Saddamko (2016-11-27 11:58:48)

#2 2017-05-03 21:49:42

yushin
Участник
Зарегистрирован: 2017-04-26
Сообщений: 3

Re: Ардуино, часы, управление реле (ЖЕСТЬ! СМОТРЕТЬ ДО КОНЦА! :)

Пытаюсь залить скетч, пишет ошибку.
Что не так?
2017-05-03_214249.jpg

Редактировался yushin (2017-05-03 21:52:46)

#3 2017-05-04 07:00:33

vvr
Участник
Зарегистрирован: 2015-04-12
Сообщений: 639

Re: Ардуино, часы, управление реле (ЖЕСТЬ! СМОТРЕТЬ ДО КОНЦА! :)

похоже библиотеки часов в вашей IDE нет

#4 2017-05-04 22:18:08

yushin
Участник
Зарегистрирован: 2017-04-26
Сообщений: 3

Re: Ардуино, часы, управление реле (ЖЕСТЬ! СМОТРЕТЬ ДО КОНЦА! :)

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

mini_DS1307.jpg

#5 2017-05-05 08:08:52

alex_dol
Участник
Зарегистрирован: 2015-12-28
Сообщений: 188

Re: Ардуино, часы, управление реле (ЖЕСТЬ! СМОТРЕТЬ ДО КОНЦА! :)

Это ты добавил библиотеку в скетч. Еще надо установить ее в систему.

#6 2017-05-07 08:37:09

yushin
Участник
Зарегистрирован: 2017-04-26
Сообщений: 3

Re: Ардуино, часы, управление реле (ЖЕСТЬ! СМОТРЕТЬ ДО КОНЦА! :)

Этот скетч только у меня не компилируется?

Видимо из-за того, что я не установил в скетче текущее время.
Не соображу, как изменить?

clock.begin();

// Этот закоментированый кусок кода раскоментируем, когда хотим установить время в часах:

//  clock.fillByYMD(2016,11,26);//Jan 19,2013
//  clock.fillByHMS(19,48,30);//15:28 30"
//  clock.fillDayOfWeek(TUE);//Saturday
//  Serial.print("setTime");

  printTime();
}

Редактировался yushin (2017-05-07 10:29:42)

#7 2019-01-29 23:53:40

Slod
Участник
Зарегистрирован: 2019-01-29
Сообщений: 1

Re: Ардуино, часы, управление реле (ЖЕСТЬ! СМОТРЕТЬ ДО КОНЦА! :)

А куда картинки исчезли?

Быстрое сообщение

Введите сообщение и нажмите Отправить

Подвал раздела