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

Создание предупреждения

Этот пост предназначен для начинающих в Linux и схемах. Если вы делали такой проект, как этот, … с меткой электроники, Raspberrypi, программирования, Python.

Этот пост предназначен для начинающих в Linux и схемах. Если вы делали такой проект раньше, возможно, просто пропустите код .

С помощью Covid-19 на подъеме, я подумал, что было бы неплохо построить небольшой прибор, который мог бы сказать мне, как плохо это на улице, без необходимости искать местную статистику. Вот что я использовал:

Общая идея состоит в том, чтобы создать устройство, которое царапает локальные данные об инфекции Covid и включает желтый свет, если ситуация заслуживает предупреждения, и красная, если ситуация ужасна. Мы определим, что эти ситуации означают с точки зрения данных позже.

Поскольку сеть полна грусти, мы будем использовать надежный API Covidtracking.com. Это даст нам данные в государственной гранулярности. В качестве бонуса, если вы живете в США, вы можете легко следовать за ним и заставить один из них отслеживать пандемию в вашем штате.

Давайте начнем с создания PI. Возьмите копию Raspberry Pi Os Lite и Balena Etcher Анкет Распаковывать изображение Raspberry Pi OS. Вставьте свою SD -карту в свой компьютер, запустите Balena и проведите декомпрессированное изображение на свою SD -карту. Вы должны получить SD -карту, у которой теперь есть разделы загрузки и корневища. Поздравляю, вы установили ОС Raspberry Pi для вашей Raspberry Pi Zero W.

Это не очень хорошо приносит нам пользу, если мы не сможем войти в PI, как только он загрузится, поэтому, прежде чем мы выбросим SD -карту с нашего компьютера, давайте Настройка сети Анкет Перейдите к загрузке SD -карты. Создайте пустой файл с именем «SSH» на верхнем уровне загрузочного раздела. Если вы находитесь на Linux, вы можете сделать это в терминале с:

touch ssh

Это позволит нам войти в PI, используя клиент SSH после его загрузки. Далее давайте дадим PI конфигурацию сети для нашей локальной беспроводной сети. Создайте и откройте файл “wpa_supplicant.conf” на верхнем уровне раздела загрузки на SD-карте. Скопируйте и вставьте в следующее содержимое, заменив SSID и PSK на вашу беспроводную сеть:

country=US
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="NETWORK-NAME"
    psk="NETWORK-PASSWORD"
}

