Praktika 4: Temperatuuriandur, servomootor ja automatiseeritud kasvuhoone
4.1 Katse: -Temperatuuri andur-
Katse temperatuuri mõõtmiseks temperatuurianduri abil. Saadud tulemused kirjutame iga sekundi tagant Serial Monitori.
Komponendid:
x1
x4
Ühendus TÄHTIS!:

Skeem:

Kood:
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.
}
4.2. -Katse Servo kasutamine-
Komponendid:
x1
x8
Kasutusel on 180 kraadi pöörav servo mootor. (Võtame ladususe huvides lahti näidisprogammi: File-> Examples -> Servo)
Skeem:


Kood:
// 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.
}
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
}
}
Ülesanne 4: Temperatuuritundlik servolülitus
(Kasvuhoone temperatuuri reguleegimine)
Kirjeldus:
Selles praktikas valmis väike automatiseeritud kasvuhoone mudel. Süsteem mõõdab temperatuuri ja valguse tugevust ning reageerib nende muutustele automaatselt.
Temperatuuri mõõtmiseks kasutatakse TMP36 andurit. Kui temperatuur on madal, liigub servomootor asendisse 0° ja kasvuhoone aken on suletud. Kui temperatuur tõuseb, hakkab servomootor akent sujuvalt avama. Temperatuuril 30°C või rohkem on aken täielikult avatud.
Valguse mõõtmiseks kasutatakse fototakistit. Kui ümbrus muutub pimedaks, süttib valge LED, mis imiteerib lisavalgustust taimedele. Kui valgust on piisavalt, lülitub LED automaatselt välja.
Sinine LED töötab temperatuuri indikaatorina ja süttib siis, kui temperatuur on kõrge. Nii on lihtsam näha, millal süsteem tuvastab liiga sooja olukorra.
Komponendid:
x1
x1
x2
x2
x17
x1
x1
x1
x1
Skeem:
Simulatsioon väljas:
Simulatsiooni tööl:


Kood:
#include <Servo.h>
Servo servo;
// Pinid
const int tempPin = A0; // temperatuuriandur TMP36
const int ldrPin = A1; // valgusandur LDR
const int servoPin = 9; // servomootor
const int whiteLedPin = 8; // valge LED
const int blueLedPin = 7; // sinine LED
int currentAngle = 0; // servo praegune nurk
int targetAngle = 0; // servo soovitud nurk
void setup() {
servo.attach(servoPin); // ühendame servo piniga
pinMode(whiteLedPin, OUTPUT);
pinMode(blueLedPin, OUTPUT);
servo.write(currentAngle); // servo algasend
Serial.begin(9600); // Serial Monitor
}
void loop() {
// Loeme temperatuurianduri väärtuse
int tempValue = analogRead(tempPin);
// Muudame väärtuse pingeks
float voltage = tempValue * (5.0 / 1023.0);
// TMP36 temperatuuri arvutamine
float temperature = (voltage - 0.5) * 100.0;
// Arvutame servo nurga temperatuuri järgi
// 20 kraadi = 0 kraadi
// 30 kraadi = 180 kraadi
targetAngle = map(temperature, 20, 30, 0, 180);
// Hoiame nurga 0 ja 180 vahel
targetAngle = constrain(targetAngle, 0, 180);
// Liigutame servot aeglaselt
if (currentAngle < targetAngle) {
currentAngle++;
}
else if (currentAngle > targetAngle) {
currentAngle--;
}
servo.write(currentAngle);
// Loeme valgusanduri väärtuse
int lightLevel = analogRead(ldrPin);
// Kui on pime, valge LED põleb
if (lightLevel > 100) {
digitalWrite(whiteLedPin, HIGH);
}
else {
digitalWrite(whiteLedPin, LOW);
}
// Sinine LED põleb siis, kui temperatuur on kõrge
if (temperature >= 30) {
digitalWrite(blueLedPin, HIGH);
}
else {
digitalWrite(blueLedPin, LOW);
}
// Näitame andmeid Serial Monitoris
Serial.print("Temperatuur: ");
Serial.print(temperature);
Serial.print(" C | Valgus: ");
Serial.print(lightLevel);
Serial.print(" | Servo nurk: ");
Serial.println(currentAngle);
delay(15); // väike paus, et servo liiguks sujuvalt
}
Video:
Interaktiivne Arduino skeem
Uuritud funktsioonid
“`html| Funktsioon | Tüüp | Kirjeldus | Kasutus koodis |
|---|---|---|---|
pinMode() |
Standard | Seab pini sisendiks või väljundiks | LED-ide seadistamine väljundina |
analogRead() |
Standard | Loeb analoogsisendi väärtuse | Temperatuuri ja valguse mõõtmine |
digitalWrite() |
Standard | Lülitab väljundi sisse või välja | LED-ide juhtimine |
map() |
Standard | Teisendab väärtuse ühest vahemikust teise | Temperatuuri teisendamine servo nurgaks |
constrain() |
Standard | Piirab väärtuse määratud vahemikku | Servo nurga piiramine vahemikku 0–180° |
delay() |
Standard | Peatab programmi töö lühikeseks ajaks | Servo sujuv liikumine |
attach() |
Servo teek | Ühendab servomootori piniga | Servomootori seadistamine |
write() |
Servo teek | Määrab servomootori nurga | Servo liigutamine |
Kasutamisvõimalused tavaelus
🌱 Kasvuhooned
Süsteemi saab kasutada kasvuhoonetes temperatuuri ja valgustuse automaatseks reguleerimiseks.
🏠 Nutikodu
Andureid saab kasutada akende, ventilatsiooni ja valgustuse automaatseks juhtimiseks.
🌡️ Kliimakontroll
Temperatuuriandur võimaldab jälgida ruumi temperatuuri ja juhtida jahutus- või küttesüsteeme.
💡 Automaatne valgustus
Fototakisti abil saab automaatselt sisse ja välja lülitada valgust vastavalt ümbritsevale valgusele.
🔋 Energia säästmine
Süsteem aitab vähendada energiatarbimist, lülitades seadmed sisse ainult vajaduse korral.
🏭 Tööstusautomaatika
Sarnaseid andureid kasutatakse tootmisruumides temperatuuri ja valgustuse jälgimiseks.
