Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.04.2020, 17:36   #1
leninxxx
Junior Member
 
Регистрация: 16.04.2020
Сообщений: 3
Вес репутации: 0
leninxxx is an unknown quantity at this point
По умолчанию

Цитата:
Сообщение от Admin Посмотреть сообщение
На MOC3061 как диммер работать не будет, вернее будет неприятно мерцать и при этом иметь всего 2 ступени яркости 100% и 50%
Потому, что MOC3061 имеет встроенный детектор ноля и он сможет регулировать только пропуском полупериодов. Так, что не вводите людей в заблуждение
Лучше покажите видео как у Вас работает на MOC3061, очень интересно посмотреть
Ну что началось-то? Нормально вроде сидели... )

Я всего-лишь сказал что девайсом на MOC3061 можно управлять через ШИМ генератор.

Если быть точным, то при схеме со встроенным детектором 0 ступеней мощности всего две - вкл и выкл. Мы же пропускаем полупериод, следовательно мощности в момент пропуска нет совсем, а так как миинимальный период пропуска вполне заметен глазу - 10мс, то о диммировании осветительных приборов не может быть и речи. 50% мощности выглядят как равномерное моргание лампы раз в секунду.
Видео выложу позже.

Теперь в раздумьях - нагревателю от такого режима работы не будет плохо? или все-таки лучше сделать нормальное диммирование с обрезанием синусоиды?
Есть у кого-нибудь опыт длительного использования?
leninxxx вне форума   Ответить с цитированием
Старый 17.04.2020, 21:06   #2
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

Нагревателю ничего не будет. ПИД регуляторы температуры, работают годами в таком режиме и имеют большой разброс времени вкл/выкл от 0,5 сек до 10 сек
Admin вне форума   Ответить с цитированием
Старый 29.04.2020, 23:39   #3
leninxxx
Junior Member
 
Регистрация: 16.04.2020
Сообщений: 3
Вес репутации: 0
leninxxx is an unknown quantity at this point
По умолчанию

Обнаружил, вдруг, что в линейке BTA есть SNUBBERLESS™. Вы такие не использовали? Как они себя показали, на самом деле можно отказаться от снаббера?

И еще вопрос, посмотрел на фото Вашего диммера. Увидел диодный мост.
Если не секрет, зачем он там?
leninxxx вне форума   Ответить с цитированием
Старый 30.04.2020, 21:14   #4
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

Цитата:
Обнаружил, вдруг, что в линейке BTA есть SNUBBERLESS™. Вы такие не использовали?
Нет не пробовали, нужно проверить.

Цитата:
И еще вопрос, посмотрел на фото Вашего диммера. Увидел диодный мост.
Если не секрет, зачем он там?
для того , что бы контроллеру передавались как положительные, так и отрицательные полупериоды
Admin вне форума   Ответить с цитированием
Старый 19.05.2020, 00:00   #5
demoniaus
Junior Member
 
Регистрация: 18.05.2020
Сообщений: 6
Вес репутации: 0
demoniaus is an unknown quantity at this point
По умолчанию

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

Перейду сразу к делу.

Имеется готовый диммер с алика. В качестве управлялки использую ардуино нано.

Никак не могу заставить эту парочку корректно работать вместе.
Начну с самого начала. Подключение вроде стандартное.


vcc - 5v, gnd - gnd, z-c - pin2, pwm - pin4
Естественно есть входное 220 на зеленую колодку и лампа на синюю.
Далее использую следующий код.

PHP код:
#define dimPin 4
#define zeroPin 2
#include <CyberLib.h>
volatile int ticDimmer;

void setup() {
  
Serial.begin(9600);
  
pinMode(dimPinOUTPUT);
  
digitalWrite(dimPin0);
  
pinMode(zeroPinINPUT);                 // настраиваем порт на вход для отслеживания прохождения сигнала через ноль
  
attachInterrupt(0detect_upFALLING);  // настроить срабатывание прерывания interrupt0 на pin 2 на низкий уровень

  
StartTimer1(timer_interrupt40);        // время для одного разряда ШИМ
  
StopTimer1();                            // остановить таймер

}

void loop() {

  if (
Serial.available()) {
    
Dimmer Serial.parseInt();
    
Serial.println(Dimmer);
  }
  
}

//----------------------ОБРАБОТЧИКИ ПРЕРЫВАНИЙ--------------------------
void timer_interrupt() {       // прерывания таймера срабатывают каждые 40 мкс
  
tic++;                       // счетчик
  
if (tic Dimmer)            // если настало время включать ток
    
digitalWrite(dimPin1);   // врубить ток
}

