Портал для радиолюбителей
   Работа Arduino с датчиком DS18B20
    Главная -> Статьи -> Проекты на Arduino -> Работа Arduino с датчиком DS18B20


<< Назад в раздел   Распечатать Дата добавления: 2011-10-25 | Просмотров: 18573

Рассмотрим как при помощи Arduino считывать показания с цифрового датчика температуры DS18B20. В настоящий момент м/с DS18B20 фирмы Dallas является наиболее распространенным и доступным цифровым датчиком температуры. Работает он по шине 1-wire.

Распиновка DS18B20

Датчик может запитываться двумя способами - внешним питанием (3 провода) или паразитным (питание от шины, 2 провода). Расписывать эти режимы не буду, все есть в документации. Отмечу лишь то, что в данном проекте мы будем использовать нормальное питание датчика.


Схема подключения датчика DS18B20 к Arduino приведена ниже. Резистор номиналом 4.7 кОм.

Подключение DS18B20 к Arduino

Рабочий скетч представлен ниже. Он взят из интернета, я лишь закомментировал лишние строки, чтобы на serial monitor выводилась только текущая температура.

Данные с датчика через Serial Monitor

#include 

/* 
 * получаем температуру от DS18S20 
 */

OneWire  ds(10);  // линия 1-Wire будет на pin 10

void setup(void) 
{
  Serial.begin(9600);
}


void loop(void) 
{
  byte i;
  byte present = 0;
  byte data[12];
  byte addr[8];
  
  if ( !ds.search(addr)) {
      //Serial.print("No more addresses.n");
      ds.reset_search();
      return;
  }
  
  /*Serial.print("R=");
  for( i = 0; i < 8; i++) {
    Serial.print(addr, HEX);
    Serial.print(" ");
  }*/

  if ( OneWire::crc8( addr, 7) != addr[7]) {
      Serial.print("CRC is not valid!n");
      return;
  }
  
  if ( addr[0] != 0x10) {
      Serial.print("Device is not a DS18S20 family device.n");
      return;
  }

  ds.reset();
  ds.select(addr);
  ds.write(0x44,1);         // запускаем конвертацию
  
  delay(5000);     // скорее всего достаточно 750ms 
  // we might do a ds.depower() here, but the reset will take care of it.
  
  present = ds.reset();
  ds.select(addr);    
  ds.write(0xBE);         // считываем ОЗУ датчика

  /*Serial.print("P=");
  Serial.print(present,HEX);
  Serial.print(" ");*/
  for ( i = 0; i < 9; i++) {           // обрабатываем 9 байт
    data = ds.read();
    //Serial.print(data, HEX);
    //Serial.print(" ");
  }
  /*Serial.print(" CRC=");
  Serial.print( OneWire::crc8( data, 8), HEX);
  Serial.println();*/
  
  // высчитываем температуру :)
  int HighByte, LowByte, TReading, Tc_100;
  LowByte = data[0];
  //Serial.print("LB= ");Serial.print(LowByte,HEX);
  HighByte = data[1];
  //Serial.print(" HB= ");Serial.print(HighByte,HEX);
  TReading = (HighByte << 8) + LowByte; 
  Tc_100 = TReading/2;
  Serial.print(" T = ");Serial.print(Tc_100);
  Serial.println();
}

Скачать библиотеку OneWire и скетч в формате PDE

Автор: taliban


Добавил:  Павел (Admin)  
Автор:  Неизвестно 

Вас может заинтересовать:

  1. Цифровой барометр (датчик атмосферного давления)
  2. Динамическая подсветка ТВ или монитора
  3. Счетчик расхода воды с термодатчиком и показаниями через интернет
  4. Arduino UNO урок 3 - Тайминг
  5. Мониторинг потребляемой электроэнергии в реальном времени при помощи Arduino и LabView


    © PavKo, 2007-2018   Обратная связь   Ссылки   Яндекс.Метрика