Введение
Целью курсовой работы является закрепление теоретических знаний и формированиепрактических навыков по разработке микроконтроллерной системы управления мехатронным устройством.
По варианту задания спроектировать микроконтроллерную систему управления. Приэтом можно использовать любые микроконтроллеры AVR, их отладочные платы, а также дополнительное оборудование (в соответствии с заданием).
1.
1. Исходное задание
Регулятор работы вентилятора
Устройство состоит из микроконтроллера, датчика температуры, датчика освещенности (фоторезистор), вентилятора на двигателе постоянного тока (микромоторчик) с необходимой электрической частью и батареи питания электродвигателя. Устройство должно определять температуру, и если температура выше заданной (указана внутри программы) более чем на 2 градуса, - подавать сигнал на управление вентилятором по П-закону управления. Кроме того, если появляется освещенность заданного уровня, независимо от температуры вентилятор должен включаться на постоянную работу с половинной мощностью и выключаться через 30с после наступления темноты. Текущее значение температуры передавать по линии связи на ПК и наблюдать на его мониторе.
Выбор микроконтроллера
В качестве отладочной платы выбираем ARDUINO с микроконтроллером ATmega-328P, которая содержит:
ОЗУ 2Кб,
EEPROM 1Кб
тактовую частоту 20МГц
рабочее напряжение 5в
входное напряжение (рекомендуемое) 7-12в
входное напряжение (предельное) 6-20в
цифровые Входы/Выходы 14 (6 из которых могут использоваться как выходы ШИМ)
Принципиальная электрическая схема
Рисунок 1 – Принципиальная схема
Блок-схема алгоритма работы
Рисунок 2 – блок- схема алгоритма главной программы
Рисунок 3 – блок- схема алгоритма управления красным сигналом
Рисунок 4 – блок- схема алгоритма управления желтым сигналом
Рисунок 5 – блок- схема алгоритма управления зеленым сигналом
Листинг программы
#include<DHT.h>//библеотека датчика температуры
DHTdht(4, DHT11);
uint8_tzadana_t=26; // заданая температура
uint16_tzadana_r=450; // заданая световая
uint8_ttime_zad=1; //время работы после темноты (задаётся в сикундах)
uint8_tPWM; // шим сигнал
uint32_ttiem; // заместоdelay
//uint8_t хранит в себе от 0 до 255
//uint16_t хранит в себе от 0 до 65535
uint8_tizmer; // измеряемая температура изменяюшаяся только при смени градуса
int16_ttem; // ответ п ригулятора
uint16_trezist; // фоторезистор
uint8_tkp=9; // кофицыент для п ригулятора
booloo; // значения для работы от датчика температуры
//int16_t хранит в себе от -32767 до 32767
//bool хранит 0 и 1
voidsetup() {
dht.begin(); //включения датчика
Serial.begin(9600); // работа с Serial на скорости 9600
}
voidloop() {
if (izmer!= dht.readTemperature()) {izmer = dht.readTemperature(); Serial.print("Temperature "); Serial.print (izmer); Serial.print(" C"); Serial.println (PWM); }// вывод данных только когда изменения даные датчика и вывод данных в Serial
tem=(izmer-zadana_t)*kp;// крутые расшеты п ригулятора(надо zadana_t-izmer, но для работы не с отрицытельнымичисламы мы поменяли)
rezist=analogRead(A0);//запись данных с фоторезистора
if (rezist>zadana_r){oo=0; tiem=(millis()+time_zad*1000);} //когда значения с датчика(rezist) больше значения задонова(zadana_r) вклучаем {выклучениярабоут от температуры(oo=0) и запуск таймера (используется замена delay)}
else {oo=1;} // если нет, то вклучаем работу от температуры
if (tiem>millis()) { oo=0; PWM=126;}// если время вклучения таймера больше то {выклучаем работу от температуры и вклучаем вентилятор в пол силы }
else {oo=1;}// если нет, то вклучаем работу от температуры
if(oo==1)//если равно 1, то вклучаем работу от датчика температуры
{ PWM=0; // сбрасываем скорость вентилятора на 0
if (tem>=0){PWM=map(tem,0,50,0,255);}}; // командой tem>=0 убираем отрицательные значения П ригулятора, командой map преобразуем значения П ригулятора в подходяшие значения мотора
analogWrite(11,PWM); // вывод шим на 11 пор
}
6.