Помогите пожалуйста я новичок!

bwn
Offline
Зарегистрирован: 25.08.2014

DanilRyzhov, давайте понимать, что МК питается от напряжения 5В (может меньше). Подавая 9-12 от достаточно мощного источника вы обеспечиваете его теми же 5В от стабилизатора на плате (попутно увеличивая энтропию). Вывод - запитав плату от качественного источника в 5В, результат будет тем же. Если и идти покупать, то брать качественный БП на 5В. Брать на 12 или 9 имеет смысл, если эти напряжения требуются для питания дополнительного оборудования.

Andreyko
Offline
Зарегистрирован: 15.01.2017

А можно вопрос, почему нельзя  сделать одну функцию  и вызывать ет ее с параметрами.

 

Я не  спец  возможно  пример с ошибками

 но такой  код был бы  гораздо  удобнее, или  может я не  прав?

 


void loop()
   {

void zvonokday(1, 5, 8, 30,00);//Понедельник
void zvonokday(1, 5, 9, 15,00);//Вторник
void zvonokday(1, 5, 8, 25,00);//среда и тд.
}



void zvonokday(int d, int h, int m, int second)
if (day >= d && day <= d && hour == h && minute == m && second == s){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }
 
 }

 

 

 
bwn
Offline
Зарегистрирован: 25.08.2014

Andreyko пишет:

А можно вопрос, почему нельзя  сделать одну функцию  и вызывать ет ее с параметрами.

Вы наверно пропустили пост ЕвгенияП, где было предложено, чтобы ребята сперва все доделали сами, а потом уже заниматься оптимизациями и улучшениями.

DanilRyzhov
Offline
Зарегистрирован: 26.03.2017

Короче эти 2 дня мы занимались решениями ложных срабатываний(пытались) в итоге них#ра не получилось... Сначала хотели поправить время в итоге оно не хотело бл@ть туда заливаться! Его заливаешь(скетч), а время остаётся прежним, но это еще пол беды все-таки получилось его залить, только теперь они уходят на минуту вперед! Ели как залили туда прежний скетч и он вообще не работал причем один день назад все было ок. Решили убрать вообще дни и субботу так как меняли мы время в обед, а ложное было с утра все поубирали заработало, только вот блин опять с этими сраными ложными срабатываниями! Решили пока все оставить так и ходить ее перезагружать все было ок но потом после перезагрузки он все-равно подал ложный звонок! Что блин за мистика???? Теперь думаем присобачить костыль туда в виде реле, которое будет размыкать цепь звонков на 5 минут после звонка, чтобы ложных не было слышно. Есть ли смысл в этом? После ложного он начинает нормально дальше работать до следующего ложного и т.д. P.S. подали ему питание 9, а не 5V на всякий случай.

DanilRyzhov
Offline
Зарегистрирован: 26.03.2017

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

 До следующего ложного я имею ввиду, что подает нормально все звонки после ложного, пока ложное не сработает и т.д. ( ложное происходит где-то через минуту после нормального)

 

 

 

bwn
Offline
Зарегистрирован: 25.08.2014

DanilRyzhov пишет:
После ложного он начинает нормально дальше работать до следующего ложного и т.д. P.S. подали ему питание 9, а не 5V на всякий случай.

