MEGA2560 + ИП-512 + Оптическая развязка.

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

Добрый день.

Прошу сразу не кидать камнями, а направить на путь истинный.

Пробелма такая есть у меня датчики ИП512 решил их попробовать подключить к Arduino на аналоговые порты через оптическую развязку.

Прикупил вот такой модуль в надежде не сжечь микроконтроллер.

Подключил 5В на OUT и GND. С датчиков соответственно управляющий сигнал + и GND. Земля у меня общая, т.к. все питается от одного БП (компьютерного).

На момент запуская все работало исправно, т.е. При сработке пожарного датчика на входе оптической развязки напряжение с 12 В падает до 6 В, но на выходе оптической развязки тоже падало в половину... При этом показания на A0-A3 скакали примерно в 512-ом диапазоне +-4. А теперь соответсвенно 1022-1023 вне зависимости от состояния пожарного датчика. Вроде схема подключения до боли понятная. Сопротивления мерял, все как на схеме.

Через некоторое время система перестала реагировать на изменения напряжения на IN. Т.е. пожарный датчик при сработке на управляющем шлейфе понижал напряжение до 6 В но на выводе с оптической развязки так и висит 5 В. А при обрыве линии должно быть 0 В, а оно всеравно не 0 В на OUT :-(

С теорией у меня туго. Максимум знания закона Ома на уровне U=I*R. Многие скажут что этого достаточно, но нет блин. Что я делаю не так?

P.S. Я обратил также внимание, что пока контроллер питался от двух источников 5В оно работало (хотя это не верно). А когда переключил контроллер на 12 В перестало работать (по ощущениям). Может нужно подпаять еще и делитель напряжения? Либо "прикупить" оптическую развязку с другими сопротивлениями? Но с какими?

Скейтч очень большой и разбит на модули. Я даже не знаю есть ли смысл его приводить здесь весь. Остальные модули работают исправно, есть правда не частые проблемы с DS18B20, но это думаю качество их производства...

/**************************************************************

   Проект создания мини системы умного дома, с двумя блоками реле,
   фотодиодными развязками, PID регулированием системы отопления,
   охранно-пожарной сигнализации, дачиков движения для управления
   освещением технических помещений и других вещей.

   Управление узлами системы выполняется через клиент-серверное
   приложение Blynk.

   Старт проекта 20.08.2018 г.

 **************************************************************

   ПРИМЕЧАНИЕ: Проект разрабатывался для платы Arduino MEGA 2560.
   В проекте были применены только готовые компоненты и платы,
   которые можно купить в магазинах типа AliExpress.
   С минимальным применением паяльника.

   ВНИМАНИЕ: Код программы представлен "как есть". Автор не 
   несёт ответственности за порчу имущества и иные последствия
   от применения кода программы.

 **************************************************************/

#define BLYNK_PRINT Serial          // Закоментируйте, чтобы сохранить место в RAM и отменить печать в COM
//#define BLYNK_DEBUG               // Вывод отладочной иформации в COM. Требует много РЕСУРСОВ!
#include <SPI.h>
#include <Ethernet.h>               // Библиотека для работы с Ethernet контроллером
#include <BlynkSimpleEthernet.h>    // Библиотека для работы Blynk по Ethernet

#include <NTPClient.h>              // NTP клиент для синхронизации времени
#include <EthernetUdp.h>            // поддержка протокола UDP
#include <Time.h>
#include <TimeLib.h>

#include <Adafruit_Sensor.h>        // Библиотека для работы с сеносорами движения
#include <DHT.h>                    // Библиотека для работы с датчиками влажности и температуры
#include <DHT_U.h>
//#include <SimpleTimer.h>            // Библиотека для работы с прерываниями
#include <PID_v1.h>                 // Библиотека ПИД регулятора для отопления
#include <OneWire.h>                // Библиотека для работы с пртоколом Wire-1
#include <DallasTemperature.h>      // Библиотека для облегчения работы с датчиками Dallas
#include <Wire.h>                   // Библиотека для работы с шиной I2C
#include <Adafruit_BMP085.h>        // Библитоека для работы с датчиком давления

// PIN-ы подключения SSD-реле термоголовк отопления.
// Зарезервированы PIN-ы с 2 по 9 с функцией PWM (ШИМ) (см. manual к плате)!!!
// Использованы для PID регулирования отоплением.
// Цель использования связан с возможностью плавно регулировать тока
// на термоголовках коллектора, что позволит плавно регулировать подачу
// теплоносителя в систему.
// Данные об установленной температуре беруться с APP Blynk с виртуальных
// пинов V0..V7
#define SSDPIN1            5         // Батареи контур 1 Спальня 
#define SSDPIN2            4         // Батареи контур 2 Детская
#define SSDPIN3            3         // Теплый пол контур 3 Гостиная
#define SSDPIN4            2         // Теплый пол контур 4 Прихожая
#define SSDPIN5            8         // Теплый пол контур 5 Гостиная
#define SSDPIN6            9         // Теплый пол контур 6 Гараж
#define SSDPIN7            7         // Теплый пол контур 7 Гараж
#define SSDPIN8            6         // Реле котла


// PIN подключения цифровых датчиков температуры
// необходимых для мониторинга состояния теплоносителя в системе
// смесительного узла COMBI MIX.
// Питание для датчиков DS18B20 рекомендуется взять от 3,0 до 5,5В
#define ONE_WIRE_BUS          14     // PIN подключения датчиков температуры по Wire-1 
#define TEMPERATURE_PRECISION 12     // Разрешение темпераутары от 9 до 12 бит. 

// Подключаем VCC для BMP085 сонсара на 3.3V (Нельзя на 5.0V!)
// Подключаем GND на землю
// Подключаем SCL на i2c clock для MEGA2560 PIN 21
// Подключаем SDA на i2c data  для MEGA2560 PIN 20
// EOC is not used, it signifies an end of conversion
// XCLR is a reset pin, also not used here

Adafruit_BMP085 BMP;                  // Определим объект BMP

// PIN-ы подключения датчиков DHT (температура и влажность).
// Зарезервированы PIN-ы с 22 по 31. Данные о температуре
// отдаются в APP Blynk на виртульаные пины.
// Температура V11..V20 влажность V21..V30 соотвественно.
// Обработка событий описана на закладке DHT.
#define DHTPIN1            22       // Улица
#define DHTPIN2            23       // Спалня
#define DHTPIN3            24       // Детская
#define DHTPIN4            25       // Гостиная
#define DHTPIN5            26       // Коридор
#define DHTPIN6            27       // Гараж
#define DHTPIN7            28       //
#define DHTPIN8            29       //
#define DHTPIN9            30       //
#define DHTPIN10           31       //

// PIN-ы подключения датчиков PIR (движения).
// Зарезервированы PIN-ы с 32 по 41.
#define PIRPIN1            32       // Коридор
#define PIRPIN2            33       // Гардероб
#define PIRPIN3            34       // Туалет
#define PIRPIN4            35       // 
#define PIRPIN5            36       // 
#define PIRPIN6            37       // 
#define PIRPIN7            38       // 
#define PIRPIN8            39       // 
#define PIRPIN9            40       // 
#define PIRPIN10           41       // 

// PIN-ы подключения SSR-реле управления объектами.
// Зарезервированы PIN-ы с 42 по 49. В APP Blynk для управления реле
// необходимо использовать виртуальные пины c V42 по V49 соотвественно.
// Обработка событий описана на вкладе SSR.
#define SSRPIN1            42       // Ворота
#define SSRPIN2            43       // Калитка
#define SSRPIN3            44       // Ставни
#define SSRPIN4            45       // Подсветка забора
#define SSRPIN5            46       // 
#define SSRPIN6            47       // 
#define SSRPIN7            48       // 
#define SSRPIN8            49       // 

// PIN-ы подключения датчиков пожарной сигнализации ИП-512-45
// Зарезервированы аналоговые PIN-ы с A0 по A7.
// В функции OPS необходимо закоментировать не используемые
// PIN-ы, иначе будут постоянные ложные срабатывания.
#define OPSPIN1            A0    //Определим PIN для датчика ОПС
#define OPSPIN2            A1    //Определим PIN для датчика ОПС
#define OPSPIN3            A2    //Определим PIN для датчика ОПС
#define OPSPIN4            A3    //Определим PIN для датчика ОПС
#define OPSPIN5            A4    //Определим PIN для датчика ОПС
#define OPSPIN6            A5    //Определим PIN для датчика ОПС
#define OPSPIN7            A6    //Определим PIN для датчика ОПС

// PIN-ы с 50 по 53 использованы под шину SPI!

#define DHTTYPE           DHT22     // Установим тип датчиков DHT 22 (AM2302)
#define W5100_CS          10        // PIN вызова Ethernet контроллера

// Инициализируем датчики температуры и влажности
DHT dht1(DHTPIN1, DHTTYPE);
DHT dht2(DHTPIN2, DHTTYPE);
DHT dht3(DHTPIN3, DHTTYPE);
DHT dht4(DHTPIN4, DHTTYPE);
DHT dht5(DHTPIN5, DHTTYPE);
DHT dht6(DHTPIN6, DHTTYPE);
DHT dht7(DHTPIN7, DHTTYPE);
DHT dht8(DHTPIN8, DHTTYPE);
DHT dht9(DHTPIN9, DHTTYPE);
DHT_Unified dht10(DHTPIN10, DHTTYPE);

// Создаем объект OneWire
OneWire oneWire(ONE_WIRE_BUS);      // Для чтения датчиков темпертауры DS   
// Создаем объект DallasTemperature для работы с сенсорами, передавая ему ссылку на объект для работы с 1-Wire.
DallasTemperature dallasSensors(&oneWire);

// Специальный объект для хранения адресов устройств DS
DeviceAddress addT1 = { 0x28, 0xC7, 0x03, 0x43, 0x98, 0xFF, 0x00, 0xAE };     // Котёл
DeviceAddress addT2 = { 0x28, 0xE0, 0x1E, 0x43, 0x98, 0x18, 0x00, 0x16 };     // Горячий контур
DeviceAddress addT3 = { 0x28, 0x90, 0x01, 0x43, 0x98, 0x18, 0x00, 0x9D };     // 
DeviceAddress addT4 = { 0x28, 0xA5, 0x26, 0x43, 0x98, 0x17, 0x00, 0x2A };     // 
DeviceAddress addT5 = { 0x28, 0xE1, 0x01, 0x43, 0x98, 0x21, 0x00, 0xAD };     // 

// Определяем объекты таймер для нужных классов
//SimpleTimer timerDHT;          // Объект таймер для датчиков влажности и температуры
//SimpleTimer timerBMP;          // Объект таймер для датчика атм.давления и температуры
//SimpleTimer timerOPS;          // Объект таймер для датчиков ОПС
BlynkTimer timer;                // Определим объект таймер, поддерждивает до 16 таймеров одновременно

// Вы должны получить Auth Token в приложении Blynk.
// Перейдите в Настройки проекта (значок гайки).

//char auth[] = "b3e641bee******************c268f4";  //Arduino UNO тест на стенде
char auth[] = "345feecc*********************1ec";  //Arduino MEGA

IPAddress server_ip (192, 168, 0, 50);

// ВНИМАНИЕ, MAC адрес должен отличаться для каждого устройства в локальной сети
// Определеим значения переменных для инициализации Blynk клиента
byte arduino_mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xE1 };
IPAddress arduino_ip ( 192, 168,   0, 177);
IPAddress dns_ip     ( 192, 168,   0,   1);
IPAddress gateway_ip ( 192, 168,   0,   1);
IPAddress subnet_mask( 255, 255, 255,   0);

