Датчик DS18B20 показывает -42 от блока питания

Vabass
Offline
Зарегистрирован: 21.06.2021

Короче говоря, решил сделать метеостанцию на основе ARDUINO UNO взял датчик DS18B20. В начале от USB всё радовало показывало +28+30 и тд. Потом решил протестировать на блоке питания 9v. И от блока показывает -42 потом может показать +29, но часто -42

 
#include <iarduino_RTC.h>
iarduino_RTC time(RTC_DS1302,8,6,7);  // для модуля DS1302 - RST, CLK, DAT
 
#include <Wire.h>                             // библиотека для устройств I2C 
#include <LiquidCrystal_I2C.h>       // подключаем библиотеку для дисплея
LiquidCrystal_I2C LCD(0x27,20,1);  // присваиваем имя дисплею
 
#include <OneWire.h>                  // Подключаем библиотеку для взаимодействия с устройствами, работающими на шине и по протоколу 1-Wire
#include <DallasTemperature.h>        // Подключаем библиотеку с функциями для работы с DS18B20 (запросы, считывание и преобразование возвращаемых данных)
 
#define ONE_WIRE_BUS 2                // Указываем пин подключения data-вывода датчика температуры
#define term_power 4                  // Указываем пин подключения питания датчика температуры
 
OneWire oneWire(ONE_WIRE_BUS);        // Сообщаем библиотеке об устройстве, работающем по протоколу 1-Wire
DallasTemperature sensors(&oneWire);  // Связываем функции библиотеки DallasTemperature с нашим 1-Wire устройством (DS18B20)
 
int A=0;
 
void setup(void) {
   
   delay(300);
  
   LCD.init();            // инициализация LCD дисплея
   LCD.backlight();  // включение подсветки дисплея
   time.begin();
  //time.settime(0, 23, 16, 21, 6, 21, 1); // 0  сек, 30 мин, 18 часов, 12, июня, 2020, четверг
   Serial.begin(9600);             // Запускаем вывод данных на серийный порт
  sensors.begin();                // Запускаем библиотеку измерения температуры
  pinMode(term_power, OUTPUT);    // Определяем пин подключения питания датчика температуры
}
 
 void loop(void) { 
    
   // если прошла 1 секунда выводим время на дисплей
 if (millis() % 1000 == 0) {
      LCD.setCursor(0,0);
      LCD.print(time.gettime("d M Y, D"));
      LCD.setCursor(20, 0);
      LCD.print(time.gettime("H:i:s")); 
      LCD.setCursor(36, 0);
      LCD.println("T");
      if(A>=0){
        LCD.setCursor(37,0);
        LCD.print("+");
      }
        else
        {
        LCD.setCursor(37,0);
        LCD.print("-");
        }
      
      LCD.setCursor(38, 0);
      LCD.print(A,1);
      
   }
   if (millis() % 10000 == 0) {
     temperature();
 }
  } 
   
 
 float temperature() {
    
   // Измеряем температуру 10 секунд
  digitalWrite(term_power, HIGH);                // Включаем питание датчика температуры
  delay(100);                                // Задержка перед первым измерением 
  sensors.requestTemperatures();                 // Запрос на измерение температуры (1-й ошибочный)
  delay(500);                                    // Задержка перед поторным измерением
  sensors.requestTemperatures();                 // Запрос на измерение температуры (повторный)
  float t = float(sensors.getTempCByIndex(0));   // Получаем значение температуры
  digitalWrite(term_power, LOW);                 // Отключаем питание датчика температуры
 
  A=t;
  return ; }                                    // Возвращаем значение температуры в место вызова функции
  
sadman41
Offline
Зарегистрирован: 19.10.2016

Схема...

b707
Offline
Зарегистрирован: 26.05.2017

ТС, код вставляйте по правилам форума, а не то идите нафик разбираться сами

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

1. Код по правилам.

2. схема всех соединений

3. Если "не видите смысла" выкладывать №№1 и 2, то нафиг!