4.1 Katse Temperatuuri andur

const int temperaturePin = 0; // Аналоговый пин A0, к которому подключён датчик температуры
void setup()
{
Serial.begin(9600); // Запускаем последовательную передачу данных на скорости 9600 бод
}
void loop()
{
float voltage, degreesC, degreesF; // Переменные для хранения напряжения и температуры
// Считываем напряжение с пина, используя вспомогательную функцию
voltage = getVoltage(temperaturePin);
// Преобразуем напряжение в температуру по Цельсию:
// Для датчика TMP36: 0.5 В соответствует 0°C, далее 10 мВ на 1°C
degreesC = (voltage - 0.5) * 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);
delay(1000); // Задержка 1 секунда перед следующим измерением
}
// Функция для перевода значения с аналогового входа в напряжение (0.0 – 5.0 В)
float getVoltage(int pin)
{
return (analogRead(pin) * 0.004882814); // 5.0 / 1023 ≈ 0.00488
}
Принцип работы программы:
- К аналоговому пину A0 подключён температурный датчик (например, TMP36).
- Функция
analogRead()считывает значение от 0 до 1023, соответствующее напряжению от 0 до 5 В. getVoltage()преобразует это значение в напряжение в вольтах.- Затем программа пересчитывает напряжение в температуру в градусах Цельсия и Фаренгейта.
- Результаты выводятся в монитор последовательного порта каждую секунду.
Такой код подходит для визуального отслеживания температуры в реальном времени через компьютер.
4.2. Katse Servo kasutamine

// Paljud saadaolevad teegid (library’d) on leitavad aadressilt http://arduino.cc/en/Reference/Libraries
#include <Servo.h> // Подключаем библиотеку Servo для управления сервоприводами
// После подключения библиотеки мы можем использовать все её функции.
// Список команд библиотеки Servo: http://arduino.cc/en/Reference/Servo
// Большинство библиотек можно найти в меню "File / Examples".
Servo mootor; // Создаём объект "mootor", представляющий один сервопривод
void setup()
{
// Привязываем объект "mootor" к цифровому пину 9.
// Если нужно подключить больше сервоприводов, каждый подключается к своему цифровому выходу.
mootor.attach(9); // Пин 9 должен поддерживать ШИМ (PWM)
}
void loop()
{
int asend; // Переменная для хранения текущего положения мотора
// Двигаем мотор в конкретные позиции с задержками:
mootor.write(90); // Повернуть на 90°
delay(1000); // Ждём 1 секунду
mootor.write(180); // Повернуть на 180°
delay(1000);
mootor.write(0); // Вернуться к 0°
delay(1000);
// Плавный поворот мотора по часовой стрелке: от 0° до 180° с шагом 2°
for(asend = 0; asend < 180; asend += 2)
{
mootor.write(asend); // Устанавливаем угол
delay(20); // Короткая задержка для плавности
}
// Плавный поворот мотора против часовой стрелки: от 180° до 0° с шагом 1°
for(asend = 180; asend >= 0; asend -= 1)
{
mootor.write(asend); // Устанавливаем угол
delay(20); // Короткая задержка для плавности
}
}
Принцип работы программы:
- Инициализация: Сначала подключаем библиотеку
Servo.hи создаём объектmootor, управляющий сервоприводом. - Настройка: В
setup()привязываем сервопривод к цифровому пину 9. - Основной цикл (
loop):- Перемещаем сервопривод сразу в три фиксированные позиции: 90°, 180°, 0° — с паузой в 1 секунду между каждой.
- Затем выполняется плавное движение:
- Сначала вперёд: от 0° до 180° с шагом 2° и паузой 20 мс.
- Потом назад: от 180° до 0° с шагом 1° и той же паузой.
- Программа зациклена, так что эти действия повторяются бесконечно.
Такой код полезен для демонстрации возможностей сервопривода, тестирования углов позиционирования и создания плавной анимации.
Ülesanne 4 Temperatuuritundlik servolülitus

Цель:
Создать автоматизированную миниатюрную систему теплицы, которая реагирует на температуру и освещённость окружающей среды.
Система должна управлять сервомотором в зависимости от изменения температуры и автоматически включать или выключать освещение в зависимости от уровня света, используя фоторезистор.
Этот проект позволяет связать реальные условия окружающей среды с электроникой и смоделировать автоматический уход за растениями в мини-теплице.
Необходимые компоненты:
- Температурный датчик (например, LM35, DHT11 или TMP36)
- Фоторезистор (LDR – Light Dependent Resistor)
- Сервомотор (небольшой, например SG90)
- Светодиод (LED) — для имитации или добавления освещения
- Arduino Uno
- Резисторы (для LDR и LED)
- Провода и breadboard
- Коробка или монтажная площадка для размещения датчиков и компонентов
- Источник питания (USB, батарейка или аккумулятор)
Описание работы и функциональность:
1. Управление сервомотором на основе температуры:
- Если температура ≤ 20°C, сервомотор переходит в положение 0° (например, закрывается окно теплицы).
- Если температура ≥ 30°C, сервомотор переходит в положение 180° (окно открывается для охлаждения).
- Движение сервомотора должно быть плавным, а не резким (движение происходит с небольшими шагами).
2. Автоматическое освещение с использованием фоторезистора:
- Если освещённость низкая (темно), светодиод включается автоматически.
- Если света достаточно, светодиод выключается.
Используемые функции и техники Arduino:
Преобразование температуры в угол сервомотора:
int servoAngle = map(temperature, 22, 35, 0, 180);
servoAngle = constrain(servoAngle, 0, 180); // ограничение угла в пределах 0–180°
Плавное движение сервомотора:
if (currentAngle < targetAngle) {
currentAngle++;
} else if (currentAngle > targetAngle) {
currentAngle--;
}
servo.write(currentAngle);
delay(15); // плавное движение
Считывание уровня света с LDR и управление светодиодом:
int lightLevel = analogRead(LDRPin);
if (lightLevel < 500) { // если темно
digitalWrite(ledPin, HIGH); // включить свет
} else {
digitalWrite(ledPin, LOW); // выключить свет
}
Полный код
#include <Servo.h>
const int led = 12;
const int sensorPin = A1;
int lightLevel, high = 0, low = 1023;
const int temperaturePin = A0;
Servo servo1;
int currentAngle = 0; // текущий угол сервопривода
void setup() {
pinMode(led, OUTPUT);
servo1.attach(13); // подключаем сервомотор к пину 13
Serial.begin(9600);
}
void loop() {
// === Яркость LED по уровню освещенности ===
lightLevel = analogRead(sensorPin);
analogWrite(led, lightLevel);
// обновление максимального значения (по желанию)
if (lightLevel > high) {
high = lightLevel;
}
// === Считываем температуру ===
float voltage = getVoltage(temperaturePin);
float degreesC = (voltage - 0.5) * 100.0;
float 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);
// === Определяем целевой угол по температуре ===
int targetAngle;
if (degreesC <= 25) {
targetAngle = 0; // Закрыто
} else if (degreesC >= 35) {
targetAngle = 180; // Полностью открыто
} else {
targetAngle = map(degreesC, 26, 34, 0, 180); // Промежуточные значения
}
// === Плавное движение к целевому углу ===
if (currentAngle < targetAngle) {
currentAngle++;
} else if (currentAngle > targetAngle) {
currentAngle--;
}
servo1.write(currentAngle);
delay(15); // плавность движения
}
// === Получение напряжения с аналогового входа ===
float getVoltage(int pin) {
return analogRead(pin) * 0.004882814;
}
Video: https://youtube.com/shorts/3stRm1hFpsE?si=gTfYzQBZxYio7JCV