// Определим объект поддержки протокола UDP
EthernetUDP ntpUDP;
// Определим объект клиента NTP по протоколу UDP (для чтения данных с сервера времени)
NTPClient timeClient(ntpUDP, "192.168.0.1", 18000, 60000);

//Bridge widget цепляем на виртуальный пин V1?????
//WidgetBridge bridge1(V1);
//static bool value = true;

//Terminal widget цепляем на виртуальный пин V127
WidgetTerminal terminal(V127);

// Определим переменные ввода/вывода для ПИД регуляторов
// Важно опредлится с количеством зон отопления требующих регулировки
// ПОМНИТЕ, что в одном помещении может быть несолько контуров теплых полов!
// в моём примере 3 зоны теплых полов и 2 зоны радиаторов
double Input, Output;
// Опредлеим пропорциональный, интегральный и диференциальный коэфф. 
// Чтобы тонко настроить систему коэфф. необходимо подбирать опытным путем
// Kp - пропорциональный коэфициент
// Ki - интегральный коэффициент
// Kd - дифференциальный коэффициент
double Kp=18, Ki=14.5, Kd=3.48;
// Температуры заданные для зон обогрева, значенится беруться с APP Blynk виджета
// смотрите вкладку PID, функцию BLYNK_WRITE(V0) и ниже
double SetTEMPZ1, SetTEMPZ2, SetTEMPZ3, SetTEMPZ4, SetTEMPZ5; 
double SetTEMP_T1;                         // Температура теплоносителя (не реализовано)