"Случаи разные бывают", сказал Ржевский и намазал вазелином задницу.((((

uno
Offline
Зарегистрирован: 16.06.2016

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

DanilRyzhov
Offline
Зарегистрирован: 26.03.2017

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

#include <Wire.h>
#include <DS3231.h>

int Rele = 7;
int Green = 5; //пин зеленый светодиод
int Blue = 9; //пин синий светодиод
int Red = 11; //пин красный светодиод
int Switch = 3; //выключатель на корпусе
int Rele2 = 4; // второе реле "костыль"
DS3231 Clock;
bool h12 = false;
bool PM;
bool Century;

void setup() {

Wire.begin();
pinMode(Rele, OUTPUT);
digitalWrite(Rele, HIGH);
pinMode(Green, OUTPUT);
pinMode(Blue, OUTPUT);
pinMode(Red, OUTPUT);
pinMode(Switch, INPUT);//переключение буднего и выходного дня
pinMode(Rele, OUTPUT);
digitalWrite(Rele2, HIGH);//это и есть наш "костыль" в виде 2 реле которое будет поглащать ложные срабатывания
digitalWrite(Green, HIGH);
}

void loop() {

int second, minute, hour;
hour = Clock.getHour(h12, PM);
minute = Clock.getMinute();
second = Clock.getSecond();

if (digitalWrite(Rele) == LOW){
  delay(8500);
  digitalWrite(Rele2, LOW);
  millis(480000);// вот сюда нужна задержка на 8 минут
  digitalWrite(Rele2, HIGH);
}

if (digitalWrite(Switch) == HIGH);{
 digitalWrite(Red, HIGH); //зажигаем красный светодиод
 if (hour == 8 && minute == 30 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }

  if (hour == 9 && minute == 15 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }

  if (hour == 9 && minute == 50 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }

  if (hour == 10 && minute == 10 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }

  if (hour == 10 && minute == 20 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }

  if (&& hour == 11 && minute == 05 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }


  if (hour == 11 && minute == 15 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }

  if (hour == 12 && minute == 00 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }

  if (hour == 12 && minute == 10 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }

  if (hour == 12 && minute == 55 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }

  if (hour == 13 && minute == 05 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }

  if (hour == 13 && minute == 50 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }

  if (hour == 14 && minute == 00 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }

  if (hour == 14 && minute == 45 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }

  if (hour == 14 && minute == 55 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }

  if (hour == 15 && minute == 40 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }
}
 else
 {
  digitalWrite(Red, LOW);
  if (hour == 8 && minute == 30 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
}

if (hour == 9 && minute == 15 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
}

 if (hour == 9 && minute == 25 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }

 if (hour == 10 && minute == 10 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }

 if (hour == 10 && minute == 25 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }

 if (hour == 11 && minute == 10 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }

 if (hour == 11 && minute == 30 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }

 if (hour == 12 && minute == 15 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }

 if (hour == 12 && minute == 30 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }

 if (hour == 13 && minute == 15 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }

 if (hour == 13 && minute == 25 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }

 if (hour == 14 && minute == 10 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }

 if (hour == 14 && minute == 20 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }

 if (hour == 15 && minute == 05 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }

 if (hour == 15 && minute == 25 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }

 if (hour == 16 && minute == 10 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }

 if (hour == 16 && minute == 30 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }

 if (hour == 17 && minute == 15 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }

 if (hour == 17 && minute == 25 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }

 if (hour == 18 && minute == 10 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }

 if (hour == 18 && minute == 20 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }

 if (hour == 19 && minute == 05 && second == 00){
  digitalWrite(Rele, LOW);
  digitalWrite(Blue, HIGH);
  delay(8000);
  digitalWrite(Blue, LOW);
  digitalWrite(Rele, HIGH);
 }
 }

 }
 

Проверьте пожалуйста правильность программы. Второе реле("костыль") уже и будет управлять контактором "сжирая" ложные срабатывания

 

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

delay(8000);

проверил.

uno
Offline
Зарегистрирован: 16.06.2016

Мне ненравится секонд ==00. на какомто  милтс или секонд задержались больше чем на секунду и реле не сработает

ulis
ulis аватар
Offline
Зарегистрирован: 09.03.2011

Проверьте пожалуйста правильность программы. Второе реле("костыль") уже и будет управлять контактором "сжирая" ложные срабатывания

А в каком месте вы часам присваиваете правильное время и дату? Или я слепой?

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

А мой код  из #49 поста пробовали???

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

vosara пишет:

А мой код  из #49 поста пробовали???

я запретил.

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

Я так больше не могу. Я вижу параметр у вызова millis(), я вижу кучу одинаковых строк, да еще и оформленных некрасиво, ЕвгенийП хотел чтобы сами, но я больше не могу.

"Детектив, я вовсе не плохая, меня такой нарисовали" (c) Jessica Rabbit.

Афтар, пробуйте такой вариант:

#include <Wire.h>
#include <DS3231.h>

#define Relay (7)
#define Green (5)  // пин зеленый светодиод
#define Blue  (9)  // пин синий светодиод
#define Red   (11) // пин красный светодиод

DS3231 Clock;
bool h12 = false;
bool PM;
bool Century;
bool preventflag=0;
unsigned long preventtime=millis(),
              ringtime=millis();

void setup(){
  Wire.begin();
  pinMode(Relay, OUTPUT);
  digitalWrite(Relay, HIGH);
  pinMode(Green, OUTPUT);
  pinMode(Blue, OUTPUT);
  pinMode(Red, OUTPUT);
}

void loop(){
  int second, minute, hour, day;
  day    = Clock.getDoW();
  hour   = Clock.getHour(h12, PM);
  minute = Clock.getMinute();
  second = Clock.getSecond();
  digitalWrite(Green, HIGH);

  #define modemon (day >= 1 && day <= 5 && second >= 0)
  #define modesat (day == 6             && second >= 0)

  if (modemon && !preventflag && hour == 8  && minute == 30) relayfunc();
  if (modemon && !preventflag && hour == 9  && minute == 15) relayfunc();
  if (modemon && !preventflag && hour == 9  && minute == 25) relayfunc();
  if (modemon && !preventflag && hour == 10 && minute == 10) relayfunc();
  if (modemon && !preventflag && hour == 10 && minute == 25) relayfunc();
  if (modemon && !preventflag && hour == 11 && minute == 10) relayfunc();
  if (modemon && !preventflag && hour == 11 && minute == 30) relayfunc();
  if (modemon && !preventflag && hour == 12 && minute == 15) relayfunc();
  if (modemon && !preventflag && hour == 12 && minute == 30) relayfunc();
  if (modemon && !preventflag && hour == 13 && minute == 15) relayfunc();
  if (modemon && !preventflag && hour == 13 && minute == 25) relayfunc();
  if (modemon && !preventflag && hour == 14 && minute == 10) relayfunc();
  if (modemon && !preventflag && hour == 14 && minute == 20) relayfunc();
  if (modemon && !preventflag && hour == 15 && minute == 5 ) relayfunc();
  if (modemon && !preventflag && hour == 15 && minute == 25) relayfunc();
  if (modemon && !preventflag && hour == 16 && minute == 10) relayfunc();
  if (modemon && !preventflag && hour == 16 && minute == 30) relayfunc();
  if (modemon && !preventflag && hour == 17 && minute == 15) relayfunc();
  if (modemon && !preventflag && hour == 17 && minute == 25) relayfunc();
  if (modemon && !preventflag && hour == 18 && minute == 10) relayfunc();
  if (modemon && !preventflag && hour == 18 && minute == 20) relayfunc();
  if (modemon && !preventflag && hour == 19 && minute == 05) relayfunc();
  if (modesat && !preventflag && hour == 8  && minute == 30) relayfunc();
  if (modesat && !preventflag && hour == 9  && minute == 15) relayfunc();
  if (modesat && !preventflag && hour == 9  && minute == 50) relayfunc();
  if (modesat && !preventflag && hour == 10 && minute == 10) relayfunc();
  if (modesat && !preventflag && hour == 10 && minute == 20) relayfunc();
  if (modesat && !preventflag && hour == 11 && minute == 05) relayfunc();
  if (modesat && !preventflag && hour == 11 && minute == 15) relayfunc();
  if (modesat && !preventflag && hour == 12 && minute == 0 ) relayfunc();
  if (modesat && !preventflag && hour == 12 && minute == 10) relayfunc();
  if (modesat && !preventflag && hour == 12 && minute == 55) relayfunc();
  if (modesat && !preventflag && hour == 13 && minute == 05) relayfunc();
  if (modesat && !preventflag && hour == 13 && minute == 50) relayfunc();
  if (modesat && !preventflag && hour == 14 && minute == 0 ) relayfunc();
  if (modesat && !preventflag && hour == 14 && minute == 45) relayfunc();
  if (modesat && !preventflag && hour == 14 && minute == 55) relayfunc();
  if (modesat && !preventflag && hour == 15 && minute == 40) relayfunc();
  if(millis()-ringtime<=8000){
    digitalWrite(Relay, LOW);
    digitalWrite(Blue,  HIGH);
  }else{
    digitalWrite(Blue,  LOW);
    digitalWrite(Relay, HIGH);
  }
  if(millis()-preventtime>=300000) preventflag=0;
}

void relayfunc(){
  ringtime=millis();
  preventtime=millis();
  preventflag=1;
}

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

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Теперь хоть знаем, кто такая - (c) Jessica Rabbit. )))

ulis
ulis аватар
Offline
Зарегистрирован: 09.03.2011

Voodoo Doll пишет:

Я так больше не могу.

Я уже давно пустил себе пулю в лоб .... 

uno
Offline
Зарегистрирован: 16.06.2016

Voodoo Doll пишет:

Я так больше не могу. Я вижу параметр у вызова millis(), я вижу кучу одинаковых строк, да еще и оформленных некрасиво, ЕвгенийП хотел чтобы сами, но я больше не могу.

Да ну навик вместо массива с продолжительностью 11 переменных и цикла куча строк кода.

Glebiys
Offline
Зарегистрирован: 26.03.2017

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

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

Номинал резистора, смотрящего в базу транзистора не указан - он вас не интересует и зависит от напряжения питания релейной платы, обычно он мало отличается от 1k. Транзистор уже присутствует на релейной плате, ну если это классическая синенькая/чёрненькая китайская плата. У вас это транзистор PNP т. к. вход платы - активный ноль (обмотка включена если на входе ноль, отключена если единица). В общем, диод 1N4007 (или 1N4148, не суть), транзистор и резистор образуют обвязку реле на релейной плате, дальше на ней стоят колодки, в которые вкручиваются провода. На плате нет мощного резистора 39 Ом и высоковольтного конденсатора 0.01-0.1 мкФ, эти элементы называются суппрессором, снаббером, глушителем, искрогасящей цепочкой или защитой контактов. Эта цепочка расплющивает (растягивает во времени) импульсную помеху, возникающую в момент коммутации - большой по амплитуде бросок напряжения, порождающий большой кратковременный ток через контакты, повышающий их температуру (уменьшающий ресурс реле) и в том числе наводящий наносекундную помеху на остальные участки цепи. Чтобы эта помеха не проникла в слаботочную часть (arduino), релейная плата отделяется опторазвязкой (на вашей плате отсутствует). Все что нужно, это только докупить оптопару (PC817 или что-то четырёхногое, у чего на корпусе есть цифры 817, буквы могут быть другими или отсутствовать) и резистор, достаточно маленький для убедительного тока через светодиод оптопары, достаточно большой чтобы этот светодиод не сжечь, для адруины на 5 вольтах это 240-470 Ом; а также отдельный БП на напряжение реле для релейной платы. Резистор 330 Ом в самый раз. Диод, стоящий задом наперед и керамический конденсатор также съедают (фильтруют) некоторые кратковременные помехи в слаботочных цепях, они как правило возникают в длинных проводах (длинные - это длиннее двух метров), в вашем случае они необязательны.

Дроссель, керамический конденсатор и большой электролит есть в качественных адаптерах питания, ставьте внешний если БП выглядит на дешёвую залипуху. Позади линейного стабилизатора особых пульсаций не возникнет, так что и без этих дел в целом ардуина неплохо защищена от помех, главное не питать ей (ардуиной) мощные нагрузки. У вас всеми нагрузками ардуины будут светодиоды - два внешних, один в опторазвязке. Короче, конденсатор 6800 мкФ с дросселем желательны, необязательны. Конденсатор 0.1 мкФ уже есть на плате, они вообще везде стоят возле каждой микросхемы, но лишним он тоже не будет.

Теперь главное. Минус питания реле (от 5-12вольтового блока), и минус ардуины, светодиодов, часов, общий провод и т. п. - это разные минусы (на схеме специально подписано), их разделяет опторазвязка. У вас насколько я понимаю, блок был один на всё и минус реле (то есть эмиттер транзистора) соединён с общим. Уберите, надо раздельно. Для реле должен быть свой собственный БП.

Если после этого будут проблемы с лишними сигналами, остаётся последнее чего вы не проверяли - библиотека DS3231 и часы. Вряд-ли там что-то будет, такие вещи не ломаются.

В коде нет ничего, что выполняется дольше 2 с, так что можно ещё будет включить WDT.

В первую очередь сделайте отдельное питание реле с оптопарой, потом можно думать по снабберу (39 Ом 0.01 мкФ параллельно контактам). В большинстве случаев после оптики вопросов за снаббер не возникает, всех устраивает без него (но по хорошему надо).

ulis
ulis аватар
Offline
Зарегистрирован: 09.03.2011

Voodoo Doll пишет:

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

Ну мучьте ребят опторазвязками, они тут не нужны, реле само по себе - хорошая развязка

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

ulis пишет:
реле само по себе - хорошая развязка

Кукла Вуду тоже так думала, коммутируя светодиодные лампы ElectroStandard с вооооооооот таким электролитом внутри, подключенным к сети через выпрямитель на четырёх 1N4007, без всяких резисторов. Эх, детство, волшебная пора наивности и любопытства...

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Voodoo Doll пишет:

ulis пишет:
реле само по себе - хорошая развязка

Кукла Вуду тоже так думала, коммутируя светодиодные лампы ElectroStandard с вооооооооот таким электролитом внутри, подключенным к сети через выпрямитель на четырёх 1N4007, без всяких резисторов. Эх, детство, волшебная пора наивности и любопытства...

Земли надо соединять в одной точке (точка ввода питания) в строгом соответствии с правилами ПУЭ )))
и токи заряда подсчитывать ес-но ))) без балластного резистора низзя, у меня как-то и с балластным но на больших банках в КД202Р диодах пусковой сквозные дырки в корпусе оных прожёг )))

