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 подключел по самой верхней схеме и заработало.