// Массив температур теплоностиеля для диапазон температуры на улице от +20 до -30 гр.С
// Значений 0..50 шт. Чем ниже строка, тем климат должен быть холоднее. Раскоментируйте один нужный!
//byte Tboil4[] = {20, 21, 22, 23, 24, 25, 26, 27, 28, 28, 29, 29, 30, 30, 31, 31, 32, 32, 33, 33, 34, 34, 35, 35, 36, 36, 37, 37, 38, 38, 39, 39, 40, 40, 41, 41, 42, 42, 43, 43, 44, 44, 45, 45, 46, 46, 47, 47, 48, 48, 49};
//byte Tboil4[] = {20, 21, 23, 24, 25, 26, 28, 29, 30, 30, 31, 32, 33, 33, 34, 34, 35, 36, 37, 37, 38, 38, 39, 39, 40, 40, 41, 41, 42, 42, 43, 43, 44, 44, 45, 45, 46, 46, 47, 47, 48, 48, 49, 49, 50, 50, 51, 51, 52, 52, 53};
  byte Tboil4[] = {20, 21, 23, 24, 26, 27, 29, 30, 32, 33, 34, 34, 35, 36, 37, 38, 39, 39, 40, 41, 42, 42, 43, 43, 44, 44, 45, 45, 46, 46, 47, 47, 48, 48, 49, 49, 50, 50, 51, 51, 52, 52, 53, 53, 54, 54, 55, 55, 56, 56, 57};
//byte Tboil4[] = {20, 22, 24, 25, 27, 29, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 46, 47, 47, 48, 48, 49, 49, 50, 50, 51, 51, 52, 52, 53, 53, 54, 54, 55, 55, 56, 56, 57, 57, 58, 58, 59, 59, 60, 60, 60};
//byte Tboil4[] = {20, 22, 25, 27, 30, 32, 35, 37, 40, 41, 42, 43, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56, 56, 57, 58, 59, 59, 60, 61, 62, 63, 64, 64, 65, 66, 67, 67, 68, 69, 70, 71, 72, 72, 73, 74, 75, 76, 77, 77, 78};
//byte Tboil4[] = {20, 23, 26, 28, 31, 34, 37, 39, 42, 43, 45, 46, 47, 48, 50, 51, 53, 54, 55, 56, 58, 59, 60, 61, 62, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 71, 72, 73, 74, 75, 76, 77, 78, 78, 79, 80, 81, 82, 83, 83, 84};
//byte Tboil4[] = {20, 23, 26, 29, 32, 35, 38, 41, 44, 45, 47, 48, 50, 51, 53, 54, 56, 57, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 84, 85, 86, 87, 87, 88, 89, 90};
//byte Tboil4[] = {20, 23, 27, 30, 33, 36, 40, 43, 46, 47, 49, 51, 53, 54, 56, 57, 59, 61, 63, 64, 66, 67, 68, 69, 70, 71, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 90, 90, 90, 90, 90, 90, 90, 90, 90};

// создадим объект ПИД регулятора
PID myPID0(&Input, &Output, &SetTEMP_T1, 100, 500, 50, DIRECT);       // ПИД регулятор Котла
int WindowSize = 5000;                                                // окно регулирования ПИД для SSR реле, в мс
unsigned long windowStartTime;                                        // перменная использования mills() для реле SSD
PID myPID1(&Input, &Output, &SetTEMPZ1, Kp, Ki, Kd, DIRECT);          // ПИД регулятор Спальни
PID myPID2(&Input, &Output, &SetTEMPZ2, Kp, Ki, Kd, DIRECT);          // ПИД регулятор Детской
PID myPID3(&Input, &Output, &SetTEMPZ3, Kp, Ki, Kd, DIRECT);          // ПИД регулятор Гостиной
PID myPID4(&Input, &Output, &SetTEMPZ4, Kp, Ki, Kd, DIRECT);          // ПИД регулятор Прихожей
PID myPID5(&Input, &Output, &SetTEMPZ5, Kp, Ki, Kd, DIRECT);          // ПИД регулятор Гаража

// Функция возвращает строку дата/время в формате 10.12.2018 01:25:59
// Используется для логирования событий в Терминале Blynk
String DataTime()
{
  String sDay = String(day(timeClient.getEpochTime()));
  if (sDay.length() == 1) {sDay += "0" + sDay;}
  
  String sMonth = String(month(timeClient.getEpochTime()));
  if (sMonth.length() == 1) {sMonth += "0" + sMonth;}
  
  String result = sDay + "." + sMonth + ".";
  result += String(year(timeClient.getEpochTime())) + " " + String(timeClient.getFormattedTime());
  return result;
}

BLYNK_CONNECTED() {             // Обязательная синхронизация с виджета APP Blynk всех установленных                               
  Blynk.syncAll();              // параметров по vPIN.
}

