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:
- Loe temperatuur andurilt pin A0 kaudu.
- Kui temperatuur ≤ 25°C, liigutab servo nurka 0°.
- Kui temperatuur on kõrgem – liigutab nurka 180°.
- Servo liigub sujuvalt (mitte järsult).
- Loe valguse tase LDR-anduri abil (pin A1).
- Kui on pime (väärtus > 500), LED süttib.
- Kui on valge, LED kustub.
- Näitab andmeid Serial Monitoris (temperatuur, valgus, servo nurk).
🧠 Uute funktsioonide selgitus:
| Käsk / Funktsioon | Selgitus |
|---|---|
#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:
- Loeb temperatuuri ja arvutab kraadid.
- Määrab, millisesse nurka servo peab liikuma.
- Liigutab servo sujuvalt sihtnurka.
- Loeb valguse taseme LDR-ist.
- Juhib LEDi (süttib või kustub vastavalt valgusele).
- Kuvab kõik andmed Serial Monitori kaudu.
💡 Näide Serial Monitori väljundist:
yamlCopyEditTemp: 27.30 C, Light: 589, Servo angle: 180

