4.1 Katse Temperatuuri andur
Töö kirjeldus:
Katse temperatuuri mõõtmiseks temperatuurianduri abil.
Saadud tulemused kirjutame iga sekundi tagant Serial Monitori.
Komponentid:
- andur TMP36
- 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:
- servo motoor
- 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:
- Termoandur ja/või fototakisti,
- Servo mootor,
- Elektrolüüt kondensaator
- Led
- 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
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:
- setup(): mikrokontrolleri algseadete lähtestamine.
- 2. loop(): peamine programmitsükkel, mis töötab pidevalt.
- servoMotor.attach(13): kinnitage servomootor tihvti 13 külge.
- servoMotor.write(0) / servoMotor.write(180): liigutage servo määratud asendisse (0 kraadi või 180 kraadi).
- pinMode(ledPin, OUTPUT): seadke LED-i viik väljundrežiimi.
- pinMode(lightRezPin, INPUT): seab fototaksise viigu sisendrežiimi.
- pinMode(temperatuurPin, INPUT): määrake temperatuurianduri viik sisendrežiimi.
analoogRead(lightRezPin): valguse väärtuse lugemine fototaksistilt. - analoogRead(temperaturePin): lugege temperatuuriandurilt temperatuuri väärtust.
- digitalWrite(ledPin, LOW) / digitalWrite(ledPin, HIGH): LED-oleku juhtimine (väljas/sees).
- Serial.begin(9600): jadaühenduse käivitamine etteantud kiirusega.
- float readTemperature(): lugeb temperatuuriandurilt temperatuuri väärtust (tagastab ujuki väärtuse).
Tänan tähelepanu eest!