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

Программирование микроконтроллера Arduino в информационно-управляющих системах. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
Рисунок 49 – Датчик водорода MQ8 компании Амперка [2]
Датчик MQ-8 относится к полупроводниковым приборам. Принцип работы
датчика основан на изменении сопротивления тонкопленочного слоя диоксида
олова SnO2 при контакте с молекулами определяемого газа. Чувствительный
элемент датчика состоит из керамической трубки с покрытием Al2O3 и нанесенного
на неё чувствительного слоя диоксида олова. Внутри трубки проходит
нагревательный элемент, который нагревает чувствительный слой до температуры,
при которой он начинает реагировать на водород. Нагревательный элемент
безопасен при любой концентрации водорода и не способен вызвать воспламенение.
Для работы с датчиком необходима специальная библиотека, предоставляемая
производителем по ссылке: https://github.com/amperka/TroykaMQ
Датчик совместим с макетной платой. Контакты датчика MQ8 (рисунок 50):
А) 1 группа:
1. Сигнальный (S) - Выходной сигнал сенсора. Подключается к аналоговому
входу микроконтроллера.
2. Питание (V) - Питание датчика. Подключается к пину +5В.
101
3. Земля (G) – Подключается к пину GND микроконтроллера.
Б) 2 группа:
1. Сигнальный (E) - Управление питанием нагревателя. Подключается к
цифровому пину Arduino.
2. Питание (H) - Питание нагревателя. Подключается к пину +5В.
3. Земля (G) - Подключается к пину GND микроконтроллера.
Рисунок 50 – Распиновка контактов датчика водорода MQ8
Диапазон измерений: Водород: 100–10000 ppm Характеристики:
1. Напряжение питания нагревателя: 5 В.
2. Напряжение питания датчика: 3,3-5 В.
3. Потребляемый ток: 150 мА.
4. Габариты: 25,4×25,4 мм.
6.3.2 Пример
Подключите контакты датчика MQ9 к плате Arduino: контакты V и H к пину +5В, контакты G – к пину GND, контакт S – к пину А0, контакт E – к пину 11. Также подключите контакты сервопривода к плате. Красный провод – к пину +5В,
102
коричневый – к пину GND, желтый – к пину 3. Сделайте импровизированную шкалу
из бумаги в виде полукруга, закрепите ее так, чтобы ось сервопривода оказалась в
центре шкалы. Закрепите на оси сервопривода короткий рычаг-насадку (идет в комплекте с сервоприводом), который будет выполнять роль стрелки.
Код скетча:
// подключение библиотеки для работы с датчикам MQ8 и библиотеки
// для работы с сервоприводом
#include <TroykaMQ.h>
#include <Servo.h>
//создаем объект для сервопривода
Servo S;
//создаем переменную-буфер для хранения временных значений
int i;
//пин, к которому подключен датчик
#define PIN_MQ8 A0
//пин, к которому подключен нагреватель датчика
#define PIN_MQ8_HEATER 11
// создаем объект для работы с датчиком
// задаем номер пина выходного сигнала и нагревателя
MQ8 mq8(PIN_MQ8, PIN_MQ8_HEATER);
void setup()
{
// открываем последовательный порт
Serial.begin(9600);
// указываем к какому пину подключен сервопривод
S.attach(3);
// переводим сервопривод (стрелку прибора) в крайнее левое положение (0)
S.write(0);
delay(300);
103
// включаем нагреватель
mq8.heaterPwrHigh();
Serial.println("Heated sensor");
}
void loop()
{
// если цикл нагрева завершен
// и калибровка не была совершена
if (!mq8.isCalibrated() && mq8.heatingCompleted()) {
// выполняем калибровку датчика на чистом воздухе
mq8.calibrate();
// выводим сопротивление датчика в чистом воздухе (Ro) в serial-порт
Serial.print("Ro = ");
Serial.println(mq8.getRo());
}
// если цикл нагрева завершен
// и калибровка была совершена
if (mq8.isCalibrated() && mq8.heatingCompleted()) {
// выводим отношения текущего сопротивление датчика
// к сопротивлению датчика в чистом воздухе (Rs/Ro)
Serial.print("Ratio: ");
// выводим значение в ppm
Serial.print(mq8.readRatio());
Serial.print("LPG: ");
Serial.print(mq8.readHydrogen());
Serial.println(" ppm ");
delay(100);
// пропорционально переносим аналоговое значение уровня водорода в воздухе в показания стрелки (сервопривода)
i = map(mq8.readHydrogen(), 0, 1023, 0, 180);
104
//поворачиваем стрелку
S.write(i);
delay(300);
}
}
6.3.3 Практическое задание
Соберите электрическую схему с датчиком MQ8.
Вариант 1: К плате подключается пьезо-динамик. Задайте небольшое
пороговое значение для угарного газа. При достижении этого значения срабатывает
звуковой сигнал. Отметьте пороговое значение на шкале устройства.
Вариант 2: Вместо сервопривода к плате подключается LCD дисплей. На
экран выводится информация о процентном содержании водорода в воздухе.
Сделайте ваш прибор автономным: используйте батарейку Крона и наклемники для
питания устройства.
6.4 Лабораторная работа №14 «Датчик пульса и радио-трансивер
nRF24L01+. Беспроводной кардиограф»
Цель работы: научиться работать с передатчиком nRF24L01+. Научиться применять беспроводную передачу данных на практике.
6.4.1 Краткие теоретческие сведения
Трансивер (рисунок 51) выполнен на базе микросхемы nRF24L01+. Модуль
поддерживает работу со скоростью 250 Кбит/с, 1 Мбит/сек или 2 Мбит/с, и может
работать на 126 независимых каналах, поэтому сразу несколько устройств могут
передавать информацию между собой не мешая друг другу. Для передачи данных
используется собственный, проприетарный протокол.
105
Рисунок 51 – Модуль беспроводной связи nRF24L01+
Модуль подключается к управляющей электронике по протоколу SPI, с
дополнительными управляющими контактами:
1. SCN используется для выбора режима приёма или передачи.
2. IRQ может быть использован для аппаратного прерывания.
Для работы с Arduino используются библиотеки Mirf и RF24. В данной лабораторной работе рассматривается библиотека RF24, доступная по ссылке:
https://github.com/maniacbug/RF24
Распиновка контактов и схема подключения к пинам Arduino приведена на рисунке 52. Пины, отмеченные знаком «*», могут быть любыми и не обязательно должны совпадать с пинами, используемыми в примере лабораторной работы.
Рисунок 52 – Распиновка контактов модуля беспроводной связи nRF24L01+
106
Теперь рассмотрим датчик пульса (рисунок 53).
Рисунок 53 – Датчик пульса компании Амперка [2]
Датчик состоит из двух элементов: мощного светодиода и сенсора яркости.
Пульсация крови вызывает изменение яркости отражённого кожей света, что и
регистрирует сенсор.
На выходе датчик выдает аналоговый сигнал. Для подключения используются
3 контакта: S (сигнал, подключается к аналоговому пину Arduino), V (питание, пин +5В) и GND (земля, пин GND).
6.4.2 Пример
Для выполнения лабораторной работы потребуется два комплекта «Матрешка
Z», датчик сердцебиения и два модуля беспроводной связи nRF24L01+.
Подключите беспроводной модуль связи к плате Arduino №1 согласно распиновке на рисунке 52. Подключите датчик сердцебиения к плате Arduino №1, пин S подключается к пину А0 платы. В конечном устройстве используйте батарейку Крона и наклемники для автономности устройства.
107
Подключите беспроводной модуль связи к плате Arduino №2 согласно распиновке на рисунке 52. Подключите плату №2 к ПК в конечном устройства для передачи информации с датчика по последовательному порту.
Код скетча платы №1 (с датчиком пульса):
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
const uint64_t pipe = 0xF0F1F2F3F4LL; // идентификатор передачи –
//уникальный код шифрования, позволяющий нескольким передатчикам
//определять, какому именно из них предназначается пакет информации
RF24 radio(9, 10); // CE, CSN
void setup(){
Serial.begin(9600);
radio.begin();
delay(2);
radio.setChannel(9); // канал (0-127)
// скорость, RF24_250KBPS, RF24_1MBPS или RF24_2MBPS
// меньше скорость = выше чувствительность приемника.
Radio.setDataRate(RF24_1MBPS);
// мощьность передатчика, RF24_PA_MIN=-18dBm, RF24_PA_LOW=­//12dBm, RF24_PA_MED=-6dBM,
radio.setPALevel(RF24_PA_HIGH);
radio.openWritingPipe(pipe); // открываем канал передачи
}
void loop()
{
int data = analogRead(0); // читаем значение с датчика пульса
radio.write(&data, sizeof(data)); // отправляем данные и указываем размер
108
//пакета информации в байтах
Serial.println(data);
}
Код скетча платы №2 (приемника):
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
const uint64_t pipe = 0xF0F1F2F3F4LL; // идентификатор передачи –
//уникальный код шифрования, позволяющий нескольким передатчикам
//определять, какому именно из них предназначается пакет информации
void setup(){
Serial.begin(9600);
radio.begin();
delay(2);
radio.setChannel(9); // канал (0-127)
// скорость, RF24_250KBPS, RF24_1MBPS или RF24_2MBPS
// меньше скорость, выше чувствительность приемника.
Radio.setDataRate(RF24_1MBPS);
// мощность передатчика RF24_PA_MIN=-18dBm, RF24_PA_LOW=- //12dBm, RF24_PA_MED=-6dBM,
radio.setPALevel(RF24_PA_HIGH);
radio.openReadingPipe(1,pipe); // открываем канал передачи
radio.startListening(); // включаем приемник, начинаем прослушивать канал
}
void loop()
{
int data;
if (radio.available()){ // проверяем наличие новой информации в буфере
109
//обмена
radio.read(&data, sizeof(data)); // считаем данные, указываем сколько байт
//считать
Serial.print(“puls: “);
Serial.println(data);
//выводим значение на экран
}
}
6.4.3 Практическое задание
Вариант 1: Вместо датчика пульса используйте датчик горючих и угарного
газов MQ9 из лабораторной работы №11.
Вариант 2: Вместо датчика пульса используйте датчик шума из лабораторной работы №12.
Вариант 3: Вместо датчика пульса используйте датчик водорода из лабораторной работы №13.
110
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]