Термодатчик LM75A

Joiner
Offline
Зарегистрирован: 04.09.2014

Как-то просто так купил в китае несколько датчиков температуры LM75A. Это такая штучка в корпусе sop8. Вот ссылка на него http://www.ebay.com/itm/3PCS-NEW-LM75A-LM75AD-NXP-SOP-8-I2C-IIC-Digital-Temperature-Sensor-IC-/221948619187?hash=item33ad2b29b3:g:bKgAAOSwgyxWUq43

Зачем купил, сам не знаю. Недавно дошли руки. Оказывается интересная штука. Измеряет температуру от -55 до 125 градусов С, связь по I2C, да еще у него есть вывод, который можно запрограммировать на реакцию на изменение температуры. Т.е. можно сделать какой-нибудь термостат без всяких ардуин. Если все же с ними общаться по I2C, то можно подключить до восьми датчиков.

Я уже немного поигрался с ними, и еще раз убедился что в программировании я почти ноль, но....хочу все-таки разобраться. Надеюсь на помощь ...... может кто что-то и подскажет.

Для опытов начал делать платки, чтобы припаять к ним датчики, обозначить адреса... Буду экспереминтировать с двумя датчиками. Платки делал по Лазерно- Ацетоново-Алкогольной технологии, т.е. без применения какого-либо нагревания.... Покажу

Печатаем плату на глянцевом журнале. Намазываем плату смесью ацетона и спирта и прижимаем к ней бумагу струбциной

Ждем 40 мин, вытаскиваем, подсушиваем и замачиваем в воде

Снимаем бумагу

Обрабатываем в парах ацетона

Травим, и получаем 3 платки для установки термодатчиков

Распилю, спаяяю покажу. Потом начну опыты по изучению I2C и датчика, как с него считывать, как его программировать.

Joiner
Offline
Зарегистрирован: 04.09.2014

Ну вот...сделал платку, с горем пополам. Немного коряво. Трудно такое делать руками, которые большую часть жизни держали топор и долото :). Но... она работает!

Вот фотка работы скетча

Это только начало. Считывается всего 1 байт и показывается только целая часть температуры. А вообще может показывать с точностью до 0.125 градуса С, может показывать отрицательную температуру. Может работать термостатом, может контролировать диапазон температур. И это при всем при том, что стоит копейки.

Планирую поставить в отсек аккумуляторов, для контроля температуры при быстрой зарядке.

slider
Offline
Зарегистрирован: 17.06.2014

подпишусь на тему.

с год назад себе десяток взял. они очень дешего обошлись. брал чтоб повторить немецкий проект слежения за токами и напряжениями солнечных панелей, сайт был на микросд на w5100 + UNO. пока микрухи дошли, переделал на ds18b20 (их хоть можно далеко вынести) . а потом и инет закрыли. 

температура с lm75a отображается с десятыми долями если интересно http://www.a-d-k.de/20111229_180325-solda.htm

черкните если что, можно ли их в параллель садить , назначая им разные адреса?

Joiner
Offline
Зарегистрирован: 04.09.2014

slider пишет:

..........

черкните если что, можно ли их в параллель садить , назначая им разные адреса?

Да, можно....до восьми штук. Адрес можно задать ножками А0, А1, А2..Подтягивать можно каждую из них или к 5в или к земле, тем самым получить 8 адресов. Пишут, что висячими в воздухе их оставлять нельзя. А по поводу дальности связи по I2C я не знаю...пока. Будем изучать.

P.S. За ссылочку спасибо. Как понял там какая-то библиотека. Пошел читать, пробовать

P.P.S Прочитал описание интерфейса I2C, пишут что длина линии до двух метров. Но еще прочитал статью про автомобильный процессор, там автор статьи пишет, что один из датчиков прекрасно работает по проводам длиной 7 метров, смотанным в бухту.

 Найду длинные провода, попробую соединиться по ним и посмотреть как работает.

