ds18b20 и китайцы
- Войдите на сайт для отправки комментариев
В общем заказывал себе давно 2 датчика ds18b20 и они пришли. Недавно начал их подключать в проект самодельной приборки и столкнулся с весёлым нюансом.
Я как лалка решил что эти датчки все по большей части одинаковые, поэтому вооружившись первой же схемой из интернета начал собирать схему:
Собрав схему которая находиться выше мой датчик превратился в нагревательный элемент вместо датчика, я несколько раз перепаивал, переделывал и нагрев оставался,что было не нормально. Потом на следующий день я решил посмотреть что там написанно бывает что китайцы присылают не то что нужно. Так как лупа увеличительная ко мне вернулась на днях, пока её небыло выглядел я примерно так:
Оказалось что на моём датчике плюс то находиться в лева а маркировку он имеет DS18B20 1541C4 и по идее (именно по идее так как даташита я на этот датчик я не нашёл) схема подключения выглядит так:

+ резистор на 4.7 Ком между сигналом и плюсом.
Удостоверился в том что пины соблюдены правильно (на примере уно и моей про мини)
На картинке выше используеться 2 пин на уне:
И моя про мини (т.к. она китайская я надеюсь что пины раскидали они аналогично):
В итоге датчик перестал греться и я радостный залил скетч ниже и уже обрадовался что до триумфа осталось чуть чуть. В результате меня ждал облом и в сериал вместо температуры полилось струйкой сообщение: No more addresses.
#include <OneWire.h>
// пример использования библиотеки OneWire DS18S20, DS18B20, DS1822
OneWire ds(2); // на пине 10 (нужен резистор 4.7 КОм)
void setup(void) {
Serial.begin(9600);
}
void loop(void) {
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float celsius, fahrenheit;
if ( !ds.search(addr)) {
Serial.println("No more addresses.");
Serial.println();
ds.reset_search();
delay(250);
return;
}
Serial.print("ROM =");
for( i = 0; i < 8; i++) {
Serial.write(' ');
Serial.print(addr[i], HEX);
}
if (OneWire::crc8(addr, 7) != addr[7]) {
Serial.println("CRC is not valid!");
return;
}
Serial.println();
// первый байт определяет чип
switch (addr[0]) {
case 0x10:
Serial.println(" Chip = DS18S20"); // или более старый DS1820
type_s = 1;
break;
case 0x28:
Serial.println(" Chip = DS18B20");
type_s = 0;
break;
case 0x22:
Serial.println(" Chip = DS1822");
type_s = 0;
break;
default:
Serial.println("Device is not a DS18x20 family device.");
return;
}
ds.reset();
ds.select(addr);
ds.write(0x44); // начинаем преобразование, используя ds.write(0x44,1) с "паразитным" питанием
delay(1000); // 750 может быть достаточно, а может быть и не хватит
// мы могли бы использовать тут ds.depower(), но reset позаботится об этом
present = ds.reset();
ds.select(addr);
ds.write(0xBE);
Serial.print(" Data = ");
Serial.print(present, HEX);
Serial.print(" ");
for ( i = 0; i < 9; i++) { // нам необходимо 9 байт
data[i] = ds.read();
Serial.print(data[i], HEX);
Serial.print(" ");
}
Serial.print(" CRC=");
Serial.print(OneWire::crc8(data, 8), HEX);
Serial.println();
// конвертируем данный в фактическую температуру
// так как результат является 16 битным целым, его надо хранить в
// переменной с типом данных "int16_t", которая всегда равна 16 битам,
// даже если мы проводим компиляцию на 32-х битном процессоре
int16_t raw = (data[1] << 8) | data[0];
if (type_s) {
raw = raw << 3; // разрешение 9 бит по умолчанию
if (data[7] == 0x10) {
raw = (raw & 0xFFF0) + 12 - data[6];
}
} else {
byte cfg = (data[4] & 0x60);
// при маленьких значениях, малые биты не определены, давайте их обнулим
if (cfg == 0x00) raw = raw & ~7; // разрешение 9 бит, 93.75 мс
else if (cfg == 0x20) raw = raw & ~3; // разрешение 10 бит, 187.5 мс
else if (cfg == 0x40) raw = raw & ~1; // разрешение 11 бит, 375 мс
//// разрешение по умолчанию равно 12 бит, время преобразования - 750 мс
}
celsius = (float)raw / 16.0;
fahrenheit = celsius * 1.8 + 32.0;
Serial.print(" Temperature = ");
Serial.print(celsius);
Serial.print(" Celsius, ");
Serial.print(fahrenheit);
Serial.println(" Fahrenheit");
}
Так как с подобным датчиком я связался в первый раз и не знаю нюансов подскажите как подружить его с про мини. (Есть вероятность что я его сжёг но максимум по ощущениям он нагревался до 100 градусов и работал он так не долго максимум 5 секунд).
Заранее спасибо.
Я подключал наоборот. Ну грелся, да . Но потом нормально работал. Для проверки залить тестовые скетчи библиотек из иде. У меня датчики не со всеми библиотеками работали.
вся проблема в том что при подключении по стандартной схеме датчик нагревается примерно до 100 градусов, а на ардуине горит зелёная лампочка весьма тускло что свиделетьствует о неплохой перегрузке. И да со старым подключением она тоже не считывала. Датчики покупал тут:
https://ru.aliexpress.com/item/DS18B20-TO-92/32740712782.html?spm=2114.13010708.0.0.HxlDvJ
Только что припаял как в мануалах, и от датчика пошёл дым...
Внимательней даташит смотрите. Несмотря что на самом датчике у ноги символ "плюс" в реальности и по даташиту там минус
Я бы сюда не писал если бы нашёл даташит...
Вторая ссылка по поиску
https://datasheets.maximintegrated.com/en/ds/DS18B20.pdf
Мда, резистор в цепи 4.27 Ком. Видимо в магазине дали чуть чуть нето что требовалось, подобный резистор кретичен или нет?
Критичен. От слова критика. Этот резистор подойдет
В моём случае от слова кретин, т.е. я.
https://forum.arduino.cc/index.php?topic=397240.0
Форум где была подобная проблема, в результате простой вывод:
датчик подделка.
С адекватными датчиками всё нормально работает.
Как вернусь данному продавцу глаз на известное место натяну.
вооружившись первой же схемой из интернета начал собирать схему:

