Для программирования платы Arduino Uno от https://utsource.net я использовал Arduino IDE. Сначала надо вставить в код заголовочный файл LiquidCrystal.h:
#include LiquidCrystal.h // Заголовочный файл для ЖКИ
Определение переменных для различных контактов платы Arduino для ЖКИ, излучателя звука и MQ-135. Кроме того, установка порога 250 ppm:
const int rs = 9, en = 8, d4 = 3, d5 = 4, d6 = 5, d7 = 6; // Выводы ЖКИ, подключенные к Arduino.
LiquidCrystal lcd(rs, en, d4, d5, d6, d7); // Функция управления ЖКИ
int buz = 2; // Излучатель звука подключается к выводу 2
int led = 5; // Светодиод подключается к выводу 5
const int aqsensor = A3; // Выход mq-135 подключается к выводу A3 Arduino
int threshold = 250; // Пороговый уровень качества воздуха
Это процедура будет выполняться один раз. Здесь нам нужно установить излучатель звука, светодиод в качестве устройства вывода и MQ-135 в качестве устройства ввода для Arduino Uno. Также инициализируются последовательный UART и ЖКИ.
void setup()
{
pinMode(buz, OUTPUT); // Излучатель звука подключен к Arduino как выходное устройство
pinMode(led, OUTPUT); // ЖКИ подключен к Arduino как выходное устройство
pinMode(aqsensor, INPUT); // MQ135 подключен к Arduino как входное устройство
Serial.begin(9600); // Начало последовательного обмена со скоростью 9600 бод
lcd.clear(); // Очистка ЖКИ
lcd.begin(16, 2); // ЖКИ 16,2
}
Это бесконечный цикл, в котором выполняется чтение данных из датчика MQ-135 и отображение их на экране ЖКИ, а также проверяются условия для включения и выключения светодиода и звукового излучателя.
void loop()
{
int ppm = analogRead(aqsensor); // Считать аналоговые данные с выхода A0MQ135 и сохранить значение в ppm
Serial.print("Air Quality: "); // Вывод сообщения на последовательный монитор
Serial.println(ppm); // Вывод на последовательный монитор значения ppm
lcd.setCursor(0, 0); // Установить курсор ЖКИ в позицию 1 строки 1
lcd.print("Air Qualit: "); // Вывод сообщения на ЖКИ
lcd.print(ppm); // Вывод показаний MQ135
if (ppm > threshold) // ppm выше порогового значения, или нет?
{
lcd.setCursor(1, 1); // Переход сюда, если ppm превышает порог
lcd.print("AQ Level HIGH");
Serial.println("AQ Level HIGH");
tone(led, 1000, 200); // Мигание светодиода: включение на 1000 мс, выключение на 200 мс
digitalWrite(buz, HIGH); // Выключить излучатель звука
}
else
{
digitalWrite(led, LOW); // Переход сюда, если ppm не превышает порога, и выключить светодиод
digitalWrite(buz, LOW); // Выключить излучатель звука
lcd.setCursor(1, 1);
lcd.print("AQ Level Good");
Serial.println("AQ Level Good");
}
delay(500);
}
Материал предоставлен компанией Utsource