Форум myROBOT.ru » Лаборатория » Микроконтроллеры » HELP!

Страниц (1): [1]
 

1. КОНСТАНТИН239 - 27 Марта, 2012 - 14:56:30 - перейти к сообщению
Мистика Доброго времени суток! HEEEEEEEEEEELP!!! Как снимать данные с фототранзистора на мк. Как я только не извращался. Ниче не получается...
Я все способы писать не стану. Я нарисую только один. Ребята, что неправильно. Мне в языке Arduino Serial.println выдает только одинаковые значения.
В коде программы я делал сигнал на светодиод HIGH и делал analogRead с фототранзистора. И показания были одинаковыми. НУ ПОЧЕМУ?!)
Вот алгоритм:
int photoPin = 0; // фоторезистор подключен 0-му аналоговому входу
int ledPin = 13; // светодиод подключается к digital pin 9
int val = 0; // переменная для хранения значения входного напряжения

void setup()
{
Serial.begin(9600);
}

void loop()
{
digitalWrite(ledPin, HIGH); // зажигаем
delay(2);
val = analogRead(photoPin); // считываем значение с фототранзистора

digitalWrite(ledPin, LOW); // гасим
delay(2);
val = val - analogRead(photoPin); // считываем значение с фототранзистора

Serial.println(val);

// здесь можно проверить значение на превышение заданного порога

delay(200);
}

Вот схема. Питание от юсб(понятно). ПОЧЕМУ У МЕНЯ ПИШЕТ ВСЕГДА 0 иногда -1 иногда -1? Почему photoPin не изменяется?? HELP!
2. cjA - 27 Марта, 2012 - 20:35:13 - перейти к сообщению
А тестер что говорит?
если света нет- должно быть < 0.8V Если свет есть- >1.5V (хотябы)

(я уж не говорю что помоему у Вас схема неправильная, но в ино я не разбираюсь.)
3. nestandart - 28 Марта, 2012 - 08:32:15 - перейти к сообщению
КОНСТАНТИН239 , у вас что программа кривая , что схема , что описание.
Во первых , чего вы хотите от этого устройства ? Это некий ИК бампер ?
Если да то бросьте его и купите TSOP.
Во вторых , неужели сложно нарисовать хотябы ЧИТАЕМУЮ схему ?
В третьих 1Ком для подтяжки маловат . Ставьте 10КОм.

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

Хотя , скорее всего у вас проблемы с фототранзистором.
Попробуйте просто опрашивать АЦП фототранзистора и кидать данные в сериал.
Если ноль то :
1.Неправильная подтяжка.
2.Смените полярность фототранзистора
3.паленый фототранзистор.

Можно померить его сопротивление , при свете и без света . Если не меняется - паленый.
(Добавление)
Кстати , вспомнил.
Когда я начинал , тоже такой дурью маялся.
Вот программка , РАБОТАЕТ 100% (сохранил же я ее!).

CODE:


int val3=0;
int val=0;
int val2=0;

void setup()
{

pinMode(10, OUTPUT);
pinMode(13, OUTPUT);
}

void loop()

{

val=analogRead(14);

digitalWrite(10,HIGH);

delayMicroseconds(30);

val2=analogRead(14);

digitalWrite(10,LOW);

delay(1);
val3=val-val2;
Serial.print(val3);
if(val3>0)
{
digitalWrite(13,HIGH);
}
else
{
digitalWrite(13,LOW);
}
if(val3>=30)
{
digitalWrite(13,LOW);
}


}




и вот схема включения.
Фототранзистор пришлось усиливать эмитерным повторителем.





НО , это устройство очень нестабильно работает.
TSOP намного лучше.