Ардуино, диммер, код

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем yden, 13 апр 2018.

  1. yden

    yden Гик

  2. ELITE

    ELITE Гик

    это по сути просто усилитель сигнала
    их можно подключить ровно столько, сколько ШИМ выходов есть у вашей ардуины
     
  3. user999

    user999 Гик

    У меня есть парочка таких. На лампе накаливания отлично работает. С вентилятором не работает
     
  4. SergeiL

    SergeiL Гуру

    Не нужно его ШИМ-ом мучить, он на симисторе, на переменное напряжение с Zero-Сross.

    Да подключить можно и не один. Главное обеспечить стабильность выдачи импульса открытия симистора, относительно импульса от Zero-Сross.
     
  5. yden

    yden Гик

    Можете кодом поделиться?
     
  6. yden

    yden Гик

    У меня шимом и не получилось. Работает как реле. 0-выкл, все остальные цифры - вкл.
     
  7. SergeiL

    SergeiL Гуру

    Я делал диммер на два канала, на AtTiny85.
    Диммер у меня подключен по UART к ESP, который связан по MQTT с OpenHAB.
    В такой связке, работает очень стабильно.

    Для устойчивой работы такого диммера самый лучший вариант – это использование прерываний от таймера. Если использовать регистры, код и пины подключения (как например пин INT0) могут несколько отличаться на разных процессорах.
     
  8. user999

    user999 Гик

    Код (C++):
    int AC_LOAD = 3;    // Output to Opto Triac pin
    volatile int dimming = 128;  // Dimming level (0-128)  0 = ON, 128 = OFF

    void setup() {
      Serial.begin(9600);
      pinMode(AC_LOAD, OUTPUT);
      attachInterrupt(0, zero_crosss_int, RISING);
    }
    void loop()  {
      for (int i=0; i <= 128; i++){ //72 - 116,  123-128
        dimming=i;
        Serial.println(dimming);
        delay(100);
       }
    }
    void zero_crosss_int() {
      int dimtime = (75*dimming);
      delayMicroseconds(dimtime);
      digitalWrite(AC_LOAD, HIGH);
      delayMicroseconds(10);
      digitalWrite(AC_LOAD, LOW);
    }
     
  9. SergeiL

    SergeiL Гуру

    Ну, это так, попробовать только. :)
    Тут уже обсуждали данный подход и код.

    Нужно использовать таймер, тогда процессор не будет судорожно крутиться в delay() в прерывании.
     
  10. SergeiL

    SergeiL Гуру

    Выложил свой вариант диммера на AtTiny85 здесь.