4.1 Katse Temperatuuri andur
Katse temperatuuri mõõtmiseks temperatuurianduri abil.
Saadud tulemused kirjutame iga sekundi tagant Serial Monitori.
Komponeendid:

Ühendus TÄHTIS!:

Skeem:

Programm:
const int temperaturePin = 0;
void setup()
{
Serial.begin(9600); // инициализируется сериал-порт со скоростью 9600 бод
}
void loop()
{
float voltage, degreesC, degreesF;
// 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;
// Преобразование из Цельсия в Фаренгейты по формуле: °F = °C × 9/5 + 32
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
}
// Функция читает аналоговое значение (0–1023) и переводит его в напряжение (0.0–5.0 В).
float getVoltage(int pin)
{
return (analogRead(pin) * 0.004882814);
// teisendame pinge vahemikust 0,0 ... 5,0 V, vahemikku 0 до 1023.
}
4.2. Katse Servo kasutamine
Projekti koostamiseks läheb vaja:

Kasutusel on 180 kraadi pöörav servo mootor. (Võtame ladususe huvides lahti näidisprogammi: File-> Examples -> Servo)
Servo mootori ühendamine
Skeem:

Programm:
// Paljud saadaolevad teegid (library’d) on leitavad aadressilt http://arduino.cc/en/Reference/Libraries
#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.
// В setup() указываем, что серво подключён к цифровому пину 9. Этот пин должен поддерживать PWM (широтно-импульсную модуляцию).
}
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)
// Плавно увеличиваем угол от 0 до 180° с шагом 2 градуса.
Пауза delay(20) делает движение медленным и плавным.
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
}
}
Ülesanne 4. Temperatuuritundlik servolülitus
Kasvuhoone temperatuuri reguleegimine
Töö kirjeldus
See projekt on automatiseeritud miniatuurne kasvuhoonesüsteem, mis reageerib ümbritsevale temperatuurile ja valgusele. Süsteemi eesmärk on simuleerida taimede automaatset hooldust, kasutades elektroonilisi komponente ja Arduino Uno mikrokontrollerit.
Projekti põhifunktsioonid:
- Servomootor liigub vastavalt temperatuurile: kui on külm – suletakse (0°), kui on kuum – avatakse (180°).
- LED-valgustus lülitub automaatselt sisse, kui on liiga pime (LDR tuvastab vähese valguse).
Kasutatud komponenid
- Arduino UNO plaat (1tk)
- Arendusplaat (1tk)
- 220 Ω Takisti (1tk)
- 10 kΩ Takisti (1tk)
- Juhtmed (17tk)
- Temperatuuri andur (1tk)
- Servo mootor (1tk)
- LED RGB (1tk)
- Fototakisti (1tk)
Töö protsess
Projekti käigus ühendati Arduino Uno plaadiga mitmed komponendid: temperatuuriandur, fototakisti (LDR), kaks LEDi (sinine ja punane) ning servomootor.
- Temperatuuriandur ühendati analoogsisendisse A0. Analoogväärtus teisendati pingeks ja seejärel Celsiuse kraadideks. Saadud temperatuur määrab servomootori liikumise suuna.
- Fototakisti (LDR) ühendati analoogsisendisse A1 ning loetud väärtuse põhjal määrati valguse tase. Valguse intensiivsus (väärtus vahemikus 0–1023) kontrollib LEDide sisselülitamist.
Servomootori töö loogika:
- Kui temperatuur on ≤ 20°C, liigub servo asendisse 0° (näiteks kasvuhoone aken sulgub).
- Kui temperatuur on ≥ 30°C, liigub servo asendisse 180° (aken avaneb).
- Kui temperatuur on vahemikus 21–29°C, kaardistatakse see
map()
funktsiooni abil sujuvalt nurkade vahemikku 0–180°, ning mootori liikumine toimub sammhaaval (currentAngle++
/--
), et vältida hüppelist liikumist.
LEDide töö loogika:
- Kui valgus on nõrk (LDR > 500) ja temperatuur madal, süttib sinine LED.
- Kui valgus on nõrk ja temperatuur kõrge, süttib punane LED.
- Kui valgus on piisav, siis LEDid ei sütti.
Kõikide andurite väärtusi väljastatakse Serial Monitori, kus on näha pinge, temperatuur, servo nurk ja valguse tase reaalajas. Süsteem reageerib pidevalt ümbritsevale keskkonnale ning loob aluse autonoomse väikekasvuhoone juhtimiseks.
Uuritud funktsioonid
degreesC = (voltage - 0.5) * 100.0; |
Teisendab TMP36 anduri pingetaseme Celsiuse kraadideks. 0.5 V = 0 °C, iga lisavolt = +100 °C. |
degreesF = degreesC * (9.0/5.0) + 32.0; |
Teisendab temperatuuri Fahrenheiti kraadideks. |
float getVoltage(int pin)
|
Funktsioon, mis arvutab antud analoogsisendi pinge voltdes (5 V / 1023 = ~0.00488 V ühe sammu kohta). |
#include <Servo.h> |
Lisab Servo teegi, mis võimaldab servomootori juhtimist käskude attach() ja write() abil. |
mootor.write(asend); |
Liigutab servomootori etteantud nurka (0–180 kraadi). Nurk arvutatakse tavaliselt keskkonnatingimuste põhjal. |
Kasutamisvõimalused tavaelus
- Väike kasvuhoone automatiseerimine: akende või ventilatsiooni juhtimine vastavalt temperatuurile.
- Taimede lisavalgustus: automaatne LED-valgustuse käivitamine pimedal ajal.
- Nutikas akna juhtimine kodudes või kasvuhoonetes, mille kaudu hoitakse optimaalset sisekliimat.
- Keskkonnatingimustele reageeriv hariduslik mudel koolide projektide jaoks.
Interaktiivne skeem
Vajuta “Start Simulation” ja proovi!
Skeem

