Реле школьного звонка #2

Alexhhhhgf

✩✩✩✩✩✩✩
14 Апр 2024
42
0
Доброго времени суток, дорогие форумчане!
Как многие знают, кто видел этот пост я пытался сделать для школы реле, которое автоматически будет включать школьный звонок. К сожалению я рано обрадовался, что всё получилось и установил звонок в школу. Через сутки код начал "зависать", реле включалось и звонок гудел пока не выключишь устройство на основе Arduino Nano . После этого я впервые зашёл на ваш форум, начал искать проблему и ничего не помогало. Морочил себе и вам голову около 3-ёх месяцев. Каждый день ходил в школу, там приходилось перезагружать ардуино после 7-ого срабатывания (на 8-ой раз реле не включалось). В прошлом обсуждении на форуме я вам много проморочил голову. В итоге решили, что надо попробывать на ESP.
Время идёт, через 10 дней начинается учёба, я уже поступил в институт, но не удобно, что в школе установил проект на Arduino и 1-ого сентября звонок не заработает.
Из-за работы не было времени разобраться в ESP 8266 и отложил я это дело на самый последний момент.
Дорогие программисты, обращаюсь с огромной просьбой попробывать написать мне код для ESP8266 (DS3231 и Reley) За адекватную стоимость. В прошлой теме есть весь код, который должен работать по идее на ESP, но только там надо поменять входы и выходы для реле, светодиодов и тумблера ( если будут проблемы со вторым расписанием, то оно не обязательно, тогда тумблер нафиг не нужен будет, так даже проще).
Готов заплатить 10000 рублей любым способом.
Последняя редакция кода прошлого проекта на Arduino Nano:
#include <RTClib.h>       // https://github.com/adafruit/RTClib
#include <TimeLib.h>      // https://github.com/PaulStoffregen/Time
DateTime time_now;

#define   relePin   2
#define   LED       4
#define   LEDD       5
#define   SWITCH_PIN    3

#define   RING_SECONDS      7

#define   TZ_OFFSET 180   // MSK

#define   HOURS     60

RTC_DS3231 rtc;


bool status_led = false;
bool status_ledd = false;

const uint16_t raspisanie[] = {
    8 * HOURS + 30,
    9 * HOURS + 15,
    9 * HOURS + 25,
    10 * HOURS + 10,
    10 * HOURS + 30,
    11 * HOURS + 15,
    11 * HOURS + 35,
    12 * HOURS + 20,
    12 * HOURS + 30,
    13 * HOURS + 15,
    13 * HOURS + 25,
    14 * HOURS + 10,
    14 * HOURS + 20,
    15 * HOURS + 5,
    15 * HOURS + 10,
    15 * HOURS + 50,
};

const uint16_t raspisanie2[] = {
    8 * HOURS + 30,
    9 * HOURS + 5,
    9 * HOURS + 10,
    9 * HOURS + 45,
    10 * HOURS + 1,
    10 * HOURS + 35,
    10 * HOURS + 50,
    11 * HOURS + 25,
    11 * HOURS + 30,
    12 * HOURS + 5,
    12 * HOURS + 10,
    12 * HOURS + 45,
    12 * HOURS + 50,
    13 * HOURS + 25,
};


void zvonok(DateTime &dt){
    for (int i = 0; i != sizeof(raspisanie)/sizeof(uint16_t); ++i ){
      if ( (dt.hour() * HOURS + dt.minute()) == raspisanie[i] ){
          digitalWrite(relePin, dt.second() < RING_SECONDS ? LOW : HIGH );
          if (dt.second() < RING_SECONDS){
              Serial.print("Raspisanie 1: Ring for ");
              Serial.print(RING_SECONDS - dt.second());
              Serial.println(" seconds more");
          }
      }
    }     
};

void zvonok2(DateTime &dt){
    for (int i = 0; i != sizeof(raspisanie2)/sizeof(uint16_t); ++i ){
      if ( (dt.hour() * HOURS + dt.minute()) == raspisanie2[i] ){
          digitalWrite(relePin, dt.second() < RING_SECONDS ? LOW : HIGH );
          if (dt.second() < RING_SECONDS){
              Serial.print("Raspisanie 2: Ring for ");
              Serial.print(RING_SECONDS - dt.second());
              Serial.println(" seconds more");
          }
      }
    }     
};


void setup() {

  pinMode(relePin, OUTPUT);       // выход на реле
  pinMode(LED, OUTPUT);           // Встроенный светодиод, например на Nano имеется...

  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);

  digitalWrite(relePin, HIGH);
  Serial.begin(9600);             // Скорость Serial-порта

  while (!rtc.begin()) {
    Serial.println("Couldn't find RTC");
    digitalWrite(LED, !digitalRead(LED));   // И мигаем при этом встроенным светодиодом, сообщая о проблеме...
    delay(200);
  }

  DateTime time_now = rtc.now();
  adjustTime(TZ_OFFSET * SECS_PER_MIN);
  setTime(time_now.hour(), time_now.minute(), time_now.second(), time_now.day(), time_now.month(), time_now.year());
}

void loop() {

    DateTime time_now = now();
    Serial.print("Raspisanie: ");
    Serial.println(digitalRead(SWITCH_PIN) ? 1 : 2 );
    Serial.print("Current Date & Time: ");
    Serial.print(time_now.year(),  DEC);
    Serial.print('/');
    Serial.print(time_now.month(),  DEC);
    Serial.print('/');
    Serial.print(time_now.day(),    DEC);
    Serial.print(" ");
    Serial.print(time_now.hour(),   DEC);
    Serial.print(':');
    Serial.print(time_now.minute(), DEC);
    Serial.print(':');
    Serial.print(time_now.second(), DEC);
    Serial.println();
  
    if (digitalRead(SWITCH_PIN)){
      zvonok(time_now);
      digitalWrite(LED, status_led);
      status_led = !status_led;
      digitalWrite(5, LOW);
    
      if (time_now.minute() == 22 && time_now.second() == 10) {
         DateTime time_now = rtc.now();
          setTime(time_now.hour(), time_now.minute(), time_now.second(), time_now.day(), time_now.month(), time_now.year());
      }
     }
  

    else {
      zvonok2(time_now);
      digitalWrite(LEDD, status_ledd);
      status_ledd = !status_led;
      digitalWrite(4, LOW);
    
       if (time_now.minute() == 22 && time_now.second() == 10) {
         DateTime time_now = rtc.now();
          setTime(time_now.hour(), time_now.minute(), time_now.second(), time_now.day(), time_now.month(), time_now.year());
       }
    }
  
   delay(1000);
}
 

Вложения

Bruzzer

★★★✩✩✩✩
23 Май 2020
472
134
@Alexhhhhgf,
Насколько я понял, в текущей версии на NANO проблема не в коде, а в какой то особенности, или компонентов или коммутации или помех. Почему вы думаете, что использование ESP8266 решит вашу проблему?
Плюс ESP в том, что упрощается управление - корректировка времени, расписания и т.д. Но это совсем другой скетч (правда 10т и в этом случае наверно достаточно). Но если дело в наводках или кривых модулях, то ESP не поможет.

За это время уже можно было много раз все проверить и найти причину.
 
  • Лойс +1
Реакции: bort707