Teema 4: 4.1 Katse Temperatuuri andur, 4.2. Katse Servo kasutamine, Ülesanne 4 Temperatuuritundlik
4.1 Katse Temperatuuri andur
Tinkercad

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.
}
Kuidas kood töötab
Kood mõõdab temperatuuri anduriga ja kuvab seriaalmonitori abil saadud väärtused voldina, Celsiuse ja Fahrenheiti kraadidena. Andmeid uuendatakse iga sekund.
Funktsioonid
- 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
- loop() – peatsükkel, mis kordub pidevalt
Kuidas elus kasutada
Seda koodi saab kasutada temperatuurimonitori loomiseks, mis kuvab andmeid reaalajas näiteks:
- Siseruumide temperatuuri jälgimiseks
- Õppematerjalina elektroonika ja andurite kasutuse tutvustamisel
- Osa suuremast automaatikaprojektist, nagu ilmaseire süsteem või nutikas termostaat
4.2. Katse Servo kasutamine
Tinkercad

Kood
#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);
}
}
Kuidas kood töötab
Kood juhib servomootorit, mis pöördub erinevatesse asenditesse: esmalt 30°, siis 180°, seejärel 0°. Pärast seda liigub servo sujuvalt 0° kuni 180° (3° sammuga) ja lõpuks tagasi 180° kuni 0° (1° sammuga), viivitusega iga sammu vahel.
Funktsioonid
#include <Servo.h>– lisab Servo teegi, mis võimaldab servomootorit juhtidaServo– loob servomootori objektiattach(pin)– määrab, millise Arduino pordiga servo on ühendatudwrite(aste)– seab servo soovitud nurka (0–180 kraadi)delay(ms)– peatab programmi teatud ajaks millisekunditessetup()– algfunktsioon, mida käivitatakse üks kord programmi algusesloop()– tsükkel, mis kordub pidevalt ja juhib servo liikumist
Kuidas elus kasutada
- Seda programmi saab kasutada automaatikasüsteemides, kus on vaja pööravat mehhanismi, näiteks uste avamisel või roboti liigutamisel.
- Sobib hästi õppematerjaliks, et mõista, kuidas juhtida liikuvaid osi Arduino abil.
- Saab rakendada projektides, kus on vaja täpseid või sujuvaid pööramisi, nagu kaamerahoidikute või sensorite pööramine.
Temperatuuritundlik servolülitus
KATSE 4
Komponendid:
- Temperatuuriandur (nt TMP36 või LM35)
- Fototakisti (LDR)
- Servo mootor (nt SG90)
- LED
- Arduino Uno
- Takistid
- Juhtmed ja breadboard

Kood selgitus:
- Temperatuuri lugemine ja servo juhtimine:
- Temperatuuri anduri väärtus loetakse ja konverteeritakse temperatuuriks (Celsius).
- Temperatuuri põhjal kaardistatakse servo nurk vahemikku 0–180°, kus:
- Kui temperatuur on madalam kui 20°C, liigub servo asendisse 0° (nt aken suletakse).
- Kui temperatuur tõuseb üle 25°C, liigub servo asendisse 180° (nt aken avaneb, et jahutada).
- Väikeste sammudega liikumise tagamiseks, liigutatakse servot iga kord ühe nurga võrra (vältides järske liikumisi).
- LDR-i lugemine ja LED juhtimine:
- Kui valgus on väike (pime), siis LED süttib.
- Kui valgus on piisav (päevavalgus), siis LED lülitub välja.
- Seriaalväljundi jälgimine:
- Andmed temperatuurist, valguse tasemest ja servo nurgast kuvatakse seriaalmonitoril.
#include <Servo.h>
// PIN määrangud
const int tempPin = A1; // Temperatuuri andur (TMP36)
const int ldrPin = A0; // LDR andur
const int ledPin = 9; // LED
const int servoPin = 10; // Servo
Servo myServo;
void setup() {
Serial.begin(9600);
myServo.attach(servoPin);
pinMode(ledPin, OUTPUT);
}
void loop() {
// --- Loeme temperatuuri andurit ---
int tempValue = analogRead(tempPin);
float voltage = tempValue * (5.0 / 1023.0);
float temperatureC = (voltage - 0.5) * 100; // TMP36 valem
// --- Servo juhtimine temperatuuri järgi ---
// Näiteks: < 20C → sulgeb, > 25C → avab
int servoAngle = 0;
if (temperatureC < 20) {
servoAngle = 0; // aken suletud
} else if (temperatureC > 25) {
servoAngle = 180; // aken avatud
} else {
// vahemik 20–25C → servo keskele
servoAngle = map(temperatureC, 20, 25, 0, 180);
}
myServo.write(servoAngle);
// --- Loeme LDR andurit ---
int ldrValue = analogRead(ldrPin);
// LED lülitamine (nt. kui liiga pime → LED süttib)
if (ldrValue < 500) { // Väärtust võid vajadusel katsetada
digitalWrite(ledPin, HIGH); // LED sisse
} else {
digitalWrite(ledPin, LOW); // LED välja
}
// --- Seriaalkonsooli info ---
Serial.print("Temp: ");
Serial.print(temperatureC);
Serial.print(" C | LDR: ");
Serial.print(ldrValue);
Serial.print(" | Servo: ");
Serial.println(servoAngle);
delay(500);
}