Замена кнопки фоторзистором.

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

  1. Black_Parrot

    Black_Parrot Нуб

    Здавствуйте, существует ли простой способ подключить
    фоторезистор к Digital input?
    Я нашел способ с использованием конденсатора и замером времени.
    Но, мне не нужно измерять диапазон значений - мне нужно что-то вроде
    (0-60) = 1
    (60-255) = 0 или наоборот.
    Света меньше, чем, Х, значит 0, если больше, то 1.

    Прокатит ли номер с уменьшением сопротивления понижающего резистора? Не 10ком, а меньше(подобранное опытным путем)?
     

    Вложения:

  2. rav_75

    rav_75 Гик

    Программно неохота сделать? Тогда компаратор Вам в помощь.
     
  3. Unixon

    Unixon Оракул Модератор

  4. Black_Parrot

    Black_Parrot Нуб

    Спасибо. Правда компаратор не подходит. Получается, что проще с конденсатором сделать. Может есть что-то не точное. Там определять нужно всего лишь - закрыт ли фоторезистор. Эдакая сенсорная кнопка, коих будет порядка 12 штук, подключенных через сдвиговые регистры.

    Используя конденсатор?
     
  5. rav_75

    rav_75 Гик

    Какой конденсатор? Как на схеме у Вас используя делитель напряжения на аналоговый вход с последующей обработкой значений в программе. Но, судя по Вашей задумке, это не подойдет. Мне кажется фоторезистор в качестве сенсорной кнопки как-то не очень. Что будет, когда стемнеет? Либо кто-то или что-то заслонит свет? Я бы использовал специализированные сенсоры.
    И почему компаратор не подходит?
     
  6. Black_Parrot

    Black_Parrot Нуб

    Много компонентов = $$ + сложность с расположением всего этого добра на плате. На каждый фотосенсор цеплять. (((

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

    Измерения не будут производиться.

    Кратковременное затемнение - не проблема. У меня счет идет на десятки минут(если 10 минут сенсор закрыт, то...)

    Да нашел в интернете пример, что можно измерять с помощью digital input, если считать время разряда конденсатора программно.

    К сожалению не подойдет. Нужны digital input.
     
  7. rav_75

    rav_75 Гик

    Мне кажется Вы немного переоцениваете сложность реализации. Хотя я еще тот схемотехник :D. Мне кажется Вам понадобится 12 фоторезисторов и 12 резисторов для того, чтоб получить аналоговый сигнал на основе делителя напряжения, 3 LM339 и один потенциометр для подстройки опорного напряжения на компараторах. В итоге дешево и сердито 12 цифровых датчиков. Если в чем ошибаюсь, поправьте, ибо практики в этом направлении вообще нет :D
    А можно схему с конденсатором посмотреть?
     
    Black_Parrot нравится это.
  8. Black_Parrot

    Black_Parrot Нуб

    Код (Text):
    /* Photocell simple testing sketch.
    Connect one end of photocell to power, the other end to pin 2.
    Then connect one end of a 0.1uF capacitor from pin 2 to ground
    For more information see http://learn.adafruit.com/photocells */
    int photocellPin = 2;    // the LDR and cap are connected to pin2
    int photocellReading;    // the digital reading
    int ledPin = 13;    // you can just use the 'built in' LED
    void setup(void) {
      // We'll send debugging information via the Serial monitor
      Serial.begin(9600);
      pinMode(ledPin, OUTPUT);  // have an LED for output
    }
    void loop(void) {
      // read the resistor using the RCtime technique
      photocellReading = RCtime(photocellPin);
      if (photocellReading == 30000) {
        // if we got 30000 that means we 'timed out'
        Serial.println("Nothing connected!");
      } else {
        Serial.print("RCtime reading = ");
        Serial.println(photocellReading);    // the raw analog reading
        // The brighter it is, the faster it blinks!
        digitalWrite(ledPin, HIGH);
        delay(photocellReading);
        digitalWrite(ledPin, LOW);
        delay(photocellReading);
      }
      delay(100);
    }
    // Uses a digital pin to measure a resistor (like an FSR or photocell!)
    // We do this by having the resistor feed current into a capacitor and
    // counting how long it takes to get to Vcc/2 (for most arduinos, thats 2.5V)
    int RCtime(int RCpin) {
      int reading = 0;  // start with 0
      // set the pin to an output and pull to LOW (ground)
      pinMode(RCpin, OUTPUT);
      digitalWrite(RCpin, LOW);
      // Now set the pin to an input and...
      pinMode(RCpin, INPUT);
      while (digitalRead(RCpin) == LOW) { // count how long it takes to rise up to HIGH
        reading++;      // increment to keep track of time
        if (reading == 30000) {
          // if we got this far, the resistance is so high
          // its likely that nothing is connected!
          break;          // leave the loop
        }
      }
      // OK either we maxed out at 30000 or hopefully got a reading, return the count
      return reading;
    }
     

    Вложения:

    • cdsRCschm.gif
      cdsRCschm.gif
      Размер файла:
      1,8 КБ
      Просмотров:
      342
  9. Black_Parrot

    Black_Parrot Нуб

    А! Так вот он какой. Я искал "компаратор" и находил что-то более серьезное.

    А как этот делитель работает? Я подрубаю фоторезистор в + , заземляю "-" через понижающий резистор. и на выходе получаю 0 или 1. Порог определяется номиналом понижающего резистора, так? Если да, то мне и вправду так будет проще.
    Я просто в этом не силен-раньше в аналог пускал и там диапазоны задавал.
     
  10. Black_Parrot

    Black_Parrot Нуб

    A! Мне нужен не понижающий резистор, а именно потенциометр или делитель напряжения! И я могу один потенциометр/делитель запараллелить на все входы(-) компаратора?
     
  11. rav_75

    rav_75 Гик

    Про делитель напряжения написано в вики, а так же есть уроки от Джереми Блюма, 3 и 4 урок. Подключаем делитель (в котором один из резисторов фоторезистор) к одному входу компаратора (+), а потенциометр (который по сути тоже делитель напряжения) к другому (-). Подкручивая понтециометр добиваемся, чтоб при закрытом сенсоре был логический ноль на выходе, а при открытом логическая единица. Да, с потенциометра выход можно запараллелить на все входы компаратора, так как датчики одинаковые и будут выдавать примерно одинаковые значения. Ну +/-, но, думаю, можно будет добиться нужного результата.
     
    Black_Parrot нравится это.
  12. Black_Parrot

    Black_Parrot Нуб

    Я вроде бы и понимаю, что такое делитель, но не очень понимаю, что подключать к компаратору. Мне нужно сравнивать именно 2 делителя(ну, понятно, что один я запараллелю)?
    Надеялся, что можно отделаться минимальным количеством компонентов. )))) Ахаха, в однослойную плату это может все не влезть )))
     
  13. rav_75

    rav_75 Гик

    Наверное как-то вот так надо подключить. С помощью потенциометра задаем опорное напряжение, с которым компаратор будет сравнивать напряжение с датчика. В зависимости от того, ниже напряжение с датчика или выше опорного, на выходе будем иметь 0 или 1. Надеюсь ничего не напутал :D
     
    Black_Parrot и Unixon нравится это.
  14. Black_Parrot

    Black_Parrot Нуб

    Cпасибо. Попробуем )))
     
  15. Black_Parrot

    Black_Parrot Нуб

    Не получилось у меня с компаратором. Ахаха. Вот так подключил(вариант первый) - выдает исключительно 0, как я потенциометр ни кручу. Резисторы на схеме - все 10ком.

    зато! Получилось, как я вначале хотел(топорно) - вариант 2. Правда потом поменял резистор на повышающий, чтобы инвертировать значения.
    Странно, почему с компаратором не получилось. :/
     

    Вложения:

  16. Black_Parrot

    Black_Parrot Нуб

    Ой, даже еще проще. Вот так попробовал и получилось. Фоторезистор закрыт - о, открыт - 1
     

    Вложения:

  17. rav_75

    rav_75 Гик

    В схеме с компаратором R3 лишний... Схема 3 - классический способ подключения аналоговых датчиков к аналоговым входам, т.е. делитель напряжения с переменным резистором. Если взять аналогичную схему, где вместо датчика тактовая кнопка - то все правильно, так оно и работает. Но у нажатой кнопки сопротивление ничтожно мало и подтягивающий резистор в цепи как бы роли не играет, а через разомкнутую вообще ток не идет, таким образом получаем четкие логические 0 и 1. Не знаю, насколько стабильно будет работать Ваша конструкция, не силен, но вероятно имеет право на жизнь. Надеюсь знающие люди подскажут. Вторая схема по сути то же, что и третья, только два резистора подключены параллельно (R6 и R7) . Если они имеют одинаковый номинал, то Вы просто уменьшили сопротивление на этом участке по сравнению со схемой 3 в 2 раза.
     
  18. Black_Parrot

    Black_Parrot Нуб

    Без него тоже не работает. ((

    вот я надеялся, что так прокатит. А резистором можно менять порог срабатывания.
     
  19. rav_75

    rav_75 Гик

    странно..
    Вот чего вычитал
    Вычитано здесь. Посмотрев даташит (стр.412) для atmega328p, судя по графику при Vcc=5V пороги будут примерно 2.15V и 2.65V для логических 0 и 1 соответственно, если я все правильно понял. Таким образом, если подобрать постоянный резистор в Вашей схеме, при котором диапазон напряжения в полученном делителе будет от <2V (темно) и до >3V (светло) то вполне себе можно считать схему рабочей. Не знаю, как будут обстоять дела с наводками и всякими помехами. Кто знает, подскажите. А так возьму себе на заметку.