Схема подключения

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

Здравствуйте, недавно наткнулся на такую статью как "Автоматическая подача звонков в уч. заведении". Нашел прошивку, ну не нашел схему подключения. Прошивка от Voodoo Doll. Очень нужна эта схема.

#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()+8000;

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;
}

 

Logik
Offline
Зарегистрирован: 05.08.2014

Так все просто. Светодиоды - см. строки 5-7, к указаным пинам.  Правда красный вобще не задействован, а зеленый всегда светит. Наверно скетч такой, недоделаный, что вобщем типично для мусора найденого в инете. Реле на пин 7. Его через ключь. Можно купить на али плату реле+ключь. DS3231.h на соответствующие i2c например A4, A5. Запитать от чего не жалко - вся схема. Но код стремный, так белые люди не пишут, я бы его не трогал.

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

Так и подключал, ну в протеусе как-то не так работает

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Здесь на форуме есть большая тема про подачу звонков. Ищите.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

скетч не проверял в работе.

/**/
unsigned long mill;/*переменая для millis()*/
//--------------------------------------
const byte RelayPin = 7;/*пин реле*/
unsigned long timeOFF =/*длительность работы 1 сек*/1000;

#include <Wire.h>
#include <DS3231.h>
DS3231 Clock;
bool h12 = false;
bool PM;

byte state;
unsigned long past;
enum { sSetup = 0, sOFF, sON};
void stand(byte s) {
  state = s;
  past = mill;
  switch (state) {
    case sSetup:
      pinMode(RelayPin, OUTPUT);
    case sOFF:
      digitalWrite(RelayPin, LOW);/*выключить*/
      break;
    case sON:
      digitalWrite(RelayPin, HIGH);/*включить*/
      break;
  }
}

//-----main--------------------------------
void setup() {
  Wire.begin();
  stand(sSetup);
}

void loop() {
  mill = millis();
  unsigned long nowTime = Clock.getHour(h12, PM) * 3600 + Clock.getMinute() * 60 + Clock.getSecond();
  /*задайте время включения*/
  if ( state != sON && nowTime == (unsigned long) /*час*/8 * 3600/*мин*/ * 30 * 60 */*сек*/0) stand(sON);
  /*отработка времени работы и затем отключения*/
  if (state == sON && past - mill >= timeOFF) stand(sOFF);
}
/*Скетч использует 2826 байт (9%) памяти устройства. Всего доступно 30720 байт.
  Глобальные переменные используют 228 байт (11%) динамической памяти, оставляя 1820 байт для локальных переменных. Максимум: 2048 байт.
*/

 

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

В протеусе тоже как-то странно работает, либо я что-то неправильно делаю

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Skillet666 пишет:

в протеусе как-то не так работает

Skillet666 пишет:

В протеусе тоже как-то странно работает

так, Квон, по-быстрому взял хрустальный шар и разобрался почему раньше в протеусе работало "не так", а теперь "странно". Заодно посмотри там как именно "не так" и как именно "странно" и всё поправь!

Не видишь, человеку "очень надо"! А написать толком, что ему не нравится - религия не позволяет. Вы же не собираетесь тут оскорблять религиозные чувства?

Так что рабирайтесь и по-быстрому!

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

мои программы и протеус не совместимы.Но вы дерзайте. :)