void  detect_up() {    // обработка внешнего прерывания на пересекание нуля снизу
  
tic 0;                                  // обнулить счетчик
  
ResumeTimer1();                           // перезапустить таймер
  
attachInterrupt(0detect_downRISING);  // перенастроить прерывание
}

void  detect_down() {  // обработка внешнего прерывания на пересекание нуля сверху
  
tic 0;                                  // обнулить счетчик
  
StopTimer1();                             // остановить таймер
  
digitalWrite(dimPin0);                  // вырубить ток
  
attachInterrupt(0detect_upFALLING);   // перенастроить прерывание
}
//----------------------ОБРАБОТЧИКИ ПРЕРЫВАНИЙ-------------------------- 
Это код с этого форума. Цель его - через Serial порт регулировать яркость лампы. Вот только по какой-то причине он не работает.

При включении всей системы лампа загорается на максимум и постоянно горит. При попытке в порт внести одно любое значение, например 100 или 200 или 50 - ничего не меняется. Яркость постоянная и максимальная. Если ввести 255 - лампа гаснет. Если внести 0 - лампа загорается. Промежуточные значения не работают по какой-то причине. Собственно эту причину и хочу выяснить.

Так как я новичек, могу сейчас совсем что-то странное сказать, но я попробовал провести проверочные манипуляции. Например я пробовал вынуть контакт из пин4 и соединить его с +5. В таком случае при вынимании лампа гаснет, при контакте с +5 она горит. Далее пробовал
в функции detect_up и detect_down добавить вывод в порт какого-то значения. Я знаю что Serial.println() очень долгая команда и ее не стоит использовать, но все же при ее добавлении я видел в мониторе постоянные срабатывания на FALLING и RISING. После этого я убрал эти строчки.

ТАким образом получается что диммер вроде рабочий, но управление им происходит некорректно.

Да, еще хотел добавить, что я так же пробовал использовать родную библиотеку от производителя. С ней все хорошо работает, но все же мне стало интересно как добиться работы с использованием вашего подхода, если это конечно возможно.
Заранее спасибо.
demoniaus вне форума   Ответить с цитированием
Старый 19.05.2020, 21:21   #6
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

Цитата:
Это код с этого форума. Цель его - через Serial порт регулировать яркость лампы. Вот только по какой-то причине он не работает.
Вы код из шапки темы без модификаций пробовали?
Admin вне форума   Ответить с цитированием
Старый 20.05.2020, 01:34   #7
demoniaus
Junior Member
 
Регистрация: 18.05.2020
Сообщений: 6
Вес репутации: 0
demoniaus is an unknown quantity at this point
По умолчанию

Цитата:
Сообщение от Admin Посмотреть сообщение
Вы код из шапки темы без модификаций пробовали?
Здравствуйте. Я бы взял код из шапки без изменений, но я не понимаю как мне взаимодействовать с ардуиной после прошивки. Я так понимаю там не используется Serial порт.
А как организовать ввод значения яркости через uart я пока не могу разобраться. Поэтому я просто поменял в нем кусок

