Tehtud näidisülesanded
4.2. Katse Servo kasutamine

Kood:
#include <Servo.h> // teavitame Arduino IDE-d, et kasutame mootorite juhtimiseks mõeldud Servo.h teeki
// Kui teek on lisatud, saame kohe kasutada selle funktsioone.
// Servo teegi funktsioonide nimekirja leiad: http://arduino.cc/en/Reference/Servo
// Enamik teeke on kättesaadavad menüüst "File / Examples".
Servo mootor; // Loome objekti nimega "mootor", millega juhime pöördemootorit (servomootorit)
void setup()
{
// Seome mootori juhtimise digitaalse pinni 9 külge.
// Kui kasutad rohkem kui ühte mootorit, peab iga uus mootor olema seotud eraldi digitaalse pordiga.
mootor.attach(9); // Ühendame mootori juhtimise digitaalpordi 9 külge. See peab olema PWM-toega väljund.
}
void loop()
{
int asend;
mootor.write(90); // Pöörame mootori asendisse 90 kraadi
delay(1000);
mootor.write(180); // Pöörame mootori 180 kraadi
delay(1000);
mootor.write(0); // Pöörame mootori tagasi 0 kraadi
delay(1000);
// Mootori pööramine aeglaselt päripäeva (0 → 180 kraadi)
for(asend = 0; asend < 180; asend += 2)
{
mootor.write(asend); // Muudame mootori asendit
delay(20); // Lühike paus sujuvaks liikumiseks
}
// Mootori pööramine aeglaselt vastupäeva (180 → 0 kraadi)
for(asend = 180; asend >= 0; asend -= 1)
{
mootor.write(asend); // Muudame mootori asendit
delay(20); // Lühike paus sujuvaks liikumiseks
}
}
Uuritud funktsioonid
updateServo(float temp)
Eesmärk:
Liigutada servomootorit vastavalt temperatuurile.
Kuidas see töötab:
- Kui temperatuur ≤ 20 °C → sihtnurk = 0°
- Kui temperatuur ≥ 30 °C → sihtnurk = 180°
- Kui temperatuur on vahemikus 20–30 °C →
map()teisendab temperatuuri vastavaks nurgaks (0–180°) - Mootor liigub iga tsükliga ühe kraadi võrra sihtnurgale lähemale
myServo.write(currentAngle)määrab uue nurgadelay(1)lisab väikese pausi liikumise sujuvuseks
🔧 map(temp, 20, 30, 0, 180)
Eesmärk:
Teisendada temperatuur (20–30 °C) vastavaks servonurgaks (0–180°).
Kuidas see töötab:
Lineaarne teisendus:
- 20 °C → 0°
- 25 °C → 90°
- 30 °C → 180°
🔧 updateLight()
Eesmärk:
Mõõta valguse taset ja juhtida RGB LED-i.
Kuidas see töötab:
Muidu kõik väärtused 0 (LED kustub)
Loeb LDR signaali: lightLevel = analogRead(ldrPin)
Kui lightLevel > 500 (pimedam):
punane = 255
roheline = 0
sinine = 255
Töö kirjeldus
Luua automatiseeritud miniatuurne kasvuhoonesüsteem, mis reageerib ümbritsevale temperatuurile ja valgusele.
Süsteem peab suutma juhtida servomootorit temperatuurimuutuse alusel ning lülitada valguse sisse või välja vastavalt valgustugevusele, kasutades fototakistit.
See projekt võimaldab siduda reaalseid keskkonnatingimusi elektroonikaga ja simuleerida taimede automaatset hooldust väikekasvuhoones.
Kasutatud komponeendid
- Valguse andur (fototakisti)
- Juhtmed (15 tk)
- RGB LED
- Takisti (3tk: 2tk 220 ohm, 1tk 10k ohm)
- Temperatuuriandur (TMP36)
- Servomootor
- Arduino Uno plaat
Ühendamise skeem

Programm
#include <Servo.h> // Servo teek servomootori juhtimiseks
// pinide määramine
const int tempPin = A0; // temperatuurisensor TMP36 on ühendatud A0 külge
const int ldrPin = A1; // valgussensor (LDR) on ühendatud A1 külge
const int redPin = 8; // punane LED-pin
const int bluePin = 9; // sinine LED-pin
const int greenPin = 10; // roheline LED-pin
const int servoPin = 11; // servomootori juhtimise pin
// kasutatavad muutujad
float temp = 0.0; // mõõdetud temperatuur
int lightLevel = 0; // valguse tase
int targetAngle = 0; // sihtnurk servole
int currentAngle = 0; // hetke asend servol
Servo myServo; // loome servo objekti
void setup(){
Serial.begin(9600); // alustame seriaalühendust monitorimiseks
pinMode(ldrPin, INPUT); // LDR on sisend
// LED-id väljundiks
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
myServo.attach(servoPin); // ühendame servo määratud pinniga
myServo.write(currentAngle); // määrame algasendi (0°)
}
float readTemp(){
int raw = analogRead(tempPin); // loeme TMP36 anduri väärtuse (0–1023)
float voltage = raw * 5.0 / 1023.0; // teisendame selle pingeks (0–5V)
float tempC = (voltage - 0.5) * 100; // TMP36 valem: 0.5V = 0°C, 10mV = 1°C
return tempC; // tagastame temperatuuri kraadides
}
void updateServo(float temp){
if (temp <= 20) {
targetAngle = 0; // kui temperatuur ≤ 20 °C → servo 0°
} else if (temp >= 30) {
targetAngle = 180; // kui ≥ 30 °C → servo 180°
} else {
targetAngle = map(temp, 20, 30, 0, 180); // vahepealne — lineaarne teisendus (map)
}
// liigutame servo aeglaselt sihtasendisse
if (currentAngle < targetAngle) {
currentAngle++; // suurendame nurka
} else if (currentAngle > targetAngle) {
currentAngle--; // vähendame nurka
}
myServo.write(currentAngle); // määrame servo uue nurga
delay(1); // väike paus sujuvaks liikumiseks
}
void updateLight(){
lightLevel = analogRead(ldrPin); // loeme valguse taseme
Serial.print(" Light: ");
Serial.println(lightLevel);
if (lightLevel > 500) { // kui liiga pime
analogWrite(redPin, 255); // punane 100%
analogWrite(greenPin, 0);
analogWrite(bluePin, 255); // sinine 100% (tulemus: lilla)
} else {
analogWrite(redPin, 0); // kustutame kõik LEDid
analogWrite(greenPin, 0);
analogWrite(bluePin, 0);
}
}
void loop(){
temp = readTemp(); // mõõdame temperatuuri
Serial.print("Temp is ");
Serial.print(temp);
updateServo(temp); // uuendame servoasendit
updateLight(); // uuendame LED-tuld vastavalt valgusele
delay(20); // väike paus tsükli vahel
}
Video
Kasutamisvõimalused tavaelus
1. Valgustundlik RGB LED
- Kui toas või keskkonnas läheb pimedaks (LDR näitab väikest valgustaset), süttib lilla LED-valgus.
- Päevavalguses valgus kustub automaatselt.
2. Nutikas kodu / mini-automaatika süsteem
- Mõõdab keskkonnatingimusi (valgus ja temperatuur)
- Annab visuaalset tagasisidet LED-iga
- Tegutseb mehhaaniliselt (servo) vastavalt oludele
