Оксиметр
- Войдите на сайт для отправки комментариев
Втр, 07/05/2013 - 02:30
Здравствуйте,
Всё мучаюсь с дипломом.
Суть такова, ардуино светит то красным, то инфракрасным светодиодом с равными интервалами времени(), эти светодиоды светят через палец на фотодиод-палец в защищенном от света напальчнике.
По идее, таким образом можно засечь кровоток и определить содержание кислорода в крови, но сигнал на выходе, совсем не похож на ожидаемый, лезут лютые помехи.
#define ledPinRED 2 // светодиод подключается к digital pin 2
#define ledPinIR 3 // IR светодиод подключается к digital pin 3
#define photoPin 2 // фотодиод подключен 2-му аналоговому входу
long previousMillis = 0; // храним время последнего переключения светодиода
long interval = 1; //интервал между включениями светодиода
int valRED = 0; // переменная для хранения значения входного напряжения
int valIR = 0; // переменная для хранения значения входного напряжения
/////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
void setup()
{
Serial.begin(115200);
pinMode(ledPinRED, OUTPUT);
pinMode(ledPinIR, OUTPUT);
}
void loop()
{
//проверяем не прошел ли нужный интервал, если прошел то
if(millis() - previousMillis > interval)
{
static bool state;
state = !state;
if(state)
{
digitalWrite(ledPinRED, HIGH);//взял код из мигания светодиодами без delay
digitalWrite(ledPinIR, LOW);//попеременно мигаем то красным то инфракрасным светодиодом
// analogReference(INTERNAL);
valRED = analogRead(photoPin);//считываем значение с фотодиода при включенном красном
}
else
{
digitalWrite(ledPinRED, LOW);
digitalWrite(ledPinIR, HIGH);//теперь всё наоборот
//analogReference(INTERNAL);
valIR = analogRead(photoPin);//считываем значение с фотодиода при включенном ик светодиоде
}
Serial.print(valRED);//печатаем значения с фотодиода при включенном красном светодиоде
Serial.print(" ");
Serial.print(valIR);//печатаем значения с фотодиода при включенном инфракрасном светодиоде
Serial.print(" ");
Serial.println(millis());//печатаем время
Serial.println();
// сохраняем время последнего переключения
previousMillis = millis();
}
}



http://arduino.ru/Tutorial/Arduino_Interrupts
Читайте тему прерываний для начала. А ещё analogRead() очень не шустрая штука, настолько же не шустрая, как нестабильная millis(). Потому каждый проход кода у вас "как повезёт", рассинхронизация может быть в 2-3 раза. А вы ещё и в serial данные печатаете, который вообще в основе своей асинхронный, и будет работатьпроизвольное время. Приведите листинг из serial.
измените интервал с 1 милисекунды на 1 секунду (или даже более). если снова ничего не получится, проведите измерения аналоговыми приборами (для проверки исправности детекторного блока). если я правильно понял, то смысл в измерении светопоглащения, и скорость тут не важна.
(+) аналогреад очень некорректно мерит быстроменяющиеся величины, светодиод не может зажечься мгновенно, у вас он еще на переднем фронте зажигания, а вы уже пытаетесь мерить, корректируйте код в эту сторону.
Нет, к сожалению нужно мигать с частотой минимум герц 100(
А вообще чудеса какие то: сейчас сделал чтоб горел один светодиод постоянно, и вот что получилось:когда пальца в датчике нет на осцилографе постоянный уровень, но когда пихаю палец какие-то блин шумы, или же полезный сигнал, но частоты слишком высоки для полезного, буду ещё колдовать, фильтр приделаю гляну что произойдет.
спасибо за помощь)
Еще проверь схему чтото не нравится мне логика подключения фотодиода к операционнику ... помойму нехватает подтягивающего резистора
не он норм подключен,
проблема, как оказалась была в наводках с компьютерафильтр и экранированный кабель исправили ситуацию)
Автор. Помогите мне пожалуйста с написанием диплома. Тема аналогичная.
Автор. Помогите мне пожалуйста с написанием диплома. Тема аналогичная.
ЗЫ схема не рабочая :) (просто нарисована с огромной ошибкой)
Спасибо, не обратил внимания на схему включения операционных усилителей. На вход подается не понятное.
Спасибо, не обратил внимания на схему включения операционных усилителей. На вход подается не понятное.
точно, ОУ1 вообще не в режиме, да и подстроечник в обратной связи мягко говоря антенна. Можно еще найти косяки, при желании.
есть ли у вас рабочая схема??
есть ли у вас рабочая схема??
нету т.к. непонятен алгоритм... точнее в голове есть 2 варианта схемы, но их необходимо макетировать. Строго говоря - схемы самые обыкновенные - инвертирующий и неинвертирующий ОУ с ФД на входе. Там и без этого, ошибок много...
А как собрать Оксиметр для воды ?