Падение напряжения на выводах ардуино при подключении реле

bablja

✩✩✩✩✩✩✩
17 Июл 2019
15
0
Делаю контроллер для аквариума с кормухой и релюхами для включения фильтра, подогрева и светодиодных лент для подсветки аквариума. У меня 2 реле. Одно твердотельное, второе обычное. Вот обычное отказывается срабатывать. Замерил напряжение на выводах ардуино адресованных этому реле и там вместо положенных 5v всего 1.2v. Не пойму в чем проблема. Такая же проблема на пине с подсветкой дисплея, там 2.4v.
Код прилагаю. Схема ниже.
мой код:
#include <Stepper.h>  //
#include <iarduino_RTC.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define STEPS 200 //
//#define pin_SW_SDA 4
//#define pin_SW_SCL 5
#define B 3950 // B-коэффициент
#define SERIAL_R 10000 // сопротивление последовательного резистора, 10 кОм
#define THERMISTOR_R 10000 // номинальное сопротивления термистора, 10 кОм
#define NOMINAL_T 25 // номинальная температура (при которой TR = 10 кОм)
iarduino_RTC time(RTC_DS3231);
Stepper motor(STEPS, 9, 10, 11, 12);//
LiquidCrystal_I2C lcd(0x3f, 16, 2);
const byte tempPin = A0;

void setup()
{
  pinMode( tempPin, INPUT );
  lcd.init(); // иницилизируем ЖК
  lcd.backlight(); // включаем подсветку дисплея
  motor.setSpeed(60); //
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  delay(300);
  Serial.begin(9600);
  time.begin();
  //time.settime(30,9,18,30,01,21,6);  //   сек,  мин,  час, число, месяц, год, вторник
  digitalWrite(3, OUTPUT);   //Подсветка дисплея
  digitalWrite(5, LOW);   //красные светодиоды
  digitalWrite(6, LOW);   // белые светодиоды
  digitalWrite(7, LOW);   //Термо верхняя розетка
  digitalWrite(8, LOW);   //Фильтр нижняя розетка
}
void stopen()
{
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  digitalWrite(12, LOW);
}
void loop()
{
  int a = ((time.Hours * 100) + time.minutes);
  if (millis() % 1000 == 0) { // если прошла 1 секунда
    Serial.println(time.gettime("d-m-Y, H:i:s, D")); // выводим время

    // Время комления
    if (time.Hours == 7 && time.minutes == 20 && time.seconds == 0 )// ВРЕМЯ 1 КОРМЛЕНИЯ
    {
      motor.step(256);
      stopen();
    }
    if (time.Hours == 20 && time.minutes == 00 && time.seconds == 00 )// ВРЕМЯ 2 КОРМЛЕНИЯ
    {
      motor.step(256);
      stopen();
    }

    //Подсветка дисплея
    if (a >= 600 && a <= 2100 )//Включение Подсветки дисплея c 6 до 21
      digitalWrite(3, HIGH);
    else
      digitalWrite(3, LOW);

    //Включение фильтра
    if (a >= 800 && a <= 1958 )//включение фильтра после кормления c 8 до 19.59
    {
      digitalWrite(8, HIGH);
    }
    else  if (a >= 2020 && a <= 2130 )//включение фильтра после 2 кормления c 20.20 до 21.30
    {
      digitalWrite(8, HIGH);
    }
    else
      digitalWrite(8, LOW);

    //  настройки включения лент светодиодов
    // Красная подсветка
    if (a >= 630 && a <= 1634 )//Включение крвсносин ленты c 6.30 - 9.30
    {
      digitalWrite(6, HIGH);
    }
    else if (a >= 1900 && a <= 2200 )//Включение крвсносин ленты c 19.0 - 21.30
    {
      digitalWrite(6, HIGH);
    }
    else
      digitalWrite(6, LOW);
    // Белая подсветка
    if (a >= 1800 && a <= 1955 )//Включение подсветки белой c 18.00 - 19.55
      digitalWrite(5, HIGH);

    else
      digitalWrite(5, HIGH);

    {
      //if (millis() % 1000 == 0) { // если прошла 1 секунда
      //Serial.println(time.gettime("d-m-Y, H:i:s, D")); // выводим время
      int t = analogRead( tempPin );
      float tr = 1023.0 / t - 1;
      tr = SERIAL_R / tr;
      Serial.print("R=");
      Serial.print(tr);
      Serial.print(",t= ");
      float settemper = 24;  // установка температуры
      float hyster = 1;  // ширина окна гистерезиса
      float steinhart;
      steinhart = tr / THERMISTOR_R; // (R/Ro)
      steinhart = log(steinhart); // ln(R/Ro)
      steinhart /= B; // 1/B * ln(R/Ro)
      steinhart += 1.0 / (NOMINAL_T + 273.15); // + (1/To)
      steinhart = 1.0 / steinhart; // Invert
      steinhart -= 273.15;
      Serial.println(steinhart);

      lcd.setCursor(0, 0);
      lcd.print ("Temper" );
      lcd.setCursor(8, 0);
      lcd.print(steinhart);
      lcd.setCursor(14, 0);
      lcd.print("'C");

      lcd.setCursor(0, 1);
      lcd.print("Vremya");
      lcd.setCursor(8, 1);
      lcd.print(time.gettime("H:i:s")) ;


      // настройка гестерезиса
      if  ((steinhart <= (settemper - hyster )) ) //при понижении до .... вкл
      { digitalWrite(7, HIGH);
      } else if    ((steinhart >= (settemper + hyster ))) //при повышении до .... выкл
      { digitalWrite(7, LOW)  ;
      }
    }
  }
}
// подключение шагового двигателя
// ардуино----------драйвер   вращение против часовой   вращение по часовой
// пин 9--------------пин in        1                           4
// пин 10-------------пин in        3                           2
// пин 11-------------пин in        2                           3
// пин 12-------------пин in        4                           1
 

Вложения