Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otchyot_Chulkov.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
908 Кб
Скачать
☆

1.3 Плата Arduino uno

Arduino Uno (рисунок 1) контроллер построен на ATmega328. Платформа имеет 14 цифровых вход/выходов (6 из которых могут использоваться как выходы Широтно-импульсной модуляции), 6 аналоговых входов, кварцевый генератор 16 МГц, разъем USB, силовой разъем, разъем ICSP и кнопку перезагрузки. Для работы необходимо подключить платформу к компьютеру посредством кабеля USB, либо подать питание при помощи адаптера AC/DC или батареи.

Основные технические характеристики:

  • Микроконтроллер: ATmega 328;

  • Рабочее напряжение: 5 В;

  • Входное напряжение (рекомендуемое): 7-12 В;

  • Входное напряжение (предельное): 6-20 В;

  • Цифровые Входы/Выходы: 14 шт;

  • Аналоговые входы: 6 шт;

  • Постоянный ток через вход/выход: 40 мА;

  • Постоянный ток для вывода 3.3 В: 50 мА;

  • Флеш-память: 32 кБ из которых 0.5 кБ используются для загрузчика;

  • ОЗУ: 2 кБ;

  • Тактовая частота: 16 МГц.

Arduino Uno может получать питание через подключение USB или от внешнего источника питания. Источник питания выбирается автоматически. Внешнее питание (не USB) может подаваться через преобразователь напряжения AC/DC (блок питания) или аккумуляторной батареей. Преобразователь напряжения подключается посредством разъема 2.1 мм с центральным положительным полюсом. Провода от батареи подключаются к выводам Gnd и Vin разъема питания. Платформа может работать при внешнем питании от 6 В до 20 В. При напряжении питания ниже 7 В, вывод 5V может выдавать менее 5 В, при этом платформа может работать нестабильно. При использовании напряжения выше 12 В регулятор напряжения может перегреться и повредить плату. Рекомендуемый диапазон от 7 В до 12 В.

1.4 Серводвигатель sg90

На рисунке 3 представлен внешний вид серводвигателя SG90.

Рисунок 3 – Серводвигатель SG90

Сервопривод — это мотор, положением вала которого мы можем управлять. От обычного мотора он отличается тем, что ему можно точно в градусах задать положение, в которое встанет вал.

Технические характеристики сервопривода SG90 ( Micro Servo 9g ):

  • Рабочее напряжение: от 3V до 7.2V (Вольт);

  • Температура использования: от -30 до +60 ° C;

  • Материал редуктора: нейлон;

  • Усилие на валу: 1.2кг/см (4.8В); 1.6кг/см (6.0В);

  • Мертвая ширина импульса: 2мс;

  • Размер: 22мм х 11.5мм х 27мм;

  • Масса: 9г;

  • Скорость вращения: (4.8В без нагрузки): 0.14 сек/60 °;

  • Угол поворота: 160°.

Схема подключения сервопривода:

  • Коричневый провод – Земля (Ground, подключается к пину GND на плате Arduino);

  • Красный провод – Питание +5 V (подключается к пину 5V на плате Arduino);

  • Желтый провод – Сигнал управления (подключается к цифровому пину Arduino).

2 Подключение модулей к Arduino

2.1 Подключение датчика температуры ky-013 и серводвигателя sg90

На рисунке 4 продемонстрирован пример подключения датчика температуры KY-013 и серводвигателя SG90 к Arduino.

Рисунок 4 – Пример подключения датчика температуры KY-013 и серводвигателя SG90 к Arduino

2.2 Код программы

#include <math.h>

#include <Servo.h> // библиотека для работы с серводвигателями

#define coef 1.5 //коэффициент поворота серводвигателя

#define dead_zone 5 //добавление мертвой зоны, чтобы не повредить серводвигатель

#define max_value 50 // предполагаемое максимальное значение

#define servoPin 10 // обозначили пин управления

Servo myservo; // обозначили серводвигатель

int sensorPin = A5; // пин для датчика температуры

double Thermistor(int RawADC) {

double Temp;

Temp = log(10000.0*((1024.0/RawADC-1)));

Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp ))* Temp );

Temp = (Temp - 273.15)* 1.5; // Конвертирование в градусы цельсия

return Temp;

}

void setup() {

myservo.attach(servoPin);

myservo.write(0);

Serial.begin(9600);

}

void loop() {

int readVal=analogRead(sensorPin);

double temp = Thermistor(readVal);

Serial.println(temp); // display tempature

if (temp >= dead_zone && temp <= max_value)

{

myservo.write(coef * (temp - dead_zone)* (temp - dead_zone));

}

else if (temp < dead_zone)// меньше порога, серводвигатель в нуле

{

myservo.write(0);

}

else

{

myservo.write(180);

}

delay(100);

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]