Praktika 4 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)

#include <Servo.h>

// Пины
#define TMPPIN A1       // TMP36 подключён к A1
#define LDRPIN A0       // Фоторезистор
#define LEDPIN 3        // Светодиод
#define SERVOPIN 9      // Серво SG90

Servo servo;
int currentAngle = 0;

void setup() {
  Serial.begin(9600);
  pinMode(LEDPIN, OUTPUT);
  servo.attach(SERVOPIN);
}

void loop() {
  // --- Температура ---
  int rawTemp = analogRead(TMPPIN);
  float voltage = rawTemp * (5.0 / 1023.0);         // Преобразуем в напряжение
  float temperature = (voltage - 0.5) * 100.0;      // Формула TMP36

  Serial.print("Температура: ");
  Serial.print(temperature);
  Serial.println(" *C");

  // --- Освещённость ---
  int lightLevel = analogRead(LDRPIN);
  Serial.print("Освещённость: ");
  Serial.println(lightLevel);

  // --- LED ---
  if (lightLevel < 500) {
    digitalWrite(LEDPIN, LOW);  // Темно — выключаем
  } else {
    digitalWrite(LEDPIN, HIGH);   // Светло — включаем
  }

  // --- Servo — температурное управление ---
  int targetAngle;

  if (temperature <= 20) {
    targetAngle = 0;
  } else if (temperature >= 30) {
    targetAngle = 180;
  } else {
    targetAngle = map(temperature, 21, 29, 0, 180);
  }

  if (currentAngle < targetAngle) {
    currentAngle++;
  } else if (currentAngle > targetAngle) {
    currentAngle--;
  }

  servo.write(currentAngle);
  delay(15);
}

https://drive.google.com/file/d/1M1ioKCld220McMOBp_IHveQfvDay7rah/view?usp=sharing