Аналоговые датчики температуры и фотодатчик

caca77
Offline
Зарегистрирован: 04.03.2014

Всем привет!

платформа UNO. термодатчик lm35 к А5, фоторезистор к А1, через резистор 10к к минусу. питание от USB

 

float tempC;
int readingTemp;
int tempPin=5;
int lightPin=1;
int readingLight;

void setup()
{
 analogReference(INTERNAL);
 Serial.begin(115200); 
 pinMode(tempPin, INPUT);  
 pinMode(lightPin, INPUT);   
}

void loop()
{
  readingTemp=analogRead(tempPin);
//  tempC=readingTemp*5.0*100/1024;
  tempC=readingTemp*1.1*100/1024;  
  Serial.print("temp = " );
  Serial.println(tempC);
  delay(500);
//  readingLight=analogRead(lightPin);
//  Serial.print(" / light = " );
//  Serial.println(readingLight);
  delay(500);
}

при этом коде выдает вроде как правду

temp = 23.20
temp = 23.10
temp = 22.99
temp = 23.10
temp = 23.10
temp = 23.10
temp = 23.31
temp = 23.20
 
если аналогреференс заремить, т.е. перейти на опорное дефолтное напряжение 5в и разремить коэффициент умножения 5,0в то выводит
temp = 21.97
temp = 21.97
temp = 21.48
temp = 21.97
temp = 21.97
temp = 21.97
 
вот вопрос №1: поxему подвирает на 1 градус?
 
теперь ремим строки касательно термодатчика и разремиваем строки с фотодатчиком, аналогреференс=дефаулт 
 
 / light = 907
 / light = 781
 / light = 690
 / light = 685
 / light = 881
 / light = 904
 / light = 903
 / light = 904
выводит нормально
при смене аналогреференс на интернал - показания зашкаливают...
 / light = 1023
 / light = 1023
 / light = 1023
 / light = 1023
 
вот вопрос №2 - почему? я так понимаю надо сопротивление поменять? в какую сторону?

далее раскоментиваем все строки по обоим датчикам, аналогреференс=дефолт

temp = 21.97
 / light = 902
temp = 26.37
 / light = 901
temp = 15.63
 / light = 901
temp = 14.65
 / light = 902
temp = 15.14
 / light = 903
temp = 15.63
 / light = 904
temp = 15.14
 / light = 904
 
и вот вопрос №3 - самый мне непонятный - почему в показаниях температуры полная хрень?
caca77
Offline
Зарегистрирован: 04.03.2014

Решение: надо было подтянуть вывод термосенсора согласно даташиту через резистор 20кОм на минус...

PS - столько профи тут, а подсказать не смогли:(((

PPS - но мне полезней молчание даже стало - подучил матчасть:)))

 

и вопрос №1 все еще актуальный

вот вопрос №1: почему подвирает на 1 градус при смене опорного напряжения?
caca77
Offline
Зарегистрирован: 04.03.2014

объясните мне, завсегдатаи, что я неправильно в этой ветке сделал что вы меня оставляете без ответов?

1. название темы? "бэээээ... слишком банальный вопрос чтоб тратить время на какогото очередного чайника..."

2. неправильно расписал свои вопросы? "ооо!!! 3 листинга экрана текста... да ну нах их читать..."

3. "ды мы тут все чайники - чо ты от нас вооооще хочешь?" :)))) привлек внимание кого то или в бан сразу)))

 

ps. извините на маленький напор.

inspiritus
Offline
Зарегистрирован: 17.12.2012

Хм .. А 1 и 5 пины разве аналоговые? 

Если Вы хотите работать с аналоговыми А1 и А5, так и пишите 

int sensorpin= A1; // А5

Или 

int sensorpin = 15; // 19

Видимо в мануале к аналогрид очепятка - в адресе пина забыли А дописать.

и еще... Для аналогрида пин не надо инициализировать, как инпут.

http://arduino.cc/en/Tutorial/AnalogInput#.Uxn7d7IaySM

http://arduino.ru/Tutorial/AnalogInputPins

а в качестве температурного датчика я предпочитаю DS18B20

"Доктор меня все игнорируют... Следующий" ;)

maksim
Offline
Зарегистрирован: 12.02.2012
#define tempPin  A5
#define lightPin A1

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

