Наберите MOC3041 в гугле, там в даташите и схема есть. Отлов нуля подразумевает под собой включение нагрузки в момент перехода синусоиды через ноль - снижение помехи.
Если денег не жалко, то твердотельные реле SSR. Они разные есть.
Блин приклоняюсь перед людьми которые во всем этом разбираются :)
Мне значит надо между реле и розетками под мои нагрузки цепочки поставить ? На обе реле ? Пойду гуглить как выглядят rc цепочки :) И почему больше 400 вольт , если в розетке 220 ? Этот вопрос так сказать для общего развития .
Пиковое напряжение равно U* на корень из 3. А RC цепочка выглядит как последовательно включеные резистор и конденсатор, эта шняга параллельно нагрузке.
Так , информации получил вагон , спасибо . Буду переваривать . Резюмируя , проблема вклчения выключения света при включении вентилятора из - за реактивных токов , которая лечится установкой RC- цепочки между выходом реле и нагрузкой или покупкой более совершенного реле. Так ?
Кстати экран тоже мигать начинал (ну на котором вся инфа и работает он от ардуины)
Посмотрел реле , в самаре они по 300р , вроде не дорого . С учетом того что они на 16 или 25 А . А в китае я покупал за 2 бакса , с учетом того что думаю они 16А не выдержат .
Так , информации получил вагон , спасибо . Буду переваривать . Резюмируя , проблема вклчения выключения света при включении вентилятора из - за реактивных токов , которая лечится установкой RC- цепочки между выходом реле и нагрузкой или покупкой более совершенного реле. Так ?
Кстати экран тоже мигать начинал (ну на котором вся инфа и работает он от ардуины)
Обычно помогает, но не факт. Здесь какие то ветки читал, у людей до полного экранирования платы доходило. Но начать лучше с простых методов.
Тверд.реле токи лучше заряжайте 2-3х кратные на ДНАТ, хотя с ЭПРА это может и не так критично.
Не совсем. Снабберная цепочка если и не гасит, то делает более пологим фронт импульса: симисторы критично относятся к высоким скоростям нарастания импульса - могут самопроизвольно открываться...
Еще уточнение , глючит просто при включении второго реле , даже без подключения нагрузок к ним :(
Подробнее : включаю ардуину , реле света включает розетку . Нагреваю датчик температуры , включает реле вентилятора....
При включении реле вентилятора (все происходит без подключения нагрузок к розеткам !!!) экран меркнет(подсветка светит , но цифр не видно) , реле света начинает включаться и выключаться. Вот какая фишка. Точно это реле ? Может я что не так подключил ? Но вроде все верно :(
Еще уточнение , глючит просто при включении второго реле , даже без подключения нагрузок к ним :(
Подробнее : включаю ардуину , реле света включает розетку . Нагреваю датчик температуры , включает реле вентилятора....
При включении реле вентилятора (все происходит без подключения нагрузок к розеткам !!!) экран меркнет(подсветка светит , но цифр не видно) , реле света начинает включаться и выключаться. Вот какая фишка. Точно это реле ? Может я что не так подключил ? Но вроде все верно :(
Питание ардуины с блока питания . Тоже думаю что похоже на просаживание , но на нем написано 12 вольт полтора ампера. Я даже 5 вольт от одного реле в другой пин на ардуине вставил , тоже самое.
Обратил внимание что вкл,выкл реле с таймером. Также на мониторе время принимало какието значения в районе 165.165....
Почему же РТС ведет себя не корректно при включении реле ? Это ему получается не хватет энергии ? Но ведь у него батарейка есть на крайняк :)
И вот еще что РТС использует scl и sda , и монитор использует их же. При отключении этих двух проводов монитора от ардуины(питание монитора оставил) , все работает корректно . Получается дело в том что конфликтуют часы и монитор . Как это победить ?
вот скетч :
//-------------------------------подключим все внешние либы----------------------------------------------------------
#include <Wire.h>
#include <LiquidCrystal_I2C.h>//библиотека для LCD по 4 проводам
#include <OneWire.h>
#include <DallasTemperature.h>//для датчика температуры
#include <DS1307new.h>//для часов реального времени
#include <TimeHelpers.h>//для простого задания таймеров
//-------------------------------------------------------------------------------------
//---------------------------------------pins--ноги распределим(что к какамоу пину подключено)--------------------
#define ONE_WIRE_BUS 2// пин подключения датчика температуры
#define Relay1_PIN 4 //пин управления реле света
#define Relay2_PIN 3 //пин управления реле вентилятора
//----------------------------------------------------------------------------------------------------------------
//--------------------------константы------------------------------------------------
#define TEMP_INTERVAL _SEC_(5)// таймер опроса датчика температуры
#define TIME_INTERVAL _SEC_(1)// таймер опроса времени
#define TempFanOff 27//температура выключения вентилятора
#define TempFanOn 29//температура включения вентилятора
#define TimeHHon 9
#define TimeHHoff 2
//#define TimeMMon 0
//#define TimeMMoff 0
//------------------------------------------------------------------------------------
//--------------------------переменные----------------------------------------------
//int yy;
//int mm;
//int dd;
//int hh;
//int mn;
//int ss;
//int VixodIzCicla;// переменная для выхода из цикла
//int TempMillisTime;
//---------------------------------------------------------------------------------
//------------------------значок градусов----------------------------------------
uint8_t temp_cel[8] =
{
B00111,
B00101,
B00111,
B00000,
B00000,
B00000,
B00000
}; //закодировано в двоичной системе значек градуса
//--------------------------------------для часов---------------------------------------------------------------------
uint16_t startAddr = 0x0000; // Start address to store in the NV-RAM
uint16_t lastAddr; // new address for storing in NV-RAM
uint16_t TimeIsSet = 0xaa55; // Helper that time must not set again
//-------------------------------------------------------------------------------------
//-------------------инициализация устройств-------------------------------------
OneWire oneWire(ONE_WIRE_BUS);//куда подключен датчик
DallasTemperature sensors(&oneWire);// говорим что это датчик температуры
DeviceAddress insideThermometer;//адрес датчика , если их много
LiquidCrystal_I2C lcd(0x27,16,2); // подключаем монитор
//-------------------------------------------------------------------------------
//--------------------------начальная загрузка---------------------------------
void setup(void)
{
//запускаем порт(для отладки)
Serial.begin(115200);
Serial.println("Hello");
Serial.print("Running Sensors...");
//запускаем датчик температуры--------------------------------------------
sensors.begin();
Serial.print("Found ");
Serial.print(sensors.getDeviceCount(), DEC);
Serial.println(" sensors");
// смотрим как подключены
Serial.print("Parasite power is: ");
if (sensors.isParasitePowerMode()) Serial.println("ON");
else Serial.println("OFF");
if (!sensors.getAddress(insideThermometer, 0)) Serial.println("Unable to find address for Device 0");
Serial.print("Device 0 Address: ");
printAddress(insideThermometer);
Serial.println();
sensors.setResolution(insideThermometer, 9);
Serial.print("Device 0 Resolution: ");
Serial.print(sensors.getResolution(insideThermometer), DEC);
Serial.println();
//запускаем монитор-----------------------------------------------------------------
lcd.init();
lcd.backlight();
lcd.setCursor(3,0);
lcd.print("Hello!");
lcd.createChar(1, temp_cel); // я так понял подгружаем наш значок в экран
//выключаем наши реле--------------------
pinMode(Relay1_PIN, OUTPUT);
pinMode(Relay2_PIN, OUTPUT);
//------установка времени------------------
RTC.setRAM(0, (uint8_t *)&startAddr, sizeof(uint16_t));// Store startAddr in NV-RAM address 0x08
/*
Uncomment the next 2 lines if you want to SET the clock
Comment them out if the clock is set.
DON'T ASK ME WHY: YOU MUST UPLOAD THE CODE TWICE TO LET HIM WORK
AFTER SETTING THE CLOCK ONCE.
*/
//TimeIsSet = 0xffff;
//RTC.setRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t));
/*
Control the clock.
Clock will only be set if NV-RAM Address does not contain 0xaa.
DS1307 should have a battery backup.
*/
RTC.getRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t));
if (TimeIsSet != 0xaa55)
{
RTC.stopClock();
RTC.fillByYMD(2014,12,25);
RTC.fillByHMS(9,48,0);
RTC.setTime();
TimeIsSet = 0xaa55;
RTC.setRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t));
RTC.startClock();
}
else
{
RTC.getTime();
}
}
//--------------------------основной цикл программы-----------------------------------------
void loop(void)
{
//----------Опрос времени для вывода на экран----------------------------------------------------------------
DO_EVERY( TIME_INTERVAL , takeTime());
//-------------------------------------------------------------------------------------------
//-----------------------Опрос Датчика температуры и отслеживание реле----------------------------
DO_EVERY( TEMP_INTERVAL , {
Serial.print("Requesting temperatures...");
sensors.requestTemperatures(); // Send the command to get temperatures
printTemperature(insideThermometer); // Use a simple function to print out the data
Serial.println("DONE");
});
//-----------------------------------------------------------------------------------------------------
}
//----------------------------------------------------подпрограммы вызываемые многократно ----------------------------------------------
// function to print a device address
void printAddress(DeviceAddress deviceAddress)
{
for (uint8_t i = 0; i < 8; i++)
{
if (deviceAddress[i] < 16) Serial.print("0");
Serial.print(deviceAddress[i], HEX);
}
}
// function to print the temperature for a device
void printTemperature(DeviceAddress deviceAddress)
{
int tempC = sensors.getTempC(deviceAddress);
Serial.print("Temp C: ");
Serial.print(tempC);
lcd.setCursor(10, 0);
lcd.print("t:");
lcd.print(tempC);
char temp2[]={'\1', 67, '\0'}; //Отрисовка градусов Цельсия
lcd.print(temp2);
lcd.print("C");
if ( tempC < TempFanOff ) digitalWrite(Relay1_PIN, LOW); //если температуры меньше заданной выключаем реле вентилятора
else if ( tempC > TempFanOn ) digitalWrite(Relay1_PIN, HIGH);// если температура поднялась выше заданной включаем реле вентилятора
Serial.print(" Temp F: ");
Serial.println(DallasTemperature::toFahrenheit(tempC)); // Converts tempC to Fahrenheit
}
//----------------------------функция отображения времени------------------------------------
int takeTime(){
RTC.getTime();
//lcd.clear();
lcd.setCursor(0, 0);
if (RTC.hour < 10) // correct hour if necessary
{
Serial.print("0");
Serial.print(RTC.hour, DEC);
lcd.print("0");
lcd.print(RTC.hour, DEC);
}
else
{
Serial.print(RTC.hour, DEC);
lcd.print(RTC.hour, DEC);
}
Serial.print(":");
lcd.print(":");
if (RTC.minute < 10) // correct minute if necessary
{
Serial.print("0");
Serial.print(RTC.minute, DEC);
lcd.print("0");
lcd.print(RTC.minute, DEC);
}
else
{
Serial.print(RTC.minute, DEC);
lcd.print(RTC.minute, DEC);
}
Serial.print(":");
lcd.print(":");
if (RTC.second < 10) // correct second if necessary
{
Serial.print("0");
Serial.print(RTC.second, DEC);
lcd.print("0");
lcd.print(RTC.second, DEC);
}
else
{
Serial.print(RTC.second, DEC);
lcd.print(RTC.second, DEC);
}
Serial.print(" ");
lcd.print(" ");
lcd.setCursor(0, 1);
if (RTC.day < 10) // correct date if necessary
{
Serial.print("0");
Serial.print(RTC.day, DEC);
lcd.print("0");
lcd.print(RTC.day, DEC);
}
else
{
Serial.print(RTC.day, DEC);
lcd.print(RTC.day, DEC);
}
Serial.print("-");
lcd.print("-");
if (RTC.month < 10) // correct month if necessary
{
Serial.print("0");
Serial.print(RTC.month, DEC);
lcd.print("0");
lcd.print(RTC.month, DEC);
}
else
{
Serial.print(RTC.month, DEC);
lcd.print(RTC.month, DEC);
}
Serial.print("-");
lcd.print("-");
Serial.print(RTC.year, DEC); // Year need not to be changed
lcd.print(RTC.year, DEC);
Serial.print(" ");
lcd.print(" ");
switch (RTC.dow) // Friendly printout the weekday
{
case 1:
Serial.print("MON");
lcd.print("MON");
break;
case 2:
Serial.print("TUE");
lcd.print("TUE");
break;
case 3:
Serial.print("WED");
lcd.print("WED");
break;
case 4:
Serial.print("THU");
lcd.print("THU");
break;
case 5:
Serial.print("FRI");
lcd.print("FRI");
break;
case 6:
Serial.print("SAT");
lcd.print("SAT");
break;
case 7:
Serial.print("SUN");
lcd.print("SUN");
break;
}
Serial.print(" seconds since 1.1.2000:");
Serial.print(RTC.time2000, DEC);
uint8_t MESZ = RTC.isMEZSummerTime();
Serial.print(" MEZ=0, MESZ=1 : ");
Serial.print(MESZ, DEC);
Serial.print(" - Address in NV-RAM is: ");
//RTC.getRAM(0, (uint8_t *)&lastAddr, sizeof(uint16_t));
//Serial.print(lastAddr, HEX);
//lastAddr = lastAddr + 1; // we want to use it as addresscounter for example
//RTC.setRAM(0, (uint8_t *)&lastAddr, sizeof(uint16_t));
//RTC.getRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t));
// if (TimeIsSet == 0xaa55) // check if the clock was set or not
//{
// Serial.println(" - Clock was set!");
//}
//else
//{
// Serial.println(" - Clock was NOT set!");
//}
if ( RTC.hour >= TimeHHon || RTC.hour <= TimeHHoff ) digitalWrite(Relay2_PIN, HIGH); //если время больше или равно времени включения или меньше или равно времени выключения , то светим
else if ( RTC.hour < TimeHHon & RTC.hour > TimeHHoff ) digitalWrite(Relay2_PIN, LOW);// если время меньше времени включения и больше времени выключения не светим
}
//------------------------------------------------------------------------------------------------
при отключенных проводах scl sda монитора и выключеном реле вентилятора , на экране видны черные квадраты. При включении реле вентилятора , они пропадают.
и что это за ардуина , которая имеет кучу выходов и не может управлять тремя из них ?
Она может управлять всеми выходами, но не предназначена для питания нагрузок. А реле для нее уже нагрузка. То же относится к двигателям, сервам и прочим подобным вещам.
Я конечно не электронщик, но считал что реле служит для питание нагрузки :)
Вообщем 5 вольт на реле подавать с блока питания отдельного ?
Реле исполняет роль выключателя, но и само при этом кушает достаточно много. Кстати на SSR у вас этой проблемы не будет. Там вместо катушки вы просто зажигаете светодиод.
И вот еще что странно , сейчас вот отключил scl и sda монитора, и все работает. Но ведь питание осталось как и было. Питание монитора оставил , он светится , реле работают , таймер тоже. Напрягает только то что темные квадраты при включении второго реле исчезают , это говорит в пользу нехватки мощности так сказать.
И ведь для ардуины продают целую батарею из нескольких релюх и что то нигде не видел чтоб писали питать их отдельным БП :(
В чипдипе SSR стоят заоблачно чтото . Их буду брать после праздников уже. Сейчас буду думать где взять папу для подключения реле от БП. Спасибо вам за толковые разъяснения ламеру.
И вот еще что странно , сейчас вот отключил scl и sda монитора, и все работает. Но ведь питание осталось как и было. Питание монитора оставил , он светится , реле работают , таймер тоже. Напрягает только то что темные квадраты при включении второго реле исчезают , это говорит в пользу нехватки мощности так сказать.
И ведь для ардуины продают целую батарею из нескольких релюх и что то нигде не видел чтоб писали питать их отдельным БП :(
А они про это и не напишут. Это подразумевается в самой концепции ардуины.
Вы паять хоть немного умеете? Берете КРЕН5, по фашистским аналогам надо даташит смотреть, которая на 5В. Там три детали всего. Радиатор скорее всего не понадобится.
Если в первой строчке & то как свет будет светить с 0 до 2 ? Поэтому или .
Про вторую строку впринципе да , все условия в первой строке.
Можно поподробней про симистор с отловом 0 .
Реактивные нагрузки дают помеху. Попробуйте на выходе реле RC цепочки, 100оМ+0,1мКф (>400в).
Наберите MOC3041 в гугле, там в даташите и схема есть. Отлов нуля подразумевает под собой включение нагрузки в момент перехода синусоиды через ноль - снижение помехи.
Если денег не жалко, то твердотельные реле SSR. Они разные есть.
Блин приклоняюсь перед людьми которые во всем этом разбираются :)
Мне значит надо между реле и розетками под мои нагрузки цепочки поставить ? На обе реле ? Пойду гуглить как выглядят rc цепочки :) И почему больше 400 вольт , если в розетке 220 ? Этот вопрос так сказать для общего развития .
То есть в твердотельных реле SSR уже и цепочки и отлов 0 ?
Пиковое напряжение равно U* на корень из 3. А RC цепочка выглядит как последовательно включеные резистор и конденсатор, эта шняга параллельно нагрузке.
То есть в твердотельных реле SSR уже и цепочки и отлов 0 ?
Да, только по даташиту смотреть. Есть и без 0.
типа конденсатор излишки себе берет ?
типа конденсатор излишки себе берет ?
физику точно не расскажу, типа подпитывает в момент просадки. часто приходится подбирать.
Так , информации получил вагон , спасибо . Буду переваривать . Резюмируя , проблема вклчения выключения света при включении вентилятора из - за реактивных токов , которая лечится установкой RC- цепочки между выходом реле и нагрузкой или покупкой более совершенного реле. Так ?
Кстати экран тоже мигать начинал (ну на котором вся инфа и работает он от ардуины)
Посмотрел реле , в самаре они по 300р , вроде не дорого . С учетом того что они на 16 или 25 А . А в китае я покупал за 2 бакса , с учетом того что думаю они 16А не выдержат .
http://eworld.ru/trends/pr/g:a519011bb84487a48627fed90050dcd7/g2:a519011...
Так , информации получил вагон , спасибо . Буду переваривать . Резюмируя , проблема вклчения выключения света при включении вентилятора из - за реактивных токов , которая лечится установкой RC- цепочки между выходом реле и нагрузкой или покупкой более совершенного реле. Так ?
Кстати экран тоже мигать начинал (ну на котором вся инфа и работает он от ардуины)
Обычно помогает, но не факт. Здесь какие то ветки читал, у людей до полного экранирования платы доходило. Но начать лучше с простых методов.
Тверд.реле токи лучше заряжайте 2-3х кратные на ДНАТ, хотя с ЭПРА это может и не так критично.
типа конденсатор излишки себе берет ?
Не совсем. Снабберная цепочка если и не гасит, то делает более пологим фронт импульса: симисторы критично относятся к высоким скоростям нарастания импульса - могут самопроизвольно открываться...
Еще уточнение , глючит просто при включении второго реле , даже без подключения нагрузок к ним :(
Подробнее : включаю ардуину , реле света включает розетку . Нагреваю датчик температуры , включает реле вентилятора....
При включении реле вентилятора (все происходит без подключения нагрузок к розеткам !!!) экран меркнет(подсветка светит , но цифр не видно) , реле света начинает включаться и выключаться. Вот какая фишка. Точно это реле ? Может я что не так подключил ? Но вроде все верно :(
https://www.dropbox.com/s/26jr56otsumbenb/2014-12-27%2012.09.21.jpg?dl=0
Еще уточнение , глючит просто при включении второго реле , даже без подключения нагрузок к ним :(
Подробнее : включаю ардуину , реле света включает розетку . Нагреваю датчик температуры , включает реле вентилятора....
При включении реле вентилятора (все происходит без подключения нагрузок к розеткам !!!) экран меркнет(подсветка светит , но цифр не видно) , реле света начинает включаться и выключаться. Вот какая фишка. Точно это реле ? Может я что не так подключил ? Но вроде все верно :(
https://www.dropbox.com/s/26jr56otsumbenb/2014-12-27%2012.09.21.jpg?dl=0
А питание всего этого откуда? Кроме силовых цепей.
Вместо реле включите светики и проверьте работу кода. Если будет работать корректно, значит вам реле просаживают питание ардуины.
Питание ардуины с блока питания . Тоже думаю что похоже на просаживание , но на нем написано 12 вольт полтора ампера. Я даже 5 вольт от одного реле в другой пин на ардуине вставил , тоже самое.
И что с это просадкой делать ?
подключил светодиоды , все работает как часы :) швейцарские )))))
подключил светодиоды , все работает как часы :) швейцарские )))))
Отдельный стабилизатор на питание реле. БП здесь скорее всего не при чем. Не справляется стабилизатор ардуины.
Его такими опытами и похоронить недолго.
Таааак....
Обратил внимание что вкл,выкл реле с таймером. Также на мониторе время принимало какието значения в районе 165.165....
Почему же РТС ведет себя не корректно при включении реле ? Это ему получается не хватет энергии ? Но ведь у него батарейка есть на крайняк :)
И вот еще что РТС использует scl и sda , и монитор использует их же. При отключении этих двух проводов монитора от ардуины(питание монитора оставил) , все работает корректно . Получается дело в том что конфликтуют часы и монитор . Как это победить ?
вот скетч :
//-------------------------------подключим все внешние либы---------------------------------------------------------- #include <Wire.h> #include <LiquidCrystal_I2C.h>//библиотека для LCD по 4 проводам #include <OneWire.h> #include <DallasTemperature.h>//для датчика температуры #include <DS1307new.h>//для часов реального времени #include <TimeHelpers.h>//для простого задания таймеров //------------------------------------------------------------------------------------- //---------------------------------------pins--ноги распределим(что к какамоу пину подключено)-------------------- #define ONE_WIRE_BUS 2// пин подключения датчика температуры #define Relay1_PIN 4 //пин управления реле света #define Relay2_PIN 3 //пин управления реле вентилятора //---------------------------------------------------------------------------------------------------------------- //--------------------------константы------------------------------------------------ #define TEMP_INTERVAL _SEC_(5)// таймер опроса датчика температуры #define TIME_INTERVAL _SEC_(1)// таймер опроса времени #define TempFanOff 27//температура выключения вентилятора #define TempFanOn 29//температура включения вентилятора #define TimeHHon 9 #define TimeHHoff 2 //#define TimeMMon 0 //#define TimeMMoff 0 //------------------------------------------------------------------------------------ //--------------------------переменные---------------------------------------------- //int yy; //int mm; //int dd; //int hh; //int mn; //int ss; //int VixodIzCicla;// переменная для выхода из цикла //int TempMillisTime; //--------------------------------------------------------------------------------- //------------------------значок градусов---------------------------------------- uint8_t temp_cel[8] = { B00111, B00101, B00111, B00000, B00000, B00000, B00000 }; //закодировано в двоичной системе значек градуса //--------------------------------------для часов--------------------------------------------------------------------- uint16_t startAddr = 0x0000; // Start address to store in the NV-RAM uint16_t lastAddr; // new address for storing in NV-RAM uint16_t TimeIsSet = 0xaa55; // Helper that time must not set again //------------------------------------------------------------------------------------- //-------------------инициализация устройств------------------------------------- OneWire oneWire(ONE_WIRE_BUS);//куда подключен датчик DallasTemperature sensors(&oneWire);// говорим что это датчик температуры DeviceAddress insideThermometer;//адрес датчика , если их много LiquidCrystal_I2C lcd(0x27,16,2); // подключаем монитор //------------------------------------------------------------------------------- //--------------------------начальная загрузка--------------------------------- void setup(void) { //запускаем порт(для отладки) Serial.begin(115200); Serial.println("Hello"); Serial.print("Running Sensors..."); //запускаем датчик температуры-------------------------------------------- sensors.begin(); Serial.print("Found "); Serial.print(sensors.getDeviceCount(), DEC); Serial.println(" sensors"); // смотрим как подключены Serial.print("Parasite power is: "); if (sensors.isParasitePowerMode()) Serial.println("ON"); else Serial.println("OFF"); if (!sensors.getAddress(insideThermometer, 0)) Serial.println("Unable to find address for Device 0"); Serial.print("Device 0 Address: "); printAddress(insideThermometer); Serial.println(); sensors.setResolution(insideThermometer, 9); Serial.print("Device 0 Resolution: "); Serial.print(sensors.getResolution(insideThermometer), DEC); Serial.println(); //запускаем монитор----------------------------------------------------------------- lcd.init(); lcd.backlight(); lcd.setCursor(3,0); lcd.print("Hello!"); lcd.createChar(1, temp_cel); // я так понял подгружаем наш значок в экран //выключаем наши реле-------------------- pinMode(Relay1_PIN, OUTPUT); pinMode(Relay2_PIN, OUTPUT); //------установка времени------------------ RTC.setRAM(0, (uint8_t *)&startAddr, sizeof(uint16_t));// Store startAddr in NV-RAM address 0x08 /* Uncomment the next 2 lines if you want to SET the clock Comment them out if the clock is set. DON'T ASK ME WHY: YOU MUST UPLOAD THE CODE TWICE TO LET HIM WORK AFTER SETTING THE CLOCK ONCE. */ //TimeIsSet = 0xffff; //RTC.setRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t)); /* Control the clock. Clock will only be set if NV-RAM Address does not contain 0xaa. DS1307 should have a battery backup. */ RTC.getRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t)); if (TimeIsSet != 0xaa55) { RTC.stopClock(); RTC.fillByYMD(2014,12,25); RTC.fillByHMS(9,48,0); RTC.setTime(); TimeIsSet = 0xaa55; RTC.setRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t)); RTC.startClock(); } else { RTC.getTime(); } } //--------------------------основной цикл программы----------------------------------------- void loop(void) { //----------Опрос времени для вывода на экран---------------------------------------------------------------- DO_EVERY( TIME_INTERVAL , takeTime()); //------------------------------------------------------------------------------------------- //-----------------------Опрос Датчика температуры и отслеживание реле---------------------------- DO_EVERY( TEMP_INTERVAL , { Serial.print("Requesting temperatures..."); sensors.requestTemperatures(); // Send the command to get temperatures printTemperature(insideThermometer); // Use a simple function to print out the data Serial.println("DONE"); }); //----------------------------------------------------------------------------------------------------- } //----------------------------------------------------подпрограммы вызываемые многократно ---------------------------------------------- // function to print a device address void printAddress(DeviceAddress deviceAddress) { for (uint8_t i = 0; i < 8; i++) { if (deviceAddress[i] < 16) Serial.print("0"); Serial.print(deviceAddress[i], HEX); } } // function to print the temperature for a device void printTemperature(DeviceAddress deviceAddress) { int tempC = sensors.getTempC(deviceAddress); Serial.print("Temp C: "); Serial.print(tempC); lcd.setCursor(10, 0); lcd.print("t:"); lcd.print(tempC); char temp2[]={'\1', 67, '\0'}; //Отрисовка градусов Цельсия lcd.print(temp2); lcd.print("C"); if ( tempC < TempFanOff ) digitalWrite(Relay1_PIN, LOW); //если температуры меньше заданной выключаем реле вентилятора else if ( tempC > TempFanOn ) digitalWrite(Relay1_PIN, HIGH);// если температура поднялась выше заданной включаем реле вентилятора Serial.print(" Temp F: "); Serial.println(DallasTemperature::toFahrenheit(tempC)); // Converts tempC to Fahrenheit } //----------------------------функция отображения времени------------------------------------ int takeTime(){ RTC.getTime(); //lcd.clear(); lcd.setCursor(0, 0); if (RTC.hour < 10) // correct hour if necessary { Serial.print("0"); Serial.print(RTC.hour, DEC); lcd.print("0"); lcd.print(RTC.hour, DEC); } else { Serial.print(RTC.hour, DEC); lcd.print(RTC.hour, DEC); } Serial.print(":"); lcd.print(":"); if (RTC.minute < 10) // correct minute if necessary { Serial.print("0"); Serial.print(RTC.minute, DEC); lcd.print("0"); lcd.print(RTC.minute, DEC); } else { Serial.print(RTC.minute, DEC); lcd.print(RTC.minute, DEC); } Serial.print(":"); lcd.print(":"); if (RTC.second < 10) // correct second if necessary { Serial.print("0"); Serial.print(RTC.second, DEC); lcd.print("0"); lcd.print(RTC.second, DEC); } else { Serial.print(RTC.second, DEC); lcd.print(RTC.second, DEC); } Serial.print(" "); lcd.print(" "); lcd.setCursor(0, 1); if (RTC.day < 10) // correct date if necessary { Serial.print("0"); Serial.print(RTC.day, DEC); lcd.print("0"); lcd.print(RTC.day, DEC); } else { Serial.print(RTC.day, DEC); lcd.print(RTC.day, DEC); } Serial.print("-"); lcd.print("-"); if (RTC.month < 10) // correct month if necessary { Serial.print("0"); Serial.print(RTC.month, DEC); lcd.print("0"); lcd.print(RTC.month, DEC); } else { Serial.print(RTC.month, DEC); lcd.print(RTC.month, DEC); } Serial.print("-"); lcd.print("-"); Serial.print(RTC.year, DEC); // Year need not to be changed lcd.print(RTC.year, DEC); Serial.print(" "); lcd.print(" "); switch (RTC.dow) // Friendly printout the weekday { case 1: Serial.print("MON"); lcd.print("MON"); break; case 2: Serial.print("TUE"); lcd.print("TUE"); break; case 3: Serial.print("WED"); lcd.print("WED"); break; case 4: Serial.print("THU"); lcd.print("THU"); break; case 5: Serial.print("FRI"); lcd.print("FRI"); break; case 6: Serial.print("SAT"); lcd.print("SAT"); break; case 7: Serial.print("SUN"); lcd.print("SUN"); break; } Serial.print(" seconds since 1.1.2000:"); Serial.print(RTC.time2000, DEC); uint8_t MESZ = RTC.isMEZSummerTime(); Serial.print(" MEZ=0, MESZ=1 : "); Serial.print(MESZ, DEC); Serial.print(" - Address in NV-RAM is: "); //RTC.getRAM(0, (uint8_t *)&lastAddr, sizeof(uint16_t)); //Serial.print(lastAddr, HEX); //lastAddr = lastAddr + 1; // we want to use it as addresscounter for example //RTC.setRAM(0, (uint8_t *)&lastAddr, sizeof(uint16_t)); //RTC.getRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t)); // if (TimeIsSet == 0xaa55) // check if the clock was set or not //{ // Serial.println(" - Clock was set!"); //} //else //{ // Serial.println(" - Clock was NOT set!"); //} if ( RTC.hour >= TimeHHon || RTC.hour <= TimeHHoff ) digitalWrite(Relay2_PIN, HIGH); //если время больше или равно времени включения или меньше или равно времени выключения , то светим else if ( RTC.hour < TimeHHon & RTC.hour > TimeHHoff ) digitalWrite(Relay2_PIN, LOW);// если время меньше времени включения и больше времени выключения не светим } //------------------------------------------------------------------------------------------------при отключенных проводах scl sda монитора и выключеном реле вентилятора , на экране видны черные квадраты. При включении реле вентилятора , они пропадают.
Развяжите сперва питание. Что там на ардуине происходит в момент просадки, знает только она. Как включено сейчас, питать все равно нежелательно.
ОК. Значит что мне надо сделать ? Отдельный выход 5вольт с ардуины на отдельный стабизизатор , а снего на 2 реле ?
и что это за ардуина , которая имеет кучу выходов и не может управлять тремя из них ?
ОК. Значит что мне надо сделать ? Отдельный выход 5вольт с ардуины на отдельный стабизизатор , а снего на 2 реле ?
Отнюдь, ардуина осталась как сейчас, а с БП на отдельный стабилизатор и на реле.
и что это за ардуина , которая имеет кучу выходов и не может управлять тремя из них ?
Она может управлять всеми выходами, но не предназначена для питания нагрузок. А реле для нее уже нагрузка. То же относится к двигателям, сервам и прочим подобным вещам.
Я конечно не электронщик, но считал что реле служит для питание нагрузки :)
Вообщем 5 вольт на реле подавать с блока питания отдельного ?
Я конечно не электронщик, но считал что реле служит для питание нагрузки :)
Вообщем 5 вольт на реле подавать с блока питания отдельного ?
Реле исполняет роль выключателя, но и само при этом кушает достаточно много. Кстати на SSR у вас этой проблемы не будет. Там вместо катушки вы просто зажигаете светодиод.
И вот еще что странно , сейчас вот отключил scl и sda монитора, и все работает. Но ведь питание осталось как и было. Питание монитора оставил , он светится , реле работают , таймер тоже. Напрягает только то что темные квадраты при включении второго реле исчезают , это говорит в пользу нехватки мощности так сказать.
И ведь для ардуины продают целую батарею из нескольких релюх и что то нигде не видел чтоб писали питать их отдельным БП :(
Если 5В будете подавть от отдельно блока питания, не забудьте соединить GND иначе работать не будет.
В чипдипе SSR стоят заоблачно чтото . Их буду брать после праздников уже. Сейчас буду думать где взять папу для подключения реле от БП. Спасибо вам за толковые разъяснения ламеру.
И вот еще что странно , сейчас вот отключил scl и sda монитора, и все работает. Но ведь питание осталось как и было. Питание монитора оставил , он светится , реле работают , таймер тоже. Напрягает только то что темные квадраты при включении второго реле исчезают , это говорит в пользу нехватки мощности так сказать.
И ведь для ардуины продают целую батарею из нескольких релюх и что то нигде не видел чтоб писали питать их отдельным БП :(
А они про это и не напишут. Это подразумевается в самой концепции ардуины.
я думаю маму купить , ее воткнуть в штекер БП , а с контактов мамы подпоятся двумя + и двумя - к релюхам. Так ? Или землю можно оставить с ардуины ?
Вы паять хоть немного умеете? Берете КРЕН5, по фашистским аналогам надо даташит смотреть, которая на 5В. Там три детали всего. Радиатор скорее всего не понадобится.
Ваши релюшки на фото плохо видно, а я такие шилды не юзал. Там как разъемы обозначены?
Да у меня БП на 5вольт валяется валом от всяких телефонов планшетов , дамаю папу купить и к нему подпоять провода для релюх. Так можно ?
+ - сигнал
получится + и - с БП , а сигнал с ардуины .
В принципе можно штекер откусить , но БП портить неохото
Да у меня БП на 5вольт валяется валом от всяких телефонов планшетов , дамаю папу купить и к нему подпоять провода для релюх. Так можно ?
Можно так, можно просто к проводам подпаятся (если уже не нужен). Только в этом варианте GND соединить.
О , нашел БП от Нокии на 5 вольт с уже отрезаным штекером , но он на 350мА. Пойдет ?
получится + и - с БП , а сигнал с ардуины .
"-" соединить с "-" ардуины, остальное правильно.
О , нашел БП от Нокии на 5 вольт с уже отрезаным штекером , но он на 350мА. Пойдет ?
Должен подойти, только полярность не попутайте.
а как узнать какой + ? :) тестер есть
походу черный + , белый минус ?
а как узнать какой + ? :) тестер есть
Померяйте на ардуине +5 и GND, при замере на БП знак должен быть такой же.
походу черный + , белый минус ?
А это зависит от настроения китайца, который все это распаивал.
понял спс
а минус с БП просто воткнуть в любой граунд ардуины ?
а минус с БП просто воткнуть в любой граунд ардуины ?
Да