Датчик температуры MKR1000 и DS18B20

Я новичок в Arduino и электронике в целом, и я не могу заставить свой MKR1000 считывать правильные данные с датчика температуры DS18B20.

Вот руководство, которому я следовал.

Проблема в том, что я всегда получаю одни и те же показания датчика: -127,00.

Должен отметить, что я попробовал два разных датчика и получил одинаковые показания.

От датчика GND идет непосредственно к GND на плате, а между проводами данных и питания установлен резистор сопротивлением 4,7 кОм.

По данным производителя датчика, выходные провода: желтый (VCC), красный (DATA), черный (GND).

Линия данных подключена к контакту ~2 на MKR1000.

/********************************************************************/
// Сначала подключаем библиотеки
#include <OneWire.h> 
#include <DallasTemperature.h>
/********************************************************************/
// Провод данных подключен к контакту 2 на Arduino
#define ONE_WIRE_BUS 2 
/********************************************************************/
// Настраиваем экземпляр oneWire для связи с любыми устройствами OneWire
// (не только температурные микросхемы Maxim/Dallas)
OneWire oneWire(ONE_WIRE_BUS); 
/********************************************************************/
// Передаем ссылку oneWire на Dallas Temporary.
DallasTemperature sensors(&oneWire);
/********************************************************************/ 
void setup(void) 
{ 
 // запускаем последовательный порт
 Serial.begin(9600); 
 Serial.println("Dallas Temperature IC Control Library Demo"); 
 // Запускаем библиотеку
 sensors.begin(); 
} 
void loop(void) 
{ 
 // вызов Sensors.requestTemperatures() для выдачи глобальной температуры
 // запрос ко всем устройствам на шине
/********************************************************************/
 Serial.print(" Requesting temperatures..."); 
 sensors.requestTemperatures(); // Отправляем команду для получения показаний температуры
 Serial.println("DONE"); 
/********************************************************************/
 Serial.print("Temperature is: "); 
 Serial.print(sensors.getTempCByIndex(0)); // Почему «поиндексу»?
   // На одной шине может быть более одного DS18B20.
   // 0 относится к первой микросхеме на проводе
   delay(1000); 
}

Есть идеи, что я делаю не так?

, 👍0

Обсуждение

Помимо фотографий, есть ли у вас схема для загрузки? Это было бы полезнее, чем смотреть на кучу проводов, чтобы понять, что происходит., @MichaelT

Спасибо @MichaelT. На этот вопрос уже был дан ответ. Производитель датчиков испортил свою документацию, поэтому у меня была возможность получить доступ к данным, и наоборот., @MrUpsidown


1 ответ


Лучший ответ:

3

Похоже, у вас неправильно подключено. Схема действительно помогла бы, но похоже, что 5 В поступает непосредственно в линию данных датчиков (желтый провод), а на макетной плате он подключен к оранжевому проводу + 5 В. Провод питания вашего датчика температуры (красный провод) проходит через резистор 4,7 кОм, что, вероятно, тоже не то, что вам нужно.

,

По данным производителя датчика: Выходные провода: желтый (VCC), красный (DATA), черный (GND)., @MrUpsidown

Возможно, в их документации опечатка. Я нашел похожие датчики на Ebay: Выходной провод: красный (VCC), желтый (DATA), черный (GND)., @Jeff Wahaus

Схему, которую я пытаюсь достичь, можно найти по ссылке, которую я разместил ранее: https://create.arduino.cc/projecthub/TheGadgetBoy/ds18b20-digital-temperature-sensor-and-arduino-9cc806#toc-step-4 --build-simple-circuit-3, @MrUpsidown

МОЙ БОГ! Ладно... ты был прав, им удалось ошибиться в своих схемах! Красный — это VCC, а желтый — ДАННЫЕ! Я думал о многих возможных причинах, но не об этой... ;) Спасибо за вашу помощь., @MrUpsidown

Единственное, что хуже отсутствия документации, — это ошибочная документация., @Jeff Wahaus