KATSE 4

4.1 Katse Temperatuuri andur

Tinkercad

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.
}

Kuidas kood töötab

Kood mõõdab temperatuuri anduriga ja kuvab seriaalmonitori abil saadud väärtused voldina, Celsiuse ja Fahrenheiti kraadidena. Andmeid uuendatakse iga sekund.

Funktsioonid

  • analogRead() – loeb analoogsisendi väärtuse (vahemikus 0 kuni 1023)
  • Serial.begin() – alustab seriaalühendust kindla kiirusega (bitid sekundis)
  • Serial.print()/Serial.println() – kuvab andmed seriaalmonitori aknas
  • delay() – peatab programmi töö määratud ajaks (millisekundites)
  • getVoltage() – kohandatud funktsioon, mis teisendab anduri väärtuse pingeks voldina
  • setup() – algfunktsioon, mida käivitatakse üks kord programmi käivitamisel
  • loop() – peatsükkel, mis kordub pidevalt

Kuidas elus kasutada

Seda koodi saab kasutada temperatuurimonitori loomiseks, mis kuvab andmeid reaalajas näiteks:

  • Siseruumide temperatuuri jälgimiseks
  • Õppematerjalina elektroonika ja andurite kasutuse tutvustamisel
  • Osa suuremast automaatikaprojektist, nagu ilmaseire süsteem või nutikas termostaat

4.2. Katse Servo kasutamine

Tinkercad

Kood

#include <Servo.h>
  
Servo servol;  // Создаем объект сервопривода
  
void setup() {
  servol.attach(9);  // Подключаем сервопривод к пину 5
}
  
void loop() {
  // Поворот на 30 градусов (среднее положение)
  servol.write(30);
  delay(1000);
    
  // Поворот на 180 градусов (крайнее правое положение)
  servol.write(180);
  delay(1000);
    
  // Поворот на 0 градусов (крайнее левое положение)
  servol.write(0);
  delay(1000);
    
  // Плавное движение от 0 до 180 градусов с шагом 3 градуса
  for(int position = 0; position < 180; position += 3) {
    servol.write(position);
    delay(80);
  }
    
  // Плавное движение от 180 до 0 градусов с шагом 1 градус
  for(int position = 180; position >= 0; position -= 1) {
    servol.write(position);
    delay(80);
  }
}

Kuidas kood töötab

Kood juhib servomootorit, mis pöördub erinevatesse asenditesse: esmalt 30°, siis 180°, seejärel 0°. Pärast seda liigub servo sujuvalt 0° kuni 180° (3° sammuga) ja lõpuks tagasi 180° kuni 0° (1° sammuga), viivitusega iga sammu vahel.

Funktsioonid

  • #include <Servo.h> – lisab Servo teegi, mis võimaldab servomootorit juhtida
    Servo – loob servomootori objekti
    attach(pin) – määrab, millise Arduino pordiga servo on ühendatud
    write(aste) – seab servo soovitud nurka (0–180 kraadi)
    delay(ms) – peatab programmi teatud ajaks millisekundites
    setup() – algfunktsioon, mida käivitatakse üks kord programmi alguses
    loop() – tsükkel, mis kordub pidevalt ja juhib servo liikumist

Kuidas elus kasutada

  • Seda programmi saab kasutada automaatikasüsteemides, kus on vaja pööravat mehhanismi, näiteks uste avamisel või roboti liigutamisel.
  • Sobib hästi õppematerjaliks, et mõista, kuidas juhtida liikuvaid osi Arduino abil.
  • Saab rakendada projektides, kus on vaja täpseid või sujuvaid pööramisi, nagu kaamerahoidikute või sensorite pööramine.

Temperatuuritundlik servolülitus

KATSE 4

Komponendid:

  1. Temperatuuriandur (nt TMP36 või LM35)
  2. Fototakisti (LDR)
  3. Servo mootor (nt SG90)
  4. LED
  5. Arduino Uno
  6. Takistid
  7. Juhtmed ja breadboard

Kood selgitus:

  1. Temperatuuri lugemine ja servo juhtimine:
    • Temperatuuri anduri väärtus loetakse ja konverteeritakse temperatuuriks (Celsius).
    • Temperatuuri põhjal kaardistatakse servo nurk vahemikku 0–180°, kus:
      • Kui temperatuur on madalam kui 20°C, liigub servo asendisse 0° (nt aken suletakse).
      • Kui temperatuur tõuseb üle 25°C, liigub servo asendisse 180° (nt aken avaneb, et jahutada).
      • Väikeste sammudega liikumise tagamiseks, liigutatakse servot iga kord ühe nurga võrra (vältides järske liikumisi).
  2. LDR-i lugemine ja LED juhtimine:
    • Kui valgus on väike (pime), siis LED süttib.
    • Kui valgus on piisav (päevavalgus), siis LED lülitub välja.
  3. Seriaalväljundi jälgimine:
    • Andmed temperatuurist, valguse tasemest ja servo nurgast kuvatakse seriaalmonitoril.
#include <Servo.h>
 
// PIN määrangud
const int tempPin = A1;      // Temperatuuri andur (TMP36)
const int ldrPin = A0;       // LDR andur
const int ledPin = 9;        // LED
const int servoPin = 10;      // Servo
 
Servo myServo;
 
void setup() {
  Serial.begin(9600);
  myServo.attach(servoPin);
  pinMode(ledPin, OUTPUT);
}
 
void loop() {
  // --- Loeme temperatuuri andurit ---
  int tempValue = analogRead(tempPin);
  float voltage = tempValue * (5.0 / 1023.0);
  float temperatureC = (voltage - 0.5) * 100;  // TMP36 valem
 
  // --- Servo juhtimine temperatuuri järgi ---
  // Näiteks: < 20C → sulgeb, > 25C → avab
  int servoAngle = 0;
  if (temperatureC < 20) {
    servoAngle = 0;    // aken suletud
  } else if (temperatureC > 25) {
    servoAngle = 180;  // aken avatud
  } else {
    // vahemik 20–25C → servo keskele
    servoAngle = map(temperatureC, 20, 25, 0, 180);
  }
  myServo.write(servoAngle);
 
  // --- Loeme LDR andurit ---
  int ldrValue = analogRead(ldrPin);
 
  // LED lülitamine (nt. kui liiga pime → LED süttib)
  if (ldrValue < 500) {  // Väärtust võid vajadusel katsetada
    digitalWrite(ledPin, HIGH);  // LED sisse
  } else {
    digitalWrite(ledPin, LOW);   // LED välja
  }
 
  // --- Seriaalkonsooli info ---
  Serial.print("Temp: ");
  Serial.print(temperatureC);
  Serial.print(" C | LDR: ");
  Serial.print(ldrValue);
  Serial.print(" | Servo: ");
  Serial.println(servoAngle);
 
  delay(500);
}

https://drive.google.com/file/d/10-0GWP7XbbVEeQlAyPg-kvTYoGXD_vDo/view?usp=sharing

tegisime romaga