void setup()
{
  pinMode(SSDPIN1, OUTPUT);     // Инициируем PIN управления SSD-реле
  pinMode(SSDPIN2, OUTPUT);
  pinMode(SSDPIN3, OUTPUT);
  pinMode(SSDPIN4, OUTPUT);
  pinMode(SSDPIN5, OUTPUT);
  pinMode(SSDPIN6, OUTPUT);
  pinMode(SSDPIN7, OUTPUT);
  pinMode(SSDPIN8, OUTPUT);
  
  pinMode(DHTPIN1, INPUT);      // Инициируем PIN датчиков температуры и влажности
  pinMode(DHTPIN2, INPUT);
  pinMode(DHTPIN3, INPUT);
  pinMode(DHTPIN4, INPUT);
  pinMode(DHTPIN5, INPUT);
  pinMode(DHTPIN6, INPUT);
  pinMode(DHTPIN7, INPUT);
  pinMode(DHTPIN8, INPUT);
  pinMode(DHTPIN9, INPUT);
  pinMode(DHTPIN10, INPUT);
  
  pinMode(PIRPIN1, INPUT);      // Инициируем PIN датчиков движения

  pinMode(SSRPIN1, OUTPUT);     // Инициируем PIN управления SSR-реле
  digitalWrite(SSRPIN1, HIGH);
  pinMode(SSRPIN2, OUTPUT);
  digitalWrite(SSRPIN2, HIGH);
  pinMode(SSRPIN3, OUTPUT);
  digitalWrite(SSRPIN3, HIGH);
  pinMode(SSRPIN4, OUTPUT);
  digitalWrite(SSRPIN4, HIGH);
  pinMode(SSRPIN5, OUTPUT);
  digitalWrite(SSRPIN5, HIGH);
  pinMode(SSRPIN6, OUTPUT);   
  digitalWrite(SSRPIN6, HIGH);
  pinMode(SSRPIN7, OUTPUT);
  digitalWrite(SSRPIN7, HIGH);
  pinMode(SSRPIN8, OUTPUT);
  digitalWrite(SSRPIN8, HIGH);
  
  pinMode(OPSPIN1, INPUT_PULLUP);    // Инициируем PIN датчиков ОПС с подтягивающим резистором
  pinMode(OPSPIN2, INPUT_PULLUP); 
  pinMode(OPSPIN3, INPUT_PULLUP); 
  pinMode(OPSPIN4, INPUT_PULLUP); 
  pinMode(OPSPIN5, INPUT_PULLUP); 
  pinMode(OPSPIN6, INPUT_PULLUP); 
  pinMode(OPSPIN7, INPUT_PULLUP); 

  Serial.begin(9600);
  
  // Подключаемся к серверу Blynk
  Blynk.begin(auth, server_ip, 8080, arduino_ip, dns_ip, gateway_ip, subnet_mask, arduino_mac);
  
  if (Blynk.connected()) {
    terminal.clear();
    terminal.println("Подключаемся к серверу Blynk...");
    terminal.flush();
    terminal.print("BLYNK: Client ");
    terminal.print(arduino_ip);
    terminal.print(" -> Server ");
    terminal.print(server_ip);
    terminal.println(":8080");
    terminal.flush();
    terminal.println("BLYNK: Успешно!");} 
  else {Serial.println("BLYNK: Ошибка первичного подключения к серверу.");}
  terminal.flush();

  terminal.print("ARDUINO MEGA2560: ");
  terminal.flush();
  terminal.print("Загрузка и настройка параметров системы.");
  terminal.flush();
  
  // создаем объект клиента NTP
  timeClient.begin();
  timeClient.update();
  terminal.print("Системное время: ");
  terminal.println(DataTime());
  terminal.flush();

  // Инициализируем датчики DHT
  terminal.println("DHT: Запущен объект опроса датчиков DHT-22...");
  terminal.flush();
  dht1.begin();
  dht2.begin();
  dht3.begin();
  dht4.begin();
  dht5.begin();
  dht6.begin();
  dht7.begin();
  dht8.begin();
  dht9.begin();
  dht10.begin();
  terminal.println("DHT: Запущен объект опроса датчиков DHT-22...");
  terminal.flush();
  sensor_t sensor;
  dht10.temperature().getSensor(&sensor);
  terminal.println("------------------------------------");
  terminal.println("Температура");terminal.flush();
  terminal.print  ("Сенсор:      "); terminal.println(sensor.name);terminal.flush();
  terminal.print  ("Вер.драйвера:"); terminal.println(sensor.version);terminal.flush();
  terminal.print  ("Уникал. ID:  "); terminal.println(sensor.sensor_id);terminal.flush();
  terminal.print  ("Макс. знач.: "); terminal.print(sensor.max_value); terminal.println(" гр.C");terminal.flush();
  terminal.print  ("Мин. знач.:  "); terminal.print(sensor.min_value); terminal.println(" гр.C");terminal.flush();
  terminal.print  ("Разрешение:  "); terminal.print(sensor.resolution); terminal.println(" гр.C");terminal.flush();
  terminal.println("------------------------------------");terminal.flush();
  dht10.humidity().getSensor(&sensor);
  terminal.println("------------------------------------");
  terminal.println("Влажность");terminal.flush();
  terminal.print  ("Сенсор:       "); terminal.println(sensor.name);terminal.flush();
  terminal.print  ("Вер.драйвера: "); terminal.println(sensor.version);terminal.flush();
  terminal.print  ("Уникал. ID:   "); terminal.println(sensor.sensor_id);terminal.flush();
  terminal.print  ("Макс. знач.:  "); terminal.print(sensor.max_value); terminal.println("%");terminal.flush();
  terminal.print  ("Мин. знач.:   "); terminal.print(sensor.min_value); terminal.println("%");terminal.flush();
  terminal.print  ("Разрешение:   "); terminal.print(sensor.resolution); terminal.println("%"); terminal.flush(); 
  terminal.println("------------------------------------");terminal.flush();

  // Проверим доступность датчика атм.давления BMP
  if (!BMP.begin()) {
    terminal.println("Не удалось найти действительный датчик BMP085/180, проверьте подключение!");
    terminal.flush();
  }

  // Выполняем первоначальную настройку и поиск устрйоств DS18B20 на линии Wire-1
  dallasSensors.begin();
  terminal.print("Найдено ");
  terminal.print(dallasSensors.getDeviceCount(), DEC);
  terminal.println(" устройств DS18B20. ");
  terminal.flush();

  // Определяем режим питания (по отдельной линии или через паразитное питание по линии данных)
  terminal.print("Режим паразитного питания: ");
  if (dallasSensors.isParasitePowerMode()) terminal.println("ВКЛЮЧЕН"); 
      else terminal.println("ВЫКЛЮЧЕН");
  terminal.flush();

  // Установим разрешение данных температуры в битах
  dallasSensors.setResolution(addT1, TEMPERATURE_PRECISION);
  dallasSensors.setResolution(addT2, TEMPERATURE_PRECISION);
  dallasSensors.setResolution(addT3, TEMPERATURE_PRECISION);
  dallasSensors.setResolution(addT4, TEMPERATURE_PRECISION);
  dallasSensors.setResolution(addT5, TEMPERATURE_PRECISION);
  terminal.print("Устройство 1 разрешение: ");
  terminal.print(dallasSensors.getResolution(addT1), DEC);
  terminal.println(" бит");terminal.flush();
  terminal.print("Устройство 2 разрешение: ");
  terminal.print(dallasSensors.getResolution(addT2), DEC);
  terminal.println(" бит");terminal.flush();

  // Установим время обсчета и диапазон ПИД регуляторов
  myPID0.SetOutputLimits(0, WindowSize);  // Укажем размер интервала в мс окна регулирвания SSR реле
  myPID0.SetMode(AUTOMATIC);              // Режим регулировки AUTOMATIC/MANAL, по умолчанию ПИД-регулятор выключен
  myPID0.SetSampleTime(1000);             // Зададим частоту расчета выходного сигнала, по умолчанию 200мс
  //myPID0.SetOutputLimits(0,100);        // Устанавливает границы выходящего сигнала, по умолчанию 0-255
  windowStartTime = millis();
  
  myPID1.SetMode(AUTOMATIC);
  myPID1.SetSampleTime(1000);
  myPID1.SetOutputLimits(0,255);
  myPID2.SetMode(AUTOMATIC);
  myPID2.SetSampleTime(1000);
  myPID2.SetOutputLimits(0,255);
  myPID3.SetMode(AUTOMATIC);
  myPID3.SetSampleTime(1000);
  myPID3.SetOutputLimits(0,255);
  myPID4.SetMode(AUTOMATIC);
  myPID4.SetSampleTime(1000);
  myPID4.SetOutputLimits(0,255);
  myPID5.SetMode(AUTOMATIC);
  myPID5.SetSampleTime(1000);
  myPID5.SetOutputLimits(0,255);

  // Устанавливаем интервал вызова каждой процедуры по прерыванию в миллисекундах 1 сек = 1000 мс
  timer.setInterval(5000,  sendDataDHT);
  timer.setInterval(60000, sendDataBMP);
  timer.setInterval(7000,  sendDataOPS);

  // Произведем первоначальную инициализацию всех систем и датчиков
  sendDataDHT();
  sendDataBMP();
  sendDataOPS();
  sendDataPID();
  
  delay(5000);                  // выдержим паузу при старте для стабилизации всей системы
}

