Специалист
Регистрация: 24.11.2007
Сообщений: 2,648
Репутация: 266
![]() ![]() ![]() |
Цитата:
Журнал РАДИОЛОЦМАН, октябрь 2014 Jordan Dimitrov EDN Несмотря на то, что для определения концентрации углекислого газа чаще всего используются инфракрасные датчики, электромеханические аналоги составляют им серьезную конкуренцию благодаря высокой чувствительности, широкому диапазону измерений и дешевизне. Электромеханические датчики подключаются к микроконтроллеру, как правило, через буферный усилитель со сверхмалым входным током (менее 1 пА).
|
||
Оценка
|
Знаток
Регистрация: 07.10.2009
Адрес: А кому интересно?
Сообщений: 382
Репутация: 70
![]() |
Да чего-то не соображу, как сюда взятие экспоненты прикрутить. Есть емкостный датчик с логарифмической зависимостью емкости от угла поворота. Емкость датчика определяет частоту RC генератора. В положении минимальной емкости частота составляет 16000 в относительных единицах (в герцы не пересчитывать нет надобности, просто количество подсчитанных счетчиком импульсов за время измерительного интервала), при максимальной емкости 750. Ну и как тут использовать библиотечную функцию exp(double)?
|
||
Оценка
|
Новичок
|
С помощью АЦП замеряете напряжение на датчике Uizm. Нужно знать основание. Если в датчике функция десятичного логарифма lg - основание 10, то расчет будет таким Uantlg = 10 ^ Uizm.
Если функция натурального логарифма ln - основание e, то расчет такой Uantlg = e ^ Uizm. Бывает произвольное основание log n - основание n, тогда Uantlg = n ^ Uizm. Здесь, подбирая n можно получить нужную функцию, как бы n подстроечный резистор.
__________________
Глаза боятся, руки делают! |
||
Оценка
|
Новичок
|
На странице есть решение для Arduino.
Цитата:
/* Carbon dioxide calibration
y = MLogn(x) + C x = e^((y-C)/M) where y is bit value and x is c02 concentration C02 Bit Value 400 279.98 10000 -0.03 =-87*(LN(N25))+800 */ #define Carbon_M -83.45 // was-87 #define Carbon_C 768.62 //was 800 char PIN = A0; int CarbonVal = 0; void setup() { Serial.begin(9600); pinMode(PIN,INPUT); } void loop() { int carbon_temp = analogRead(PIN); float c_float = carbon_temp - Carbon_C; c_float = c_float/Carbon_M; CarbonVal = pow(2.718,c_float); Serial.print(CarbonVal); Serial.println(" ppm"); delay(1000); }
__________________
Глаза боятся, руки делают! |
||
Оценка
|
Новичок
|
Притом, что на выходе этого датчика (CO2 MG-811) милливольты, а не импульсы.
__________________
Глаза боятся, руки делают! |
||
Оценка
|
Обратная связь РадиоЛоцман Вверх |