Задача определения уровня некоторого сигнала и выполнения исходя из этого тех или иных действий встречается в технике более чем часто.
Электрический сигнал может изменять свой уровень по разным причинам. Это может быть понижение уровня жидкости в резервуаре (тот же бензин в баке), изменение расстояния до препятствия, изменение температуры, давления и т.д.
Любая система автоматизированного управления так или иначе сталкивается с сигналом переменного уровня и необходимостью обработать его изменение.
Так как датчики в большинстве своём выдают аналоговый сигнал, то для его приёма имеет смысл использовать аналоговые входы контроллера (обозначаются на плате буквой «А» плюс цифра (номер входа) начиная с нуля).
В виду многообразия всевозможных задач, связанных с обработкой изменения уровня сигнала и самих датчиков, а также того, что их решение в конечном счёте сводятся к одному общему принципу, мы для дальнейшего рассмотрения воспользуемся упрощённой моделью автоматизированной системы.
Эта модель состоит из следующих компонентов:
- Микроконтроллер Arduino UNO;
- Потенциометр (имитирует аналоговый датчик);
- Три светодиода различных цветов (имитируют средства индикации или исполнительные механизмы).
Ниже представлена электрическая схема нашей модели с указанием пинов контроллера. Сопротивление всех резисторов 220 Ом.
Принцип работы модели.
Напряжение (до 5 В) передаётся через потенциометр от соответствующего вывода микроконтроллера на его пин A0. В микроконтроллере величина напряжения (читайте уровень сигнала) сопоставляется с целым числом от 0 (отсутствие напряжения) до 1023 (максимальное напряжение). На основании текущего значения этого числа включается один из светодиодов.
Прошивка микроконтроллера Arduino:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// Номера пинов int POT_PIN=A0; int RED_PIN=10; int YELLOW_PIN=12; int GREEN_PIN=11; void setup() { // Конифгурируем пины pinMode(RED_PIN,OUTPUT); pinMode(YELLOW_PIN,OUTPUT); pinMode(GREEN_PIN,OUTPUT); pinMode(POT_PIN,INPUT); } void loop() { // Получаем уровень сигнала с потенциометра int rotation; rotation = analogRead(POT_PIN); if(rotation200)&&(rotation400){ // Высокийкий уровень сигнала (горит зелёный светодиод) digitalWrite(RED_PIN,LOW); digitalWrite(YELLOW_PIN,LOW); digitalWrite(GREEN_PIN,HIGH); } } |
Ниже приведён видеоролик с демонстрацией работы модели.
Несмотря на кажущуюся простоту, подобная схема применима к огромному количеству задач.
Например, можно заменить потенциометр датчиком уровня жидкости, а светодиоды насосом. Или использовать датчик температуры в сочетании с обогревателем и системой охлаждения для поддержания температуры в нужных пределах.
Задач, как было сказано выше, множество, но принцип, по сути, везде один и тот же.
Добавить комментарий