Текущее время: 29 мар 2024, 01:52

Калининград & ХОББИ

Занятие любимым хобби - это путь к счастливой жизни!

Урок 13. Термометр на Ардуино, LCD и Ds18b20

Обучение с нуля, шаг за шагом.
Аватар пользователя
 
Сообщений: 799
Зарегистрирован: 27 мар 2013, 22:12

Урок 13. Термометр на Ардуино, LCD и Ds18b20

Сообщение -=dp=- » 21 мар 2018, 22:08

Урок 13. Термометр на Ардуино, LCD и Ds18b20

Для данного практического занятия нам понадобятся:
1 - плата контроллера Ардуино УНО
2 - плата расширения LCD KeyPad шилд
3 - датчик температуры Ds18b20
4 - резистор 4,7 КОм
5 - макетная плата с набором проводов
6 - кабель microUSB > USB

ds18b20.jpg
Ds18b20
ds18b20.jpg (6.21 KiB) Просмотров: 5789

Подключаем все по схеме ниже:

Arduino UNO termometr.jpg
Термометр на Ардуино, LCD и Ds18b20


Скачиваем архив OneWire.zip
OneWire.zip
Термометр на Ардуино, LCD и Ds18b20
(20.64 KiB) Скачиваний: 750

Распаковываем и копируем распакованную папку с библиотекой в папку libraries программы Arduino IDE.
Библиотека LiquidCrystal у нас уже должна быть установлена, после предыдущих занятий.
Если ее нет, то переходим в тему Урока 12, скачиваем, распаковываем и устанавливаем ее.

Затем запускаем среду разработки Arduino IDE и копируем туда вот этот тестовый скетч:
Код: выделить все
#include <LiquidCrystal.h>
#include <OneWire.h>

OneWire  ds(2);  // подключаем датчик к входу 2
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

int lcd_key     = 0;
int adc_key_in  = 0;

 byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius;


#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5

int read_LCD_buttons() {
  adc_key_in = analogRead(0);
  if (adc_key_in > 1000) return btnNONE;
  if (adc_key_in < 50)   return btnRIGHT;
  if (adc_key_in < 250)  return btnUP;
  if (adc_key_in < 450)  return btnDOWN;
  if (adc_key_in < 600)  return btnLEFT;
  if (adc_key_in < 920)  return btnSELECT;
  return btnNONE;
}

void setup() {
  lcd.begin(16, 2);
  lcd.setCursor(0,0);
  lcd.print("Termometr");
}

void loop() {
 
 
  lcd.setCursor(0, 1);
  lcd.print("T = ");
  lcd.print(celsius);
  lcd.print(" C");
  lcd_key = read_LCD_buttons();
  switch (lcd_key) {
    case btnRIGHT: {
      lcd.print("RIGHT ");
      break;
    }
    case btnLEFT: {
      lcd.print("LEFT   ");
      break;
    }
    case btnUP: {
      lcd.print("UP    ");
      break;
    }
    case btnDOWN: {
      lcd.print("DOWN  ");
      break;
    }
    case btnSELECT: {
      lcd.print("SELECT");
      break;
    }
    case btnNONE: {
      lcd.print("         ");
      break;
    }
  }

  //----------Считываем данные с датчика DS18B20-----------------------------------

 
  if ( !ds.search(addr)) {
    ds.reset_search();
    delay(250);
    return;
  }
 
  for( i = 0; i < 8; i++) {
  }

  if (OneWire::crc8(addr, 7) != addr[7]) {
      return;
  }

  switch (addr[0]) {
    case 0x10:
      type_s = 1;
      break;
    case 0x28:
      type_s = 0;
      break;
    case 0x22:
      type_s = 0;
      break;
    default:
      return;
  }

  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);
  delay(1000);
  present = ds.reset();
  ds.select(addr);   
  ds.write(0xBE); 
  for ( i = 0; i < 9; i++) {
    data[i] = ds.read();
  }
 
  int16_t raw = (data[1] << 8) | data[0];
  if (type_s) {
    raw = raw << 3;
    if (data[7] == 0x10) {
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    if (cfg == 0x00) raw = raw & ~7;
    else if (cfg == 0x20) raw = raw & ~3;
    else if (cfg == 0x40) raw = raw & ~1;
  }
  celsius = (float)raw / 16.0;



}



Аватар пользователя
 
Сообщений: 799
Зарегистрирован: 27 мар 2013, 22:12

Re: Урок 13. Термометр на Ардуино, LCD и Ds18b20

Сообщение -=dp=- » 21 мар 2018, 22:24

После загрузки скетча и перезапуска платы Ардуино у нас должен получится вот такой красивый и светящийся термометр :shock: :o :D

1.jpg
Термометр на Ардуино, LCD и Ds18b20

2.jpg
Термометр на Ардуино, LCD и Ds18b20

3.jpg
Термометр на Ардуино, LCD и Ds18b20


Датчик Ds18b20 представляет из себя микросхему с высокоточным цифровым измерителем температуры.
Может измерять температуру в диапазоне от -55 до + 125 градусов Цельсия.

Его можно использовать для измерения температуры воздуха, приборов, различных элементов механизмов, и даже для измерения температуры тела человека, его показания очень точные, до сотых долей! :o

:!: На следующем занятии мы дополним эту схему модулем реле и сделаем электронное термореле, для управления системой отопления или масляным электро нагревателем.




Вернуться в Обучение Ардуино

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1