Здавствуйте, существует ли простой способ подключить фоторезистор к Digital input? Я нашел способ с использованием конденсатора и замером времени. Но, мне не нужно измерять диапазон значений - мне нужно что-то вроде (0-60) = 1 (60-255) = 0 или наоборот. Света меньше, чем, Х, значит 0, если больше, то 1. Прокатит ли номер с уменьшением сопротивления понижающего резистора? Не 10ком, а меньше(подобранное опытным путем)?
Спасибо. Правда компаратор не подходит. Получается, что проще с конденсатором сделать. Может есть что-то не точное. Там определять нужно всего лишь - закрыт ли фоторезистор. Эдакая сенсорная кнопка, коих будет порядка 12 штук, подключенных через сдвиговые регистры. Используя конденсатор?
Какой конденсатор? Как на схеме у Вас используя делитель напряжения на аналоговый вход с последующей обработкой значений в программе. Но, судя по Вашей задумке, это не подойдет. Мне кажется фоторезистор в качестве сенсорной кнопки как-то не очень. Что будет, когда стемнеет? Либо кто-то или что-то заслонит свет? Я бы использовал специализированные сенсоры. И почему компаратор не подходит?
Много компонентов = $$ + сложность с расположением всего этого добра на плате. На каждый фотосенсор цеплять. ((( Согласен. Не хочется вдаваться в детали, чтобы не усложнять. Я собираюсь с помощью фоторезистора определять наличие предмета в ячейке. Если объект в ячейке, то он закроет фоторезистор. Если ячейка пуста, то фоторезистор открыт. По-моему, фоторезистор = самый доступный вариант в данном случае. Просто хочется исключить механические кнопки, которые нажимались бы под весом предмета в ячейке. Измерения не будут производиться. Кратковременное затемнение - не проблема. У меня счет идет на десятки минут(если 10 минут сенсор закрыт, то...) Да нашел в интернете пример, что можно измерять с помощью digital input, если считать время разряда конденсатора программно. К сожалению не подойдет. Нужны digital input.
Мне кажется Вы немного переоцениваете сложность реализации. Хотя я еще тот схемотехник . Мне кажется Вам понадобится 12 фоторезисторов и 12 резисторов для того, чтоб получить аналоговый сигнал на основе делителя напряжения, 3 LM339 и один потенциометр для подстройки опорного напряжения на компараторах. В итоге дешево и сердито 12 цифровых датчиков. Если в чем ошибаюсь, поправьте, ибо практики в этом направлении вообще нет А можно схему с конденсатором посмотреть?
Код (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; }
А! Так вот он какой. Я искал "компаратор" и находил что-то более серьезное. А как этот делитель работает? Я подрубаю фоторезистор в + , заземляю "-" через понижающий резистор. и на выходе получаю 0 или 1. Порог определяется номиналом понижающего резистора, так? Если да, то мне и вправду так будет проще. Я просто в этом не силен-раньше в аналог пускал и там диапазоны задавал.
A! Мне нужен не понижающий резистор, а именно потенциометр или делитель напряжения! И я могу один потенциометр/делитель запараллелить на все входы(-) компаратора?
Про делитель напряжения написано в вики, а так же есть уроки от Джереми Блюма, 3 и 4 урок. Подключаем делитель (в котором один из резисторов фоторезистор) к одному входу компаратора (+), а потенциометр (который по сути тоже делитель напряжения) к другому (-). Подкручивая понтециометр добиваемся, чтоб при закрытом сенсоре был логический ноль на выходе, а при открытом логическая единица. Да, с потенциометра выход можно запараллелить на все входы компаратора, так как датчики одинаковые и будут выдавать примерно одинаковые значения. Ну +/-, но, думаю, можно будет добиться нужного результата.
Я вроде бы и понимаю, что такое делитель, но не очень понимаю, что подключать к компаратору. Мне нужно сравнивать именно 2 делителя(ну, понятно, что один я запараллелю)? Надеялся, что можно отделаться минимальным количеством компонентов. )))) Ахаха, в однослойную плату это может все не влезть )))
Наверное как-то вот так надо подключить. С помощью потенциометра задаем опорное напряжение, с которым компаратор будет сравнивать напряжение с датчика. В зависимости от того, ниже напряжение с датчика или выше опорного, на выходе будем иметь 0 или 1. Надеюсь ничего не напутал
Не получилось у меня с компаратором. Ахаха. Вот так подключил(вариант первый) - выдает исключительно 0, как я потенциометр ни кручу. Резисторы на схеме - все 10ком. зато! Получилось, как я вначале хотел(топорно) - вариант 2. Правда потом поменял резистор на повышающий, чтобы инвертировать значения. Странно, почему с компаратором не получилось. :/
В схеме с компаратором R3 лишний... Схема 3 - классический способ подключения аналоговых датчиков к аналоговым входам, т.е. делитель напряжения с переменным резистором. Если взять аналогичную схему, где вместо датчика тактовая кнопка - то все правильно, так оно и работает. Но у нажатой кнопки сопротивление ничтожно мало и подтягивающий резистор в цепи как бы роли не играет, а через разомкнутую вообще ток не идет, таким образом получаем четкие логические 0 и 1. Не знаю, насколько стабильно будет работать Ваша конструкция, не силен, но вероятно имеет право на жизнь. Надеюсь знающие люди подскажут. Вторая схема по сути то же, что и третья, только два резистора подключены параллельно (R6 и R7) . Если они имеют одинаковый номинал, то Вы просто уменьшили сопротивление на этом участке по сравнению со схемой 3 в 2 раза.
Без него тоже не работает. (( вот я надеялся, что так прокатит. А резистором можно менять порог срабатывания.
странно.. Вот чего вычитал Вычитано здесь. Посмотрев даташит (стр.412) для atmega328p, судя по графику при Vcc=5V пороги будут примерно 2.15V и 2.65V для логических 0 и 1 соответственно, если я все правильно понял. Таким образом, если подобрать постоянный резистор в Вашей схеме, при котором диапазон напряжения в полученном делителе будет от <2V (темно) и до >3V (светло) то вполне себе можно считать схему рабочей. Не знаю, как будут обстоять дела с наводками и всякими помехами. Кто знает, подскажите. А так возьму себе на заметку.