void loop()
{
  Blynk.run();
  timer.run();
  sendDataPID();
}

Ну и собственно сам блок ОПС, здесь вообще все тривиально. Собственно не суть сейчас я пока мониторю значения по факту на порту. Да и мультиметром тоже проверял.

void sendDataOPS()
{
  int vOPS = analogRead(OPSPIN1);
  if (vOPS > 60 and vOPS < 80) {
      Blynk.notify("Пожар в спальне!");
      terminal.print(DataTime());
      terminal.println(" Пожар в спальне!");
      terminal.flush();
      }
  if (vOPS == 0) {
    Blynk.notify("Обрыв линии ОПС-1. Спальня.");
    terminal.print(DataTime());
    terminal.println(" Обрыв линии ОПС-1. Спальня.");
    terminal.flush();
    }

  vOPS = analogRead(OPSPIN2);
  if (vOPS > 60 and vOPS < 80) {
      Blynk.notify("Пожар в детской!");
      terminal.print(DataTime());
      terminal.println(" Пожар в детской!");
      terminal.flush();
      }
  if (vOPS == 0) {
    Blynk.notify("Обрыв линии ОПС-2. Спальня.");
    terminal.print(DataTime());
    terminal.println(" Обрыв линии ОПС-2. Спальня.");
    terminal.flush();
    }

  vOPS = analogRead(OPSPIN3);
  if (vOPS > 60 and vOPS < 80) {
      Blynk.notify("Пожар в гостиной!");
      terminal.print(DataTime());
      terminal.println(" Пожар в гостиной!");
      terminal.flush();
      }
  if (vOPS == 0) {
    Blynk.notify("Обрыв линии ОПС-3. Гостиная.");
    terminal.print(DataTime());
    terminal.println(" Обрыв линии ОПС-3. Гостиная.");
    terminal.flush();
    }
}

Буду премного благодарен всем откликнувшимся!

 

bwn
Offline
Зарегистрирован: 25.08.2014

AlexArGC пишет:

Подключил 5В на OUT и GND. С датчиков соответственно управляющий сигнал + и GND. Земля у меня общая, т.к. все питается от одного БП (компьютерного).

На момент запуская все работало исправно, т.е. При сработке пожарного датчика на входе оптической развязки напряжение с 12 В падает до 6 В, но на выходе оптической развязки тоже падало в половину... При этом показания на A0-A3 скакали примерно в 512-ом диапазоне +-4. А теперь соответсвенно 1022-1023 вне зависимости от состояния пожарного датчика. Вроде схема подключения до боли понятная. Сопротивления мерял, все как на схеме.

