Эксперимент 5

Тема в разделе "Arduino & Shields", создана пользователем ets, 18 сен 2014.

  1. ets

    ets Нерд

    Из вопросов к эксперименту:

    1. Какой результат работы устройства мы получим, если свет от светодиода будет падать на фоторезистор?
    2. Если мы все же установили фоторезистор так, как сказано в предыдущем вопросе, как нам нужно изменить программу, чтобы устройство работало верно?

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

    Но грань, когда светодиод влияет на фото-резистор, так незаметна, что я даже не знаю, как переписать программу, а уж тем более проверить, правильно ли она работает. В общем, эти два вопроса я не понял, объясните, пожалуйста.
     
  2. vvr

    vvr Инженерище

    А в тёмной комнате под настольной лампой пробовал?
    Сначала убедись что он рабочий
     
  3. ets

    ets Нерд

    Рабочий. Сама схема из эксперимента работает отлично. Вырубаю свет, светодиод загорается, включаю - затухает, всё, как положено. После расположения светодиода рядом с фоторезистором - ничего не меняется - т.е. схема работает так же исправно (при том же повороте ручки потенциометра).
     
  4. vvr

    vvr Инженерище

    Значит пишем в выводах эксперимента №5 - светового потока светодиода недостаточно для работы с данным типом фоторезистора
     
    funyfizik нравится это.
  5. ets

    ets Нерд

    Ок, спасибо.

    Значит, ответы на вопросы будут следующие:
    1. Заметных изменений не наблюдается
    2. И программу менять не надо
     
  6. ets

    ets Нерд

    UPD. Я вновь вернулся к этому вопросу. Теперь, когда мне стала известна команда Serial.print, можно отследить показатели при которых светодиод гаснет и зажигается. Они говорят о том, насколько влияет светодиод на фоторезистор. Также, если сделать задержку в конце цикла, то заметно, как светодиод начинает мигать, чего не должно происходить (или хотя бы свести вероятность и длительность миганий к минимуму).

    Предыдущие ответы на вопросы отменяются.
    1. Разброс между пороговыми значениями включения/выключения при удалённом светодиоде - в среднем 27 (тоже есть, но не так значительно), а при близком расположении - более 100 (иногда проскальзывали значения в 150). Без задержки светодиод горит не в полную силу - то есть мечется между двумя значениями - HIGH и LOW.
    2. Теперь задача уменьшить влияние светодиода программно. Бьюсь весь день.

    Может, кто-нибудь тоже занимался этим вопросом и решил его. Даже если не решил, интересно посмотреть разные версии. Помогите, пока не решу эту задачу, не успокоюсь.
     
  7. vvr

    vvr Инженерище

    Покажи схему и код
     
  8. ets

    ets Нерд

    Схема и код отсюда. Оттуда же и само задание (в самом низу)
    http://wiki.amperka.ru/конспект-arduino:ночной-светильник

    Я там добавил лишь вывод в консоль показаний при переключении светодиода.
    Все свои попытки выполнить задание я, к сожалению, не сохранил, но вот некоторые из них:

    1. Добавлять или убавлять свет искусственно в зависимости от того, включён или выключен светодиод. Иногда разброс компенсировался, но при повороте потенциометра всё слетало.

    2. Добавил счётчик мельканий. Каждый раз, когда светодиод пробегает из одного состояния в другое более определённого количества раз (допустим, 10), свет компенсировался значением, равным разнице между пороговыми значениями включения/выключения. Появились трудности с вычислением этой самой разницы. Даже если взять её за константу, как в предыдущем варианте, то счётчик всё равно рано или поздно ведь придётся обнулить и мелькания начнутся заново.
     
  9. ets

    ets Нерд

    Я тут много понаписал, а на самом деле вся задача - просто ответить на вопросы к эксперименту. Они ведь в пятой схеме и должны быть относительно простыми. Чувствую, что решение элементарное, раз больше никто не обращался за помощью, но, наверное, я недостаточно сообразителен.
     
  10. vvr

    vvr Инженерище

    Вы не обижайтесь, но если вам нужна помощь, то покажите свой код, чётко напишите что вам хочется получить и какие у вас возникают проблемки.
    Тогда может быть кто то и поможет вам.
    Пока только болтовня.
     
  11. ets

    ets Нерд

    На радиокоте помогли, вот готовый скетч для тех, кто столкнётся с теми же трудностями в будущем xD

    Короче, как я и ожидал, решение оказалось довольно простым. Надо просто вырубать светодиод на момент считывания показаний с фоторезистора.

    Код (Text):
    #define LED_PIN  13
    #define LDR_PIN  A0
    #define POT_PIN  A1

    int ledOn = false;
    void setup()
    {
      pinMode(LED_PIN, OUTPUT);
      Serial.begin(9600);
    }
    void loop()
    {
      digitalWrite(LED_PIN, LOW);
      delay(1);
      int lightness = analogRead(LDR_PIN);
      if(ledOn) digitalWrite(LED_PIN, HIGH);

      int threshold = analogRead(POT_PIN);

      boolean tooDark = (lightness < threshold);
      if (tooDark) {
        digitalWrite(LED_PIN, HIGH);
        delay(50);
        if(!ledOn) Serial.println(lightness);
        ledOn = true; // светодиод горит
      } else {
        digitalWrite(LED_PIN, LOW);
        if(ledOn) Serial.println(lightness);
        ledOn = false; // светодиод не горит
      }
    }
     
    Valery нравится это.
  12. altex

    altex Гик

    У этого решения есть минус - светодиод будет мигать. Можно сделать по-другому.
     
  13. funyfizik

    funyfizik Нерд


    просто из-за любопытства, повышаешь навыки или в целях дальнейших модификаций этого примера?
     
  14. ets

    ets Нерд

    Если намекнёшь на решение, буду благодарен. Если нет, то думаю, когда наберусь опыта оно придёт само. А пока я приступлю к следующему уроку, чтоб не топтаться на месте.

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