Статьи » Разработки
Добавить статью

Подключение датчиков газа и дыма серии MQ к Arduino

2015-04-14 в 00:18 (последнее изменение 2021-04-19 в 23:39)

Продолжаю изучать основы программирования микроконтроллеров. Кто-то скажет что Arduino для школьников, но тут все очень наглядно и понятно, а трудности все же возникают. Простота реализации проектов впечатляет. Можно сделать прототип устройства, потом для удешевления конструкции зашить код в другой микроконтроллер будь то tiny13 либо Mega8. Кстати в эти микроконтроллеры можно загрузить код Arduino. Но об этом немного не сейчас. Сейчас же я покажу как подключить датчик углеводородных газов (пропан, метан, бутан), спирта и дыма MQ-2. Можно таким образом подключить любой из серии MQ. При этом в мониторе последовательного порта (Ctrl+Shift+M) который находиться в Инструментах программы будут выводиться значения с датчика. Можно на свой вкус настроить его работу если не устраивает мой вариант.

датчик mq-2

Для начала схема подключения светодиодов и динамика. Можно использовать резисторы даже 220 Ом. Так они не будут слишком тусклые. Динамик подойдет любой без внутреннего генератора.

схема подключения mq-2

А вот так подключаем сам датчик к Arduino.

датчик MQ-2 подключить к arduino

Код
*/
Скетч для работы с сенсором газа
Источник: http://tehnopage.ru/
*/
int sensorPin = 0; // Пин, на котором у нас висит сенсор газа аналоговый вход 0
int redled = 2;       // Пин с красным светодиодом цифровой выход 2
int yelowled = 3;   // Пин с желтым светодиодом  цифровой выход 3
int greenled = 4;   // Пин с зеленым светодиодом цифровой выход 4
int gas = 0;          // Переменная для хранения значения газового сенсора

void setup() {
  pinMode(greenled, OUTPUT); // Объявляем 2,3 и 4 пины, как выходы для светодиодов
  pinMode(yelowled, OUTPUT);
  pinMode(redled, OUTPUT);
  Serial.begin(9600); // Инициализируем серийный порт будем слать в него данные измерения
/*
  При включении мигаем зеленым, желтым, красным светодиодом
  чтоб получить стабильные показания вся процедура занимает 20 секунд.
  Не самое оптимальное решение можно написать по проще зато так понятнее
*/
  digitalWrite(greenled, HIGH);
  delay(1000);
  digitalWrite(yelowled, HIGH);
  delay(1000);
  digitalWrite(redled, HIGH);
  delay(1000);
  digitalWrite(greenled, LOW);
  delay(1000);
  digitalWrite(yelowled, LOW);
  delay(1000);
  digitalWrite(redled, LOW);
  delay(1000);
  digitalWrite(greenled, HIGH);
  delay(1000);
  digitalWrite(yelowled, HIGH);
  delay(1000);
  digitalWrite(redled, HIGH);
  delay(1000);
  digitalWrite(greenled, LOW);
  delay(1000);
  digitalWrite(yelowled, LOW);
  delay(1000);
  digitalWrite(redled, LOW);
  delay(1000);
  digitalWrite(greenled, HIGH);
  delay(1000);
  digitalWrite(yelowled, HIGH);
  delay(1000);
  digitalWrite(redled, HIGH);
  delay(1000);
  digitalWrite(greenled, LOW);
  delay(1000);
  digitalWrite(yelowled, LOW);
  delay(1000);
  digitalWrite(redled, LOW);
  delay(1000);
  digitalWrite(greenled, HIGH);
  delay(500);
  digitalWrite(yelowled, HIGH);
  delay(500);
  digitalWrite(redled, HIGH);
  delay(500);
  digitalWrite(greenled, LOW);
  digitalWrite(yelowled, LOW);
  digitalWrite(redled, LOW);
 
}
void loop() {
  gas = analogRead(sensorPin); // Получаем значения от датчика газа
  /*
  Далее работаем с данными из переменной gas, если ее значение более 200 но менее 300,
  то включаем зеленый светодиод, желтый и красный светодиоды гасим
  */
  if (gas > 200, gas < 300)
  {
    digitalWrite(greenled, HIGH);
    digitalWrite(yelowled, LOW);
    digitalWrite(redled, LOW);
  }
  /*
  Если значение переменной gas больше 300 но меньше 350, то включаем желтый светодиод и
  проигрываем сигнал на 10 пине, зеленый и красный при этом гасим.
  */
  else if (gas > 300, gas < 350)
  {
    tone(10, 900, 200);
    digitalWrite(greenled, LOW);
    digitalWrite(yelowled, HIGH);
    digitalWrite(redled, LOW);
  }
  /*
  Если значение переменной gas больше 350, проигрываем тоновый сигнал на 10 пине,
  гасим зеленый и желтый светодиод, зажигаем красный.
  */
  else if (gas > 350)
  {
    tone(10, 740, 200);
    digitalWrite(greenled, LOW);
    digitalWrite(yelowled, LOW);
    digitalWrite(redled, HIGH);
  }
  Serial.println(gas); // Пишем в серийный порт
  delay(400); // Повторяем void loop процедуру каждые 0,4 секунды. Это и есть время обновления информации с датчика.
  }

Пояснения в коде буду стараться всегда указывать, так будет понятно что какая функция выполняет. Будут вопросы, пишите в комментариях и на форуме.


Не пропустите обновления! Подписывайтесь на нашу группу Вконтакте.
Так же у нас есть Telegram канал.
Вам понравился наш материал? Поделитесь с коллегами!

Просмотров: 18094. Оценка статьи: 5.0 из 5. Уже оценило 6 читателей

Об авторе - Администратор

More by Администратор

Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]