Katse 4. Temperatuuri andur, Servo mootor

Katse temperatuur

Töö protsess:

Pärast koodi käivitamist hakkab temperatuuriandur temperatuuri mõõtma ja väljastab selle temperatuuri konsooli.

Kasutatud:
1x Arduino uno
1x Temperatuuri andur
4x Juhtmed

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

Foto:

Katse servo

Töö protses:

Pärast koodi käivitamist alustab servo pöörlemist 90 kraadi juures pärast sekundit 180 kraadi juures ja teise sekundi pärast 0 kraadi juures ja nii edasi loop’is.

Kasutatud:

1x Arduino uno
1x Servo
8x Juhtmed

Kood:

#include <Servo.h>
// nii teavitame Arduino IDE-t vajadusest kasutada Servo.h teeki (подключаем дополнительную библиотеку)
// Как только вы "подключаете" библиотеку, так сразу получаете доступ к этим функциям. Вы можете найти список функций в библиотеке
// сервопривода в: http://arduino.cc/en/Reference/Servo. Большинство библиотек доступно из меню "Файл / примеры".

Servo servo1; // Peame looma servo objekti nimega servo1 (объект управления сервоприводом)

void setup()
{
  // Сейчас мы прикрепим (attach) объект servo1 к цифровому пину 9. Если вы собираетесь управлять более чем одним
  // сервоприводом, Вы должны прикрепить каждый новый объект серво к своему, отдельному порту, причем это порт должен быть цифровым.
  servo1.attach(13); //ütleme Arduinole, et infosuhtlus servo-objektiga servo käib läbi klemmi number 9. Tegu on digitaal-klemmiga--PWM digitaalne osa! Kontrollime, kas skeemil kasutame sama klemmi.
}
void loop() {
  int position;

  servo1.write(90); //pööramise nurk =90
  delay(1000); 
  servo1.write(180); //pööramise nurk =180
  delay(1000);
  servo1.write(0); //pööramise nurk =0
  delay(1000);

  // servo positsiooni muutmine väike kiirusega pärisuunas:
  for(position = 0; position < 180; position += 2){
    servo1.write(position); // positsiooni muutmine
    delay(20);
  }

// servo positsiooni muutmine väike kiirusega vastupäeva:
  for(position = 180; position >= 0; position -= 1) { 
    servo1.write(position); // positsiooni muutmine
    delay(20); 
  }
}

Foto:

Temperatuuritundlik servolülitus

Töö protses:

See kood juhib servomootorit ja kahte LED-tuld vastavalt temperatuuri ja valguse tasemele. Kui temperatuur on alla 25 °C, pöördub servomootor 0 kraadi peale, vastasel juhul 180 kraadi peale. Kui ruumis on pime, süttib sinine LED, kui on valge — roheline LED.

Kasutatud:

1x Arduino uno
1x Servo
1x Temperatuuri andur
2x LED lamp
2x 330 oomi takisti
1x 10000 oomi takisti
16x Juhtmed

Kood:

#include <Servo.h>

const int greenled = 13;
const int blueled = 12;
const int ldr = A0;
const int temp = A1;

Servo servoMotor;

int currentAngle = 90;

void setup() {
  Serial.begin(9600);
  pinMode(greenLedPin, OUTPUT);
  pinMode(blueLedPin, OUTPUT);
  servoMotor.attach(11);

  servoMotor.write(currentAngle);
  delay(1000);
}

void loop() {
  int tempReading = analogRead(tempPin);
  float voltage = tempReading * (5.0 / 1023.0);
  float temperature = (voltage - 0.5) * 100.0;
  
  int targetAngle;
  if (temperature < 25) {
    targetAngle = 0;
  } else {
    targetAngle = 180;
  } 
  
  if (currentAngle < targetAngle) {
    currentAngle = min(targetAngle, currentAngle++);
  } else if (currentAngle > targetAngle) {
    currentAngle = max(targetAngle, currentAngle--);
  }
  
  servoMotor.write(currentAngle);
  
  int lightLevel = analogRead(ldrPin);
  if (lightLevel < 500) {
    digitalWrite(greenLedPin, HIGH);
    digitalWrite(blueLedPin, LOW);
  } else {
    digitalWrite(greenLedPin, LOW);
    digitalWrite(blueLedPin, HIGH);
  }
  
  Serial.print("Temperatuur: ");
  Serial.print(temperature);
  Serial.print(" °C, Valgustugevus: ");
  Serial.println(lightLevel);
  
  delay(10);
}

Foto:

Video: