Сигнализация превышения температуры
Автор: demidov2121 • Май 19, 2023 • Лабораторная работа • 1,841 Слов (8 Страниц) • 169 Просмотры
Цель работы:
Разработка схемы сигнализации превышения температуры, с возможностью проверки работоспособности системы оповещения с помощью кнопки.
Вариант: №5
Исходные данные:
Организовать При превышении предаварийного значения температуры (+40) подать звуковой сигнал длительностью 20 секунд, включить мигание светодиода (10с\10с) до возвращения температуры к нормальным значениям. При превышении аварийного значения температуры (+50) включить звуковой сигнал типа короткие гудки (5с\5с), включить непрерывное свечение светодиода, до выхода температуры из области аварийных значений. При нажатии кнопки первый – раз имитировать превышение предаварийного значения, при нажатии – второй раз имитировать превышение аварийного значения, на третье нажатие – отключать сигнализацию.
Состав комплектующих для выполнения работы:
№ | Наименование компонента | Тип | Количество |
1 | Микропроцессорный контроллер | Arduino Uno R3 | 1 |
2 | Датчик температуры | TMP36 | 1 |
3 | Кнопка | 1 | |
4 | Резистор | 2 | |
5 | Пьезоэлемент | 1 | |
6 | Светодиод (красный) | 1 | |
7 | Макетная плата | 1 |
[pic 1]
Рисунок 1 – список элементов, сгенерированный средствами Tinkercad
[pic 2]
Рисунок 2 – элементы и их соединения в среде Tinkercad
[pic 3]
Рисунок 3 – электрическая принципиальная схема
Листинг программного кода:
int led = 4; int btm = 2; int spk = 11; int regim = 0; int flag = 0; int i = 0; const int sensorPin = A0; void setup() { pinMode(led, OUTPUT); pinMode(spk, OUTPUT); pinMode(btm, INPUT); } void loop() { if (digitalRead(btm) == HIGH && flag==0) { regim++; flag=1; if (regim>3) { regim=1; // Возвращение на режим 1 noTone(spk); // Выключение звукового сигнала digitalWrite (led, LOW); // Выключение светового сигнала delay(10000); // Задержка }
} if (digitalRead(btm) == LOW && flag == 1) { flag=0; } int reading = analogRead(sensorPin); float voltage = (reading / 1024.0) * 5.0; float temperature = (voltage - 0.5) * 100; if (temperature >= 40 && temperature <= 49.9) { tone(spk,50); // Включение звукового сигнала digitalWrite (led, HIGH); // Включение светового сигнала delay(10000); digitalWrite (led, LOW); delay(10000); noTone(spk); digitalWrite (led, HIGH); delay(10000); digitalWrite (led, LOW); delay(10000); }
if (temperature >= 50) { tone(spk, 50); delay(1000); noTone(spk); delay(1000); digitalWrite (led, HIGH); delay(1000); }
if (regim==1) { // Нажатие на кнопку первый раз for (int i=0; i==0; i++) { tone(spk,50); digitalWrite (led, HIGH); delay(10000); digitalWrite (led, LOW); delay(10000); noTone(spk); digitalWrite (led, HIGH); delay(10000); digitalWrite (led, LOW); delay(10); }
} if (regim==2) { // Нажатие на кнопку второй раз for (int i=0; i==0; i++) { tone(spk, 50); delay(1000); noTone(spk); delay(1000); digitalWrite (led, HIGH); delay(1000); } } if (regim==3) { // Нажатие на кнопку третий раз раз for (int i=0; i==0; i++) { noTone(spk); digitalWrite (led, LOW); delay(10000); } } } |
...