Не видит датчик температуры DS18B20
- Войдите на сайт для отправки комментариев
Пнд, 14/12/2015 - 22:31
Здравсвтуйте, начинаю первые шаги с ардуиной Leonardo.
Пробую подключить датчик температуры, но упорно получаю следующую надпись
Requesting temperatures...DONE
Device Address: 0000000000000000 Temp C: 0.00 Temp F: 32.00
Device Address: 0000000000000000 Temp C: 0.00 Temp F: 32.00
Пробовал подклюать 5 датчиков, подключал через резистор 4.7 кОм
Сейчас вообще подключил напрямую. Плюс к +5В, минус к GND, центральный на Digital PIN10, но всё время выдает одно и тоже сообщение, написанное выше.
Код стандартный. Помогите в чём я мог ошибиться, вроде всё элементарно, а в реале нет...
#include <OneWire.h> #include <DallasTemperature.h> // Data wire is plugged into port 2 on the Arduino #define ONE_WIRE_BUS 10 #define TEMPERATURE_PRECISION 9 // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs) OneWire oneWire(ONE_WIRE_BUS); // Pass our oneWire reference to Dallas Temperature. DallasTemperature sensors(&oneWire); // arrays to hold device addresses DeviceAddress insideThermometer, outsideThermometer; void setup(void) { // start serial port Serial.begin(9600); Serial.println("Dallas Temperature IC Control Library Demo"); // Start up the library sensors.begin(); // locate devices on the bus Serial.print("Locating devices..."); Serial.print("Found "); Serial.print(sensors.getDeviceCount(), DEC); Serial.println(" devices."); // report parasite power requirements Serial.print("Parasite power is: "); if (sensors.isParasitePowerMode()) Serial.println("ON"); else Serial.println("OFF"); // assign address manually. the addresses below will beed to be changed // to valid device addresses on your bus. device address can be retrieved // by using either oneWire.search(deviceAddress) or individually via // sensors.getAddress(deviceAddress, index) //insideThermometer = { 0x28, 0x1D, 0x39, 0x31, 0x2, 0x0, 0x0, 0xF0 }; //outsideThermometer = { 0x28, 0x3F, 0x1C, 0x31, 0x2, 0x0, 0x0, 0x2 }; // search for devices on the bus and assign based on an index. ideally, // you would do this to initially discover addresses on the bus and then // use those addresses and manually assign them (see above) once you know // the devices on your bus (and assuming they don't change). // // method 1: by index if (!sensors.getAddress(insideThermometer, 0)) Serial.println("Unable to find address for Device 0"); if (!sensors.getAddress(outsideThermometer, 1)) Serial.println("Unable to find address for Device 1"); // method 2: search() // search() looks for the next device. Returns 1 if a new address has been // returned. A zero might mean that the bus is shorted, there are no devices, // or you have already retrieved all of them. It might be a good idea to // check the CRC to make sure you didn't get garbage. The order is // deterministic. You will always get the same devices in the same order // // Must be called before search() //oneWire.reset_search(); // assigns the first address found to insideThermometer //if (!oneWire.search(insideThermometer)) Serial.println("Unable to find address for insideThermometer"); // assigns the seconds address found to outsideThermometer //if (!oneWire.search(outsideThermometer)) Serial.println("Unable to find address for outsideThermometer"); // show the addresses we found on the bus Serial.print("Device 0 Address: "); printAddress(insideThermometer); Serial.println(); Serial.print("Device 1 Address: "); printAddress(outsideThermometer); Serial.println(); // set the resolution to 9 bit sensors.setResolution(insideThermometer, TEMPERATURE_PRECISION); sensors.setResolution(outsideThermometer, TEMPERATURE_PRECISION); Serial.print("Device 0 Resolution: "); Serial.print(sensors.getResolution(insideThermometer), DEC); Serial.println(); Serial.print("Device 1 Resolution: "); Serial.print(sensors.getResolution(outsideThermometer), DEC); Serial.println(); } // function to print a device address void printAddress(DeviceAddress deviceAddress) { for (uint8_t i = 0; i < 8; i++) { // zero pad the address if necessary if (deviceAddress[i] < 16) Serial.print("0"); Serial.print(deviceAddress[i], HEX); } } // function to print the temperature for a device void printTemperature(DeviceAddress deviceAddress) { float tempC = sensors.getTempC(deviceAddress); Serial.print("Temp C: "); Serial.print(tempC); Serial.print(" Temp F: "); Serial.print(DallasTemperature::toFahrenheit(tempC)); } // function to print a device's resolution void printResolution(DeviceAddress deviceAddress) { Serial.print("Resolution: "); Serial.print(sensors.getResolution(deviceAddress)); Serial.println(); } // main function to print information about a device void printData(DeviceAddress deviceAddress) { Serial.print("Device Address: "); printAddress(deviceAddress); Serial.print(" "); printTemperature(deviceAddress); Serial.println(); } void loop(void) { // call sensors.requestTemperatures() to issue a global temperature // request to all devices on the bus Serial.print("Requesting temperatures..."); sensors.requestTemperatures(); Serial.println("DONE"); // print the device information printData(insideThermometer); printData(outsideThermometer); }
Введи адрес датчика
А как узнать адрес датчика?
http://arduino-project.net/podklyuchenie-ds18b20-arduino/
А как узнать адрес датчика?
Возьми OneWire без приблуд и запусти пример из нее.
Узнаешь и адрес, и температуру.
Да, и с резистором не балуй, он нужен.
Зупустил просто OneWire, выдает
No more addresses.
Пин проверил
Что-то такое ощущение, что ардуино не работает :/
Я, конечно, в первый раз всё пробую, но даже не знаю где мог ошибиться. Тестером проверил, на датчик идёт 4.99 Вольта.
nikfcsm, а с чего вдруг ардуине не работать? Может вы + и - перепутали, и датчик давно уже сдох.
Лучше наверно фото в студию и код примера, который запускали.
nikfcsm, а с чего вдруг ардуине не работать? Может вы + и - перепутали, и датчик давно уже сдох.
+ и - я перепутывал специально, думал может не так подключаю, датчик до нереальной температуры разогревается в этом случае. У меня этих датчиков 5 штук, все перепробывал
Подключал по такой схеме и реальные фото, код вот
Если рассмотрел правильно, то резистор тянет к GND. А относительно картинки, датчик развернут на 180 градусов.
Если смотреть на срез корпуса, то ноги слева-направо GND, DQ, Vdd.
Если рассмотрел правильно, то резистор тянет к GND. А относительно картинки, датчик развернут на 180 градусов.
Если смотреть на срез корпуса, то ноги слева-направо GND, DQ, Vdd.
Ой, это я уже эксперементировал, сейчас резистор на средний контакт и тишина...
Резистор 4К7 от VDD к DQ (средней ноге), нога на 10 пин ардуины. Проверяйте все контакты и сигналы. Если только действительно экспериментами его не спалили (не знаю, как он переполюсовку питания воспринимает).
Резистор 4К7 от VDD к DQ (средней ноге), нога на 10 пин ардуины. Проверяйте все контакты и сигналы. Если только действительно экспериментами его не спалили (не знаю, как он переполюсовку питания воспринимает).
Да, всё именно так, даже сопротивление резистора на всякий случай проверил. Ну не может же 5 из 5 датчиков температуры быть нерабочими...
Я пока и одного не встречал. Тестер и от контакта дуины до датчика, по всем шлейфам, может в макетке контакт плохой. Только не ставьте тот, который жарили переполюсовкой.
Блинком дуина мигает нормально?
Доброго времени суток! Изучаю ардуинку, начал с подключения датчика температуры ds18b20, скетч стандарт из примера библиотеки onewire "DS18x20". В мониторе порта выдает "no more addresses". И вообще другие скетчи с датчиком не работают. Резистор присутствует на 4,7. Подключил такой же другой датчик температуры, все одно ничего не работает. Вот как подключил:
swarm38, пост , первые два предложения. За компанию еще раз проверяем схему. А зачем резистор на лишние сопли повесили? И второй конец резистора где, у плюса или GND? Дисплей нетбуковый, плохо видно.
Серый провод от резистора должен быть на +, а не на земле.
swarm38, пост , первые два предложения. За компанию еще раз проверяем схему. А зачем резистор на лишние сопли повесили? И второй конец резистора где, у плюса или GND? Дисплей нетбуковый, плохо видно.
Резистор между +5в и датой. Подключил минуя макетку максимально просто, результат тот же. Ардуино мигает диодом TX, RX молчит, в окне монитора порта также пусто.
Вы контакт тестером между резистором и прочими соединениями проверяли? И доступа к обычному без трубки нет?
Чтобы свечти к минимуму ошибки коммутации - припаяйте и резистор к выводам датчика, а потом прозвоните от этих выводов до нижнего выхода (запаяного) контакта на меге. Ну и номер пина соответствует написанному в программе?
Попробую прозвонить контакты. Датчика в наличии 2шт и оба в термооболочке, с обоими пока не работает. Резистор на скрутке, припаяю. Номер пина соответствует скетчу.
Пробую подключить датчик температуры, но упорно получаю следующую надпись
Добрый вечер. Помогите подправить скетч-я новичок.Подключил датчик температуры ds18b20 и дисплей с библиотекой UTFT. Всё заработало.Из-за того что эта библиотека сжирает много места перешол на TFT. Начал править скетч дошол до 30 строчки и ни чего не получается.
Решения проблемы первых двух вопрощающих не увидел, добавлю свои две копейки.
Ситауция такая же: 8 датчиков, 100% рабочих (проверяются в другой конструкции). А вот ни ардуино про мини (atmega326/16MHz), ни самоделка (atmega168/4MHz), не видят датчиков. Пробовал скетчи и OneWire и вообще уже все подряд на тему DS18B20. Пробовал разные пины. С подтяжкой, без, с паразитным питанием... ни-че-го. Может есть какая-то тайна?
В какой другой? Сколько ардуин в руках не держал, сколько DS-ок к ним не цеплял - не видело только когда бредборд был хреновый. В остальных случаях все железно отрабатывало.
Ви таки лучше по порядку, каким скетчем из OneWire пробовали и схему, а то боюсь, это у вас секрет какой-то.
У меня недавно не видел из за не контакта резистора 4.7 к
Да скетчик бы, схему, лог загрузки кода, а то недавно разбирались тут с проблемой что OLED не работает а оказалось у чувака комп ардуину не видит и не грузит в нее ничего. Как говориться дело было не в бабине...
Ровно такая же ситуация. no more addresses. На англоязычных сайтах рекомендуют понижать сопротивление. 4,7- 2,2 - 1 и ниже. Пишут о каких-то бракованнчых партиях. Возможно поэтому они пачками и не работают. дошел до 680 ом ничего путного пока не получилось
Привет.
Пару дней назад начал ковырять ESP32 (который TTGO v2), ситуация та же: ds18b20 не работает, хоть ты тресни, причём на ESP8266 те же датчики отлично себе трудятся. Покурив немного импортные форумы, пришёл к выводу, что проблема с библиотекой DallasTemperature. И наш иностранный коллега (как потом выяснилось, не только он) предложил решение. https://www.esp8266.com/viewtopic.php?p=85304#p85304
Мне помогло.
ку, столкнулся с этой же проблемой, решил изменением тактовой частоты
Наверное бракованные, у меня тоже с ардуино не работают(
С esp, работают
В чем причина, не понимаю.
Читала европейские форумы, проблема частая.
Кривая библиотека или что-то со скорость связано.
Может есть соображения или решение?
Долго мучаюсь, ответ не найти.
Даже купила ещё датчиков и ардуинки, ситуация точно так же повторяется. Я в отчаянии :(
Подключено все верно, хороший контакт и даже питание такое же. Прошивается (вспомогательный код работает, в консоль пишет. Если найду ответ напишу или придется esp8266 использовать :(
Да, чудеса случаются.(
Недавний случай с удалённым заказчиком. У меня работает в симуляторе - у него в железе нет. Подключил свой датчик к своему железу - работает. И как тут воевать? Откатился на старый (неудобный) вариант, с которым работает и у него.( Подозрение только на его "нестандартный" датчик.
Да, чудеса случаются.(
Недавний случай с удалённым заказчиком. У меня работает в симуляторе - у него в железе нет. Подключил свой датчик к своему железу - работает. И как тут воевать? Откатился на старый (неудобный) вариант, с которым работает и у него.( Подозрение только на его "нестандартный" датчик.
брал датчики в ЧИПе, давно, работают на всех девайсах, видимо в них проблема
Кто-то из наших, кажется Логик, писал, что у него китайские Далласы не работают по схеме "паразитного" питания, а в трехпроводной схеме - нормально. Не в этом ли дело?
В моём случае нет, потому как питание 3-проводное.( Но, в другом случае, на практике, заметил что датчик не всегда отвечал presence на reset. Тупо добавил несколько повторов reset, при отсутствии подтверждения и этим обошлось.
А мне ответят? Почему с есп работает, с ардуино нет..
Ошибка в 10 строке скетча