1️⃣Эксперимент — Считывание температуры с аналогового датчика
Цель:
Научиться считывать данные с аналогового температурного датчика (например, LM35) и преобразовывать их в значения температуры по Цельсию и Фаренгейту.
Компоненты:
- Плата Arduino Uno
- Аналоговый температурный датчик (например, LM35)
- Соединительные провода
Схема подключения:
- Выходной пин датчика подключается к аналоговому входу A0 на Arduino.
- Питание (VCC) датчика подключается к 5V на Arduino.
- GND датчика подключается к GND на Arduino.


Код программы:
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.
}
Принцип работы:
- Функция getVoltage() преобразует аналоговое значение (0–1023) в напряжение (0–5 В).
- Температура в градусах Цельсия рассчитывается по формуле: (напряжение — 0.5) * 100.
- Температура в градусах Фаренгейта рассчитывается по формуле: Цельсий * 9/5 + 32.
2️⃣Эксперимент — Управление сервоприводом
Цель:
Научиться управлять сервоприводом с помощью Arduino, изменяя его положение.
Компоненты:
- Плата Arduino Uno
- Сервопривод (например, SG90)
- Соединительные провода
Схема подключения:
- Сигнальный пин сервопривода подключается к цифровому пину 9 на Arduino.
- Питание (VCC) сервопривода подключается к 5V на Arduino.
- GND сервопривода подключается к GND на Arduino.
Код программы:
// 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
}
}
Принцип работы:
- Сервопривод последовательно перемещается в положения 90°, 180°, 0°.
- Затем он плавно вращается от 0° до 180° и обратно, создавая эффект медленного открытия и закрытия.
🩵Automatiseeritud Kasvuhoone
Цель:
Создать систему, которая автоматически регулирует температуру в теплице, открывая или закрывая вентиляционное окно с помощью сервопривода в зависимости от показаний температурного датчика.
Компоненты:
- Плата Arduino Uno
- Аналоговый температурный датчик (например, LM35)
- Сервопривод (например, SG90)
- Светодиод (опционально, для индикации)
- Резистор (220 Ом для светодиода)
- Соединительные провода
Схема подключения:
- Температурный датчик подключается к аналоговому входу A0.
- Сервопривод подключается к цифровому пину 6.
- Светодиод подключается к цифровому пину 10 через резистор.
- Все компоненты заземлены (GND).

Код программы:
#include <Servo.h> // Подключаем библиотеку для управления сервоприводом
const int led = 10; // Пин, к которому подключён светодиод
const int sensorPin = A1; // Пин, на который подключён фоторезистор (датчик света)
int lightLevel, high = 0, low = 1023; // Переменные для уровня освещённости и отслеживания макс/мин
const int temperaturePin = A0; // Пин, на который подключён TMP36 (датчик температуры)
Servo servo1; // Создаём объект серводвигателя
int currentAngle = 0; // Текущий угол поворота сервопривода
void setup() {
pinMode(led, OUTPUT); // Устанавливаем пин светодиода как выход
servo1.attach(13); // Подключаем серводвигатель к пину 13 (можно заменить на любой PWM-пин)
Serial.begin(9600); // Запускаем сериал-монитор для отладки
}
void loop() {
// === 1. Управление яркостью светодиода в зависимости от уровня освещённости ===
lightLevel = analogRead(sensorPin); // Считываем значение с фоторезистора (0–1023)
analogWrite(led, lightLevel); // Устанавливаем яркость светодиода через ШИМ (PWM)
// === 2. Обновляем макс. уровень света (необязательно, используется для анализа) ===
if (lightLevel > high) {
high = lightLevel;
}
// === 3. Считывание температуры с TMP36 ===
float voltage = getVoltage(temperaturePin); // Преобразуем аналоговый сигнал в напряжение
float degreesC = (voltage - 0.5) * 100.0; // Переводим напряжение в температуру по Цельсию
float degreesF = degreesC * (9.0 / 5.0) + 32.0; // Переводим температуру в Фаренгейты (необязательно)
// === 4. Вывод значений температуры в Serial Monitor ===
Serial.print("Voltage: ");
Serial.print(voltage);
Serial.print(" deg C: ");
Serial.print(degreesC);
Serial.print(" deg F: ");
Serial.println(degreesF);
// === 5. Расчёт целевого угла для сервопривода в зависимости от температуры ===
int targetAngle;
if (degreesC <= 25) {
targetAngle = 0; // Закрываем окно (низкая температура)
} else if (degreesC >= 35) {
targetAngle = 180; // Открываем полностью (жарко)
} else {
targetAngle = map(degreesC, 26, 34, 0, 180); // Промежуточные положения (линейное отображение)
}
// === 6. Плавное движение сервопривода к целевому углу ===
if (currentAngle < targetAngle) {
currentAngle++; // Поворачиваем по 1° в сторону увеличения
} else if (currentAngle > targetAngle) {
currentAngle--; // Поворачиваем по 1° в сторону уменьшения
}
servo1.write(currentAngle); // Задаём угол серводвигателю
delay(15); // Пауза для плавного движения
}
// === 7. Функция получения напряжения с аналогового входа ===
float getVoltage(int pin) {
return analogRead(pin) * 0.004882814; // 5V / 1024 (шаг АЦП)
}
Принцип работы:
- Система считывает температуру каждую секунду.
- Если температура превышает 25°C, сервопривод открывает вентиляционное окно, и загорается светодиод.
- Если температура ниже или равна 25°C, окно закрывается, и светодиод гаснет.
✅ Вывод
В ходе выполнения задания были освоены следующие навыки:
- Считывание данных с аналогового температурного датчика и преобразование их в значения температуры.
- Управление сервоприводом с помощью Arduino, включая плавное изменение его положения.
- Создание автоматизированной системы регулирования температуры в теплице на основе показаний датчика.
Эти навыки являются основой для разработки более сложных систем автоматизации в сельском хозяйстве и других областях.