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

Тема в разделе "Флудилка", создана пользователем bromista, 1 мар 2015.

  1. bromista

    bromista Нуб

    Добрый день.
    В ходе выполнения пятого эксперимента, у меня возникли некоторые вопросы, буду весьма благодарен за помощь.
    1. Если мы установим фоторезистор между аналоговым входом и землей, наше устройство будет работать наоборот: светодиод будет включаться при увеличении количества света. Почему?
    Не совсем понял вопрос, имелось ли в виду нечто, изображенное на картинке ниже. Слева как в эксперименте, справа как в вопросе:
    [​IMG]
    Ошибочность такой схемы была понятна сразу. Экспериментально пришел к тому, что в такой схеме не диод вообще не горит. Хотя я ожидал, что гореть он будет постоянно, так как на А0 поступают все 5В, то есть tooDark никогда не станет true. В общем, я не понимаю, что имеется в виду в вопросе. Разжуйте пожалуйста.
    2. Измените схему и программу так, чтобы светодиоды включались по прежнему принципу, но светились тем сильнее, чем меньше света падает на фоторезистор.
    Подскажите пожалуйста, как это сделать.
     
  2. geher

    geher Гуру

    Резистор и фоторезистор всегда должны находиться по разные стороны от средней точки, подключенной к аналоговому входу, как на схеме слева. Таким образом они образуют плечи делителя напряжения, в котором общее падение напряжения в 5 вольт делится между плечами пропорционально их сопротивлению. В результате в средней точке на аналоговом входе имеем промежуточное напряжение между 0 и 5 В.
    Чтобы изменить график изменения уровня на аналоговом входе на обратный, нужно просто поменять резистор и фоторезистор местами. Т.е. фоторезистор будет между аналоговым входом и землей, а резистор между аналоговым входом и 5 В.
    Именно это и имелось в виду, как мне кажется, во фразе "Если мы установим фоторезистор между аналоговым входом и землей"
    В этом случае при уменьшении сопротивления фоторезистора напряжение в средней точке будет смещаться не к 5 В, а к земле.

    В схеме же справа оба резистора оказались в одном плече делителя, что в корне неверно. В теории при таком подключении, как справа, на аналоговом входе всегда должно быть 1024 или около того. Почему у вас, судя по вашему описанию, не так, не вполне понятно. У меня есть ряд гипотез разной степени потенциальной достоверности, но озвучивать их не буду, поскольку не уверен в их справедливости.
     
    Последнее редактирование: 1 мар 2015
    bromista нравится это.
  3. bromista

    bromista Нуб

    Большое спасибо за ответ на первый пункт.
     
  4. vvr

    vvr Инженерище

    сейчас в эксперименте светодиод подключён к 13 пину.
    а яркость светодиода можно изменять только если он будет на пине , где имеется шим - 3, 5, 6, 9,10, 11.
    значит подключаем на любой пин с шимом.
    а теперь меняем яркость в зависимости от освещённости фоторезистора

    Код (Text):
    #define LED_PIN  10
    #define LDR_PIN  A0
    int lightness = 0;
    int light = 0;        // яркость светодиода

    void setup()
    {
      pinMode(LED_PIN, OUTPUT);
    }

    void loop()
    {
      int lightness = analogRead(LDR_PIN);      // данные с фоторезистора
      light = map(lightness, 0, 1023, 0, 254);  // преобразуем данные
                                                // фоторезистора в яркость светодиода
      analogWrite(LED_PIN, light);
    }
     
     
    Последнее редактирование: 1 мар 2015
    bromista нравится это.
  5. bromista

    bromista Нуб

    Большое спасибо.
     
  6. Protuberanez

    Protuberanez Нуб

    Странно, у меня ничего не изменилось за счёт перемены местами резистора и фоторезистора.
    А вот за счёт перемены местами земли и 5V программа стало работать наоборот. Так что думаю вы заблуждаетесь в своей гипотезе.
     
  7. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Это как ? Схема здесь максимально упрощена. Не показано что к GND и +5V еще подключена Ардуина. Это само собой разумеется. А по вашему, это вы получается переполюсовали и Ардуину тоже ? И она работает ? )))))))))
     
  8. Protuberanez

    Protuberanez Нуб

    Извините, но ничего не понял из вашего сообщения)))
    Я поменял местами GND и 5V.
    Т.е. на схеме мы питание даём на фоторезистор, а землю подключаем к резистору, а я поменял их (GND и 5V) местами и принцип работы алгоритма стал противоположный (светло - горит, темно - тухнет) , надеюсь на фото понятно будет. Что именно произошло при этом - не до конца понимаю))
     

    Вложения:

  9. Ariadna-on-Line

    Ariadna-on-Line Гуру

    То есть вместо того чтобы поменять местами две детали идущие к шинам питания, вы перетащили крест-накрест шины питания, идущие к этим двум деталям. Это абсолютно то же самое. Я попытался было дать ответ на ваш вопрос, но понял, что лучше поищите в Гугле по словам "резисторный делитель напряжения с фоторезистором." или
    http://www.joyta.ru/7328-delitel-napryazheniya-na-rezistorax-raschet-onlajn/
     
    Protuberanez нравится это.
  10. Protuberanez

    Protuberanez Нуб

    Хорошо, спасибо.
     
  11. Alex777

    Alex777 Нуб

    2. Измените схему и программу так, чтобы светодиоды включались по прежнему принципу, но светились тем сильнее, чем меньше света падает на фоторезистор.
    Подскажите пожалуйста, как это сделать:
    Код (C++):
    #define LED_PIN  5
    #define LED2_PIN 6
    #define LDR_PIN  A0
    #define POT_PIN A1


    void setup()
    {
      pinMode(LED_PIN, OUTPUT);
      pinMode(LED2_PIN, OUTPUT);
    }

    void loop()
    {
      int lightness = analogRead(LDR_PIN);
      int threshold = analogRead(POT_PIN);
      int light;                                  // яркость светодиода
      light = map(lightness, 0, 1023, 255, 0);    // преобразуем данные фоторезистора в яркость светодиода
      if (lightness < threshold) {
        analogWrite(LED_PIN, light);
      } else {
        analogWrite(LED_PIN, 0);
      }
      if (lightness < threshold/2) {
        analogWrite(LED2_PIN, light);
      } else {
        analogWrite(LED2_PIN, 0);
      }
    }
     
    Последнее редактирование: 16 авг 2023
  12. Alex777

    Alex777 Нуб

    а вот скетч по 2 заданию (выше - задание номер 3):
    как ни странно, работают одинаково, лично я не заметил на глаз разницы
    Код (C++):
    #define LED_PIN 5
    #define LED2_PIN 6
    #define LDR_PIN A0
    #define POT_PIN A1


    void setup()
    {
    pinMode(LED_PIN, OUTPUT);
    pinMode(LED2_PIN, OUTPUT);
    }

    void loop()
    {
    int lightness = analogRead(LDR_PIN);
    int threshold = analogRead(POT_PIN);
    if (lightness < threshold) {
      digitalWrite(LED_PIN, HIGH);
    } else {
        digitalWrite(LED_PIN, LOW);
    }
    if (lightness < threshold/2) {
      digitalWrite(LED2_PIN, HIGH);
      } else {
        digitalWrite(LED2_PIN, LOW);
    }
    }
     
  13. parovoZZ

    parovoZZ Гуру

    либо изменить схему, как в посте 1, либо вычитать результат программно.