Датчик DS18B20 показывает -42 от блока питания
- Войдите на сайт для отправки комментариев
Пнд, 21/06/2021 - 19:33
Короче говоря, решил сделать метеостанцию на основе 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 ; } // Возвращаем значение температуры в место вызова функции
Схема...
ТС, код вставляйте по правилам форума, а не то идите нафик разбираться сами
1. Код по правилам.
2. схема всех соединений
3. Если "не видите смысла" выкладывать №№1 и 2, то нафиг!