4.1 Katse Temperatuuri andur

const int temperaturePin = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
float voltage, degreesC, degreesF;
voltage = getVoltage(temperaturePin);
degreesC = (voltage - 0.5) * 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);
delay(1000); // ootame 1 sek
}
float getVoltage(int pin) {
return (analogRead(pin) * 0.004882814); // teisendame pinge vahemikust 0 ... 5V vahemikku 0 ... 1023.
}
Kood loeb temperatuurianduri pinge ja teisendab selle temperatuuriks, kuvades väärtused seriaalmonitoris. getVoltage() funktsioon teisendab analoogpinni lugemise vastavaks pingeväärtuseks vahemikus 0–5V.
4.2 Katse Servo kasutamine
Servo liikumise juhtimiseks on kasutatud Arduino Servo.h teeki. Servo liikumise kood:

#include <Servo.h>
Servo servo1; // Servo objekti loomine
void setup() {
servo1.attach(9); // Servo ühendamine digitaalpinniga 9
}
void loop() {
int position;
servo1.write(90); // Pööratakse 90 kraadi
delay(1000);
servo1.write(180); // Pööratakse 180 kraadi
delay(1000);
servo1.write(0); // Pööratakse 0 kraadi
delay(1000);
// Servo liikumine sujuvalt
for (position = 0; position < 180; position += 2) {
servo1.write(position); // Servo liikumine
delay(20);
}
// Servo liikumine tagasi
for (position = 180; position >= 0; position -= 1) {
servo1.write(position); // Servo liikumine
delay(20);
}
}
Ülesanne 4 Temperatuuritundlik servolülitus(Kasvuhoone temperatuuri reguleegimine)

