Ви не увійшли.
Устройство разработано для обеспечения возможности автоматического включения подсветки аквариума по расписанию, но может использоваться для других целей. Собрано в небольшой коробочке, содержит Arduino Mini Pro 5V 328, модуль реле, и модуль часов реального времени на чипе DS1307. Вместо этого модуля часов, можно без переделки использовать более современный ds3231.
Может включать и выключать нагрузку по заданному в программе расписанию. Реле рассчитано на подключение достаточно мощной нагрузки (250 вольт 10 Ампер), но утюг к нему подключать не следует, поскольку кроме реле, еще нужно учитывать тонкие дорожки на плате. Но, тем не менее, управлять лампами небольшой мощности можно достаточно уверенно. Тем более, что на плате модуля реле предусмотрена оптронная развязка по питанию, т.е Ардуино отделено от высоковольтной части реле.
Миниатюрность Ардуино имеет минус - на такой плате не поместился преобразователь USB в TTL и его приходится подключать к плате снаружи, в корпусе я изготовил пропил, куда вывел разъем гребенку, припаяв его к плате Arduino Mini Pro. На снимке в правом верхнем углу виден припаяный к Ардуино небольшой голубой конденсатор - он используется для организации автоматического ресета при запуске программирования (не нужно нажимать кнопку Reset на Arduino Mini Pro, чтобы инициировать режим программирования). Модуль преобразователя USB 2 UART на чипе cp2102 имеет отдельный вывод DTR, выведенный на разъем, который и обеспечивает сигнал Reset.
Чтобы сделать автоматический Reset для arduino-mini надо прицепить конденсатор 0.1мкф от DTR на вывод reset ардуины (см. даташит на arduino-pro-mini).
Номинал конденсатора не сильно критичен (я ставил 0.68мкф), надо только чтобы RC-цепочка давала импульс не более 1 сек.
Картинка ниже не моя, но отражает ситуацию, резистор подтягивающий RST к VCC я не ставил - и так рабоотает.
Ардуино Mini Pro была выбрана, как самая миниатюрная из имеющихся плат Ардуино, на снимке ниже видно, насколько больше бы потребовалось место для формата Arduino Uno.
Поскольку предполагается запитывать устройство от 12 вольт, в корпусе нашлось место под микросхему стабилизатора на 5 вольт 7805 (Крен 5), которую я прикрепил к радиатору, на всякий случай. Поскольку потребляемый устройством ток небольшой, 7805 и не греется, даже при питании 12 В, когда на ней падает около 7 вольт. На снимке ниже 7805 с радиатором в верхнем левом углу, к ней идут провода питания от модуля часов, реле и Ардуино.
Высокохудожественная схема подключения:
Контакт на плате часов 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
У модуля реле есть три выхода, схема подключения нагрузки на картинке ниже:
То есть, контакты реле включаются в разрыв цепи нагрузки, как простой переключатель.
#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)
Неактивний
Этот скетч только у меня не компилируется?
Видимо из-за того, что я не установил в скетче текущее время.
Не соображу, как изменить?
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)
Неактивний