Skip to content
Avaleht » Ülesanne «Temperatuuritundlik servolülitus»

Ülesanne “Temperatuuritundlik servolülitus”

Чувствительное к температуре переключение сервопривода

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

Этот код реализует температурочувствительное управление серводвигателем (servolülitus). Он считывает данные с температурного датчика, преобразует их в температуру в градусах Цельсия и управляет серводвигателем и светодиодом в зависимости от текущей температуры.

Применение в жизни

Можно привести такие примеры применений в реальности:

Умное управление вентиляцией:

  • В комнате или небольшом пространстве, где требуется поддерживать определённую температуру, эта сборка может использоваться для автоматического управления вентиляционным отверстием. При повышении температуры выше заданного порога (например, 25°C), вентиляционное отверстие будет открываться (серводвигатель поворачивается на 180 градусов), позволяя свежему воздуху поступать в помещение. При понижении температуры ниже 22°C отверстие будет закрываться (серводвигатель возвращается в положение 0 градусов).

Система охлаждения серверной комнаты:

  • В серверных комнатах необходимо поддерживать низкую температуру для предотвращения перегрева оборудования. Система может автоматически управлять вентиляционными отверстиями или вентиляторами на основе показаний температуры, предотвращая перегрев серверов.
Список компонентов
  • Плата “Arduino UNO”.
  • Макет.
  • 1 Micro Servo.
  • 1 Температурный датчик
  • 12 провода.
  • 1 резистор.
  • 1 LED светодиод.
Код
#include <Servo.h>

#define TEMP_SENSOR_PIN A0 // Пин для подключения датчика температуры
#define SERVO_MOTOR_PIN 12 // Пин для подключения серводвигателя
#define LED_CONTROL_PIN 13 // Пин для подключения светодиода

Servo motor;

void setup() {
  Serial.begin(9600); // Начало общения через последовательный порт
  motor.attach(SERVO_MOTOR_PIN); // Подключение серводвигателя
  pinMode(LED_CONTROL_PIN, OUTPUT); // Установка пина светодиода в режим вывода
}

void loop() {
  int tempValue = analogRead(TEMP_SENSOR_PIN); // Считывание значения с датчика температуры
  const int sensorPin = 0;
  float voltageLevel, tempCelsius, tempFahrenheit;

  voltageLevel = calculateVoltage(sensorPin);
  tempCelsius = (voltageLevel - 0.5) * 100.0;
  tempFahrenheit = tempCelsius * (9.0/5.0) + 32.0;
  Serial.print("Voltage: ");
  Serial.print(voltageLevel);
  Serial.print(" C: ");
  Serial.print(tempCelsius);
  Serial.print(" F: ");
  Serial.println(tempFahrenheit);

  // Управление серводвигателем в зависимости от температуры
  if (tempCelsius <= 22) {
    motor.write(0); // Позиция серводвигателя при 22 градусах
    digitalWrite(LED_CONTROL_PIN, HIGH); // Включение светодиода при низкой температуре
  } else if (tempCelsius >= 25) {
    motor.write(180); // Позиция серводвигателя при 25 градусах
    digitalWrite(LED_CONTROL_PIN, LOW); // Отключение светодиода при высокой температуре
  } else {
    // Промежуточное положение серводвигателя для плавного перемещения
    int motorPosition = map(tempCelsius, 22, 35, 0, 180);
    motor.write(motorPosition);
  }

  delay(1000); // Пауза для стабилизации
}

float calculateVoltage(int pin) {
  return (analogRead(pin) * 0.004882814); // Преобразование значений от 0 до 1023 в диапазон напряжений от 0 до 5 В
}

Конструкция в Tinkercad

Отчеты

Конструкция в реальности
Видеоотчеты