P.P.P.S Теперь у меня два датчика, стоят рядом в макетке. Запустил скетчик для двух датчиков. Порадовало, что показания с датчиков градус в градус.  Про десятые градуса ни чего сказать не могу. Десятые пока считывать не научился.

Joiner
Offline
Зарегистрирован: 04.09.2014

Просьба к спецам - подскажите, пожалуйста, правильно ли я делаю, что подтягиваю пины датчиков А0, А1, А2 к +5в или к земле напрямую без  резисторов?

bwn
Offline
Зарегистрирован: 25.08.2014

Joiner пишет:

Просьба к спецам - подскажите, пожалуйста, правильно ли я делаю, что подтягиваю пины датчиков А0, А1, А2 к +5в или к земле напрямую без  резисторов?

А чего им будет то? )))).

Joiner
Offline
Зарегистрирован: 04.09.2014

bwn пишет:

А чего им будет то? )))).

Спасиб....вроде ничего не делается,...работают пока :) Были сомнения, может на ток потребления как влияют?

Joiner
Offline
Зарегистрирован: 04.09.2014

Написал скетч, снимаю показания с двух датчиков. В даташите написано, что температура хранится в двухбайтовом регистре. В скетче вроде написано считывать 2 байта, но читается всего один байт. Голова уже лопается, не могу понять, что не так делаю. Может кто подскажет? С первого датчика вывожу в десятичном, со второго - в бинарном.

#include <Wire.h>
#define sensor1 0x4B
#define sensor2 0x4F
int c=0;
void setup() 
{
  Serial.begin(9600);
  Wire.begin();
}

void loop()
{
  Wire.beginTransmission(sensor1);
  Wire.write(0x00);  
  Wire.endTransmission(); 
  Wire.requestFrom(sensor1, 2); 

 
    c=Wire.read();
    //int f=(c*9.0/5.0+32);
    Serial.print("Sensor 1 - ");
    Serial.print(c);
    Serial.println(" C");
   // Serial.print(f);
    //Serial.println("F,");
  delay(1000);


  Wire.beginTransmission(sensor2);
  Wire.write(0x00);  
  Wire.endTransmission(); 
  Wire.requestFrom(sensor2, 2); 

 
    c=Wire.read();
    //int f=(c*9.0/5.0+32);
    Serial.print("Sensor 2 - ");
    Serial.print(c,BIN);
    Serial.println(" C");
   // Serial.print(f);
    //Serial.println("F,");
  delay(1000);
}

P.S. Подключил датчик проводами 2 пары, выдраные из витой пары. Длина линии 5 метров.  Датчик работает без проблем.

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

Joiner, в 16/ 32 строке ты говоришь, что будешь читать 2 байта. Но читаешь в 19 / 35 строке только один байт.  Нужно читать примерно так:

float c=  (( (Wire.read() <<8) |  Wire.read() ) >>5) * 0.125 ; расшифровка -счатать старший  первый байт, подвинуть его на 8 бит влево сложить его с вторым байтом, итог сдвинуть на 5 бит вправо, умножить на 0,125 и записать в переменную с. Всё это я прочёл в даташите сейчас,  7 страница. Мог в чём то и ошибиться, но общая идея должна быть верной.

Joiner
Offline
Зарегистрирован: 04.09.2014

dimax пишет:

Joiner, в 16/ 32 строке ты говоришь, что будешь читать 2 байта. Но читаешь в 19 / 35 строке только один байт. ....................

Так меня учил Джереми Блюм......или я его так понял :)

dimax, спасибо. Изучаю даташит. Пытаюсь что-то понять. Понемногу продвигаюсь......с огромным трудом.

Нашел еще старинную библиотеку от 2011года, переделал ее на современные условия, она теперь работает, но неправильно. Показывает температуру с десятыми долями, но абсолютно неправильно.