PHP код:
void loop() 
{
Start
  
if (UART_ReadByte(data)) Dimmer1=data;
  
   
Dimmer2=195//200=мин. 0=макс 
   
Dimmer3=0//200=мин. 0=макс 
End
На вот такой. В нем не надо ничего вводить, яркость лампы по моей идее должна нарастать от 0 до 255 и обратно. Собственно демонстрировать сам эффект диммирования.

PHP код:
void loop() {
if (
Dimmer1 255 ) { 
    while (
Dimmer1 255) {
      if (
millis() - timing 30) {
        
timing millis(); 
        
Dimmer1++;
      }
    }
  }
  else
  {
    while (
Dimmer1 0) {
      if (
millis() - timing 30) {
        
timing millis();    
        
Dimmer1--;
      }
    }
  }

Остальной код не менялся... все как в шапке один в один.
Полный код который тестировал описан в предыдущем моем посте.
demoniaus вне форума   Ответить с цитированием
Старый 19.05.2020, 15:23   #8
demoniaus
Junior Member
 
Регистрация: 18.05.2020
Сообщений: 6
Вес репутации: 0
demoniaus is an unknown quantity at this point
По умолчанию

Приветствую. Сегодня взял для теста код из шапки темы. И добавил модуль плавного набора яркости и плавного угасания. Я проверил этот модуль сначала на светодиоде с помощью ШИМ интерфейса. Затем, когда убедился, что светодиод плавно загорается и гаснет добавил этот код в loop. Результат такой же как и вчера. Когда счетчик доходит до 0 лампа гаснет, все остальное время она постоянно горит.

Интересный момент. На пине PWM самого диммера имеется светодиод. Когда я запустил код с морганием, этот светодиод отрабатывает программу как нужно. Тоесть плавно загорается и гаснет. А Вот в лампу что-то не идет ((

Код прилагаю.

PHP код:
#include "CyberLib.h" //Библиотека от Cyber-Place.ru
volatile uint8_t ticDimmer1Dimmer2Dimmer3;
uint8_t data;
unsigned long timing;

void setup() 

  
D4_OutD5_OutD6_Out//Настраиваем порты на выход
  
D4_LowD5_LowD6_Low//установить на выходах низкий уровень сигнала
  
D2_In//настраиваем порт на вход для отслеживания прохождения сигнала через ноль  
  
//CHANGE – прерывание вызывается при любом изменении значения на входе; 
//RISING – вызов прерывания при изменении уровня напряжения с низкого (Low) на высокий(HIGH) 
//FALLING – вызов прерывания при изменении уровня напряжения с высокого (HIGH) на низкий (Low) 
    
attachInterrupt(0detect_upLOW);  // настроить срабатывание прерывания interrupt0 на pin 2 на низкий уровень
    
StartTimer1(halfcycle40); //время для одного разряда ШИМ
    
StopTimer1(); //остановить таймер
    
UART_Init(115200); //инициализация порта
}
//********************обработчики прерываний*******************************
void halfcycle()  //прерывания таймера

  
tic++;  //счетчик  
  
if(Dimmer1 tic D4_High//управляем выходом
  
if(Dimmer2 tic D5_High;  //управляем выходом
  
if(Dimmer3 tic D6_High;  //управляем выходом 
}

void  detect_up()  // обработка внешнего прерывания. Сработает по переднему фронту
{  
 
tic=0;             //обнулить счетчик
 
ResumeTimer1();   //запустить таймер
 
attachInterrupt(0detect_downHIGH);  //перепрограммировать прерывание на другой обработчик
}  

void  detect_down()  // обработка внешнего прерывания. Сработает по заднему фронту
{   
 
StopTimer1(); //остановить таймер
 
D4_LowD5_LowD6_Low//логический ноль на выходы
 
tic=0;       //обнулить счетчик
 
attachInterrupt(0detect_upLOW); //перепрограммировать прерывание на другой обработчик

//*************************************************************************
void loop() {
if (
Dimmer1 255 ) { // Вместо 10000 подставьте нужное вам значение паузы
    
while (Dimmer1 255) {
      if (
millis() - timing 30) {
        
timing millis(); 
        
Dimmer1++;
        
//analogWrite(6, Dimmer);
      
}
    }
  }
  else
  {
    while (
Dimmer1 0) {
      if (
millis() - timing 30) {
        
timing millis();    
        
Dimmer1--;
        
//analogWrite(6, Dimmer);
      
}
    }
  }

demoniaus вне форума   Ответить с цитированием
Старый 20.05.2020, 11:06   #9
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

Цитата:
Я так понимаю там не используется Serial порт
Используется, Вы просто невнимательно прочитали пост. Проверьте код из шапки, это называется поиск ошибок методом исключения. Что бы Вы не думали , что проблема в моем коде
Admin вне форума   Ответить с цитированием
Старый 20.05.2020, 12:04   #10
demoniaus
Junior Member
 
Регистрация: 18.05.2020
Сообщений: 6
Вес репутации: 0
demoniaus is an unknown quantity at this point
По умолчанию

Цитата:
Сообщение от Admin Посмотреть сообщение
Используется, Вы просто невнимательно прочитали пост. Проверьте код из шапки, это называется поиск ошибок методом исключения. Что бы Вы не думали , что проблема в моем коде
Здравствуйте! Хочу отметить, я не утверждал что код не рабочий. Все-таки у остальных то он работает. Я просто сказал, что по какой-то причине этот код не работает у меня. Скорее всего я что-то делаю не так.

Итак, залил в ардуино нано код из шапки без изменений. Я работаю через arduino ide.
Лампочка просто загорелась на каком то уровне яркости. Далее как попробовать изменить яркость?
Я попробовал открыть монитор порта и внести туда какое-то значение. Но лампа не реагирует. Как горела на каком-то уровне так и горит. Приложу несколько фото. Возможно с подключением что-то не то?

Фотка1 Фотка2
demoniaus вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 13 (пользователей: 0 , гостей: 13)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 02:51. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика