Temp / Ser

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
}

πŸ” ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

  1. К Π°Π½Π°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌΡƒ ΠΏΠΈΠ½Ρƒ A0 ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Ρ‘Π½ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π½Ρ‹ΠΉ Π΄Π°Ρ‚Ρ‡ΠΈΠΊ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, TMP36).
  2. Ѐункция analogRead() считываСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ 0 Π΄ΠΎ 1023, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π½Π°ΠΏΡ€ΡΠΆΠ΅Π½ΠΈΡŽ ΠΎΡ‚ 0 Π΄ΠΎ 5 Π’.
  3. getVoltage() ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² напряТСниС Π² Π²ΠΎΠ»ΡŒΡ‚Π°Ρ….
  4. Π—Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° пСрСсчитываСт напряТСниС Π² Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρƒ Π² градусах ЦСльсия ΠΈ Π€Π°Ρ€Π΅Π½Π³Π΅ΠΉΡ‚Π°.
  5. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ выводятся Π² ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ€Ρ‚Π° ΠΊΠ°ΠΆΠ΄ΡƒΡŽ сСкунду.

πŸ’‘ Π’Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ отслСТивания Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€.

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);           // ΠšΠΎΡ€ΠΎΡ‚ΠΊΠ°Ρ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° для плавности
  }
}

πŸ” ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

  1. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ: Π‘Π½Π°Ρ‡Π°Π»Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Servo.h ΠΈ создаём ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ mootor, ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ сСрвоприводом.
  2. Настройка: Π’ setup() привязываСм сСрвопривод ΠΊ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΌΡƒ ΠΏΠΈΠ½Ρƒ 9.
  3. Основной Ρ†ΠΈΠΊΠ» (loop):
    • ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌ сСрвопривод сразу Π² Ρ‚Ρ€ΠΈ фиксированныС ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ: 90Β°, 180Β°, 0Β° β€” с ΠΏΠ°ΡƒΠ·ΠΎΠΉ Π² 1 сСкунду ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ.
    • Π—Π°Ρ‚Π΅ΠΌ выполняСтся ΠΏΠ»Π°Π²Π½ΠΎΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅:
      • Π‘Π½Π°Ρ‡Π°Π»Π° Π²ΠΏΠ΅Ρ€Ρ‘Π΄: ΠΎΡ‚ 0Β° Π΄ΠΎ 180Β° с шагом 2Β° ΠΈ ΠΏΠ°ΡƒΠ·ΠΎΠΉ 20 мс.
      • ΠŸΠΎΡ‚ΠΎΠΌ Π½Π°Π·Π°Π΄: ΠΎΡ‚ 180Β° Π΄ΠΎ 0Β° с шагом 1Β° ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΠ°ΡƒΠ·ΠΎΠΉ.
  4. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Ρ†ΠΈΠΊΠ»Π΅Π½Π°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ эти дСйствия ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‚ΡΡ бСсконСчно.

πŸ”§ Π’Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ ΠΏΠΎΠ»Π΅Π·Π΅Π½ для дСмонстрации возмоТностСй сСрвопривода, тСстирования ΡƒΠ³Π»ΠΎΠ² позиционирования ΠΈ создания ΠΏΠ»Π°Π²Π½ΠΎΠΉ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ.

Ü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;
}