void loop()
{
  analogReference(INTERNAL);
  delay(50);
  int readingTemp = analogRead(tempPin);
  float tempC = readingTemp*1.1*100/1024;  
  Serial.print("temp = " );
  Serial.println(tempC);
  delay(500);
  
  analogReference(DEFAULT);
  delay(50);
  int readingLight = analogRead(lightPin);
  Serial.print(" / light = " );
  Serial.println(readingLight);
  delay(500);
}

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

caca77 пишет:

Решение: надо было подтянуть вывод термосенсора согласно даташиту через резистор 20кОм на минус..PS - столько профи тут, а подсказать не смогли:(((

Вы ничего не путаете? В каком даташите это сказано? По даташиту на LM35 выход  не нужно никуда притягивать. Только для измерения отрицательных температур выход притягивается к минусу, но минусу биполярного источника питания. Сажать через 20 ком на общий вывод питания бессмысленно, там и так низкоимпендансный выход.

caca77
Offline
Зарегистрирован: 04.03.2014

dimax пишет:

caca77 пишет:

Решение: надо было подтянуть вывод термосенсора согласно даташиту через резистор 20кОм на минус..PS - столько профи тут, а подсказать не смогли:(((

Вы ничего не путаете? В каком даташите это сказано? По даташиту на LM35 выход  не нужно никуда притягивать. Только для измерения отрицательных температур выход притягивается к минусу, но минусу биполярного источника питания. Сажать через 20 ком на общий вывод питания бессмысленно, там и так низкоимпендансный выход.

http://www.ti.com/lit/ds/symlink/lm35.pdf рисунок 2

тогда если не надо подтягивать резистором - почему так показания пляшут?

caca77
Offline
Зарегистрирован: 04.03.2014

maksim пишет:

#define tempPin  A5
#define lightPin A1

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

void loop()
{
  analogReference(INTERNAL);
  delay(50);
  int readingTemp = analogRead(tempPin);
  float tempC = readingTemp*1.1*100/1024;  
  Serial.print("temp = " );
  Serial.println(tempC);
  delay(500);
  
  analogReference(DEFAULT);
  delay(50);
  int readingLight = analogRead(lightPin);
  Serial.print(" / light = " );
  Serial.println(readingLight);
  delay(500);
}

это не дает ответа на "вот вопрос №1: почему подвирает на 1 градус при смене опорного напряжения?"

maksim
Offline
Зарегистрирован: 12.02.2012

caca77 пишет:

http://www.ti.com/lit/ds/symlink/lm35.pdf рисунок 2

И? Посмотрите куда подключен резистор на рисунке.

maksim
Offline
Зарегистрирован: 12.02.2012

caca77 пишет:

это не дает ответа на "вот вопрос №1: почему подвирает на 1 градус при смене опорного напряжения?"

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

caca77 пишет:

тогда если не надо подтягивать резистором - почему так показания пляшут?

Для пляски могут быть разные причины, это отдельная и большая тема. Максимальная девиация, не связанная с ошибками подключения по моим наблюдениям не более +/- 2 отсчёта АЦП. Если у вас легчает от подключения резистора на общий провод, значит что-то не так с подключением.

inspiritus
Offline
Зарегистрирован: 17.12.2012

Я полагаю, что вопросы из первого поста топика уже не актуальны, тк вообще непонятно что считывалось. Как ведет себя датчик после применения кода от maksim ?

<<2-maksim : мне непонятно, исходя из чего Вы предлагаете применять опорное напряжение для ЦАП температурного датчика INTERNAL - 1.1v  ? >>

Вы пишите подтянуть на минус, подразумевая минус питания. только вот минус в  даташите подключается не на gnd, а на отрицательное напряжение, полагаю ардовским цап-ом отрицательное напряжение не оцифруется. 

Задавая вопросы по температурному и фото датчикам... Неплохо было бы описать задачи, ими решаемые, возможно их можно решить иными , более эффективными методами.

По поводу отсутствия внимания, полагаю Вам полегчало ;)

PS. Буду благодарен, если кто-то кинется ссылкой на схему для подключения аналогового входа atmega328 для измерения температуры в диапазоне 250-450 С, видимо от Pt100, или термопары (бытовое применение). Спасибо.