ulis
ulis аватар
Offline
Зарегистрирован: 09.03.2011

ua6em пишет:

Voodoo Doll пишет:

ulis пишет:
реле само по себе - хорошая развязка

Кукла Вуду тоже так думала, коммутируя светодиодные лампы ElectroStandard с вооооооооот таким электролитом внутри, подключенным к сети через выпрямитель на четырёх 1N4007, без всяких резисторов. Эх, детство, волшебная пора наивности и любопытства...

Земли надо соединять в одной точке (точка ввода питания) в строгом соответствии с правилами ПУЭ )))
и токи заряда подсчитывать ес-но ))) без балластного резистора низзя, у меня как-то и с балластным но на больших банках в КД202Р диодах пусковой сквозные дырки в корпусе оных прожёг )))

Ага, и кабель позолоченный должен быть и емкости звуковые по 20 баксов за штуку, а опахалом наводки отгонять ....

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ulis пишет:

Ага, и кабель позолоченный должен быть и емкости звуковые по 20 баксов за штуку, а опахалом наводки отгонять ....

и что вы имеете против ПУЭ? Он же кровью пишется

bwn
Offline
Зарегистрирован: 25.08.2014

ua6em пишет:

ulis пишет:

Ага, и кабель позолоченный должен быть и емкости звуковые по 20 баксов за штуку, а опахалом наводки отгонять ....