1. Tehtud Näidisülesanded
Projekti eesmärgiks oli luua miniatuurne automatiseeritud kasvuhoonesüsteem, mis reguleerib akende avamist/sulgemist temperatuuri põhjal ja lülitab LED-e sisse/välja vastavalt valgustingimustele. Kasutati järgmisi komponente:
- Temperatuuriandur (LM35): Kasutatud temperatuuri mõõtmiseks.
- Fototakisti (LDR): Kasutatud valgustingimuste mõõtmiseks.
- Servomootor (SG90): Kasutatud akna avamiseks ja sulgemiseks.
- LED: Kasutatud valgustuse juhtimiseks.
- Arduino Uno: Kasutatud süsteemi juhtimiseks.
2. Uuritud Funktsioonid
- Servo juhtimine (
#include <Servo.h>): Servo liikumist juhtiv teek, mis võimaldab servo liikumist soovitud nurkadesse. - Temperatuuri lugemine (getVoltage()): Analoogpinni kaudu temperatuurianduri pinge lugemine ja selle teisendamine temperatuuriks (Celsiuse järgi).
- LED-de juhtimine: LED-id süttivad vastavalt temperatuuri tasemele: sinine LED madalal temperatuuril, punane LED kõrgel temperatuuril ja roheline LED normaalses temperatuurivahemikus.
- Servo liikumine (
moveServoSmooth()): Servo liikumise juhtimine sujuvalt sihtnurka. - Pidev servo liikumine (
swingServo()): Kui temperatuur on kõrge, liigub servo edasi-tagasi, et jahutada keskkonda.
3. Töö Kirjeldus
Projekti ülesandeks oli luua süsteem, mis reguleerib kasvuhoone keskkonda:
- Temperatuuri alusel servomootori juhtimine:
- Kui temperatuur on madalam kui 22°C, servo sulgeb akna (0°).
- Kui temperatuur ületab 34°C, servo avab akna (180°).
- Temperatuuride vahemikus liigutatakse servo sujuvalt, et aknat avada/sulgeda.
- LDR abil valgustuse juhtimine:
- Kui ümbritsev valgus on väike, süttib LED (pimedas).
- Kui valgust on piisavalt, LED kustub.
4. Kasutatud Komponendid
- Temperatuuriandur (LM35)
- Fototakisti (LDR)
- Servomootor (SG90)
- LED
- Arduino Uno
- Takistid
- Breadboard ja juhtmed
- Toiteallikas (USB/patarei)
5. Ühendamise Skeem (Tinkercad)


‘Komponendid on ühendatud vastavalt järgmisele skeemile:
- Temperatuuriandur on ühendatud analoogpinniga A0.
- LDR on ühendatud analoogpinniga A1.
- LED on ühendatud digitaalpinniga 2.
- Servo on ühendatud digitaalpinniga 11.
Skeemi saab vaadata Tinkercad-is, järgides linki: Tinkercad projekt.
6. Programm
Arduino kood, mis juhib süsteemi:
#include <Servo.h>
const int RedPin = 6;
const int BluePin = 5;
const int GreenPin = 3;
const int temperaturePin = A0;
Servo servo1;
int currentAngle = 0;
bool swinging = false; // kas servo on pöörlemisrežiimis
void setup() {
Serial.begin(9600);
servo1.attach(11);
pinMode(RedPin, OUTPUT);
pinMode(GreenPin, OUTPUT);
pinMode(BluePin, OUTPUT);
servo1.write(currentAngle);
}
void loop() {
float voltage = getVoltage(temperaturePin);
float degreesC = (voltage - 0.5) * 100.0;
Serial.print("Voltage: ");
Serial.print(voltage);
Serial.print(" °C: ");
Serial.println(degreesC);
if (degreesC < 22) {
digitalWrite(BluePin, HIGH);
digitalWrite(RedPin, LOW);
digitalWrite(GreenPin, LOW);
swinging = false;
moveServoSmooth(0);
} else if (degreesC > 34) {
digitalWrite(RedPin, HIGH);
digitalWrite(GreenPin, LOW);
digitalWrite(BluePin, LOW);
swingServo(); // pidev liikumine edasi-tagasi
} else {
digitalWrite(RedPin, LOW);
digitalWrite(GreenPin, HIGH);
digitalWrite(BluePin, LOW);
swinging = false;
moveServoSmooth(0);
}
delay(100); // väike paus loopi lõpus
}
float getVoltage(int pin) {
return (analogRead(pin) * 0.004882814);
}
// Servo liigutamine ühekordselt sujuvalt sihtnurka
void moveServoSmooth(int targetAngle) {
if (currentAngle < targetAngle) {
for (int i = currentAngle; i <= targetAngle; i++) {
servo1.write(i);
delay(10);
}
} else if (currentAngle > targetAngle) {
for (int i = currentAngle; i >= targetAngle; i--) {
servo1.write(i);
delay(10);
}
}
currentAngle = targetAngle;
}
// Servo pidev liikumine edasi-tagasi
void swingServo() {
if (!swinging) {
swinging = true;
while (true) {
// Kontrolli uuesti temperatuuri iga tsükli alguses
float temp = (getVoltage(temperaturePin) - 0.5) * 100.0;
if (temp <= 34) {
swinging = false;
moveServoSmooth(0);
break; // katkestame tsükli
}
moveServoSmooth(180);
delay(500);
moveServoSmooth(0);
delay(500);
}
}
}
7. Video
Projektiga seondub video, kus on näha prototüübi töötamist:
- Temperatuuri muutumisega avanev ja sulguv aken.
- LDR-i tasemele vastav LED-i süttimine või kustumine.
Link videole:
kood ja skeem videolt:
#include <Servo.h>
// Пины
const int tempPin = A0; // Пин датчика температуры (TMP36)
const int ldrPin = A1; // Пин фотосопротивления
const int ledPin = 2; // Пин LED
const int servoPin = 13; // Пин сервомотора
// Переменные
Servo servo;
int currentAngle = 0; // Текущий угол серво
int targetAngle = 0; // Целевой угол серво
void setup() {
pinMode(ledPin, OUTPUT);
servo.attach(servoPin);
servo.write(currentAngle); // Начальная позиция
Serial.begin(9600); // Для отладки
}
void loop() {
// Чтение температуры
int tempReading = analogRead(tempPin);
float voltage = tempReading * (5.0 / 1023.0);
float temperature = (voltage - 0.5) * 100; // Для TMP36
// Определение целевого угла
if (temperature <= 20) {
targetAngle = 0; // Окно закрыто
} else if (temperature >= 30) {
targetAngle = 130; // Окно открыто
} else {
targetAngle = currentAngle; // Не менять угол
}
// Плавное перемещение серво
if (currentAngle != targetAngle) {
servo.attach(servoPin); // Подключаем серво
if (currentAngle < targetAngle) {
currentAngle++; // Увеличиваем угол
servo.write(currentAngle);
delay(15); // Задержка для плавности
} else if (currentAngle > targetAngle) {
currentAngle--; // Уменьшаем угол
servo.write(currentAngle);
delay(15); // Задержка для плавности
}
// Если угол достигнут, отключаем серво
if (currentAngle == targetAngle) {
delay(100); // Ждём стабилизации
servo.detach(); // Отключаем серво
}
}
// Чтение фотосопротивления и управление LED
int lightLevel = analogRead(ldrPin);
if (lightLevel > 500) { // Если темно
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
// Отладка
Serial.print("Temp: ");
Serial.print(temperature);
Serial.print("C, Angle: ");
Serial.print(currentAngle);
Serial.print(", Light: ");
Serial.println(lightLevel);
delay(100); // Пауза между циклами
8. Kasutamisvõimalused Tavaelus
Automatiseeritud kasvuhoonesüsteem võib leida rakendusi järgmistes valdkondades:
- Taimede kasvatamine: See süsteem aitab hoida stabiilset temperatuuri ja valgustingimusi kasvuhoonetes, optimeerides taimede kasvu.
- Koduaiandus: Väikeste kasvuhoonete automatiseerimine, et tagada optimaalne keskkond.
- Laste haridus: Haridussektoris saab kasutada seda projekti õppimiseks ja teaduse, tehnoloogia, inseneriteaduse ja matemaatika (STEM) tutvustamiseks.
Süsteem võiks ka tulevikus integreeruda IoT (Internet of Things) lahendustega, et kaugjuhtimise teel jälgida ja reguleerida kasvuhoone tingimusi.
Kokkuvõte:
Projekti eesmärk oli luua funktsionaalne automatiseeritud kasvuhoone, mis suudab reageerida ümbritsevale keskkonnale. Kasutatud komponendid ja tarkvara täidavad ülesandeid täpselt ning süsteem on valmis kasutamiseks kasvuhoonetes või haridusprojektides.