Через некоторое время система перестала реагировать на изменения напряжения на IN. Т.е. пожарный датчик при сработке на управляющем шлейфе понижал напряжение до 6 В но на выводе с оптической развязки так и висит 5 В. А при обрыве линии должно быть 0 В, а оно всеравно не 0 В на OUT :-(

С теорией у меня туго. Максимум знания закона Ома на уровне U=I*R. Многие скажут что этого достаточно, но нет блин. Что я делаю не так?

P.S. Я обратил также внимание, что пока контроллер питался от двух источников 5В оно работало (хотя это не верно). А когда переключил контроллер на 12 В перестало работать (по ощущениям). Может нужно подпаять еще и делитель напряжения? Либо "прикупить" оптическую развязку с другими сопротивлениями? Но с какими?

А вы, в процессе апгрейда, на VO, двенадцать вольт не вхерачили, часом? Сразу подумал, почему такая схема выходного каскада, мне инстиктивное отвращение внушает?

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

bwn пишет:

А вы, в процессе апгрейда, на VO, двенадцать вольт не вхерачили, часом?

Часом нет, не вхерачил. 5 В подано на VO изначально и сейчас меряется столько же.

bwn пишет:

Сразу подумал, почему такая схема выходного каскада, мне инстиктивное отвращение внушает?

На этот вопрос затрудняюсь ответить, что Вам может внушать.

Я понимаю, что описание моё несколько сумбурно и тут больше важны Ваши догадки :-(

 

bwn
Offline
Зарегистрирован: 25.08.2014

Не, второй вопрос, риторический, размышления у парадного подъезда. С n-p-n транзистором, обычно делается наоборот, резистор к плюсу, тогда при завышенном напряжении больше шансов входам не погореть. 
Попробуйте последовательно с IN переменный резистор впаять и амперметр включить, смахивает на то, что у вас через диод постоянно течет ток, достаточный для открытия фототранзистора. 

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

Попробовал следующее.

Отсоединил шлейф на VOUT. Перезагрузил контроллер с отключением питания. После загрузки. Показания на A0..A7 как полагается стали скакать. На "горячую" подключил обртано дачики ИП на A0..A3 потом подал питание 5В на VO. Показания встали на 998-999 где "обрыв" показывает 0. Где нет подключения значения плавают.

Может я не корректно инициирую aPIN в viod setup ()?

pinMode(OPSPIN1, INPUT_PULLUP);

 

 

 

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Внутренний PULLUP тянет на плюс, схемный резистор тянет на землю. Похоже, что выходы ваших оптопар тупо зашунтированы внутренним резистором, а на вход напруга с резисторного делителя попадает.

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

sadman41 пишет:

Внутренний PULLUP тянет на плюс, схемный резистор тянет на землю. Похоже, что выходы ваших оптопар тупо зашунтированы внутренним резистором, а на вход напруга с резисторного делителя попадает.

:-))))) сижу читаю ваш "сленг" и "ничёрта" не понимаю... Что куда подтягивает, кто кого шунтирует и чего куда попадает?

sadman41
Offline
Зарегистрирован: 19.10.2016

Между VO и OUT1 нарисуйте ещё один резистор на 20К - он как раз и появляется, когда INPUT_PULLUP включают.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Это вряд ли. пулап это 50кОм, Эмитерная нагрузка 10кОм, получаем делитель 50/10, то бишь на аналоге должно быть не выше 1/6 или в пределах 171 "попугая АЦП" даже если транзистор выкинуть нафиг. Если он открыт, то там будут честные 1023 попугая согласно схеме.

По схеме должно быть так: сажаем ИН на землю - видим в пределах 170 попугаев на АЦП, подтягиваем ИН к питанию - видим 1023 попугая. Если это не так - проблема в скетче.

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

sadman41 пишет:

Между VO и OUT1 нарисуйте ещё один резистор на 20К - он как раз и появляется, когда INPUT_PULLUP включают.

Спасибо но я эту страничку изучил очень подробно. Как эти лишние сопротивления могут мне мешать? Мне не столько важно само значение попугаев, а сколько его изменение при изменнии подающего напряжения от датчика ИП512 :-)

sadman41
Offline
Зарегистрирован: 19.10.2016

Проверить-то недолго - скетч из пяти строчек, пишущий в Serial, и попробовать режимы. Кстати, у 2560 c default reference voltage особенностей нет?

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

Arhat109-2 пишет:

Это вряд ли. пулап это 50кОм, Эмитерная нагрузка 10кОм, получаем делитель 50/10, то бишь на аналоге должно быть не выше 1/6 или в пределах 171 "попугая АЦП" даже если транзистор выкинуть нафиг. Если он открыт, то там будут честные 1023 попугая согласно схеме.

По схеме должно быть так: сажаем ИН на землю - видим в пределах 170 попугаев на АЦП, подтягиваем ИН к питанию - видим 1023 попугая. Если это не так - проблема в скетче.

После моих "дурацких" манипуляций, все заработало, но чую что опять на один-два дня.

Сейчас все подключено также как я и описывал в шапке. На A0..A2 значения 998-999, на A3 значение 0 (к нему подключен только медный провод без датчика). Напряжение около 5В.

После сработки датчика ИП512 "авария" напряжение падает и значение становится на A0..A2 62-64 попугаев. Что меня вполне устраивает. После отключаем датчик чтобы сбросить аварию, значение на некоторое время становится 0. Потом возвращается на 998. На остальных выводах значения плавают как и положено. Для наглядности гифку склеил...

P.S. Забыл добавить, в скейтче также аткивно используется ШИМ. Это может как то влиять на работу аналоговых пинов?

 

bwn
Offline
Зарегистрирован: 25.08.2014

AlexArGC пишет:

P.S. Забыл добавить, в скейтче также аткивно используется ШИМ. Это может как то влиять на работу аналоговых пинов?

Выбросьте аналоговые значения, как таковые, оптопара - бинарный прибор и надо его использовать в этом качестве. Аналоговые шалости допускали советские ОЭП-ы с лампочкой и фоторезистором, таких нынче не делают. Добейтесь двух состояний - high, low.

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

bwn пишет:

Выбросьте аналоговые значения, как таковые, оптопара - бинарный прибор и надо его использовать в этом качестве. Аналоговые шалости допускали советские ОЭП-ы с лампочкой и фоторезистором, таких нынче не делают. Добейтесь двух состояний - high, low.

Меня очень даже устраивает 3 состояния порта "охрана"-"авария"-"обрыв" :-))))) А как выбросить то? Подборкой сопротивлений на IN/OUT? Если я Вас правильно понял, вы допускаете что в PC817 существует переходное состояние в котором и происходит "залипание"?

Конечно самый простой вариант - это эксперимент, но к сожалению не обладаю источником питания с регулировкой напряжения... Просто мне не понятно, как бинарность прибора (оптопары) может мешать на аналоговом порту получать всего 2 состояния?

ИТАК нужно: В коде использовать порты A0..7 как цифровые. А так же мне надо добится на OUT напряжения ниже 2,5В при срабатывании датчика ИП512, чтобы получить логический LOW на A0..8 я правильно рассуждаю? И соотвественно сосотяние HIGH при напряжении больше 2,6В...

 

bwn
Offline
Зарегистрирован: 25.08.2014

БП не нужен, проверяем догадку (мне ваши 6В не нравятся, это ~9мА через светодиод), ставим в цепь IN переменный резистор 5к6-10к и когда на выходе датчика низкий уровень, начинаем его увеличивать, мониторя значения на аналоговом пине. Если в какой-то момент произошло переключение выхода, значит догадка верна. 
 

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

