Praktika 4: Temperatuuri andur, Servo mootor

Sisukord:

  1. Katse 4.1
  2. Katse 4.2
  3. Katse 4.3 (Ülesanne 4 Temperatuuritundlik servolülitus)

Katse 4.1

Kirjeldus:

Projekt, kus pinget ja temperatuuri loetakse temperatuurianduri abil ning väljundiks on Serial monitor.

Programm:

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 programm töötab:

See kood loeb temperatuuriandurilt andmeid, arvutab mõõdetud pinge ja temperatuuri kraadides C ja F ja väljundiks on Serial monitor. Pinge arvutamiseks kasutatakse funktsiooni getVoltage(), mis konverteerib analoogsignaali väärtuse vastavaks pingeks vahemikus 0–5 V.

Katse 4.2

Kirjeldus:

Projekt, kus servomootor on ühendatud plaadiga ja pöörleb sujuvalt vastassuundades.

Programm:

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

Kuidas programm töötab:

See programm juhib servomootorit, kasutades Servo.h teeki. setup() funktsioonis ühendatakse mootor digitaalsele pinile 9. Põhistsenaariumis (loop()) teeb mootor esmalt kiireid pöördeid 90, 180 ja 0 kraadi, millele järgneb sujuv liikumine 0-st 180 kraadini ja tagasi, kasutades väikseid samme ja pausi, et liikumine oleks sujuv.

Katse 4.3 (Ülesanne 4 Temperatuuritundlik servolülitus)

Töö kirjeldus:

Automatiseeritud kasvuhoone, mille uksed avanevad ja sulguvad teatud temperatuuril ning mille LED lülitub sisse ja välja sõltuvalt valguse heledusest.

Töö protsess:

Programm mõõdab temperatuuri ja valgust ning reguleerib nende põhjal servomootori asendit ja LED-e. Kui temperatuur ületab 29°C, liigub servomootor 180 kraadi, kui see on madalam, siis 0 kraadi. Kui fotoristor tuvastab piisavalt valgust (üle 200), lülituvad kõik kolm LED-i sisse. Kui valgust on vähe, siis LED-id kustuvad.

Kasutatud komponenid:

Arduino UNO plaat (1tk)
Arendusplaat (1tk)
Juhtmed (14tk)
Takisti (1tk, 10 kΩ, 3tk 220Ω)
LED (3tk valge)
Servo mootor (SG90)
Fotoristor (1tk)
Temperatuuriandur (1tk)

Temperatuuriandur ja servolülitus rakendamine:

Temperatuuriandur mõõdab temperatuuri ja saadab info süsteemile, näiteks küttesüsteemides või 3D-printerites.

Servolülitus reguleerib süsteemi vastavalt anduri andmetele, nagu radiaatori ventiili avamine või konditsioneeri töö režiimi muutmine.

Skeem:

Programm:

#include <Servo.h>

const int TEMP_PIN = A0;
const int PHOTORESISTOR_PIN = A1;
const int LED_PIN = 7;
const int LED_PIN2 = 6;
const int LED_PIN3 = 5;
const int SERVO_PIN = 12;

Servo servo;
int currentAngle = 0;
int targetAngle = 0;
float temperature = 0.0;

void setup() 
{
	Serial.begin(9600);
	servo.attach(SERVO_PIN);
	pinMode(LED_PIN, OUTPUT);
	pinMode(LED_PIN2, OUTPUT);
	pinMode(LED_PIN3, OUTPUT);
	pinMode(TEMP_PIN, INPUT);
	pinMode(PHOTORESISTOR_PIN, INPUT);
}

void loop() 
{
	float voltage = getVoltage(TEMP_PIN);
	float temperature = (voltage - 0.5) * 100.0;
	float degreesF = temperature * (9.0/5.0) + 32.0;
	Serial.print(" voltage: ");
	Serial.print(voltage);
	Serial.print(" temp C: ");
	Serial.print(temperature);
	Serial.print(" temp F: ");
	Serial.println(degreesF);

    int targetAngle;
    if (temperature <= 29) 
      	targetAngle = 0;
  	else 
    	targetAngle = 180;

	if (currentAngle < targetAngle) 
		currentAngle += 4; 
	else if (currentAngle > targetAngle) 
		currentAngle -= 4;
	
	currentAngle = constrain(currentAngle, 0, 180);

    Serial.print("Target angle: ");
  	Serial.print(targetAngle);    
	Serial.print(" Current angle: ");
  	Serial.print(currentAngle);
	servo.write(currentAngle);
	delay(15);

	int lightLevel = analogRead(PHOTORESISTOR_PIN);
	Serial.print(" Light Level: ");
	Serial.print(lightLevel);

	if (lightLevel > 200) 
	{
		digitalWrite(LED_PIN, HIGH);
		digitalWrite(LED_PIN2, HIGH);
		digitalWrite(LED_PIN3, HIGH);
	} 
	else 
	{
		digitalWrite(LED_PIN, LOW);
		digitalWrite(LED_PIN2, LOW);
		digitalWrite(LED_PIN3, LOW);
	}

	delay(100);
}

float getVoltage(int pin)
{
	return (analogRead(pin) * 0.004882814);
}

Video:

–> LINK <–

Uued funktsioonid:

“#include <Servo.h>” – lisab Servo raamatukogu, et juhtida servomootoreid.

Servo servo – loo servomootori objekt nimega servo.

servo.attach(pin) – ühendab servomootori määratud pin’ile.

servo.write(angle) – liigutab servomootori määratud nurka.

getVoltage(pin) – loeb analoogpin’ilt väärtuse ja teisendab selle pingeks.

Praktika 5: LCD ekraan