- •Введение
- •1 Комплектация системы
- •1.1 Основные компоненты
- •1.2 Датчика температуры ky-013
- •1.3 Плата Arduino uno
- •1.4 Серводвигатель sg90
- •2 Подключение модулей к Arduino
- •2.1 Подключение датчика температуры ky-013 и серводвигателя sg90
- •2.2 Код программы
- •3 Принцип работы системы
- •Заключение
- •Список использованных источников
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);
}
