Posted in

Temperatuur, Servo – Teema 4

Temperatuuri andur

Skeem:

Komponendid:

Tööpõhimõte:

Programm loeb temperatuurisensori väärtuse A0 pinnilt, teisendab selle pingeks ja arvutab saadud pinge põhjal temperatuuri kraadides. Temperatuur kuvatakse nii Celsiuse kui Fahrenheiti järgi seerianäidikus iga sekund.

TMP ühendamine!

Servo mootor

Skeem:

Komponendid:

Tööpõhimõte:

Programm juhib servo­mootorit, mis on ühendatud digitaalpordiga 9. Alguses liigutatakse servo kindlatesse asenditesse: 90°, 180°, 0°. Seejärel servo liigub sujuvalt 0° kuni 180° ja tagasi 0°, muutes asendit sammhaaval koos väikese viivitusega.

Ülesanne

Töö kirjeldus:

Projekt kasutab Arduino Uno mikrokontrollerit temperatuuri ja valguse põhjal automaatseks toimingute juhtimiseks. Temperatuuriandur juhib servomootori asendit ja fototakisti lülitab LEDi sisse või välja, olenevalt valgustasemest.

Kasutatud komponendid:

Töö protsess:

Temperatuuriandur loeb temperatuuri ja juhib servomootori asendit.
Kui temperatuur on madal (<25), liigub 0° ja kui kõrge (>25), siis 180°.
Fototakisti mõõdab valgust ja lülitab LEDi sisse või välja.
Kõik toimingud on sujuvad ja kuvatakse Serial Monitoris.

Skeem:

Kood:

#include <Servo.h>

const int tempPin = A0;       // Temperatuuriandur (LM35, TMP36 jne)
const int ldrPin = A1;        // Fototakisti (LDR)
const int ledPin = 10;         // LEDi digitaalne väljund
const int servoPin = 9;       // Servo mootor SG90

Servo servo;
int currentAngle = 0;

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

void loop() {
  // --- Temperatuuri lugemine ja teisendamine kraadideks ---
  int tempValue = analogRead(tempPin);
  float voltage = tempValue * (5.0 / 1023.0);
  float temperature = (voltage - 0.5) * 100.0; // TMP36 puhul

  // --- Servonurga määramine temperatuuri põhjal ---
  int targetAngle;
  if (temperature <= 25) {
    targetAngle = 0;
  } else {
    targetAngle = 180;
  }

  // --- Servo liigutamine sujuvalt ---
  if (currentAngle != targetAngle) {
    if (currentAngle < targetAngle) {
      currentAngle += 3;
      if (currentAngle > targetAngle) currentAngle = targetAngle;
    } else if (currentAngle > targetAngle) {
      currentAngle -= 3;
      if (currentAngle < targetAngle) currentAngle = targetAngle;
    }
    servo.write(currentAngle);
    delay(5);
}
  // --- Valgustaseme lugemine ja LEDi juhtimine ---
  int lightLevel = analogRead(ldrPin);
  if (lightLevel > 500) {
    digitalWrite(ledPin, HIGH); // LED süttib, kui on pime
  } else {
    digitalWrite(ledPin, LOW);  // LED kustub, kui valgust piisavalt
  }

  // --- Andmete näitamine Serial Monitoris ---
  Serial.print("Temp: ");
  Serial.print(temperature);
  Serial.print(" C, Light: ");
  Serial.print(lightLevel);
  Serial.print(", Servo angle: ");
  Serial.println(currentAngle);
}

Video:

Uued funktsioonid:

Servo servo – Loob objekti.
servo.attach(pin) – Seob servomootori määratud piniga
#include <Servo.h> – Lisab raamatukogu.
servo.write(angle); – Liigutab määratud nurka (0–180°).
float – koma numbrid

Lisa kommentaar

Sinu e-postiaadressi ei avaldata. Nõutavad väljad on tähistatud *-ga