Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Пояснительная записка к диплому

.pdf
Скачиваний:
7
Добавлен:
20.07.2022
Размер:
14.57 Mб
Скачать

ПРИЛОЖЕНИЕ 2

ПРИЛОЖЕНИЕ 3

.

Форм

Зона

Поз.

 

Обозначение

Наименование

 

 

 

Кол.

Примеч.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Диоды

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

VD1

SDS142WA

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

VD2

MBRM140

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Конденсаторы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C1

К50-35, 4.7мкФ, 160В, ±20%

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C2

К50-35, 0.22мкФ, 50В, ±20%

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C3

К73-11, 30мкФ, 450В, ±5%

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Микросхемы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DD1,DD2

Transistor Switch VDC 100V 33A

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DD3

AC Dimmer Module, 1 Channel,

1

 

 

 

 

 

 

3.3V/5V, AC 50/60hz, 110V~400V

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DD4

Espressif ESP32 Dev Module

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DD5

LT1936

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DD6, DD7

I2C Module Button

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DD8

DHT22

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DD9

LCD 1602

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DD10

RTC DS3231

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DD11

DS18B20

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DD12

MG90s

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Резисторы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

R1

С2-23, 2 Вт, 10 кОм, ±5%

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

R2

С2-23, 2 Вт, 33 кОм, ±5%

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

R3

С2-23, 2 Вт, 4.7 кОм, ±5%

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Изм

Лист

 

№ докум.

 

Подп.

Дата

 

 

 

 

 

 

 

 

 

Разраб.

 

Л

.

 

 

 

 

Лит.

 

Лист

Листов

Пров.

 

Данилаев М.П.

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

Спецификация

 

 

ИРЭФ-ЦТ, гр.

Н.контр.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Утв.

 

Данилаев М.П

 

 

 

 

 

 

 

 

 

 

 

ПРИЛОЖЕНИЕ 4

#include <ESPAsyncWebServer.h> #include <Thread.h>

#include <iarduino_Metro.h> #include <OneWire.h>

#include <DallasTemperature.h> #include <SPI.h>

#include <DHT.h>

#include <LiquidCrystal_I2C.h> #include <DS1307RTC.h> #include <Wire.h>

#include <Servo.h> #include <RBDdimmer.h> #include <WiFi.h>

LiquidCrystal_I2C lcd(0x27, 16, 2); // инициализация экрана

OneWire oneWire(0); // пин к ds18b20

DallasTemperature sensors(&oneWire); // инициализация ds18b20 DHT dht(27, DHT22); // инициализация DHT22

dimmerLamp dimmer(12, 39); // инициализация диммера

Servo srvlotok; // инициализация серво-привода

AsyncWebServer server(80); // инициализация веб-сервера

const char* ssid = "CloadWar"; // переменная для логина

const char* password = "clbrnokc123"; // переменная для пароля float Temperature; // переменная для температуры

float Humidity; // переменная для влажности uint8_t sum; // переменная для подсчета кнопок i2c bool i; // переменная состояния кнопки 1

bool j; // переменная состояния кнопки 2

int pos; // переменная положения серво-привода int onOff; // перемнная вкл/выкл

char* eggname; // перменная типа яйца

long interval; // переменная времени интервала float Temp1; // переменная оптимальная температура float Temp2; // переменная критическая температура float Hum1; // переменная минимальной влажности float Hum2; // переменная максимальной влажности int daymax; // переменная кол-ва дней инкубации int daytemp; // переменная текущего дня

const byte DS3231 = 0x68; // переменная адреса rtc

Thread onoffinc = Thread(); // вкл/выкл инкубатора Thread selectegg = Thread(); // смена типа яйца Thread rotation = Thread(); // поворот лотка

Thread measure = Thread(); // измерение T&В, отправка данных на lcd

Thread vlaznost = Thread(); // регулировка влажности Thread incday = Thread(); // инкремент дня

Thread peregrev = Thread(); // перегрев с включением вентилятора

Thread pidregulator = Thread(); // пид-регулятор

//снятие с датчика значения температуры

String readDSTemperature() { sensors.requestTemperatures(); Temperature = sensors.getTempCByIndex(0);

if (isnan(Temperature)) { return "--";

}

else {

return String(Temperature);

}

}

//снятие с датчика значения влажности

String readDHTHumidity() { Humidity = dht.readHumidity(); if (isnan(Humidity)) {

return "--";

}

else {

return String(Humidity);

}

}

//считывание типа яйца

String readTypeEgg() {

char* eggname_t = eggname; if (eggname_t == "Ducks") {

eggname_t = "Утка";

}

else {

eggname_t = "Курица";

}

return String(eggname_t);

}

//считывание дня инкубации

String readDayInc() {

int daytemp_t = daytemp; return String(daytemp_t);

}

//считывание состояния инкубации

String readProcess() { char* process_t;

if (daytemp <= daymax) {

process_t = "Инкубация в процессе";

}

else {

process_t = "Конец инкубации";

}

return String(process_t);

}

//последовательный опрос параметров инкубации для веб-клиента