P.S. Методом тыка запустил с библиотекой. Показывает изменения с шагом 0.5 градуса. В положительной части все нормально, в отрицательной прикольно....Выставил датчик в форточку...Показания опустились до 0, потом -1.5, потом -1.0, потом -2.5, потом -2.0 Короче, сикось на кось :(

Метод тыка не подходит.

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

Joiner, а то что я предложил -какие результаты даёт?

Joiner
Offline
Зарегистрирован: 04.09.2014

dimax пишет:

Joiner, а то что я предложил -какие результаты даёт?

Пока не пробовал...Библиотеку добивал. Вечером попробую. Только таких инструкций  <<8) |  Wire.read() ) >>5 ; я вообще не понимаю что они делают, это пока выше моего понимания. Но попробую разобраться.

Спасибо.

Joiner
Offline
Зарегистрирован: 04.09.2014

Вести с полей

Joiner
Offline
Зарегистрирован: 04.09.2014

dimax пишет:

Joiner, а то что я предложил -какие результаты даёт?

dimax, еще раз спасибо!!!!!!!!!!!!!!! Попробовал, получилось. Теперь выдает с точностью 0.125

Теперь видно, что показания, рядом стоящих датчиков, немного отличаются (на 0.625).

 Остается решить задачу вывода отрицательной температуры.

dimax, подскажите.

Я тут гранит науки несколько дней грыз безрезультатно :(, а Вы - одной строчкой мимоходом!!!!!!

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

Joiner, а что не так с выводом отрицательной температуры? По идее та строчка должна корректно выводить отрицательные значения..

Joiner
Offline
Зарегистрирован: 04.09.2014

dimax пишет:

Joiner, а что не так с выводом отрицательной температуры? По идее та строчка должна корректно выводить отрицательные значения..

Сегодня попробую отрицательную, но там вроде по другому считается. В даташите на той странице, которую Вы указали, две формулы. Если старший байт не 1, то считается иначе. Мне так кажется.

Сегодня попробую.

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

Joiner, никакой разницы. Единственно "слабое" место -в момент когда 11 байтовое значение двигается на 5 байт вправо. Тут знак может потеряться, но насколько я понимаю компилятор СИ понимает эти ситуации,  и корректно заполняет всю освободившуюся левую сторону int'а единицами.

Joiner
Offline
Зарегистрирован: 04.09.2014

dimax пишет:

Joiner, никакой разницы..........................

Я сильно удивился!!!.....Но оно работает!!!! Смотрел библиотеку, там такое наворочено, и работает коряво! А здесь одна строчка!

dimax, тысячекратное спасибо за помощь!

А вот фото

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

Joiner, эта строчка не является чем-то уникальным, в каких то вариациях она уже встречалась мне, и аналогичными выражениями уже пользовался, поэтому на неё ушло 3 минуты. Гораздо интереснее сделать что-то , что ещё не делал. Вот например как можно сделать  не используя тип float. Скетч сразу может похудеть на пару килобайт.

int8_t x = Wire.read();
uint16_t y = Wire.read();
x&(1<<8)? y = (8-(y>>5))*125 : y = (y>>5)*125;
Serial.print(x);   
Serial.write(",");   
Serial.println(y);
Joiner
Offline
Зарегистрирован: 04.09.2014

dimax пишет:

... Вот например как можно сделать  не используя тип float. Скетч сразу может похудеть на пару килобайт..

.....

dimax, спасибо! Переписал, работает!

Joiner
Offline
Зарегистрирован: 04.09.2014

Есть еще в этом датчике выход OS, который по схеме в даташите подтянут к +питания через резистор. В регистрах записаны 80 градусов и 75 градусов по умолчанию. Т.Е. напряжение на OS будет +5в пока температура не достигнет 80 градусов. При достижении 80 градусов, напряжение на OS упадет в 0. При последующем увеличение температуры состояние вывода изменяться не будет. Но при снижении температуры ниже 75 градусов OS снова переключится в состояние +5. В регистры можно записать свои значения температуры, что я и сделал. Работает прекрасно. Вроде бы на основе этого датчика можно сделать термостат без применения микроконтроллера, НО.....

при выключении питания содержание регистров вновь становятся 80 и 75 градусов. Т.Е. энергонезависимой памяти нет. Немного обидно.

В целом впечатление хорошее. Много где можно применить, и точность приемлимая, примерно 2 градуса. У меня на улице один датчик показывает сейчас   -0.5 градуса, другой +1.37 градуса, а спиртовой градусник за окном примерно +1.5 градуса. (второй датчик гораздо ближе к истине)

Огорчили энергозависимые регистры.

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

Joiner, точность +/- 2 градуса приемлимая?)) У DS18B20 точность +/- 0,5 -и мне казалось, что это многовато.  У обычного медицинского ртутного градусника -точность 0,1.