и что вы имеете против ПУЭ? Он же кровью пишется

Ведь написано, мудила,
Не влезай, убьёт.
Убило.
Следом лезет обормот,
С криком - Всех не перебьёт

(Шаов.Т)

ulis
ulis аватар
Offline
Зарегистрирован: 09.03.2011

ua6em пишет:

и что вы имеете против ПУЭ? Он же кровью пишется

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

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

bwn пишет:

ua6em пишет:

ulis пишет:

Ага, и кабель позолоченный должен быть и емкости звуковые по 20 баксов за штуку, а опахалом наводки отгонять ....

и что вы имеете против ПУЭ? Он же кровью пишется

Ведь написано, мудила,
Не влезай, убьёт.
Убило.
Следом лезет обормот,
С криком - Всех не перебьёт

(Шаов.Т)

Тима он такой ))) точно подмечает, гений одним словом, кстати, этот случай не помню, надо спросить

bwn
Offline
Зарегистрирован: 25.08.2014

ua6em пишет:

Тима он такой ))) точно подмечает, гений одним словом, кстати, этот случай не помню, надо спросить

Частушки пофигушки. Слова чуть переврал, суть таже, староват становлюсь.))))

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

частушки помню, по жизни с кем было не помню, он жеж из личного опыта всё черпает

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013
DanilRyzhov
Offline
Зарегистрирован: 26.03.2017

