Четвер, 25.04.2024, 09:44
Приветствую Вас Гість | RSS

Radiomanoff+

Меню сайта
Форма входа
Календарь
«  Квітень 2024  »
ПнВтСрЧтПтСбНд
1234567
891011121314
15161718192021
22232425262728
2930

Термометр на Arduino(Atmega32)+DS18B20(2 датчика)+LCD16*2(Rus)


Продолжаю описавать 
микроконтроллер Atmega32 в качестве Arduino-контролера .Первые впечетления весьма положительные.

Вдоволь наморгавшись светодиодами,проверив анологовые и PWM входы/выходы,захотелось попробовать сделать что-то полезное.
В "закромах" нашлась парочка датчиков ds18b20 ,а также LCD MTC-16204X  на контролере HD44780,совместимый с обычным LCD 1602 и поддерживающий кирилицу.Это навело на мысль сделать термометр показывающий температуру как на улице так и в доме.

Схема подключения:


Фото собраной схемы:


Библиотеки для LCD под Arduino IDE 1.0.4, были опрбованы обе : LiquidCrystal  ( скачать ) и LiquidCrystalRus - поддерживающая кирилицу ( скачать ).

Библиотеки для работы с датчиком температуры ds18b20 под Arduino IDE 1.0.4 : OneWire скачать ) и DallasTemperature скачать ).

Вот сам скетчскачать ) :

#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystalRus.h>
 
// Data wire is plugged into pin 23 on the Arduino
// Данные провода подключен к контакту 23 на Arduino32
#define ONE_WIRE_BUS 23
 
// Setup a oneWire instance to communicate with any OneWire devices 
// Установка OneWire например общаться с любыми устройствами OneWire
// (not just Maxim/Dallas temperature ICs)
// (а не только Максим / Dallas температуры ИС)
LiquidCrystalRus lcd(9, 6, 5, 4, 3, 2);
OneWire oneWire(ONE_WIRE_BUS);
 
// Pass our oneWire reference to Dallas Temperature.
// Пройди наш OneWire ссылкой на Dallas Temperature.
DallasTemperature sensors(&oneWire);
 
void setup(void)
{
  // start serial port
  // Serial.begin(9600);
  // Serial.println("Dallas Temperature IC Control Library Demo");
  lcd.begin(16, 2);
  lcd.print("Хата");
  lcd.setCursor(0, 1);
  lcd.print("Вулиця");
  
  // Start up the library
  // Запуск библиотеки
  sensors.begin();
}
  
void loop(void)
{
  // call sensors.requestTemperatures() to issue a global temperature
  // вызов sensors.requestTemperatures () выдавать глобальной температуры
  // request to all devices on the bus
  // просьба ко всем устройствам на шине
  // Serial.print(" Requesting temperatures...");
  sensors.requestTemperatures(); // Send the command to get temperatures
                         // Отправить команду для получения температур
  // Serial.println("DONE");

  // Serial.print("Temperature for Device 1 is: ");
  lcd.setCursor(0, 0);
  lcd.print("Хата Т=");
  lcd.print(sensors.getTempCByIndex(0));
  lcd.print(" C ");
  delay (10);
  lcd.setCursor(0, 1);
  lcd.print("Вулиця Т=");
  lcd.print(sensors.getTempCByIndex(1));
  lcd.print(" C ");
  delay (10);
  // Serial.print(sensors.getTempCByIndex(0)); // Why "byIndex"?
                                            // Почему byIndex
    // You can have more than one IC on the same bus. 
    // Вы можете иметь более одного IC на одной шине.
    // 0 refers to the first IC on the wire
    // 0 относится к первому IC на проводе
 
}

Cсылка на источник http://www.hobbytronics.co.uk/ds18b20-arduino, добавлена поддержка LCD.

HEX-файл без загрузчика здесь .

Кроме этого скетча,мною был опробован скетч еще отсюда .При применении тех же библиотек они различаются тем ,что в первом случае микроконтролер сам выбирает какой датчик "дом",а какой "улица".Во втором же случае адреса датчиков прописываются вручную.

Архив записей
Статистика

Онлайн всього: 1
Гостей: 1
Користувачів: 0