Не срабатывает твердотельное рэле
- Войдите на сайт для отправки комментариев
Пт, 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 мА запускается нормально, так что транзистор особо и не требуется.
Именно это и имел ввиду.