Здравствуйте! Огромное спасибо за код!  Ложные срабатывания прекратились! Только есть одна проблема и вопрос: Как только в ящик приходит питание он замыкает цепь звонков на 8 сек и начинает после этого благополучно работать можно ли как-нибудь убрать это? Потому что если отключат свет(такое уже было) при включении он сразу звенит и сбивает всех с толку... А теперь проблема: Когда первый раз залили код он подал звонок по субботнему расписанию после этого мы его закоментировали(субботнее расписание) и эта проблема решилась. Как это исправить?

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016
unsigned long preventtime=millis(),
              ringtime=millis()+8000;
gulin176
Offline
Зарегистрирован: 03.09.2016

подскажите в последнем ардуино иде не заработало строка #include <Wire.h>

а строка #include "Wire.h" заработала

подскажите библиотеки теперь все помечать "" или это случайность какая то

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

#include "Wire.h" ищет библиотеки от папки скетча, удобно, когда вы правите библитеки, изменённые держим в папке скетча, стандартные могут находится еще в трёх местах )))

SLKH
Offline
Зарегистрирован: 17.08.2015

DanilRyzhov пишет:

 А теперь проблема: Когда первый раз залили код он подал звонок по субботнему расписанию после этого мы его закоментировали(субботнее расписание) и эта проблема решилась. Как это исправить?

На всякий случай проверь, какой день недели выдают часы (выведи  дату/время/день в монитор порта). 

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

gulin176 пишет:

подскажите в последнем ардуино иде не заработало строка #include <Wire.h>

а строка #include "Wire.h" заработала

подскажите библиотеки теперь все помечать "" или это случайность какая то

Это не случайность.

При  <> папка с библиотекой должна лежать в Мои документы\Arduino\libraries\

При "" библиотека должна лежать в папке со скетчем.

Skillet666
Offline
Зарегистрирован: 28.03.2018

Можете схему заново залить, ибо очень уж нужна