analoogRead() loeb analoogsignaali TMP36-st (0-1023).

getVoltage() teisendab selle signaali pingeks 0,0-5,0V.

Temperatuuri valem:

Celsius:
kraadiC = (pinge – 0,5) * 100,0;

Fahrenheit:
degreesF = degreesC * 9,0/5,0 + 32,0;

TMP36 annab 0,5 V välja temperatuuril 0 °C.

Iga 10 mV (0,01 V) = 1°C.

4.2. Katse Servo kasutamine

attach(pin) – Servomootori sidumine digitaalse viiguga
write(angle) – Pöördenurga määramine (0 kuni 180)
detach() – Mootori juhtimise väljalülitamine

Mida Arduino teeb:
Kontrollib servomootori asendit signaali abil, mis saadetakse signaalijuhile (ühendatud viiguga 9).

See signaal on PWM-signaal: eriline signaalitüüp, mis võimaldab servomootoril võtta teatud positsiooni (nurk 0 kuni 180 kraadi).

⚙️ Kuidas servomootor töötab:
Servomootori sisemus sisaldab:

Alalisvoolumootor,

käigukast,

asendiandur,

ja juhtelektroonika.

Arduino saadab teatud pikkusega (laiusega) impulsse, nt:

1 ms – 0° asend,

1,5 ms – 90° asend,

2 ms – 180° asend.

Servo.h raamatukogu lihtsustab seda protsessi: te ei pea neid impulsse käsitsi looma – kutsuge lihtsalt mootor.write(angle).

⏱ Mida programm teeb:
Initsialiseerimine (seadistamine):

Arduino „seob“ servomootori viiguga 9.

Peamine tsükkel (loop):

Liigutab mootorit järjestikku nurkadele: 90°, 180°, 0°.

Seejärel teeb sujuvat pöörlemist:

Kõigepealt 0-st 180 kraadini (päripäeva).

Seejärel tagasi 180 kraadist 0 kraadini (vastupäeva).

See tekitab „lainetuse“ või edasi-tagasi efekti.

Arduino juhib servomootorit, saates sellele PWM-signaale viigu 9 kaudu. Servo.h raamatukogu funktsioonide abil on lihtne soovitud pöördenurka määrata. Programm demonstreerib nii servomootori teravat kui ka sujuvat liikumist.

Kas soovite, et ma koostaksin skeemi/diagrammi koos selgitustega?

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

#include <Servo.h>

const int tempPin = A0;       // Temperatuuriandur (LM35, TMP36 jne)
const int ldrPin = A1;        // Fototakisti (LDR)
const int ledPin = 10;         // LEDi digitaalne väljund
const int servoPin = 9;       // Servo mootor SG90

Servo servo;
int currentAngle = 0;

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

void loop() {
  // --- Temperatuuri lugemine ja teisendamine kraadideks ---
  int tempValue = analogRead(tempPin);
  float voltage = tempValue * (5.0 / 1023.0);
  float temperature = (voltage - 0.5) * 100.0; // TMP36 puhul

  // --- Servonurga määramine temperatuuri põhjal ---
  int targetAngle;
  if (temperature <= 25) {
    targetAngle = 0;
  } else {
    targetAngle = 180;
  }

  // --- Servo liigutamine sujuvalt ---
  if (currentAngle != targetAngle) {
    if (currentAngle < targetAngle) {
      currentAngle += 3;
      if (currentAngle > targetAngle) currentAngle = targetAngle;
    } else if (currentAngle > targetAngle) {
      currentAngle -= 3;
      if (currentAngle < targetAngle) currentAngle = targetAngle;
    }
    servo.write(currentAngle);
    delay(5);
}
  // --- Valgustaseme lugemine ja LEDi juhtimine ---
  int lightLevel = analogRead(ldrPin);
  if (lightLevel > 500) {
    digitalWrite(ledPin, HIGH); // LED süttib, kui on pime
  } else {
    digitalWrite(ledPin, LOW);  // LED kustub, kui valgust piisavalt
  }

  // --- Andmete näitamine Serial Monitoris ---
  Serial.print("Temp: ");
  Serial.print(temperature);
  Serial.print(" C, Light: ");
  Serial.print(lightLevel);
  Serial.print(", Servo angle: ");
  Serial.println(currentAngle);
}

📘 Mida programm teeb:

  1. Loe temperatuur andurilt pin A0 kaudu.
  2. Kui temperatuur ≤ 25°C, liigutab servo nurka 0°.
    • Kui temperatuur on kõrgem – liigutab nurka 180°.
    • Servo liigub sujuvalt (mitte järsult).
  3. Loe valguse tase LDR-anduri abil (pin A1).
    • Kui on pime (väärtus > 500), LED süttib.
    • Kui on valge, LED kustub.
  4. Näitab andmeid Serial Monitoris (temperatuur, valgus, servo nurk).

🧠 Uute funktsioonide selgitus:

Käsk / FunktsioonSelgitus
#include <Servo.h>Lisab teegi servo mootori kasutamiseks.
Servo servo;Loob servo objekti.
servo.attach(pin);Ühendab servo kindla pinniga.
analogRead(pin);Loeb analoogsignaali (vahemikus 0–1023).
voltage = value * (5.0 / 1023.0);Teisendab loetud väärtuse voltideks.
servo.write(angle);Seab servo soovitud nurka (0–180).
digitalWrite(pin, HIGH/LOW);Lülitab pinni sisse (HIGH) või välja (LOW).
Serial.begin(9600);Käivitab Serial Monitori suhtluse.
Serial.print()/println()Kuvab andmed Serial Monitoris.

🔄 Loop()-i tööloogika:

  1. Loeb temperatuuri ja arvutab kraadid.
  2. Määrab, millisesse nurka servo peab liikuma.
  3. Liigutab servo sujuvalt sihtnurka.
  4. Loeb valguse taseme LDR-ist.
  5. Juhib LEDi (süttib või kustub vastavalt valgusele).
  6. Kuvab kõik andmed Serial Monitori kaudu.

💡 Näide Serial Monitori väljundist:

yamlCopyEditTemp: 27.30 C, Light: 589, Servo angle: 180