String processor(const String& var){ if(var == "TEMPERATURE"){

return readDSTemperature();

}

else if(var == "HUMIDITY"){ return readDHTHumidity();

}

else if(var == "TYPEEGG"){ return readTypeEgg();

}

else if(var == "DAYINCUB"){ return readDayInc();

}

else if(var == "PROCESS"){ return readProcess();

}

return String();

}

//чтение состояния кнопки вкл/выкл

void ButtonOnOff() {

i = Metro[0].read(KEY_TRIGGER); if(i == HIGH) {

onOff = 1;

}

else {

onOff = 0; daytemp = 1;

}

}

// чтение состояния кнопки выбор типа яйца void ButtonSelectEgg() {

j = Metro[1].read(KEY_TRIGGER); if(j == HIGH) {

eggname = "Fowls"; interval = 60000; Temp1 = 38.00; Temp2 = 40.00; Hum1 = 40.00;

Hum2 = 50.00; daymax = 12;

}

else {

eggname = "Ducks"; interval = 80000; Temp1 = 37.50; Temp2 = 40.00; Hum1 = 45.00;

Hum2 = 50.00; daymax = 11;

}

}

//поворот лотка с яйцами void RotationLotok() {

if (pos == 0) { pos = 45;

srvlotok.write(pos);

}

else if (pos == 45) { pos = 135; srvlotok.write(pos);

}

else {

pos = 45; srvlotok.write(pos);

}

}

//опрос Т&В с выводом на lcd экран void MeasureTempHum() {

sensors.requestTemperatures(); Temperature = sensors.getTempCByIndex(0); Humidity = dht.readHumidity(); lcd.setCursor(0, 0);

lcd.print("T="); lcd.setCursor(2, 0); lcd.print(Temperature); lcd.setCursor(7, 0); lcd.print("C"); lcd.setCursor(8, 0); lcd.setCursor(10, 0); lcd.print("DAY:"); lcd.print(daytemp); lcd.setCursor(0, 1); lcd.print("H="); lcd.setCursor(2, 1); lcd.print(Humidity); lcd.setCursor(7, 1); lcd.print("%"); lcd.setCursor(8, 1); lcd.setCursor(10, 1); lcd.print(eggname);

}

//поддержание влажности

void HumidityChange() {

if(Hum1 <= Humidity && Humidity < Hum2) { digitalWrite(25, LOW);

}

else {

digitalWrite(25, HIGH);

}

}

//перегрев с включением вентилятора void Overheating() {

if(Temp2 < Temperature) { digitalWrite(26, HIGH);

}

else {

digitalWrite(26, LOW);

}

}

//слежение за днем инкубации

void IncDayInc() { Wire.beginTransmission(DS3231); Wire.write(byte(0x00)); Wire.endTransmission();

byte dateTime[7]; int k = 0;

Wire.beginTransmission(DS3231); Wire.requestFrom(DS3231, 7); while(Wire.available())

{

dateTime[k] = Wire.read(); k+=1;

}

Wire.endTransmission();

static int tempdays = dateTime[4]; if (tempdays != daytemp){

daytemp++;

}

}

// функция пид-регулятора

int computePID(float input, float setpoint, float kp, float ki, float kd, float dt, int minOut, int maxOut) {

float err = setpoint - input;

static float integral = 0, prevErr = 0;

integral = constrain(integral + (float)err * dt * ki, minOut, maxOut);

float D = (err - prevErr) / dt; prevErr = err;

return constrain(err * kp + integral + D * kd, minOut, maxOut);

}

// инициализация пид-регулятора с параметрами void PIDregulatorinc() {

int temp_znach = computePID(Temperature, Temp1, 12, 1.2, 30, 500, 0, 100);

dimmer.setPower(temp_znach);

}

void setup(){

Serial.begin(115200); // com порт Wire.begin();

pinMode(27, INPUT); pinMode(25, OUTPUT); pinMode(26, OUTPUT); onOff = 0;

eggname = "Goose"; interval = 60000; pos = 0;

Temp1 = 0;

Temp2 = 0;

Hum1 = 0;

Hum2 = 0; daymax = 0; daytemp = 0; i = LOW;

j = LOW; dht.begin();

dimmer.begin(NORMAL_MODE, ON); dimmer.setPower(0); sensors.begin(); sum=iarduino_Metro_Start(13); srvlotok.attach(14); srvlotok.write(pos);

onoffinc.onRun(ButtonOnOff); // назначаем потоку задачу onoffinc.setInterval(20); // задаём интервал срабатывания,мсек

selectegg.onRun(ButtonSelectEgg);

selectegg.setInterval(20);

rotation.onRun(RotationLotok);

rotation.setInterval(interval);

measure.onRun(MeasureTempHum);

measure.setInterval(1000);

vlaznost.onRun(HumidityChange);

vlaznost.setInterval(1000);

incday.onRun(IncDayInc);

incday.setInterval(60000);

peregrev.onRun(Overheating);

peregrev.setInterval(1000);

pidregulator.onRun(PIDregulatorinc);

pidregulator.setInterval(500);

lcd.init();

lcd.backlight(); lcd.setCursor(0, 0); lcd.print("Connecting to");

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