|ru_RU

Teema 4: TEMP, SERVO

4.1 Katse Temperatuuri andur

Ühendus  TÄHTIS!

Kood

const int temperaturePin = 0;

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

void loop()
{

float voltage, degreesC, degreesF;
// kasutame analogRead(), mis tagastab sisendi väärtused vahemikul 0 ... 1023.
// koostasime getVoltage() funktsioon, mis tagastab pingeväärtus  0 ... 5,

voltage = getVoltage(temperaturePin);
degreesC = (voltage - 0.5) * 100.0;
// degreesC = voltage * 100.0;
degreesF = degreesC * (9.0/5.0) + 32.0;
Serial.print("voltage: ");
Serial.print(voltage);
Serial.print(" deg C: ");
Serial.print(degreesC);
Serial.print(" deg F: ");
Serial.println(degreesF);


//Ekraanil ilmub järgmine tekst: "voltage: 0.73 deg C: 22.75 deg F: 72.96"
delay(1000); // ootame 1 sek
}

float getVoltage(int pin)
{
return (analogRead(pin) * 0.004882814);
// teisendame pinge vahemikust 0,0 ... 5,0 V, vahemikku 0 до 1023.
}

Skeem

Ülesanne 4 Temperatuuritundlik servolülitus(Kasvuhoone temperatuuri reguleegimine)
Komponendid / Компоненты:

Toiteallikas (USB või patarei) – источник питания (USB или батарейка)

Arduino Uno – Arduino Uno

TMP36 temperatuurisensor – температурный датчик TMP36

Valgustundlik takisti (LDR) – фоторезистор (LDR)

10 kΩ takisti – резистор 10 кОм (для LDR)

220 Ω takisti – резистор 220 Ом (для LED)

Servo mootor SG90 – сервомотор SG90

LED diood – светодиод

Juhtmed (jumpperid) – соединительные провода (джамперы)

Skeem

Kood

#include <Servo.h>

Servo servoMotor;

const int tempPin = A1;         // TMP36 andur
const int ldrPin = A0;          // Fototakisti
const int ledPin = 11;          // LED
const int servoPin = 9;         // Servomootor

int currentAngle = 0;
bool increasing = true;

void setup() {
  pinMode(ledPin, OUTPUT);
  servoMotor.attach(servoPin);
  servoMotor.write(currentAngle);
  Serial.begin(9600);
}

void loop() {
  // --- Temperatuur ---
  int sensorValue = analogRead(tempPin);
  float voltage = sensorValue * (5.0 / 1023.0);
  float temperatureC = (voltage - 0.5) * 100;

  if (temperatureC >= 26) {
    // Ukse avamine ja sulgemine tsükliliselt
    if (increasing) {
      currentAngle++;
      if (currentAngle >= 160) {
        currentAngle = 160;
        increasing = false;
      }
    } else {
      currentAngle--;
      if (currentAngle <= 0) {
        currentAngle = 0;
        increasing = true;
      }
    }
    servoMotor.write(currentAngle);
    delay(10);
  } else {
    // Ukse sulgemine, kui temperatuur alla 26
    if (currentAngle > 0) {
      currentAngle--;
      servoMotor.write(currentAngle);
      delay(10);
    }
  }

  // --- Valguse tase (fototakisti) ---
  int lightLevel = analogRead(ldrPin);
  if (lightLevel < 500) {
    digitalWrite(ledPin, HIGH);  // Pime – LED sisse
  } else {
    digitalWrite(ledPin, LOW);   // Valge – LED välja
  }

  // Debug
  Serial.print("Temp: ");
  Serial.print(temperatureC);
  Serial.print(" C, Light: ");
  Serial.println(lightLevel);
}

See Arduino kood kasutab temperatuuriandurit ja fototakistit, et juhtida servomootorit ja LED-i:

  • Kui temperatuur on 26 °C või rohkem, siis uks (servomootor) liigub edasi-tagasi automaatselt.
  • Kui temperatuur on alla 26 °C, siis uks sulgub aeglaselt.
  • Kui on pime (valgus < 500), siis LED süttib; kui on valge, siis kustub.
  • Seriaalmonitoris kuvatakse temperatuuri ja valguse tase.

Этот код на Arduino использует датчик температуры и фоторезистор для управления сервомотором и светодиодом:

  • Если температура 26 °C или выше, дверь (сервомотор) открывается и закрывается циклично.
  • Если температура ниже 26 °C, дверь плавно закрывается.
  • Если темно (уровень света < 500), светодиод включается; если светло — выключается.
  • В монитор порта выводятся данные о температуре и уровне освещенности.

Video

https://drive.google.com/file/d/1C9KuR7Zjp9CC4HBmciPXxfoRIPpgQ8ey/view?usp=sharing