Рубрики
Без рубрики

Как отслеживать загрязнение воздуха в помещении с помощью малинового пи

Вы когда -нибудь задумывались, что на самом деле в воздухе вы дышите каждый день? Я жил в Пекине в течение нескольких лет … Tagged с помощью Python, программирования, Linux, DataScience.

Вы когда -нибудь задумывались, что на самом деле в воздухе вы дышите каждый день? Я жил в Пекине уже несколько лет И я всегда использую пару воздушных очистителей в моем доме, но насколько хорошо они на самом деле работают? Конечно, у некоторых есть встроенные датчики, но насколько они точны? Что ж, с небольшим питоном, малиновым пи и немного мокси, мы можем найти свои собственные ответы.

Это будет сосредоточено в первую очередь на измерении PM2.5 и PM10 в воздухе и преобразование значений в индекс качества воздуха ( aqi ). Для измерения других вредных химических веществ, таких как диоксид азота (NO2) или угарный газ (CO), см. « Добавление датчиков “Раздел в конце статьи

Предварительные условия

  • Raspberry Pi Настроено, Без головы (Я использовал 3B, но все с USB -портом должно делать все хорошо, хотя встроенный Wi -Fi рекомендуется для переносимости) (~ 35 долларов)
  • SDS011 PM Sensor (~ 15 долларов)
  • Adafruit io Учетная запись (бесплатно)

Настройка Adafruit io

Создайте учетную запись на Adafruit io Анкет Это отличный сайт для сбора потоков данных и отображения их на пользовательских инструментах. После того, как вы создали учетную запись, давайте создадим пару каналов. Нам понадобится три: PM2.5, PM10 и бревно-канал (я назвал мой «Пекин-двое», «Пекин-ден» и «Журналы» соответственно). После этого вы можете либо создать панель панели сейчас, либо позже, и поиграть с тем, как вы хотите отобразить данные. Вот как у меня настроена моя.

Настройте свой Raspberry Pi

Настройка Ваш Raspberry Pi с установщиками на веб -сайте продукта. После настройки с помощью Raspbian или Linux по вашему выбору (этот проект должен быть совместим с большинством распределений, но он был протестирован только на Debian, Raspbian и MacOS), установите следующие зависимости:

  • Python3 (Вы можете пропустить настройку Virtual Env для наших целей)
  • Git

Загрузите код и установить зависимости

SSH в свой Raspberry Pi (или входите в систему, если графический интерфейс установлен и откройте ваш терминал) и загрузите репо в своем домашнем каталоге:

git clone git@github.com:HoukasaurusRex/RaspberryPi-AQIPi.git

Затем установите зависимости от Python:

pip3 install -r requirements.txt

Настройка ENV с клавишами AdaFruit и именами каналов

Получите свое имя пользователя Adafruitio и ключ от приборной панели и добавьте их в свою Env.

echo > .env

Оба Город и Aio_logs Имена каналов, созданные на приборной панели Adafruitio.

Запустите код

Теперь вы можете запустить код. Я люблю использовать экран Чтобы сохранить мой процесс терминала, чтобы быть доступным позже, но вы можете просто запустить его в своей основной оболочке.

screen -S aqipi
cd ~/RaspberryPi-AQIPi
chmod +x run.sh
sh run.sh

В вашем терминале не будет никаких выводов, но вы сможете пойти на свои каналы Adafruitio и начать видеть результаты!

Расположение датчика

Стандартный совет по поиску вашего датчика заключается в том, что он должен быть на улице и на четыре метра над уровнем земли. Это хороший совет для общего мониторинга окружающей среды; Тем не менее, мы не обязательно заинтересованы в общем мониторинге окружающей среды – мы заинтересованы в том, чтобы узнать, что мы дышим.

Выберите место, где вы проводите большую часть своего времени или где вы можете быть особенно заинтересованы в общем качестве воздуха (например, на кухне или в гараже) и поместите свой датчик в безопасное место, где на него не будет влиять чрезмерная влажность или влажность Анкет

Понимание кода

def read_data():
  pm_twofive_data = []
  pm_ten_data = []
  readings = 0

  # This will take 11 data samples and use the built in `statistics` module to upload a median value
  # to filter out excessive data spikes in the readings
  while readings < 11:
    data = []
    for index in range(0, 10):
      datum = ser.read()
      data.append(datum)

    # Convert the readings from bytes to ints and append to the array of data samples
    pm_twofive = int.from_bytes(b''.join(data[2:4]), byteorder='little') / 10
    pm_twofive_data.append(pm_twofive)
    pm_ten = int.from_bytes(b''.join(data[4:6]), byteorder='little') / 10
    pm_ten_data.append(pm_ten)
    readings += 1

    # Take a little break ☕️
    sleep(1)

  # Calculate the AQI from ppm^2 using the US EPA API table detailed in the section below
  # then upload to your AdafruitIO feeds using the Adafruit_IO SDK
  pm_twofive_aqi = calc_aqi('pm_twofive', median(pm_twofive_data))
  send_data('twofive', pm_twofive_aqi)
  pm_ten_aqi = calc_aqi('pm_ten', median(pm_ten_data))
  send_data('ten', pm_ten_aqi)
  return [pm_twofive_aqi, pm_ten_aqi]

Преобразование PPM^2 в AQI

Это конвертируется в US EPA AQI Чтобы использовать другой стандарт, вам может потребоваться настроить формулу, чтобы соответствовать модели AQI вашей страны.

Экспоненциальный отборочный удар

Этот репо реализует политику экспоненциального отступления для повторения подключений после экспоненциально более длительного периода, чтобы учесть общие сетевые ошибки или проблемы с подключением с вашим датчиком.

def exponential_backoff(n):
  return (2 ** n) + (random.randint(0, 1000) / 1000)

Полученные результаты

Первое тестирование на качество воздуха снаружи, убедитесь, что он, кажется, соответствует IQ Air’s Индекс качества воздуха.

После нескольких недель запуска датчика, кажется, датчики на моих очистителях воздуха часто занижали значения PM2,5 на целых 50% и редко коррелировали друг с другом. Raspberry Pi, с другой стороны, отфильтровываясь на скачки данных, кажется, очень разумно реагирует на явления в реальном мире, такие как подъем с открытым AQI и падение линейно, когда очистители остаются на высоких на несколько часов. Я также узнал, сколько различий в барометрических давлениях также увеличит проникновение загрязнения на открытом воздухе в мой дом. Интересно, что плохая кухонная вентиляция также вызывает довольно заметные шипы при загрязнении воздуха в помещении!

Я использую этот датчик уже несколько месяцев и с тех пор чувствовал себя гораздо более уполномоченным управлять качеством воздуха, который я дышу каждый день.

Добавление датчиков

Этот проект может быть легко расширен путем добавления дополнительных датчиков, таких как озон (O3), угарный газ (CO), диоксид азота (NO2) или любые другие вредные загрязнители воздуха, которые могут быть более актуальны для вашей области. Если вы это сделаете, дайте мне знать И я хотел бы сравнить ваши выводы и обновить репозиторий AQIPI, чтобы расширить проект.

Благодарности

Большое спасибо Эндрю Грегори из Raspberrypi.org на его работе, обеспечивая вдохновение для этого проекта.

Вы можете просмотреть эту статью и больше похож на нее, а также зарегистрироваться в моей рассылке, чтобы получить последние сообщения на https://jt.houk.space

Оригинал: “https://dev.to/houkasaurusrex/how-to-track-indoor-air-pollution-with-a-raspberry-pi-3aeo”