bwn пишет:

БП не нужен, проверяем догадку (мне ваши 6В не нравятся, это ~9мА через светодиод), ставим в цепь IN переменный резистор 5к6-10к и когда на выходе датчика низкий уровень, начинаем его увеличивать, мониторя значения на аналоговом пине. Если в какой-то момент произошло переключение выхода, значит догадка верна. 
 

Точно на входе IN? А диод вообще будет работать при таких малых токах? Сейчас на входе всего 470 Ом, ток ограничен до 25мА. А при 5к6 там вообще мизер будет...

Т.е. вы предлагаете "увести напряжение" с 6В на более низкое значение? Сформулируйте вашу догадку пожалуйста...

bwn
Offline
Зарегистрирован: 25.08.2014

Именно так, я обычно выставляю 3-5мА максимум и они счастливо работают. Конкретно на 817 не проверял, но на 4n25, моськах этого достаточно. У вас, на низком, целых 9мА в нее гонит.

P/S Резистор, я же сказал - переменный, крайним номиналом от 5к6 до 10к. Больше смысла нет, слишком маленький угол поворота будет.

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

bwn пишет:

Именно так, я обычно выставляю 3-5мА максимум и они счастливо работают. Конкретно на 817 не проверял, но на 4n25, моськах этого достаточно. У вас, на низком, целых 9мА в нее гонит.

P/S Резистор, я же сказал - переменный, крайним номиналом от 5к6 до 10к. Больше смысла нет, слишком маленький угол поворота будет.

Ок. Спаисбо за совет! Перемонного резистора у меня нет. Попробу собрать на планшетке с 2,2кОм (последовательно с 470 встанет пока) резисторами и поставить в тест и посмотрим как оно себя поведет :-) Если все ок, то перепаять резисторную сорку с 470 Ом на 2,2кОм не составит труда.

 

 

bwn
Offline
Зарегистрирован: 25.08.2014

AlexArGC пишет:

Если все ок, то перепаять резисторную сорку с 470 Ом на 2,2кОм не составит труда.

Плохая мысль. Если поможет, то для нормальной работы такая схема плоха, она только для теста. Диоды (не Шоттки) или стабилитроны есть в хозяйстве?

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

bwn пишет:

Диоды (не Шоттки) или стабилитроны есть в хозяйстве?

Такого чуда не покупал еще...

 

bwn
Offline
Зарегистрирован: 25.08.2014

Светодиоды?

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

bwn пишет:

Светодиоды?

Есть конечно. А так это они "не шотки"?

bwn
Offline
Зарегистрирован: 25.08.2014

Если есть красные светики, то последовательно с диодом оптрона ставите сначала два, если на низком все равно светятся, добавляете третий-четвертый-пятый.

sadman41
Offline
Зарегистрирован: 19.10.2016

Может ему просто pullup снять?

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

bwn пишет:

Если есть красные светики, то последовательно с диодом оптрона ставите сначала два, если на низком все равно светятся, добавляете третий-четвертый-пятый.

Со светодиодом при низком 6В сразу гаснет и Blynk 0 погуаев показывает на A2, даже без 2,2кОм... А без светодиода с дополнительным сопротивлением к оптрону в 2,2кОм попугаи снизились с 64 до 23... Я так понимаю этот 817 диод пропускает обратный ток? В тепло ничего не преобразует и соотвественно никакого практического паденния напряжения не происходит по этому сигнал как бы "залипает"?

 

bwn
Offline
Зарегистрирован: 25.08.2014

sadman41 пишет:

Может ему просто pullup снять?

Мне кажется, что проблема в входной цепи. Транзистор всегда открыт - светодиод+резистор 470Ом и минимальных 6В на входе. ИМХО.

sadman41
Offline
Зарегистрирован: 19.10.2016

bwn пишет:

Мне кажется, что проблема в входной цепи. Транзистор всегда открыт - светодиод+резистор 470Ом и минимальных 6В на входе. ИМХО.

Или человек - удачник и собрал у себя все варианты, на которых можно получить непредсказуемое поведение.

bwn
Offline
Зарегистрирован: 25.08.2014

AlexArGC пишет:

 Я так понимаю этот 817 диод пропускает обратный ток? В тепло ничего не преобразует и соотвественно никакого практического паденния напряжения не происходит по этому сигнал как бы "залипает"?

Светодиод - нелинейный прибор. До определенного напряжения он заперт. При достижении напряжения открытия, начинает пропускать ток и работать как стабилитрон, удерживая напряжение на себе постоянным.

Наша задача, привести входные уровни к нулю и единице, убрав паразитное напряжение. То, что хватило одного красного светодиода, странно, должно было быть больше. Ну или так замеряете.

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

bwn пишет:

Светодиод - нелинейный прибор. До определенного напряжения он заперт. При достижении напряжения открытия, начинает пропускать ток и работать как стабилитрон, удерживая напряжение на себе постоянным.

Спасибо за разъяснения... Может с обратной стороны платы на IN просто напаять светоды или стабилитроны?

bwn
Offline
Зарегистрирован: 25.08.2014

Это я и хотел предложить, если диагноз подтвердиться. Только предпологал, что понадобиться стабилитрон где-то на 5,1В, но раз обошлись одним светиком, пусть так, только помониторьте на предмет ложных срабатываний, если будут, добавьте еще один или поменяйте на белый-синий. И да, пуллап в этой схеме не нужен, от слова совсем, но это уже другая история.

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

sadman41 пишет:

Или человек - удачник и собрал у себя все варианты, на которых можно получить непредсказуемое поведение.

В этой сборке сложно что-то напутать. Прежде чем собирать в шкафу, я проводил тестрование скейтча и сборки на столе. И оно работало. Но когда система запустилась, через непредсказуемый промежуток времени 5-10 дней я заметил что все подключенные порты A0..3 "замерзли" и не реагировали на изменения. Даже простая перезагрузка контроллера со снятием напряжения не помогала избавиться от этого явления.

Помогало только сначла снять 5В с VO, загрузиться и потом только подать 5В на VO. И оно какой-то промежуток времени мониторило корректно сигналs на портах A0..3. Потом они опять замерзали в максимальном значении...

