В условиях постоянного роста городского населения и ускорения урбанизации проблема загрязнения городской окружающей среды привлекает все больше внимания. Экологический мониторинг является одним из важных средств оценки состояния загрязнения окружающей среды, формирования политики охраны окружающей среды и поддержания здоровья людей. Традиционные методы мониторинга окружающей среды требуют ручного участия, являются дорогостоящими и неэффективными и не могут удовлетворить потребности крупномасштабного мониторинга в реальном времени.
Этот проект основан на панели мониторинга городской среды, разработанной с использованием STM32 для обеспечения мониторинга и сбора данных в реальном времени о шуме городской среды, температуре, влажности и концентрации пыли. Основной чип управления использует STM32F103C8T6, который обладает высокой производительностью и стабильностью и может эффективно обрабатывать данные, собранные различными датчиками; датчик шума окружающей среды использует АЦП для вывода аналоговых сигналов для представления интенсивности шума окружающей среды, что может точно измерять городской шум окружающей среды; датчик температуры и влажности использует DHT1 1. Он обладает преимуществами высокой точности, быстрого реагирования и низкой стоимости и может точно измерять температуру и влажность городской среды; модуль концентрации пыли использует модуль обнаружения концентрации пыли PM2.5 GP2Y10, который может быстро обнаруживать PM2. .5 концентрация пыли в городском воздухе в режиме реального времени, обеспечивающая поддержку данных для контроля загрязнения окружающей среды.
В этом проекте путем выбора и применения различных датчиков и основных управляющих микросхем была успешно разработана вывеска для мониторинга городской среды, которая может отслеживать и записывать такую информацию, как шум, температура, влажность и концентрация пыли в городской среде, в режиме реального времени. , предоставляя информацию для управления охраной городской окружающей среды. Департамент и общественность оказали мощную поддержку данных.
(1) Выбор основного чипа управления: в этом проекте в качестве основного чипа управления выбран STM32F103C8T6. Этот чип обладает высокой производительностью, низким энергопотреблением и богатыми периферийными ресурсами и может соответствовать требованиям системы мониторинга окружающей среды.
(2) Выбор датчика: датчик шума окружающей среды использует АЦП для вывода аналогового сигнала, представляющего интенсивность шума окружающей среды. Здесь вы можете выбрать в качестве датчика обычный конденсаторный микрофон или микрофон MEMS. Датчик температуры и влажности окружающей среды использует DHT11, который представляет собой цифровой датчик температуры и влажности с характеристиками низкой стоимости и быстрого реагирования. Модуль концентрации пыли использует GP2Y10, который представляет собой датчик пыли с лазерным рассеянием, который может обнаруживать концентрацию пыли PM2,5 в воздухе в режиме реального времени.
(3) Способ подключения: Чтобы подключить датчик к основной микросхеме управления, вы можете использовать аналоговый входной канал для подключения выхода датчика шума окружающей среды и подключить датчик DHT11 и датчик GP2Y10 через порт GPIO.
(4) Конструкция источника питания: выберите соответствующие модули питания в соответствии с системными требованиями, чтобы обеспечить стабильное электропитание системы.
(1) Инициализация системы: инициализируйте систему в начале программы, включая инициализацию порта GPIO, инициализацию модуля АЦП и т. д.
(2) Сбор данных датчиков: сбор данных от датчиков шума окружающей среды, температуры, влажности и концентрации пыли через порт GPIO основного чипа управления или модуля АЦП. Для датчиков шума окружающей среды используйте модуль АЦП для преобразования аналоговых сигналов в цифровые величины для датчиков DHT11 и GP2Y10, считывайте их цифровой выход напрямую;
(3) Обработка и отображение данных: обрабатывайте собранные данные датчиков и отображайте результаты в реальном времени через ЖК-дисплей или другие методы вывода. Соответствующие алгоритмы могут быть разработаны для фильтрации, исправления или преобразования данных в читаемый формат. В то же время в соответствии с различными диапазонами данных могут быть установлены соответствующие пороговые значения, позволяющие определить, достигает ли состояние окружающей среды уровня предупреждения.
(4) Сетевая связь: передача данных на терминалы удаленного мониторинга и облачные платформы через сетевой модуль (ESP8266) для удаленного мониторинга и хранения данных. Такие протоколы, как HTTP и MQTT, могут использоваться для передачи данных, чтобы обеспечить безопасность и надежность данных.
(5) Управление системой: Разработайте соответствующий пользовательский интерфейс и метод управления, чтобы пользователи могли удобно управлять этим проектом. Переключение системы, настройку параметров и другие операции можно выполнять с помощью кнопок, сенсорного экрана или беспроводного пульта дистанционного управления.
(1) Датчик шума окружающей среды (выход аналогового сигнала):
Подключите аналоговый выход датчика к одному из входных каналов АЦП (PA0) STM32.
(2) Датчик температуры и влажности окружающей среды (DHT11):
Подключите вывод VCC DHT11 к источнику питания 3,3 В STM32.
Подключите контакт GND DHT11 к контакту GND STM32.
Подключите контакт DATA DHT11 к входному контакту GPIO (PB0) STM32.
(3) Модуль концентрации пыли (GP2Y10):
Подключите вывод VCC GP2Y10 к источнику питания 3,3 В STM32.
Подключите контакт GND GP2Y10 к контакту GND STM32.
Подключите вывод Vo GP2Y10 к входному каналу АЦП (PA1) STM32.
(4) OLED-дисплей (0,96-дюймовый OLED):
Подключите контакт SDA OLED-дисплея к контакту SDA (PB7) шины I2C STM32.
Подключите вывод SCL OLED-дисплея к выводу SCL (PB6) шины I2C STM32.
Подключите контакт VCC OLED-дисплея к источнику питания 3,3 В STM32.
Подключите контакт GND OLED-дисплея к контакту GND STM32.
// Инициализируйте модули GPIO и ADC.
// Включить шину I2C
// Инициализируйте драйвер OLED-дисплея
// Циклически считывать данные датчика и отображать их.
while(1) {
// Считывает аналоговый сигнал датчика шума окружающей среды и преобразует его в цифровое значение.
int noise = read_adc();
// Считайте температуру и влажность датчика DHT11 через данные GPIO.
float temperature, humidity;
read_DHT11(&temperature, &humidity);
// Считайте аналоговый сигнал напряжения концентрации пыли и преобразуйте его в значение концентрации частиц PM2,5.
float dust_level = read_GP2Y10();
// Отображение прочитанных данных на OLED-экране
oled_clear();
oled_print_string("Noise: " + noise + "dB");
oled_print_string("Temp: " + temperature + "C");
oled_print_string("Humidity: " + humidity + "%");
oled_print_string("Dust Level: " + dust_level + "ug/m^3");
// Установите пороговые значения оповещений и поднимайте оповещения по мере необходимости.
if (noise > 70 || temperature > 30 || dust_level > 50) {
beep_alarm();
}
// Подождите некоторое время, прежде чем перейти к следующему циклу.
delay_ms(1000);
}
#include "stm32f1xx_hal.h"
#include "ssd1306.h"
void GPIO_Init(void) {
// Инициализация контактов GPIO
// Установите аналоговый входной контакт датчика шума окружающей среды в режим аналогового входа.
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // Включить часы GPIOA
GPIOA->CRL &= ~GPIO_CRL_MODE0; // Сбросьте бит MODE0 в регистре режима.
GPIOA->CRL &= ~GPIO_CRL_CNF0; // Сбросьте бит CNF0 в регистре конфигурации.
// Установите вывод DATA DHT11 в режим подтягивающего входа.
RCC->APB2ENR |= RCC_APB2ENR_IOPBEN; // Включить часы GPIOB
GPIOB->CRL &= ~GPIO_CRL_MODE0; // Сбросьте бит MODE0 в регистре режима.
GPIOB->CRL &= ~GPIO_CRL_CNF0_0; // Сбросьте бит CNF0 в регистре конфигурации.
GPIOB->CRL |= GPIO_CRL_CNF0_1; // Установите режим подтягивающего ввода
// Инициализируйте другие контакты GPIO, такие как контакт Vo GP2Y10, контакты шины I2C и т. д.
}
void ADC_Init(void) {
// Инициализируйте модуль АЦП
// Включить тактовую частоту АЦП1
RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;
// Конфигурацияканалов АЦП и времени выборки
ADC1->SMPR2 |= ADC_SMPR2_SMP0_2; // Установите канал АЦП на 0-й канал и установите время выборки на 28,5 циклов.
// Конфигурация Режим преобразования АЦП — режим одиночного преобразования.
ADC1->CR2 &= ~ADC_CR2_CONT; // Отключите режим непрерывного преобразования и используйте режим одиночного преобразования.
// КонфигурацияADC преобразует источник триггера в программный триггер.
ADC1->CR2 &= ~ADC_CR2_EXTSEL; // Очистить бит выбора внешнего триггера
ADC1->CR2 |= ADC_CR2_EXTSEL_0; // Установите режим программного триггера
// Включить модуль АЦП
ADC1->CR2 |= ADC_CR2_ADON;
}
void I2C_Init(void) {
// Инициализируйте шину I2C
// Включить часы I2C1
RCC->APB1ENR |= RCC_APB1ENR_I2C1EN;
// Конфигурация Тактовая частота шины I2C
I2C1->CR2 |= 36; // Конфигурация на основе тактовой частоты системы и желаемой скорости шины I2C.
// Конфигурация режима шины I2C и адреса устройства
I2C1->CR1 &= ~I2C_CR1_SMBUS; // Выключить режим SMBus
I2C1->CR1 |= I2C_CR1_PE; // Включить шину I2C
// Конфигурация контактов GPIO шины I2C
// Установите вывод SCL в режим выхода с открытым стоком.
GPIOB->CRH |= GPIO_CRH_MODE6_0;
GPIOB->CRH &= ~GPIO_CRH_MODE6_1;
GPIOB->CRH |= GPIO_CRH_CNF6_0;
GPIOB->CRH |= GPIO_CRH_CNF6_1;
// Установите вывод SDA в режим вывода с открытым стоком.
GPIOB->CRH |= GPIO_CRH_MODE7_0;
GPIOB->CRH &= ~GPIO_CRH_MODE7_1;
GPIOB->CRH |= GPIO_CRH_CNF7_0;
GPIOB->CRH |= GPIO_CRH_CNF7_1;
}
void OLED_Init(void) {
// Инициализируйте драйвер OLED-дисплея
ssd1306_Init(); // использовать SSD1306 Инициализация драйвера
}
void System_Init(void) {
// Инициализируйте компоненты системы
HAL_Init(); // использоватьHALбиблиотека для инициализации,Если нет библиотеки использоватьHAL,可以根据芯片厂商提供的библиотека для инициализации
GPIO_Init(); // Инициализировать GPIO
ADC_Init(); // Инициализируйте модуль АЦП
I2C_Init(); // Инициализируйте шину I2C
OLED_Init(); // Инициализируйте драйвер OLED-дисплея
}
#include "stm32f10x.h"
#include "OLED.h"
#define OLED_CS_GPIO GPIOB
#define OLED_CS_PIN GPIO_Pin_12
#define OLED_DC_GPIO GPIOB
#define OLED_DC_PIN GPIO_Pin_13
#define OLED_RST_GPIO GPIOB
#define OLED_RST_PIN GPIO_Pin_14
void Delay_ms(uint16_t time) {
while(time--) {
uint16_t i = 12000; // Задержка около 1 мс.
while(i--);
}
}
void GPIO_Init(void) {
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ДАВАТЬ ВОЗМОЖНОСТЬ);
// CS-приколоть Конфигурация
GPIO_InitStruct.GPIO_Pin = OLED_CS_PIN;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50 МГц;
GPIO_Init(OLED_CS_GPIO, &GPIO_InitStruct);
// DCприколоть Конфигурация GPIO_InitStruct.GPIO_Pin = OLED_DC_PIN;
GPIO_Init(OLED_DC_GPIO, &GPIO_InitStruct);
// Конфигурация контактов RST
GPIO_InitStruct.GPIO_Pin = OLED_RST_PIN;
GPIO_Init(OLED_RST_GPIO, &GPIO_InitStruct);
}
void SPI_Init(void) {
SPI_InitTypeDef SPI_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
// Конфигурация шины SPI
SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStruct.SPI_CPOL = SPI_CPOL_High;
SPI_InitStruct.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStruct.SPI_NSS = SPI_NSS_Soft;
SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_Init(SPI1, &SPI_InitStruct);
SPI_Cmd(SPI1, ENABLE);
}
void OLED_WriteCmd(uint8_t cmd) {
GPIO_ResetBits(OLED_CS_GPIO, OLED_CS_PIN); // Сигнал выбора чипа понижается, и начинается передача команды данных.
GPIO_ResetBits(OLED_DC_GPIO, OLED_DC_PIN); // Сигнал постоянного тока понижается, что указывает на отправку команды.
SPI_SendData8(SPI1, cmd); // Отправить команду
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
GPIO_SetBits(OLED_CS_GPIO, OLED_CS_PIN); // Сигнал выбора чипа повышается до высокого уровня, чтобы завершить передачу команды данных.
}
void OLED_WriteData(uint8_t data) {
GPIO_ResetBits(OLED_CS_GPIO, OLED_CS_PIN); // Сигнал выбора чипа понижается и начинается передача.
GPIO_SetBits(OLED_DC_GPIO, OLED_DC_PIN); // Сигнал постоянного тока повышается, что указывает на отправку данных.
SPI_SendData8(SPI1,data); // отправлятьданные while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET);
GPIO_SetBits(OLED_CS_GPIO, OLED_CS_PIN); // Сигнал выбора чипа повышается до высокого уровня, чтобы завершить передачу данных.
}
void OLED_Init(void) {
GPIO_Init();
SPI_Init();
GPIO_SetBits(OLED_RST_GPIO, OLED_RST_PIN); // OLED сброс
Delay_ms(100);
GPIO_ResetBits(OLED_RST_GPIO, OLED_RST_PIN);
Delay_ms(100);
GPIO_SetBits(OLED_RST_GPIO, OLED_RST_PIN);
OLED_WriteCmd(0xAE); // Выключить OLED-дисплей
OLED_WriteCmd(0x20); // Установите режим адреса памяти: режим горизонтальной адреса
OLED_WriteCmd(0x10); // Установите старшие четыре бита адреса
OLED_WriteCmd(0xb0); // Установить начальное поведение на 0
OLED_WriteCmd(0xc8); // Установить направление сканирования: сверху вниз.
OLED_WriteCmd(0x00); // Установите младшие восемь бит адреса
OLED_WriteCmd(0x10); // Установите старшие четыре бита адреса
OLED_WriteCmd(0x40); // Установите начальный столбец на 0
OLED_WriteCmd(0x81); // Установить контроль контрастности
OLED_WriteCmd(0xff); // Значение контрастности (0–255)
OLED_WriteCmd(0xa1); // Установить переназначение сегментов
OLED_WriteCmd(0xa6); // Установите режим нормального/обратного отображения: нормальный дисплей.
OLED_WriteCmd(0xa8); // Установить коэффициент мультиплексирования
OLED_WriteCmd(0x3F); // Чем больше значение, тем выше яркость
OLED_WriteCmd(0xa4); // Установить глобальное отображение: включить отображение
OLED_WriteCmd(0xd3); // Установить смещение дисплея
OLED_WriteCmd(0x00); // Без смещения
OLED_WriteCmd(0xd5); // Установить частотный раздел
OLED_WriteCmd(0xf0); // частотное разделение
OLED_WriteCmd(0xd9); // Установить цикл предварительной зарядки
OLED_WriteCmd(0x22); // Чем больше значение, тем слабее яркость
OLED_WriteCmd(0xda); // Установить метод сканирования оборудования COM
OLED_WriteCmd(0x12); // Сканировать по столбцу
OLED_WriteCmd(0xdb); // Установите увеличение напряжения VCOMH
OLED_WriteCmd(0x20); // 1.00*VCC
OLED_WriteCmd(0x8d); // Установите переключатель подкачивающего насоса
OLED_WriteCmd(0x14); // Включите зарядный насос
OLED_WriteCmd(0xaf); // Включите OLED-дисплей
}
void OLED_Puts(uint8_t x, uint8_t y, char *str) {
uint8_t i = 0;
while(str[i] != '\0') {
OLED_SetCursor(x + i * 6, y);
for(uint8_t j = 0; j < 6; j++) {
OLED_WriteData(Font_6x8[(str[i] - 32) * 6 + j]);
}
i++;
}
}
int OLED(void) {
OLED_Init();
OLED_Clear();
}
Плата мониторинга городской среды основана на сборе данных основного чипа управления STM32F103C8T6 и датчиков шума окружающей среды, температуры, влажности и концентрации пыли, осуществляя мониторинг городской среды в режиме реального времени. Система может точно получать такую информацию, как интенсивность шума окружающей среды, температура и влажность, а также концентрация пыли, предоставляя важные справочные данные для городского планирования и защиты окружающей среды.
Используя АЦП для сбора аналогового сигнала, выдаваемого датчиком шума окружающей среды, и в сочетании с алгоритмом обработки система может точно измерять уровень шума в окружающей среде. Датчик температуры и влажности DHT11 предоставляет точные данные о температуре и влажности, которые помогают понять комфорт и изменения в городской среде. Кроме того, с помощью модуля определения концентрации пыли PM2.5 GP2Y10 можно получить информацию о концентрации мелких твердых частиц в городском воздухе для оценки состояния качества воздуха.
Этот городской щит мониторинга окружающей среды может не только своевременно получать данные об окружающей среде, но также имеет функции отображения данных и сигнализации. Через ЖК-дисплей вы можете интуитивно просматривать значения шума, температуры, влажности и концентрации пыли в текущей среде, а также соответствующий статус сигнализации. Когда определенные данные превышают установленный порог, панель мониторинга выдает тревожный сигнал, напоминающий людям о необходимости принятия соответствующих мер.
Разработка и реализация этого проекта оказали важную техническую поддержку городскому планированию и защите окружающей среды. Мониторинг таких показателей, как шум, температура, влажность и концентрация пыли в городской среде в режиме реального времени, позволяет оценить качество городской жизни и улучшить городскую среду, тем самым создавая более пригодную для жизни и здоровую городскую среду. Кроме того, систему также можно использовать в таких областях, как интеллектуальное управление дорожным движением и мониторинг промышленных зон, для повышения городской безопасности и экологической устойчивости.
С развитием Интернета вещей и умных городов рекламные щиты для мониторинга городской среды имеют широкие перспективы применения. Благодаря постоянным технологическим инновациям и анализу данных мы можем лучше понять взаимосвязь между городской средой и жизнью человека и внести положительный вклад в строительство пригодных для жизни, зеленых и устойчивых городов.