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.

“`