Теперь идите дальше и выбросите свою SD -карту и установите ее в Pi Zero W. Power It Up, и она должна появиться в Интернете. Если в вашей локальной сети есть локальный DNS, вы, вероятно, можете подождать несколько минут, а затем войти в систему, используя pi@raspberrypi в качестве адреса. Но для большинства из нас нам нужен IP -адрес. То, как вы определяете IP-адрес нашего Pi Zero W, будет варьироваться в зависимости от вашего местного маршрутизатора, но, как правило, вы можете перейти к 192.168.1.1 в своем веб-браузере, и он приведет вас к странице входа в систему для вашего маршрутизатора. Войдите в систему (если вы не знаете, каковы учетные данные, попробуйте посмотреть в нижней части маршрутизатора или поискать «Имя пользователя и пароль [марка маршрутизатора по умолчанию и пароль». Часто это администратор: администратор или администратор: пароль »). Ищите страницу, которая показывает активную аренду DHCP. Если вы видите один для устройства под названием Raspberrypi, это, вероятно, это! Если вы не видите каких -либо имен хостов, возьмите любой недавно арендованный IP. Попробуйте это с помощью инструкций ниже, и если это не сработает, возьмите следующее самое последнее, и так далее. Если вы все еще не можете получить его, выключите PI и выпустите SD -карту обратно на свой компьютер и убедитесь, что вы правильно поняли учетные данные беспроводной сети.

После того, как у вас будет IP -адрес вашего PI, войдите в него, используя клиент SSH. Если вы в Windows, вы можете выбрать Замазка Анкет Если вы находитесь на Linux, просто откройте терминал и запустите следующее, заменив Raspberrypi на IP PI:

ssh pi@raspberrypi

Пароль по умолчанию для пользователя PI – “Raspberry”. Вы должны изменить это после входа в систему. Сделай это с:

passwd

и измените пароль как предложенное, на все, что вы хотите, пока вы запомните его.

Поскольку наш Pi Zero W является безголовым подразделением, то есть он предоставляет только терминал, а не настольную среду, нам нужно будет выполнять все наши работы по разработке на сессии SSH, без графического интерфейса. Поскольку я уже написал весь код, вы можете пропустить это, если вы просто хотите клонировать репо и не собираетесь пытаться взламывать его своими изменениями. Но если вы собираетесь внести некоторые изменения, возьмите себя редактором терминала. Нано легко начать, но лично я большой поклонник Vim:

sudo apt install vim

Предупреждение: Vim для продвинутых пользователей, к этому требуется. Но это действительно мощно, и как только вы узнаете его, у вас будет отличный инструмент в вашем арсенале, который работает практически на любом ПК.

Мы начнем с написания кода, чтобы получить текущие данные COVID. Чтобы получить представление о том, с чем мы работаем, давайте возьмем данные Covid для штата Нью -Йорк (если вы хотите следить за использованием другого штата, просто замените «Нью -Йорк» на код вашего штата в URL):

wget https://api.covidtracking.com/v1/states/ny/daily.json

Это загружает файл под названием «Daily.json» в текущий каталог. Давайте откроем это и посмотрим, с чем мы работаем:

Хорошо. Как превратить это в индикатор? Я решил использовать показатель позитива в отношении тестирования, потому что его было легко рассчитать, и, для моей области, тестирование стабилировано, то есть, если вы хотите провести тест на Covid, вы можете получить его. Это означает, что уровень позитива должен Грубо отслеживать любые розыгрыши или перепуты в протекающих инфекциях в целом. Существуют более надежные способы отслеживания вспышки, таких как проверка смертности, госпитализации и т. Д., Но они более сложны и требуют отслеживания данных с течением времени. На данный момент я решил не делать этого.

Наш уровень позитива может быть рассчитана с помощью:

positivity rate = new positive cases / total new cases

Произвольно я решил, что уровень позитива 2% включит желтый свет, а позитивность 5% будет включать красный.

Давайте напишем код.

Мы будем использовать Python, потому что мы не ненавидим себя. Python отлично подходит для крошечных небольших проектов, подобных этому. Он быстро развивается и требует очень мало разработчика – почти все, что вам нужно сделать, может быть сделано с импортированной библиотекой. В этом случае мы собираемся использовать gpiozero Пакет для управления светодиодами, Запросы Чтобы получить веб -данные и json проанализировать это. gpiozero требует некоторых зависимостей. Давайте установим их:

apt install pigpiod python-pip
pip install gpiozero

И теперь мы можем начать работать над нашим кодом. Как я уже сказал, я использую Vim для редактирования, но, пожалуйста, используйте все, что вам удобно.

vim covidwarn.py

Мы начнем с импорта модулей, которые нам понадобятся. Поместите это в верхнюю часть файла:

from gpiozero import LED
from time import sleep
import requests
import json

Затем напишите функцию, чтобы получить данные из API Covidtracking и вычислить уровень позитива.

def get_data():
    r = requests.get('https://api.covidtracking.com/v1/states/ny/current.json', allow_redirects=True)
    j = json.loads(r.content)

    positivity_rate = float(j["positiveIncrease"]) / float(j["totalTestResultsIncrease"])

    return positivity_rate

Здесь вызов запроса. r Анкет С тех пор r это просто необработанная строка, это не очень удобно для анализа. Таким образом, мы загружаем его как объект JSON и превращаем его в карту, чтобы мы могли получить доступ к различным частям данных, предоставляя ключ, связанный с ним. Ключ - это всего лишь строка, которая представлена до значения в строке - в этом случае мы используем ключи «положительный показатель», чтобы получить количество новых положительных тестов, и «TotalTestResultSIncrease», чтобы получить общее количество новых тестов. Если вы смотрите на оригинальную загрузку из WGET, вы увидите эти строки, и вы увидите, что некоторые цифры приходят за ними.

Теперь у нас есть функция, которая получает данные из Интернета, вычисляет уровень позитива и возвращает ее. Далее следует создать что -то, что будет использовать это для освещения светодиодов.

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

if __name__ == '__main__':
    yellow_led = LED(2)
    red_led = LED(3)

    warning_threshold = 0.02
    danger_threshold = 0.05
    seconds_in_day = 86400

    yellow_led.off()
    red_led.off()

Мы устанавливаем светодиоды на контактах GPIO 2 и 3 и устанавливаем наши желтые и красные пороговые значения на 0,02 и 0,05. Мы также настроили переменную second_in_day – Мы собираемся использовать это в качестве нашего опроса. Другими словами, мы собираемся проверять статус данных COVID один раз в день. Это самое разумное, что нужно сделать, так как данные COVID из обновлений API отслеживания COVID один раз в день в 4 часа дня EST. Давайте сделаем нашу опрос:

while True:
    p_rate = get_data()

    print("Positivity rate: %f" % p_rate)

    sleep(seconds_in_day)

Это будет выполнять вечность, выводя коэффициент позитива в ковиде один раз в день. Теперь давайте сделаем светодиоды работать на этих данных. Поместите это между заявлением печати и соном:

if p_rate > danger_threshold:
    yellow_led.off()
    red_led.on()
elif p_rate > warning_threshold:
    red_led.off()
    yellow_led.on()
else:
    red_led.off()
    yellow_led.off()

Это включает желтый светодиод, если мы пройдем по порогу предупреждения и включили красный светодиод, если мы пройдем порог опасности. Только один из светодиодов будет зажжена за раз. Если мы ниже оба порога, ни один из светодиодов не будет горит.

Теперь все, что осталось, – это подключить светодиоды. Давайте настроим схемы.

Светодиоды представляют собой основные электронные компоненты, называемые диодами, которые пропускают ток только в одном направлении. Светодиод обозначает световой диод – они просто являются типом диода, который делает видимый свет при прохождении тока. Чтобы подключить ваш диод в правильном направлении (то есть с правильной полярностью), чтобы он фактически выражал свет, вам нужно знать, какая его сторона положительная, а какая сторона отрицательная. Для светодиода сквозной лунки длинная нога светодиода является положительной стороной, а короткая нога-негативная (их называют сквозной сквозной, потому что, когда они устанавливаются в плате, ноги проходят через отверстия в доске).

Мы установим светодиоды в макет для удобства. Если вы решите сделать этот проект постоянным, вы можете подумать о пайке схемы вместе и включить все это в корпус (возможно, в чем -то, что рассеяет свет! Светодиоды могут зажечь довольно большое пространство, если они должным образом рассеяны). Настройте свой макет

Если вы новичок в хлебных щитах, ключевой задачей является то, что каждый ряд макета непрерывна – вы можете думать об этом как о проводе, в который вы получаете для подключения электронных компонентов. Эти ряды заканчиваются непосредственно перед двумя вертикальными рельсами с обеих сторон, которые условно являются мощностью (красный) и земли (синий). Вертикальные рельсы отделены, но также и каждый непрерывный.

То, что мы делаем, – это сниматься с положительной рельсы макетины, прокормив его через резистор, затем к светодиоду, а затем до отрицательного рельса макета. Обратите внимание, что каждый светодиод питается отдельной рельсовой рельсовой рельсом – это важно позже! Нам нужно, чтобы они были отдельными, чтобы мы могли контролировать их каждый отдельно. Резистор выступает в качестве ограничителя тока для светодиода, обеспечивая некоторую уверенность в том, что светодиод не получит столько тока, что он сгорел. На практике булавки PI GPIO (я считаю) внутренне ограничены, так что это на самом деле не требуется. Но это хорошая практика в любое время, когда вы используете светодиоды или чувствительную электронику. Если вам любопытно, как выбрать правильный резистор для работы, проверьте Закон ома Анкет

Теперь, когда установлена макета, нам нужен способ его питания. Поскольку мы хотим иметь возможность контролировать, когда светодиоды получат питание, мы собираемся подключить положительные рельсы макета до пары булавок PI GPIO. Эти булавки GPIO можно включать и выключаться в программном обеспечении, что делает их идеальными для этого и многих других проектов взлома электроники. Мы собираемся использовать булавки 2 и 3, так как это то, что мы написали в нашем коде Python.

Кредит Pinout.xyz

Поскольку пины PI не помечены, вы должны посмотреть на Pinout.xyz Чтобы помочь вам ориентироваться и найти правильные булавки. После того, как вы это сделаете, подключите контакт 2 к положительному рельсу, питающему желтым светодиодом, и штифта 3 к положительному рельсу, кормившего красное светодиод. Подключите заземленный штифт к земле, которую используете на макете.

Теперь запустите код! Если вы все сделали правильно, ваши светодиоды должны отключаться, когда код впервые запускается, и после рассчитываемого уровня позитива ковида вы должны увидеть соответствующий светодиодный свет (если есть). Если хотите, вы можете подключить третий зеленый светодиод, это укажет на то, что уровень позитива ниже 2%. Это осталось в качестве упражнения для читателя.

Оригинал: “https://dev.to/dizzyspi/making-a-covid-warning-light-33f2”