Teema 4

4.1 Katse Temperatuuri andur

Töö kirjeldus:

Katse temperatuuri mõõtmiseks temperatuurianduri abil.

 Saadud tulemused kirjutame  iga sekundi tagant Serial Monitori.

Komponentid:

  1. andur TMP36
  2. juhe 5x

Skeem:

https://www.tinkercad.com/things/39fsu7mEIjv-funky-jaagub/editel?sharecode=_zqVSkpO0WH7RPnSOctLy3yxbuWaTeKkMFJZaZf5KbM

C++ kood:

const int temperaturePin = 0;

void setup()
{
Serial.begin(9600);
}

void loop()
{

float voltage, degreesC, degreesF;
// Сначала мы измерим напряжение на аналоговом входе. Обычно для этого мы
// использовали функцию analogRead(), которая возвращает число от 0 до 1023.
// Здесь же мы написали специальную функцию, о ней чуть дальше, под
// названием getVoltage(), которая возвращает напряжение (от 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);

// Вывод информации будет иметь вид подобно следующему:
// "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);
// Это уравнение преобразует значение напряжения от 0,0 до 5,0 В., полученное с помощью функции analogRead() с аналогового порта, в значения от 0 до 1023.
}

Kuidas see töötab: temperatuuriandur saab väärtuse ja edastab selle meie loodud muutujale. Esiteks mõõdame pinget analoogsisendis. Selleks me tavaliselt kasutas analoogRead() funktsiooni, mis tagastab arvu vahemikus 0 kuni 1023. Siin kirjutasime erifunktsiooni, selle kohta veidi edasi, alla nimega getVoltage(), mis tagastab pinge (vahemikus 0 kuni 5 volti), analoogsisendis. lisateavet kuvatakse terminalis

Kus seda saab rakendada? Konditsioneerides. Andur võtab vastu ja edastab ruumi temperatuuri ning kliimaseade ise, sõltuvalt sellest, jahutab või soojendab õhku

4.2. Katse Servo kasutamine

Töö kirjeldus:

Sisselülitamisel hakkab servomootor funktsioonis oleva servojuhtimisobjekti tõttu pöörlema

Komponentid:

  1. servo motoor
  2. juhe 8x

Skeem:

C++ kood(see kood kasutab täiendavat teeki):

#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(9); //ü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; 

// Для управления сервоприводом, вы указываете ему угол на который он должен переместиться. Сервоприводы не могут повернуться на 360
// градусов, но вы можете указать ему, чтобы он поворачивался в определенную позицию от 0 до 180 градусов.

servo1.write(90); //pööramise nurk =90 (Говорим серве повернуться на позицию 90 градусов, т.е устанавливаем в среднее положение)
delay(1000); 
servo1.write(180); //pööramise nurk =180 (180 градусов, т.е устанавливаем в крайнее правое положение.)
delay(1000);
servo1.write(0); //pööramise nurk =0 (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 ("Говорим" сервоприводу повернуться на позицию 0 градусов, с шагом в 1 градус):
for(position = 180; position >= 0; position -= 1)
{ 
servo1.write(position); // positsiooni muutmine (Переместиться на следующую позицию)
delay(20); 
}
}

https://www.tinkercad.com/things/aymIS76Dgnb-tremendous-crift-bombul/editel?sharecode=PPNiOWpTNDB8dbrwO01yk8O_axYxOjjZ-aJJDL3QMSI

Kus seda päriselus rakendada? Seda põhimõtet läheb vaja igas skeemis, kus mortor peaks pöörlema.

Temperatuuritundlik servolülitus

Komponentid:

  1. Termoandur ja/või fototakisti,  
  2. Servo mootor, 
  3. Elektrolüüt kondensaator
  4. Led
  5. Juhe 14x

Skeem:

C++ kood:

#include <Servo.h>
Servo servoMotor;

const int ledPin = 10;//переменная выхода диода
 
const int temperaturePin = A0;//выхода датчика температуры 
const int lightRezPin = A1;//фоторезистор
 
 
const int plankDarkness = 500;  //максимально допустимое значение темноты
 
void setup()
{

  servoMotor.attach(13);
   
  pinMode(ledPin, OUTPUT);
  
  pinMode(lightRezPin, INPUT);
  pinMode(temperaturePin, INPUT);
   
  Serial.begin(9600);
}
 
void loop()
{
 
float temperature = readTemperature();//считваем температуру
int lightValue = analogRead(lightRezPin);//считываем  значение света
 
  if (temperature <= 73.0)//если температура меньше 22 градусов
  {
    servoMotor.write(0);//сервомотор в положение 0
  }
  else if (temperature >= 78.0)//если больше 35 то в положение 180
  {
    servoMotor.write(180);
  }
  else
  {
    int servoPosition = map(temperature, 0, 1023, -40, 180);
    servoMotor.write(servoPosition);
  }
 
   
  if (lightValue <= plankDarkness)//если света достаточно 
  {
    digitalWrite(ledPin, LOW);//не горит
  }
  else//если не достаточно
  {
    digitalWrite(ledPin, HIGH);//горит
  }
 
}
 
float readTemperature()//функция считывания температуры
{
  int sensorValue = analogRead(temperaturePin);
  float voltage = sensorValue * (5 / 1023.0);
  float temperature = voltage * 100.0;
 
  return temperature;//возврощяем температуру
}

Selgitage tööpõhimõtet:

Kui temperatuur on alla 22 kraadi, pöörleb servomootor ühes suunas, kui see on üle 35, siis teises suunas. Isegi kui läheb pimedaks, süttib lamp. kogu see skeem imiteerib kasvuhoonet

https://www.tinkercad.com/things/7wmSrBCB5Pu-sizzling-jofo-snaget/editel?sharecode=FLQM88F4gZJAFxVykjgGr82kHiNM17mHduTBhifSerI

Projekti rekonstrueerimine:

Mis ma õpisin:

Projekti edenedes õppisin servomootoriga töötama, sain sõrme elektrilöögi ja õppisin uusi funktsioone, nagu servomotor.write

Kasutanud funktsioonid:

  1. setup(): mikrokontrolleri algseadete lähtestamine.
  2. 2. loop(): peamine programmitsükkel, mis töötab pidevalt.
  3. servoMotor.attach(13): kinnitage servomootor tihvti 13 külge.
  4. servoMotor.write(0) / servoMotor.write(180): liigutage servo määratud asendisse (0 kraadi või 180 kraadi).
  5. pinMode(ledPin, OUTPUT): seadke LED-i viik väljundrežiimi.
  6. pinMode(lightRezPin, INPUT): seab fototaksise viigu sisendrežiimi.
  7. pinMode(temperatuurPin, INPUT): määrake temperatuurianduri viik sisendrežiimi.
    analoogRead(lightRezPin): valguse väärtuse lugemine fototaksistilt.
  8. analoogRead(temperaturePin): lugege temperatuuriandurilt temperatuuri väärtust.
  9. digitalWrite(ledPin, LOW) / digitalWrite(ledPin, HIGH): LED-oleku juhtimine (väljas/sees).
  10. Serial.begin(9600): jadaühenduse käivitamine etteantud kiirusega.
  11. float readTemperature(): lugeb temperatuuriandurilt temperatuuri väärtust (tagastab ujuki väärtuse).

Tänan tähelepanu eest!

Добавить комментарий