Video (link)
Programm
#include <Servo.h>
const int temperaturePin = A0;
const int LDRPin = A1;
const int WhiteLedPin = 8;
const int BlueLedPin = 7;
const int servoPin = 9;
Servo mootor;
float voltage, degreesC;
int currentAngle = 90; // servo mootori algasend
void setup()
{
Serial.begin(9600);
mootor.attach(9);
pinMode(WhiteLedPin, OUTPUT);
pinMode(BlueLedPin, OUTPUT);
}
void loop()
{
// Temperatuur
voltage = analogRead(temperaturePin) * 0.004882814;
degreesC = (voltage - 0.5) * 100.0;
// Nurga arvutamine
int targetAngle;
if (degreesC <= 20) {
targetAngle = 0;
} else if (degreesC >= 30) {
targetAngle = 180;
} else {
targetAngle = map(degreesC, 22, 35, 0, 180);
}
targetAngle = constrain(targetAngle, 0, 180);
// Servo mootori sujuv liikumine
if (currentAngle < targetAngle)
{
currentAngle++;
} else if (currentAngle > targetAngle)
{
currentAngle--;
}
mootor.write(currentAngle);
delay(10);
// Valguseandur ja LEDid
int lightLevel = analogRead(LDRPin);
lightLevel = map(lightLevel, 300, 800, 0, 255);
lightLevel = constrain(lightLevel, 0, 255);
// kui on pime ja külm
if (lightLevel > 85 && degreesC <= 25)
{
digitalWrite(WhiteLedPin, HIGH);
digitalWrite(BlueLedPin, LOW);
}
// kui on pime ja soe
else if (lightLevel > 85 && degreesC >= 25)
{
digitalWrite(WhiteLedPin, LOW);
digitalWrite(BlueLedPin, HIGH);
}
else
{
digitalWrite(WhiteLedPin, LOW);
digitalWrite(BlueLedPin, LOW);
}
Serial.print("Voltage: ");
Serial.print(voltage);
Serial.print(" V | Temp: ");
Serial.print(degreesC);
Serial.print(" °C | Servo: ");
Serial.print(currentAngle);
Serial.print("° | Light level: ");
Serial.println(lightLevel);
delay(100);
}