Teema 4. Temperatuuri andur, Servo mootor

4.1 Katse Temperatuuri andur

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.
}

Koodi töö:

Kood kasutab temperatuuriandurit, et mõõta temperatuuri, ning kuvab tulemused seriaalmonitori kaudu voltides, Celsiuse ja Fahrenheiti kraadides. Mõõtmistulemused uuenevad iga sekundi järel.

Funktsioonid

loop() – peatsükkel, mis kordub pidevalt

analogRead() – loeb analoogsisendi väärtuse (vahemikus 0 kuni 1023)

Serial.begin() – alustab seriaalühendust kindla kiirusega (bitid sekundis)

Serial.print()/Serial.println() – kuvab andmed seriaalmonitori aknas

delay() – peatab programmi töö määratud ajaks (millisekundites)

getVoltage() – kohandatud funktsioon, mis teisendab anduri väärtuse pingeks voldina

setup() – algfunktsioon, mida käivitatakse üks kord programmi käivitamisel

Kasutamine elus:
Temperatuuri jälgimine jahutussüsteemides
Seda koodi saab kasutada jahutussüsteemides, nagu protsessorite või graafikakaartide jahutus arvutites. Temperatuuri mõõtmine aitab vältida ülekuumenemist ja parandada süsteemi juhtimist.

4.2. Katse Servo kasutamine

#include <Servo.h>
 
Servo servol;  // Создаем объект сервопривода
 
void setup() {
  servol.attach(9);  // Подключаем сервопривод к пину 5
}
 
void loop() {
  // Поворот на 30 градусов (среднее положение)
  servol.write(30);
  delay(1000);
   
  // Поворот на 180 градусов (крайнее правое положение)
  servol.write(180);
  delay(1000);
   
  // Поворот на 0 градусов (крайнее левое положение)
  servol.write(0);
  delay(1000);
   
  // Плавное движение от 0 до 180 градусов с шагом 3 градуса
  for(int position = 0; position < 180; position += 3) {
    servol.write(position);
    delay(80);
  }
   
  // Плавное движение от 180 до 0 градусов с шагом 1 градус
  for(int position = 180; position >= 0; position -= 1) {
    servol.write(position);
    delay(80);
  }
}

Funktsioonid

#include – lisab Servo teegi, mis võimaldab servomootorit juhtida
Servo – loob servomootori objekti attach(pin) – määrab, millise Arduino pordiga servo on ühendatud
write(aste) – seab servo soovitud nurka (0–180 kraadi)
delay(ms) – peatab programmi teatud ajaks millisekundites
setup() – algfunktsioon, mida käivitatakse üks kord programmi alguses
loop() – tsükkel, mis kordub pidevalt ja juhib servo liikumist

Koodi töö:
See kood juhib servomootorit, liigutades seda erinevatesse nurkadesse. Esmalt liigub servomootor 30°-le, seejärel 180°-le ja lõpuks 0°-le. Pärast seda liigub ta sujuvalt 0°-st 180°-ni sammuga 3° ja seejärel tagasi 180°-st 0°-ni sammuga 1°. Iga liikumise vahel on 1-sekundiline viivitus ja sujuva liikumise ajal on viivitus 80 millisekundit.

Kasutamine elus:

Automaatne ukse juhtimine: Seda koodi saab kasutada süsteemi loomiseks, mis avab ja sulgeb uksi automaatselt (näiteks nutikas kodus), kus ukse tiivad avanevad, kui on vaja (näiteks temperatuuri või valgustuse põhjal), ja sulguvad vastavalt vajadusele.

Ülesanne 4 Temperatuuritundlik
servolülitus(Kasvuhoone temperatuuri reguleegimine)

Kasutatud komponendid:

Juhtme 12tk

#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);
}

Arduino kontrollimine:

Uued funktsioonid

  • #include <Servo.h> — lisab toe servomootori juhtimiseks.
  • analogRead(pin) — loeb analoogväärtusi TMP36 andurilt ja LDR-ilt (valgusandur).
  • Servo.attach(pin) — ühendab servomootori määratud digitaalpordiga.
  • Servo.write(angle) — seab servomootori soovitud nurka.
  • map(val, in_min, in_max, out_min, out_max) — teisendab ühe vahemiku väärtuse teiseks (nt temperatuurist nurgaks).

Kuidas kood töötab:

Programm loeb temperatuuriandurilt andmeid ja kui temperatuur on 26 °C või rohkem, hakkab servomootor ust avama ja sulgema vaheldumisi. Kui temperatuur langeb alla 26 °C, liigub mootor sujuvalt algasendisse (0°) ja jääb sinna. Samuti juhib fototakisti LED-tuld: kui on pime, LED süttib, kui on valge, LED kustub.

Kasutamine elus:

Ukse või akna automaatne avamine ja sulgemine sõltuvalt temperatuurist:

Servomootori kasutamine ukse või akna avamiseks või sulgemiseks sõltuvalt temperatuurist. Näiteks, kui temperatuur ruumis on liiga kõrge (üle 26°C), siis akna avamine tagab ventilatsiooni. Kui temperatuur on alla 26°C, siis aken sulgub automaatselt.

Video:
https://drive.google.com/file/d/1C9KuR7Zjp9CC4HBmciPXxfoRIPpgQ8ey/view