Joiner
Offline
Зарегистрирован: 04.09.2014

dimax пишет:

Joiner, точность +/- 2 градуса приемлимая?)) У DS18B20 точность +/- 0,5 -и мне казалось, что это многовато.  У обычного медицинского ртутного градусника -точность 0,1.

УПС. 

Я с другими датчиками не сталкивался пока. Поэтому мне трудно судить. И правильно ли я понимаю, что такое точность? Точностью можно назвать шаг вывода температуры, у LM75A она 0.125 градуса.

В последнем сообщении под точностью я имел в виду как совпадают показания датчиков с реальной температурой.

Постараюсь в ближайшее время поэксперементировать с другими датчиками, после этого смогу сделать вывод.

P.S. Посмотрел на ебее DS18B20, 5шт примерно 300р. Понравилось, что всего 3 ноги, и удобно в колбочку прятать. Закажу, попробую.

bwn
Offline
Зарегистрирован: 25.08.2014

Точность - максимально допустимое отклонение отображаемой температуры от фактической. К разрешающей способности отношения не имеет. DS-ки, из тех, что попадались в этот диапазон укладывались. В подавляющем большинстве бытовых применений  0,5 градуса вполне приемлемо.

Кстати, если проверяете, то лучше это делать на ненагреваемой поверхности (деревянный стол), ограничив датчики какими либо стенками (для исключения локальных сквозняков). Сверка на улице не учитывает много дестабилизирующих факторов (даже на расстоянии пары сантиметров между датчиками).

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

Joiner, Бывают датчики уже в "колбочке" :) Чуток подороже правда.

Точность -это максимально допустимое расхождение от реального значения. А разрешение - это минимальный шаг измерения данной величины.  У DS18B20 точность +/- 0,5 гр, а разрешение 0,0625 гр.

Joiner
Offline
Зарегистрирован: 04.09.2014

Всем спасибо. Буду ждать DS18B20. После получения продолжу, ну и субъективно сравню :)

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

Joiner, думаю можно значение  с  LM75  сравнить с обычным градусником, а потом разницу программно прибавлять/вычитать. Должно получится хорошо.

Joiner
Offline
Зарегистрирован: 04.09.2014

dimax пишет:

Joiner, думаю можно значение  с  LM75  сравнить с обычным градусником, а потом разницу программно прибавлять/вычитать. Должно получится хорошо.

Я думал об этом... Но есть еще вариант. У меня подключены 2 экземпляра. Один из них показывает довольно точно. Остается проверить это во всем диапазоне измеряемых температур. Пока планирую для измерения температуры на улице, т.е от -40 до 35.

uragan
Offline
Зарегистрирован: 23.02.2015

А если индивидуально оттарировать каждый датчик, результаты в массив, насколько стабильны будут показания?

Joiner
Offline
Зарегистрирован: 04.09.2014

uragan пишет:

А если индивидуально оттарировать каждый датчик, результаты в массив, насколько стабильны будут показания?

Ни чего не могу сказать...не пробовал.

Joiner
Offline
Зарегистрирован: 04.09.2014

Пришла, заказанная ранее, такая штука

http://www.ebay.com/itm/231572306016?_trksid=p2057872.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT

Шла очень долго, но порадовала. Сравнивал с показаниями двух уличных спиртовых, двух медицинских ртутных....показывает очень точно, в пределах 0.1 градуса.    И ЖК дисплей есть и ардуинки не надо......Заказалеще два :)

Joiner
Offline
Зарегистрирован: 04.09.2014

Пришли остальные, заказанные. Удивила копеечная цена. У нас комплект батареек стоит немного дешевле. Имею в виду батарейки которые стоят внутри термометров и пришли вместе с ними. Наконец собрал их вместе и сравнил показания. Нулевую температуру показывают одинаково, но +_ около нуля разница достигает около одного градуса. Комнатная температура на фотке

Один из них - кандидат на разборку. Хочется посмотреть, что там внутри. Может какая-нибудь маленькая ардуинка? :)

P.S. Открыл, посмотрел.....Зелененькая плата, на ней черный шлепок, а впереди ЖК индикатор...

Собрал....работает.

a5021
Offline
Зарегистрирован: 07.07.2013

Я такой покупал году в 2012-м. Какое-то время он у меня висел на стенке, потом случился ремонт в квартире и в неразберихе он потерялся. Нашелся только в конце прошлого года, когда я полез что-то искать в одной из коробок с барахлом. Удивление мое вызвал тот факт, что приборчик продолжал работать и исправно показывал температуру. Сейчас опять висит на стенке. Батарейку я ему не менял. Впечатляет "запас хода".

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Давно юзаю такие где попало.
Только у них есть два варианта:
у одного время измерения (обновления показаний) секунд 5, а у другого раз в минуту.
Ваш какой, если не секрет?

похоже на " быстрый " https://www.youtube.com/watch?v=jrUmbl6Qius
http://www.ebay.com/itm/311388382784

 

a5021
Offline
Зарегистрирован: 07.07.2013

Снял со стенки, вынес на балкон. По ощущениям, где-то раз в минуту происходит изменение показаний на экране. Так бы и не знал. :)

Joiner
Offline
Зарегистрирован: 04.09.2014

У моих обновление через несколько секунд.

ANDR390
Offline
Зарегистрирован: 29.04.2018

 

Печатаем плату на глянцевом журнале. 

А принципиальную схему нарисуете? а то не понял

bizzon
Offline
Зарегистрирован: 29.03.2016

Нарисуют . Ещё через 2 года :)

Чего непонятного- конденсатор по питанию, резистор подтяжки на выходе. Всё согласно даташиту.

ANDR390
Offline
Зарегистрирован: 29.04.2018

спасибо

ANDR390
Offline
Зарегистрирован: 29.04.2018

типа вот так?

я просто эту схему сразу незаметил, и ещё, кондер на 100нанофарад а вольт сколько?

bizzon
Offline
Зарегистрирован: 29.03.2016

Попробуйте сами догадаться- ведь он стоит параллельно источнику питания :-))

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

А что, в источнике питания те же самые вольты? Ж8( )

ANDR390
Offline
Зарегистрирован: 29.04.2018

bizzon пишет:

Попробуйте сами догадаться- ведь он стоит параллельно источнику питания :-))

ну как сказать, то что он стоит паралельно источнику питания мне это если чесно ничего не даёт, а конденсатор на 3.3V и 100nF я не нашёл.

bizzon
Offline
Зарегистрирован: 29.03.2016

Открою страшную тайну- напряжение должно быть выше напряжения источника питания- неважно на сколько выше. Хоть в сто раз.

ANDR390
Offline
Зарегистрирован: 29.04.2018

bizzon пишет:

Открою страшную тайну- напряжение должно быть выше напряжения источника питания- неважно на сколько выше. Хоть в сто раз.

Вот теперь спасибо, я ж не знал, начинающий так сказать...

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Ну да, то есть если весы на 120 кг, то взвешивать на них 119 - уже нельзя.

 

PS. Мне кажется, что даже если есть заученное наизусть, при полном отсутствии здравого смысла это не поможет.

ANDR390
Offline
Зарегистрирован: 29.04.2018

Ты о чём?