Контроллер при этом ниразу не зависал, т.к. остальные исполнительные элементы, датчики, реле и т.п. работают исправно.

 

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

bwn пишет:

Это я и хотел предложить, если диагноз подтвердиться. Только предпологал, что понадобиться стабилитрон где-то на 5,1В, но раз обошлись одним светиком, пусть так, только помониторьте на предмет ложных срабатываний, если будут, добавьте еще один или поменяйте на белый-синий. И да, пуллап в этой схеме не нужен, от слова совсем, но это уже другая история.

А почему не 12В ? Подтяжку отключил...

 

bwn
Offline
Зарегистрирован: 25.08.2014

Вместо нуля мы имеем 6в паразитных (по вашим замерам), их нужно куда-то деть, последовательный стабилитрон оставил бы 0,9В, что явно недостаточно для зажигания светодиода, ход мыслей был такой. 

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

bwn пишет:

Вместо нуля мы имеем 6в паразитных (по вашим замерам), их нужно куда-то деть, последовательный стабилитрон оставил бы 0,9В, что явно недостаточно для зажигания светодиода, ход мыслей был такой. 

Примрено понял, а когда там 12В светодиод или стабилитрон будут излишки в тепло преобразовывать...

Хорошо, а если например мне надо все 3 состояния линии пожарных датчиков контролировать 0/6/12В? То можете подсказать готовое решение с поднебесной?

0 = обрыв, 6 = пожар, 12 = контроль. Я много всяких плат пересмотрел, но не смог ничего дельного подобрать... Может через SSD низкого номинала?

 

bwn
Offline
Зарегистрирован: 25.08.2014

Я не знаю, насколько критична гальваническая развязка. Если необязательна, то обычный резистивный делитель и нижнее плечо зашунтировать стабилитроном на 5,1В. С развязкой не подскажу.

SLKH
Offline
Зарегистрирован: 17.08.2015

817 оптрон - прибор с ненормированной нелинейностью, все настольные аналоговые настройки могут поплыть в реальных условиях.

Нужно подбирать доп. резистор на датчике или на входе (это про 6 вольт), чтобы он (в сумме с сопротивлением шлейфа) давал чёткие 0 и 1 на входе ардуины. Естественно, читать digitalRead'ом. 

Если же будет "Земля у меня общая" - на кой тогда вообще оптроны? Выкинуть их и (после аппаратного/программного ФНЧ) analogRead'ом определять, что там на шлейфе творится и четко идентифицировать обрыв/срабатывание/замыкание.

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

SLKH пишет:

Если же будет "Земля у меня общая" - на кой тогда вообще оптроны? Выкинуть их и (после аппаратного/программного ФНЧ) analogRead'ом определять, что там на шлейфе творится и четко идентифицировать обрыв/срабатывание/замыкание.

Если бы я чётко знал ответ, накой... На той, что в шлейфе ИП512 рабочее напряжение 9-24В может быть. В моем случа 12В, а на порту Дуины не более 5В. Соответсвенно я искал готовое решение, т.к. идеология моего проекта была изначально построена на готовой доступной модульности из поднебесной например. Чтобы её мог собрать любой школьник. Если вы мне дадите хороший рабочий совет (но не паять самому), то буду премного благодарен.

SLKH
Offline
Зарегистрирован: 17.08.2015

AlexArGC пишет:

bwn пишет:

Вместо нуля мы имеем 6в паразитных (по вашим замерам), их нужно куда-то деть, последовательный стабилитрон оставил бы 0,9В, что явно недостаточно для зажигания светодиода, ход мыслей был такой. 

Примрено понял, а когда там 12В светодиод или стабилитрон будут излишки в тепло преобразовывать...

Хорошо, а если например мне надо все 3 состояния линии пожарных датчиков контролировать 0/6/12В? То можете подсказать готовое решение с поднебесной?

0 = обрыв, 6 = пожар, 12 = контроль. Я много всяких плат пересмотрел, но не смог ничего дельного подобрать... Может через SSD низкого номинала?

1. Подавать 12в (от изолированного источника) через шлейф и датчик на 2 оптрона - на один напрямую, на второй через стабилитрон. 

2. Кто такой "SSD"

 

SLKH
Offline
Зарегистрирован: 17.08.2015

AlexArGC пишет:

SLKH пишет:

Если же будет "Земля у меня общая" - на кой тогда вообще оптроны? Выкинуть их и (после аппаратного/программного ФНЧ) analogRead'ом определять, что там на шлейфе творится и четко идентифицировать обрыв/срабатывание/замыкание.

Если бы я чётко знал ответ, накой... На той, что в шлейфе ИП512 рабочее напряжение 9-24В может быть. В моем случа 12В,

так мы "мой случай" и рассматриваем - откуда там 24 возникнут? 

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

SLKH пишет:

1. Подавать 12в (от изолированного источника).

Это уже не мой варинат, источник один...

SLKH пишет:

2. Кто такой "SSD"

Очепятка конечно же я имел ввиду Solid State Relays, но дороговатое решение для моего случая :-)

 

SLKH
Offline
Зарегистрирован: 17.08.2015

AlexArGC пишет:

SLKH пишет:

1. Подавать 12в (от изолированного источника).

Это уже не мой варинат, источник один...

тогда вообще вопроса нет - см. #34.

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

Может кто подсказать, что если вместо оптической развзяки использовать двунаправленный преобразователь уровней?

Например собранный на BSS138 ... Я не понимаю логику его работы, поэтому спрашиваю.

 

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Это более бессмысленней.

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

bwn пишет:

Именно так, я обычно выставляю 3-5мА максимум и они счастливо работают. Конкретно на 817 не проверял, но на 4n25, моськах этого достаточно. У вас, на низком, целых 9мА в нее гонит.

P/S Резистор, я же сказал - переменный, крайним номиналом от 5к6 до 10к. Больше смысла нет, слишком маленький угол поворота будет.

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

По возможности... Может кто посмотреть на ошибки, в свободную минутку? Был бы рад за науку, если кто "носом натыкает" :-) Оптроны хоть спасут порты контроллера если что....

bwn
Offline
Зарегистрирован: 25.08.2014

Из своего, личного, опыта, если надо таскать дороги между падами, делаю их эллипсными, зазоры увеличиваются, а удерживающая площадь остается примерно такой же. ИМХО.