Не срабатывает твердотельное рэле
- Войдите на сайт для отправки комментариев
Пт, 04/02/2022 - 19:58
Всем здравствуйте! Собираю проэкт управление обогревом комнаты на основе этой темы
http://arduino.ru/forum/proekty/upravlenie-obogrevom-komnaty-pri-pomoshchi-arduino-i-dallas18b20
Скетч немного доработал под себя
#include <OneWire.h>
OneWire oneWire(2);
#include <DallasTemperature.h>
DallasTemperature sensors(&oneWire);
DeviceAddress tempDeviceAddress;
float temp1=0;
int setTmp=20;
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
#define BACKLIGHT_PIN 10
boolean backlightStatus = 1;
#include <EEPROM2.h>
#define RELAY_PIN 11
boolean relayStatus1=LOW;
long previousMillis1 = 0;
long interval1 = 1000;
#define KEYPAD_PIN A0
#define ButtonUp_LOW 90
#define ButtonUp_HIGH 200
#define ButtonDown_LOW 210
#define ButtonDown_HIGH 380
#define ButtonLeft_LOW 390
#define ButtonLeft_HIGH 600
#define ButtonRight_LOW 0
#define ButtonRight_HIGH 80
#define ButtonSelect_LOW 620
#define ButtonSelect_HIGH 800
void setup() {
sensors.getAddress(tempDeviceAddress, 0);
sensors.setResolution(12);
pinMode(BACKLIGHT_PIN, OUTPUT);
digitalWrite(BACKLIGHT_PIN, backlightStatus);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print(" ArDuInKo ");
lcd.setCursor(0, 1);
lcd.print(" v1.0 ");
delay(3000);
lcd.setCursor(0, 1);
lcd.print(" Set temp: ");
lcd.setCursor(12,1);
lcd.print(setTmp);
delay(3000);
lcd.begin(16, 2);
}
int ReadKey(int keyPin)
{
int KeyNum=0;
int KeyValue1=0;
int KeyValue2=0;
do {
KeyValue1=analogRead(keyPin);
KeyValue2=analogRead(keyPin);
} while (KeyValue1==KeyValue2&&KeyValue2!=1023);
if (KeyValue2<ButtonUp_HIGH&&KeyValue2>ButtonUp_LOW) {KeyNum=1;}//Up
if (KeyValue2<ButtonDown_HIGH&&KeyValue2>ButtonDown_LOW) {KeyNum=2;}//Down
if (KeyValue2<ButtonLeft_HIGH&&KeyValue2>ButtonLeft_LOW) {KeyNum=3;}//Left
if (KeyValue2<ButtonRight_HIGH&&KeyValue2>ButtonRight_LOW) {KeyNum=4;}//Right
if (KeyValue2<ButtonSelect_HIGH&&KeyValue2>ButtonSelect_LOW) {KeyNum=5;}//Select
return KeyNum;
}
void setTemperature() {
int keyCode=0;
lcd.begin(16,2);
lcd.setCursor(0, 0);
lcd.print(" Setting temp ");
lcd.setCursor(7, 1);
lcd.print(setTmp);
do {
keyCode=ReadKey(KEYPAD_PIN);
if (keyCode==1){setTmp++;delay(200);lcd.setCursor(7, 1);lcd.print(setTmp);}
if (keyCode==2){setTmp--;delay(200);lcd.setCursor(7, 1);lcd.print(setTmp);}
} while (keyCode!=5 && keyCode!=4);
delay(200);
(keyCode==5);{EEPROM.write(0, setTmp);}
if (keyCode==4);{setTmp = EEPROM.read(0);}
}
void loop() {
unsigned long currentMillis1 = millis();
if(currentMillis1 - previousMillis1 > interval1) {
previousMillis1 = currentMillis1;
sensors.setWaitForConversion(false);
sensors.requestTemperatures();
sensors.setWaitForConversion(true);
Delay(1000);
sensors.getAddress(tempDeviceAddress, 0);
temp1=sensors.getTempC(tempDeviceAddress);
lcd.setCursor(0, 0);
lcd.print(" Current temp ");
lcd.setCursor(5, 1);
lcd.print(temp1);
Serial.println(temp1,4);
}
if (temp1<setTmp&&relayStatus1==LOW){relayStatus1=HIGH; digitalWrite(RELAY_PIN,HIGH);}
if (temp1>setTmp&&relayStatus1==HIGH){relayStatus1=LOW; digitalWrite(RELAY_PIN,LOW);}
int Feature = ReadKey(KEYPAD_PIN);
if (Feature==1 ) {backlightStatus=1;digitalWrite(BACKLIGHT_PIN, backlightStatus);}
if (Feature==2 ) {backlightStatus=0;digitalWrite(BACKLIGHT_PIN, backlightStatus);}
if (Feature==5 ) {delay(200);setTemperature();}
}
Все железо идентичное, запитывается схема от не стабилизированного источника 12в 1,2а на разъём вин.
Вообщем-то схема работает, когда температура ниже установленной на пине 11 появляется 4,5 вольта, но когда подключаю рэле напряжение проседает до 0.96. Землю на рэле беру напрямую с бп.
Рэле вот такое

Рэле проверял источником тока 5вольт 1 ампер(зарядкой от мобилы) - работает.
Кому не лень, помогите разобраться пожалуйста.
забыл добавить - использую китайскую ардуино нано
где pinMode на RELAY_PIN?
Спасибо за наводку, сейчас разберусь - поправлю
Ещё раз спасибо, все заработало. Ошибка нелепая, но новичку надеюсь простительно))
Вообще-то, это реле лучше прямо на пин не цеплять, а подключать через транзистор, как вот в этом руководстве на стр. 3.
Вообще-то, это реле лучше прямо на пин не цеплять, а подключать через транзистор, как вот в этом руководстве на стр. 3.
ну во первых, руководство от другого реле, а во вторых, зачем??
Транзистор в идеале. Но там на входе что-то вроде обычной моськи должно быть. 5-15 mA. Можно и с ноги?
Транзистор в идеале. Но там на входе что-то вроде обычной моськи должно быть. 5-15 mA. Можно и с ноги?
зачем тут еще один транзистор?
а так да, в идеале можно еще одну оптопару подкинуть.
Транзистор в идеале. Но там на входе что-то вроде обычной моськи должно быть. 5-15 mA. Можно и с ноги?
зачем тут еще один транзистор?
а так да, в идеале можно еще одну оптопару подкинуть.
Ну в китайских SSR транзистора нет. Там стот моська с конролем перехода через 0 (типа 3041), несколько резюков, симистор и снаббер ему паралельно. Моська от 3-4 мА запускается нормально, так что транзистор особо и не требуется.
Стоит учесть что заявленные токи такие SSR долго не держат, стоит брать минимум с 2х кратным запасом. Т.е. если нагрузка 15А SSR надо брать на 40А
Транзистор в идеале. Но там на входе что-то вроде обычной моськи должно быть. 5-15 mA. Можно и с ноги?
зачем тут еще один транзистор?
Я то почем знаю? Вопрос не в то окно
Ну в китайских SSR транзистора нет. Там стот моська с конролем перехода через 0 (типа 3041), несколько резюков, симистор и снаббер ему паралельно. Моська от 3-4 мА запускается нормально, так что транзистор особо и не требуется.
Именно это и имел ввиду.