Нормальная схема.
(именно по идее так как даташита я на этот датчик я не нашёл) схема подключения выглядит так:
Эта катринка противоречит схеме выше. Ошибка в нижней картинке.
Держите даташит и больше так не делайте :)
он больше не будет у него больше датчиков нет
незнаю паленые датчики или нет, за 30р у китайцев с значком + у ноги минуса , у меня работают правда шаг температуры толи 0,25 толи 0,125(сейчас непомню) и точнее не сделать,
я в чип-дип брал, на плате нарисован профиль, по нему распаял, всё работает, где у него +- понятия не имею )))
Пачитал.
Тема "ds18b20 и китайцы" раскрыта полностью )))
ПС. У него ж всего 3 (три!!) вывода. А если бы было 8|
Пачитал.
Тема "ds18b20 и китайцы" раскрыта полностью )))
ПС. У него ж всего 3 (три!!) вывода. А если бы было 8|
тут иногда в двух выводах путаешься )))
Я описал как я подключил что-бы работало и не грелось. А по первой схеме он нагревался до состояния что от него дым шёл.
А даташит на 18b20 я несколько раз читал и в соответствии подключал. Даташита на DS18B20 1541C4 не существует так как датчик поршивая подделка с несуществующим индексом.
Короче я пойду на днях и куплю у нас за 100 рубликов за штуку, не о чём но обидно.
Сегодня купил нормальный DS18B20 подключел по самой верхней схеме и заработало.