29 авг. 2025

Использование датчика DS18B20 для контроля температуры в диапазоне от 18 до 25 градусов со свуковой индацией через зумер HW-508

#include <OneWire.h>
#include <DallasTemperature.h>

// Пины подключения
#define BUZZER_PIN 3     // Пин зумера (PWM)
#define ONE_WIRE_BUS 2   // Пин датчика DS18B20

// Настройка температурных границ
#define MIN_TEMP 18.0    // Минимальная температура
#define MAX_TEMP 25.0    // Максимальная температура

// Настройка OneWire и DallasTemperature
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

// Переменная для хранения температуры
float temperature = 0;

void setup() {
  Serial.begin(9600);
  
  // Инициализация пинов
  pinMode(BUZZER_PIN, OUTPUT);
  digitalWrite(BUZZER_PIN, LOW); // Выключаем зумер
  
  // Инициализация датчика температуры
  sensors.begin();
  
  Serial.println("Система контроля температуры запущена");
  Serial.println("Диапазон: 18°C - 25°C");
}

void loop() {
  // Запрос температуры
  sensors.requestTemperatures();
  temperature = sensors.getTempCByIndex(0); // Получаем температуру с первого датчика
  
  // Вывод температуры в Serial Monitor
  Serial.print("Температура: ");
  Serial.print(temperature);
  Serial.println(" °C");
  
  // Проверка температурного диапазона и звуковая индикация
  if (temperature < MIN_TEMP) {
    // Температура ниже минимальной
    Serial.println("СЛИШКОМ ХОЛОДНО!");
    playLowTempAlarm();
  } 
  else if (temperature > MAX_TEMP) {
    // Температура выше максимальной
    Serial.println("СЛИШКОМ ЖАРКО!");
    playHighTempAlarm();
  } 
  else {
    // Температура в норме
    Serial.println("НОРМА");
    playNormalBeep();
  }
  
  delay(2000); // Пауза между измерениями (2 секунды)
}

// Звуковая индикация для низкой температуры
void playLowTempAlarm() {
  // Прерывистый низкий звук (холодно)
  for (int i = 0; i < 3; i++) {
    tone(BUZZER_PIN, 200, 300); // Низкая частота (200 Гц)
    delay(500);
  }
  noTone(BUZZER_PIN);
}

// Звуковая индикация для высокой температуры
void playHighTempAlarm() {
  // Прерывистый высокий звук (жарко)
  for (int i = 0; i < 3; i++) {
    tone(BUZZER_PIN, 800, 300); // Высокая частота (800 Гц)
    delay(500);
  }
  noTone(BUZZER_PIN);
}

// Звуковая индикация для нормальной температуры
void playNormalBeep() {
  // Короткий одинарный звук (все в порядке)
  tone(BUZZER_PIN, 500, 100); // Средняя частота (500 Гц)
  delay(150);
  noTone(BUZZER_PIN);
}

// Дополнительная функция для плавного изменения звука
void playTemperatureTone() {
  // Генерируем тон, частота которого зависит от температуры
  int frequency = map(constrain(temperature, MIN_TEMP, MAX_TEMP), 
                     MIN_TEMP, MAX_TEMP, 200, 800);
  tone(BUZZER_PIN, frequency, 1000);
  delay(1100);
  noTone(BUZZER_PIN);
}

Особенности работы:

  1. Температурный диапазон: 18°C - 25°C (можно изменить в MIN_TEMP и MAX_TEMP)

  2. Звуковая индикация:

    • Ниже 18°C: 3 низких сигнала (200 Гц) - "холодно"

    • Выше 25°C: 3 высоких сигнала (800 Гц) - "жарко"

    • В диапазоне: 1 короткий сигнал (500 Гц) - "норма"

  3. Вывод в Serial Monitor: Температура и статус выводятся каждые 2 секунды

Дополнительные функции:

  • playTemperatureTone() - генерация тона, частота которого зависит от температуры (чем выше температура - тем выше тон)

Настройка:

  1. Измените пины подключения в #define секции если нужно

  2. Настройте температурные границы:

#define MIN_TEMP 18.0    // Минимальная температура
#define MAX_TEMP 25.0    // Максимальная температура
  1. Настройте частоты звука в функциях playLowTempAlarm(), playHighTempAlarm(), playNormalBeep()

Пример вывода в Serial Monitor:

Система контроля температуры запущена
Диапазон: 18°C - 25°C
Температура: 22.5 °C
НОРМА
Температура: 17.8 °C
СЛИШКОМ ХОЛОДНО!
Температура: 26.2 °C
СЛИШКОМ ЖАРКО!

Craftum Конструктор сайтов Craftum