4. Teema Temperatuuri andur, Servo mootor

4.1 Katse Temperatuuri andur

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

// 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)

Töö kirjeldus

See projekt mõõdab temperatuuri ja liigutab servomootorit, kui temperatuur on teatud vahemikus. Näiteks, kui kasvuhoones on õige temperatuur, siis mootor avab või sulgeb mingi luugi.

Kasutatud komponenid

Arduino UNO plaat (1tk)
Arendusplaat (1tk)
LED (1tk)
15 traati
2 takisti
photoresistor (1tk)
Micro Servo (1tk)
temperatuuriandur (1tk)

Töö protsess:

  • Ühendame kõik komponendid breadboard’ile ja Arduino külge.
  • Fototakisti mõõdab valgust ja LED süttib vastavalt sellele.
  • Temperatuuriandur mõõdab temperatuuri.
  • Kui temperatuur on 18–25 kraadi vahel, siis servo liigub (nt avab akna).
  • Kui temperatuur on liiga madal või kõrge, siis servo liigub tagasi.

Kasutamisvõimalused tavaelus

  • Kasvuhoone automaatne tuulutamine
  • Nutikas ventilatsioon
  • Temperatuuritundlikud mehhanismid (näiteks kliimaseadmed või luugid)

Skeem:

Programm:

#include <Servo.h>  // Lisame servo juhtimiseks vajaliku teegi

const int led = 12;        // LED on ühendatud pin 12
const int sensorPin = A1;  // Fototakisti on pin A1
int lightLevel, high = 0, low = 1023; // Muutujad valguse taseme jaoks

const int temperaturePin = A0;  // Temperatuuriandur on pin A0
Servo servo1;  // Loome servo objekti

void setup() {
  pinMode(led, OUTPUT);    // Määrame, et LED pin on väljund
  servo1.attach(13);       // Ühendame servomootori pin 13 külge
  Serial.begin(9600);      // Alustame serial monitori
}

void loop() {
  lightLevel = analogRead(sensorPin);  // Loeme valguse taseme
  analogWrite(led, lightLevel);        // LED süttib vastavalt valgusele

  float voltage, degreesC, degreesF;
  voltage = getVoltage(temperaturePin);            // Saame anduri pingetaseme
  degreesC = (voltage - 0.5) * 100.0;               // Arvutame Celsiuse kraadid
  degreesF = degreesC * (9.0 / 5.0) + 32.0;         // Arvutame Fahrenheiti kraadid

  // Näitame andmeid serial monitoril
  Serial.print("Voltage: ");
  Serial.print(voltage);
  Serial.print(" deg C: ");
  Serial.print(degreesC);
  Serial.print(" deg F: ");
  Serial.println(degreesF);

  // Kui temperatuur on 18–25°C, siis servo liigub
  if (degreesC <= 25 && degreesC >= 18) {
    servo1.write(180);  // Servo pöördub
    delay(1000);        // Ootame 1 sek
  } else {
    servo1.write(0);    // Servo tagasi algasendisse
    delay(1000);
  }

  delay(2000);  // Väike paus enne järgmist tsüklit
}

// Funktsioon pinge arvutamiseks (A0 pinilt)
float getVoltage(int pin) {
  return (analogRead(pin) * 0.004882814);
}


Video: